From 81e13234bd1bbbf44c0af18835fe566916e6f26b Mon Sep 17 00:00:00 2001 From: philip-ellis-sp Date: Tue, 16 Aug 2022 16:59:27 -0400 Subject: [PATCH] created --- .gitignore | 20 + README.md | 41 + babel.config.js | 3 + blog/2019-05-28-first-blog-post.md | 12 + blog/2019-05-29-long-blog-post.md | 44 + blog/2021-08-01-mdx-blog-post.mdx | 20 + .../docusaurus-plushie-banner.jpeg | Bin 0 -> 96122 bytes blog/2021-08-26-welcome/index.md | 25 + blog/authors.yml | 17 + docs/idn_docs/docs/authentication.md | 460 + .../commands/account_create.md | 218 + .../commands/account_delete.md | 47 + .../commands/account_discover.md | 347 + .../commands/account_enable.md | 70 + .../commands/account_list.md | 145 + .../commands/account_read.md | 91 + .../commands/account_unlock.md | 53 + .../commands/account_update.md | 87 + .../commands/entitlement_list.md | 90 + .../commands/entitlement_read.md | 64 + .../commands/test_connection.md | 60 + .../getting_started/cli_common_commands.md | 17 + .../getting_started/cli_getting_started.md | 46 + .../getting_started/cli_test_build_deploy.md | 116 + .../getting_started/connector_spec.md | 65 + .../getting_started/example_connectors.md | 5 + .../getting_started/postman_collection.md | 5 + .../custom_connectors/in_depth/api_calls.md | 35 + .../custom_connectors/in_depth/debugging.md | 77 + .../in_depth/error_handling.md | 81 + .../custom_connectors/in_depth/linting.md | 23 + .../custom_connectors/in_depth/logging.md | 170 + .../custom_connectors/in_depth/rate_limits.md | 88 + .../custom_connectors/in_depth/testing.md | 209 + .../docs/custom_connectors/overview.md | 23 + docs/idn_docs/docs/getting_started.md | 71 + .../account_create/account_create_idn.png | Bin 0 -> 40144 bytes .../account_create/create_password_idn.png | Bin 0 -> 42958 bytes .../commands/account_create/testing1.png | Bin 0 -> 136151 bytes .../commands/account_create/testing2.png | Bin 0 -> 110551 bytes .../commands/account_create/testing3.png | Bin 0 -> 96328 bytes .../account_list/account_list_idn.png | Bin 0 -> 132399 bytes .../account_read/account_read_idn.png | Bin 0 -> 134399 bytes .../discover_schema/discover_schema_idn1.png | Bin 0 -> 96053 bytes .../discover_schema/discover_schema_idn2.png | Bin 0 -> 82379 bytes .../discover_schema/discover_schema_idn3.png | Bin 0 -> 38337 bytes .../discover_schema/discover_schema_idn4.png | Bin 0 -> 124067 bytes .../entitlement_list/entitlement_list_idn.png | Bin 0 -> 495919 bytes .../test_connection/test_command_idn.png | Bin 0 -> 134913 bytes .../custom_connectors/in_depth/debugging1.png | Bin 0 -> 68592 bytes .../custom_connectors/in_depth/debugging2.png | Bin 0 -> 8549 bytes .../custom_connectors/in_depth/testing1.png | Bin 0 -> 16727 bytes .../custom_connectors/in_depth/testing2.png | Bin 0 -> 49415 bytes .../new_connectivity_diagram.png | Bin 0 -> 51357 bytes .../old_connectivity_diagram.png | Bin 0 -> 82133 bytes .../docs/img/http-client-identity-now.png | Bin 0 -> 71376 bytes docs/idn_docs/docs/img/sp-config-export.png | Bin 0 -> 244005 bytes docs/idn_docs/docs/img/sp-config-import.png | Bin 0 -> 228155 bytes .../docs/img/transforms/account_schema.png | Bin 0 -> 192134 bytes .../docs/img/transforms/account_summary.png | Bin 0 -> 204282 bytes .../configuring_transform_behavior_1.png | Bin 0 -> 70619 bytes .../configuring_transform_behavior_2.png | Bin 0 -> 20394 bytes .../docs/img/transforms/create_source.png | Bin 0 -> 105048 bytes .../img/transforms/how_transforms_work_1.png | Bin 0 -> 24504 bytes .../img/transforms/how_transforms_work_2.png | Bin 0 -> 31355 bytes .../img/transforms/how_transforms_work_3.png | Bin 0 -> 48584 bytes .../img/transforms/how_transforms_work_4.png | Bin 0 -> 53348 bytes .../docs/img/transforms/identity_profile.png | Bin 0 -> 55746 bytes .../lower/lower_transform_input.png | Bin 0 -> 43239 bytes .../docs/img/transforms/mappings_tab.png | Bin 0 -> 341114 bytes .../docs/img/transforms/sailpoint_logo.png | Bin 0 -> 15416 bytes .../temporary_password_attribute_mapping.png | Bin 0 -> 53093 bytes .../img/transforms/what_are_transforms_1.png | Bin 0 -> 23114 bytes .../docs/img/user-web-app-identity-now.png | Bin 0 -> 93703 bytes docs/idn_docs/docs/sp_config.md | 576 + .../docs/standard_collection_parameters.md | 143 + .../building_transforms.md | 222 + .../creating_your_first_transform.md | 206 + .../operations/account_attribute.md | 124 + .../operations/base64_decode.md | 84 + .../operations/base64_encode.md | 85 + .../operations/concatenation.md | 95 + .../operations/conditional.md | 102 + .../operations/date_compare.md | 112 + .../operations/date_format.md | 94 + .../operations/date_math.md | 171 + .../operations/decompose_diacritial_marks.md | 79 + .../operations/e164_phone.md | 122 + .../operations/first_valid.md | 148 + .../operations/generate_random_string.md | 96 + .../operations/get_end_of_string.md | 78 + .../get_reference_identity_attribute.md | 75 + .../operations/identity_attribute.md | 68 + .../operations/index_of.md | 78 + .../operations/iso_3166.md | 92 + .../operations/last_index_of.md | 78 + .../operations/left_pad.md | 90 + .../transform_operations/operations/lookup.md | 86 + .../transform_operations/operations/lower.md | 81 + .../operations/name_normalizer.md | 93 + .../operations/random_alphanumeric.md | 60 + .../operations/random_numeric.md | 60 + .../operations/reference.md | 78 + .../operations/replace.md | 84 + .../operations/replace_all.md | 92 + .../operations/right_pad.md | 89 + .../transform_operations/operations/rule.md | 69 + .../transform_operations/operations/split.md | 83 + .../transform_operations/operations/static.md | 89 + .../operations/substring.md | 87 + .../transform_operations/operations/trim.md | 81 + .../transform_operations/operations/upper.md | 81 + .../operations/username_generator.md | 188 + .../operations/uuid_generator.md | 42 + .../temporary_password_usecase.md | 0 .../transform_operations.md | 94 + docs/idn_docs/intro.md | 47 + docs/idn_docs/specs/README.md | 1 + ...-request-dynamic-approval-event-trigger.md | 93 + .../access-request-postapproval-trigger.md | 27 + ...ccess-request-preapproval-event-trigger.md | 90 + .../account-aggregation-completed.md | 51 + ...dentity-attribute-changed-event-trigger.md | 24 + .../identity-created-event-trigger.md | 24 + .../img/access-request-postapproval-path.png | Bin 0 -> 31801 bytes .../access-request-preapproval-failure.png | Bin 0 -> 38794 bytes .../img/access-request-preapproval-path.png | Bin 0 -> 62826 bytes .../img/aggregation-delete-threshold.png | Bin 0 -> 137782 bytes .../img/aggregation-diagram.png | Bin 0 -> 102730 bytes .../img/aggregation-enable-scheduling.png | Bin 0 -> 109838 bytes .../img/attributes-highlight.png | Bin 0 -> 126096 bytes .../identity-created-attributes-highlight.png | Bin 0 -> 126096 bytes .../img/identity-created-path.png | Bin 0 -> 99607 bytes .../img/provisioning-access-request-2.png | Bin 0 -> 74802 bytes ...visioning-access-request-certification.png | Bin 0 -> 88971 bytes .../img/provisioning-access-request.png | Bin 0 -> 91618 bytes .../img/provisioning-action.png | Bin 0 -> 57066 bytes .../img/provisioning-lifecycle-management.png | Bin 0 -> 71844 bytes .../img/provisioning-role-membership.png | Bin 0 -> 72618 bytes .../img/saved-search-path.png | Bin 0 -> 83890 bytes .../img/trigger-path.png | Bin 0 -> 117068 bytes .../img/va-cluster-failed.png | Bin 0 -> 32303 bytes .../img/va-cluster-healthy-source.png | Bin 0 -> 39096 bytes .../img/va-cluster-unhealthy-source.png | Bin 0 -> 40895 bytes .../img/va-cluster-warning.png | Bin 0 -> 22433 bytes .../provisioning-action-completed-trigger.md | 111 + .../saved-search-completed.md | 28 + .../source-created-trigger.md | 21 + .../source-deleted-trigger.md | 21 + .../source-updated-trigger.md | 21 + .../va-cluster-status-change-event-trigger.md | 44 + .../identity-deleted-event-trigger.md | 23 + .../img/identity-deleted-path.png | Bin 0 -> 96171 bytes .../source-account-created-trigger.md | 18 + .../source-account-deleted-trigger.md | 18 + .../source-account-updated-trigger.md | 23 + .../event-triggers-filtering-events.md | 165 + .../triggers/event-triggers-overview.md | 20 + ...triggers-preparing-a-subscriber-service.md | 34 + ...esponding-to-a-request-response-trigger.md | 172 + ...event-triggers-subscribing-to-a-trigger.md | 27 + .../event-triggers-testing-triggers.md | 77 + .../triggers/event-triggers-trigger-types.md | 20 + docs/idn_docs/triggers/img/activity-log.png | Bin 0 -> 79457 bytes .../triggers/img/available-triggers.png | Bin 0 -> 373340 bytes .../triggers/img/debug-connection.png | Bin 0 -> 419300 bytes .../idn_docs/triggers/img/jsonpath-editor.png | Bin 0 -> 117187 bytes docs/idn_docs/triggers/img/slack-workflow.png | Bin 0 -> 84663 bytes .../triggers/img/test-subscription.png | Bin 0 -> 76461 bytes docs/idn_docs/triggers/img/ui-filter.png | Bin 0 -> 88033 bytes docs/idn_docs/triggers/img/webhook-site.png | Bin 0 -> 196192 bytes .../triggers/img/what-are-triggers.png | Bin 0 -> 105467 bytes docs/idn_docs/triggers/img/zapier-webhook.png | Bin 0 -> 130950 bytes .../access-profiles.tag.mdx | 54 + .../access-request-approvals.tag.mdx | 36 + .../access-request-recommendations.api.mdx | 79 + .../access-requests.tag.mdx | 32 + .../account-activities.tag.mdx | 15 + .../account-aggregations.tag.mdx | 15 + docs/sailpoint-api-beta/accounts.tag.mdx | 15 + .../activate-campaign.api.mdx | 92 + ...quest-recommendations-ignored-item.api.mdx | 79 + ...est-recommendations-requested-item.api.mdx | 79 + ...equest-recommendations-viewed-item.api.mdx | 79 + ...quest-recommendations-viewed-items.api.mdx | 79 + .../add-tag-to-object.api.mdx | 81 + .../add-tags-to-many-objects.api.mdx | 81 + .../sailpoint-api-beta/admin-reassign.api.mdx | 91 + .../approval-summary.api.mdx | 75 + .../approve-approval-item.api.mdx | 67 + .../approve-request.api.mdx | 79 + .../bulk-approve-approval-item.api.mdx | 67 + .../bulk-delete-access-profiles.api.mdx | 99 + ...bulk-delete-notification-templates.api.mdx | 75 + .../bulk-reject-approval-item.api.mdx | 67 + .../bulk-update-provisioning-policies.api.mdx | 88 + .../cancel-access-request.api.mdx | 88 + .../cancel-workflow-execution.api.mdx | 87 + .../certification-campaigns.tag.mdx | 15 + .../sailpoint-api-beta/certifications.tag.mdx | 15 + .../check-connection.api.mdx | 76 + .../common-access-bulk-update-status.api.mdx | 79 + ...are-identity-snapshots-access-type.api.mdx | 83 + .../compare-identity-snapshots.api.mdx | 87 + .../complete-campaign.api.mdx | 92 + .../complete-invocation.api.mdx | 75 + .../complete-work-item.api.mdx | 67 + .../completed-work-items.api.mdx | 67 + .../connector-rule-management.tag.mdx | 15 + docs/sailpoint-api-beta/connectors.tag.mdx | 15 + .../count-completed-work-items.api.mdx | 67 + .../count-work-items.api.mdx | 67 + .../create-access-profile.api.mdx | 149 + .../create-access-request.api.mdx | 112 + .../sailpoint-api-beta/create-account.api.mdx | 76 + .../create-campaign-template.api.mdx | 171 + .../create-campaign.api.mdx | 163 + .../create-common-access.api.mdx | 75 + .../create-connector-rule.api.mdx | 96 + ...reate-custom-password-instructions.api.mdx | 67 + .../create-identity-profile.api.mdx | 108 + .../create-notification-template.api.mdx | 75 + .../create-oauth-client.api.mdx | 77 + .../create-password-org-config.api.mdx | 55 + .../create-password-sync-group.api.mdx | 67 + .../create-personal-access-token.api.mdx | 87 + ...e-potential-role-provision-request.api.mdx | 91 + .../create-provisioning-policy.api.mdx | 88 + docs/sailpoint-api-beta/create-role.api.mdx | 189 + .../create-schema-attribute.api.mdx | 77 + docs/sailpoint-api-beta/create-schema.api.mdx | 91 + .../create-search-attribute-config.api.mdx | 88 + .../sailpoint-api-beta/create-segment.api.mdx | 95 + .../create-service-desk-integration.api.mdx | 147 + .../create-sod-policy.api.mdx | 92 + docs/sailpoint-api-beta/create-source.api.mdx | 156 + .../create-subscription.api.mdx | 109 + .../create-transform.api.mdx | 68 + .../create-verified-from-address.api.mdx | 75 + .../create-workflow.api.mdx | 119 + .../custom-password-instructions.tag.mdx | 19 + .../delete-access-profile.api.mdx | 79 + .../sailpoint-api-beta/delete-account.api.mdx | 88 + .../delete-campaign-template-schedule.api.mdx | 75 + .../delete-campaign-template.api.mdx | 75 + .../delete-campaigns.api.mdx | 91 + .../delete-connector-rule.api.mdx | 72 + ...elete-custom-password-instructions.api.mdx | 79 + .../delete-identity-profile.api.mdx | 88 + .../delete-identity-profiles.api.mdx | 81 + .../delete-oauth-client.api.mdx | 89 + .../delete-password-sync-group.api.mdx | 67 + .../delete-personal-access-token.api.mdx | 91 + .../delete-provisioning-policy.api.mdx | 88 + docs/sailpoint-api-beta/delete-role.api.mdx | 76 + .../delete-schema-attribute.api.mdx | 80 + .../delete-schema-attributes.api.mdx | 77 + docs/sailpoint-api-beta/delete-schema.api.mdx | 87 + .../delete-search-attribute-config.api.mdx | 76 + .../delete-segment-by-id.api.mdx | 79 + .../delete-service-desk-integration.api.mdx | 87 + .../delete-sod-policy-by-id.api.mdx | 88 + .../delete-sod-policy-schedule-by-id.api.mdx | 88 + docs/sailpoint-api-beta/delete-source.api.mdx | 89 + .../delete-subscription.api.mdx | 87 + ...elete-tagged-object-by-type-and-id.api.mdx | 75 + .../delete-transform.api.mdx | 56 + .../delete-verified-from-address.api.mdx | 87 + .../delete-workflow.api.mdx | 75 + .../disable-account.api.mdx | 88 + .../download-custom-violation-report.api.mdx | 88 + .../download-default-violation-report.api.mdx | 88 + ...role-insights-entitlements-changes.api.mdx | 71 + ...oad-role-mining-potential-role-zip.api.mdx | 71 + .../download-source-accounts-schema.api.mdx | 87 + ...ownload-source-entitlements-schema.api.mdx | 87 + .../edit-entitlements-potential-role.api.mdx | 79 + .../sailpoint-api-beta/enable-account.api.mdx | 88 + .../entitlements-bulk-update.api.mdx | 85 + docs/sailpoint-api-beta/entitlements.tag.mdx | 68 + .../export-identity-profiles.api.mdx | 103 + .../export-outliers-zip.api.mdx | 76 + ...t-role-mining-potential-role-async.api.mdx | 71 + ...-role-mining-potential-role-status.api.mdx | 71 + .../export-role-mining-potential-role.api.mdx | 71 + .../forward-request.api.mdx | 91 + .../generate-campaign-template.api.mdx | 79 + .../generate-digit-token.api.mdx | 67 + .../generate-identity-preview.api.mdx | 92 + .../get-access-profile.api.mdx | 113 + .../get-access-request-config.api.mdx | 87 + ...uest-recommendations-ignored-items.api.mdx | 75 + ...st-recommendations-requested-items.api.mdx | 75 + ...quest-recommendations-viewed-items.api.mdx | 75 + .../get-account-activity.api.mdx | 99 + .../get-account-aggregation-status.api.mdx | 83 + .../get-account-entitlements.api.mdx | 88 + docs/sailpoint-api-beta/get-account.api.mdx | 76 + .../get-active-campaigns.api.mdx | 119 + .../get-campaign-reports-config.api.mdx | 64 + .../get-campaign-reports.api.mdx | 76 + .../get-campaign-template-schedule.api.mdx | 147 + .../get-campaign-template.api.mdx | 123 + docs/sailpoint-api-beta/get-campaign.api.mdx | 87 + .../get-client-log-configuration.api.mdx | 75 + .../get-client-status.api.mdx | 87 + .../get-common-access.api.mdx | 75 + .../get-connector-list.api.mdx | 88 + .../get-connector-rule-list.api.mdx | 76 + .../get-connector-rule.api.mdx | 64 + .../get-custom-password-instructions.api.mdx | 79 + ...-default-identity-attribute-config.api.mdx | 96 + ...get-entitlement-changes-identities.api.mdx | 71 + ...lement-distribution-potential-role.api.mdx | 71 + .../get-entitlement.api.mdx | 93 + .../get-entitlements-potential-role.api.mdx | 75 + docs/sailpoint-api-beta/get-events.api.mdx | 127 + ...cluded-entitlements-potential-role.api.mdx | 75 + .../get-identities-potential-role.api.mdx | 71 + ...ity-certification-item-permissions.api.mdx | 87 + ...entity-certification-pending-tasks.api.mdx | 87 + ...identity-certification-task-status.api.mdx | 87 + .../get-identity-profile.api.mdx | 104 + .../get-identity-snapshot-summary.api.mdx | 83 + .../get-identity-snapshot.api.mdx | 91 + docs/sailpoint-api-beta/get-identity.api.mdx | 79 + .../get-latest-outlier-snapshots.api.mdx | 80 + .../get-managed-cluster.api.mdx | 99 + .../get-managed-clusters.api.mdx | 107 + .../get-message-catalogs.api.mdx | 79 + .../sailpoint-api-beta/get-mfa-config.api.mdx | 75 + .../get-notification-preference.api.mdx | 76 + .../get-notification-template.api.mdx | 75 + ...get-notifications-template-context.api.mdx | 79 + .../get-oauth-client.api.mdx | 89 + .../sailpoint-api-beta/get-org-config.api.mdx | 89 + .../get-outlier-snapshots.api.mdx | 84 + docs/sailpoint-api-beta/get-outliers.api.mdx | 80 + .../get-password-change-status.api.mdx | 83 + ...et-password-dictionary-file-status.api.mdx | 48 + .../get-password-dictionary.api.mdx | 104 + .../get-password-org-config.api.mdx | 55 + .../get-password-sync-group.api.mdx | 79 + .../get-password-sync-groups.api.mdx | 67 + .../get-potential-role-applications.api.mdx | 71 + .../get-potential-role-summaries.api.mdx | 75 + .../get-potential-role-summary.api.mdx | 75 + .../get-provisioning-policy.api.mdx | 88 + .../get-public-identity-config.api.mdx | 67 + .../get-recommendations-config.api.mdx | 71 + .../get-recommendations.api.mdx | 95 + .../get-role-assigned-identities.api.mdx | 75 + .../get-role-insight.api.mdx | 79 + ...role-insights-current-entitlements.api.mdx | 71 + ...role-insights-entitlements-changes.api.mdx | 75 + .../get-role-insights-requests.api.mdx | 71 + .../get-role-insights-summary.api.mdx | 71 + .../get-role-insights.api.mdx | 79 + .../get-role-mining-session-status.api.mdx | 71 + .../get-role-mining-session.api.mdx | 103 + .../get-role-mining-sessions.api.mdx | 87 + docs/sailpoint-api-beta/get-role.api.mdx | 133 + .../get-schema-attribute.api.mdx | 63 + .../get-schema-attributes.api.mdx | 75 + docs/sailpoint-api-beta/get-schema.api.mdx | 96 + .../get-search-attribute-config.api.mdx | 64 + .../get-segment-by-id.api.mdx | 85 + .../get-service-desk-integration-list.api.mdx | 87 + ...-service-desk-integration-template.api.mdx | 103 + ...get-service-desk-integration-types.api.mdx | 87 + .../get-service-desk-integration.api.mdx | 115 + ...get-single-search-attribute-config.api.mdx | 80 + .../get-sod-all-report-run-status.api.mdx | 76 + .../get-sod-policy-by-id.api.mdx | 96 + .../get-sod-policy-schedule-by-id.api.mdx | 95 + ...et-sod-violation-report-run-status.api.mdx | 88 + .../get-sod-violation-report-status.api.mdx | 88 + .../get-source-attr-sync-config.api.mdx | 96 + .../get-source-config.api.mdx | 76 + docs/sailpoint-api-beta/get-source.api.mdx | 128 + .../sailpoint-api-beta/get-start-date.api.mdx | 83 + .../get-status-check-details.api.mdx | 87 + .../get-tagged-object-by-type-and-id.api.mdx | 75 + docs/sailpoint-api-beta/get-transform.api.mdx | 60 + .../get-transforms-list.api.mdx | 48 + .../get-valid-time-zones.api.mdx | 79 + .../sailpoint-api-beta/get-work-items.api.mdx | 67 + .../get-workflow-execution-history.api.mdx | 87 + .../get-workflow-execution.api.mdx | 87 + docs/sailpoint-api-beta/get-workflow.api.mdx | 99 + ...iai-access-request-recommendations.tag.mdx | 15 + .../iai-common-access.tag.mdx | 15 + docs/sailpoint-api-beta/iai-outliers.tag.mdx | 15 + .../iai-peer-group-strategies.tag.mdx | 15 + .../iai-recommendations.tag.mdx | 15 + .../iai-role-mining.tag.mdx | 15 + docs/sailpoint-api-beta/identities.tag.mdx | 15 + .../identity-history.tag.mdx | 15 + .../identity-profiles.tag.mdx | 15 + .../ignore-outliers.api.mdx | 76 + .../import-identity-profiles.api.mdx | 123 + .../lifecycle-states.tag.mdx | 15 + .../list-access-profile-entitlements.api.mdx | 81 + .../list-access-profiles.api.mdx | 113 + .../list-access-request-status.api.mdx | 164 + .../list-account-activities.api.mdx | 87 + docs/sailpoint-api-beta/list-accounts.api.mdx | 76 + .../list-campaign-templates.api.mdx | 123 + .../list-complete-workflow-library.api.mdx | 87 + .../list-completed-approvals.api.mdx | 127 + .../list-entitlement-parents.api.mdx | 93 + .../list-entitlementchildren.api.mdx | 93 + .../list-entitlements.api.mdx | 83 + .../list-from-addresses.api.mdx | 63 + .../list-identities.api.mdx | 59 + .../list-identity-access-items.api.mdx | 83 + .../list-identity-profiles.api.mdx | 76 + ...ist-identity-snapshot-access-items.api.mdx | 83 + .../list-identity-snapshots.api.mdx | 83 + .../list-invocation-status.api.mdx | 89 + .../list-lifecycle-states.api.mdx | 78 + ...ist-notification-template-defaults.api.mdx | 75 + .../list-notification-templates.api.mdx | 75 + .../list-oauth-clients.api.mdx | 77 + .../list-pending-approvals.api.mdx | 119 + .../list-personal-access-tokens.api.mdx | 83 + .../list-provisioning-policies.api.mdx | 88 + .../list-requestable-objects.api.mdx | 76 + .../sailpoint-api-beta/list-reviewers.api.mdx | 87 + docs/sailpoint-api-beta/list-roles.api.mdx | 133 + docs/sailpoint-api-beta/list-schemas.api.mdx | 83 + docs/sailpoint-api-beta/list-segments.api.mdx | 84 + .../list-sod-policies.api.mdx | 84 + docs/sailpoint-api-beta/list-sources.api.mdx | 128 + .../list-subscriptions.api.mdx | 91 + .../list-tagged-objects-by-type.api.mdx | 77 + .../list-tagged-objects.api.mdx | 77 + docs/sailpoint-api-beta/list-triggers.api.mdx | 259 + .../list-work-items.api.mdx | 67 + .../list-workflow-executions.api.mdx | 75 + .../list-workflow-library-actions.api.mdx | 79 + .../list-workflow-library-operators.api.mdx | 79 + .../list-workflow-library-triggers.api.mdx | 79 + .../sailpoint-api-beta/list-workflows.api.mdx | 75 + .../managed-clients.tag.mdx | 19 + .../managed-clusters.tag.mdx | 19 + .../mfa-configuration.tag.mdx | 19 + .../non-employee-approval-get.api.mdx | 91 + .../non-employee-approval-list.api.mdx | 75 + .../non-employee-approval-summary.api.mdx | 75 + .../non-employee-approve-request.api.mdx | 79 + .../non-employee-bulk-upload-status.api.mdx | 80 + ...oyee-export-source-schema-template.api.mdx | 89 + .../non-employee-lifecycle-management.tag.mdx | 15 + .../non-employee-record-bulk-delete.api.mdx | 81 + .../non-employee-record-creation.api.mdx | 89 + .../non-employee-record-delete.api.mdx | 77 + .../non-employee-record-get.api.mdx | 81 + .../non-employee-record-list.api.mdx | 79 + .../non-employee-record-patch.api.mdx | 99 + .../non-employee-record-update.api.mdx | 99 + .../non-employee-records-bulk-upload.api.mdx | 95 + .../non-employee-records-export.api.mdx | 89 + .../non-employee-reject-request.api.mdx | 79 + .../non-employee-request-creation.api.mdx | 95 + .../non-employee-request-deletion.api.mdx | 89 + .../non-employee-request-get.api.mdx | 99 + .../non-employee-request-list.api.mdx | 75 + .../non-employee-request-summary-get.api.mdx | 75 + .../non-employee-source-delete.api.mdx | 77 + .../non-employee-source-get.api.mdx | 83 + .../non-employee-source-patch.api.mdx | 93 + .../non-employee-sources-creation.api.mdx | 109 + .../non-employee-sources-list.api.mdx | 75 + docs/sailpoint-api-beta/notifications.tag.mdx | 15 + .../sailpoint-api-beta/o-auth-clients.tag.mdx | 15 + docs/sailpoint-api-beta/org-config.tag.mdx | 19 + .../password-configuration.tag.mdx | 15 + .../password-dictionary.tag.mdx | 15 + .../password-management.tag.mdx | 19 + .../password-sync-groups.tag.mdx | 15 + .../patch-access-profile.api.mdx | 123 + .../patch-campaign-template.api.mdx | 147 + .../patch-entitlement.api.mdx | 99 + .../patch-oauth-client.api.mdx | 113 + .../patch-org-config.api.mdx | 98 + .../patch-role-mining-session.api.mdx | 95 + docs/sailpoint-api-beta/patch-role.api.mdx | 139 + .../patch-schema-attribute.api.mdx | 100 + .../patch-search-attribute-config.api.mdx | 93 + docs/sailpoint-api-beta/patch-segment.api.mdx | 112 + .../patch-service-desk-integration.api.mdx | 133 + .../patch-sod-policy.api.mdx | 114 + .../patch-subscription.api.mdx | 109 + .../sailpoint-api-beta/patch-workflow.api.mdx | 103 + .../peek-resource-objects.api.mdx | 92 + .../personal-access-tokens.tag.mdx | 15 + docs/sailpoint-api-beta/ping-cluster.api.mdx | 76 + .../post-external-execute-workflow.api.mdx | 75 + .../post-workflow-external-trigger.api.mdx | 75 + .../predict-violations.api.mdx | 105 + .../public-identity-config.tag.mdx | 15 + docs/sailpoint-api-beta/put-account.api.mdx | 88 + .../put-notification-preference.api.mdx | 81 + .../put-source-attr-sync-config.api.mdx | 105 + .../query-password-info.api.mdx | 71 + .../reassign-identity-certs-async.api.mdx | 87 + .../refresh-identity-profile.api.mdx | 88 + .../reject-approval-item.api.mdx | 67 + .../sailpoint-api-beta/reject-request.api.mdx | 91 + .../sailpoint-api-beta/reload-account.api.mdx | 88 + .../remove-tags-to-many-object.api.mdx | 81 + .../replace-provisioning-policy.api.mdx | 88 + .../sailpoint-api-beta/replace-schema.api.mdx | 108 + .../sailpoint-api-beta/replace-source.api.mdx | 182 + .../requestable-objects.tag.mdx | 15 + .../role-insights-requests.api.mdx | 71 + docs/sailpoint-api-beta/role-insights.tag.mdx | 15 + .../role-mining-sessions.api.mdx | 99 + docs/sailpoint-api-beta/roles.tag.mdx | 56 + .../run-all-policies-for-org.api.mdx | 76 + .../run-campaign-remediation-scan.api.mdx | 88 + .../run-campaign-report.api.mdx | 88 + .../sailpoint-api-beta/run-sod-policy.api.mdx | 88 + .../sail-point-beta-saa-s-api.info.mdx | 33 + .../search-attribute-configuration.tag.mdx | 15 + docs/sailpoint-api-beta/segments.tag.mdx | 15 + .../send-test-notification.api.mdx | 87 + .../service-desk-integration.tag.mdx | 19 + .../set-campaign-reports-config.api.mdx | 80 + .../set-campaign-template-schedule.api.mdx | 159 + .../sailpoint-api-beta/set-mfa-config.api.mdx | 75 + docs/sailpoint-api-beta/set-password.api.mdx | 71 + docs/sailpoint-api-beta/sidebar.js | 1 + docs/sailpoint-api-beta/sod-policy.tag.mdx | 19 + .../sailpoint-api-beta/sod-violations.tag.mdx | 19 + docs/sailpoint-api-beta/sources.tag.mdx | 15 + .../sp-config-export-download.api.mdx | 101 + .../sp-config-export-job-status.api.mdx | 89 + .../sp-config-export.api.mdx | 98 + .../sp-config-import-download.api.mdx | 93 + .../sp-config-import-job-status.api.mdx | 89 + .../sp-config-import.api.mdx | 161 + .../sp-config-objects.api.mdx | 97 + docs/sailpoint-api-beta/sp-config.tag.mdx | 19 + .../start-test-invocation.api.mdx | 79 + .../submit-account-selection.api.mdx | 71 + .../summary-work-items.api.mdx | 67 + ...ynchronize-attributes-for-identity.api.mdx | 91 + .../synchronize-attributes-for-source.api.mdx | 92 + .../sailpoint-api-beta/tagged-objects.tag.mdx | 15 + .../test-configuration.api.mdx | 76 + .../test-external-execute-workflow.api.mdx | 75 + .../test-mfa-config.api.mdx | 75 + docs/sailpoint-api-beta/test-workflow.api.mdx | 77 + docs/sailpoint-api-beta/transforms.tag.mdx | 19 + docs/sailpoint-api-beta/triggers.tag.mdx | 60 + .../un-ignore-outliers.api.mdx | 76 + .../sailpoint-api-beta/unlock-account.api.mdx | 88 + .../update-access-request-config.api.mdx | 100 + .../sailpoint-api-beta/update-account.api.mdx | 92 + .../update-campaign.api.mdx | 104 + .../update-client-log-configuration.api.mdx | 87 + .../update-connector-rule.api.mdx | 104 + .../update-identity-profile.api.mdx | 116 + .../update-lifecycle-states.api.mdx | 94 + .../update-password-dictionary.api.mdx | 100 + .../update-password-org-config.api.mdx | 55 + .../update-password-sync-group.api.mdx | 79 + .../update-policy-by-id.api.mdx | 104 + .../update-policy-schedule-by-id.api.mdx | 114 + .../update-provisioning-policy.api.mdx | 96 + .../update-public-identity-config.api.mdx | 71 + .../update-recommendations-config.api.mdx | 71 + docs/sailpoint-api-beta/update-schema.api.mdx | 107 + .../update-service-desk-integration.api.mdx | 147 + docs/sailpoint-api-beta/update-source.api.mdx | 152 + .../update-status-check-details.api.mdx | 91 + docs/sailpoint-api-beta/update-status.api.mdx | 87 + .../update-subscription.api.mdx | 128 + ...pdate-tagged-object-by-type-and-id.api.mdx | 75 + .../update-transform.api.mdx | 80 + .../update-workflow.api.mdx | 115 + .../upload-connector-file.api.mdx | 116 + .../upload-source-accounts-schema.api.mdx | 83 + .../upload-source-entitlements-schema.api.mdx | 83 + .../validate-connector-rule.api.mdx | 68 + .../validate-filter.api.mdx | 76 + docs/sailpoint-api-beta/work-items.tag.mdx | 19 + docs/sailpoint-api-beta/workflows.tag.mdx | 24 + .../access-request-approvals.tag.mdx | 36 + docs/sailpoint-api-v3/access-requests.tag.mdx | 32 + .../account-activities.tag.mdx | 15 + docs/sailpoint-api-v3/accounts.tag.mdx | 15 + .../sailpoint-api-v3/approval-summary.api.mdx | 75 + .../approve-approval-item.api.mdx | 87 + docs/sailpoint-api-v3/approve-request.api.mdx | 91 + .../bulk-approve-approval-item.api.mdx | 87 + .../bulk-reject-approval-item.api.mdx | 87 + .../bulk-update-provisioning-policies.api.mdx | 88 + .../cancel-access-request.api.mdx | 88 + .../certification-summaries.tag.mdx | 15 + docs/sailpoint-api-v3/certifications.tag.mdx | 15 + .../complete-work-item.api.mdx | 87 + .../completed-work-items.api.mdx | 75 + .../count-completed-work-items.api.mdx | 75 + .../sailpoint-api-v3/count-work-items.api.mdx | 75 + .../create-access-request.api.mdx | 112 + docs/sailpoint-api-v3/create-account.api.mdx | 80 + .../create-lifecycle-state.api.mdx | 88 + .../create-oauth-client.api.mdx | 77 + .../create-personal-access-token.api.mdx | 87 + .../create-provisioning-policy.api.mdx | 88 + .../create-schema-attribute.api.mdx | 76 + docs/sailpoint-api-v3/create-schema.api.mdx | 92 + .../create-service-desk-integration.api.mdx | 147 + docs/sailpoint-api-v3/create-source.api.mdx | 156 + .../sailpoint-api-v3/create-transform.api.mdx | 903 + docs/sailpoint-api-v3/delete-account.api.mdx | 88 + .../delete-lifecycle-state.api.mdx | 88 + .../delete-oauth-client.api.mdx | 89 + .../delete-personal-access-token.api.mdx | 91 + .../delete-provisioning-policy.api.mdx | 88 + .../delete-schema-attribute.api.mdx | 77 + .../delete-schema-attributes.api.mdx | 75 + docs/sailpoint-api-v3/delete-schema.api.mdx | 87 + .../delete-service-desk-integration.api.mdx | 87 + docs/sailpoint-api-v3/delete-source.api.mdx | 89 + .../sailpoint-api-v3/delete-transform.api.mdx | 88 + docs/sailpoint-api-v3/disable-account.api.mdx | 88 + .../download-source-accounts-schema.api.mdx | 88 + ...ownload-source-entitlements-schema.api.mdx | 89 + docs/sailpoint-api-v3/enable-account.api.mdx | 88 + .../export-identity-profiles.api.mdx | 91 + docs/sailpoint-api-v3/forward-request.api.mdx | 91 + .../get-access-request-config.api.mdx | 87 + .../get-account-activity.api.mdx | 99 + .../get-account-entitlements.api.mdx | 88 + docs/sailpoint-api-v3/get-account.api.mdx | 88 + ...-default-identity-attribute-config.api.mdx | 84 + .../get-identity-access-summaries.api.mdx | 119 + .../get-identity-certification.api.mdx | 87 + .../get-identity-decision-summary.api.mdx | 87 + .../get-identity-profile.api.mdx | 92 + .../get-identity-summaries.api.mdx | 87 + .../get-identity-summary.api.mdx | 75 + .../get-lifecycle-state.api.mdx | 92 + .../sailpoint-api-v3/get-oauth-client.api.mdx | 89 + .../get-password-change-status.api.mdx | 87 + .../get-provisioning-policy.api.mdx | 88 + .../get-public-identities.api.mdx | 71 + .../get-public-identity-config.api.mdx | 71 + .../get-schema-attribute.api.mdx | 63 + .../get-schema-attributes.api.mdx | 76 + docs/sailpoint-api-v3/get-schema.api.mdx | 96 + .../get-service-desk-integration-list.api.mdx | 87 + ...-service-desk-integration-template.api.mdx | 103 + ...get-service-desk-integration-types.api.mdx | 87 + .../get-service-desk-integration.api.mdx | 115 + .../get-source-health.api.mdx | 87 + docs/sailpoint-api-v3/get-source.api.mdx | 128 + .../get-status-check-details.api.mdx | 87 + docs/sailpoint-api-v3/get-transform.api.mdx | 494 + .../get-transforms-list.api.mdx | 494 + docs/sailpoint-api-v3/get-work-items.api.mdx | 75 + .../identity-profiles.tag.mdx | 15 + .../import-identity-profiles.api.mdx | 123 + .../sailpoint-api-v3/lifecycle-states.tag.mdx | 15 + .../list-access-request-status.api.mdx | 164 + .../list-account-activities.api.mdx | 87 + docs/sailpoint-api-v3/list-accounts.api.mdx | 76 + .../list-completed-approvals.api.mdx | 139 + .../list-identity-access-review-items.api.mdx | 111 + .../list-identity-certifications.api.mdx | 75 + .../list-identity-profiles.api.mdx | 76 + .../list-lifecycle-states.api.mdx | 76 + .../list-oauth-clients.api.mdx | 77 + .../list-pending-approvals.api.mdx | 131 + .../list-personal-access-tokens.api.mdx | 83 + .../list-provisioning-policies.api.mdx | 88 + .../list-requestable-objects.api.mdx | 76 + docs/sailpoint-api-v3/list-schemas.api.mdx | 96 + docs/sailpoint-api-v3/list-sources.api.mdx | 128 + docs/sailpoint-api-v3/list-work-items.api.mdx | 75 + .../make-identity-decision.api.mdx | 91 + .../non-employee-approval-get.api.mdx | 93 + .../non-employee-approval-list.api.mdx | 78 + .../non-employee-approval-summary.api.mdx | 77 + .../non-employee-approve-request.api.mdx | 79 + .../non-employee-bulk-upload-status.api.mdx | 77 + ...oyee-export-source-schema-template.api.mdx | 87 + .../non-employee-lifecycle-management.tag.mdx | 15 + .../non-employee-record-bulk-delete.api.mdx | 79 + .../non-employee-record-creation.api.mdx | 88 + .../non-employee-record-delete.api.mdx | 76 + .../non-employee-record-get.api.mdx | 80 + .../non-employee-record-list.api.mdx | 81 + .../non-employee-record-patch.api.mdx | 101 + .../non-employee-record-update.api.mdx | 101 + .../non-employee-records-bulk-upload.api.mdx | 93 + .../non-employee-records-export.api.mdx | 87 + .../non-employee-reject-request.api.mdx | 79 + .../non-employee-request-creation.api.mdx | 95 + .../non-employee-request-deletion.api.mdx | 88 + .../non-employee-request-get.api.mdx | 102 + .../non-employee-request-list.api.mdx | 77 + .../non-employee-request-summary-get.api.mdx | 77 + .../non-employee-source-delete.api.mdx | 75 + .../non-employee-source-get.api.mdx | 85 + .../non-employee-source-patch.api.mdx | 91 + .../non-employee-sources-creation.api.mdx | 107 + .../non-employee-sources-list.api.mdx | 77 + docs/sailpoint-api-v3/o-auth-clients.tag.mdx | 15 + .../password-management.tag.mdx | 15 + .../patch-oauth-client.api.mdx | 113 + .../patch-schema-attribute.api.mdx | 97 + .../patch-service-desk-integration.api.mdx | 133 + .../personal-access-tokens.tag.mdx | 15 + .../public-identities-config.tag.mdx | 22 + .../public-identities.tag.mdx | 15 + docs/sailpoint-api-v3/put-account.api.mdx | 89 + .../query-password-info.api.mdx | 79 + .../reassign-identity-certifications.api.mdx | 87 + .../reject-approval-item.api.mdx | 87 + docs/sailpoint-api-v3/reject-request.api.mdx | 91 + docs/sailpoint-api-v3/reload-account.api.mdx | 88 + .../replace-provisioning-policy.api.mdx | 88 + docs/sailpoint-api-v3/replace-schema.api.mdx | 108 + docs/sailpoint-api-v3/replace-source.api.mdx | 182 + .../requestable-objects.tag.mdx | 15 + .../sail-point-saa-s-api.info.mdx | 33 + .../saved-search-create.api.mdx | 111 + .../saved-search-delete.api.mdx | 68 + .../saved-search-execute.api.mdx | 56 + .../sailpoint-api-v3/saved-search-get.api.mdx | 72 + .../saved-search-list.api.mdx | 60 + .../saved-search-update.api.mdx | 118 + docs/sailpoint-api-v3/saved-search.tag.mdx | 15 + .../scheduled-search-create.api.mdx | 113 + .../scheduled-search-delete.api.mdx | 56 + .../scheduled-search-get.api.mdx | 73 + .../scheduled-search-list.api.mdx | 60 + .../scheduled-search-unsubscribe.api.mdx | 73 + .../scheduled-search-update.api.mdx | 130 + .../sailpoint-api-v3/scheduled-search.tag.mdx | 15 + .../sailpoint-api-v3/search-aggregate.api.mdx | 142 + docs/sailpoint-api-v3/search-count.api.mdx | 135 + docs/sailpoint-api-v3/search-get.api.mdx | 65 + docs/sailpoint-api-v3/search.api.mdx | 155 + docs/sailpoint-api-v3/search.tag.mdx | 15 + .../service-desk-integration.tag.mdx | 19 + .../set-lifecycle-state.api.mdx | 76 + docs/sailpoint-api-v3/set-password.api.mdx | 75 + docs/sailpoint-api-v3/sidebar.js | 1 + .../sign-off-identity-certification.api.mdx | 87 + docs/sailpoint-api-v3/sources.tag.mdx | 15 + .../submit-account-selection.api.mdx | 91 + .../summary-work-items.api.mdx | 75 + docs/sailpoint-api-v3/transforms.tag.mdx | 23 + docs/sailpoint-api-v3/unlock-account.api.mdx | 88 + .../update-access-request-config.api.mdx | 100 + docs/sailpoint-api-v3/update-account.api.mdx | 100 + .../update-lifecycle-states.api.mdx | 108 + .../update-provisioning-policy.api.mdx | 96 + .../update-public-identity-config.api.mdx | 91 + docs/sailpoint-api-v3/update-schema.api.mdx | 107 + .../update-service-desk-integration.api.mdx | 147 + docs/sailpoint-api-v3/update-source.api.mdx | 152 + .../update-status-check-details.api.mdx | 91 + .../sailpoint-api-v3/update-transform.api.mdx | 904 + .../upload-connector-file.api.mdx | 116 + .../upload-source-accounts-schema.api.mdx | 89 + .../upload-source-entitlements-schema.api.mdx | 89 + docs/sailpoint-api-v3/work-items.tag.mdx | 15 + docusaurus.config.js | 187 + package.json | 49 + sidebars.js | 58 + src/components/HomepageFeatures/index.js | 64 + .../HomepageFeatures/styles.module.css | 11 + src/css/custom.css | 93 + src/pages/index.js | 41 + src/pages/index.module.css | 23 + src/pages/markdown-page.md | 7 + static/.nojekyll | 0 static/arm-api/swagger-agent-management.json | 631 + static/arm-api/swagger-analysis.json | 8865 ++++ static/arm-api/swagger-arm.json | 38865 ++++++++++++++++ static/arm-api/swagger-arm2.json | 946 + static/arm-api/swagger-authentication.json | 7908 ++++ static/arm-api/swagger-cloud-agent.json | 1538 + static/arm-api/swagger-jobs.json | 27234 +++++++++++ static/arm-api/swagger-logging.json | 4198 ++ static/arm-api/swagger-provisioning.json | 3854 ++ static/arm-api/swagger-public.json | 2828 ++ static/arm-api/swagger-rulebook.json | 12103 +++++ static/arm-api/swagger-scheduling.json | 3059 ++ .../arm-api/swagger-utilization-tracking.json | 664 + ...sManagedClients-beta.1.0-oas3-swagger.yaml | 41 + ...gedClusterTypes-beta.1.0-oas3-swagger.yaml | 36 + ...ManagedClusters-beta.1.0-oas3-swagger.yaml | 58 + ...anagedProcesses-beta.1.0-oas3-swagger.yaml | 36 + .../beta/GovRole-beta.1.0-oas3-swagger.yaml | 53 + ...eskIntegrations-beta.3.0-oas3-swagger.yaml | 41 + .../TaskManager-beta.1.0-oas3-swagger.yaml | 43 + .../paths/access-profile-bulk-delete.yaml | 86 + .../paths/access-profile-entitlements.yaml | 91 + static/idn-api/beta/paths/access-profile.yaml | 197 + .../beta/paths/access-profiles-cleanup.yaml | 24 + .../idn-api/beta/paths/access-profiles.yaml | 153 + .../access-request-approval-summary.yaml | 49 + ...cess-roles-change-segment-assignments.yaml | 42 + .../beta/paths/account-activities.yaml | 90 + .../idn-api/beta/paths/account-activity.yaml | 36 + .../paths/account-aggregation-status.yaml | 49 + static/idn-api/beta/paths/account.yaml | 171 + .../beta/paths/accounts-id-disable.yaml | 45 + .../beta/paths/accounts-id-enable.yaml | 45 + .../beta/paths/accounts-id-entitlements.yaml | 67 + .../beta/paths/accounts-id-reload.yaml | 39 + .../beta/paths/accounts-id-unlock.yaml | 45 + static/idn-api/beta/paths/accounts.yaml | 152 + ...ccess-request-recommendations-ignored.yaml | 91 + ...ess-request-recommendations-requested.yaml | 91 + ...st-recommendations-viewed-bulk-create.yaml | 37 + ...access-request-recommendations-viewed.yaml | 91 + .../ai-access-request-recommendations.yaml | 88 + .../approve-access-request-approval.yaml | 35 + .../paths/assign-verified-from-addresses.yaml | 34 + .../beta/paths/attr-sync-config-source.yaml | 84 + .../beta/paths/attr-sync-config-tenant.yaml | 107 + .../idn-api/beta/paths/auth-org-config.yaml | 27 + .../beta/paths/auth-org-lockout-config.yaml | 117 + .../beta/paths/auth-org-network-config.yaml | 115 + .../auth-org-service-provider-config.yaml | 125 + .../beta/paths/auth-org-session-config.yaml | 117 + .../beta/paths/auth-user-password.yaml | 46 + static/idn-api/beta/paths/auth-user.yaml | 184 + static/idn-api/beta/paths/auth.yaml | 27 + .../paths/authmfa/confirm-registration.yaml | 37 + .../paths/authmfa/generate-mfa-token.yaml | 44 + .../beta/paths/authmfa/generate-secret.yaml | 28 + .../paths/authmfa/mfa-registration-reset.yaml | 40 + .../paths/authmfa/registration-status.yaml | 34 + .../beta/paths/authmfa/verify-code.yaml | 35 + .../paths/authorization-capabilities.yaml | 33 + .../beta/paths/bulk-add-tagged-objects.yaml | 35 + .../paths/bulk-remove-tagged-objects.yaml | 31 + .../beta/paths/bulk-update-auth-user.yaml | 50 + .../idn-api/beta/paths/campaign-activate.yaml | 47 + .../paths/campaign-admin-cert-reassign.yaml | 49 + .../idn-api/beta/paths/campaign-complete.yaml | 46 + .../paths/campaign-reports-configuration.yaml | 67 + .../idn-api/beta/paths/campaign-reports.yaml | 42 + .../paths/campaign-run-remediation-scan.yaml | 36 + .../beta/paths/campaign-run-report.yaml | 45 + .../paths/campaign-template-generate.yaml | 48 + .../paths/campaign-template-schedule.yaml | 162 + .../idn-api/beta/paths/campaign-template.yaml | 134 + .../beta/paths/campaign-templates.yaml | 96 + static/idn-api/beta/paths/campaign.yaml | 120 + .../idn-api/beta/paths/campaigns-delete.yaml | 35 + static/idn-api/beta/paths/campaigns.yaml | 141 + .../beta/paths/certification-task.yaml | 36 + .../beta/paths/certification-tasks.yaml | 58 + static/idn-api/beta/paths/certification.yaml | 35 + .../certifications-access-summaries.yaml | 81 + .../beta/paths/certifications-decide.yaml | 56 + .../certifications-decision-summary.yaml | 52 + ...ertifications-entitlement-permissions.yaml | 96 + .../paths/certifications-reassign-async.yaml | 42 + .../beta/paths/certifications-reassign.yaml | 40 + .../certifications-review-items-activity.yaml | 42 + .../paths/certifications-review-items.yaml | 93 + .../beta/paths/certifications-reviewers.yaml | 70 + .../beta/paths/certifications-sign-off.yaml | 36 + .../certifications-target-summaries.yaml | 77 + .../paths/certifications-target-summary.yaml | 40 + static/idn-api/beta/paths/certifications.yaml | 71 + .../paths/common-access-classify-request.yaml | 31 + .../beta/paths/common-access-classify.yaml | 32 + .../paths/common-access-update-status.yaml | 31 + static/idn-api/beta/paths/common-access.yaml | 95 + .../completed-access-request-approvals.yaml | 67 + .../beta/paths/connector-messages.yaml | 60 + .../beta/paths/connector-rule-validate.yaml | 35 + static/idn-api/beta/paths/connector-rule.yaml | 116 + .../idn-api/beta/paths/connector-rules.yaml | 69 + static/idn-api/beta/paths/connectors.yaml | 58 + .../paths/custom-password-instruction.yaml | 100 + .../paths/custom-password-instructions.yaml | 37 + ...ata-pipeline-events-qualifier-related.yaml | 31 + .../paths/data-pipeline-events-qualifier.yaml | 31 + .../beta/paths/data-pipeline-events.yaml | 106 + static/idn-api/beta/paths/data-pipelines.yaml | 29 + .../beta/paths/delete-lifecycle-state.yaml | 41 + .../paths/ears-entitlement-bulk-update.yaml | 38 + .../beta/paths/ears-entitlement-children.yaml | 71 + .../beta/paths/ears-entitlement-parents.yaml | 71 + .../idn-api/beta/paths/ears-entitlement.yaml | 64 + .../beta/paths/ears-identity-entitlement.yaml | 58 + static/idn-api/beta/paths/email-requests.yaml | 27 + static/idn-api/beta/paths/entitlements.yaml | 234 + .../forward-access-request-approval.yaml | 37 + .../beta/paths/historical-identities.yaml | 47 + .../historical-identity-access-items.yaml | 99 + .../historical-identity-compare-type.yaml | 63 + .../paths/historical-identity-compare.yaml | 59 + .../paths/historical-identity-events.yaml | 203 + ...l-identity-snapshot-date-access-items.yaml | 106 + .../historical-identity-snapshot-date.yaml | 40 + .../historical-identity-snapshot-summary.yaml | 58 + .../paths/historical-identity-snapshots.yaml | 52 + .../paths/historical-identity-start-date.yaml | 34 + .../beta/paths/historical-identity.yaml | 31 + .../idn-api/beta/paths/iai-configuration.yaml | 101 + .../beta/paths/iai-configurations.yaml | 79 + .../iai-data-role-entitlement-identities.yaml | 68 + .../paths/iai-data-role-entitlements.yaml | 51 + ...iai-data-role-identities-entitlements.yaml | 67 + static/idn-api/beta/paths/iai-data-roles.yaml | 43 + ...ntity-certifications-item-permissions.yaml | 88 + ...dentity-certifications-reassign-async.yaml | 42 + .../identity-certifications-task-status.yaml | 40 + ...identity-certifications-tasks-pending.yaml | 37 + .../paths/identity-group-applications.yaml | 43 + .../paths/identity-group-distribution.yaml | 43 + ...entity-group-entitlement-popularities.yaml | 43 + .../beta/paths/identity-group-identities.yaml | 43 + static/idn-api/beta/paths/identity-group.yaml | 31 + .../idn-api/beta/paths/identity-groups.yaml | 69 + .../identity-profile-default-config.yaml | 42 + .../identity-profile-lifecycle-state.yaml | 127 + .../identity-profile-refresh-identities.yaml | 39 + .../idn-api/beta/paths/identity-profile.yaml | 147 + .../paths/identity-profiles-bulk-delete.yaml | 40 + .../beta/paths/identity-profiles-export.yaml | 63 + .../beta/paths/identity-profiles-id.yaml | 101 + .../identity-profiles-identity-preview.yaml | 39 + .../beta/paths/identity-profiles-import.yaml | 36 + .../idn-api/beta/paths/identity-profiles.yaml | 100 + .../paths/identity-set-lifecycle-state.yaml | 54 + .../identity-synchronize-attributes.yaml | 45 + static/idn-api/beta/paths/identity-team.yaml | 36 + static/idn-api/beta/paths/identity.yaml | 121 + .../paths/internal-password-sync-groups.yaml | 35 + .../idn-api/beta/paths/lifecycle-states.yaml | 89 + .../beta/paths/managed-client-status.yaml | 85 + .../paths/managed-clients-credentials.yaml | 37 + .../beta/paths/managed-clients-path.yaml | 113 + .../idn-api/beta/paths/managed-clients.yaml | 94 + .../beta/paths/managed-cluster-cache.yaml | 43 + .../beta/paths/managed-cluster-jobs.yaml | 44 + .../paths/managed-cluster-log-config.yaml | 73 + .../beta/paths/managed-cluster-path-full.yaml | 108 + .../paths/managed-cluster-path-internal.yaml | 76 + .../beta/paths/managed-cluster-path.yaml | 32 + .../beta/paths/managed-cluster-processes.yaml | 40 + .../beta/paths/managed-cluster-reboot.yaml | 41 + .../beta/paths/managed-cluster-status.yaml | 36 + .../paths/managed-cluster-types-path.yaml | 122 + .../beta/paths/managed-cluster-types.yaml | 93 + .../beta/paths/managed-cluster-upgrade.yaml | 47 + .../beta/paths/managed-clusters-create.yaml | 37 + .../beta/paths/managed-clusters-full.yaml | 78 + .../managed-clusters-set-encryption-keys.yaml | 47 + .../idn-api/beta/paths/managed-clusters.yaml | 41 + .../beta/paths/managed-processes-path.yaml | 122 + .../idn-api/beta/paths/managed-processes.yaml | 93 + .../idn-api/beta/paths/message-catalog.yaml | 39 + .../idn-api/beta/paths/mfa-config-test.yaml | 45 + static/idn-api/beta/paths/mfa-config.yaml | 108 + .../paths/non-employee-approval-list.yaml | 57 + .../paths/non-employee-approval-summary.yaml | 37 + .../beta/paths/non-employee-approve-get.yaml | 41 + .../paths/non-employee-approve-request.yaml | 40 + .../non-employee-bulk-upload-jobs-fail.yaml | 48 + .../beta/paths/non-employee-record.yaml | 168 + .../non-employee-records-bulk-delete.yaml | 44 + .../beta/paths/non-employee-records.yaml | 92 + .../paths/non-employee-reject-request.yaml | 40 + .../non-employee-request-summary-get.yaml | 38 + .../beta/paths/non-employee-request.yaml | 76 + .../beta/paths/non-employee-requests.yaml | 117 + .../paths/non-employee-source-aggregate.yaml | 35 + .../beta/paths/non-employee-source.yaml | 126 + ...-employee-sources-bulk-upload-details.yaml | 40 + ...yee-sources-bulk-upload-non-employees.yaml | 66 + ...n-employee-sources-bulk-upload-status.yaml | 40 + ...employee-sources-export-non-employees.yaml | 43 + ...ces-export-schema-attributes-template.yaml | 41 + ...non-employee-sources-schema-attribute.yaml | 137 + ...on-employee-sources-schema-attributes.yaml | 121 + .../beta/paths/non-employee-sources.yaml | 96 + .../beta/paths/notification-preferences.yaml | 90 + .../paths/notification-template-context.yaml | 38 + .../paths/notification-template-defaults.yaml | 48 + .../beta/paths/notification-template.yaml | 37 + .../notification-templates-bulk-delete.yaml | 28 + .../beta/paths/notification-templates.yaml | 79 + static/idn-api/beta/paths/oauth-client.yaml | 154 + static/idn-api/beta/paths/oauth-clients.yaml | 72 + .../paths/org-config-valid-time-zones.yaml | 43 + static/idn-api/beta/paths/org-config.yaml | 75 + .../beta/paths/outlier-summaries-latest.yaml | 40 + .../idn-api/beta/paths/outlier-summaries.yaml | 68 + .../outliers-bulk-outlier-detection.yaml | 28 + .../idn-api/beta/paths/outliers-export.yaml | 38 + .../idn-api/beta/paths/outliers-ignore.yaml | 32 + .../idn-api/beta/paths/outliers-unignore.yaml | 32 + static/idn-api/beta/paths/outliers.yaml | 83 + .../beta/paths/password-change-status.yaml | 35 + .../beta/paths/password-dictionary.yaml | 163 + .../beta/paths/password-org-config.yaml | 102 + .../paths/password-reset-digit-token.yaml | 34 + .../beta/paths/password-sync-group.yaml | 124 + .../beta/paths/password-sync-groups.yaml | 73 + .../beta/paths/peer-group-strategies.yaml | 37 + .../pending-access-request-approvals.yaml | 68 + .../beta/paths/personal-access-token.yaml | 37 + .../beta/paths/personal-access-tokens.yaml | 90 + .../beta/paths/public-identities-config.yaml | 50 + .../beta/paths/query-password-info.yaml | 51 + .../rats-access-request-recommendations.yaml | 88 + .../beta/paths/recommendations-config.yaml | 54 + .../beta/paths/recommendations-request.yaml | 32 + .../paths/reject-access-request-approval.yaml | 37 + .../beta/paths/role-assigned-identities.yaml | 74 + static/idn-api/beta/paths/role-insight.yaml | 30 + .../role-insights-current-entitlements.yaml | 40 + ...insights-entitlement-changes-download.yaml | 46 + ...sights-entitlement-changes-identities.yaml | 69 + .../role-insights-entitlement-changes.yaml | 48 + .../beta/paths/role-insights-request.yaml | 30 + .../beta/paths/role-insights-requests.yaml | 22 + .../beta/paths/role-insights-summary.yaml | 22 + static/idn-api/beta/paths/role-insights.yaml | 44 + ...ning-potential-role-edit-entitlements.yaml | 44 + ...tential-role-entitlement-popularities.yaml | 66 + ...e-entitlement-popularity-distribution.yaml | 47 + ...-potential-role-excluded-entitlements.yaml | 58 + ...role-mining-potential-role-identities.yaml | 58 + .../role-mining-potential-role-provision.yaml | 65 + ...g-session-potential-role-applications.yaml | 42 + ...g-session-potential-role-export-async.yaml | 43 + ...ession-potential-role-export-download.yaml | 48 + ...-session-potential-role-export-status.yaml | 47 + ...-mining-session-potential-role-export.yaml | 39 + ...ning-session-potential-role-summaries.yaml | 43 + ...mining-session-potential-role-summary.yaml | 37 + .../paths/role-mining-session-status.yaml | 30 + .../beta/paths/role-mining-session.yaml | 106 + .../beta/paths/role-mining-sessions.yaml | 81 + static/idn-api/beta/paths/role.yaml | 245 + .../idn-api/beta/paths/roles-by-identity.yaml | 43 + static/idn-api/beta/paths/roles.yaml | 140 + .../beta/paths/run-datapipeline-dagid.yaml | 44 + .../beta/paths/run-datapipeline-dagtype.yaml | 36 + static/idn-api/beta/paths/s3-proxy.yaml | 52 + ...aas-management-application-for-source.yaml | 36 + .../saas-management-applications-test.yaml | 37 + ...as-management-applications-update-map.yaml | 39 + .../paths/saas-management-applications.yaml | 53 + .../paths/scheduled-actions-bulk-delete.yaml | 41 + .../beta/paths/scheduled-actions-delete.yaml | 29 + .../idn-api/beta/paths/scheduled-actions.yaml | 73 + static/idn-api/beta/paths/schema.yaml | 197 + static/idn-api/beta/paths/schemas.yaml | 78 + ...earchAttributeConfig-get-patch-delete.yaml | 126 + .../beta/paths/searchAttributeConfig.yaml | 66 + .../paths/segment-change-assignments.yaml | 80 + static/idn-api/beta/paths/segment.yaml | 150 + static/idn-api/beta/paths/segments.yaml | 68 + .../beta/paths/send-test-notification.yaml | 35 + ...ervice-desk-integration-configuration.yaml | 66 + .../service-desk-integration-template.yaml | 39 + .../paths/service-desk-integration-types.yaml | 31 + .../beta/paths/service-desk-integration.yaml | 175 + .../beta/paths/service-desk-integrations.yaml | 109 + static/idn-api/beta/paths/set-password.yaml | 41 + .../beta/paths/sod-all-report-run.yaml | 48 + .../beta/paths/sod-all-report-status.yaml | 35 + .../paths/sod-download-custom-report.yaml | 47 + .../paths/sod-download-default-report.yaml | 40 + static/idn-api/beta/paths/sod-exception.yaml | 129 + .../paths/sod-exceptions-bulk-create.yaml | 35 + static/idn-api/beta/paths/sod-exceptions.yaml | 96 + static/idn-api/beta/paths/sod-policies.yaml | 342 + static/idn-api/beta/paths/sod-policy.yaml | 568 + static/idn-api/beta/paths/sod-report-run.yaml | 46 + static/idn-api/beta/paths/sod-schedule.yaml | 115 + .../beta/paths/sod-violation-check.yaml | 57 + .../paths/sod-violation-report-status.yaml | 45 + .../beta/paths/sod-violation-report.yaml | 45 + static/idn-api/beta/paths/sod/arm-risk.yaml | 42 + .../beta/paths/sod/predict-violations.yaml | 53 + .../beta/paths/source-accounts-schema.yaml | 79 + .../beta/paths/source-aggregation-state.yaml | 39 + .../source-connector-check-connection.yaml | 38 + .../source-connector-initiate-extract.yaml | 75 + ...ource-connector-peek-resource-objects.yaml | 49 + .../paths/source-connector-ping-cluster.yaml | 37 + .../beta/paths/source-connector-state.yaml | 49 + .../source-connector-test-configuration.yaml | 38 + .../source-connectors-source-config.yaml | 40 + .../paths/source-entitlements-schema.yaml | 91 + .../paths/source-synchronize-attributes.yaml | 45 + .../paths/source-upload-connector-file.yaml | 46 + static/idn-api/beta/paths/source.yaml | 277 + static/idn-api/beta/paths/sources.yaml | 152 + .../beta/paths/sp-config-export-download.yaml | 42 + .../beta/paths/sp-config-export-status.yaml | 54 + .../idn-api/beta/paths/sp-config-export.yaml | 46 + .../beta/paths/sp-config-import-download.yaml | 44 + .../beta/paths/sp-config-import-status.yaml | 54 + .../idn-api/beta/paths/sp-config-import.yaml | 151 + .../idn-api/beta/paths/sp-config-objects.yaml | 59 + .../access-granter-support-login-get.yaml | 36 + .../access-granter-support-login-list.yaml | 49 + .../auth-support-login-create.yaml | 34 + .../auth-support-login-delete.yaml | 30 + .../supportlogin/auth-support-login-get.yaml | 35 + .../supportlogin/auth-support-login-list.yaml | 47 + .../auth-support-login-patch.yaml | 48 + .../auth-support-login-transfer-get.yaml | 34 + .../auth-support-login-transfer-post.yaml | 37 + .../auth-support-login-transfer.yaml | 4 + .../auth-support-login-transfers-list.yaml | 48 + .../supportlogin/auth-support-login.yaml | 6 + .../auth-support-logins-migrate.yaml | 37 + .../supportlogin/auth-support-logins.yaml | 4 + .../auth-support-tenant-create.yaml | 38 + .../auth-support-tenant-delete.yaml | 20 + .../auth-support-tenant-list.yaml | 47 + .../supportlogin/auth-support-tenants.yaml | 7 + .../auth-support-user-eligibility-get.yaml | 25 + static/idn-api/beta/paths/sync-password.yaml | 61 + .../idn-api/beta/paths/system-accounts.yaml | 41 + static/idn-api/beta/paths/tag.yaml | 95 + static/idn-api/beta/paths/tagged-object.yaml | 129 + .../beta/paths/tagged-objects-type.yaml | 61 + static/idn-api/beta/paths/tagged-objects.yaml | 86 + .../idn-api/beta/paths/tags-get-shared.yaml | 37 + static/idn-api/beta/paths/tags.yaml | 120 + .../idn-api/beta/paths/task-definition.yaml | 71 + .../idn-api/beta/paths/task-definitions.yaml | 47 + .../beta/paths/task-execution-cancel.yaml | 29 + .../beta/paths/task-execution-run.yaml | 29 + .../beta/paths/task-status-pending.yaml | 85 + static/idn-api/beta/paths/task-status.yaml | 71 + static/idn-api/beta/paths/transform.yaml | 115 + static/idn-api/beta/paths/transforms.yaml | 99 + .../paths/trigger-invocations-complete.yaml | 38 + .../trigger-invocations-pending-events.yaml | 59 + .../beta/paths/trigger-invocations-start.yaml | 41 + .../paths/trigger-invocations-status.yaml | 70 + .../beta/paths/trigger-invocations-test.yaml | 57 + .../beta/paths/trigger-invocations.yaml | 62 + .../beta/paths/trigger-subscription.yaml | 176 + .../paths/trigger-subscriptions-internal.yaml | 35 + ...trigger-subscriptions-validate-filter.yaml | 47 + .../beta/paths/trigger-subscriptions.yaml | 198 + static/idn-api/beta/paths/triggers.yaml | 62 + .../beta/paths/verified-from-address.yaml | 28 + .../beta/paths/verified-from-addresses.yaml | 87 + static/idn-api/beta/paths/work-item.yaml | 63 + .../paths/work-items-account-selection.yaml | 38 + .../work-items-approve-approval-item.yaml | 35 + ...work-items-bulk-approve-approval-item.yaml | 28 + .../work-items-bulk-reject-approval-item.yaml | 28 + .../beta/paths/work-items-complete.yaml | 28 + .../paths/work-items-completed-count.yaml | 31 + .../beta/paths/work-items-completed.yaml | 35 + .../idn-api/beta/paths/work-items-count.yaml | 31 + .../work-items-reject-approval-item.yaml | 35 + .../beta/paths/work-items-summary.yaml | 31 + static/idn-api/beta/paths/work-items.yaml | 34 + .../beta/paths/workflow-execution-cancel.yaml | 35 + .../paths/workflow-execution-history.yaml | 42 + .../beta/paths/workflow-execution.yaml | 41 + .../beta/paths/workflow-executions.yaml | 40 + .../paths/workflow-external-execute-test.yaml | 57 + .../beta/paths/workflow-external-execute.yaml | 61 + .../paths/workflow-external-oauth-client.yaml | 37 + .../beta/paths/workflow-library-actions.yaml | 50 + .../paths/workflow-library-operators.yaml | 30 + .../beta/paths/workflow-library-triggers.yaml | 50 + .../idn-api/beta/paths/workflow-library.yaml | 39 + static/idn-api/beta/paths/workflow-test.yaml | 97 + static/idn-api/beta/paths/workflow.yaml | 224 + static/idn-api/beta/paths/workflows.yaml | 157 + .../beta/schemas/AWSCredentialsResponse.yaml | 48 + .../beta/schemas/AccessConstraint.yaml | 26 + .../idn-api/beta/schemas/AccessCriteria.yaml | 26 + ...AccessGranterAuthSupportLoginResponse.yaml | 33 + .../AccessItemAccessProfileResponse.yaml | 38 + .../schemas/AccessItemAccountResponse.yaml | 31 + .../beta/schemas/AccessItemAppResponse.yaml | 20 + .../beta/schemas/AccessItemAssociated.yaml | 45 + .../idn-api/beta/schemas/AccessItemDiff.yaml | 21 + .../beta/schemas/AccessItemDiffSummary.yaml | 11 + .../AccessItemEntitlementResponse.yaml | 39 + .../idn-api/beta/schemas/AccessItemRef.yaml | 14 + .../beta/schemas/AccessItemRemoved.yaml | 46 + .../beta/schemas/AccessItemRoleResponse.yaml | 24 + .../beta/schemas/AccessRecommendation.yaml | 22 + .../schemas/AccessRecommendationMessage.yaml | 6 + .../idn-api/beta/schemas/AccessReference.yaml | 26 + .../schemas/AccessRequestItemResponse.yaml | 41 + ...essRequestRecommendationActionItemDto.yaml | 12 + ...stRecommendationActionItemResponseDto.yaml | 13 + .../AccessRequestRecommendationItem.yaml | 9 + ...AccessRequestRecommendationItemDetail.yaml | 47 + .../AccessRequestRecommendationItemType.yaml | 4 + .../beta/schemas/AccessRequestResponse.yaml | 26 + .../idn-api/beta/schemas/AccessRequested.yaml | 17 + .../AccessRolesChangeSegmentAssignments.yaml | 41 + static/idn-api/beta/schemas/AccessType.yaml | 6 + static/idn-api/beta/schemas/Account.yaml | 32 + .../idn-api/beta/schemas/AccountAction.yaml | 18 + .../schemas/AccountAggregationStatus.yaml | 45 + .../beta/schemas/AccountAttributes.yaml | 13 + .../idn-api/beta/schemas/AccountDetails.yaml | 77 + .../beta/schemas/AccountStatusChanged.yaml | 67 + .../beta/schemas/AccountToggleRequest.yaml | 13 + .../beta/schemas/AccountUnlockRequest.yaml | 17 + .../beta/schemas/AccountsAsyncResult.yaml | 9 + .../beta/schemas/ActivateCampaignOptions.yaml | 9 + .../beta/schemas/ActiveInvocation.yaml | 18 + static/idn-api/beta/schemas/ActivityData.yaml | 26 + .../beta/schemas/ActivityDataSource.yaml | 17 + .../beta/schemas/AdminReviewReassign.yaml | 27 + .../beta/schemas/AggregationState.yaml | 21 + .../idn-api/beta/schemas/AirflowDagDto.yaml | 30 + .../idn-api/beta/schemas/AmsCapability.yaml | 45 + static/idn-api/beta/schemas/AmsRightSet.yaml | 26 + .../beta/schemas/ApplicationReference.yaml | 17 + .../beta/schemas/ApprovalInfoResponse.yaml | 14 + .../beta/schemas/ApprovalItemDetails.yaml | 28 + .../idn-api/beta/schemas/ApprovalStatus.yaml | 8 + .../idn-api/beta/schemas/ApprovalSummary.yaml | 11 + static/idn-api/beta/schemas/Argument.yaml | 16 + .../AttrSyncSourceAttributeConfig.yaml | 25 + .../beta/schemas/AttrSyncSourceConfig.yaml | 33 + .../AttrSyncTenantAttributeConfig.yaml | 39 + .../beta/schemas/AttrSyncTenantConfig.yaml | 28 + .../schemas/AttrSyncTenantSyncTarget.yaml | 14 + .../idn-api/beta/schemas/AttributeChange.yaml | 15 + .../beta/schemas/AttributeDefinition.yaml | 34 + .../beta/schemas/AttributeDefinitionType.yaml | 8 + .../beta/schemas/AttributesChanged.yaml | 23 + .../beta/schemas/AuthOrgConfiguration.yaml | 17 + .../beta/schemas/AuthSupportLoginRequest.yaml | 12 + .../schemas/AuthSupportLoginResponse.yaml | 29 + .../schemas/AuthSupportTenantRequest.yaml | 10 + .../schemas/AuthSupportTenantResponse.yaml | 24 + .../AuthSupportTransferStatusResponse.yaml | 20 + .../AuthSupportUserEligibilityResponse.yaml | 5 + static/idn-api/beta/schemas/AuthUser.yaml | 74 + .../beta/schemas/AuthUserSaveRequest.yaml | 52 + .../beta/schemas/AuthenticationType.yaml | 6 + .../idn-api/beta/schemas/BaseCommonDto.yaml | 25 + .../beta/schemas/BaseReferenceDto.yaml | 10 + .../idn-api/beta/schemas/BasicAuthConfig.yaml | 12 + .../idn-api/beta/schemas/BasicProvision.yaml | 26 + .../beta/schemas/BearerTokenAuthConfig.yaml | 9 + .../beta/schemas/BulkTaggedObject.yaml | 24 + .../beta/schemas/BulkUpdateAuthUser.yaml | 28 + static/idn-api/beta/schemas/Campaign.yaml | 182 + .../idn-api/beta/schemas/CampaignAlert.yaml | 12 + .../idn-api/beta/schemas/CampaignReport.yaml | 29 + .../beta/schemas/CampaignReportsConfig.yaml | 10 + .../beta/schemas/CampaignTemplate.yaml | 75 + .../schemas/CancelableAccountActivity.yaml | 60 + .../beta/schemas/CertificationDto.yaml | 70 + .../beta/schemas/CertificationItemType.yaml | 11 + .../beta/schemas/CertificationReference.yaml | 24 + .../beta/schemas/CertificationResponse.yaml | 23 + .../beta/schemas/CertificationTask.yaml | 46 + .../beta/schemas/CertifierResponse.yaml | 11 + .../idn-api/beta/schemas/ChangeRequest.yaml | 14 + static/idn-api/beta/schemas/CheckStatus.yaml | 38 + .../beta/schemas/ClientLogConfiguration.yaml | 34 + .../beta/schemas/ClientStatusBody.yaml | 39 + static/idn-api/beta/schemas/ClientType.yaml | 6 + .../idn-api/beta/schemas/ClusterSource.yaml | 30 + .../beta/schemas/ClusterUpgradeData.yaml | 21 + static/idn-api/beta/schemas/CommentDto.yaml | 4 + .../schemas/CommonAccessClassifyRequest.yaml | 8 + .../schemas/CommonAccessClassifyResponse.yaml | 29 + .../beta/schemas/CommonAccessIDStatus.yaml | 14 + .../beta/schemas/CommonAccessItemAccess.yaml | 21 + .../beta/schemas/CommonAccessItemRequest.yaml | 7 + .../schemas/CommonAccessItemResponse.yaml | 18 + .../beta/schemas/CommonAccessItemState.yaml | 3 + .../beta/schemas/CommonAccessResponse.yaml | 19 + .../beta/schemas/CommonAccessType.yaml | 4 + .../beta/schemas/CompleteCampaignOptions.yaml | 11 + .../beta/schemas/CompleteInvocation.yaml | 17 + .../beta/schemas/CompleteInvocationInput.yaml | 8 + .../beta/schemas/CompletedApproval.yaml | 83 + .../beta/schemas/CompletedApprovalState.yaml | 7 + .../beta/schemas/ComplexRoleCriterion.yaml | 22 + .../beta/schemas/ComplexRoleCriterionKey.yaml | 22 + static/idn-api/beta/schemas/ConfigObject.yaml | 13 + .../schemas/ConflictingAccessCriteria.yaml | 6 + .../beta/schemas/ConnectorCacheConfig.yaml | 11 + .../idn-api/beta/schemas/ConnectorDetail.yaml | 49 + .../schemas/ConnectorFileUploadHistory.yaml | 11 + .../beta/schemas/ConnectorMessage.yaml | 12 + .../schemas/ConnectorRuleCreateRequest.yaml | 60 + .../beta/schemas/ConnectorRuleResponse.yaml | 20 + .../schemas/ConnectorRuleUpdateRequest.yaml | 12 + .../ConnectorRuleValidationResponse.yaml | 34 + .../schemas/ConnectorSourcesUploadFiles.yaml | 19 + .../schemas/CorrelatedGovernanceEvent.yaml | 43 + .../schemas/CreateOAuthClientRequest.yaml | 69 + .../schemas/CreateOAuthClientResponse.yaml | 99 + .../CreatePersonalAccessTokenRequest.yaml | 10 + .../CreatePersonalAccessTokenResponse.yaml | 28 + .../schemas/CustomPasswordInstruction.yaml | 29 + static/idn-api/beta/schemas/DataPipeline.yaml | 31 + .../beta/schemas/DataPipelineEvent.yaml | 40 + .../beta/schemas/DataPipelineOperation.yaml | 20 + .../beta/schemas/DataPipelineQualifiers.yaml | 24 + .../DataPipelineRelatedQualifiers.yaml | 14 + .../beta/schemas/DataPipelineSummary.yaml | 56 + .../idn-api/beta/schemas/DecisionSummary.yaml | 17 + .../beta/schemas/DeleteCampaignsRequest.yaml | 9 + .../beta/schemas/EmailNotificationOption.yaml | 21 + static/idn-api/beta/schemas/EmailRequest.yaml | 23 + .../idn-api/beta/schemas/EmailStatusDto.yaml | 13 + static/idn-api/beta/schemas/Entitlement.yaml | 82 + .../schemas/EntitlementBulkUpdateRequest.yaml | 54 + .../idn-api/beta/schemas/EntitlementDto.yaml | 36 + .../schemas/EntitlementPopularityDto.yaml | 9 + .../beta/schemas/EntitlementRefDto.yaml | 15 + .../beta/schemas/EntitlementViewResponse.yaml | 37 + .../beta/schemas/EventBridgeConfig.yaml | 14 + static/idn-api/beta/schemas/EventStatus.yaml | 8 + .../idn-api/beta/schemas/ExportOptions.yaml | 25 + .../idn-api/beta/schemas/ExportPayload.yaml | 8 + static/idn-api/beta/schemas/Expression.yaml | 21 + .../idn-api/beta/schemas/ExtractRequest.yaml | 34 + .../idn-api/beta/schemas/FeatureValueDto.yaml | 16 + .../schemas/FederationProtocolDetails.yaml | 11 + static/idn-api/beta/schemas/FieldDetails.yaml | 25 + .../beta/schemas/ForgotUsernameRequest.yaml | 6 + static/idn-api/beta/schemas/FormDetails.yaml | 24 + .../idn-api/beta/schemas/FormItemDetails.yaml | 6 + .../beta/schemas/ForwardApprovalDto.yaml | 15 + static/idn-api/beta/schemas/FullAccount.yaml | 24 + .../beta/schemas/GetMfaTokenRequest.yaml | 6 + .../beta/schemas/GetMfaTokenResponse.yaml | 6 + .../beta/schemas/GetOAuthClientResponse.yaml | 94 + .../GetPersonalAccessTokenResponse.yaml | 23 + .../beta/schemas/GetSecretResponse.yaml | 14 + .../beta/schemas/GovernanceEventResponse.yaml | 30 + static/idn-api/beta/schemas/GrantType.yaml | 7 + .../beta/schemas/HttpAuthenticationType.yaml | 18 + static/idn-api/beta/schemas/HttpConfig.yaml | 18 + .../beta/schemas/HttpDispatchMode.yaml | 7 + .../beta/schemas/IaiConfigurationDto.yaml | 15 + static/idn-api/beta/schemas/IaiDataRole.yaml | 20 + .../beta/schemas/IaiDataRoleEntitlement.yaml | 28 + .../IaiDataRoleEntitlementIdentity.yaml | 22 + .../IaiDataRoleIdentityEntitlement.yaml | 39 + static/idn-api/beta/schemas/Identity.yaml | 66 + .../beta/schemas/IdentityAttributeConfig.yaml | 10 + .../IdentityAttributeDistributionDto.yaml | 24 + .../schemas/IdentityAttributePreview.yaml | 17 + .../schemas/IdentityAttributeTransform.yaml | 9 + .../IdentityAttributeValueCountDto.yaml | 10 + .../schemas/IdentityCertificationTask.yaml | 27 + .../beta/schemas/IdentityCertified.yaml | 44 + .../beta/schemas/IdentityCompareResponse.yaml | 20 + .../beta/schemas/IdentityDeletedEvent.yaml | 23 + .../beta/schemas/IdentityEntitlements.yaml | 10 + .../IdentityExceptionReportReference.yaml | 11 + .../beta/schemas/IdentityGroupDto.yaml | 12 + .../schemas/IdentityHistoryEventResponse.yaml | 11 + .../beta/schemas/IdentityHistoryResponse.yaml | 45 + .../beta/schemas/IdentityListItem.yaml | 26 + .../idn-api/beta/schemas/IdentityPreview.yaml | 9 + .../beta/schemas/IdentityPreviewRequest.yaml | 8 + .../beta/schemas/IdentityPreviewResponse.yaml | 8 + .../idn-api/beta/schemas/IdentityProfile.yaml | 51 + .../schemas/IdentityProfileBulkDelete.yaml | 5 + .../IdentityProfileExportedObject.yaml | 11 + .../schemas/IdentityRefWithAttributes.yaml | 15 + .../beta/schemas/IdentityReferenceWithId.yaml | 9 + .../schemas/IdentityRequestItemResponse.yaml | 43 + .../IdentitySnapshotSummaryResponse.yaml | 6 + .../beta/schemas/IdentitySummaryResponse.yaml | 15 + .../idn-api/beta/schemas/IdentitySyncJob.yaml | 27 + .../beta/schemas/IdentitySyncPayload.yaml | 13 + .../beta/schemas/IdentityWithNewAccess.yaml | 21 + static/idn-api/beta/schemas/IdpDetails.yaml | 52 + .../idn-api/beta/schemas/ImportOptions.yaml | 30 + static/idn-api/beta/schemas/Incident.yaml | 14 + static/idn-api/beta/schemas/InlineConfig.yaml | 11 + .../beta/schemas/InternalIdentityDto.yaml | 13 + static/idn-api/beta/schemas/Invocation.yaml | 18 + .../beta/schemas/InvocationStatus.yaml | 40 + .../beta/schemas/InvocationStatusType.yaml | 14 + .../beta/schemas/JITConfiguration.yaml | 18 + static/idn-api/beta/schemas/JobState.yaml | 16 + static/idn-api/beta/schemas/JobType.yaml | 9 + static/idn-api/beta/schemas/JsonPatch.yaml | 16 + .../beta/schemas/JsonPatchOperation.yaml | 34 + .../beta/schemas/LatestOutlierSummary.yaml | 28 + .../idn-api/beta/schemas/LifecycleState.yaml | 55 + .../beta/schemas/LocalizedMessage.yaml | 14 + .../beta/schemas/LockoutConfiguration.yaml | 14 + static/idn-api/beta/schemas/LogLevelSpec.yaml | 6 + .../idn-api/beta/schemas/ManagedClient.yaml | 83 + .../beta/schemas/ManagedClientStatus.yaml | 46 + .../ManagedClientStatusAggResponse.yaml | 150 + .../beta/schemas/ManagedClientStatusEnum.yaml | 9 + .../beta/schemas/ManagedClientType.yaml | 7 + .../idn-api/beta/schemas/ManagedCluster.yaml | 111 + .../schemas/ManagedClusterAttributes.yaml | 11 + .../beta/schemas/ManagedClusterKeyPair.yaml | 15 + .../beta/schemas/ManagedClusterQueue.yaml | 11 + .../beta/schemas/ManagedClusterRedis.yaml | 12 + .../beta/schemas/ManagedClusterStatus.yaml | 113 + .../beta/schemas/ManagedClusterType.yaml | 30 + .../beta/schemas/ManagedClusterTypes.yaml | 6 + .../idn-api/beta/schemas/ManagedProcess.yaml | 28 + .../schemas/ManagedProcessConfiguration.yaml | 24 + .../ManagedProcessConfigurationHashMap.yaml | 17 + .../schemas/ManagerCorrelationMapping.yaml | 14 + static/idn-api/beta/schemas/Medium.yaml | 8 + .../idn-api/beta/schemas/MemberReference.yaml | 19 + .../beta/schemas/MessageCatalogDto.yaml | 11 + .../idn-api/beta/schemas/MetricResponse.yaml | 11 + static/idn-api/beta/schemas/MfaConfig.yaml | 16 + .../beta/schemas/MfaConfigTestResponse.yaml | 16 + .../beta/schemas/MfaRegistrationResponse.yaml | 5 + .../idn-api/beta/schemas/MfaResetRequest.yaml | 6 + .../beta/schemas/MfaVerificationResponse.yaml | 5 + .../beta/schemas/MultiPolicyRequest.yaml | 7 + .../beta/schemas/NetworkConfiguration.yaml | 18 + .../schemas/NonEmployeeApprovalDecision.yaml | 6 + .../beta/schemas/NonEmployeeApprovalItem.yaml | 6 + .../schemas/NonEmployeeApprovalItemBase.yaml | 33 + .../NonEmployeeApprovalItemDetail.yaml | 7 + .../schemas/NonEmployeeApprovalSummary.yaml | 11 + .../schemas/NonEmployeeBulkUploadJob.yaml | 34 + .../schemas/NonEmployeeBulkUploadStatus.yaml | 17 + .../schemas/NonEmployeeIdnUserRequest.yaml | 9 + .../beta/schemas/NonEmployeeRecord.yaml | 58 + .../NonEmployeeRejectApprovalDecision.yaml | 8 + .../beta/schemas/NonEmployeeRequest.yaml | 70 + .../beta/schemas/NonEmployeeRequestBody.yaml | 56 + .../beta/schemas/NonEmployeeRequestLite.yaml | 12 + .../schemas/NonEmployeeRequestSummary.yaml | 14 + ...NonEmployeeRequestWithoutApprovalItem.yaml | 65 + .../schemas/NonEmployeeSchemaAttribute.yaml | 47 + .../NonEmployeeSchemaAttributeBody.yaml | 30 + .../NonEmployeeSchemaAttributeType.yaml | 6 + .../beta/schemas/NonEmployeeSource.yaml | 24 + .../beta/schemas/NonEmployeeSourceLite.yaml | 19 + ...mployeeSourceLiteWithSchemaAttributes.yaml | 9 + .../schemas/NonEmployeeSourceRequestBody.yaml | 33 + .../NonEmployeeSourceWithCloudExternalId.yaml | 8 + .../schemas/NonEmployeeSourceWithNECount.yaml | 7 + .../schemas/NotificationTemplateContext.yaml | 16 + .../schemas/ObjectExportImportOptions.yaml | 14 + .../beta/schemas/ObjectImportResult.yaml | 29 + static/idn-api/beta/schemas/Operation.yaml | 10 + static/idn-api/beta/schemas/OrgConfig.yaml | 43 + .../beta/schemas/OrgConfiguration.yaml | 13 + static/idn-api/beta/schemas/Outlier.yaml | 62 + .../beta/schemas/OutlierReference.yaml | 25 + .../idn-api/beta/schemas/OutlierSummary.yaml | 24 + .../schemas/OutliersBulkDetectionRequest.yaml | 31 + .../idn-api/beta/schemas/OwnerResponse.yaml | 11 + .../beta/schemas/PasswordChangeRequest.yaml | 25 + .../beta/schemas/PasswordChangeResponse.yaml | 14 + .../beta/schemas/PasswordDigitToken.yaml | 10 + .../beta/schemas/PasswordDigitTokenReset.yaml | 16 + static/idn-api/beta/schemas/PasswordInfo.yaml | 33 + .../beta/schemas/PasswordInfoAccount.yaml | 16 + .../beta/schemas/PasswordInfoQueryDTO.yaml | 10 + .../beta/schemas/PasswordOrgConfig.yaml | 17 + .../idn-api/beta/schemas/PasswordStatus.yaml | 24 + .../beta/schemas/PasswordSyncGroup.yaml | 19 + .../beta/schemas/PasswordUpdateRequest.yaml | 6 + .../idn-api/beta/schemas/PeerGroupMember.yaml | 17 + .../idn-api/beta/schemas/PendingApproval.yaml | 77 + .../beta/schemas/PendingApprovalAction.yaml | 8 + .../idn-api/beta/schemas/PermissionDto.yaml | 16 + .../idn-api/beta/schemas/PreferencesDto.yaml | 19 + .../beta/schemas/ProvisioningConfig.yaml | 21 + .../PublicIdentityAttributeConfig.yaml | 13 + .../beta/schemas/PublicIdentityConfig.yaml | 15 + .../schemas/QueuedCheckConfigDetails.yaml | 14 + static/idn-api/beta/schemas/Reassignment.yaml | 8 + .../beta/schemas/RecommendationConfigDto.yaml | 18 + .../beta/schemas/RecommendationRequest.yaml | 8 + .../schemas/RecommendationRequestDto.yaml | 27 + .../beta/schemas/RecommendationResponse.yaml | 36 + .../schemas/RecommendationResponseDto.yaml | 6 + .../beta/schemas/RecommenderCalculations.yaml | 35 + .../beta/schemas/RemediationItemDetails.yaml | 38 + .../idn-api/beta/schemas/ReportConfigDTO.yaml | 24 + .../beta/schemas/ReportResultReference.yaml | 13 + static/idn-api/beta/schemas/ReportType.yaml | 6 + .../schemas/RequestableObjectReference.yaml | 22 + .../beta/schemas/ResourceBundleMessage.yaml | 10 + .../idn-api/beta/schemas/ResourceObject.yaml | 88 + .../beta/schemas/ResourceObjectsRequest.yaml | 14 + .../beta/schemas/ResourceObjectsResponse.yaml | 30 + static/idn-api/beta/schemas/ResponseMode.yaml | 7 + static/idn-api/beta/schemas/ReviewData.yaml | 29 + static/idn-api/beta/schemas/ReviewItem.yaml | 32 + .../beta/schemas/ReviewItemActivity.yaml | 8 + .../beta/schemas/ReviewItemsActivityTask.yaml | 14 + static/idn-api/beta/schemas/Reviewer.yaml | 20 + static/idn-api/beta/schemas/RoleInsight.yaml | 23 + .../beta/schemas/RoleInsightsEntitlement.yaml | 28 + .../RoleInsightsEntitlementChanges.yaml | 23 + .../beta/schemas/RoleInsightsIdentities.yaml | 21 + .../beta/schemas/RoleInsightsInsight.yaml | 18 + .../beta/schemas/RoleInsightsResponse.yaml | 40 + .../beta/schemas/RoleInsightsRole.yaml | 22 + .../beta/schemas/RoleInsightsSummary.yaml | 26 + .../beta/schemas/RoleMiningEntitlement.yaml | 34 + .../schemas/RoleMiningEntitlementRef.yaml | 11 + .../beta/schemas/RoleMiningIdentity.yaml | 21 + .../RoleMiningIdentityDistribution.yaml | 11 + .../beta/schemas/RoleMiningPotentialRole.yaml | 44 + .../RoleMiningPotentialRoleApplication.yaml | 11 + ...leMiningPotentialRoleEditEntitlements.yaml | 13 + .../RoleMiningPotentialRoleExportRequest.yaml | 13 + ...RoleMiningPotentialRoleExportResponse.yaml | 18 + .../RoleMiningPotentialRoleExportState.yaml | 6 + ...leMiningPotentialRoleProvisionRequest.yaml | 18 + ...RoleMiningPotentialRoleProvisionState.yaml | 6 + .../schemas/RoleMiningPotentialRoleRef.yaml | 9 + .../RoleMiningPotentialRoleSummary.yaml | 47 + ...iningPotentialRoleSummaryDistribution.yaml | 23 + .../beta/schemas/RoleMiningSessionDto.yaml | 72 + .../schemas/RoleMiningSessionResponse.yaml | 55 + .../beta/schemas/RoleMiningSessionScope.yaml | 27 + .../beta/schemas/RoleMiningSessionStatus.yaml | 6 + .../idn-api/beta/schemas/RuleReference.yaml | 14 + .../schemas/SaasManagementApplication.yaml | 80 + .../schemas/SaasManagementApplicationMap.yaml | 17 + static/idn-api/beta/schemas/Schedule.yaml | 151 + .../idn-api/beta/schemas/ScheduledAction.yaml | 34 + static/idn-api/beta/schemas/Schema.yaml | 78 + static/idn-api/beta/schemas/ScriptConfig.yaml | 15 + .../beta/schemas/SearchAttributeConfig.yaml | 17 + .../idn-api/beta/schemas/SectionDetails.yaml | 18 + static/idn-api/beta/schemas/Segment.yaml | 30 + .../schemas/SegmentChangeAssignments.yaml | 35 + .../SendTestNotificationRequestDto.yaml | 16 + .../schemas/ServiceDeskIntegrationDto.yaml | 50 + .../ServiceDeskIntegrationTemplateDto.yaml | 21 + .../ServiceDeskIntegrationTemplateType.yaml | 18 + .../schemas/ServiceProviderConfiguration.yaml | 15 + .../idn-api/beta/schemas/ServiceRequest.yaml | 14 + .../beta/schemas/ServiceRequestProvision.yaml | 11 + .../beta/schemas/SessionConfiguration.yaml | 14 + .../beta/schemas/SetEncryptionKeysData.yaml | 10 + static/idn-api/beta/schemas/SlimAccount.yaml | 47 + static/idn-api/beta/schemas/SlimCampaign.yaml | 66 + .../beta/schemas/SodExemptCriteria.yaml | 18 + static/idn-api/beta/schemas/SodPolicy.yaml | 82 + .../beta/schemas/SodPolicySchedule.yaml | 38 + .../beta/schemas/SodViolationCheck.yaml | 15 + .../beta/schemas/SodViolationCheckResult.yaml | 37 + .../beta/schemas/SodViolationContext.yaml | 24 + .../SodViolationContextCheckCompleted.yaml | 14 + static/idn-api/beta/schemas/Source.yaml | 154 + static/idn-api/beta/schemas/SourceCode.yaml | 15 + .../idn-api/beta/schemas/SourceFeature.yaml | 82 + .../idn-api/beta/schemas/SourceSyncJob.yaml | 27 + .../beta/schemas/SourceSyncPayload.yaml | 13 + .../beta/schemas/SpConfigExportResults.yaml | 31 + .../beta/schemas/SpConfigImportResults.yaml | 32 + static/idn-api/beta/schemas/SpConfigJob.yaml | 61 + .../idn-api/beta/schemas/SpConfigMessage.yaml | 22 + .../idn-api/beta/schemas/SpConfigObject.yaml | 52 + static/idn-api/beta/schemas/SpConfigUrl.yaml | 10 + static/idn-api/beta/schemas/SpDetails.yaml | 21 + .../idn-api/beta/schemas/StandardLevel.yaml | 11 + .../beta/schemas/StartInvocationInput.yaml | 14 + static/idn-api/beta/schemas/StatusChange.yaml | 8 + .../idn-api/beta/schemas/StatusResponse.yaml | 54 + static/idn-api/beta/schemas/Subscription.yaml | 58 + .../beta/schemas/SubscriptionInternal.yaml | 39 + .../schemas/SubscriptionPatchRequest.yaml | 49 + .../beta/schemas/SubscriptionPostRequest.yaml | 47 + .../beta/schemas/SubscriptionPutRequest.yaml | 39 + .../beta/schemas/SubscriptionType.yaml | 6 + .../beta/schemas/SyncPasswordRequest.yaml | 53 + static/idn-api/beta/schemas/Tag.yaml | 34 + static/idn-api/beta/schemas/TaggedObject.yaml | 10 + .../idn-api/beta/schemas/TargetSummary.yaml | 25 + .../beta/schemas/TaskDefinitionSummary.yaml | 34 + .../idn-api/beta/schemas/TaskInvocation.yaml | 75 + .../beta/schemas/TaskReturnDetails.yaml | 13 + static/idn-api/beta/schemas/TaskStatus.yaml | 92 + .../beta/schemas/TaskStatusMessage.yaml | 26 + .../idn-api/beta/schemas/TeamSummaryDto.yaml | 8 + .../beta/schemas/TeamSummaryReportsDto.yaml | 7 + .../beta/schemas/TemplateBulkDeleteDto.yaml | 18 + static/idn-api/beta/schemas/TemplateDto.yaml | 61 + .../beta/schemas/TemplateDtoDefault.yaml | 43 + .../idn-api/beta/schemas/TestInvocation.yaml | 23 + static/idn-api/beta/schemas/TicketType.yaml | 8 + .../idn-api/beta/schemas/TotpCodeRequest.yaml | 6 + static/idn-api/beta/schemas/Transform.yaml | 38 + .../beta/schemas/TransformDefinition.yaml | 17 + .../beta/schemas/TranslationMessage.yaml | 11 + static/idn-api/beta/schemas/Trigger.yaml | 65 + static/idn-api/beta/schemas/TriggerType.yaml | 6 + .../idn-api/beta/schemas/V3ConnectorDto.yaml | 30 + static/idn-api/beta/schemas/VaJob.yaml | 70 + .../beta/schemas/ValidateFilterInputDto.yaml | 17 + .../beta/schemas/ValidateFilterOutputDto.yaml | 5 + static/idn-api/beta/schemas/Value.yaml | 10 + .../ViolationOwnerAssignmentConfig.yaml | 17 + .../beta/schemas/VisibilityCriteria.yaml | 4 + static/idn-api/beta/schemas/WorkItems.yaml | 61 + .../idn-api/beta/schemas/WorkItemsCount.yaml | 6 + .../beta/schemas/WorkItemsSummary.yaml | 14 + static/idn-api/beta/schemas/Workflow.yaml | 38 + static/idn-api/beta/schemas/WorkflowBody.yaml | 34 + .../beta/schemas/WorkflowDefinition.yaml | 28 + .../beta/schemas/WorkflowExecution.yaml | 34 + .../beta/schemas/WorkflowExecutionEvent.yaml | 27 + .../beta/schemas/WorkflowLibraryAction.yaml | 136 + .../schemas/WorkflowLibraryFormFields.yaml | 30 + .../beta/schemas/WorkflowLibraryOperator.yaml | 60 + .../beta/schemas/WorkflowLibraryTrigger.yaml | 67 + .../beta/schemas/WorkflowOAuthClient.yaml | 14 + .../beta/schemas/WorkflowReference.yaml | 11 + .../idn-api/beta/schemas/WorkflowTrigger.yaml | 19 + .../examples/CampaignTemplateManager.yaml | 39 + .../CampaignTemplateRoleComposition.yaml | 45 + .../examples/CampaignTemplateSearch.yaml | 43 + .../examples/CampaignTemplateSourceOwner.yaml | 40 + .../campaign/examples/CampaignTemplates.yaml | 157 + .../examples/CreateCampaignManager.yaml | 15 + .../CreateCampaignRoleComposition.yaml | 19 + .../examples/CreateCampaignSearch.yaml | 15 + .../examples/CreateCampaignSourceOwner.yaml | 15 + .../CreateCampaignTemplateManager.yaml | 18 + ...CreateCampaignTemplateRoleComposition.yaml | 19 + .../CreateCampaignTemplateSearch.yaml | 21 + .../CreateCampaignTemplateSourceOwner.yaml | 20 + .../examples/FullCampaignManager.yaml | 24 + .../examples/FullCampaignRoleComposition.yaml | 34 + .../campaign/examples/FullCampaignSearch.yaml | 32 + .../examples/FullCampaignSourceOwner.yaml | 26 + .../campaign/examples/FullCampaigns.yaml | 116 + .../examples/SlimCampaignManager.yaml | 10 + .../examples/SlimCampaignRoleComposition.yaml | 10 + .../campaign/examples/SlimCampaignSearch.yaml | 10 + .../examples/SlimCampaignSourceOwner.yaml | 10 + .../campaign/examples/SlimCampaigns.yaml | 38 + .../beta/schemas/iai/EntityCreatedByDTO.yaml | 10 + .../beta/schemas/iai/RoleMiningRoleType.yaml | 6 + .../sod/examples/exception-body-bulk.yaml | 54 + .../sod/examples/exception-body-patch.yaml | 10 + .../schemas/sod/examples/exception-body.yaml | 49 + .../sod/examples/exception-response-bulk.yaml | 5 + .../sod/examples/exception-response.yaml | 49 + .../beta/schemas/sod/models/ArmRisk.yaml | 48 + .../beta/schemas/sod/models/BulkCreate.yaml | 6 + .../beta/schemas/sod/models/Exception.yaml | 46 + .../sod/models/ExceptionAccessCriteria.yaml | 6 + .../schemas/sod/models/ExceptionCriteria.yaml | 30 + .../sod/models/ExceptionCriteriaAccess.yaml | 20 + .../schemas/sod/models/ExceptionList.yaml | 7 + .../sod/models/IdentityWithNewAccess.yaml | 30 + .../schemas/sod/models/ViolationContext.yaml | 23 + .../sod/models/ViolationPrediction.yaml | 10 + .../beta/schemas/sod/responses/200-list.yaml | 57 + .../beta/schemas/sod/responses/200-patch.yaml | 8 + .../beta/schemas/sod/responses/200.yaml | 8 + .../beta/schemas/sod/responses/201.yaml | 8 + .../beta/schemas/sod/responses/202.yaml | 8 + .../AccessRequestDynamicApprover.yaml | 75 + .../AccessRequestPostApproval.yaml | 129 + .../AccessRequestPreApproval.yaml | 82 + .../AccountAggregationCompleted.yaml | 103 + .../AccountAttributesChanged.yaml | 112 + .../example-input/AccountCorrelated.yaml | 86 + .../example-input/AccountUncorrelated.yaml | 64 + .../AccountsCollectedForAggregation.yaml | 111 + .../example-input/CampaignActivated.yaml | 79 + .../trigger/example-input/CampaignEnded.yaml | 79 + .../example-input/CampaignGenerated.yaml | 79 + .../example-input/CertificationSignedOff.yaml | 33 + .../IdentityAttributesChanged.yaml | 67 + .../example-input/IdentityCreated.yaml | 27 + .../example-input/IdentityDeleted.yaml | 27 + .../example-input/ProvisioningCompleted.yaml | 147 + .../example-input/SavedSearchComplete.yaml | 117 + .../trigger/example-input/SourceAccount.yaml | 55 + .../example-input/SourceAccountCreated.yaml | 2 + .../example-input/SourceAccountDeleted.yaml | 2 + .../example-input/SourceAccountUpdated.yaml | 2 + .../trigger/example-input/SourceCreated.yaml | 45 + .../trigger/example-input/SourceDeleted.yaml | 45 + .../trigger/example-input/SourceUpdated.yaml | 44 + .../VAClusterStatusChangeEvent.yaml | 86 + .../AccessRequestDynamicApprover.yaml | 22 + .../AccessRequestPreApproval.yaml | 19 + .../trigger-attributes/EventAttributes.yaml | 13 + .../ExternalAttributes.yaml | 13 + .../ScheduledAttributes.yaml | 12 + .../idn-api/beta/securitySchemes/OAuth2.yaml | 57 + static/idn-api/sailpoint-api.beta.yaml | 1093 + .../idn-api/sailpoint-api.internal.beta.yaml | 359 + static/idn-api/sailpoint-api.v3.yaml | 436 + ...eDeskIntegrations-v3.1.0-oas3-swagger.yaml | 41 + static/idn-api/v3/parameters/count.yaml | 18 + static/idn-api/v3/parameters/limit.yaml | 15 + static/idn-api/v3/parameters/limit50.yaml | 15 + static/idn-api/v3/parameters/offset.yaml | 14 + .../idn-api/v3/parameters/path/search/id.yaml | 6 + .../v3/parameters/path/search/index.yaml | 9 + static/idn-api/v3/paths/.gitignore | 24 + .../access-request-approval-summary.yaml | 48 + .../v3/paths/access-request-cancel.yaml | 35 + .../v3/paths/access-request-config.yaml | 57 + .../v3/paths/access-request-status.yaml | 90 + static/idn-api/v3/paths/access-requests.yaml | 55 + .../idn-api/v3/paths/account-activities.yaml | 90 + .../v3/paths/account-activity-get-one.yaml | 36 + .../v3/paths/account-activity-list.yaml | 85 + static/idn-api/v3/paths/account.yaml | 188 + .../idn-api/v3/paths/accounts-id-disable.yaml | 45 + .../idn-api/v3/paths/accounts-id-enable.yaml | 45 + .../v3/paths/accounts-id-entitlements.yaml | 44 + .../idn-api/v3/paths/accounts-id-reload.yaml | 39 + .../idn-api/v3/paths/accounts-id-unlock.yaml | 45 + static/idn-api/v3/paths/accounts.yaml | 98 + .../approve-access-request-approval.yaml | 37 + .../completed-access-request-approvals.yaml | 76 + .../forward-access-request-approval.yaml | 38 + .../v3/paths/identity-certification.yaml | 38 + ...ty-certifications-access-review-items.yaml | 112 + ...ntity-certifications-access-summaries.yaml | 106 + .../paths/identity-certifications-decide.yaml | 56 + ...ntity-certifications-decision-summary.yaml | 48 + ...ity-certifications-identity-summaries.yaml | 78 + ...ntity-certifications-identity-summary.yaml | 40 + .../identity-certifications-reassign.yaml | 41 + .../identity-certifications-sign-off.yaml | 36 + .../v3/paths/identity-certifications.yaml | 66 + .../identity-profile-default-config.yaml | 38 + .../identity-profile-lifecycle-state.yaml | 175 + .../identity-profile-lifecycle-states.yaml | 94 + static/idn-api/v3/paths/identity-profile.yaml | 38 + .../v3/paths/identity-profiles-export.yaml | 61 + .../v3/paths/identity-profiles-import.yaml | 36 + .../idn-api/v3/paths/identity-profiles.yaml | 63 + .../paths/identity-set-lifecycle-state.yaml | 54 + .../v3/paths/non-employee-approval-list.yaml | 61 + .../paths/non-employee-approval-summary.yaml | 37 + .../v3/paths/non-employee-approve-get.yaml | 44 + .../paths/non-employee-approve-request.yaml | 41 + .../non-employee-bulk-upload-jobs-fail.yaml | 48 + .../idn-api/v3/paths/non-employee-record.yaml | 172 + .../non-employee-records-bulk-delete.yaml | 40 + .../v3/paths/non-employee-records.yaml | 92 + .../v3/paths/non-employee-reject-request.yaml | 41 + .../non-employee-request-summary-get.yaml | 38 + .../v3/paths/non-employee-request.yaml | 77 + .../v3/paths/non-employee-requests.yaml | 121 + .../paths/non-employee-source-aggregate.yaml | 35 + .../idn-api/v3/paths/non-employee-source.yaml | 123 + ...-employee-sources-bulk-upload-details.yaml | 40 + ...yee-sources-bulk-upload-non-employees.yaml | 63 + ...n-employee-sources-bulk-upload-status.yaml | 37 + ...employee-sources-export-non-employees.yaml | 40 + ...ces-export-schema-attributes-template.yaml | 38 + ...non-employee-sources-schema-attribute.yaml | 133 + ...on-employee-sources-schema-attributes.yaml | 118 + .../v3/paths/non-employee-sources.yaml | 96 + static/idn-api/v3/paths/oauth-client.yaml | 154 + static/idn-api/v3/paths/oauth-clients.yaml | 72 + .../v3/paths/password-change-status.yaml | 35 + .../pending-access-request-approvals.yaml | 75 + .../v3/paths/personal-access-token.yaml | 37 + .../v3/paths/personal-access-tokens.yaml | 90 + .../provisioning-policies-bulk-update.yaml | 50 + .../v3/paths/provisioning-policies.yaml | 180 + .../idn-api/v3/paths/provisioning-policy.yaml | 193 + .../v3/paths/public-identities-config.yaml | 60 + .../idn-api/v3/paths/public-identities.yaml | 106 + .../idn-api/v3/paths/query-password-info.yaml | 32 + .../paths/reject-access-request-approval.yaml | 37 + .../v3/paths/requestable-object-list.yaml | 102 + .../v3/paths/saved-searches-execute.yaml | 29 + .../idn-api/v3/paths/saved-searches-id.yaml | 64 + static/idn-api/v3/paths/saved-searches.yaml | 74 + .../v3/paths/scheduled-searches-id.yaml | 63 + .../paths/scheduled-searches-unsubscribe.yaml | 26 + .../idn-api/v3/paths/scheduled-searches.yaml | 74 + static/idn-api/v3/paths/schema.yaml | 193 + static/idn-api/v3/paths/schemas.yaml | 84 + static/idn-api/v3/paths/search-aggregate.yaml | 57 + static/idn-api/v3/paths/search-count.yaml | 28 + static/idn-api/v3/paths/search-get.yaml | 32 + static/idn-api/v3/paths/search-post.yaml | 72 + ...ervice-desk-integration-configuration.yaml | 66 + .../service-desk-integration-template.yaml | 39 + .../paths/service-desk-integration-types.yaml | 31 + .../v3/paths/service-desk-integration.yaml | 175 + .../v3/paths/service-desk-integrations.yaml | 109 + static/idn-api/v3/paths/set-password.yaml | 29 + .../v3/paths/source-accounts-schema.yaml | 92 + .../v3/paths/source-entitlements-schema.yaml | 105 + static/idn-api/v3/paths/source-health.yaml | 36 + .../paths/source-upload-connector-file.yaml | 46 + static/idn-api/v3/paths/source.yaml | 278 + static/idn-api/v3/paths/sources.yaml | 152 + static/idn-api/v3/paths/transform.yaml | 140 + static/idn-api/v3/paths/transforms.yaml | 119 + static/idn-api/v3/paths/work-item.yaml | 65 + .../paths/work-items-account-selection.yaml | 44 + .../work-items-approve-approval-item.yaml | 41 + ...work-items-bulk-approve-approval-item.yaml | 34 + .../work-items-bulk-reject-approval-item.yaml | 34 + .../v3/paths/work-items-completed-count.yaml | 33 + .../v3/paths/work-items-completed.yaml | 39 + static/idn-api/v3/paths/work-items-count.yaml | 33 + .../work-items-reject-approval-item.yaml | 41 + .../idn-api/v3/paths/work-items-summary.yaml | 33 + static/idn-api/v3/paths/work-items.yaml | 38 + static/idn-api/v3/responses/202.yaml | 5 + static/idn-api/v3/responses/204.yaml | 3 + static/idn-api/v3/responses/400.yaml | 5 + static/idn-api/v3/responses/401.yaml | 10 + static/idn-api/v3/responses/403.yaml | 15 + static/idn-api/v3/responses/404.yaml | 16 + static/idn-api/v3/responses/429.yaml | 9 + static/idn-api/v3/responses/500.yaml | 15 + static/idn-api/v3/schemas/AccessRequest.yaml | 29 + .../v3/schemas/AccessRequestConfig.yaml | 19 + .../idn-api/v3/schemas/AccessRequestItem.yaml | 44 + .../v3/schemas/AccessRequestPhases.yaml | 39 + .../idn-api/v3/schemas/AccessRequestType.yaml | 8 + .../idn-api/v3/schemas/AccessReviewItem.yaml | 26 + static/idn-api/v3/schemas/AccessSummary.yaml | 25 + static/idn-api/v3/schemas/AccessType.yaml | 6 + static/idn-api/v3/schemas/Account.yaml | 32 + static/idn-api/v3/schemas/AccountAction.yaml | 19 + .../idn-api/v3/schemas/AccountActivity.yaml | 58 + .../v3/schemas/AccountActivityItem.yaml | 60 + .../schemas/AccountActivityItemOperation.yaml | 12 + .../idn-api/v3/schemas/AccountAttributes.yaml | 13 + .../v3/schemas/AccountAttributesCreate.yaml | 24 + .../v3/schemas/AccountRequestInfo.yaml | 14 + .../v3/schemas/AccountToggleRequest.yaml | 14 + .../v3/schemas/AccountUnlockRequest.yaml | 17 + .../v3/schemas/AccountsAsyncResult.yaml | 9 + .../v3/schemas/ApprovalForwardHistory.yaml | 21 + .../v3/schemas/ApprovalItemDetails.yaml | 28 + .../ApprovalReminderAndEscalationConfig.yaml | 19 + static/idn-api/v3/schemas/ApprovalScheme.yaml | 9 + .../idn-api/v3/schemas/ApprovalStatusDto.yaml | 39 + .../idn-api/v3/schemas/ApprovalSummary.yaml | 19 + .../v3/schemas/AttributeDefinition.yaml | 34 + .../v3/schemas/AttributeDefinitionType.yaml | 8 + static/idn-api/v3/schemas/BareReference.yaml | 11 + static/idn-api/v3/schemas/BaseCommonDto.yaml | 25 + .../idn-api/v3/schemas/BaseReferenceDto.yaml | 13 + .../idn-api/v3/schemas/CampaignReference.yaml | 35 + .../v3/schemas/CancelAccessRequest.yaml | 14 + .../v3/schemas/CancelledRequestDetails.yaml | 14 + .../v3/schemas/CertificationDecision.yaml | 6 + .../schemas/CertificationIdentitySummary.yaml | 17 + .../v3/schemas/CertificationPhase.yaml | 11 + .../v3/schemas/CertificationReference.yaml | 16 + static/idn-api/v3/schemas/ClientType.yaml | 6 + static/idn-api/v3/schemas/Comment.yaml | 21 + static/idn-api/v3/schemas/CommentDto.yaml | 24 + .../idn-api/v3/schemas/CompletedApproval.yaml | 83 + .../v3/schemas/CompletedApprovalState.yaml | 7 + .../idn-api/v3/schemas/CompletionStatus.yaml | 7 + .../v3/schemas/CreateOAuthClientRequest.yaml | 69 + .../v3/schemas/CreateOAuthClientResponse.yaml | 99 + .../CreatePersonalAccessTokenRequest.yaml | 10 + .../CreatePersonalAccessTokenResponse.yaml | 28 + static/idn-api/v3/schemas/DtoType.yaml | 30 + .../v3/schemas/EmailNotificationOption.yaml | 23 + static/idn-api/v3/schemas/EntitlementDto.yaml | 36 + .../v3/schemas/EntitlementRequestConfig.yaml | 25 + .../idn-api/v3/schemas/ErrorMessageDto.yaml | 13 + .../v3/schemas/ErrorMessageDtoList.yaml | 3 + .../idn-api/v3/schemas/ErrorResponseDto.yaml | 20 + .../idn-api/v3/schemas/ExecutionStatus.yaml | 6 + .../idn-api/v3/schemas/FieldDetailsDto.yaml | 36 + static/idn-api/v3/schemas/FormDetails.yaml | 24 + .../idn-api/v3/schemas/FormItemDetails.yaml | 6 + .../v3/schemas/ForwardApprovalDto.yaml | 18 + .../v3/schemas/GetOAuthClientResponse.yaml | 94 + .../GetPersonalAccessTokenResponse.yaml | 23 + static/idn-api/v3/schemas/GrantType.yaml | 7 + .../idn-api/v3/schemas/IdentityAttribute.yaml | 14 + .../v3/schemas/IdentityAttributeConfig.yaml | 12 + .../v3/schemas/IdentityAttributePreview.yaml | 17 + .../schemas/IdentityAttributeTransform.yaml | 10 + .../schemas/IdentityCertDecisionSummary.yaml | 67 + .../v3/schemas/IdentityCertificationDto.yaml | 64 + .../IdentityExceptionReportReference.yaml | 11 + .../v3/schemas/IdentityPreviewRequest.yaml | 10 + .../v3/schemas/IdentityPreviewResponse.yaml | 8 + .../idn-api/v3/schemas/IdentityProfile.yaml | 50 + .../IdentityProfileExportedObject.yaml | 11 + .../idn-api/v3/schemas/IdentityReference.yaml | 15 + .../IdentityReferenceWithNameAndEmail.yaml | 20 + .../idn-api/v3/schemas/IdentitySummary.yaml | 19 + static/idn-api/v3/schemas/JsonPatch.yaml | 16 + .../v3/schemas/JsonPatchOperation.yaml | 34 + static/idn-api/v3/schemas/LifecycleState.yaml | 37 + static/idn-api/v3/schemas/LocaleOrigin.yaml | 9 + .../v3/schemas/ManagerCorrelationMapping.yaml | 14 + .../v3/schemas/ManualWorkItemDetails.yaml | 21 + .../v3/schemas/ManualWorkItemState.yaml | 26 + .../v3/schemas/ObjectImportResult.yaml | 29 + .../v3/schemas/PasswordChangeRequest.yaml | 25 + .../v3/schemas/PasswordChangeResponse.yaml | 15 + static/idn-api/v3/schemas/PasswordInfo.yaml | 36 + .../v3/schemas/PasswordInfoAccount.yaml | 16 + .../v3/schemas/PasswordInfoQueryDTO.yaml | 10 + static/idn-api/v3/schemas/PasswordStatus.yaml | 27 + .../idn-api/v3/schemas/PendingApproval.yaml | 77 + .../v3/schemas/PendingApprovalAction.yaml | 8 + .../v3/schemas/PreApprovalTriggerDetails.yaml | 18 + .../v3/schemas/ProvisioningConfig.yaml | 21 + .../v3/schemas/ProvisioningDetails.yaml | 10 + .../v3/schemas/ProvisioningPolicyDto.yaml | 14 + .../idn-api/v3/schemas/ProvisioningState.yaml | 9 + static/idn-api/v3/schemas/PublicIdentity.yaml | 35 + .../PublicIdentityAttributeConfig.yaml | 12 + .../v3/schemas/PublicIdentityConfig.yaml | 19 + .../v3/schemas/QueuedCheckConfigDetails.yaml | 14 + .../idn-api/v3/schemas/ReassignReference.yaml | 15 + static/idn-api/v3/schemas/Reassignment.yaml | 9 + .../v3/schemas/RemediationItemDetails.yaml | 38 + .../v3/schemas/RequestOnBehalfOfConfig.yaml | 10 + .../idn-api/v3/schemas/RequestableObject.yaml | 40 + .../schemas/RequestableObjectReference.yaml | 22 + .../RequestableObjectRequestStatus.yaml | 11 + .../v3/schemas/RequestableObjectType.yaml | 9 + .../v3/schemas/RequestedItemStatus.yaml | 88 + .../RequestedItemStatusRequestState.yaml | 32 + static/idn-api/v3/schemas/Response.yaml | 1 + static/idn-api/v3/schemas/ReviewDecision.yaml | 26 + static/idn-api/v3/schemas/ReviewReassign.yaml | 18 + .../v3/schemas/ReviewRecommendation.yaml | 16 + static/idn-api/v3/schemas/Reviewer.yaml | 28 + static/idn-api/v3/schemas/Schema.yaml | 78 + static/idn-api/v3/schemas/SectionDetails.yaml | 15 + .../v3/schemas/ServiceDeskIntegrationDto.yaml | 50 + .../ServiceDeskIntegrationTemplateDto.yaml | 21 + .../ServiceDeskIntegrationTemplateType.yaml | 18 + .../idn-api/v3/schemas/SodExemptCriteria.yaml | 18 + .../idn-api/v3/schemas/SodViolationCheck.yaml | 15 + .../v3/schemas/SodViolationCheckResult.yaml | 37 + .../v3/schemas/SodViolationContext.yaml | 24 + .../SodViolationContextCheckCompleted.yaml | 14 + static/idn-api/v3/schemas/Source.yaml | 154 + static/idn-api/v3/schemas/SourceFeature.yaml | 82 + .../idn-api/v3/schemas/SourceHealthDto.yaml | 50 + .../idn-api/v3/schemas/SpConfigMessage.yaml | 22 + static/idn-api/v3/schemas/Transform.yaml | 102 + .../v3/schemas/TransformDefinition.yaml | 17 + static/idn-api/v3/schemas/UsageType.yaml | 19 + static/idn-api/v3/schemas/WorkItemState.yaml | 8 + static/idn-api/v3/schemas/WorkItemType.yaml | 17 + static/idn-api/v3/schemas/WorkItems.yaml | 63 + static/idn-api/v3/schemas/WorkItemsCount.yaml | 6 + .../idn-api/v3/schemas/WorkItemsSummary.yaml | 14 + .../v3/schemas/access/AccessProfile.yaml | 109 + .../AccessProfileBulkDeleteRequest.yaml | 14 + .../AccessProfileBulkDeleteResponse.yaml | 19 + .../v3/schemas/access/AccessProfileRef.yaml | 17 + .../access/AccessProfileSourceRef.yaml | 16 + .../v3/schemas/access/AccessProfileUsage.yaml | 12 + .../v3/schemas/access/ApprovalScheme.yaml | 31 + .../schemas/access/ApprovalSchemeForRole.yaml | 27 + .../v3/schemas/access/EntitlementRef.yaml | 16 + .../v3/schemas/access/IdentityReference.yaml | 15 + .../v3/schemas/access/OwnerReference.yaml | 15 + .../access/ProvisioningCriteriaLevel1.yaml | 29 + .../access/ProvisioningCriteriaLevel2.yaml | 29 + .../access/ProvisioningCriteriaLevel3.yaml | 21 + .../access/ProvisioningCriteriaOperation.yaml | 11 + .../v3/schemas/access/Requestability.yaml | 16 + .../schemas/access/RequestabilityForRole.yaml | 16 + .../v3/schemas/access/Revocability.yaml | 8 + static/idn-api/v3/schemas/access/Role.yaml | 81 + .../access/RoleAssignmentSourceType.yaml | 8 + .../v3/schemas/access/RoleCriteriaKey.yaml | 21 + .../schemas/access/RoleCriteriaKeyType.yaml | 9 + .../v3/schemas/access/RoleCriteriaLevel1.yaml | 25 + .../v3/schemas/access/RoleCriteriaLevel2.yaml | 25 + .../v3/schemas/access/RoleCriteriaLevel3.yaml | 16 + .../schemas/access/RoleCriteriaOperation.yaml | 11 + .../v3/schemas/access/RoleIdentity.yaml | 26 + .../access/RoleMembershipIdentity.yaml | 21 + .../access/RoleMembershipSelector.yaml | 18 + .../access/RoleMembershipSelectorType.yaml | 13 + static/idn-api/v3/schemas/filter/Bound.yaml | 12 + static/idn-api/v3/schemas/filter/Filter.yaml | 17 + .../idn-api/v3/schemas/filter/FilterType.yaml | 10 + static/idn-api/v3/schemas/filter/Range.yaml | 10 + .../v3/schemas/filter/examples/exists.yaml | 3 + .../v3/schemas/filter/examples/range.yaml | 13 + .../v3/schemas/filter/examples/terms.yaml | 10 + .../non-employee/ApprovalItemDetails.yaml | 26 + .../ApprovalReminderAndEscalationConfig.yaml | 13 + .../schemas/non-employee/ApprovalStatus.yaml | 8 + .../schemas/non-employee/ApprovalSummary.yaml | 11 + .../NonEmployeeApprovalDecision.yaml | 6 + .../non-employee/NonEmployeeApprovalItem.yaml | 6 + .../NonEmployeeApprovalItemBase.yaml | 33 + .../NonEmployeeApprovalItemDetail.yaml | 7 + .../NonEmployeeApprovalSummary.yaml | 11 + .../NonEmployeeBulkUploadJob.yaml | 34 + .../NonEmployeeBulkUploadStatus.yaml | 17 + .../NonEmployeeIdentityDtoType.yaml | 5 + .../NonEmployeeIdentityReferenceWithId.yaml | 8 + .../NonEmployeeIdnUserRequest.yaml | 9 + .../non-employee/NonEmployeeRecord.yaml | 58 + .../NonEmployeeRejectApprovalDecision.yaml | 8 + .../non-employee/NonEmployeeRequest.yaml | 70 + .../non-employee/NonEmployeeRequestBody.yaml | 56 + .../non-employee/NonEmployeeRequestLite.yaml | 12 + .../NonEmployeeRequestSummary.yaml | 14 + ...NonEmployeeRequestWithoutApprovalItem.yaml | 65 + .../NonEmployeeSchemaAttribute.yaml | 47 + .../NonEmployeeSchemaAttributeBody.yaml | 30 + .../NonEmployeeSchemaAttributeType.yaml | 6 + .../non-employee/NonEmployeeSource.yaml | 24 + .../non-employee/NonEmployeeSourceLite.yaml | 19 + ...mployeeSourceLiteWithSchemaAttributes.yaml | 9 + .../NonEmployeeSourceRequestBody.yaml | 33 + .../NonEmployeeSourceWithCloudExternalId.yaml | 8 + .../NonEmployeeSourceWithNECount.yaml | 7 + .../reviews/ReviewableAccessProfile.yaml | 44 + .../reviews/ReviewableEntitlement.yaml | 96 + .../v3/schemas/reviews/ReviewableRole.yaml | 33 + .../idn-api/v3/schemas/schedule/Schedule.yaml | 41 + .../v3/schemas/schedule/ScheduleType.yaml | 11 + .../idn-api/v3/schemas/schedule/Selector.yaml | 22 + .../v3/schemas/schedule/SelectorType.yaml | 13 + .../v3/schemas/search/ElasticVersion.yaml | 4 + static/idn-api/v3/schemas/search/Index.yaml | 13 + .../idn-api/v3/schemas/search/InnerHit.yaml | 15 + static/idn-api/v3/schemas/search/Query.yaml | 26 + .../v3/schemas/search/QueryResultFilter.yaml | 18 + .../idn-api/v3/schemas/search/QueryType.yaml | 13 + static/idn-api/v3/schemas/search/Search.yaml | 104 + .../v3/schemas/search/TypeAheadQuery.yaml | 35 + .../search/aggregate/Aggregation-2.yaml | 8 + .../schemas/search/aggregate/Aggregation.yaml | 8 + .../search/aggregate/AggregationType.yaml | 10 + .../search/aggregate/Aggregations.yaml | 10 + .../search/aggregate/BucketAggregation.yaml | 31 + .../schemas/search/aggregate/BucketType.yaml | 9 + .../search/aggregate/FilterAggregation.yaml | 24 + .../schemas/search/aggregate/FilterType.yaml | 8 + .../search/aggregate/MetricAggregation.yaml | 22 + .../schemas/search/aggregate/MetricType.yaml | 14 + .../search/aggregate/NestedAggregation.yaml | 16 + .../examples/bucketAggregation-dsl.yaml | 8 + .../bucketAggregation-subAggregation-dsl.yaml | 12 + .../bucketAggregation-subAggregation.yaml | 14 + .../aggregate/examples/bucketAggregation.yaml | 9 + .../examples/metricAggregation-dsl.yaml | 8 + .../aggregate/examples/metricAggregation.yaml | 9 + ...stedAggregation-bucketAggregation-dsl.yaml | 12 + .../nestedAggregation-bucketAggregation.yaml | 13 + ...lterAggregation-bucketAggregation-dsl.yaml | 17 + ...n-filterAggregation-bucketAggregation.yaml | 17 + .../documents/AggregationResult-csv.yaml | 16 + .../search/documents/AggregationResult.yaml | 35 + .../search/documents/SearchDocument.yaml | 22 + .../documents/examples/accessProfile.yaml | 30 + .../documents/examples/accessProfiles.yaml | 32 + .../documents/examples/bullet-bull-dog.yml | 5 + .../documents/examples/entitlement.yaml | 19 + .../documents/examples/entitlements.yaml | 19 + .../search/documents/examples/event.yaml | 25 + .../search/documents/examples/events.yaml | 25 + .../search/documents/examples/identities.yaml | 128 + .../search/documents/examples/identity.yaml | 128 + .../search/documents/examples/nina-kitty.yml | 5 + .../search/documents/examples/role.yaml | 24 + .../search/documents/examples/roles.yaml | 24 + .../search/examples/filter-exists.yaml | 10 + .../schemas/search/examples/filter-range.yaml | 21 + .../schemas/search/examples/filter-terms.yaml | 17 + .../schemas/search/examples/query-fields.yaml | 8 + .../search/examples/query-innerHit.yaml | 9 + .../search/examples/query-timeZone.yaml | 7 + .../examples/typeAheadQuery-nestedType.yaml | 10 + .../search/examples/typeAheadQuery.yaml | 9 + .../schemas/search/model/access/Access.yaml | 9 + .../search/model/access/AccessProfile.yaml | 12 + .../search/model/access/BaseAccess.yaml | 20 + .../search/model/access/Entitlement.yaml | 15 + .../v3/schemas/search/model/access/Role.yaml | 11 + .../model/access/profile/AccessProfile.yaml | 17 + .../schemas/search/model/account/Account.yaml | 23 + .../search/model/account/BaseAccount.yaml | 24 + .../schemas/search/model/account/Source.yaml | 6 + .../account/activity/AccountActivity.yaml | 51 + .../account/activity/AccountRequest.yaml | 25 + .../model/account/activity/Approval.yaml | 16 + .../account/activity/AttributeRequest.yaml | 8 + .../model/account/activity/Comment.yaml | 8 + .../model/account/activity/ExpansionItem.yaml | 14 + .../account/activity/OriginalRequest.yaml | 12 + .../search/model/aggregation/Aggregation.yaml | 19 + .../search/model/base/BaseDocument.yaml | 9 + .../schemas/search/model/base/DateTime.yaml | 5 + .../search/model/base/DisplayReference.yaml | 7 + .../search/model/base/DocumentType.yaml | 15 + .../schemas/search/model/base/Reference.yaml | 8 + .../v3/schemas/search/model/base/Tags.yaml | 6 + .../search/model/base/TypedReference.yaml | 10 + .../model/entitlement/BaseEntitlement.yaml | 10 + .../search/model/entitlement/Entitlement.yaml | 20 + .../v3/schemas/search/model/event/Event.yaml | 37 + .../schemas/search/model/event/NameType.yaml | 7 + .../schemas/search/model/identity/Access.yaml | 10 + .../v3/schemas/search/model/identity/App.yaml | 13 + .../search/model/identity/Identity.yaml | 76 + .../model/identity/IdentityReference.yaml | 6 + .../schemas/search/model/identity/Owner.yaml | 6 + .../schemas/search/model/identity/Owns.yaml | 28 + .../model/identity/ProcessingDetails.yaml | 12 + .../v3/schemas/search/model/role/Role.yaml | 14 + .../v3/schemas/search/saved/Arguments.yaml | 18 + .../v3/schemas/search/saved/Column.yaml | 12 + .../idn-api/v3/schemas/search/saved/Name.yaml | 12 + .../v3/schemas/search/saved/SavedSearch.yaml | 15 + .../v3/schemas/search/saved/Search.yaml | 95 + .../saved/examples/execute-scheduled.yaml | 4 + .../search/saved/examples/execute-test.yaml | 8 + .../v3/schemas/search/scheduled/Name.yaml | 12 + .../v3/schemas/search/scheduled/Schedule.yaml | 42 + .../search/scheduled/ScheduledSearch.yaml | 20 + .../schemas/transforms/AccountAttribute.yaml | 55 + .../v3/schemas/transforms/Base64Decode.yaml | 10 + .../v3/schemas/transforms/Base64Encode.yaml | 7 + .../v3/schemas/transforms/Concatenation.yaml | 15 + .../v3/schemas/transforms/Conditional.yaml | 29 + .../v3/schemas/transforms/DateCompare.yaml | 47 + .../v3/schemas/transforms/DateFormat.yaml | 25 + .../v3/schemas/transforms/DateMath.yaml | 31 + .../transforms/DecomposeDiacriticalMarks.yaml | 7 + .../v3/schemas/transforms/E164phone.yaml | 18 + .../v3/schemas/transforms/FirstValid.yaml | 36 + .../v3/schemas/transforms/ISO3166.yaml | 21 + .../schemas/transforms/IdentityAttribute.yaml | 13 + .../v3/schemas/transforms/IndexOf.yaml | 13 + .../v3/schemas/transforms/LastIndexOf.yaml | 13 + .../v3/schemas/transforms/LeftPad.yaml | 21 + .../idn-api/v3/schemas/transforms/Lookup.yaml | 23 + .../idn-api/v3/schemas/transforms/Lower.yaml | 7 + .../v3/schemas/transforms/NameNormalizer.yaml | 7 + .../transforms/RandomAlphaNumeric.yaml | 21 + .../v3/schemas/transforms/RandomNumeric.yaml | 21 + .../v3/schemas/transforms/Reference.yaml | 13 + .../v3/schemas/transforms/Replace.yaml | 21 + .../v3/schemas/transforms/ReplaceAll.yaml | 19 + .../transforms/RequiresPeriodicRefresh.yaml | 4 + .../v3/schemas/transforms/RightPad.yaml | 21 + .../idn-api/v3/schemas/transforms/Rule.yaml | 5 + .../idn-api/v3/schemas/transforms/Split.yaml | 32 + .../idn-api/v3/schemas/transforms/Static.yaml | 14 + .../v3/schemas/transforms/Substring.yaml | 42 + .../idn-api/v3/schemas/transforms/Trim.yaml | 7 + .../v3/schemas/transforms/UUIDGenerator.yaml | 5 + .../idn-api/v3/schemas/transforms/Upper.yaml | 7 + .../date-formats/namedConstructs.yaml | 12 + .../date-formats/simpleDateFormat.yaml | 23 + .../idn-api/v3/schemas/transforms/input.yaml | 12 + .../rules/GenerateRandomString.yaml | 36 + .../schemas/transforms/rules/GenericRule.yaml | 12 + .../transforms/rules/GetEndOfString.yaml | 24 + .../rules/GetReferenceIdentityAttribute.yaml | 25 + static/idn-api/vlegacy/internal.yaml | 102 + .../parameters/v2/identities/sourceId.yaml | 6 + .../parameters/v2/path/accessProfileId.yaml | 6 + .../vlegacy/parameters/v2/path/accountId.yaml | 6 + .../parameters/v2/path/approvalId.yaml | 6 + .../parameters/v2/path/identityAlias.yaml | 6 + .../parameters/v2/path/identityIdOrAlias.yaml | 6 + .../vlegacy/parameters/v2/path/index.yaml | 6 + .../parameters/v2/path/launcherId.yaml | 6 + .../v2/path/provisioningActivityId.yaml | 6 + .../v2/path/taskResultIdOrName.yaml | 6 + .../v2/query/accounts/sourceId-get-list.yaml | 6 + .../v2/query/accounts/sourceId.yaml | 6 + .../vlegacy/parameters/v2/query/filters.yaml | 5 + .../vlegacy/parameters/v2/query/goto.yaml | 5 + .../v2/query/identity-apps-filters.yaml | 6 + .../parameters/v2/query/identity-filter.yaml | 6 + .../identityLaunchers/accessProfileId.yaml | 6 + .../v2/query/identityLaunchers/appId.yaml | 6 + .../v2/query/identityLaunchers/context.yaml | 8 + .../vlegacy/parameters/v2/query/limit.yaml | 9 + .../vlegacy/parameters/v2/query/offset.yaml | 8 + .../vlegacy/parameters/v2/query/org.yaml | 5 + .../provisioning-activities-filters.yaml | 8 + .../query/provisioning-activities-sort.yaml | 8 + .../v2/query/search/column-fields.yaml | 7 + .../parameters/v2/query/search/fields.yaml | 7 + .../parameters/v2/query/search/index.yaml | 6 + .../v2/query/search/query-fields.yaml | 7 + .../parameters/v2/query/search/query.yaml | 7 + .../parameters/v2/query/search/type.yaml | 6 + .../parameters/v2/query/search/types.yaml | 7 + .../vlegacy/parameters/v2/query/sort.yaml | 6 + .../paths/v2/AccessProfileEntitlements.yaml | 27 + .../vlegacy/paths/v2/AccessProfileId.yaml | 120 + .../vlegacy/paths/v2/AccessProfiles.yaml | 64 + .../vlegacy/paths/v2/AccessRequests.yaml | 28 + static/idn-api/vlegacy/paths/v2/Accounts.yaml | 114 + .../vlegacy/paths/v2/AccountsWithId.yaml | 215 + static/idn-api/vlegacy/paths/v2/Orgs.yaml | 62 + static/idn-api/vlegacy/paths/v2/Search.yaml | 98 + .../vlegacy/paths/v2/TaskResultIdOrName.yaml | 34 + .../paths/v2/approvals/ApprovalsList.yaml | 29 + .../paths/v2/approvals/ApproveRequest.yaml | 38 + .../vlegacy/paths/v2/approvals/Forward.yaml | 38 + .../paths/v2/approvals/RejectRequest.yaml | 38 + .../paths/v2/identities/Identities.yaml | 110 + .../v2/identities/IdentitiesBulkLock.yaml | 31 + .../identities/IdentityAliasAuthDetails.yaml | 18 + .../v2/identities/IdentityIdOrAlias.yaml | 89 + .../IdentityIdOrAliasApprovals.yaml | 30 + .../v2/identities/IdentityIdOrAliasApps.yaml | 34 + .../IdentityIdOrAliasLaunchers.yaml | 53 + .../paths/v2/identities/LauncherId.yaml | 14 + .../vlegacy/paths/v2/launchers/Click.yaml | 13 + .../paths/v2/launchers/LauncherId.yaml | 69 + .../GetProvisioningActivity.yaml | 31 + .../ProvisioningActivitiesList.yaml | 30 + .../vlegacy/paths/v2/search/Entitlements.yaml | 72 + .../v2/search/EntitlementsRunExport.yaml | 61 + .../vlegacy/paths/v2/search/Events.yaml | 72 + .../vlegacy/paths/v2/search/Identities.yaml | 73 + .../paths/v2/search/IdentitiesRunExport.yaml | 61 + .../paths/v2/search/IndexMappings.yaml | 19 + .../vlegacy/paths/v2/search/Mappings.yaml | 16 + .../vlegacy/paths/v2/search/RunExport.yaml | 65 + static/idn-api/vlegacy/responses/v2/201.yaml | 1 + static/idn-api/vlegacy/responses/v2/202.yaml | 6 + static/idn-api/vlegacy/responses/v2/204.yaml | 1 + static/idn-api/vlegacy/responses/v2/400.yaml | 5 + static/idn-api/vlegacy/responses/v2/403.yaml | 1 + static/idn-api/vlegacy/responses/v2/404.yaml | 1 + static/idn-api/vlegacy/responses/v2/503.yaml | 10 + .../vlegacy/responses/v2/ExceptionObject.yaml | 32 + .../responses/v2/MultiStatusObject.yaml | 15 + .../vlegacy/schemas/v2/AccessProfile.yaml | 38 + .../schemas/v2/AccessProfileCreateEto.yaml | 44 + .../vlegacy/schemas/v2/AccessRequest.yaml | 65 + .../idn-api/vlegacy/schemas/v2/Account.yaml | 46 + .../schemas/v2/AccountApplication.yaml | 8 + .../vlegacy/schemas/v2/AccountAttributes.yaml | 48 + .../vlegacy/schemas/v2/AccountIdentity.yaml | 6 + .../vlegacy/schemas/v2/AccountMeta.yaml | 8 + static/idn-api/vlegacy/schemas/v2/App.yaml | 36 + .../idn-api/vlegacy/schemas/v2/Approval.yaml | 42 + .../vlegacy/schemas/v2/ApprovalConfigEto.yaml | 15 + .../vlegacy/schemas/v2/AuthDetails.yaml | 20 + .../vlegacy/schemas/v2/CommentEto.yaml | 4 + .../vlegacy/schemas/v2/DynamicSchemaEto.yaml | 5 + .../vlegacy/schemas/v2/Entitlement.yaml | 20 + .../schemas/v2/ForwardApprovalEto.yaml | 12 + .../vlegacy/schemas/v2/IdentityEto.yaml | 40 + .../vlegacy/schemas/v2/IdentityV2.yaml | 64 + .../idn-api/vlegacy/schemas/v2/Launcher.yaml | 34 + .../vlegacy/schemas/v2/LauncherEto.yaml | 4 + .../vlegacy/schemas/v2/LauncherLink.yaml | 18 + .../vlegacy/schemas/v2/Notification.yaml | 13 + static/idn-api/vlegacy/schemas/v2/Org.yaml | 104 + static/idn-api/vlegacy/schemas/v2/OrgEto.yaml | 65 + .../schemas/v2/ProvisioningActivity.yaml | 43 + .../vlegacy/schemas/v2/RequestSummary.yaml | 6 + .../vlegacy/schemas/v2/TaskResult.yaml | 54 + .../vlegacy/schemas/v2/search/Mapping.yaml | 6 + .../schemas/v2/search/SearchEntitlement.yaml | 29 + .../schemas/v2/search/SearchEvent.yaml | 75 + .../schemas/v2/search/SearchIdentity.yaml | 193 + .../vlegacy/securitySchemes/OAuth2.yaml | 19 + static/idn-api/vlegacy/v2.yaml | 85 + static/iiq-api/swagger.json | 8904 ++++ ...int-Developer-Community-Inverse-Lockup.png | Bin 0 -> 34316 bytes .../SailPoint-Developer-Community-Lockup.png | Bin 0 -> 44093 bytes static/img/SailPoint-Logo-RGB-Color.png | Bin 0 -> 28382 bytes static/img/SailPoint-Logo-RGB-Color.svg | 1 + static/img/SailPoint-Logo-RGB-Inverse.png | Bin 0 -> 23167 bytes static/img/SailPoint-Logo-RGB-Inverse.svg | 1 + static/img/docusaurus.png | Bin 0 -> 5142 bytes static/img/favicon.ico | Bin 0 -> 3626 bytes static/img/logo.svg | 1 + static/img/undraw_docusaurus_mountain.svg | 171 + static/img/undraw_docusaurus_react.svg | 170 + static/img/undraw_docusaurus_tree.svg | 40 + yarn.lock | 8927 ++++ 2317 files changed, 253601 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 babel.config.js create mode 100644 blog/2019-05-28-first-blog-post.md create mode 100644 blog/2019-05-29-long-blog-post.md create mode 100644 blog/2021-08-01-mdx-blog-post.mdx create mode 100644 blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg create mode 100644 blog/2021-08-26-welcome/index.md create mode 100644 blog/authors.yml create mode 100644 docs/idn_docs/docs/authentication.md create mode 100644 docs/idn_docs/docs/custom_connectors/commands/account_create.md create mode 100644 docs/idn_docs/docs/custom_connectors/commands/account_delete.md create mode 100644 docs/idn_docs/docs/custom_connectors/commands/account_discover.md create mode 100644 docs/idn_docs/docs/custom_connectors/commands/account_enable.md create mode 100644 docs/idn_docs/docs/custom_connectors/commands/account_list.md create mode 100644 docs/idn_docs/docs/custom_connectors/commands/account_read.md create mode 100644 docs/idn_docs/docs/custom_connectors/commands/account_unlock.md create mode 100644 docs/idn_docs/docs/custom_connectors/commands/account_update.md create mode 100644 docs/idn_docs/docs/custom_connectors/commands/entitlement_list.md create mode 100644 docs/idn_docs/docs/custom_connectors/commands/entitlement_read.md create mode 100644 docs/idn_docs/docs/custom_connectors/commands/test_connection.md create mode 100644 docs/idn_docs/docs/custom_connectors/getting_started/cli_common_commands.md create mode 100644 docs/idn_docs/docs/custom_connectors/getting_started/cli_getting_started.md create mode 100644 docs/idn_docs/docs/custom_connectors/getting_started/cli_test_build_deploy.md create mode 100644 docs/idn_docs/docs/custom_connectors/getting_started/connector_spec.md create mode 100644 docs/idn_docs/docs/custom_connectors/getting_started/example_connectors.md create mode 100644 docs/idn_docs/docs/custom_connectors/getting_started/postman_collection.md create mode 100644 docs/idn_docs/docs/custom_connectors/in_depth/api_calls.md create mode 100644 docs/idn_docs/docs/custom_connectors/in_depth/debugging.md create mode 100644 docs/idn_docs/docs/custom_connectors/in_depth/error_handling.md create mode 100644 docs/idn_docs/docs/custom_connectors/in_depth/linting.md create mode 100644 docs/idn_docs/docs/custom_connectors/in_depth/logging.md create mode 100644 docs/idn_docs/docs/custom_connectors/in_depth/rate_limits.md create mode 100644 docs/idn_docs/docs/custom_connectors/in_depth/testing.md create mode 100644 docs/idn_docs/docs/custom_connectors/overview.md create mode 100644 docs/idn_docs/docs/getting_started.md create mode 100644 docs/idn_docs/docs/img/custom_connectors/commands/account_create/account_create_idn.png create mode 100644 docs/idn_docs/docs/img/custom_connectors/commands/account_create/create_password_idn.png create mode 100644 docs/idn_docs/docs/img/custom_connectors/commands/account_create/testing1.png create mode 100644 docs/idn_docs/docs/img/custom_connectors/commands/account_create/testing2.png create mode 100644 docs/idn_docs/docs/img/custom_connectors/commands/account_create/testing3.png create mode 100644 docs/idn_docs/docs/img/custom_connectors/commands/account_list/account_list_idn.png create mode 100644 docs/idn_docs/docs/img/custom_connectors/commands/account_read/account_read_idn.png create mode 100644 docs/idn_docs/docs/img/custom_connectors/commands/discover_schema/discover_schema_idn1.png create mode 100644 docs/idn_docs/docs/img/custom_connectors/commands/discover_schema/discover_schema_idn2.png create mode 100644 docs/idn_docs/docs/img/custom_connectors/commands/discover_schema/discover_schema_idn3.png create mode 100644 docs/idn_docs/docs/img/custom_connectors/commands/discover_schema/discover_schema_idn4.png create mode 100644 docs/idn_docs/docs/img/custom_connectors/commands/entitlement_list/entitlement_list_idn.png create mode 100644 docs/idn_docs/docs/img/custom_connectors/commands/test_connection/test_command_idn.png create mode 100644 docs/idn_docs/docs/img/custom_connectors/in_depth/debugging1.png create mode 100644 docs/idn_docs/docs/img/custom_connectors/in_depth/debugging2.png create mode 100644 docs/idn_docs/docs/img/custom_connectors/in_depth/testing1.png create mode 100644 docs/idn_docs/docs/img/custom_connectors/in_depth/testing2.png create mode 100644 docs/idn_docs/docs/img/custom_connectors/new_connectivity_diagram.png create mode 100644 docs/idn_docs/docs/img/custom_connectors/old_connectivity_diagram.png create mode 100644 docs/idn_docs/docs/img/http-client-identity-now.png create mode 100644 docs/idn_docs/docs/img/sp-config-export.png create mode 100644 docs/idn_docs/docs/img/sp-config-import.png create mode 100644 docs/idn_docs/docs/img/transforms/account_schema.png create mode 100644 docs/idn_docs/docs/img/transforms/account_summary.png create mode 100644 docs/idn_docs/docs/img/transforms/configuring_transform_behavior_1.png create mode 100644 docs/idn_docs/docs/img/transforms/configuring_transform_behavior_2.png create mode 100644 docs/idn_docs/docs/img/transforms/create_source.png create mode 100644 docs/idn_docs/docs/img/transforms/how_transforms_work_1.png create mode 100644 docs/idn_docs/docs/img/transforms/how_transforms_work_2.png create mode 100644 docs/idn_docs/docs/img/transforms/how_transforms_work_3.png create mode 100644 docs/idn_docs/docs/img/transforms/how_transforms_work_4.png create mode 100644 docs/idn_docs/docs/img/transforms/identity_profile.png create mode 100644 docs/idn_docs/docs/img/transforms/lower/lower_transform_input.png create mode 100644 docs/idn_docs/docs/img/transforms/mappings_tab.png create mode 100644 docs/idn_docs/docs/img/transforms/sailpoint_logo.png create mode 100644 docs/idn_docs/docs/img/transforms/temporary_password_attribute_mapping.png create mode 100644 docs/idn_docs/docs/img/transforms/what_are_transforms_1.png create mode 100644 docs/idn_docs/docs/img/user-web-app-identity-now.png create mode 100644 docs/idn_docs/docs/sp_config.md create mode 100644 docs/idn_docs/docs/standard_collection_parameters.md create mode 100644 docs/idn_docs/docs/transforms/building_transforms/building_transforms.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/creating_your_first_transform.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/account_attribute.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/base64_decode.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/base64_encode.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/concatenation.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/conditional.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/date_compare.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/date_format.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/date_math.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/decompose_diacritial_marks.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/e164_phone.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/first_valid.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/generate_random_string.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/get_end_of_string.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/get_reference_identity_attribute.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/identity_attribute.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/index_of.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/iso_3166.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/last_index_of.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/left_pad.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/lookup.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/lower.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/name_normalizer.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/random_alphanumeric.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/random_numeric.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/reference.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/replace.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/replace_all.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/right_pad.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/rule.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/split.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/static.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/substring.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/trim.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/upper.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/username_generator.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/operations/uuid_generator.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/temporary_password_usecase.md create mode 100644 docs/idn_docs/docs/transforms/transform_operations/transform_operations.md create mode 100644 docs/idn_docs/intro.md create mode 100644 docs/idn_docs/specs/README.md create mode 100644 docs/idn_docs/triggers/available-event-triggers/access-request-dynamic-approval-event-trigger.md create mode 100644 docs/idn_docs/triggers/available-event-triggers/access-request-postapproval-trigger.md create mode 100644 docs/idn_docs/triggers/available-event-triggers/access-request-preapproval-event-trigger.md create mode 100644 docs/idn_docs/triggers/available-event-triggers/account-aggregation-completed.md create mode 100644 docs/idn_docs/triggers/available-event-triggers/identity-attribute-changed-event-trigger.md create mode 100644 docs/idn_docs/triggers/available-event-triggers/identity-created-event-trigger.md create mode 100644 docs/idn_docs/triggers/available-event-triggers/img/access-request-postapproval-path.png create mode 100644 docs/idn_docs/triggers/available-event-triggers/img/access-request-preapproval-failure.png create mode 100644 docs/idn_docs/triggers/available-event-triggers/img/access-request-preapproval-path.png create mode 100644 docs/idn_docs/triggers/available-event-triggers/img/aggregation-delete-threshold.png create mode 100644 docs/idn_docs/triggers/available-event-triggers/img/aggregation-diagram.png create mode 100644 docs/idn_docs/triggers/available-event-triggers/img/aggregation-enable-scheduling.png create mode 100644 docs/idn_docs/triggers/available-event-triggers/img/attributes-highlight.png create mode 100644 docs/idn_docs/triggers/available-event-triggers/img/identity-created-attributes-highlight.png create mode 100644 docs/idn_docs/triggers/available-event-triggers/img/identity-created-path.png create mode 100644 docs/idn_docs/triggers/available-event-triggers/img/provisioning-access-request-2.png create mode 100644 docs/idn_docs/triggers/available-event-triggers/img/provisioning-access-request-certification.png create mode 100644 docs/idn_docs/triggers/available-event-triggers/img/provisioning-access-request.png create mode 100644 docs/idn_docs/triggers/available-event-triggers/img/provisioning-action.png create mode 100644 docs/idn_docs/triggers/available-event-triggers/img/provisioning-lifecycle-management.png create mode 100644 docs/idn_docs/triggers/available-event-triggers/img/provisioning-role-membership.png create mode 100644 docs/idn_docs/triggers/available-event-triggers/img/saved-search-path.png create mode 100644 docs/idn_docs/triggers/available-event-triggers/img/trigger-path.png create mode 100644 docs/idn_docs/triggers/available-event-triggers/img/va-cluster-failed.png create mode 100644 docs/idn_docs/triggers/available-event-triggers/img/va-cluster-healthy-source.png create mode 100644 docs/idn_docs/triggers/available-event-triggers/img/va-cluster-unhealthy-source.png create mode 100644 docs/idn_docs/triggers/available-event-triggers/img/va-cluster-warning.png create mode 100644 docs/idn_docs/triggers/available-event-triggers/provisioning-action-completed-trigger.md create mode 100644 docs/idn_docs/triggers/available-event-triggers/saved-search-completed.md create mode 100644 docs/idn_docs/triggers/available-event-triggers/source-created-trigger.md create mode 100644 docs/idn_docs/triggers/available-event-triggers/source-deleted-trigger.md create mode 100644 docs/idn_docs/triggers/available-event-triggers/source-updated-trigger.md create mode 100644 docs/idn_docs/triggers/available-event-triggers/va-cluster-status-change-event-trigger.md create mode 100644 docs/idn_docs/triggers/early-access-event-triggers/identity-deleted-event-trigger.md create mode 100644 docs/idn_docs/triggers/early-access-event-triggers/img/identity-deleted-path.png create mode 100644 docs/idn_docs/triggers/early-access-event-triggers/source-account-created-trigger.md create mode 100644 docs/idn_docs/triggers/early-access-event-triggers/source-account-deleted-trigger.md create mode 100644 docs/idn_docs/triggers/early-access-event-triggers/source-account-updated-trigger.md create mode 100644 docs/idn_docs/triggers/event-triggers-filtering-events.md create mode 100644 docs/idn_docs/triggers/event-triggers-overview.md create mode 100644 docs/idn_docs/triggers/event-triggers-preparing-a-subscriber-service.md create mode 100644 docs/idn_docs/triggers/event-triggers-responding-to-a-request-response-trigger.md create mode 100644 docs/idn_docs/triggers/event-triggers-subscribing-to-a-trigger.md create mode 100644 docs/idn_docs/triggers/event-triggers-testing-triggers.md create mode 100644 docs/idn_docs/triggers/event-triggers-trigger-types.md create mode 100644 docs/idn_docs/triggers/img/activity-log.png create mode 100644 docs/idn_docs/triggers/img/available-triggers.png create mode 100644 docs/idn_docs/triggers/img/debug-connection.png create mode 100644 docs/idn_docs/triggers/img/jsonpath-editor.png create mode 100644 docs/idn_docs/triggers/img/slack-workflow.png create mode 100644 docs/idn_docs/triggers/img/test-subscription.png create mode 100644 docs/idn_docs/triggers/img/ui-filter.png create mode 100644 docs/idn_docs/triggers/img/webhook-site.png create mode 100644 docs/idn_docs/triggers/img/what-are-triggers.png create mode 100644 docs/idn_docs/triggers/img/zapier-webhook.png create mode 100644 docs/sailpoint-api-beta/access-profiles.tag.mdx create mode 100644 docs/sailpoint-api-beta/access-request-approvals.tag.mdx create mode 100644 docs/sailpoint-api-beta/access-request-recommendations.api.mdx create mode 100644 docs/sailpoint-api-beta/access-requests.tag.mdx create mode 100644 docs/sailpoint-api-beta/account-activities.tag.mdx create mode 100644 docs/sailpoint-api-beta/account-aggregations.tag.mdx create mode 100644 docs/sailpoint-api-beta/accounts.tag.mdx create mode 100644 docs/sailpoint-api-beta/activate-campaign.api.mdx create mode 100644 docs/sailpoint-api-beta/add-access-request-recommendations-ignored-item.api.mdx create mode 100644 docs/sailpoint-api-beta/add-access-request-recommendations-requested-item.api.mdx create mode 100644 docs/sailpoint-api-beta/add-access-request-recommendations-viewed-item.api.mdx create mode 100644 docs/sailpoint-api-beta/add-access-request-recommendations-viewed-items.api.mdx create mode 100644 docs/sailpoint-api-beta/add-tag-to-object.api.mdx create mode 100644 docs/sailpoint-api-beta/add-tags-to-many-objects.api.mdx create mode 100644 docs/sailpoint-api-beta/admin-reassign.api.mdx create mode 100644 docs/sailpoint-api-beta/approval-summary.api.mdx create mode 100644 docs/sailpoint-api-beta/approve-approval-item.api.mdx create mode 100644 docs/sailpoint-api-beta/approve-request.api.mdx create mode 100644 docs/sailpoint-api-beta/bulk-approve-approval-item.api.mdx create mode 100644 docs/sailpoint-api-beta/bulk-delete-access-profiles.api.mdx create mode 100644 docs/sailpoint-api-beta/bulk-delete-notification-templates.api.mdx create mode 100644 docs/sailpoint-api-beta/bulk-reject-approval-item.api.mdx create mode 100644 docs/sailpoint-api-beta/bulk-update-provisioning-policies.api.mdx create mode 100644 docs/sailpoint-api-beta/cancel-access-request.api.mdx create mode 100644 docs/sailpoint-api-beta/cancel-workflow-execution.api.mdx create mode 100644 docs/sailpoint-api-beta/certification-campaigns.tag.mdx create mode 100644 docs/sailpoint-api-beta/certifications.tag.mdx create mode 100644 docs/sailpoint-api-beta/check-connection.api.mdx create mode 100644 docs/sailpoint-api-beta/common-access-bulk-update-status.api.mdx create mode 100644 docs/sailpoint-api-beta/compare-identity-snapshots-access-type.api.mdx create mode 100644 docs/sailpoint-api-beta/compare-identity-snapshots.api.mdx create mode 100644 docs/sailpoint-api-beta/complete-campaign.api.mdx create mode 100644 docs/sailpoint-api-beta/complete-invocation.api.mdx create mode 100644 docs/sailpoint-api-beta/complete-work-item.api.mdx create mode 100644 docs/sailpoint-api-beta/completed-work-items.api.mdx create mode 100644 docs/sailpoint-api-beta/connector-rule-management.tag.mdx create mode 100644 docs/sailpoint-api-beta/connectors.tag.mdx create mode 100644 docs/sailpoint-api-beta/count-completed-work-items.api.mdx create mode 100644 docs/sailpoint-api-beta/count-work-items.api.mdx create mode 100644 docs/sailpoint-api-beta/create-access-profile.api.mdx create mode 100644 docs/sailpoint-api-beta/create-access-request.api.mdx create mode 100644 docs/sailpoint-api-beta/create-account.api.mdx create mode 100644 docs/sailpoint-api-beta/create-campaign-template.api.mdx create mode 100644 docs/sailpoint-api-beta/create-campaign.api.mdx create mode 100644 docs/sailpoint-api-beta/create-common-access.api.mdx create mode 100644 docs/sailpoint-api-beta/create-connector-rule.api.mdx create mode 100644 docs/sailpoint-api-beta/create-custom-password-instructions.api.mdx create mode 100644 docs/sailpoint-api-beta/create-identity-profile.api.mdx create mode 100644 docs/sailpoint-api-beta/create-notification-template.api.mdx create mode 100644 docs/sailpoint-api-beta/create-oauth-client.api.mdx create mode 100644 docs/sailpoint-api-beta/create-password-org-config.api.mdx create mode 100644 docs/sailpoint-api-beta/create-password-sync-group.api.mdx create mode 100644 docs/sailpoint-api-beta/create-personal-access-token.api.mdx create mode 100644 docs/sailpoint-api-beta/create-potential-role-provision-request.api.mdx create mode 100644 docs/sailpoint-api-beta/create-provisioning-policy.api.mdx create mode 100644 docs/sailpoint-api-beta/create-role.api.mdx create mode 100644 docs/sailpoint-api-beta/create-schema-attribute.api.mdx create mode 100644 docs/sailpoint-api-beta/create-schema.api.mdx create mode 100644 docs/sailpoint-api-beta/create-search-attribute-config.api.mdx create mode 100644 docs/sailpoint-api-beta/create-segment.api.mdx create mode 100644 docs/sailpoint-api-beta/create-service-desk-integration.api.mdx create mode 100644 docs/sailpoint-api-beta/create-sod-policy.api.mdx create mode 100644 docs/sailpoint-api-beta/create-source.api.mdx create mode 100644 docs/sailpoint-api-beta/create-subscription.api.mdx create mode 100644 docs/sailpoint-api-beta/create-transform.api.mdx create mode 100644 docs/sailpoint-api-beta/create-verified-from-address.api.mdx create mode 100644 docs/sailpoint-api-beta/create-workflow.api.mdx create mode 100644 docs/sailpoint-api-beta/custom-password-instructions.tag.mdx create mode 100644 docs/sailpoint-api-beta/delete-access-profile.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-account.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-campaign-template-schedule.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-campaign-template.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-campaigns.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-connector-rule.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-custom-password-instructions.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-identity-profile.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-identity-profiles.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-oauth-client.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-password-sync-group.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-personal-access-token.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-provisioning-policy.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-role.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-schema-attribute.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-schema-attributes.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-schema.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-search-attribute-config.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-segment-by-id.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-service-desk-integration.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-sod-policy-by-id.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-sod-policy-schedule-by-id.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-source.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-subscription.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-tagged-object-by-type-and-id.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-transform.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-verified-from-address.api.mdx create mode 100644 docs/sailpoint-api-beta/delete-workflow.api.mdx create mode 100644 docs/sailpoint-api-beta/disable-account.api.mdx create mode 100644 docs/sailpoint-api-beta/download-custom-violation-report.api.mdx create mode 100644 docs/sailpoint-api-beta/download-default-violation-report.api.mdx create mode 100644 docs/sailpoint-api-beta/download-role-insights-entitlements-changes.api.mdx create mode 100644 docs/sailpoint-api-beta/download-role-mining-potential-role-zip.api.mdx create mode 100644 docs/sailpoint-api-beta/download-source-accounts-schema.api.mdx create mode 100644 docs/sailpoint-api-beta/download-source-entitlements-schema.api.mdx create mode 100644 docs/sailpoint-api-beta/edit-entitlements-potential-role.api.mdx create mode 100644 docs/sailpoint-api-beta/enable-account.api.mdx create mode 100644 docs/sailpoint-api-beta/entitlements-bulk-update.api.mdx create mode 100644 docs/sailpoint-api-beta/entitlements.tag.mdx create mode 100644 docs/sailpoint-api-beta/export-identity-profiles.api.mdx create mode 100644 docs/sailpoint-api-beta/export-outliers-zip.api.mdx create mode 100644 docs/sailpoint-api-beta/export-role-mining-potential-role-async.api.mdx create mode 100644 docs/sailpoint-api-beta/export-role-mining-potential-role-status.api.mdx create mode 100644 docs/sailpoint-api-beta/export-role-mining-potential-role.api.mdx create mode 100644 docs/sailpoint-api-beta/forward-request.api.mdx create mode 100644 docs/sailpoint-api-beta/generate-campaign-template.api.mdx create mode 100644 docs/sailpoint-api-beta/generate-digit-token.api.mdx create mode 100644 docs/sailpoint-api-beta/generate-identity-preview.api.mdx create mode 100644 docs/sailpoint-api-beta/get-access-profile.api.mdx create mode 100644 docs/sailpoint-api-beta/get-access-request-config.api.mdx create mode 100644 docs/sailpoint-api-beta/get-access-request-recommendations-ignored-items.api.mdx create mode 100644 docs/sailpoint-api-beta/get-access-request-recommendations-requested-items.api.mdx create mode 100644 docs/sailpoint-api-beta/get-access-request-recommendations-viewed-items.api.mdx create mode 100644 docs/sailpoint-api-beta/get-account-activity.api.mdx create mode 100644 docs/sailpoint-api-beta/get-account-aggregation-status.api.mdx create mode 100644 docs/sailpoint-api-beta/get-account-entitlements.api.mdx create mode 100644 docs/sailpoint-api-beta/get-account.api.mdx create mode 100644 docs/sailpoint-api-beta/get-active-campaigns.api.mdx create mode 100644 docs/sailpoint-api-beta/get-campaign-reports-config.api.mdx create mode 100644 docs/sailpoint-api-beta/get-campaign-reports.api.mdx create mode 100644 docs/sailpoint-api-beta/get-campaign-template-schedule.api.mdx create mode 100644 docs/sailpoint-api-beta/get-campaign-template.api.mdx create mode 100644 docs/sailpoint-api-beta/get-campaign.api.mdx create mode 100644 docs/sailpoint-api-beta/get-client-log-configuration.api.mdx create mode 100644 docs/sailpoint-api-beta/get-client-status.api.mdx create mode 100644 docs/sailpoint-api-beta/get-common-access.api.mdx create mode 100644 docs/sailpoint-api-beta/get-connector-list.api.mdx create mode 100644 docs/sailpoint-api-beta/get-connector-rule-list.api.mdx create mode 100644 docs/sailpoint-api-beta/get-connector-rule.api.mdx create mode 100644 docs/sailpoint-api-beta/get-custom-password-instructions.api.mdx create mode 100644 docs/sailpoint-api-beta/get-default-identity-attribute-config.api.mdx create mode 100644 docs/sailpoint-api-beta/get-entitlement-changes-identities.api.mdx create mode 100644 docs/sailpoint-api-beta/get-entitlement-distribution-potential-role.api.mdx create mode 100644 docs/sailpoint-api-beta/get-entitlement.api.mdx create mode 100644 docs/sailpoint-api-beta/get-entitlements-potential-role.api.mdx create mode 100644 docs/sailpoint-api-beta/get-events.api.mdx create mode 100644 docs/sailpoint-api-beta/get-excluded-entitlements-potential-role.api.mdx create mode 100644 docs/sailpoint-api-beta/get-identities-potential-role.api.mdx create mode 100644 docs/sailpoint-api-beta/get-identity-certification-item-permissions.api.mdx create mode 100644 docs/sailpoint-api-beta/get-identity-certification-pending-tasks.api.mdx create mode 100644 docs/sailpoint-api-beta/get-identity-certification-task-status.api.mdx create mode 100644 docs/sailpoint-api-beta/get-identity-profile.api.mdx create mode 100644 docs/sailpoint-api-beta/get-identity-snapshot-summary.api.mdx create mode 100644 docs/sailpoint-api-beta/get-identity-snapshot.api.mdx create mode 100644 docs/sailpoint-api-beta/get-identity.api.mdx create mode 100644 docs/sailpoint-api-beta/get-latest-outlier-snapshots.api.mdx create mode 100644 docs/sailpoint-api-beta/get-managed-cluster.api.mdx create mode 100644 docs/sailpoint-api-beta/get-managed-clusters.api.mdx create mode 100644 docs/sailpoint-api-beta/get-message-catalogs.api.mdx create mode 100644 docs/sailpoint-api-beta/get-mfa-config.api.mdx create mode 100644 docs/sailpoint-api-beta/get-notification-preference.api.mdx create mode 100644 docs/sailpoint-api-beta/get-notification-template.api.mdx create mode 100644 docs/sailpoint-api-beta/get-notifications-template-context.api.mdx create mode 100644 docs/sailpoint-api-beta/get-oauth-client.api.mdx create mode 100644 docs/sailpoint-api-beta/get-org-config.api.mdx create mode 100644 docs/sailpoint-api-beta/get-outlier-snapshots.api.mdx create mode 100644 docs/sailpoint-api-beta/get-outliers.api.mdx create mode 100644 docs/sailpoint-api-beta/get-password-change-status.api.mdx create mode 100644 docs/sailpoint-api-beta/get-password-dictionary-file-status.api.mdx create mode 100644 docs/sailpoint-api-beta/get-password-dictionary.api.mdx create mode 100644 docs/sailpoint-api-beta/get-password-org-config.api.mdx create mode 100644 docs/sailpoint-api-beta/get-password-sync-group.api.mdx create mode 100644 docs/sailpoint-api-beta/get-password-sync-groups.api.mdx create mode 100644 docs/sailpoint-api-beta/get-potential-role-applications.api.mdx create mode 100644 docs/sailpoint-api-beta/get-potential-role-summaries.api.mdx create mode 100644 docs/sailpoint-api-beta/get-potential-role-summary.api.mdx create mode 100644 docs/sailpoint-api-beta/get-provisioning-policy.api.mdx create mode 100644 docs/sailpoint-api-beta/get-public-identity-config.api.mdx create mode 100644 docs/sailpoint-api-beta/get-recommendations-config.api.mdx create mode 100644 docs/sailpoint-api-beta/get-recommendations.api.mdx create mode 100644 docs/sailpoint-api-beta/get-role-assigned-identities.api.mdx create mode 100644 docs/sailpoint-api-beta/get-role-insight.api.mdx create mode 100644 docs/sailpoint-api-beta/get-role-insights-current-entitlements.api.mdx create mode 100644 docs/sailpoint-api-beta/get-role-insights-entitlements-changes.api.mdx create mode 100644 docs/sailpoint-api-beta/get-role-insights-requests.api.mdx create mode 100644 docs/sailpoint-api-beta/get-role-insights-summary.api.mdx create mode 100644 docs/sailpoint-api-beta/get-role-insights.api.mdx create mode 100644 docs/sailpoint-api-beta/get-role-mining-session-status.api.mdx create mode 100644 docs/sailpoint-api-beta/get-role-mining-session.api.mdx create mode 100644 docs/sailpoint-api-beta/get-role-mining-sessions.api.mdx create mode 100644 docs/sailpoint-api-beta/get-role.api.mdx create mode 100644 docs/sailpoint-api-beta/get-schema-attribute.api.mdx create mode 100644 docs/sailpoint-api-beta/get-schema-attributes.api.mdx create mode 100644 docs/sailpoint-api-beta/get-schema.api.mdx create mode 100644 docs/sailpoint-api-beta/get-search-attribute-config.api.mdx create mode 100644 docs/sailpoint-api-beta/get-segment-by-id.api.mdx create mode 100644 docs/sailpoint-api-beta/get-service-desk-integration-list.api.mdx create mode 100644 docs/sailpoint-api-beta/get-service-desk-integration-template.api.mdx create mode 100644 docs/sailpoint-api-beta/get-service-desk-integration-types.api.mdx create mode 100644 docs/sailpoint-api-beta/get-service-desk-integration.api.mdx create mode 100644 docs/sailpoint-api-beta/get-single-search-attribute-config.api.mdx create mode 100644 docs/sailpoint-api-beta/get-sod-all-report-run-status.api.mdx create mode 100644 docs/sailpoint-api-beta/get-sod-policy-by-id.api.mdx create mode 100644 docs/sailpoint-api-beta/get-sod-policy-schedule-by-id.api.mdx create mode 100644 docs/sailpoint-api-beta/get-sod-violation-report-run-status.api.mdx create mode 100644 docs/sailpoint-api-beta/get-sod-violation-report-status.api.mdx create mode 100644 docs/sailpoint-api-beta/get-source-attr-sync-config.api.mdx create mode 100644 docs/sailpoint-api-beta/get-source-config.api.mdx create mode 100644 docs/sailpoint-api-beta/get-source.api.mdx create mode 100644 docs/sailpoint-api-beta/get-start-date.api.mdx create mode 100644 docs/sailpoint-api-beta/get-status-check-details.api.mdx create mode 100644 docs/sailpoint-api-beta/get-tagged-object-by-type-and-id.api.mdx create mode 100644 docs/sailpoint-api-beta/get-transform.api.mdx create mode 100644 docs/sailpoint-api-beta/get-transforms-list.api.mdx create mode 100644 docs/sailpoint-api-beta/get-valid-time-zones.api.mdx create mode 100644 docs/sailpoint-api-beta/get-work-items.api.mdx create mode 100644 docs/sailpoint-api-beta/get-workflow-execution-history.api.mdx create mode 100644 docs/sailpoint-api-beta/get-workflow-execution.api.mdx create mode 100644 docs/sailpoint-api-beta/get-workflow.api.mdx create mode 100644 docs/sailpoint-api-beta/iai-access-request-recommendations.tag.mdx create mode 100644 docs/sailpoint-api-beta/iai-common-access.tag.mdx create mode 100644 docs/sailpoint-api-beta/iai-outliers.tag.mdx create mode 100644 docs/sailpoint-api-beta/iai-peer-group-strategies.tag.mdx create mode 100644 docs/sailpoint-api-beta/iai-recommendations.tag.mdx create mode 100644 docs/sailpoint-api-beta/iai-role-mining.tag.mdx create mode 100644 docs/sailpoint-api-beta/identities.tag.mdx create mode 100644 docs/sailpoint-api-beta/identity-history.tag.mdx create mode 100644 docs/sailpoint-api-beta/identity-profiles.tag.mdx create mode 100644 docs/sailpoint-api-beta/ignore-outliers.api.mdx create mode 100644 docs/sailpoint-api-beta/import-identity-profiles.api.mdx create mode 100644 docs/sailpoint-api-beta/lifecycle-states.tag.mdx create mode 100644 docs/sailpoint-api-beta/list-access-profile-entitlements.api.mdx create mode 100644 docs/sailpoint-api-beta/list-access-profiles.api.mdx create mode 100644 docs/sailpoint-api-beta/list-access-request-status.api.mdx create mode 100644 docs/sailpoint-api-beta/list-account-activities.api.mdx create mode 100644 docs/sailpoint-api-beta/list-accounts.api.mdx create mode 100644 docs/sailpoint-api-beta/list-campaign-templates.api.mdx create mode 100644 docs/sailpoint-api-beta/list-complete-workflow-library.api.mdx create mode 100644 docs/sailpoint-api-beta/list-completed-approvals.api.mdx create mode 100644 docs/sailpoint-api-beta/list-entitlement-parents.api.mdx create mode 100644 docs/sailpoint-api-beta/list-entitlementchildren.api.mdx create mode 100644 docs/sailpoint-api-beta/list-entitlements.api.mdx create mode 100644 docs/sailpoint-api-beta/list-from-addresses.api.mdx create mode 100644 docs/sailpoint-api-beta/list-identities.api.mdx create mode 100644 docs/sailpoint-api-beta/list-identity-access-items.api.mdx create mode 100644 docs/sailpoint-api-beta/list-identity-profiles.api.mdx create mode 100644 docs/sailpoint-api-beta/list-identity-snapshot-access-items.api.mdx create mode 100644 docs/sailpoint-api-beta/list-identity-snapshots.api.mdx create mode 100644 docs/sailpoint-api-beta/list-invocation-status.api.mdx create mode 100644 docs/sailpoint-api-beta/list-lifecycle-states.api.mdx create mode 100644 docs/sailpoint-api-beta/list-notification-template-defaults.api.mdx create mode 100644 docs/sailpoint-api-beta/list-notification-templates.api.mdx create mode 100644 docs/sailpoint-api-beta/list-oauth-clients.api.mdx create mode 100644 docs/sailpoint-api-beta/list-pending-approvals.api.mdx create mode 100644 docs/sailpoint-api-beta/list-personal-access-tokens.api.mdx create mode 100644 docs/sailpoint-api-beta/list-provisioning-policies.api.mdx create mode 100644 docs/sailpoint-api-beta/list-requestable-objects.api.mdx create mode 100644 docs/sailpoint-api-beta/list-reviewers.api.mdx create mode 100644 docs/sailpoint-api-beta/list-roles.api.mdx create mode 100644 docs/sailpoint-api-beta/list-schemas.api.mdx create mode 100644 docs/sailpoint-api-beta/list-segments.api.mdx create mode 100644 docs/sailpoint-api-beta/list-sod-policies.api.mdx create mode 100644 docs/sailpoint-api-beta/list-sources.api.mdx create mode 100644 docs/sailpoint-api-beta/list-subscriptions.api.mdx create mode 100644 docs/sailpoint-api-beta/list-tagged-objects-by-type.api.mdx create mode 100644 docs/sailpoint-api-beta/list-tagged-objects.api.mdx create mode 100644 docs/sailpoint-api-beta/list-triggers.api.mdx create mode 100644 docs/sailpoint-api-beta/list-work-items.api.mdx create mode 100644 docs/sailpoint-api-beta/list-workflow-executions.api.mdx create mode 100644 docs/sailpoint-api-beta/list-workflow-library-actions.api.mdx create mode 100644 docs/sailpoint-api-beta/list-workflow-library-operators.api.mdx create mode 100644 docs/sailpoint-api-beta/list-workflow-library-triggers.api.mdx create mode 100644 docs/sailpoint-api-beta/list-workflows.api.mdx create mode 100644 docs/sailpoint-api-beta/managed-clients.tag.mdx create mode 100644 docs/sailpoint-api-beta/managed-clusters.tag.mdx create mode 100644 docs/sailpoint-api-beta/mfa-configuration.tag.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-approval-get.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-approval-list.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-approval-summary.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-approve-request.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-bulk-upload-status.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-export-source-schema-template.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-lifecycle-management.tag.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-record-bulk-delete.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-record-creation.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-record-delete.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-record-get.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-record-list.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-record-patch.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-record-update.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-records-bulk-upload.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-records-export.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-reject-request.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-request-creation.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-request-deletion.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-request-get.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-request-list.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-request-summary-get.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-source-delete.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-source-get.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-source-patch.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-sources-creation.api.mdx create mode 100644 docs/sailpoint-api-beta/non-employee-sources-list.api.mdx create mode 100644 docs/sailpoint-api-beta/notifications.tag.mdx create mode 100644 docs/sailpoint-api-beta/o-auth-clients.tag.mdx create mode 100644 docs/sailpoint-api-beta/org-config.tag.mdx create mode 100644 docs/sailpoint-api-beta/password-configuration.tag.mdx create mode 100644 docs/sailpoint-api-beta/password-dictionary.tag.mdx create mode 100644 docs/sailpoint-api-beta/password-management.tag.mdx create mode 100644 docs/sailpoint-api-beta/password-sync-groups.tag.mdx create mode 100644 docs/sailpoint-api-beta/patch-access-profile.api.mdx create mode 100644 docs/sailpoint-api-beta/patch-campaign-template.api.mdx create mode 100644 docs/sailpoint-api-beta/patch-entitlement.api.mdx create mode 100644 docs/sailpoint-api-beta/patch-oauth-client.api.mdx create mode 100644 docs/sailpoint-api-beta/patch-org-config.api.mdx create mode 100644 docs/sailpoint-api-beta/patch-role-mining-session.api.mdx create mode 100644 docs/sailpoint-api-beta/patch-role.api.mdx create mode 100644 docs/sailpoint-api-beta/patch-schema-attribute.api.mdx create mode 100644 docs/sailpoint-api-beta/patch-search-attribute-config.api.mdx create mode 100644 docs/sailpoint-api-beta/patch-segment.api.mdx create mode 100644 docs/sailpoint-api-beta/patch-service-desk-integration.api.mdx create mode 100644 docs/sailpoint-api-beta/patch-sod-policy.api.mdx create mode 100644 docs/sailpoint-api-beta/patch-subscription.api.mdx create mode 100644 docs/sailpoint-api-beta/patch-workflow.api.mdx create mode 100644 docs/sailpoint-api-beta/peek-resource-objects.api.mdx create mode 100644 docs/sailpoint-api-beta/personal-access-tokens.tag.mdx create mode 100644 docs/sailpoint-api-beta/ping-cluster.api.mdx create mode 100644 docs/sailpoint-api-beta/post-external-execute-workflow.api.mdx create mode 100644 docs/sailpoint-api-beta/post-workflow-external-trigger.api.mdx create mode 100644 docs/sailpoint-api-beta/predict-violations.api.mdx create mode 100644 docs/sailpoint-api-beta/public-identity-config.tag.mdx create mode 100644 docs/sailpoint-api-beta/put-account.api.mdx create mode 100644 docs/sailpoint-api-beta/put-notification-preference.api.mdx create mode 100644 docs/sailpoint-api-beta/put-source-attr-sync-config.api.mdx create mode 100644 docs/sailpoint-api-beta/query-password-info.api.mdx create mode 100644 docs/sailpoint-api-beta/reassign-identity-certs-async.api.mdx create mode 100644 docs/sailpoint-api-beta/refresh-identity-profile.api.mdx create mode 100644 docs/sailpoint-api-beta/reject-approval-item.api.mdx create mode 100644 docs/sailpoint-api-beta/reject-request.api.mdx create mode 100644 docs/sailpoint-api-beta/reload-account.api.mdx create mode 100644 docs/sailpoint-api-beta/remove-tags-to-many-object.api.mdx create mode 100644 docs/sailpoint-api-beta/replace-provisioning-policy.api.mdx create mode 100644 docs/sailpoint-api-beta/replace-schema.api.mdx create mode 100644 docs/sailpoint-api-beta/replace-source.api.mdx create mode 100644 docs/sailpoint-api-beta/requestable-objects.tag.mdx create mode 100644 docs/sailpoint-api-beta/role-insights-requests.api.mdx create mode 100644 docs/sailpoint-api-beta/role-insights.tag.mdx create mode 100644 docs/sailpoint-api-beta/role-mining-sessions.api.mdx create mode 100644 docs/sailpoint-api-beta/roles.tag.mdx create mode 100644 docs/sailpoint-api-beta/run-all-policies-for-org.api.mdx create mode 100644 docs/sailpoint-api-beta/run-campaign-remediation-scan.api.mdx create mode 100644 docs/sailpoint-api-beta/run-campaign-report.api.mdx create mode 100644 docs/sailpoint-api-beta/run-sod-policy.api.mdx create mode 100644 docs/sailpoint-api-beta/sail-point-beta-saa-s-api.info.mdx create mode 100644 docs/sailpoint-api-beta/search-attribute-configuration.tag.mdx create mode 100644 docs/sailpoint-api-beta/segments.tag.mdx create mode 100644 docs/sailpoint-api-beta/send-test-notification.api.mdx create mode 100644 docs/sailpoint-api-beta/service-desk-integration.tag.mdx create mode 100644 docs/sailpoint-api-beta/set-campaign-reports-config.api.mdx create mode 100644 docs/sailpoint-api-beta/set-campaign-template-schedule.api.mdx create mode 100644 docs/sailpoint-api-beta/set-mfa-config.api.mdx create mode 100644 docs/sailpoint-api-beta/set-password.api.mdx create mode 100644 docs/sailpoint-api-beta/sidebar.js create mode 100644 docs/sailpoint-api-beta/sod-policy.tag.mdx create mode 100644 docs/sailpoint-api-beta/sod-violations.tag.mdx create mode 100644 docs/sailpoint-api-beta/sources.tag.mdx create mode 100644 docs/sailpoint-api-beta/sp-config-export-download.api.mdx create mode 100644 docs/sailpoint-api-beta/sp-config-export-job-status.api.mdx create mode 100644 docs/sailpoint-api-beta/sp-config-export.api.mdx create mode 100644 docs/sailpoint-api-beta/sp-config-import-download.api.mdx create mode 100644 docs/sailpoint-api-beta/sp-config-import-job-status.api.mdx create mode 100644 docs/sailpoint-api-beta/sp-config-import.api.mdx create mode 100644 docs/sailpoint-api-beta/sp-config-objects.api.mdx create mode 100644 docs/sailpoint-api-beta/sp-config.tag.mdx create mode 100644 docs/sailpoint-api-beta/start-test-invocation.api.mdx create mode 100644 docs/sailpoint-api-beta/submit-account-selection.api.mdx create mode 100644 docs/sailpoint-api-beta/summary-work-items.api.mdx create mode 100644 docs/sailpoint-api-beta/synchronize-attributes-for-identity.api.mdx create mode 100644 docs/sailpoint-api-beta/synchronize-attributes-for-source.api.mdx create mode 100644 docs/sailpoint-api-beta/tagged-objects.tag.mdx create mode 100644 docs/sailpoint-api-beta/test-configuration.api.mdx create mode 100644 docs/sailpoint-api-beta/test-external-execute-workflow.api.mdx create mode 100644 docs/sailpoint-api-beta/test-mfa-config.api.mdx create mode 100644 docs/sailpoint-api-beta/test-workflow.api.mdx create mode 100644 docs/sailpoint-api-beta/transforms.tag.mdx create mode 100644 docs/sailpoint-api-beta/triggers.tag.mdx create mode 100644 docs/sailpoint-api-beta/un-ignore-outliers.api.mdx create mode 100644 docs/sailpoint-api-beta/unlock-account.api.mdx create mode 100644 docs/sailpoint-api-beta/update-access-request-config.api.mdx create mode 100644 docs/sailpoint-api-beta/update-account.api.mdx create mode 100644 docs/sailpoint-api-beta/update-campaign.api.mdx create mode 100644 docs/sailpoint-api-beta/update-client-log-configuration.api.mdx create mode 100644 docs/sailpoint-api-beta/update-connector-rule.api.mdx create mode 100644 docs/sailpoint-api-beta/update-identity-profile.api.mdx create mode 100644 docs/sailpoint-api-beta/update-lifecycle-states.api.mdx create mode 100644 docs/sailpoint-api-beta/update-password-dictionary.api.mdx create mode 100644 docs/sailpoint-api-beta/update-password-org-config.api.mdx create mode 100644 docs/sailpoint-api-beta/update-password-sync-group.api.mdx create mode 100644 docs/sailpoint-api-beta/update-policy-by-id.api.mdx create mode 100644 docs/sailpoint-api-beta/update-policy-schedule-by-id.api.mdx create mode 100644 docs/sailpoint-api-beta/update-provisioning-policy.api.mdx create mode 100644 docs/sailpoint-api-beta/update-public-identity-config.api.mdx create mode 100644 docs/sailpoint-api-beta/update-recommendations-config.api.mdx create mode 100644 docs/sailpoint-api-beta/update-schema.api.mdx create mode 100644 docs/sailpoint-api-beta/update-service-desk-integration.api.mdx create mode 100644 docs/sailpoint-api-beta/update-source.api.mdx create mode 100644 docs/sailpoint-api-beta/update-status-check-details.api.mdx create mode 100644 docs/sailpoint-api-beta/update-status.api.mdx create mode 100644 docs/sailpoint-api-beta/update-subscription.api.mdx create mode 100644 docs/sailpoint-api-beta/update-tagged-object-by-type-and-id.api.mdx create mode 100644 docs/sailpoint-api-beta/update-transform.api.mdx create mode 100644 docs/sailpoint-api-beta/update-workflow.api.mdx create mode 100644 docs/sailpoint-api-beta/upload-connector-file.api.mdx create mode 100644 docs/sailpoint-api-beta/upload-source-accounts-schema.api.mdx create mode 100644 docs/sailpoint-api-beta/upload-source-entitlements-schema.api.mdx create mode 100644 docs/sailpoint-api-beta/validate-connector-rule.api.mdx create mode 100644 docs/sailpoint-api-beta/validate-filter.api.mdx create mode 100644 docs/sailpoint-api-beta/work-items.tag.mdx create mode 100644 docs/sailpoint-api-beta/workflows.tag.mdx create mode 100644 docs/sailpoint-api-v3/access-request-approvals.tag.mdx create mode 100644 docs/sailpoint-api-v3/access-requests.tag.mdx create mode 100644 docs/sailpoint-api-v3/account-activities.tag.mdx create mode 100644 docs/sailpoint-api-v3/accounts.tag.mdx create mode 100644 docs/sailpoint-api-v3/approval-summary.api.mdx create mode 100644 docs/sailpoint-api-v3/approve-approval-item.api.mdx create mode 100644 docs/sailpoint-api-v3/approve-request.api.mdx create mode 100644 docs/sailpoint-api-v3/bulk-approve-approval-item.api.mdx create mode 100644 docs/sailpoint-api-v3/bulk-reject-approval-item.api.mdx create mode 100644 docs/sailpoint-api-v3/bulk-update-provisioning-policies.api.mdx create mode 100644 docs/sailpoint-api-v3/cancel-access-request.api.mdx create mode 100644 docs/sailpoint-api-v3/certification-summaries.tag.mdx create mode 100644 docs/sailpoint-api-v3/certifications.tag.mdx create mode 100644 docs/sailpoint-api-v3/complete-work-item.api.mdx create mode 100644 docs/sailpoint-api-v3/completed-work-items.api.mdx create mode 100644 docs/sailpoint-api-v3/count-completed-work-items.api.mdx create mode 100644 docs/sailpoint-api-v3/count-work-items.api.mdx create mode 100644 docs/sailpoint-api-v3/create-access-request.api.mdx create mode 100644 docs/sailpoint-api-v3/create-account.api.mdx create mode 100644 docs/sailpoint-api-v3/create-lifecycle-state.api.mdx create mode 100644 docs/sailpoint-api-v3/create-oauth-client.api.mdx create mode 100644 docs/sailpoint-api-v3/create-personal-access-token.api.mdx create mode 100644 docs/sailpoint-api-v3/create-provisioning-policy.api.mdx create mode 100644 docs/sailpoint-api-v3/create-schema-attribute.api.mdx create mode 100644 docs/sailpoint-api-v3/create-schema.api.mdx create mode 100644 docs/sailpoint-api-v3/create-service-desk-integration.api.mdx create mode 100644 docs/sailpoint-api-v3/create-source.api.mdx create mode 100644 docs/sailpoint-api-v3/create-transform.api.mdx create mode 100644 docs/sailpoint-api-v3/delete-account.api.mdx create mode 100644 docs/sailpoint-api-v3/delete-lifecycle-state.api.mdx create mode 100644 docs/sailpoint-api-v3/delete-oauth-client.api.mdx create mode 100644 docs/sailpoint-api-v3/delete-personal-access-token.api.mdx create mode 100644 docs/sailpoint-api-v3/delete-provisioning-policy.api.mdx create mode 100644 docs/sailpoint-api-v3/delete-schema-attribute.api.mdx create mode 100644 docs/sailpoint-api-v3/delete-schema-attributes.api.mdx create mode 100644 docs/sailpoint-api-v3/delete-schema.api.mdx create mode 100644 docs/sailpoint-api-v3/delete-service-desk-integration.api.mdx create mode 100644 docs/sailpoint-api-v3/delete-source.api.mdx create mode 100644 docs/sailpoint-api-v3/delete-transform.api.mdx create mode 100644 docs/sailpoint-api-v3/disable-account.api.mdx create mode 100644 docs/sailpoint-api-v3/download-source-accounts-schema.api.mdx create mode 100644 docs/sailpoint-api-v3/download-source-entitlements-schema.api.mdx create mode 100644 docs/sailpoint-api-v3/enable-account.api.mdx create mode 100644 docs/sailpoint-api-v3/export-identity-profiles.api.mdx create mode 100644 docs/sailpoint-api-v3/forward-request.api.mdx create mode 100644 docs/sailpoint-api-v3/get-access-request-config.api.mdx create mode 100644 docs/sailpoint-api-v3/get-account-activity.api.mdx create mode 100644 docs/sailpoint-api-v3/get-account-entitlements.api.mdx create mode 100644 docs/sailpoint-api-v3/get-account.api.mdx create mode 100644 docs/sailpoint-api-v3/get-default-identity-attribute-config.api.mdx create mode 100644 docs/sailpoint-api-v3/get-identity-access-summaries.api.mdx create mode 100644 docs/sailpoint-api-v3/get-identity-certification.api.mdx create mode 100644 docs/sailpoint-api-v3/get-identity-decision-summary.api.mdx create mode 100644 docs/sailpoint-api-v3/get-identity-profile.api.mdx create mode 100644 docs/sailpoint-api-v3/get-identity-summaries.api.mdx create mode 100644 docs/sailpoint-api-v3/get-identity-summary.api.mdx create mode 100644 docs/sailpoint-api-v3/get-lifecycle-state.api.mdx create mode 100644 docs/sailpoint-api-v3/get-oauth-client.api.mdx create mode 100644 docs/sailpoint-api-v3/get-password-change-status.api.mdx create mode 100644 docs/sailpoint-api-v3/get-provisioning-policy.api.mdx create mode 100644 docs/sailpoint-api-v3/get-public-identities.api.mdx create mode 100644 docs/sailpoint-api-v3/get-public-identity-config.api.mdx create mode 100644 docs/sailpoint-api-v3/get-schema-attribute.api.mdx create mode 100644 docs/sailpoint-api-v3/get-schema-attributes.api.mdx create mode 100644 docs/sailpoint-api-v3/get-schema.api.mdx create mode 100644 docs/sailpoint-api-v3/get-service-desk-integration-list.api.mdx create mode 100644 docs/sailpoint-api-v3/get-service-desk-integration-template.api.mdx create mode 100644 docs/sailpoint-api-v3/get-service-desk-integration-types.api.mdx create mode 100644 docs/sailpoint-api-v3/get-service-desk-integration.api.mdx create mode 100644 docs/sailpoint-api-v3/get-source-health.api.mdx create mode 100644 docs/sailpoint-api-v3/get-source.api.mdx create mode 100644 docs/sailpoint-api-v3/get-status-check-details.api.mdx create mode 100644 docs/sailpoint-api-v3/get-transform.api.mdx create mode 100644 docs/sailpoint-api-v3/get-transforms-list.api.mdx create mode 100644 docs/sailpoint-api-v3/get-work-items.api.mdx create mode 100644 docs/sailpoint-api-v3/identity-profiles.tag.mdx create mode 100644 docs/sailpoint-api-v3/import-identity-profiles.api.mdx create mode 100644 docs/sailpoint-api-v3/lifecycle-states.tag.mdx create mode 100644 docs/sailpoint-api-v3/list-access-request-status.api.mdx create mode 100644 docs/sailpoint-api-v3/list-account-activities.api.mdx create mode 100644 docs/sailpoint-api-v3/list-accounts.api.mdx create mode 100644 docs/sailpoint-api-v3/list-completed-approvals.api.mdx create mode 100644 docs/sailpoint-api-v3/list-identity-access-review-items.api.mdx create mode 100644 docs/sailpoint-api-v3/list-identity-certifications.api.mdx create mode 100644 docs/sailpoint-api-v3/list-identity-profiles.api.mdx create mode 100644 docs/sailpoint-api-v3/list-lifecycle-states.api.mdx create mode 100644 docs/sailpoint-api-v3/list-oauth-clients.api.mdx create mode 100644 docs/sailpoint-api-v3/list-pending-approvals.api.mdx create mode 100644 docs/sailpoint-api-v3/list-personal-access-tokens.api.mdx create mode 100644 docs/sailpoint-api-v3/list-provisioning-policies.api.mdx create mode 100644 docs/sailpoint-api-v3/list-requestable-objects.api.mdx create mode 100644 docs/sailpoint-api-v3/list-schemas.api.mdx create mode 100644 docs/sailpoint-api-v3/list-sources.api.mdx create mode 100644 docs/sailpoint-api-v3/list-work-items.api.mdx create mode 100644 docs/sailpoint-api-v3/make-identity-decision.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-approval-get.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-approval-list.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-approval-summary.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-approve-request.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-bulk-upload-status.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-export-source-schema-template.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-lifecycle-management.tag.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-record-bulk-delete.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-record-creation.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-record-delete.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-record-get.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-record-list.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-record-patch.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-record-update.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-records-bulk-upload.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-records-export.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-reject-request.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-request-creation.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-request-deletion.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-request-get.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-request-list.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-request-summary-get.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-source-delete.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-source-get.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-source-patch.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-sources-creation.api.mdx create mode 100644 docs/sailpoint-api-v3/non-employee-sources-list.api.mdx create mode 100644 docs/sailpoint-api-v3/o-auth-clients.tag.mdx create mode 100644 docs/sailpoint-api-v3/password-management.tag.mdx create mode 100644 docs/sailpoint-api-v3/patch-oauth-client.api.mdx create mode 100644 docs/sailpoint-api-v3/patch-schema-attribute.api.mdx create mode 100644 docs/sailpoint-api-v3/patch-service-desk-integration.api.mdx create mode 100644 docs/sailpoint-api-v3/personal-access-tokens.tag.mdx create mode 100644 docs/sailpoint-api-v3/public-identities-config.tag.mdx create mode 100644 docs/sailpoint-api-v3/public-identities.tag.mdx create mode 100644 docs/sailpoint-api-v3/put-account.api.mdx create mode 100644 docs/sailpoint-api-v3/query-password-info.api.mdx create mode 100644 docs/sailpoint-api-v3/reassign-identity-certifications.api.mdx create mode 100644 docs/sailpoint-api-v3/reject-approval-item.api.mdx create mode 100644 docs/sailpoint-api-v3/reject-request.api.mdx create mode 100644 docs/sailpoint-api-v3/reload-account.api.mdx create mode 100644 docs/sailpoint-api-v3/replace-provisioning-policy.api.mdx create mode 100644 docs/sailpoint-api-v3/replace-schema.api.mdx create mode 100644 docs/sailpoint-api-v3/replace-source.api.mdx create mode 100644 docs/sailpoint-api-v3/requestable-objects.tag.mdx create mode 100644 docs/sailpoint-api-v3/sail-point-saa-s-api.info.mdx create mode 100644 docs/sailpoint-api-v3/saved-search-create.api.mdx create mode 100644 docs/sailpoint-api-v3/saved-search-delete.api.mdx create mode 100644 docs/sailpoint-api-v3/saved-search-execute.api.mdx create mode 100644 docs/sailpoint-api-v3/saved-search-get.api.mdx create mode 100644 docs/sailpoint-api-v3/saved-search-list.api.mdx create mode 100644 docs/sailpoint-api-v3/saved-search-update.api.mdx create mode 100644 docs/sailpoint-api-v3/saved-search.tag.mdx create mode 100644 docs/sailpoint-api-v3/scheduled-search-create.api.mdx create mode 100644 docs/sailpoint-api-v3/scheduled-search-delete.api.mdx create mode 100644 docs/sailpoint-api-v3/scheduled-search-get.api.mdx create mode 100644 docs/sailpoint-api-v3/scheduled-search-list.api.mdx create mode 100644 docs/sailpoint-api-v3/scheduled-search-unsubscribe.api.mdx create mode 100644 docs/sailpoint-api-v3/scheduled-search-update.api.mdx create mode 100644 docs/sailpoint-api-v3/scheduled-search.tag.mdx create mode 100644 docs/sailpoint-api-v3/search-aggregate.api.mdx create mode 100644 docs/sailpoint-api-v3/search-count.api.mdx create mode 100644 docs/sailpoint-api-v3/search-get.api.mdx create mode 100644 docs/sailpoint-api-v3/search.api.mdx create mode 100644 docs/sailpoint-api-v3/search.tag.mdx create mode 100644 docs/sailpoint-api-v3/service-desk-integration.tag.mdx create mode 100644 docs/sailpoint-api-v3/set-lifecycle-state.api.mdx create mode 100644 docs/sailpoint-api-v3/set-password.api.mdx create mode 100644 docs/sailpoint-api-v3/sidebar.js create mode 100644 docs/sailpoint-api-v3/sign-off-identity-certification.api.mdx create mode 100644 docs/sailpoint-api-v3/sources.tag.mdx create mode 100644 docs/sailpoint-api-v3/submit-account-selection.api.mdx create mode 100644 docs/sailpoint-api-v3/summary-work-items.api.mdx create mode 100644 docs/sailpoint-api-v3/transforms.tag.mdx create mode 100644 docs/sailpoint-api-v3/unlock-account.api.mdx create mode 100644 docs/sailpoint-api-v3/update-access-request-config.api.mdx create mode 100644 docs/sailpoint-api-v3/update-account.api.mdx create mode 100644 docs/sailpoint-api-v3/update-lifecycle-states.api.mdx create mode 100644 docs/sailpoint-api-v3/update-provisioning-policy.api.mdx create mode 100644 docs/sailpoint-api-v3/update-public-identity-config.api.mdx create mode 100644 docs/sailpoint-api-v3/update-schema.api.mdx create mode 100644 docs/sailpoint-api-v3/update-service-desk-integration.api.mdx create mode 100644 docs/sailpoint-api-v3/update-source.api.mdx create mode 100644 docs/sailpoint-api-v3/update-status-check-details.api.mdx create mode 100644 docs/sailpoint-api-v3/update-transform.api.mdx create mode 100644 docs/sailpoint-api-v3/upload-connector-file.api.mdx create mode 100644 docs/sailpoint-api-v3/upload-source-accounts-schema.api.mdx create mode 100644 docs/sailpoint-api-v3/upload-source-entitlements-schema.api.mdx create mode 100644 docs/sailpoint-api-v3/work-items.tag.mdx create mode 100644 docusaurus.config.js create mode 100644 package.json create mode 100644 sidebars.js create mode 100644 src/components/HomepageFeatures/index.js create mode 100644 src/components/HomepageFeatures/styles.module.css create mode 100644 src/css/custom.css create mode 100644 src/pages/index.js create mode 100644 src/pages/index.module.css create mode 100644 src/pages/markdown-page.md create mode 100644 static/.nojekyll create mode 100644 static/arm-api/swagger-agent-management.json create mode 100644 static/arm-api/swagger-analysis.json create mode 100644 static/arm-api/swagger-arm.json create mode 100644 static/arm-api/swagger-arm2.json create mode 100644 static/arm-api/swagger-authentication.json create mode 100644 static/arm-api/swagger-cloud-agent.json create mode 100644 static/arm-api/swagger-jobs.json create mode 100644 static/arm-api/swagger-logging.json create mode 100644 static/arm-api/swagger-provisioning.json create mode 100644 static/arm-api/swagger-public.json create mode 100644 static/arm-api/swagger-rulebook.json create mode 100644 static/arm-api/swagger-scheduling.json create mode 100644 static/arm-api/swagger-utilization-tracking.json create mode 100644 static/idn-api/beta/CegsManagedClients-beta.1.0-oas3-swagger.yaml create mode 100644 static/idn-api/beta/CegsManagedClusterTypes-beta.1.0-oas3-swagger.yaml create mode 100644 static/idn-api/beta/CegsManagedClusters-beta.1.0-oas3-swagger.yaml create mode 100644 static/idn-api/beta/CegsManagedProcesses-beta.1.0-oas3-swagger.yaml create mode 100644 static/idn-api/beta/GovRole-beta.1.0-oas3-swagger.yaml create mode 100644 static/idn-api/beta/ServiceDeskIntegrations-beta.3.0-oas3-swagger.yaml create mode 100644 static/idn-api/beta/TaskManager-beta.1.0-oas3-swagger.yaml create mode 100644 static/idn-api/beta/paths/access-profile-bulk-delete.yaml create mode 100644 static/idn-api/beta/paths/access-profile-entitlements.yaml create mode 100644 static/idn-api/beta/paths/access-profile.yaml create mode 100644 static/idn-api/beta/paths/access-profiles-cleanup.yaml create mode 100644 static/idn-api/beta/paths/access-profiles.yaml create mode 100644 static/idn-api/beta/paths/access-request-approval-summary.yaml create mode 100644 static/idn-api/beta/paths/access-roles-change-segment-assignments.yaml create mode 100644 static/idn-api/beta/paths/account-activities.yaml create mode 100644 static/idn-api/beta/paths/account-activity.yaml create mode 100644 static/idn-api/beta/paths/account-aggregation-status.yaml create mode 100644 static/idn-api/beta/paths/account.yaml create mode 100644 static/idn-api/beta/paths/accounts-id-disable.yaml create mode 100644 static/idn-api/beta/paths/accounts-id-enable.yaml create mode 100644 static/idn-api/beta/paths/accounts-id-entitlements.yaml create mode 100644 static/idn-api/beta/paths/accounts-id-reload.yaml create mode 100644 static/idn-api/beta/paths/accounts-id-unlock.yaml create mode 100644 static/idn-api/beta/paths/accounts.yaml create mode 100644 static/idn-api/beta/paths/ai-access-request-recommendations-ignored.yaml create mode 100644 static/idn-api/beta/paths/ai-access-request-recommendations-requested.yaml create mode 100644 static/idn-api/beta/paths/ai-access-request-recommendations-viewed-bulk-create.yaml create mode 100644 static/idn-api/beta/paths/ai-access-request-recommendations-viewed.yaml create mode 100644 static/idn-api/beta/paths/ai-access-request-recommendations.yaml create mode 100644 static/idn-api/beta/paths/approve-access-request-approval.yaml create mode 100644 static/idn-api/beta/paths/assign-verified-from-addresses.yaml create mode 100644 static/idn-api/beta/paths/attr-sync-config-source.yaml create mode 100644 static/idn-api/beta/paths/attr-sync-config-tenant.yaml create mode 100644 static/idn-api/beta/paths/auth-org-config.yaml create mode 100644 static/idn-api/beta/paths/auth-org-lockout-config.yaml create mode 100644 static/idn-api/beta/paths/auth-org-network-config.yaml create mode 100644 static/idn-api/beta/paths/auth-org-service-provider-config.yaml create mode 100644 static/idn-api/beta/paths/auth-org-session-config.yaml create mode 100644 static/idn-api/beta/paths/auth-user-password.yaml create mode 100644 static/idn-api/beta/paths/auth-user.yaml create mode 100644 static/idn-api/beta/paths/auth.yaml create mode 100644 static/idn-api/beta/paths/authmfa/confirm-registration.yaml create mode 100644 static/idn-api/beta/paths/authmfa/generate-mfa-token.yaml create mode 100644 static/idn-api/beta/paths/authmfa/generate-secret.yaml create mode 100644 static/idn-api/beta/paths/authmfa/mfa-registration-reset.yaml create mode 100644 static/idn-api/beta/paths/authmfa/registration-status.yaml create mode 100644 static/idn-api/beta/paths/authmfa/verify-code.yaml create mode 100644 static/idn-api/beta/paths/authorization-capabilities.yaml create mode 100644 static/idn-api/beta/paths/bulk-add-tagged-objects.yaml create mode 100644 static/idn-api/beta/paths/bulk-remove-tagged-objects.yaml create mode 100644 static/idn-api/beta/paths/bulk-update-auth-user.yaml create mode 100644 static/idn-api/beta/paths/campaign-activate.yaml create mode 100644 static/idn-api/beta/paths/campaign-admin-cert-reassign.yaml create mode 100644 static/idn-api/beta/paths/campaign-complete.yaml create mode 100644 static/idn-api/beta/paths/campaign-reports-configuration.yaml create mode 100644 static/idn-api/beta/paths/campaign-reports.yaml create mode 100644 static/idn-api/beta/paths/campaign-run-remediation-scan.yaml create mode 100644 static/idn-api/beta/paths/campaign-run-report.yaml create mode 100644 static/idn-api/beta/paths/campaign-template-generate.yaml create mode 100644 static/idn-api/beta/paths/campaign-template-schedule.yaml create mode 100644 static/idn-api/beta/paths/campaign-template.yaml create mode 100644 static/idn-api/beta/paths/campaign-templates.yaml create mode 100644 static/idn-api/beta/paths/campaign.yaml create mode 100644 static/idn-api/beta/paths/campaigns-delete.yaml create mode 100644 static/idn-api/beta/paths/campaigns.yaml create mode 100644 static/idn-api/beta/paths/certification-task.yaml create mode 100644 static/idn-api/beta/paths/certification-tasks.yaml create mode 100644 static/idn-api/beta/paths/certification.yaml create mode 100644 static/idn-api/beta/paths/certifications-access-summaries.yaml create mode 100644 static/idn-api/beta/paths/certifications-decide.yaml create mode 100644 static/idn-api/beta/paths/certifications-decision-summary.yaml create mode 100644 static/idn-api/beta/paths/certifications-entitlement-permissions.yaml create mode 100644 static/idn-api/beta/paths/certifications-reassign-async.yaml create mode 100644 static/idn-api/beta/paths/certifications-reassign.yaml create mode 100644 static/idn-api/beta/paths/certifications-review-items-activity.yaml create mode 100644 static/idn-api/beta/paths/certifications-review-items.yaml create mode 100644 static/idn-api/beta/paths/certifications-reviewers.yaml create mode 100644 static/idn-api/beta/paths/certifications-sign-off.yaml create mode 100644 static/idn-api/beta/paths/certifications-target-summaries.yaml create mode 100644 static/idn-api/beta/paths/certifications-target-summary.yaml create mode 100644 static/idn-api/beta/paths/certifications.yaml create mode 100644 static/idn-api/beta/paths/common-access-classify-request.yaml create mode 100644 static/idn-api/beta/paths/common-access-classify.yaml create mode 100644 static/idn-api/beta/paths/common-access-update-status.yaml create mode 100644 static/idn-api/beta/paths/common-access.yaml create mode 100644 static/idn-api/beta/paths/completed-access-request-approvals.yaml create mode 100644 static/idn-api/beta/paths/connector-messages.yaml create mode 100644 static/idn-api/beta/paths/connector-rule-validate.yaml create mode 100644 static/idn-api/beta/paths/connector-rule.yaml create mode 100644 static/idn-api/beta/paths/connector-rules.yaml create mode 100644 static/idn-api/beta/paths/connectors.yaml create mode 100644 static/idn-api/beta/paths/custom-password-instruction.yaml create mode 100644 static/idn-api/beta/paths/custom-password-instructions.yaml create mode 100644 static/idn-api/beta/paths/data-pipeline-events-qualifier-related.yaml create mode 100644 static/idn-api/beta/paths/data-pipeline-events-qualifier.yaml create mode 100644 static/idn-api/beta/paths/data-pipeline-events.yaml create mode 100644 static/idn-api/beta/paths/data-pipelines.yaml create mode 100644 static/idn-api/beta/paths/delete-lifecycle-state.yaml create mode 100644 static/idn-api/beta/paths/ears-entitlement-bulk-update.yaml create mode 100644 static/idn-api/beta/paths/ears-entitlement-children.yaml create mode 100644 static/idn-api/beta/paths/ears-entitlement-parents.yaml create mode 100644 static/idn-api/beta/paths/ears-entitlement.yaml create mode 100644 static/idn-api/beta/paths/ears-identity-entitlement.yaml create mode 100644 static/idn-api/beta/paths/email-requests.yaml create mode 100644 static/idn-api/beta/paths/entitlements.yaml create mode 100644 static/idn-api/beta/paths/forward-access-request-approval.yaml create mode 100644 static/idn-api/beta/paths/historical-identities.yaml create mode 100644 static/idn-api/beta/paths/historical-identity-access-items.yaml create mode 100644 static/idn-api/beta/paths/historical-identity-compare-type.yaml create mode 100644 static/idn-api/beta/paths/historical-identity-compare.yaml create mode 100644 static/idn-api/beta/paths/historical-identity-events.yaml create mode 100644 static/idn-api/beta/paths/historical-identity-snapshot-date-access-items.yaml create mode 100644 static/idn-api/beta/paths/historical-identity-snapshot-date.yaml create mode 100644 static/idn-api/beta/paths/historical-identity-snapshot-summary.yaml create mode 100644 static/idn-api/beta/paths/historical-identity-snapshots.yaml create mode 100644 static/idn-api/beta/paths/historical-identity-start-date.yaml create mode 100644 static/idn-api/beta/paths/historical-identity.yaml create mode 100644 static/idn-api/beta/paths/iai-configuration.yaml create mode 100644 static/idn-api/beta/paths/iai-configurations.yaml create mode 100644 static/idn-api/beta/paths/iai-data-role-entitlement-identities.yaml create mode 100644 static/idn-api/beta/paths/iai-data-role-entitlements.yaml create mode 100644 static/idn-api/beta/paths/iai-data-role-identities-entitlements.yaml create mode 100644 static/idn-api/beta/paths/iai-data-roles.yaml create mode 100644 static/idn-api/beta/paths/identity-certifications-item-permissions.yaml create mode 100644 static/idn-api/beta/paths/identity-certifications-reassign-async.yaml create mode 100644 static/idn-api/beta/paths/identity-certifications-task-status.yaml create mode 100644 static/idn-api/beta/paths/identity-certifications-tasks-pending.yaml create mode 100644 static/idn-api/beta/paths/identity-group-applications.yaml create mode 100644 static/idn-api/beta/paths/identity-group-distribution.yaml create mode 100644 static/idn-api/beta/paths/identity-group-entitlement-popularities.yaml create mode 100644 static/idn-api/beta/paths/identity-group-identities.yaml create mode 100644 static/idn-api/beta/paths/identity-group.yaml create mode 100644 static/idn-api/beta/paths/identity-groups.yaml create mode 100644 static/idn-api/beta/paths/identity-profile-default-config.yaml create mode 100644 static/idn-api/beta/paths/identity-profile-lifecycle-state.yaml create mode 100644 static/idn-api/beta/paths/identity-profile-refresh-identities.yaml create mode 100644 static/idn-api/beta/paths/identity-profile.yaml create mode 100644 static/idn-api/beta/paths/identity-profiles-bulk-delete.yaml create mode 100644 static/idn-api/beta/paths/identity-profiles-export.yaml create mode 100644 static/idn-api/beta/paths/identity-profiles-id.yaml create mode 100644 static/idn-api/beta/paths/identity-profiles-identity-preview.yaml create mode 100644 static/idn-api/beta/paths/identity-profiles-import.yaml create mode 100644 static/idn-api/beta/paths/identity-profiles.yaml create mode 100644 static/idn-api/beta/paths/identity-set-lifecycle-state.yaml create mode 100644 static/idn-api/beta/paths/identity-synchronize-attributes.yaml create mode 100644 static/idn-api/beta/paths/identity-team.yaml create mode 100644 static/idn-api/beta/paths/identity.yaml create mode 100644 static/idn-api/beta/paths/internal-password-sync-groups.yaml create mode 100644 static/idn-api/beta/paths/lifecycle-states.yaml create mode 100644 static/idn-api/beta/paths/managed-client-status.yaml create mode 100644 static/idn-api/beta/paths/managed-clients-credentials.yaml create mode 100644 static/idn-api/beta/paths/managed-clients-path.yaml create mode 100644 static/idn-api/beta/paths/managed-clients.yaml create mode 100644 static/idn-api/beta/paths/managed-cluster-cache.yaml create mode 100644 static/idn-api/beta/paths/managed-cluster-jobs.yaml create mode 100644 static/idn-api/beta/paths/managed-cluster-log-config.yaml create mode 100644 static/idn-api/beta/paths/managed-cluster-path-full.yaml create mode 100644 static/idn-api/beta/paths/managed-cluster-path-internal.yaml create mode 100644 static/idn-api/beta/paths/managed-cluster-path.yaml create mode 100644 static/idn-api/beta/paths/managed-cluster-processes.yaml create mode 100644 static/idn-api/beta/paths/managed-cluster-reboot.yaml create mode 100644 static/idn-api/beta/paths/managed-cluster-status.yaml create mode 100644 static/idn-api/beta/paths/managed-cluster-types-path.yaml create mode 100644 static/idn-api/beta/paths/managed-cluster-types.yaml create mode 100644 static/idn-api/beta/paths/managed-cluster-upgrade.yaml create mode 100644 static/idn-api/beta/paths/managed-clusters-create.yaml create mode 100644 static/idn-api/beta/paths/managed-clusters-full.yaml create mode 100644 static/idn-api/beta/paths/managed-clusters-set-encryption-keys.yaml create mode 100644 static/idn-api/beta/paths/managed-clusters.yaml create mode 100644 static/idn-api/beta/paths/managed-processes-path.yaml create mode 100644 static/idn-api/beta/paths/managed-processes.yaml create mode 100644 static/idn-api/beta/paths/message-catalog.yaml create mode 100644 static/idn-api/beta/paths/mfa-config-test.yaml create mode 100644 static/idn-api/beta/paths/mfa-config.yaml create mode 100644 static/idn-api/beta/paths/non-employee-approval-list.yaml create mode 100644 static/idn-api/beta/paths/non-employee-approval-summary.yaml create mode 100644 static/idn-api/beta/paths/non-employee-approve-get.yaml create mode 100644 static/idn-api/beta/paths/non-employee-approve-request.yaml create mode 100644 static/idn-api/beta/paths/non-employee-bulk-upload-jobs-fail.yaml create mode 100644 static/idn-api/beta/paths/non-employee-record.yaml create mode 100644 static/idn-api/beta/paths/non-employee-records-bulk-delete.yaml create mode 100644 static/idn-api/beta/paths/non-employee-records.yaml create mode 100644 static/idn-api/beta/paths/non-employee-reject-request.yaml create mode 100644 static/idn-api/beta/paths/non-employee-request-summary-get.yaml create mode 100644 static/idn-api/beta/paths/non-employee-request.yaml create mode 100644 static/idn-api/beta/paths/non-employee-requests.yaml create mode 100644 static/idn-api/beta/paths/non-employee-source-aggregate.yaml create mode 100644 static/idn-api/beta/paths/non-employee-source.yaml create mode 100644 static/idn-api/beta/paths/non-employee-sources-bulk-upload-details.yaml create mode 100644 static/idn-api/beta/paths/non-employee-sources-bulk-upload-non-employees.yaml create mode 100644 static/idn-api/beta/paths/non-employee-sources-bulk-upload-status.yaml create mode 100644 static/idn-api/beta/paths/non-employee-sources-export-non-employees.yaml create mode 100644 static/idn-api/beta/paths/non-employee-sources-export-schema-attributes-template.yaml create mode 100644 static/idn-api/beta/paths/non-employee-sources-schema-attribute.yaml create mode 100644 static/idn-api/beta/paths/non-employee-sources-schema-attributes.yaml create mode 100644 static/idn-api/beta/paths/non-employee-sources.yaml create mode 100644 static/idn-api/beta/paths/notification-preferences.yaml create mode 100644 static/idn-api/beta/paths/notification-template-context.yaml create mode 100644 static/idn-api/beta/paths/notification-template-defaults.yaml create mode 100644 static/idn-api/beta/paths/notification-template.yaml create mode 100644 static/idn-api/beta/paths/notification-templates-bulk-delete.yaml create mode 100644 static/idn-api/beta/paths/notification-templates.yaml create mode 100644 static/idn-api/beta/paths/oauth-client.yaml create mode 100644 static/idn-api/beta/paths/oauth-clients.yaml create mode 100644 static/idn-api/beta/paths/org-config-valid-time-zones.yaml create mode 100644 static/idn-api/beta/paths/org-config.yaml create mode 100644 static/idn-api/beta/paths/outlier-summaries-latest.yaml create mode 100644 static/idn-api/beta/paths/outlier-summaries.yaml create mode 100644 static/idn-api/beta/paths/outliers-bulk-outlier-detection.yaml create mode 100644 static/idn-api/beta/paths/outliers-export.yaml create mode 100644 static/idn-api/beta/paths/outliers-ignore.yaml create mode 100644 static/idn-api/beta/paths/outliers-unignore.yaml create mode 100644 static/idn-api/beta/paths/outliers.yaml create mode 100644 static/idn-api/beta/paths/password-change-status.yaml create mode 100644 static/idn-api/beta/paths/password-dictionary.yaml create mode 100644 static/idn-api/beta/paths/password-org-config.yaml create mode 100644 static/idn-api/beta/paths/password-reset-digit-token.yaml create mode 100644 static/idn-api/beta/paths/password-sync-group.yaml create mode 100644 static/idn-api/beta/paths/password-sync-groups.yaml create mode 100644 static/idn-api/beta/paths/peer-group-strategies.yaml create mode 100644 static/idn-api/beta/paths/pending-access-request-approvals.yaml create mode 100644 static/idn-api/beta/paths/personal-access-token.yaml create mode 100644 static/idn-api/beta/paths/personal-access-tokens.yaml create mode 100644 static/idn-api/beta/paths/public-identities-config.yaml create mode 100644 static/idn-api/beta/paths/query-password-info.yaml create mode 100644 static/idn-api/beta/paths/rats-access-request-recommendations.yaml create mode 100644 static/idn-api/beta/paths/recommendations-config.yaml create mode 100644 static/idn-api/beta/paths/recommendations-request.yaml create mode 100644 static/idn-api/beta/paths/reject-access-request-approval.yaml create mode 100644 static/idn-api/beta/paths/role-assigned-identities.yaml create mode 100644 static/idn-api/beta/paths/role-insight.yaml create mode 100644 static/idn-api/beta/paths/role-insights-current-entitlements.yaml create mode 100644 static/idn-api/beta/paths/role-insights-entitlement-changes-download.yaml create mode 100644 static/idn-api/beta/paths/role-insights-entitlement-changes-identities.yaml create mode 100644 static/idn-api/beta/paths/role-insights-entitlement-changes.yaml create mode 100644 static/idn-api/beta/paths/role-insights-request.yaml create mode 100644 static/idn-api/beta/paths/role-insights-requests.yaml create mode 100644 static/idn-api/beta/paths/role-insights-summary.yaml create mode 100644 static/idn-api/beta/paths/role-insights.yaml create mode 100644 static/idn-api/beta/paths/role-mining-potential-role-edit-entitlements.yaml create mode 100644 static/idn-api/beta/paths/role-mining-potential-role-entitlement-popularities.yaml create mode 100644 static/idn-api/beta/paths/role-mining-potential-role-entitlement-popularity-distribution.yaml create mode 100644 static/idn-api/beta/paths/role-mining-potential-role-excluded-entitlements.yaml create mode 100644 static/idn-api/beta/paths/role-mining-potential-role-identities.yaml create mode 100644 static/idn-api/beta/paths/role-mining-potential-role-provision.yaml create mode 100644 static/idn-api/beta/paths/role-mining-session-potential-role-applications.yaml create mode 100644 static/idn-api/beta/paths/role-mining-session-potential-role-export-async.yaml create mode 100644 static/idn-api/beta/paths/role-mining-session-potential-role-export-download.yaml create mode 100644 static/idn-api/beta/paths/role-mining-session-potential-role-export-status.yaml create mode 100644 static/idn-api/beta/paths/role-mining-session-potential-role-export.yaml create mode 100644 static/idn-api/beta/paths/role-mining-session-potential-role-summaries.yaml create mode 100644 static/idn-api/beta/paths/role-mining-session-potential-role-summary.yaml create mode 100644 static/idn-api/beta/paths/role-mining-session-status.yaml create mode 100644 static/idn-api/beta/paths/role-mining-session.yaml create mode 100644 static/idn-api/beta/paths/role-mining-sessions.yaml create mode 100644 static/idn-api/beta/paths/role.yaml create mode 100644 static/idn-api/beta/paths/roles-by-identity.yaml create mode 100644 static/idn-api/beta/paths/roles.yaml create mode 100644 static/idn-api/beta/paths/run-datapipeline-dagid.yaml create mode 100644 static/idn-api/beta/paths/run-datapipeline-dagtype.yaml create mode 100644 static/idn-api/beta/paths/s3-proxy.yaml create mode 100644 static/idn-api/beta/paths/saas-management-application-for-source.yaml create mode 100644 static/idn-api/beta/paths/saas-management-applications-test.yaml create mode 100644 static/idn-api/beta/paths/saas-management-applications-update-map.yaml create mode 100644 static/idn-api/beta/paths/saas-management-applications.yaml create mode 100644 static/idn-api/beta/paths/scheduled-actions-bulk-delete.yaml create mode 100644 static/idn-api/beta/paths/scheduled-actions-delete.yaml create mode 100644 static/idn-api/beta/paths/scheduled-actions.yaml create mode 100644 static/idn-api/beta/paths/schema.yaml create mode 100644 static/idn-api/beta/paths/schemas.yaml create mode 100644 static/idn-api/beta/paths/searchAttributeConfig-get-patch-delete.yaml create mode 100644 static/idn-api/beta/paths/searchAttributeConfig.yaml create mode 100644 static/idn-api/beta/paths/segment-change-assignments.yaml create mode 100644 static/idn-api/beta/paths/segment.yaml create mode 100644 static/idn-api/beta/paths/segments.yaml create mode 100644 static/idn-api/beta/paths/send-test-notification.yaml create mode 100644 static/idn-api/beta/paths/service-desk-integration-configuration.yaml create mode 100644 static/idn-api/beta/paths/service-desk-integration-template.yaml create mode 100644 static/idn-api/beta/paths/service-desk-integration-types.yaml create mode 100644 static/idn-api/beta/paths/service-desk-integration.yaml create mode 100644 static/idn-api/beta/paths/service-desk-integrations.yaml create mode 100644 static/idn-api/beta/paths/set-password.yaml create mode 100644 static/idn-api/beta/paths/sod-all-report-run.yaml create mode 100644 static/idn-api/beta/paths/sod-all-report-status.yaml create mode 100644 static/idn-api/beta/paths/sod-download-custom-report.yaml create mode 100644 static/idn-api/beta/paths/sod-download-default-report.yaml create mode 100644 static/idn-api/beta/paths/sod-exception.yaml create mode 100644 static/idn-api/beta/paths/sod-exceptions-bulk-create.yaml create mode 100644 static/idn-api/beta/paths/sod-exceptions.yaml create mode 100644 static/idn-api/beta/paths/sod-policies.yaml create mode 100644 static/idn-api/beta/paths/sod-policy.yaml create mode 100644 static/idn-api/beta/paths/sod-report-run.yaml create mode 100644 static/idn-api/beta/paths/sod-schedule.yaml create mode 100644 static/idn-api/beta/paths/sod-violation-check.yaml create mode 100644 static/idn-api/beta/paths/sod-violation-report-status.yaml create mode 100644 static/idn-api/beta/paths/sod-violation-report.yaml create mode 100644 static/idn-api/beta/paths/sod/arm-risk.yaml create mode 100644 static/idn-api/beta/paths/sod/predict-violations.yaml create mode 100644 static/idn-api/beta/paths/source-accounts-schema.yaml create mode 100644 static/idn-api/beta/paths/source-aggregation-state.yaml create mode 100644 static/idn-api/beta/paths/source-connector-check-connection.yaml create mode 100644 static/idn-api/beta/paths/source-connector-initiate-extract.yaml create mode 100644 static/idn-api/beta/paths/source-connector-peek-resource-objects.yaml create mode 100644 static/idn-api/beta/paths/source-connector-ping-cluster.yaml create mode 100644 static/idn-api/beta/paths/source-connector-state.yaml create mode 100644 static/idn-api/beta/paths/source-connector-test-configuration.yaml create mode 100644 static/idn-api/beta/paths/source-connectors-source-config.yaml create mode 100644 static/idn-api/beta/paths/source-entitlements-schema.yaml create mode 100644 static/idn-api/beta/paths/source-synchronize-attributes.yaml create mode 100644 static/idn-api/beta/paths/source-upload-connector-file.yaml create mode 100644 static/idn-api/beta/paths/source.yaml create mode 100644 static/idn-api/beta/paths/sources.yaml create mode 100644 static/idn-api/beta/paths/sp-config-export-download.yaml create mode 100644 static/idn-api/beta/paths/sp-config-export-status.yaml create mode 100644 static/idn-api/beta/paths/sp-config-export.yaml create mode 100644 static/idn-api/beta/paths/sp-config-import-download.yaml create mode 100644 static/idn-api/beta/paths/sp-config-import-status.yaml create mode 100644 static/idn-api/beta/paths/sp-config-import.yaml create mode 100644 static/idn-api/beta/paths/sp-config-objects.yaml create mode 100644 static/idn-api/beta/paths/supportlogin/access-granter-support-login-get.yaml create mode 100644 static/idn-api/beta/paths/supportlogin/access-granter-support-login-list.yaml create mode 100644 static/idn-api/beta/paths/supportlogin/auth-support-login-create.yaml create mode 100644 static/idn-api/beta/paths/supportlogin/auth-support-login-delete.yaml create mode 100644 static/idn-api/beta/paths/supportlogin/auth-support-login-get.yaml create mode 100644 static/idn-api/beta/paths/supportlogin/auth-support-login-list.yaml create mode 100644 static/idn-api/beta/paths/supportlogin/auth-support-login-patch.yaml create mode 100644 static/idn-api/beta/paths/supportlogin/auth-support-login-transfer-get.yaml create mode 100644 static/idn-api/beta/paths/supportlogin/auth-support-login-transfer-post.yaml create mode 100644 static/idn-api/beta/paths/supportlogin/auth-support-login-transfer.yaml create mode 100644 static/idn-api/beta/paths/supportlogin/auth-support-login-transfers-list.yaml create mode 100644 static/idn-api/beta/paths/supportlogin/auth-support-login.yaml create mode 100644 static/idn-api/beta/paths/supportlogin/auth-support-logins-migrate.yaml create mode 100644 static/idn-api/beta/paths/supportlogin/auth-support-logins.yaml create mode 100644 static/idn-api/beta/paths/supportlogin/auth-support-tenant-create.yaml create mode 100644 static/idn-api/beta/paths/supportlogin/auth-support-tenant-delete.yaml create mode 100644 static/idn-api/beta/paths/supportlogin/auth-support-tenant-list.yaml create mode 100644 static/idn-api/beta/paths/supportlogin/auth-support-tenants.yaml create mode 100644 static/idn-api/beta/paths/supportlogin/auth-support-user-eligibility-get.yaml create mode 100644 static/idn-api/beta/paths/sync-password.yaml create mode 100644 static/idn-api/beta/paths/system-accounts.yaml create mode 100644 static/idn-api/beta/paths/tag.yaml create mode 100644 static/idn-api/beta/paths/tagged-object.yaml create mode 100644 static/idn-api/beta/paths/tagged-objects-type.yaml create mode 100644 static/idn-api/beta/paths/tagged-objects.yaml create mode 100644 static/idn-api/beta/paths/tags-get-shared.yaml create mode 100644 static/idn-api/beta/paths/tags.yaml create mode 100644 static/idn-api/beta/paths/task-definition.yaml create mode 100644 static/idn-api/beta/paths/task-definitions.yaml create mode 100644 static/idn-api/beta/paths/task-execution-cancel.yaml create mode 100644 static/idn-api/beta/paths/task-execution-run.yaml create mode 100644 static/idn-api/beta/paths/task-status-pending.yaml create mode 100644 static/idn-api/beta/paths/task-status.yaml create mode 100644 static/idn-api/beta/paths/transform.yaml create mode 100644 static/idn-api/beta/paths/transforms.yaml create mode 100644 static/idn-api/beta/paths/trigger-invocations-complete.yaml create mode 100644 static/idn-api/beta/paths/trigger-invocations-pending-events.yaml create mode 100644 static/idn-api/beta/paths/trigger-invocations-start.yaml create mode 100644 static/idn-api/beta/paths/trigger-invocations-status.yaml create mode 100644 static/idn-api/beta/paths/trigger-invocations-test.yaml create mode 100644 static/idn-api/beta/paths/trigger-invocations.yaml create mode 100644 static/idn-api/beta/paths/trigger-subscription.yaml create mode 100644 static/idn-api/beta/paths/trigger-subscriptions-internal.yaml create mode 100644 static/idn-api/beta/paths/trigger-subscriptions-validate-filter.yaml create mode 100644 static/idn-api/beta/paths/trigger-subscriptions.yaml create mode 100644 static/idn-api/beta/paths/triggers.yaml create mode 100644 static/idn-api/beta/paths/verified-from-address.yaml create mode 100644 static/idn-api/beta/paths/verified-from-addresses.yaml create mode 100644 static/idn-api/beta/paths/work-item.yaml create mode 100644 static/idn-api/beta/paths/work-items-account-selection.yaml create mode 100644 static/idn-api/beta/paths/work-items-approve-approval-item.yaml create mode 100644 static/idn-api/beta/paths/work-items-bulk-approve-approval-item.yaml create mode 100644 static/idn-api/beta/paths/work-items-bulk-reject-approval-item.yaml create mode 100644 static/idn-api/beta/paths/work-items-complete.yaml create mode 100644 static/idn-api/beta/paths/work-items-completed-count.yaml create mode 100644 static/idn-api/beta/paths/work-items-completed.yaml create mode 100644 static/idn-api/beta/paths/work-items-count.yaml create mode 100644 static/idn-api/beta/paths/work-items-reject-approval-item.yaml create mode 100644 static/idn-api/beta/paths/work-items-summary.yaml create mode 100644 static/idn-api/beta/paths/work-items.yaml create mode 100644 static/idn-api/beta/paths/workflow-execution-cancel.yaml create mode 100644 static/idn-api/beta/paths/workflow-execution-history.yaml create mode 100644 static/idn-api/beta/paths/workflow-execution.yaml create mode 100644 static/idn-api/beta/paths/workflow-executions.yaml create mode 100644 static/idn-api/beta/paths/workflow-external-execute-test.yaml create mode 100644 static/idn-api/beta/paths/workflow-external-execute.yaml create mode 100644 static/idn-api/beta/paths/workflow-external-oauth-client.yaml create mode 100644 static/idn-api/beta/paths/workflow-library-actions.yaml create mode 100644 static/idn-api/beta/paths/workflow-library-operators.yaml create mode 100644 static/idn-api/beta/paths/workflow-library-triggers.yaml create mode 100644 static/idn-api/beta/paths/workflow-library.yaml create mode 100644 static/idn-api/beta/paths/workflow-test.yaml create mode 100644 static/idn-api/beta/paths/workflow.yaml create mode 100644 static/idn-api/beta/paths/workflows.yaml create mode 100644 static/idn-api/beta/schemas/AWSCredentialsResponse.yaml create mode 100644 static/idn-api/beta/schemas/AccessConstraint.yaml create mode 100644 static/idn-api/beta/schemas/AccessCriteria.yaml create mode 100644 static/idn-api/beta/schemas/AccessGranterAuthSupportLoginResponse.yaml create mode 100644 static/idn-api/beta/schemas/AccessItemAccessProfileResponse.yaml create mode 100644 static/idn-api/beta/schemas/AccessItemAccountResponse.yaml create mode 100644 static/idn-api/beta/schemas/AccessItemAppResponse.yaml create mode 100644 static/idn-api/beta/schemas/AccessItemAssociated.yaml create mode 100644 static/idn-api/beta/schemas/AccessItemDiff.yaml create mode 100644 static/idn-api/beta/schemas/AccessItemDiffSummary.yaml create mode 100644 static/idn-api/beta/schemas/AccessItemEntitlementResponse.yaml create mode 100644 static/idn-api/beta/schemas/AccessItemRef.yaml create mode 100644 static/idn-api/beta/schemas/AccessItemRemoved.yaml create mode 100644 static/idn-api/beta/schemas/AccessItemRoleResponse.yaml create mode 100644 static/idn-api/beta/schemas/AccessRecommendation.yaml create mode 100644 static/idn-api/beta/schemas/AccessRecommendationMessage.yaml create mode 100644 static/idn-api/beta/schemas/AccessReference.yaml create mode 100644 static/idn-api/beta/schemas/AccessRequestItemResponse.yaml create mode 100644 static/idn-api/beta/schemas/AccessRequestRecommendationActionItemDto.yaml create mode 100644 static/idn-api/beta/schemas/AccessRequestRecommendationActionItemResponseDto.yaml create mode 100644 static/idn-api/beta/schemas/AccessRequestRecommendationItem.yaml create mode 100644 static/idn-api/beta/schemas/AccessRequestRecommendationItemDetail.yaml create mode 100644 static/idn-api/beta/schemas/AccessRequestRecommendationItemType.yaml create mode 100644 static/idn-api/beta/schemas/AccessRequestResponse.yaml create mode 100644 static/idn-api/beta/schemas/AccessRequested.yaml create mode 100644 static/idn-api/beta/schemas/AccessRolesChangeSegmentAssignments.yaml create mode 100644 static/idn-api/beta/schemas/AccessType.yaml create mode 100644 static/idn-api/beta/schemas/Account.yaml create mode 100644 static/idn-api/beta/schemas/AccountAction.yaml create mode 100644 static/idn-api/beta/schemas/AccountAggregationStatus.yaml create mode 100644 static/idn-api/beta/schemas/AccountAttributes.yaml create mode 100644 static/idn-api/beta/schemas/AccountDetails.yaml create mode 100644 static/idn-api/beta/schemas/AccountStatusChanged.yaml create mode 100644 static/idn-api/beta/schemas/AccountToggleRequest.yaml create mode 100644 static/idn-api/beta/schemas/AccountUnlockRequest.yaml create mode 100644 static/idn-api/beta/schemas/AccountsAsyncResult.yaml create mode 100644 static/idn-api/beta/schemas/ActivateCampaignOptions.yaml create mode 100644 static/idn-api/beta/schemas/ActiveInvocation.yaml create mode 100644 static/idn-api/beta/schemas/ActivityData.yaml create mode 100644 static/idn-api/beta/schemas/ActivityDataSource.yaml create mode 100644 static/idn-api/beta/schemas/AdminReviewReassign.yaml create mode 100644 static/idn-api/beta/schemas/AggregationState.yaml create mode 100644 static/idn-api/beta/schemas/AirflowDagDto.yaml create mode 100644 static/idn-api/beta/schemas/AmsCapability.yaml create mode 100644 static/idn-api/beta/schemas/AmsRightSet.yaml create mode 100644 static/idn-api/beta/schemas/ApplicationReference.yaml create mode 100644 static/idn-api/beta/schemas/ApprovalInfoResponse.yaml create mode 100644 static/idn-api/beta/schemas/ApprovalItemDetails.yaml create mode 100644 static/idn-api/beta/schemas/ApprovalStatus.yaml create mode 100644 static/idn-api/beta/schemas/ApprovalSummary.yaml create mode 100644 static/idn-api/beta/schemas/Argument.yaml create mode 100644 static/idn-api/beta/schemas/AttrSyncSourceAttributeConfig.yaml create mode 100644 static/idn-api/beta/schemas/AttrSyncSourceConfig.yaml create mode 100644 static/idn-api/beta/schemas/AttrSyncTenantAttributeConfig.yaml create mode 100644 static/idn-api/beta/schemas/AttrSyncTenantConfig.yaml create mode 100644 static/idn-api/beta/schemas/AttrSyncTenantSyncTarget.yaml create mode 100644 static/idn-api/beta/schemas/AttributeChange.yaml create mode 100644 static/idn-api/beta/schemas/AttributeDefinition.yaml create mode 100644 static/idn-api/beta/schemas/AttributeDefinitionType.yaml create mode 100644 static/idn-api/beta/schemas/AttributesChanged.yaml create mode 100644 static/idn-api/beta/schemas/AuthOrgConfiguration.yaml create mode 100644 static/idn-api/beta/schemas/AuthSupportLoginRequest.yaml create mode 100644 static/idn-api/beta/schemas/AuthSupportLoginResponse.yaml create mode 100644 static/idn-api/beta/schemas/AuthSupportTenantRequest.yaml create mode 100644 static/idn-api/beta/schemas/AuthSupportTenantResponse.yaml create mode 100644 static/idn-api/beta/schemas/AuthSupportTransferStatusResponse.yaml create mode 100644 static/idn-api/beta/schemas/AuthSupportUserEligibilityResponse.yaml create mode 100644 static/idn-api/beta/schemas/AuthUser.yaml create mode 100644 static/idn-api/beta/schemas/AuthUserSaveRequest.yaml create mode 100644 static/idn-api/beta/schemas/AuthenticationType.yaml create mode 100644 static/idn-api/beta/schemas/BaseCommonDto.yaml create mode 100644 static/idn-api/beta/schemas/BaseReferenceDto.yaml create mode 100644 static/idn-api/beta/schemas/BasicAuthConfig.yaml create mode 100644 static/idn-api/beta/schemas/BasicProvision.yaml create mode 100644 static/idn-api/beta/schemas/BearerTokenAuthConfig.yaml create mode 100644 static/idn-api/beta/schemas/BulkTaggedObject.yaml create mode 100644 static/idn-api/beta/schemas/BulkUpdateAuthUser.yaml create mode 100644 static/idn-api/beta/schemas/Campaign.yaml create mode 100644 static/idn-api/beta/schemas/CampaignAlert.yaml create mode 100644 static/idn-api/beta/schemas/CampaignReport.yaml create mode 100644 static/idn-api/beta/schemas/CampaignReportsConfig.yaml create mode 100644 static/idn-api/beta/schemas/CampaignTemplate.yaml create mode 100644 static/idn-api/beta/schemas/CancelableAccountActivity.yaml create mode 100644 static/idn-api/beta/schemas/CertificationDto.yaml create mode 100644 static/idn-api/beta/schemas/CertificationItemType.yaml create mode 100644 static/idn-api/beta/schemas/CertificationReference.yaml create mode 100644 static/idn-api/beta/schemas/CertificationResponse.yaml create mode 100644 static/idn-api/beta/schemas/CertificationTask.yaml create mode 100644 static/idn-api/beta/schemas/CertifierResponse.yaml create mode 100644 static/idn-api/beta/schemas/ChangeRequest.yaml create mode 100644 static/idn-api/beta/schemas/CheckStatus.yaml create mode 100644 static/idn-api/beta/schemas/ClientLogConfiguration.yaml create mode 100644 static/idn-api/beta/schemas/ClientStatusBody.yaml create mode 100644 static/idn-api/beta/schemas/ClientType.yaml create mode 100644 static/idn-api/beta/schemas/ClusterSource.yaml create mode 100644 static/idn-api/beta/schemas/ClusterUpgradeData.yaml create mode 100644 static/idn-api/beta/schemas/CommentDto.yaml create mode 100644 static/idn-api/beta/schemas/CommonAccessClassifyRequest.yaml create mode 100644 static/idn-api/beta/schemas/CommonAccessClassifyResponse.yaml create mode 100644 static/idn-api/beta/schemas/CommonAccessIDStatus.yaml create mode 100644 static/idn-api/beta/schemas/CommonAccessItemAccess.yaml create mode 100644 static/idn-api/beta/schemas/CommonAccessItemRequest.yaml create mode 100644 static/idn-api/beta/schemas/CommonAccessItemResponse.yaml create mode 100644 static/idn-api/beta/schemas/CommonAccessItemState.yaml create mode 100644 static/idn-api/beta/schemas/CommonAccessResponse.yaml create mode 100644 static/idn-api/beta/schemas/CommonAccessType.yaml create mode 100644 static/idn-api/beta/schemas/CompleteCampaignOptions.yaml create mode 100644 static/idn-api/beta/schemas/CompleteInvocation.yaml create mode 100644 static/idn-api/beta/schemas/CompleteInvocationInput.yaml create mode 100644 static/idn-api/beta/schemas/CompletedApproval.yaml create mode 100644 static/idn-api/beta/schemas/CompletedApprovalState.yaml create mode 100644 static/idn-api/beta/schemas/ComplexRoleCriterion.yaml create mode 100644 static/idn-api/beta/schemas/ComplexRoleCriterionKey.yaml create mode 100644 static/idn-api/beta/schemas/ConfigObject.yaml create mode 100644 static/idn-api/beta/schemas/ConflictingAccessCriteria.yaml create mode 100644 static/idn-api/beta/schemas/ConnectorCacheConfig.yaml create mode 100644 static/idn-api/beta/schemas/ConnectorDetail.yaml create mode 100644 static/idn-api/beta/schemas/ConnectorFileUploadHistory.yaml create mode 100644 static/idn-api/beta/schemas/ConnectorMessage.yaml create mode 100644 static/idn-api/beta/schemas/ConnectorRuleCreateRequest.yaml create mode 100644 static/idn-api/beta/schemas/ConnectorRuleResponse.yaml create mode 100644 static/idn-api/beta/schemas/ConnectorRuleUpdateRequest.yaml create mode 100644 static/idn-api/beta/schemas/ConnectorRuleValidationResponse.yaml create mode 100644 static/idn-api/beta/schemas/ConnectorSourcesUploadFiles.yaml create mode 100644 static/idn-api/beta/schemas/CorrelatedGovernanceEvent.yaml create mode 100644 static/idn-api/beta/schemas/CreateOAuthClientRequest.yaml create mode 100644 static/idn-api/beta/schemas/CreateOAuthClientResponse.yaml create mode 100644 static/idn-api/beta/schemas/CreatePersonalAccessTokenRequest.yaml create mode 100644 static/idn-api/beta/schemas/CreatePersonalAccessTokenResponse.yaml create mode 100644 static/idn-api/beta/schemas/CustomPasswordInstruction.yaml create mode 100644 static/idn-api/beta/schemas/DataPipeline.yaml create mode 100644 static/idn-api/beta/schemas/DataPipelineEvent.yaml create mode 100644 static/idn-api/beta/schemas/DataPipelineOperation.yaml create mode 100644 static/idn-api/beta/schemas/DataPipelineQualifiers.yaml create mode 100644 static/idn-api/beta/schemas/DataPipelineRelatedQualifiers.yaml create mode 100644 static/idn-api/beta/schemas/DataPipelineSummary.yaml create mode 100644 static/idn-api/beta/schemas/DecisionSummary.yaml create mode 100644 static/idn-api/beta/schemas/DeleteCampaignsRequest.yaml create mode 100644 static/idn-api/beta/schemas/EmailNotificationOption.yaml create mode 100644 static/idn-api/beta/schemas/EmailRequest.yaml create mode 100644 static/idn-api/beta/schemas/EmailStatusDto.yaml create mode 100644 static/idn-api/beta/schemas/Entitlement.yaml create mode 100644 static/idn-api/beta/schemas/EntitlementBulkUpdateRequest.yaml create mode 100644 static/idn-api/beta/schemas/EntitlementDto.yaml create mode 100644 static/idn-api/beta/schemas/EntitlementPopularityDto.yaml create mode 100644 static/idn-api/beta/schemas/EntitlementRefDto.yaml create mode 100644 static/idn-api/beta/schemas/EntitlementViewResponse.yaml create mode 100644 static/idn-api/beta/schemas/EventBridgeConfig.yaml create mode 100644 static/idn-api/beta/schemas/EventStatus.yaml create mode 100644 static/idn-api/beta/schemas/ExportOptions.yaml create mode 100644 static/idn-api/beta/schemas/ExportPayload.yaml create mode 100644 static/idn-api/beta/schemas/Expression.yaml create mode 100644 static/idn-api/beta/schemas/ExtractRequest.yaml create mode 100644 static/idn-api/beta/schemas/FeatureValueDto.yaml create mode 100644 static/idn-api/beta/schemas/FederationProtocolDetails.yaml create mode 100644 static/idn-api/beta/schemas/FieldDetails.yaml create mode 100644 static/idn-api/beta/schemas/ForgotUsernameRequest.yaml create mode 100644 static/idn-api/beta/schemas/FormDetails.yaml create mode 100644 static/idn-api/beta/schemas/FormItemDetails.yaml create mode 100644 static/idn-api/beta/schemas/ForwardApprovalDto.yaml create mode 100644 static/idn-api/beta/schemas/FullAccount.yaml create mode 100644 static/idn-api/beta/schemas/GetMfaTokenRequest.yaml create mode 100644 static/idn-api/beta/schemas/GetMfaTokenResponse.yaml create mode 100644 static/idn-api/beta/schemas/GetOAuthClientResponse.yaml create mode 100644 static/idn-api/beta/schemas/GetPersonalAccessTokenResponse.yaml create mode 100644 static/idn-api/beta/schemas/GetSecretResponse.yaml create mode 100644 static/idn-api/beta/schemas/GovernanceEventResponse.yaml create mode 100644 static/idn-api/beta/schemas/GrantType.yaml create mode 100644 static/idn-api/beta/schemas/HttpAuthenticationType.yaml create mode 100644 static/idn-api/beta/schemas/HttpConfig.yaml create mode 100644 static/idn-api/beta/schemas/HttpDispatchMode.yaml create mode 100644 static/idn-api/beta/schemas/IaiConfigurationDto.yaml create mode 100644 static/idn-api/beta/schemas/IaiDataRole.yaml create mode 100644 static/idn-api/beta/schemas/IaiDataRoleEntitlement.yaml create mode 100644 static/idn-api/beta/schemas/IaiDataRoleEntitlementIdentity.yaml create mode 100644 static/idn-api/beta/schemas/IaiDataRoleIdentityEntitlement.yaml create mode 100644 static/idn-api/beta/schemas/Identity.yaml create mode 100644 static/idn-api/beta/schemas/IdentityAttributeConfig.yaml create mode 100644 static/idn-api/beta/schemas/IdentityAttributeDistributionDto.yaml create mode 100644 static/idn-api/beta/schemas/IdentityAttributePreview.yaml create mode 100644 static/idn-api/beta/schemas/IdentityAttributeTransform.yaml create mode 100644 static/idn-api/beta/schemas/IdentityAttributeValueCountDto.yaml create mode 100644 static/idn-api/beta/schemas/IdentityCertificationTask.yaml create mode 100644 static/idn-api/beta/schemas/IdentityCertified.yaml create mode 100644 static/idn-api/beta/schemas/IdentityCompareResponse.yaml create mode 100644 static/idn-api/beta/schemas/IdentityDeletedEvent.yaml create mode 100644 static/idn-api/beta/schemas/IdentityEntitlements.yaml create mode 100644 static/idn-api/beta/schemas/IdentityExceptionReportReference.yaml create mode 100644 static/idn-api/beta/schemas/IdentityGroupDto.yaml create mode 100644 static/idn-api/beta/schemas/IdentityHistoryEventResponse.yaml create mode 100644 static/idn-api/beta/schemas/IdentityHistoryResponse.yaml create mode 100644 static/idn-api/beta/schemas/IdentityListItem.yaml create mode 100644 static/idn-api/beta/schemas/IdentityPreview.yaml create mode 100644 static/idn-api/beta/schemas/IdentityPreviewRequest.yaml create mode 100644 static/idn-api/beta/schemas/IdentityPreviewResponse.yaml create mode 100644 static/idn-api/beta/schemas/IdentityProfile.yaml create mode 100644 static/idn-api/beta/schemas/IdentityProfileBulkDelete.yaml create mode 100644 static/idn-api/beta/schemas/IdentityProfileExportedObject.yaml create mode 100644 static/idn-api/beta/schemas/IdentityRefWithAttributes.yaml create mode 100644 static/idn-api/beta/schemas/IdentityReferenceWithId.yaml create mode 100644 static/idn-api/beta/schemas/IdentityRequestItemResponse.yaml create mode 100644 static/idn-api/beta/schemas/IdentitySnapshotSummaryResponse.yaml create mode 100644 static/idn-api/beta/schemas/IdentitySummaryResponse.yaml create mode 100644 static/idn-api/beta/schemas/IdentitySyncJob.yaml create mode 100644 static/idn-api/beta/schemas/IdentitySyncPayload.yaml create mode 100644 static/idn-api/beta/schemas/IdentityWithNewAccess.yaml create mode 100644 static/idn-api/beta/schemas/IdpDetails.yaml create mode 100644 static/idn-api/beta/schemas/ImportOptions.yaml create mode 100644 static/idn-api/beta/schemas/Incident.yaml create mode 100644 static/idn-api/beta/schemas/InlineConfig.yaml create mode 100644 static/idn-api/beta/schemas/InternalIdentityDto.yaml create mode 100644 static/idn-api/beta/schemas/Invocation.yaml create mode 100644 static/idn-api/beta/schemas/InvocationStatus.yaml create mode 100644 static/idn-api/beta/schemas/InvocationStatusType.yaml create mode 100644 static/idn-api/beta/schemas/JITConfiguration.yaml create mode 100644 static/idn-api/beta/schemas/JobState.yaml create mode 100644 static/idn-api/beta/schemas/JobType.yaml create mode 100644 static/idn-api/beta/schemas/JsonPatch.yaml create mode 100644 static/idn-api/beta/schemas/JsonPatchOperation.yaml create mode 100644 static/idn-api/beta/schemas/LatestOutlierSummary.yaml create mode 100644 static/idn-api/beta/schemas/LifecycleState.yaml create mode 100644 static/idn-api/beta/schemas/LocalizedMessage.yaml create mode 100644 static/idn-api/beta/schemas/LockoutConfiguration.yaml create mode 100644 static/idn-api/beta/schemas/LogLevelSpec.yaml create mode 100644 static/idn-api/beta/schemas/ManagedClient.yaml create mode 100644 static/idn-api/beta/schemas/ManagedClientStatus.yaml create mode 100644 static/idn-api/beta/schemas/ManagedClientStatusAggResponse.yaml create mode 100644 static/idn-api/beta/schemas/ManagedClientStatusEnum.yaml create mode 100644 static/idn-api/beta/schemas/ManagedClientType.yaml create mode 100644 static/idn-api/beta/schemas/ManagedCluster.yaml create mode 100644 static/idn-api/beta/schemas/ManagedClusterAttributes.yaml create mode 100644 static/idn-api/beta/schemas/ManagedClusterKeyPair.yaml create mode 100644 static/idn-api/beta/schemas/ManagedClusterQueue.yaml create mode 100644 static/idn-api/beta/schemas/ManagedClusterRedis.yaml create mode 100644 static/idn-api/beta/schemas/ManagedClusterStatus.yaml create mode 100644 static/idn-api/beta/schemas/ManagedClusterType.yaml create mode 100644 static/idn-api/beta/schemas/ManagedClusterTypes.yaml create mode 100644 static/idn-api/beta/schemas/ManagedProcess.yaml create mode 100644 static/idn-api/beta/schemas/ManagedProcessConfiguration.yaml create mode 100644 static/idn-api/beta/schemas/ManagedProcessConfigurationHashMap.yaml create mode 100644 static/idn-api/beta/schemas/ManagerCorrelationMapping.yaml create mode 100644 static/idn-api/beta/schemas/Medium.yaml create mode 100644 static/idn-api/beta/schemas/MemberReference.yaml create mode 100644 static/idn-api/beta/schemas/MessageCatalogDto.yaml create mode 100644 static/idn-api/beta/schemas/MetricResponse.yaml create mode 100644 static/idn-api/beta/schemas/MfaConfig.yaml create mode 100644 static/idn-api/beta/schemas/MfaConfigTestResponse.yaml create mode 100644 static/idn-api/beta/schemas/MfaRegistrationResponse.yaml create mode 100644 static/idn-api/beta/schemas/MfaResetRequest.yaml create mode 100644 static/idn-api/beta/schemas/MfaVerificationResponse.yaml create mode 100644 static/idn-api/beta/schemas/MultiPolicyRequest.yaml create mode 100644 static/idn-api/beta/schemas/NetworkConfiguration.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeApprovalDecision.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeApprovalItem.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeApprovalItemBase.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeApprovalItemDetail.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeApprovalSummary.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeBulkUploadJob.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeBulkUploadStatus.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeIdnUserRequest.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeRecord.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeRejectApprovalDecision.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeRequest.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeRequestBody.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeRequestLite.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeRequestSummary.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeRequestWithoutApprovalItem.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeSchemaAttribute.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeSchemaAttributeBody.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeSchemaAttributeType.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeSource.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeSourceLite.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeSourceLiteWithSchemaAttributes.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeSourceRequestBody.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeSourceWithCloudExternalId.yaml create mode 100644 static/idn-api/beta/schemas/NonEmployeeSourceWithNECount.yaml create mode 100644 static/idn-api/beta/schemas/NotificationTemplateContext.yaml create mode 100644 static/idn-api/beta/schemas/ObjectExportImportOptions.yaml create mode 100644 static/idn-api/beta/schemas/ObjectImportResult.yaml create mode 100644 static/idn-api/beta/schemas/Operation.yaml create mode 100644 static/idn-api/beta/schemas/OrgConfig.yaml create mode 100644 static/idn-api/beta/schemas/OrgConfiguration.yaml create mode 100644 static/idn-api/beta/schemas/Outlier.yaml create mode 100644 static/idn-api/beta/schemas/OutlierReference.yaml create mode 100644 static/idn-api/beta/schemas/OutlierSummary.yaml create mode 100644 static/idn-api/beta/schemas/OutliersBulkDetectionRequest.yaml create mode 100644 static/idn-api/beta/schemas/OwnerResponse.yaml create mode 100644 static/idn-api/beta/schemas/PasswordChangeRequest.yaml create mode 100644 static/idn-api/beta/schemas/PasswordChangeResponse.yaml create mode 100644 static/idn-api/beta/schemas/PasswordDigitToken.yaml create mode 100644 static/idn-api/beta/schemas/PasswordDigitTokenReset.yaml create mode 100644 static/idn-api/beta/schemas/PasswordInfo.yaml create mode 100644 static/idn-api/beta/schemas/PasswordInfoAccount.yaml create mode 100644 static/idn-api/beta/schemas/PasswordInfoQueryDTO.yaml create mode 100644 static/idn-api/beta/schemas/PasswordOrgConfig.yaml create mode 100644 static/idn-api/beta/schemas/PasswordStatus.yaml create mode 100644 static/idn-api/beta/schemas/PasswordSyncGroup.yaml create mode 100644 static/idn-api/beta/schemas/PasswordUpdateRequest.yaml create mode 100644 static/idn-api/beta/schemas/PeerGroupMember.yaml create mode 100644 static/idn-api/beta/schemas/PendingApproval.yaml create mode 100644 static/idn-api/beta/schemas/PendingApprovalAction.yaml create mode 100644 static/idn-api/beta/schemas/PermissionDto.yaml create mode 100644 static/idn-api/beta/schemas/PreferencesDto.yaml create mode 100644 static/idn-api/beta/schemas/ProvisioningConfig.yaml create mode 100644 static/idn-api/beta/schemas/PublicIdentityAttributeConfig.yaml create mode 100644 static/idn-api/beta/schemas/PublicIdentityConfig.yaml create mode 100644 static/idn-api/beta/schemas/QueuedCheckConfigDetails.yaml create mode 100644 static/idn-api/beta/schemas/Reassignment.yaml create mode 100644 static/idn-api/beta/schemas/RecommendationConfigDto.yaml create mode 100644 static/idn-api/beta/schemas/RecommendationRequest.yaml create mode 100644 static/idn-api/beta/schemas/RecommendationRequestDto.yaml create mode 100644 static/idn-api/beta/schemas/RecommendationResponse.yaml create mode 100644 static/idn-api/beta/schemas/RecommendationResponseDto.yaml create mode 100644 static/idn-api/beta/schemas/RecommenderCalculations.yaml create mode 100644 static/idn-api/beta/schemas/RemediationItemDetails.yaml create mode 100644 static/idn-api/beta/schemas/ReportConfigDTO.yaml create mode 100644 static/idn-api/beta/schemas/ReportResultReference.yaml create mode 100644 static/idn-api/beta/schemas/ReportType.yaml create mode 100644 static/idn-api/beta/schemas/RequestableObjectReference.yaml create mode 100644 static/idn-api/beta/schemas/ResourceBundleMessage.yaml create mode 100644 static/idn-api/beta/schemas/ResourceObject.yaml create mode 100644 static/idn-api/beta/schemas/ResourceObjectsRequest.yaml create mode 100644 static/idn-api/beta/schemas/ResourceObjectsResponse.yaml create mode 100644 static/idn-api/beta/schemas/ResponseMode.yaml create mode 100644 static/idn-api/beta/schemas/ReviewData.yaml create mode 100644 static/idn-api/beta/schemas/ReviewItem.yaml create mode 100644 static/idn-api/beta/schemas/ReviewItemActivity.yaml create mode 100644 static/idn-api/beta/schemas/ReviewItemsActivityTask.yaml create mode 100644 static/idn-api/beta/schemas/Reviewer.yaml create mode 100644 static/idn-api/beta/schemas/RoleInsight.yaml create mode 100644 static/idn-api/beta/schemas/RoleInsightsEntitlement.yaml create mode 100644 static/idn-api/beta/schemas/RoleInsightsEntitlementChanges.yaml create mode 100644 static/idn-api/beta/schemas/RoleInsightsIdentities.yaml create mode 100644 static/idn-api/beta/schemas/RoleInsightsInsight.yaml create mode 100644 static/idn-api/beta/schemas/RoleInsightsResponse.yaml create mode 100644 static/idn-api/beta/schemas/RoleInsightsRole.yaml create mode 100644 static/idn-api/beta/schemas/RoleInsightsSummary.yaml create mode 100644 static/idn-api/beta/schemas/RoleMiningEntitlement.yaml create mode 100644 static/idn-api/beta/schemas/RoleMiningEntitlementRef.yaml create mode 100644 static/idn-api/beta/schemas/RoleMiningIdentity.yaml create mode 100644 static/idn-api/beta/schemas/RoleMiningIdentityDistribution.yaml create mode 100644 static/idn-api/beta/schemas/RoleMiningPotentialRole.yaml create mode 100644 static/idn-api/beta/schemas/RoleMiningPotentialRoleApplication.yaml create mode 100644 static/idn-api/beta/schemas/RoleMiningPotentialRoleEditEntitlements.yaml create mode 100644 static/idn-api/beta/schemas/RoleMiningPotentialRoleExportRequest.yaml create mode 100644 static/idn-api/beta/schemas/RoleMiningPotentialRoleExportResponse.yaml create mode 100644 static/idn-api/beta/schemas/RoleMiningPotentialRoleExportState.yaml create mode 100644 static/idn-api/beta/schemas/RoleMiningPotentialRoleProvisionRequest.yaml create mode 100644 static/idn-api/beta/schemas/RoleMiningPotentialRoleProvisionState.yaml create mode 100644 static/idn-api/beta/schemas/RoleMiningPotentialRoleRef.yaml create mode 100644 static/idn-api/beta/schemas/RoleMiningPotentialRoleSummary.yaml create mode 100644 static/idn-api/beta/schemas/RoleMiningPotentialRoleSummaryDistribution.yaml create mode 100644 static/idn-api/beta/schemas/RoleMiningSessionDto.yaml create mode 100644 static/idn-api/beta/schemas/RoleMiningSessionResponse.yaml create mode 100644 static/idn-api/beta/schemas/RoleMiningSessionScope.yaml create mode 100644 static/idn-api/beta/schemas/RoleMiningSessionStatus.yaml create mode 100644 static/idn-api/beta/schemas/RuleReference.yaml create mode 100644 static/idn-api/beta/schemas/SaasManagementApplication.yaml create mode 100644 static/idn-api/beta/schemas/SaasManagementApplicationMap.yaml create mode 100644 static/idn-api/beta/schemas/Schedule.yaml create mode 100644 static/idn-api/beta/schemas/ScheduledAction.yaml create mode 100644 static/idn-api/beta/schemas/Schema.yaml create mode 100644 static/idn-api/beta/schemas/ScriptConfig.yaml create mode 100644 static/idn-api/beta/schemas/SearchAttributeConfig.yaml create mode 100644 static/idn-api/beta/schemas/SectionDetails.yaml create mode 100644 static/idn-api/beta/schemas/Segment.yaml create mode 100644 static/idn-api/beta/schemas/SegmentChangeAssignments.yaml create mode 100644 static/idn-api/beta/schemas/SendTestNotificationRequestDto.yaml create mode 100644 static/idn-api/beta/schemas/ServiceDeskIntegrationDto.yaml create mode 100644 static/idn-api/beta/schemas/ServiceDeskIntegrationTemplateDto.yaml create mode 100644 static/idn-api/beta/schemas/ServiceDeskIntegrationTemplateType.yaml create mode 100644 static/idn-api/beta/schemas/ServiceProviderConfiguration.yaml create mode 100644 static/idn-api/beta/schemas/ServiceRequest.yaml create mode 100644 static/idn-api/beta/schemas/ServiceRequestProvision.yaml create mode 100644 static/idn-api/beta/schemas/SessionConfiguration.yaml create mode 100644 static/idn-api/beta/schemas/SetEncryptionKeysData.yaml create mode 100644 static/idn-api/beta/schemas/SlimAccount.yaml create mode 100644 static/idn-api/beta/schemas/SlimCampaign.yaml create mode 100644 static/idn-api/beta/schemas/SodExemptCriteria.yaml create mode 100644 static/idn-api/beta/schemas/SodPolicy.yaml create mode 100644 static/idn-api/beta/schemas/SodPolicySchedule.yaml create mode 100644 static/idn-api/beta/schemas/SodViolationCheck.yaml create mode 100644 static/idn-api/beta/schemas/SodViolationCheckResult.yaml create mode 100644 static/idn-api/beta/schemas/SodViolationContext.yaml create mode 100644 static/idn-api/beta/schemas/SodViolationContextCheckCompleted.yaml create mode 100644 static/idn-api/beta/schemas/Source.yaml create mode 100644 static/idn-api/beta/schemas/SourceCode.yaml create mode 100644 static/idn-api/beta/schemas/SourceFeature.yaml create mode 100644 static/idn-api/beta/schemas/SourceSyncJob.yaml create mode 100644 static/idn-api/beta/schemas/SourceSyncPayload.yaml create mode 100644 static/idn-api/beta/schemas/SpConfigExportResults.yaml create mode 100644 static/idn-api/beta/schemas/SpConfigImportResults.yaml create mode 100644 static/idn-api/beta/schemas/SpConfigJob.yaml create mode 100644 static/idn-api/beta/schemas/SpConfigMessage.yaml create mode 100644 static/idn-api/beta/schemas/SpConfigObject.yaml create mode 100644 static/idn-api/beta/schemas/SpConfigUrl.yaml create mode 100644 static/idn-api/beta/schemas/SpDetails.yaml create mode 100644 static/idn-api/beta/schemas/StandardLevel.yaml create mode 100644 static/idn-api/beta/schemas/StartInvocationInput.yaml create mode 100644 static/idn-api/beta/schemas/StatusChange.yaml create mode 100644 static/idn-api/beta/schemas/StatusResponse.yaml create mode 100644 static/idn-api/beta/schemas/Subscription.yaml create mode 100644 static/idn-api/beta/schemas/SubscriptionInternal.yaml create mode 100644 static/idn-api/beta/schemas/SubscriptionPatchRequest.yaml create mode 100644 static/idn-api/beta/schemas/SubscriptionPostRequest.yaml create mode 100644 static/idn-api/beta/schemas/SubscriptionPutRequest.yaml create mode 100644 static/idn-api/beta/schemas/SubscriptionType.yaml create mode 100644 static/idn-api/beta/schemas/SyncPasswordRequest.yaml create mode 100644 static/idn-api/beta/schemas/Tag.yaml create mode 100644 static/idn-api/beta/schemas/TaggedObject.yaml create mode 100644 static/idn-api/beta/schemas/TargetSummary.yaml create mode 100644 static/idn-api/beta/schemas/TaskDefinitionSummary.yaml create mode 100644 static/idn-api/beta/schemas/TaskInvocation.yaml create mode 100644 static/idn-api/beta/schemas/TaskReturnDetails.yaml create mode 100644 static/idn-api/beta/schemas/TaskStatus.yaml create mode 100644 static/idn-api/beta/schemas/TaskStatusMessage.yaml create mode 100644 static/idn-api/beta/schemas/TeamSummaryDto.yaml create mode 100644 static/idn-api/beta/schemas/TeamSummaryReportsDto.yaml create mode 100644 static/idn-api/beta/schemas/TemplateBulkDeleteDto.yaml create mode 100644 static/idn-api/beta/schemas/TemplateDto.yaml create mode 100644 static/idn-api/beta/schemas/TemplateDtoDefault.yaml create mode 100644 static/idn-api/beta/schemas/TestInvocation.yaml create mode 100644 static/idn-api/beta/schemas/TicketType.yaml create mode 100644 static/idn-api/beta/schemas/TotpCodeRequest.yaml create mode 100644 static/idn-api/beta/schemas/Transform.yaml create mode 100644 static/idn-api/beta/schemas/TransformDefinition.yaml create mode 100644 static/idn-api/beta/schemas/TranslationMessage.yaml create mode 100644 static/idn-api/beta/schemas/Trigger.yaml create mode 100644 static/idn-api/beta/schemas/TriggerType.yaml create mode 100644 static/idn-api/beta/schemas/V3ConnectorDto.yaml create mode 100644 static/idn-api/beta/schemas/VaJob.yaml create mode 100644 static/idn-api/beta/schemas/ValidateFilterInputDto.yaml create mode 100644 static/idn-api/beta/schemas/ValidateFilterOutputDto.yaml create mode 100644 static/idn-api/beta/schemas/Value.yaml create mode 100644 static/idn-api/beta/schemas/ViolationOwnerAssignmentConfig.yaml create mode 100644 static/idn-api/beta/schemas/VisibilityCriteria.yaml create mode 100644 static/idn-api/beta/schemas/WorkItems.yaml create mode 100644 static/idn-api/beta/schemas/WorkItemsCount.yaml create mode 100644 static/idn-api/beta/schemas/WorkItemsSummary.yaml create mode 100644 static/idn-api/beta/schemas/Workflow.yaml create mode 100644 static/idn-api/beta/schemas/WorkflowBody.yaml create mode 100644 static/idn-api/beta/schemas/WorkflowDefinition.yaml create mode 100644 static/idn-api/beta/schemas/WorkflowExecution.yaml create mode 100644 static/idn-api/beta/schemas/WorkflowExecutionEvent.yaml create mode 100644 static/idn-api/beta/schemas/WorkflowLibraryAction.yaml create mode 100644 static/idn-api/beta/schemas/WorkflowLibraryFormFields.yaml create mode 100644 static/idn-api/beta/schemas/WorkflowLibraryOperator.yaml create mode 100644 static/idn-api/beta/schemas/WorkflowLibraryTrigger.yaml create mode 100644 static/idn-api/beta/schemas/WorkflowOAuthClient.yaml create mode 100644 static/idn-api/beta/schemas/WorkflowReference.yaml create mode 100644 static/idn-api/beta/schemas/WorkflowTrigger.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/CampaignTemplateManager.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/CampaignTemplateRoleComposition.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/CampaignTemplateSearch.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/CampaignTemplateSourceOwner.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/CampaignTemplates.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/CreateCampaignManager.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/CreateCampaignRoleComposition.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/CreateCampaignSearch.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/CreateCampaignSourceOwner.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/CreateCampaignTemplateManager.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/CreateCampaignTemplateRoleComposition.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/CreateCampaignTemplateSearch.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/CreateCampaignTemplateSourceOwner.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/FullCampaignManager.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/FullCampaignRoleComposition.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/FullCampaignSearch.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/FullCampaignSourceOwner.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/FullCampaigns.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/SlimCampaignManager.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/SlimCampaignRoleComposition.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/SlimCampaignSearch.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/SlimCampaignSourceOwner.yaml create mode 100644 static/idn-api/beta/schemas/campaign/examples/SlimCampaigns.yaml create mode 100644 static/idn-api/beta/schemas/iai/EntityCreatedByDTO.yaml create mode 100644 static/idn-api/beta/schemas/iai/RoleMiningRoleType.yaml create mode 100644 static/idn-api/beta/schemas/sod/examples/exception-body-bulk.yaml create mode 100644 static/idn-api/beta/schemas/sod/examples/exception-body-patch.yaml create mode 100644 static/idn-api/beta/schemas/sod/examples/exception-body.yaml create mode 100644 static/idn-api/beta/schemas/sod/examples/exception-response-bulk.yaml create mode 100644 static/idn-api/beta/schemas/sod/examples/exception-response.yaml create mode 100644 static/idn-api/beta/schemas/sod/models/ArmRisk.yaml create mode 100644 static/idn-api/beta/schemas/sod/models/BulkCreate.yaml create mode 100644 static/idn-api/beta/schemas/sod/models/Exception.yaml create mode 100644 static/idn-api/beta/schemas/sod/models/ExceptionAccessCriteria.yaml create mode 100644 static/idn-api/beta/schemas/sod/models/ExceptionCriteria.yaml create mode 100644 static/idn-api/beta/schemas/sod/models/ExceptionCriteriaAccess.yaml create mode 100644 static/idn-api/beta/schemas/sod/models/ExceptionList.yaml create mode 100644 static/idn-api/beta/schemas/sod/models/IdentityWithNewAccess.yaml create mode 100644 static/idn-api/beta/schemas/sod/models/ViolationContext.yaml create mode 100644 static/idn-api/beta/schemas/sod/models/ViolationPrediction.yaml create mode 100644 static/idn-api/beta/schemas/sod/responses/200-list.yaml create mode 100644 static/idn-api/beta/schemas/sod/responses/200-patch.yaml create mode 100644 static/idn-api/beta/schemas/sod/responses/200.yaml create mode 100644 static/idn-api/beta/schemas/sod/responses/201.yaml create mode 100644 static/idn-api/beta/schemas/sod/responses/202.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/AccessRequestDynamicApprover.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/AccessRequestPostApproval.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/AccessRequestPreApproval.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/AccountAggregationCompleted.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/AccountAttributesChanged.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/AccountCorrelated.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/AccountUncorrelated.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/AccountsCollectedForAggregation.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/CampaignActivated.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/CampaignEnded.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/CampaignGenerated.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/CertificationSignedOff.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/IdentityAttributesChanged.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/IdentityCreated.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/IdentityDeleted.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/ProvisioningCompleted.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/SavedSearchComplete.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/SourceAccount.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/SourceAccountCreated.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/SourceAccountDeleted.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/SourceAccountUpdated.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/SourceCreated.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/SourceDeleted.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/SourceUpdated.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-input/VAClusterStatusChangeEvent.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-output/AccessRequestDynamicApprover.yaml create mode 100644 static/idn-api/beta/schemas/trigger/example-output/AccessRequestPreApproval.yaml create mode 100644 static/idn-api/beta/schemas/workflows/trigger-attributes/EventAttributes.yaml create mode 100644 static/idn-api/beta/schemas/workflows/trigger-attributes/ExternalAttributes.yaml create mode 100644 static/idn-api/beta/schemas/workflows/trigger-attributes/ScheduledAttributes.yaml create mode 100644 static/idn-api/beta/securitySchemes/OAuth2.yaml create mode 100644 static/idn-api/sailpoint-api.beta.yaml create mode 100644 static/idn-api/sailpoint-api.internal.beta.yaml create mode 100644 static/idn-api/sailpoint-api.v3.yaml create mode 100644 static/idn-api/v3/ServiceDeskIntegrations-v3.1.0-oas3-swagger.yaml create mode 100644 static/idn-api/v3/parameters/count.yaml create mode 100644 static/idn-api/v3/parameters/limit.yaml create mode 100644 static/idn-api/v3/parameters/limit50.yaml create mode 100644 static/idn-api/v3/parameters/offset.yaml create mode 100644 static/idn-api/v3/parameters/path/search/id.yaml create mode 100644 static/idn-api/v3/parameters/path/search/index.yaml create mode 100644 static/idn-api/v3/paths/.gitignore create mode 100644 static/idn-api/v3/paths/access-request-approval-summary.yaml create mode 100644 static/idn-api/v3/paths/access-request-cancel.yaml create mode 100644 static/idn-api/v3/paths/access-request-config.yaml create mode 100644 static/idn-api/v3/paths/access-request-status.yaml create mode 100644 static/idn-api/v3/paths/access-requests.yaml create mode 100644 static/idn-api/v3/paths/account-activities.yaml create mode 100644 static/idn-api/v3/paths/account-activity-get-one.yaml create mode 100644 static/idn-api/v3/paths/account-activity-list.yaml create mode 100644 static/idn-api/v3/paths/account.yaml create mode 100644 static/idn-api/v3/paths/accounts-id-disable.yaml create mode 100644 static/idn-api/v3/paths/accounts-id-enable.yaml create mode 100644 static/idn-api/v3/paths/accounts-id-entitlements.yaml create mode 100644 static/idn-api/v3/paths/accounts-id-reload.yaml create mode 100644 static/idn-api/v3/paths/accounts-id-unlock.yaml create mode 100644 static/idn-api/v3/paths/accounts.yaml create mode 100644 static/idn-api/v3/paths/approve-access-request-approval.yaml create mode 100644 static/idn-api/v3/paths/completed-access-request-approvals.yaml create mode 100644 static/idn-api/v3/paths/forward-access-request-approval.yaml create mode 100644 static/idn-api/v3/paths/identity-certification.yaml create mode 100644 static/idn-api/v3/paths/identity-certifications-access-review-items.yaml create mode 100644 static/idn-api/v3/paths/identity-certifications-access-summaries.yaml create mode 100644 static/idn-api/v3/paths/identity-certifications-decide.yaml create mode 100644 static/idn-api/v3/paths/identity-certifications-decision-summary.yaml create mode 100644 static/idn-api/v3/paths/identity-certifications-identity-summaries.yaml create mode 100644 static/idn-api/v3/paths/identity-certifications-identity-summary.yaml create mode 100644 static/idn-api/v3/paths/identity-certifications-reassign.yaml create mode 100644 static/idn-api/v3/paths/identity-certifications-sign-off.yaml create mode 100644 static/idn-api/v3/paths/identity-certifications.yaml create mode 100644 static/idn-api/v3/paths/identity-profile-default-config.yaml create mode 100644 static/idn-api/v3/paths/identity-profile-lifecycle-state.yaml create mode 100644 static/idn-api/v3/paths/identity-profile-lifecycle-states.yaml create mode 100644 static/idn-api/v3/paths/identity-profile.yaml create mode 100644 static/idn-api/v3/paths/identity-profiles-export.yaml create mode 100644 static/idn-api/v3/paths/identity-profiles-import.yaml create mode 100644 static/idn-api/v3/paths/identity-profiles.yaml create mode 100644 static/idn-api/v3/paths/identity-set-lifecycle-state.yaml create mode 100644 static/idn-api/v3/paths/non-employee-approval-list.yaml create mode 100644 static/idn-api/v3/paths/non-employee-approval-summary.yaml create mode 100644 static/idn-api/v3/paths/non-employee-approve-get.yaml create mode 100644 static/idn-api/v3/paths/non-employee-approve-request.yaml create mode 100644 static/idn-api/v3/paths/non-employee-bulk-upload-jobs-fail.yaml create mode 100644 static/idn-api/v3/paths/non-employee-record.yaml create mode 100644 static/idn-api/v3/paths/non-employee-records-bulk-delete.yaml create mode 100644 static/idn-api/v3/paths/non-employee-records.yaml create mode 100644 static/idn-api/v3/paths/non-employee-reject-request.yaml create mode 100644 static/idn-api/v3/paths/non-employee-request-summary-get.yaml create mode 100644 static/idn-api/v3/paths/non-employee-request.yaml create mode 100644 static/idn-api/v3/paths/non-employee-requests.yaml create mode 100644 static/idn-api/v3/paths/non-employee-source-aggregate.yaml create mode 100644 static/idn-api/v3/paths/non-employee-source.yaml create mode 100644 static/idn-api/v3/paths/non-employee-sources-bulk-upload-details.yaml create mode 100644 static/idn-api/v3/paths/non-employee-sources-bulk-upload-non-employees.yaml create mode 100644 static/idn-api/v3/paths/non-employee-sources-bulk-upload-status.yaml create mode 100644 static/idn-api/v3/paths/non-employee-sources-export-non-employees.yaml create mode 100644 static/idn-api/v3/paths/non-employee-sources-export-schema-attributes-template.yaml create mode 100644 static/idn-api/v3/paths/non-employee-sources-schema-attribute.yaml create mode 100644 static/idn-api/v3/paths/non-employee-sources-schema-attributes.yaml create mode 100644 static/idn-api/v3/paths/non-employee-sources.yaml create mode 100644 static/idn-api/v3/paths/oauth-client.yaml create mode 100644 static/idn-api/v3/paths/oauth-clients.yaml create mode 100644 static/idn-api/v3/paths/password-change-status.yaml create mode 100644 static/idn-api/v3/paths/pending-access-request-approvals.yaml create mode 100644 static/idn-api/v3/paths/personal-access-token.yaml create mode 100644 static/idn-api/v3/paths/personal-access-tokens.yaml create mode 100644 static/idn-api/v3/paths/provisioning-policies-bulk-update.yaml create mode 100644 static/idn-api/v3/paths/provisioning-policies.yaml create mode 100644 static/idn-api/v3/paths/provisioning-policy.yaml create mode 100644 static/idn-api/v3/paths/public-identities-config.yaml create mode 100644 static/idn-api/v3/paths/public-identities.yaml create mode 100644 static/idn-api/v3/paths/query-password-info.yaml create mode 100644 static/idn-api/v3/paths/reject-access-request-approval.yaml create mode 100644 static/idn-api/v3/paths/requestable-object-list.yaml create mode 100644 static/idn-api/v3/paths/saved-searches-execute.yaml create mode 100644 static/idn-api/v3/paths/saved-searches-id.yaml create mode 100644 static/idn-api/v3/paths/saved-searches.yaml create mode 100644 static/idn-api/v3/paths/scheduled-searches-id.yaml create mode 100644 static/idn-api/v3/paths/scheduled-searches-unsubscribe.yaml create mode 100644 static/idn-api/v3/paths/scheduled-searches.yaml create mode 100644 static/idn-api/v3/paths/schema.yaml create mode 100644 static/idn-api/v3/paths/schemas.yaml create mode 100644 static/idn-api/v3/paths/search-aggregate.yaml create mode 100644 static/idn-api/v3/paths/search-count.yaml create mode 100644 static/idn-api/v3/paths/search-get.yaml create mode 100644 static/idn-api/v3/paths/search-post.yaml create mode 100644 static/idn-api/v3/paths/service-desk-integration-configuration.yaml create mode 100644 static/idn-api/v3/paths/service-desk-integration-template.yaml create mode 100644 static/idn-api/v3/paths/service-desk-integration-types.yaml create mode 100644 static/idn-api/v3/paths/service-desk-integration.yaml create mode 100644 static/idn-api/v3/paths/service-desk-integrations.yaml create mode 100644 static/idn-api/v3/paths/set-password.yaml create mode 100644 static/idn-api/v3/paths/source-accounts-schema.yaml create mode 100644 static/idn-api/v3/paths/source-entitlements-schema.yaml create mode 100644 static/idn-api/v3/paths/source-health.yaml create mode 100644 static/idn-api/v3/paths/source-upload-connector-file.yaml create mode 100644 static/idn-api/v3/paths/source.yaml create mode 100644 static/idn-api/v3/paths/sources.yaml create mode 100644 static/idn-api/v3/paths/transform.yaml create mode 100644 static/idn-api/v3/paths/transforms.yaml create mode 100644 static/idn-api/v3/paths/work-item.yaml create mode 100644 static/idn-api/v3/paths/work-items-account-selection.yaml create mode 100644 static/idn-api/v3/paths/work-items-approve-approval-item.yaml create mode 100644 static/idn-api/v3/paths/work-items-bulk-approve-approval-item.yaml create mode 100644 static/idn-api/v3/paths/work-items-bulk-reject-approval-item.yaml create mode 100644 static/idn-api/v3/paths/work-items-completed-count.yaml create mode 100644 static/idn-api/v3/paths/work-items-completed.yaml create mode 100644 static/idn-api/v3/paths/work-items-count.yaml create mode 100644 static/idn-api/v3/paths/work-items-reject-approval-item.yaml create mode 100644 static/idn-api/v3/paths/work-items-summary.yaml create mode 100644 static/idn-api/v3/paths/work-items.yaml create mode 100644 static/idn-api/v3/responses/202.yaml create mode 100644 static/idn-api/v3/responses/204.yaml create mode 100644 static/idn-api/v3/responses/400.yaml create mode 100644 static/idn-api/v3/responses/401.yaml create mode 100644 static/idn-api/v3/responses/403.yaml create mode 100644 static/idn-api/v3/responses/404.yaml create mode 100644 static/idn-api/v3/responses/429.yaml create mode 100644 static/idn-api/v3/responses/500.yaml create mode 100644 static/idn-api/v3/schemas/AccessRequest.yaml create mode 100644 static/idn-api/v3/schemas/AccessRequestConfig.yaml create mode 100644 static/idn-api/v3/schemas/AccessRequestItem.yaml create mode 100644 static/idn-api/v3/schemas/AccessRequestPhases.yaml create mode 100644 static/idn-api/v3/schemas/AccessRequestType.yaml create mode 100644 static/idn-api/v3/schemas/AccessReviewItem.yaml create mode 100644 static/idn-api/v3/schemas/AccessSummary.yaml create mode 100644 static/idn-api/v3/schemas/AccessType.yaml create mode 100644 static/idn-api/v3/schemas/Account.yaml create mode 100644 static/idn-api/v3/schemas/AccountAction.yaml create mode 100644 static/idn-api/v3/schemas/AccountActivity.yaml create mode 100644 static/idn-api/v3/schemas/AccountActivityItem.yaml create mode 100644 static/idn-api/v3/schemas/AccountActivityItemOperation.yaml create mode 100644 static/idn-api/v3/schemas/AccountAttributes.yaml create mode 100644 static/idn-api/v3/schemas/AccountAttributesCreate.yaml create mode 100644 static/idn-api/v3/schemas/AccountRequestInfo.yaml create mode 100644 static/idn-api/v3/schemas/AccountToggleRequest.yaml create mode 100644 static/idn-api/v3/schemas/AccountUnlockRequest.yaml create mode 100644 static/idn-api/v3/schemas/AccountsAsyncResult.yaml create mode 100644 static/idn-api/v3/schemas/ApprovalForwardHistory.yaml create mode 100644 static/idn-api/v3/schemas/ApprovalItemDetails.yaml create mode 100644 static/idn-api/v3/schemas/ApprovalReminderAndEscalationConfig.yaml create mode 100644 static/idn-api/v3/schemas/ApprovalScheme.yaml create mode 100644 static/idn-api/v3/schemas/ApprovalStatusDto.yaml create mode 100644 static/idn-api/v3/schemas/ApprovalSummary.yaml create mode 100644 static/idn-api/v3/schemas/AttributeDefinition.yaml create mode 100644 static/idn-api/v3/schemas/AttributeDefinitionType.yaml create mode 100644 static/idn-api/v3/schemas/BareReference.yaml create mode 100644 static/idn-api/v3/schemas/BaseCommonDto.yaml create mode 100644 static/idn-api/v3/schemas/BaseReferenceDto.yaml create mode 100644 static/idn-api/v3/schemas/CampaignReference.yaml create mode 100644 static/idn-api/v3/schemas/CancelAccessRequest.yaml create mode 100644 static/idn-api/v3/schemas/CancelledRequestDetails.yaml create mode 100644 static/idn-api/v3/schemas/CertificationDecision.yaml create mode 100644 static/idn-api/v3/schemas/CertificationIdentitySummary.yaml create mode 100644 static/idn-api/v3/schemas/CertificationPhase.yaml create mode 100644 static/idn-api/v3/schemas/CertificationReference.yaml create mode 100644 static/idn-api/v3/schemas/ClientType.yaml create mode 100644 static/idn-api/v3/schemas/Comment.yaml create mode 100644 static/idn-api/v3/schemas/CommentDto.yaml create mode 100644 static/idn-api/v3/schemas/CompletedApproval.yaml create mode 100644 static/idn-api/v3/schemas/CompletedApprovalState.yaml create mode 100644 static/idn-api/v3/schemas/CompletionStatus.yaml create mode 100644 static/idn-api/v3/schemas/CreateOAuthClientRequest.yaml create mode 100644 static/idn-api/v3/schemas/CreateOAuthClientResponse.yaml create mode 100644 static/idn-api/v3/schemas/CreatePersonalAccessTokenRequest.yaml create mode 100644 static/idn-api/v3/schemas/CreatePersonalAccessTokenResponse.yaml create mode 100644 static/idn-api/v3/schemas/DtoType.yaml create mode 100644 static/idn-api/v3/schemas/EmailNotificationOption.yaml create mode 100644 static/idn-api/v3/schemas/EntitlementDto.yaml create mode 100644 static/idn-api/v3/schemas/EntitlementRequestConfig.yaml create mode 100644 static/idn-api/v3/schemas/ErrorMessageDto.yaml create mode 100644 static/idn-api/v3/schemas/ErrorMessageDtoList.yaml create mode 100644 static/idn-api/v3/schemas/ErrorResponseDto.yaml create mode 100644 static/idn-api/v3/schemas/ExecutionStatus.yaml create mode 100644 static/idn-api/v3/schemas/FieldDetailsDto.yaml create mode 100644 static/idn-api/v3/schemas/FormDetails.yaml create mode 100644 static/idn-api/v3/schemas/FormItemDetails.yaml create mode 100644 static/idn-api/v3/schemas/ForwardApprovalDto.yaml create mode 100644 static/idn-api/v3/schemas/GetOAuthClientResponse.yaml create mode 100644 static/idn-api/v3/schemas/GetPersonalAccessTokenResponse.yaml create mode 100644 static/idn-api/v3/schemas/GrantType.yaml create mode 100644 static/idn-api/v3/schemas/IdentityAttribute.yaml create mode 100644 static/idn-api/v3/schemas/IdentityAttributeConfig.yaml create mode 100644 static/idn-api/v3/schemas/IdentityAttributePreview.yaml create mode 100644 static/idn-api/v3/schemas/IdentityAttributeTransform.yaml create mode 100644 static/idn-api/v3/schemas/IdentityCertDecisionSummary.yaml create mode 100644 static/idn-api/v3/schemas/IdentityCertificationDto.yaml create mode 100644 static/idn-api/v3/schemas/IdentityExceptionReportReference.yaml create mode 100644 static/idn-api/v3/schemas/IdentityPreviewRequest.yaml create mode 100644 static/idn-api/v3/schemas/IdentityPreviewResponse.yaml create mode 100644 static/idn-api/v3/schemas/IdentityProfile.yaml create mode 100644 static/idn-api/v3/schemas/IdentityProfileExportedObject.yaml create mode 100644 static/idn-api/v3/schemas/IdentityReference.yaml create mode 100644 static/idn-api/v3/schemas/IdentityReferenceWithNameAndEmail.yaml create mode 100644 static/idn-api/v3/schemas/IdentitySummary.yaml create mode 100644 static/idn-api/v3/schemas/JsonPatch.yaml create mode 100644 static/idn-api/v3/schemas/JsonPatchOperation.yaml create mode 100644 static/idn-api/v3/schemas/LifecycleState.yaml create mode 100644 static/idn-api/v3/schemas/LocaleOrigin.yaml create mode 100644 static/idn-api/v3/schemas/ManagerCorrelationMapping.yaml create mode 100644 static/idn-api/v3/schemas/ManualWorkItemDetails.yaml create mode 100644 static/idn-api/v3/schemas/ManualWorkItemState.yaml create mode 100644 static/idn-api/v3/schemas/ObjectImportResult.yaml create mode 100644 static/idn-api/v3/schemas/PasswordChangeRequest.yaml create mode 100644 static/idn-api/v3/schemas/PasswordChangeResponse.yaml create mode 100644 static/idn-api/v3/schemas/PasswordInfo.yaml create mode 100644 static/idn-api/v3/schemas/PasswordInfoAccount.yaml create mode 100644 static/idn-api/v3/schemas/PasswordInfoQueryDTO.yaml create mode 100644 static/idn-api/v3/schemas/PasswordStatus.yaml create mode 100644 static/idn-api/v3/schemas/PendingApproval.yaml create mode 100644 static/idn-api/v3/schemas/PendingApprovalAction.yaml create mode 100644 static/idn-api/v3/schemas/PreApprovalTriggerDetails.yaml create mode 100644 static/idn-api/v3/schemas/ProvisioningConfig.yaml create mode 100644 static/idn-api/v3/schemas/ProvisioningDetails.yaml create mode 100644 static/idn-api/v3/schemas/ProvisioningPolicyDto.yaml create mode 100644 static/idn-api/v3/schemas/ProvisioningState.yaml create mode 100644 static/idn-api/v3/schemas/PublicIdentity.yaml create mode 100644 static/idn-api/v3/schemas/PublicIdentityAttributeConfig.yaml create mode 100644 static/idn-api/v3/schemas/PublicIdentityConfig.yaml create mode 100644 static/idn-api/v3/schemas/QueuedCheckConfigDetails.yaml create mode 100644 static/idn-api/v3/schemas/ReassignReference.yaml create mode 100644 static/idn-api/v3/schemas/Reassignment.yaml create mode 100644 static/idn-api/v3/schemas/RemediationItemDetails.yaml create mode 100644 static/idn-api/v3/schemas/RequestOnBehalfOfConfig.yaml create mode 100644 static/idn-api/v3/schemas/RequestableObject.yaml create mode 100644 static/idn-api/v3/schemas/RequestableObjectReference.yaml create mode 100644 static/idn-api/v3/schemas/RequestableObjectRequestStatus.yaml create mode 100644 static/idn-api/v3/schemas/RequestableObjectType.yaml create mode 100644 static/idn-api/v3/schemas/RequestedItemStatus.yaml create mode 100644 static/idn-api/v3/schemas/RequestedItemStatusRequestState.yaml create mode 100644 static/idn-api/v3/schemas/Response.yaml create mode 100644 static/idn-api/v3/schemas/ReviewDecision.yaml create mode 100644 static/idn-api/v3/schemas/ReviewReassign.yaml create mode 100644 static/idn-api/v3/schemas/ReviewRecommendation.yaml create mode 100644 static/idn-api/v3/schemas/Reviewer.yaml create mode 100644 static/idn-api/v3/schemas/Schema.yaml create mode 100644 static/idn-api/v3/schemas/SectionDetails.yaml create mode 100644 static/idn-api/v3/schemas/ServiceDeskIntegrationDto.yaml create mode 100644 static/idn-api/v3/schemas/ServiceDeskIntegrationTemplateDto.yaml create mode 100644 static/idn-api/v3/schemas/ServiceDeskIntegrationTemplateType.yaml create mode 100644 static/idn-api/v3/schemas/SodExemptCriteria.yaml create mode 100644 static/idn-api/v3/schemas/SodViolationCheck.yaml create mode 100644 static/idn-api/v3/schemas/SodViolationCheckResult.yaml create mode 100644 static/idn-api/v3/schemas/SodViolationContext.yaml create mode 100644 static/idn-api/v3/schemas/SodViolationContextCheckCompleted.yaml create mode 100644 static/idn-api/v3/schemas/Source.yaml create mode 100644 static/idn-api/v3/schemas/SourceFeature.yaml create mode 100644 static/idn-api/v3/schemas/SourceHealthDto.yaml create mode 100644 static/idn-api/v3/schemas/SpConfigMessage.yaml create mode 100644 static/idn-api/v3/schemas/Transform.yaml create mode 100644 static/idn-api/v3/schemas/TransformDefinition.yaml create mode 100644 static/idn-api/v3/schemas/UsageType.yaml create mode 100644 static/idn-api/v3/schemas/WorkItemState.yaml create mode 100644 static/idn-api/v3/schemas/WorkItemType.yaml create mode 100644 static/idn-api/v3/schemas/WorkItems.yaml create mode 100644 static/idn-api/v3/schemas/WorkItemsCount.yaml create mode 100644 static/idn-api/v3/schemas/WorkItemsSummary.yaml create mode 100644 static/idn-api/v3/schemas/access/AccessProfile.yaml create mode 100644 static/idn-api/v3/schemas/access/AccessProfileBulkDeleteRequest.yaml create mode 100644 static/idn-api/v3/schemas/access/AccessProfileBulkDeleteResponse.yaml create mode 100644 static/idn-api/v3/schemas/access/AccessProfileRef.yaml create mode 100644 static/idn-api/v3/schemas/access/AccessProfileSourceRef.yaml create mode 100644 static/idn-api/v3/schemas/access/AccessProfileUsage.yaml create mode 100644 static/idn-api/v3/schemas/access/ApprovalScheme.yaml create mode 100644 static/idn-api/v3/schemas/access/ApprovalSchemeForRole.yaml create mode 100644 static/idn-api/v3/schemas/access/EntitlementRef.yaml create mode 100644 static/idn-api/v3/schemas/access/IdentityReference.yaml create mode 100644 static/idn-api/v3/schemas/access/OwnerReference.yaml create mode 100644 static/idn-api/v3/schemas/access/ProvisioningCriteriaLevel1.yaml create mode 100644 static/idn-api/v3/schemas/access/ProvisioningCriteriaLevel2.yaml create mode 100644 static/idn-api/v3/schemas/access/ProvisioningCriteriaLevel3.yaml create mode 100644 static/idn-api/v3/schemas/access/ProvisioningCriteriaOperation.yaml create mode 100644 static/idn-api/v3/schemas/access/Requestability.yaml create mode 100644 static/idn-api/v3/schemas/access/RequestabilityForRole.yaml create mode 100644 static/idn-api/v3/schemas/access/Revocability.yaml create mode 100644 static/idn-api/v3/schemas/access/Role.yaml create mode 100644 static/idn-api/v3/schemas/access/RoleAssignmentSourceType.yaml create mode 100644 static/idn-api/v3/schemas/access/RoleCriteriaKey.yaml create mode 100644 static/idn-api/v3/schemas/access/RoleCriteriaKeyType.yaml create mode 100644 static/idn-api/v3/schemas/access/RoleCriteriaLevel1.yaml create mode 100644 static/idn-api/v3/schemas/access/RoleCriteriaLevel2.yaml create mode 100644 static/idn-api/v3/schemas/access/RoleCriteriaLevel3.yaml create mode 100644 static/idn-api/v3/schemas/access/RoleCriteriaOperation.yaml create mode 100644 static/idn-api/v3/schemas/access/RoleIdentity.yaml create mode 100644 static/idn-api/v3/schemas/access/RoleMembershipIdentity.yaml create mode 100644 static/idn-api/v3/schemas/access/RoleMembershipSelector.yaml create mode 100644 static/idn-api/v3/schemas/access/RoleMembershipSelectorType.yaml create mode 100644 static/idn-api/v3/schemas/filter/Bound.yaml create mode 100644 static/idn-api/v3/schemas/filter/Filter.yaml create mode 100644 static/idn-api/v3/schemas/filter/FilterType.yaml create mode 100644 static/idn-api/v3/schemas/filter/Range.yaml create mode 100644 static/idn-api/v3/schemas/filter/examples/exists.yaml create mode 100644 static/idn-api/v3/schemas/filter/examples/range.yaml create mode 100644 static/idn-api/v3/schemas/filter/examples/terms.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/ApprovalItemDetails.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/ApprovalReminderAndEscalationConfig.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/ApprovalStatus.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/ApprovalSummary.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeApprovalDecision.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeApprovalItem.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeApprovalItemBase.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeApprovalItemDetail.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeApprovalSummary.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeBulkUploadJob.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeBulkUploadStatus.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeIdentityDtoType.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeIdentityReferenceWithId.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeIdnUserRequest.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeRecord.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeRejectApprovalDecision.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeRequest.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeRequestBody.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeRequestLite.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeRequestSummary.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeRequestWithoutApprovalItem.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeSchemaAttribute.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeSchemaAttributeBody.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeSchemaAttributeType.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeSource.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeSourceLite.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeSourceLiteWithSchemaAttributes.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeSourceRequestBody.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeSourceWithCloudExternalId.yaml create mode 100644 static/idn-api/v3/schemas/non-employee/NonEmployeeSourceWithNECount.yaml create mode 100644 static/idn-api/v3/schemas/reviews/ReviewableAccessProfile.yaml create mode 100644 static/idn-api/v3/schemas/reviews/ReviewableEntitlement.yaml create mode 100644 static/idn-api/v3/schemas/reviews/ReviewableRole.yaml create mode 100644 static/idn-api/v3/schemas/schedule/Schedule.yaml create mode 100644 static/idn-api/v3/schemas/schedule/ScheduleType.yaml create mode 100644 static/idn-api/v3/schemas/schedule/Selector.yaml create mode 100644 static/idn-api/v3/schemas/schedule/SelectorType.yaml create mode 100644 static/idn-api/v3/schemas/search/ElasticVersion.yaml create mode 100644 static/idn-api/v3/schemas/search/Index.yaml create mode 100644 static/idn-api/v3/schemas/search/InnerHit.yaml create mode 100644 static/idn-api/v3/schemas/search/Query.yaml create mode 100644 static/idn-api/v3/schemas/search/QueryResultFilter.yaml create mode 100644 static/idn-api/v3/schemas/search/QueryType.yaml create mode 100644 static/idn-api/v3/schemas/search/Search.yaml create mode 100644 static/idn-api/v3/schemas/search/TypeAheadQuery.yaml create mode 100644 static/idn-api/v3/schemas/search/aggregate/Aggregation-2.yaml create mode 100644 static/idn-api/v3/schemas/search/aggregate/Aggregation.yaml create mode 100644 static/idn-api/v3/schemas/search/aggregate/AggregationType.yaml create mode 100644 static/idn-api/v3/schemas/search/aggregate/Aggregations.yaml create mode 100644 static/idn-api/v3/schemas/search/aggregate/BucketAggregation.yaml create mode 100644 static/idn-api/v3/schemas/search/aggregate/BucketType.yaml create mode 100644 static/idn-api/v3/schemas/search/aggregate/FilterAggregation.yaml create mode 100644 static/idn-api/v3/schemas/search/aggregate/FilterType.yaml create mode 100644 static/idn-api/v3/schemas/search/aggregate/MetricAggregation.yaml create mode 100644 static/idn-api/v3/schemas/search/aggregate/MetricType.yaml create mode 100644 static/idn-api/v3/schemas/search/aggregate/NestedAggregation.yaml create mode 100644 static/idn-api/v3/schemas/search/aggregate/examples/bucketAggregation-dsl.yaml create mode 100644 static/idn-api/v3/schemas/search/aggregate/examples/bucketAggregation-subAggregation-dsl.yaml create mode 100644 static/idn-api/v3/schemas/search/aggregate/examples/bucketAggregation-subAggregation.yaml create mode 100644 static/idn-api/v3/schemas/search/aggregate/examples/bucketAggregation.yaml create mode 100644 static/idn-api/v3/schemas/search/aggregate/examples/metricAggregation-dsl.yaml create mode 100644 static/idn-api/v3/schemas/search/aggregate/examples/metricAggregation.yaml create mode 100644 static/idn-api/v3/schemas/search/aggregate/examples/nestedAggregation-bucketAggregation-dsl.yaml create mode 100644 static/idn-api/v3/schemas/search/aggregate/examples/nestedAggregation-bucketAggregation.yaml create mode 100644 static/idn-api/v3/schemas/search/aggregate/examples/nestedAggregation-filterAggregation-bucketAggregation-dsl.yaml create mode 100644 static/idn-api/v3/schemas/search/aggregate/examples/nestedAggregation-filterAggregation-bucketAggregation.yaml create mode 100644 static/idn-api/v3/schemas/search/documents/AggregationResult-csv.yaml create mode 100644 static/idn-api/v3/schemas/search/documents/AggregationResult.yaml create mode 100644 static/idn-api/v3/schemas/search/documents/SearchDocument.yaml create mode 100644 static/idn-api/v3/schemas/search/documents/examples/accessProfile.yaml create mode 100644 static/idn-api/v3/schemas/search/documents/examples/accessProfiles.yaml create mode 100644 static/idn-api/v3/schemas/search/documents/examples/bullet-bull-dog.yml create mode 100644 static/idn-api/v3/schemas/search/documents/examples/entitlement.yaml create mode 100644 static/idn-api/v3/schemas/search/documents/examples/entitlements.yaml create mode 100644 static/idn-api/v3/schemas/search/documents/examples/event.yaml create mode 100644 static/idn-api/v3/schemas/search/documents/examples/events.yaml create mode 100644 static/idn-api/v3/schemas/search/documents/examples/identities.yaml create mode 100644 static/idn-api/v3/schemas/search/documents/examples/identity.yaml create mode 100644 static/idn-api/v3/schemas/search/documents/examples/nina-kitty.yml create mode 100644 static/idn-api/v3/schemas/search/documents/examples/role.yaml create mode 100644 static/idn-api/v3/schemas/search/documents/examples/roles.yaml create mode 100644 static/idn-api/v3/schemas/search/examples/filter-exists.yaml create mode 100644 static/idn-api/v3/schemas/search/examples/filter-range.yaml create mode 100644 static/idn-api/v3/schemas/search/examples/filter-terms.yaml create mode 100644 static/idn-api/v3/schemas/search/examples/query-fields.yaml create mode 100644 static/idn-api/v3/schemas/search/examples/query-innerHit.yaml create mode 100644 static/idn-api/v3/schemas/search/examples/query-timeZone.yaml create mode 100644 static/idn-api/v3/schemas/search/examples/typeAheadQuery-nestedType.yaml create mode 100644 static/idn-api/v3/schemas/search/examples/typeAheadQuery.yaml create mode 100644 static/idn-api/v3/schemas/search/model/access/Access.yaml create mode 100644 static/idn-api/v3/schemas/search/model/access/AccessProfile.yaml create mode 100644 static/idn-api/v3/schemas/search/model/access/BaseAccess.yaml create mode 100644 static/idn-api/v3/schemas/search/model/access/Entitlement.yaml create mode 100644 static/idn-api/v3/schemas/search/model/access/Role.yaml create mode 100644 static/idn-api/v3/schemas/search/model/access/profile/AccessProfile.yaml create mode 100644 static/idn-api/v3/schemas/search/model/account/Account.yaml create mode 100644 static/idn-api/v3/schemas/search/model/account/BaseAccount.yaml create mode 100644 static/idn-api/v3/schemas/search/model/account/Source.yaml create mode 100644 static/idn-api/v3/schemas/search/model/account/activity/AccountActivity.yaml create mode 100644 static/idn-api/v3/schemas/search/model/account/activity/AccountRequest.yaml create mode 100644 static/idn-api/v3/schemas/search/model/account/activity/Approval.yaml create mode 100644 static/idn-api/v3/schemas/search/model/account/activity/AttributeRequest.yaml create mode 100644 static/idn-api/v3/schemas/search/model/account/activity/Comment.yaml create mode 100644 static/idn-api/v3/schemas/search/model/account/activity/ExpansionItem.yaml create mode 100644 static/idn-api/v3/schemas/search/model/account/activity/OriginalRequest.yaml create mode 100644 static/idn-api/v3/schemas/search/model/aggregation/Aggregation.yaml create mode 100644 static/idn-api/v3/schemas/search/model/base/BaseDocument.yaml create mode 100644 static/idn-api/v3/schemas/search/model/base/DateTime.yaml create mode 100644 static/idn-api/v3/schemas/search/model/base/DisplayReference.yaml create mode 100644 static/idn-api/v3/schemas/search/model/base/DocumentType.yaml create mode 100644 static/idn-api/v3/schemas/search/model/base/Reference.yaml create mode 100644 static/idn-api/v3/schemas/search/model/base/Tags.yaml create mode 100644 static/idn-api/v3/schemas/search/model/base/TypedReference.yaml create mode 100644 static/idn-api/v3/schemas/search/model/entitlement/BaseEntitlement.yaml create mode 100644 static/idn-api/v3/schemas/search/model/entitlement/Entitlement.yaml create mode 100644 static/idn-api/v3/schemas/search/model/event/Event.yaml create mode 100644 static/idn-api/v3/schemas/search/model/event/NameType.yaml create mode 100644 static/idn-api/v3/schemas/search/model/identity/Access.yaml create mode 100644 static/idn-api/v3/schemas/search/model/identity/App.yaml create mode 100644 static/idn-api/v3/schemas/search/model/identity/Identity.yaml create mode 100644 static/idn-api/v3/schemas/search/model/identity/IdentityReference.yaml create mode 100644 static/idn-api/v3/schemas/search/model/identity/Owner.yaml create mode 100644 static/idn-api/v3/schemas/search/model/identity/Owns.yaml create mode 100644 static/idn-api/v3/schemas/search/model/identity/ProcessingDetails.yaml create mode 100644 static/idn-api/v3/schemas/search/model/role/Role.yaml create mode 100644 static/idn-api/v3/schemas/search/saved/Arguments.yaml create mode 100644 static/idn-api/v3/schemas/search/saved/Column.yaml create mode 100644 static/idn-api/v3/schemas/search/saved/Name.yaml create mode 100644 static/idn-api/v3/schemas/search/saved/SavedSearch.yaml create mode 100644 static/idn-api/v3/schemas/search/saved/Search.yaml create mode 100644 static/idn-api/v3/schemas/search/saved/examples/execute-scheduled.yaml create mode 100644 static/idn-api/v3/schemas/search/saved/examples/execute-test.yaml create mode 100644 static/idn-api/v3/schemas/search/scheduled/Name.yaml create mode 100644 static/idn-api/v3/schemas/search/scheduled/Schedule.yaml create mode 100644 static/idn-api/v3/schemas/search/scheduled/ScheduledSearch.yaml create mode 100644 static/idn-api/v3/schemas/transforms/AccountAttribute.yaml create mode 100644 static/idn-api/v3/schemas/transforms/Base64Decode.yaml create mode 100644 static/idn-api/v3/schemas/transforms/Base64Encode.yaml create mode 100644 static/idn-api/v3/schemas/transforms/Concatenation.yaml create mode 100644 static/idn-api/v3/schemas/transforms/Conditional.yaml create mode 100644 static/idn-api/v3/schemas/transforms/DateCompare.yaml create mode 100644 static/idn-api/v3/schemas/transforms/DateFormat.yaml create mode 100644 static/idn-api/v3/schemas/transforms/DateMath.yaml create mode 100644 static/idn-api/v3/schemas/transforms/DecomposeDiacriticalMarks.yaml create mode 100644 static/idn-api/v3/schemas/transforms/E164phone.yaml create mode 100644 static/idn-api/v3/schemas/transforms/FirstValid.yaml create mode 100644 static/idn-api/v3/schemas/transforms/ISO3166.yaml create mode 100644 static/idn-api/v3/schemas/transforms/IdentityAttribute.yaml create mode 100644 static/idn-api/v3/schemas/transforms/IndexOf.yaml create mode 100644 static/idn-api/v3/schemas/transforms/LastIndexOf.yaml create mode 100644 static/idn-api/v3/schemas/transforms/LeftPad.yaml create mode 100644 static/idn-api/v3/schemas/transforms/Lookup.yaml create mode 100644 static/idn-api/v3/schemas/transforms/Lower.yaml create mode 100644 static/idn-api/v3/schemas/transforms/NameNormalizer.yaml create mode 100644 static/idn-api/v3/schemas/transforms/RandomAlphaNumeric.yaml create mode 100644 static/idn-api/v3/schemas/transforms/RandomNumeric.yaml create mode 100644 static/idn-api/v3/schemas/transforms/Reference.yaml create mode 100644 static/idn-api/v3/schemas/transforms/Replace.yaml create mode 100644 static/idn-api/v3/schemas/transforms/ReplaceAll.yaml create mode 100644 static/idn-api/v3/schemas/transforms/RequiresPeriodicRefresh.yaml create mode 100644 static/idn-api/v3/schemas/transforms/RightPad.yaml create mode 100644 static/idn-api/v3/schemas/transforms/Rule.yaml create mode 100644 static/idn-api/v3/schemas/transforms/Split.yaml create mode 100644 static/idn-api/v3/schemas/transforms/Static.yaml create mode 100644 static/idn-api/v3/schemas/transforms/Substring.yaml create mode 100644 static/idn-api/v3/schemas/transforms/Trim.yaml create mode 100644 static/idn-api/v3/schemas/transforms/UUIDGenerator.yaml create mode 100644 static/idn-api/v3/schemas/transforms/Upper.yaml create mode 100644 static/idn-api/v3/schemas/transforms/date-formats/namedConstructs.yaml create mode 100644 static/idn-api/v3/schemas/transforms/date-formats/simpleDateFormat.yaml create mode 100644 static/idn-api/v3/schemas/transforms/input.yaml create mode 100644 static/idn-api/v3/schemas/transforms/rules/GenerateRandomString.yaml create mode 100644 static/idn-api/v3/schemas/transforms/rules/GenericRule.yaml create mode 100644 static/idn-api/v3/schemas/transforms/rules/GetEndOfString.yaml create mode 100644 static/idn-api/v3/schemas/transforms/rules/GetReferenceIdentityAttribute.yaml create mode 100644 static/idn-api/vlegacy/internal.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/identities/sourceId.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/path/accessProfileId.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/path/accountId.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/path/approvalId.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/path/identityAlias.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/path/identityIdOrAlias.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/path/index.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/path/launcherId.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/path/provisioningActivityId.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/path/taskResultIdOrName.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/accounts/sourceId-get-list.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/accounts/sourceId.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/filters.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/goto.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/identity-apps-filters.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/identity-filter.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/identityLaunchers/accessProfileId.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/identityLaunchers/appId.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/identityLaunchers/context.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/limit.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/offset.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/org.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/provisioning-activities-filters.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/provisioning-activities-sort.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/search/column-fields.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/search/fields.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/search/index.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/search/query-fields.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/search/query.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/search/type.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/search/types.yaml create mode 100644 static/idn-api/vlegacy/parameters/v2/query/sort.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/AccessProfileEntitlements.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/AccessProfileId.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/AccessProfiles.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/AccessRequests.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/Accounts.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/AccountsWithId.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/Orgs.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/Search.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/TaskResultIdOrName.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/approvals/ApprovalsList.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/approvals/ApproveRequest.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/approvals/Forward.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/approvals/RejectRequest.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/identities/Identities.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/identities/IdentitiesBulkLock.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/identities/IdentityAliasAuthDetails.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/identities/IdentityIdOrAlias.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/identities/IdentityIdOrAliasApprovals.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/identities/IdentityIdOrAliasApps.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/identities/IdentityIdOrAliasLaunchers.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/identities/LauncherId.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/launchers/Click.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/launchers/LauncherId.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/provisioning-activities/GetProvisioningActivity.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/provisioning-activities/ProvisioningActivitiesList.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/search/Entitlements.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/search/EntitlementsRunExport.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/search/Events.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/search/Identities.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/search/IdentitiesRunExport.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/search/IndexMappings.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/search/Mappings.yaml create mode 100644 static/idn-api/vlegacy/paths/v2/search/RunExport.yaml create mode 100644 static/idn-api/vlegacy/responses/v2/201.yaml create mode 100644 static/idn-api/vlegacy/responses/v2/202.yaml create mode 100644 static/idn-api/vlegacy/responses/v2/204.yaml create mode 100644 static/idn-api/vlegacy/responses/v2/400.yaml create mode 100644 static/idn-api/vlegacy/responses/v2/403.yaml create mode 100644 static/idn-api/vlegacy/responses/v2/404.yaml create mode 100644 static/idn-api/vlegacy/responses/v2/503.yaml create mode 100644 static/idn-api/vlegacy/responses/v2/ExceptionObject.yaml create mode 100644 static/idn-api/vlegacy/responses/v2/MultiStatusObject.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/AccessProfile.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/AccessProfileCreateEto.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/AccessRequest.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/Account.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/AccountApplication.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/AccountAttributes.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/AccountIdentity.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/AccountMeta.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/App.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/Approval.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/ApprovalConfigEto.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/AuthDetails.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/CommentEto.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/DynamicSchemaEto.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/Entitlement.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/ForwardApprovalEto.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/IdentityEto.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/IdentityV2.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/Launcher.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/LauncherEto.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/LauncherLink.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/Notification.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/Org.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/OrgEto.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/ProvisioningActivity.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/RequestSummary.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/TaskResult.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/search/Mapping.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/search/SearchEntitlement.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/search/SearchEvent.yaml create mode 100644 static/idn-api/vlegacy/schemas/v2/search/SearchIdentity.yaml create mode 100644 static/idn-api/vlegacy/securitySchemes/OAuth2.yaml create mode 100644 static/idn-api/vlegacy/v2.yaml create mode 100644 static/iiq-api/swagger.json create mode 100644 static/img/SailPoint-Developer-Community-Inverse-Lockup.png create mode 100644 static/img/SailPoint-Developer-Community-Lockup.png create mode 100644 static/img/SailPoint-Logo-RGB-Color.png create mode 100644 static/img/SailPoint-Logo-RGB-Color.svg create mode 100644 static/img/SailPoint-Logo-RGB-Inverse.png create mode 100644 static/img/SailPoint-Logo-RGB-Inverse.svg create mode 100644 static/img/docusaurus.png create mode 100644 static/img/favicon.ico create mode 100644 static/img/logo.svg create mode 100644 static/img/undraw_docusaurus_mountain.svg create mode 100644 static/img/undraw_docusaurus_react.svg create mode 100644 static/img/undraw_docusaurus_tree.svg create mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..b2d6de306 --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +# Dependencies +/node_modules + +# Production +/build + +# Generated files +.docusaurus +.cache-loader + +# Misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/README.md b/README.md new file mode 100644 index 000000000..aaba2fa1e --- /dev/null +++ b/README.md @@ -0,0 +1,41 @@ +# Website + +This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. + +### Installation + +``` +$ yarn +``` + +### Local Development + +``` +$ yarn start +``` + +This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. + +### Build + +``` +$ yarn build +``` + +This command generates static content into the `build` directory and can be served using any static contents hosting service. + +### Deployment + +Using SSH: + +``` +$ USE_SSH=true yarn deploy +``` + +Not using SSH: + +``` +$ GIT_USER= yarn deploy +``` + +If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 000000000..e00595dae --- /dev/null +++ b/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: [require.resolve('@docusaurus/core/lib/babel/preset')], +}; diff --git a/blog/2019-05-28-first-blog-post.md b/blog/2019-05-28-first-blog-post.md new file mode 100644 index 000000000..02f3f81bd --- /dev/null +++ b/blog/2019-05-28-first-blog-post.md @@ -0,0 +1,12 @@ +--- +slug: first-blog-post +title: First Blog Post +authors: + name: Gao Wei + title: Docusaurus Core Team + url: https://github.com/wgao19 + image_url: https://github.com/wgao19.png +tags: [hola, docusaurus] +--- + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet diff --git a/blog/2019-05-29-long-blog-post.md b/blog/2019-05-29-long-blog-post.md new file mode 100644 index 000000000..26ffb1b1f --- /dev/null +++ b/blog/2019-05-29-long-blog-post.md @@ -0,0 +1,44 @@ +--- +slug: long-blog-post +title: Long Blog Post +authors: endi +tags: [hello, docusaurus] +--- + +This is the summary of a very long blog post, + +Use a `` comment to limit blog post size in the list view. + + + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet diff --git a/blog/2021-08-01-mdx-blog-post.mdx b/blog/2021-08-01-mdx-blog-post.mdx new file mode 100644 index 000000000..c04ebe323 --- /dev/null +++ b/blog/2021-08-01-mdx-blog-post.mdx @@ -0,0 +1,20 @@ +--- +slug: mdx-blog-post +title: MDX Blog Post +authors: [slorber] +tags: [docusaurus] +--- + +Blog posts support [Docusaurus Markdown features](https://docusaurus.io/docs/markdown-features), such as [MDX](https://mdxjs.com/). + +:::tip + +Use the power of React to create interactive blog posts. + +```js + +``` + + + +::: diff --git a/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg b/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..11bda0928456b12f8e53d0ba5709212a4058d449 GIT binary patch literal 96122 zcmb4pbySp3_%AIb($d}CN{6sCNbJIblrCK=AuXwZ)Y2^7EXyvibPLiUv2=*iETNcDDZ-!M(5gfan1QF);-jEfp=>|F`_>!=WO^Jtthn$K}Goqr%0f!u{8e!-9i@ zhmU(NIR8g*@o?}7?okromonkv{J(|wy~6vi^xrZLIX*599wk2Ieb#lAbZ*fz97a4{ zJY7PbSOUsOwNy1OwNzXx4iXOC|2z)keOwmKpd-&ia_{g7{tN#ng-gPNcc1#tlkjM! zO6lT6;ZU0JB&4eA(n2(-bp-FTi8b+f7%9WKh({QCB8bELa9lXp#GSXVPIvbL=ZA)_ zoqe{#7VMtQs`;Ng5O8q3j-8IgrN#}94v)TX4^NlszBRSzdq}A`TxwFd3|y~ciPQw? z%W89mZQrCUNI$g^7Oh9(UFDIP_r7lI7lWz&hZ1*kZ$baGz-#@nL4S(s3tjnk2vk5* zGnL>!jFf8k?c!+McUT=ympT%ld*3}>E?g-5z9LI_yzT>@2o6r3i2v)t?KwGOxzsp5 z--7^Xa4<>>P6hlaW!G1-kpn0Y2dq(kdhFvvV+2FM0)3np}3GKzTt;)#GZ=Z?W z!}GMkBmSB3taZb*d{@PnL&d_l(Ks(Z2Nbb?3HFfuIKl`Y+P!9$uuAsc53|NzT!gCE z{M_rr@ucO9AC$3tNI(^d8!3^&0lCM-kw_(|g&{O!)%`pqf8E|0W;wYyy}6&z6(2B; zRYt1FlHZ2C7vc@FdKzC@n?}jobe2D9^;P-sa5`IfwpE1e6#N|6qQw8o+38045pxM* z_59Aq@8~>dJCtqhns#jEI~z0hACBNUZ;I~qj_$}bPXswGCwZz`c=)~lO#R;=sD(%9 za&bUY81NY4aNY25K5M9{QQ`EOS{V4jzXdWnDdV2b8HKe6T<|X$Q%nTAemPnPhtCab z@I(`E5U22@kW&(;Pynv}zWp62&;CfRX7N~Ze4eAlaDu!0dW=(x2_An*}x3G&V2kUsI=T|3LqH$PFPB?r*Kh zT<(BanS8n8ZL2f{u<*C=c;#&Iv3z05|BtwHPyLVX$JfSZ-nPRGyw_WdBUAS?NhDHJ zmzyA*oPZ~V;9d%;G25NPBOfQ-_D`B?F5{09Gw9nt9ehQ4_7uLZZQvbQt_P+|;LlMZ8=jss zF^Gm7)AuJd!9`>njaJZ$iVyWbd6|Twl_cKuZ2N()vsz1j@E37vPyKyt=e2GqZ^MR~ zXIy^LItyv$VNEn)MYm=|*3p-TDZIgKxoy7MI3JQa*lF%)ARPfF;fs*DQ?da`y7oEU zh_lgIWD}kW>MyGS)zaY65j&?~?T{j(I0L8nXp-HVZ_c&_z>K4Vi_<5qV_D*Pmntfm zcZuH8?M-w;z;3X$(8R`DMJ?#^m#o9ZLE0Ismu8& zDF)Q?Teh3z;(@8v6Q-&8=w`afg3mLQ85XKF=>ht;Mk<9C({@^a!<@Wn&e@#S*tGZT zflx~uFh89d7#69BINhL^;7=1nNyD(`#`N(kcJFxJH1wC-G z;3~)5?Zx+e8gBGJEGIZpXCR@*4E3T{e~F3|np7zaFTW*H$6lk=q&W<9@%|HhT)JsG zi?G)xD*Su@aGq|R2%ww6-{29RSlN?n22{r1v7(>8AqB`_W!ed6MbYgY>Lr~WdJ&67xXmBw;p)KRhD8c| zJPCE$_%TC!QMW^NN%e0n5R2!O>QuB$oNP`QHKU(-$F6g084quR%O&2C0<#jZqHNw4 zg}XntN)!#<#jr(XMe}^|UlLdeBP*t#i${&;_yuBmDs$W2O;1E|sSj=;W^ zSyF|!M=xm-QCXVU7mQ}V(~7UrsKOIK5r4^7F*g0VH)w1<|34dC_`UQC*oTu=+B`9* z4Jh>4me{%44wl;7BDJkvDDWJ6SL?-=_fdbjK&XRp5Vk`9;#>i?%Motv>V(|7;A}}O zU8%V37GK!!mZHZ`7L5Ns*ztfB%;y+ar#4rSN%qi@zDw*8HNT7L@UTW-9V>6VIrIS2`w$ZVxrD_Pvo4;!t)?he`;kX47HQS z-ZH7w(v&VJyMNj9a9hr72G+d({AQb?zG8>o3fA&C9sA)(_LXsqbK3q#_q2In;XuQA z;NKnzM$3uO)*k{JyOnxO7id4ceg~27qWT|x^KLg)9iN9N9QmA0xoo+VRJA$ z_etyG#Z~#aXRpU(?tAXq{@pX43OnVh@LXP_K@+?k9bogc$6N&(^|_I7ezWOoTLFK- zq`ji~=M!@gj*9u2?}O^~rbKuIaGHS#4~<7S&j`ui!Fw}>9T~O9Fj^ zyN};L5Oen^`4*<%c5`ifzl|RH{yv(l$yZoAGe7Vxi@NG$b$bfy@^r|37dNU}^yhDP zg3>=6>ltZV(tkMK&y2yjHjZAHEU1)`Px7LL-ApPAQyMeeb~^%^Tw+x_#AO& zwY9CqLCRqDuj8Hhori(`zOq4#X2@itHGeu;Oe8noy z;iV-)*{@MgVV=ZE;SQoB`g@sly`(oumzOeyw^%x9Ge`JZfNAQ3n*xKER#RJN$@N3` zX|n~{{3NG=HSLm3|GFI)m9jjMj&1 zi`#yIC*L7GD%~$4EPts}*Rd@VTe(M6jJF8MDif>-iGqb9>Q9zYo92egEmZacG>pIx zT3XS%Wn7uU37^#?IO>Y1N%%BY>lt24Jq!#rl0 zE|_4f751``XY#Kqndv+Y0tJc@_=K|OoS7Hcx$j7now-)jIS@SJ7Z`qR{;qwEN!yw( zrtTrDt}LdyQl>pCJEisU{ExS-0(RC(8z?xeh0uYie&4|@NL1Kt!PTFRbK~9VJLd%? zyjj}ixr`csCmc9SDb<>2>GnCHm-i(a=t69-_MDt5ksjAVU7k>i!(BOET#;8#cwKh0 zjS=YVlpYl!E7+!y;RpeY=C=*|<%&Oh2+5qCv^JIR3Of1ue9k7N`?6YW;A+{c(pyeP z^ZpjVK^#7%E}QYRtS*uaK_K$Oyoq3%xOCV3?n&qBv}Qc;N8FQ2O#u{>slaV21l1Fc)AyIlbfdX7AExO{F?eOvERYJb;Ni zckPYRgfT@0Y4PwO%7BY@l#2<^fKapIft)oU2O*-JU&?8;Z7Q467Gqyc1RGqTp3zqn z_F<{stV*oYnEE+<1}A|K7({3kbdJ=r67p>3|7YtA6(Iw>`GxKnm1Ve>A@&z9Vvu8H`OuD7{B zMq(lkGSK&awU^aqf~Hx?^P4cUl^^fU&*kPEt$t4z0-PMDv!U}pIKO<9Sv;GRJ{qnc zM#0V^%Zxa5H(Iv{@2xzz5#$zpTWxaaiu@Y4QU89(yi{9^PHM{|J_i?6y zgf4QjZLTyomqcSjIJKGS3lb zSwmVhHvq>|mo6iNA+%kh;XIm9P0(Wjl%N@e!Uo|`7fqKQ0Yb{?nwhp%!%@R7IgQ(J zLdJbRkfT+8-daWy0_~Aj4@&Z<8;^K*_MKdo=%J+qo&7AP5Y>3CZDQwLk>VrP-iE3l z8mvBgeWl{(67&r>s zolqo}wttX5$056wr+?q;8$fEMMrSIe%AQCqi$0{Qt{6t|=rBnTL`u#0;b>^^q~bHE zp{uMeEEOF+C@Bea`ih=v`oWzl`fF0@xNrw_gl78Y95SqUn_wnsHu&(x4lD7hc2>u& z+c4)a*}b=lY{4v4Y@S1w5Z2f!Jq8LAqHhf&HyFe+xH zbfYn zuHOaD(3Z44uZnBo`1Un7x{2QW9QCOpsNS-qWe%Q$F)qV<&9q&PJhD?RJ@V!6b{5RuzyJ7cBd?%j{&sd zks}NY{pGQJFNu*E%g=q^iNCa_pTISw{g5lr<;sbC9@&D4|{$QCRNde}1aaR*iIJ>SkWWj9GmQq+0=}_`Y_Ek-oPg#tRE%68|XT zB;g{AmDK0gbP&>?-)o<(f8r}>S&x@WpxLhLJ6!VHvd^8m{d!dr7T3pz$ zkn$>3T~Nk?bRK9XEGr-E(p1z!l=>NOIE93eV1Q}%M}o=Jc(kJdFI%%?IHjKWBv=F- zs0kf#$k+|N^0Kmxpqs_13OW!7mM)n&4n{0j?O}zqJVqRfO0L;*JN}9tgHPRp+@oVB zL^!D_@iZhfor|uMCvR_WYBUa3qK1;a0Sidz=3nvFUmND_0QX-%no0}PDmmBm$!Q>E22?Y^dsKW0G}?bkHM8iy?HUZJe3D3p>1 z{o>d|o2RGDul?wm_UifFO%C!~|FkRJ8a~u-1G`aKtr9TmNLt2fx<)$)zT|Y_bZ~;j zZ}|?5bT+5#t2#Z&ZjZ&(>}e~tx(OssxQ3R?$4(c{8| zA{yv+v62$*(TsZHW7*HdBc_*TZp57AA09eH5#R)*7`b!#100}{HOmdQKm_miUqlBW zZD@x|#G<>fCMXis0q5cF%MdAB0y4U4`ufgyXagAF75QILp?OQMg)oJ-I5tcXNTV3c z^LdROg=LH8OWSuduIFYH>yoIy>?K#m=7i9g&A;qZckd=Qq`Af993c<1HC+HF3?3TA z@mXTS>d{;Y^&|CQE)x8(;Ecs0QHElH1xI&d6&Uq}k*an~<;wvD&Gm?=IaRXC4_2t+ z687TAZDvFH`P_rv+O+vii*ILLDq&e;Enb4GCZxSUyr*?BG*S{dy(~hS+d8%Ae9{Q0 zDFTsg9%WffrG!4@g#5<1DSfOuyKOqS6anp;I0|{^ z)V|zlQP!t&b3wI~7AJ(b|n}V$)IB5Fya)0*qVbt^^Xy>&KoM5@G zgv~8hvW8mIQ#^U!=(x z9?eBPZ$ao`DWyTW$iz!Q`hLz+KZ&*med242vVjHA{9$>d~E!>k~8H`e}5Ob?c^7D<+;Pp*!^~!b~jcszphKaneeErmWa|Ii2Oi~ ztGB4PTrExmF%PO~Rlw{5G?R45H%J2)zC4d?gLsc0?I}+&@ z{srJv;THoXHj*l`5Q|Tga(WP!7MOqS|4vLj8TW$CZa(*>1?6`$ z@pb*I!r>YumfjryY$QPZ&5ybh7ImdJ=}jf0R&Il)Rm8;{T#`EZ(8$4xK5)i|(J2>A zM(ECw(3nO!P|NY%80nn9)0)$_wQ6EY)@tA=fiw6Ckl?6%O@ z>iR~gE<@*gj8f=2)9R#xOOTiDw+cG>OO%J1<=dA?ehZH`uc}v z5rU~T1mqht0WB?l44gV3*5~ubC7^VJ?0P zaXK-^Pxha#1TpdkU7p`ESsU|D+8lTCPuba3r1}NxZiE&_I8Tx1G@)B3Ie#b@e%d`@ znIB6?VVd@|FiiIY5+r1dt`0*7CSknIt4x^I8lcbofDCyRBVB4u4goFQzHpkSVflWC zwCjG0O1Gn0h4%24jU*=Xv{Dg1GblXO54Wq$@-$o{ecO2#8L)Ph46``+>pER>c+GW$ zM(_lX8sW#qMTjI&_xnpy7&J=2N6?X_`pi{1qV%(bZ`?B|_=-Wqy}i#QMBhD-9s2~c zy7b9>k)dilS&g_J-(ltH!~Gud%K0oYXy7WObRVqWIQWFXU?{rDV z3ggo;zJQqxIwniw*YYRCIa)*_EWpICGC#=Rny3r;`R@LdNvYW-FgcO%z3NicRCZ1~ zr^>u8=iAvGHtZ*OTiMpv9AW!t^yU%s#0J_1Jj(G-;n1NVwt|-9p@r5g=&hhj z1nyyZ3~Dv2^qB>>zG(RzSlG|YU8v?0scfBa?5rKq+S(q|BL=E&8z;zIi-JpLE}t{X zC$jXzp9eAMETY=;3mQg({0eFdgYQ^9w`8`P{pXzAibKLGsLZIHeGwLV?3;0NhcJD* zW=jF6I?uh7cnonu|01<_;8Y**Gym3BCvZ@ivavgH{8Ys)L0)!KpF3kN<)NbxWqoIg zk}H!2P(+*L^U;+}sAL7~{4z9T$5;N&FXJ@lEb!F(Tz^mLXIY+Xoa8TCE}?oMt@2dF zf>B7vRnrXYt*^{_10oHxyR&QIX*_A69}X}I)WsaK?lU?w zy$^EMqSM;=o9rGpvC;Y5hd$=({MVCGg0~qSRl?QF2fWElYI_6-(v`Ds8JXMNUh~@d zWH?o5p$-i}&}iI?V3Q`#uX{eS$DhkUlnCO>r#B_^e^(O7Q{_t^=vWq6c#OCzKhoO0 z>32c(onMuwu)W}-EUGQg%KW%{PX{kY`i8q`F3DM`^r z!$)9ld2-fLN3WUry+VwXhmA^BUOO{*tc=o0;~`%Ca<(w=m6pWoO?LAFnnITD$;4f1 zdH)T)1!-l2iUHo|F5wV+q=!``)Qy~Ut5}0LPVcL+PVN=`-kE|*wA&=vLJE}>MFf9) zLt!6O^ZQ)(vglM}uzOPd0QN`M;WPw^X&aoW#x|kYoR#)bCHgEbGjry|844*9YTYBCxxj0&FM9T;FV9bu>;C5|_XUj%`lRr>o+m|j2w35a*LG`KiegseN*Vq||f zpKo+14SwyV7d7ICZYcB%nnqii`@U>;LT4X6c&u$(mMQCPn=5W1>fVq*>-%eSmqRPC z!MqV{0CK-po#-m}|GiC9*)!(f7%0~@X2uh8`BJ~{dz*Ync9O1wkf5C)WL3naIzopG zHvd`1UOoEtlLa?}QOao@HL{F{mI*K65TO$*SkruGJ9cH}2ju9?KuX(8@a1Zyo$)6p zZyW0qF;H_NM7dV)Yj^I?H(w9Wej^ra@(z+8`+Jgw!rYedJu7|k=mo4iUFPzl(M6VS zbbu2fb6_=)UQm-WUL;&3oCNw^s!y0Hb?(x+elVSM>w^f#=jtvUb~6Iia>Q`3alZ4| z!j996r)(u@83OLDw6YetLb4iWm7+S)t#!mEva~OF7%~>=+DuYL@me!-;)J-gNC*Ur zA|;5H1@Y8rW7RV?MKh$mP_*+bS%!1)S_h2SJYQ~+R#cC`zu~d? zOI^f%5GtC|SSF%ErwSjA*`s8rtbF=>d9`-kELhy1S3P;&3;1gB$_sWdlY5=>)|YCs zaAGeo=f|WwwRBBaT#s|qO#D)%Q;5EdbB`@>l^)%EEnYRfsTcDFB&!5TF%z-b@a2FtQSU0aD;eRfc&CPic*R+ zQbd1TSU857kART6jzOmnmq^G8r~e1=S?LE$yfUi^VJk6D{f@%0hFYyxTKCqM!_Lku zY?H0EO#0bF4(UWmhPVFYySswtbAxQ}j15fDU32FbfyU}l-O@JSrLX?sX!Q*h5_tkQ zCtcr27j3zI(b3|TZI*t(-ta7BCGeIEc_ZQV{Wlg-iBLFWy!|NdWvue9$0BQj_1$Bp zr`qiuEt0~v+OhZwhq8Mi1 zIw8~;Sm0}2 z`#Z_V*`Gtl7e<#qj`xO|P7M?WmGffQxcNF+x<%-$!L__0mD(0f9Rop;vZfa(V)yz1 zE-cIPoYeHN29k7N$0WLjCYs!YP+iwDozf(gSe6H*1g^^7?82$E% zS+c>;5q8OK9qMVDD}$)M@dR40nw293G2)zguH2&?cwoLJ@+eF4v=>g#%A}>R(~ovXE-mGs73s_&xby_%f}MF1omBoV~8zG)9FCUxZl+03&8 zMo*Rg6u22p>bxtf#)@PI_~o$3n#$C2TEy|2cqEvo=<>YQ3@_0OPn8mh1#_wmn~5Yn z(=m}EIZ6e^^W+<*D*Jjsy+Jv`4jwSyeGF%ijP4W1RK5u=$1-9FkUWy?o?OtxR0Px>TvF0%+;luL8uZWYWuM&>2#N1M!zIM~ zhjVaUQF{cRG%+=sIXEzp>C($LdH*Y4BMVuE%5!^vX=7DW4mYLY6uXrMul&O?U)Dw# zT)+#OII#l7ZY~8)(sLEwpPp#0)67O3m?;PGuT61U+pnzyzr?t(-rRHH-%+c;ob;ZTF5`H3a7k^Wg8X94FwFi1kV+$_Yy zXTvfH$(d}PRhZAsIbAPRB9M;(jZWnP1ImuH&&>3^RlXX)u(sWW=FPKFU!tUjb@pL} zM|#Mo$rf7F^D~+khXrUzlW0<>wk`hb=gjg)=96tX2ReSt$^b7Zi2q0`^>L2Mr9tR% z440)8CVH`A)GyCarH4?V9@etZ*faJIXV6V}Fcnz?m-2gUUh~mrxZIeajFUNrlTk{Z zd8sQm@el1OA7qu!%gLx;NRQwm8FDb6!>VPO-c&0AgXL|~UNoYcW=DhKeWW1RH!C%o zA;q+nA4?I~DVn>yGN`g6aYj&?iA7Z#onO?v!NtxbNE^W&*y$}dlE!C{o7m@c%*fS0 zz_~2;b#I7Ri799%3IhVZ4E5H3XZZel*OWLYUV9D0Tcg>O##T|P>{`(AY+jFhL5fu` zuynS{@E;DK%W}HBYW8cB&UoQgH6{>)SrjCR^|%5U4({A*VAW|PXETk@a8a6(dRzwt z#{=^6uZG6(CCb&TCN=!S5#mZI6Qm5iRyHud%LsK8(y}cz$?%hxRVbYcSk(jQ)Hf*q zwl`RXgq%Vq2>?qiQLj(sikZ5M2--71+VIB4>t#QF5kY>+0 zvdrvFUKb|@`qYA_DY~F8uSs*wtSyZjru;0Jd3f;q2xc^|l4;ainHm0GyTBPE^x351Nfhu+U_zM%JNv5tRNY(SJLI>_cH|`_% zBv}sM>s)u6&ftbT2iCAIbVYfaUdPKoAvKRr(h$g%l=euf!4+uP{uuJ2-j;C-gh79tNgvD!v);u3L54L8bMpdHOxBezyB$J z6t|CIWiq(2k-xMuIlq+@%c*oUf)auDn&NzqLb-t?B`)P6`sEjdLaw{t=0WE!psHKgYc`L8 zG7f5fbN<5Tc|Sc;VfuD8K7LsFY}c)XgtW)}UzLZ%PN2{=X%SF}l%n5@+mX^Tghf)C zQT&=hLLvxe&MK4|eJ=aMDkZi-%i5#;LRBB}9{5$@0{+NM_YoNPz_<(gyMe8_SQH4* zYs|(<2TOk`SN+|6){TN8HLBf=AL?Q5Wca0h;$bU05=f4Q$Ce1foxm6^F#KFxsX?$Dq%n7L@)AR}- z&sp2&#EosZM2gM29vW25{lhV-Z1N)rJ*7vJCt41#dOcxI`~uT!F-f|GtYZ5$j>V<= zK@HEb<0GW9P6e=bcVm#Ty6$x8j)|034zm=W^ZG!o-(MwhvzB207jL{j#Wr zf3d4_jvjQH2}PJ^fXo642QaQa6SIkfo=`<$&eyhn3IQPVc8GcDB52|H1>8Iut^!rs zC*ZD{x=G}jXK(yQf)&(+qxcckLnigZ_sae;{8ma1@=cIYvEfv1*!;%B!dd$t&bjiX zjLpiO1-g7WV!!s2{{sGJM4)42K)c}T-{uU*qv<>aOU}lXLmg2AOHj#J zki~HRbZ)>CvNm`r6BJX`hu2KeqCd0XlcA$ofF_0`t48MYK62h`5peGP1hV>0lG|m| zgWJRC+n9plKb-fsjCaB)bz?)}0q9?6jnI+-?$-r+K$|Br+H^=3@NtAFT4l z2Pi-M&*wPOB{W@wZ-O;n;LC&fOFKV-3^r~IIPJgH(Qpu5xoI2h@Hq2uu%{?y_46MT z`3othZz2iH{As=P+;}S0rE#`E2WqQPfr4&cPe(9Ktb~6jBPFsV>h*v;I40yZ>^Xz|QmC-`*#T zuCmXO#@x)`YmiZR8qy(gIa|mxze9-8a>4X|+Ry(%r`IIcXF4{gloG(w0Zv|e)-5$B zFR9*Ql(r&d+E;8rd(IRG-B*ayI(PfB-?UL~Sow+1Y4{mk=}6!wG{<3bm8%d8uUrRX zmFS*Vz0j+ynQUc{u++Nh%~FHPUOSb49r9StxA6XyKILE2qHS&1_qO5K(7%#T@HtKcx?+ZQBOAI6 zjSor!Q1@$2J=(O_HaIy^gFP2A$xAdmljhq5dELa!}A8tv_9E>5Ol!F@<`mu)dHKWLPv8lunR z;OOt%(~^s#z~1uT!@rASj6#`Nmj}}IFv3aFcO!H^@q(MZJTTgRp^!Gf+__|qf~;VN zi>pFV$ZLa%?x)U?-2o`@C8FW}Sz-J?zzrs5rzwS@>I5oZ6ywRw%hp6$!RgmP|KjOf z!Sh%rRz+hvQp&hGy~Ukxr0p=@*{0=yDy-nJ>BKdX*G$(+(b3QMum+kWNg2&~*QLko z*W@&s%qtW~J;Y)|y`9@2H=L8(Ewaykmwe8eGoQM|69>+i-|K}6x>gKS#w+7x7QlqV zWPRPKP-iA@jC;mm8gxvChZQj)VB*g`$U?84Q`ZhG`5L zQy;))-`BdwToBd$!x@&Xywj>yJyqDa&Man!bBR~&6<*P2C(knRy+@s&_;u$^UKHfL zNBExjJ*17XN{9=moVp>;T)*+>pweV zkqpPE)($ap_+Oan)#DL9H~w}L?k(hvtBW4IV&9$Cr4Od_f)RzC^~L1!`|># z%$v-L4zH~s{FG?hm6~J@(`5 z@`I*$QL}m!U@6E;u3tZdA;Zy|LK$qFd~)|2nDUAgHx~`vsT?0SUx3qCZrY@j7kjfD*hyUc~L86s!14rk9 zgm*6%*gqkK0`bL+Zg+j~XHVFSQIBw7*$Z#)kkG2!y5a9)CjoMF^wVLI<^@ zIG0@Qu4%nMp-ild>IADcH2JQf~6e)%OI_(LGI%=;Kq6B!MtwqJ^yI{BcJTot62W z%=0 zbQhF7T1G#I`ri6IHd>meOq$Q8)X(GW#bd(F)mbI8kpinT ztcWRAGA676;jNDmc4Og6y_9kq(M=rWX@cp?m6rf0*rdu-)K<>Pl>UVBuCkK;` zE%u(=@;kY8LZ<%Va5u)$DW+4IR+nq}t^s|@&qsqC0%3oF0?sUF&WnEMCqfs>yj(5T znL-zyT3Tji@~Wl=s}l>LUS5xfJ{EDzVgjIvR62OTN4g;;v})iI#h>;DcD@91_qzDW z4k~tTj{CRg!qXZztF^-rE9H6ZkV_hxOJEk=Evxad%L7+x-rYG^W}-O~#KxuhzLF(Q zs@zanss)5G^SfRH11hS^wy?u*oxD&rZ7PiIDg?raN(ethc!mQqycn%QvGm*LuxCLD zSnd~+!|TdT&_PGUrD7M!_R2e-i#>k5rw$dZnE-)||r z{~(#lp0ApHDfmZ|v2cj{#F@HP=l}0w(_) zGeJ5XB1na1WHT-Z-S)q+lLKXa>`ib2Ks?g;6g6K7UV(DTZiQ6)YLAW~{sVO{hYd#3 zxUvg3(}g)twI|k_tgjwEIH^zN3E8*vHGATJvELu65&wMd`D?_S%K!-5w1suU8oUi` ze#ByP=JKgEAxBE((U*1&>YvH3Bymg9d5uVGeH@#^EbZs)3=vj* zwK7Csa~K^WrQcd8S1V4_4*G|KzI{^6qEcA(=|(7*p9RcL zvH#{5WVmcVY}8!{9QfO2t#ViWuM{KKGl8%<_ak8SSHNo3moDDO%2O5h$Y#+KsI|&? ze>BfDv$!X*$H?PlKE0qos)z)U-*J(|1BTX=yj(npJQR-8lIjmR~dItB?C2n@$pB!cNsR5 zK5{z!)dO;|_`@(l%_Dfkl9vsQpgZZ=+>PHA7I#=nI{A%u8aDU@(3|CE;ITiS_g}K+ z+j4HWL_5PSZR!s@B$tiWPD0Y0Z_}Fd-{&w@#=qKXeV*iq;n?4!o31ITo~peGdD6RP zL)JRZF7#(0r7Tb-Kr(K*VL&y?pk6%z%B2P3q%w?8Pi}!)7^{%(h3#lLetDvy86fV= zrzs3s^%Cwm**F+$JcQCJO8#;Rt$F>2{lVg71E1WJ5ODHmq}=-@={M!K)74q;j?S0e z{7ybdS+(1Cdd|64Th+$dym>)4mx78OKXo2~2b3+wzb|Fv(u^B4^*uj>xB}!R{kTk= z5X_rHExdjM(p>%_CNwOCEIDYjlpG%f)zddv6IYKmnwEl0@*iz!Y}9hgO_DFw*LREf zYcNJ!8GQ3yZMOKS^m=7-|Bv^A*d-P=>?-pQ$7r9g2zkL`vD&gc9(x<(oi=9c9fijw ztSC)C`wxeP^F~-QweLweujxbKcM@FW3#O~3o4dOo$jJxR>uHqeN;u!Xd-W=WMhY^4 zwzy-o=FUFO&d*6xIy=%{^8Z7(cCx}^13R{V#lww>EBP?0N)vi`_;Dcc+B3|g#X1c> z?~C|Le+_+~7RfF5=J8@31G7m zM=`oCXAzQ74^b>8J$whv-7@|-LM!YgpgMGINiCOaz`eVy+37UX05SMx+!HKgZ}EzE zXNHLfss0ZK$^>_^T_bD{@@p~lt~&2|Q+)m2Plw5B#Mq zZ%U1q1Enk~em{-#KOgChb5IgWUoza8W1|)l!K8=E_lMkx{V67XAqnBMY1pPw2~;c* z0sT#HyrV1RcXU45((e1-3Q7Au$iHSspbL&YRT&I!OI+b@jM>!dSg55jX{HyC%DIoW`z`S5PqL@5|`)uqbMf)IUiAjl;~6xqZl`ucoX92I1oFr{e5CZMaKqh zaBpKe73<%LGi-4hUkb>Ih1u==f!_p&GBIB?kIcGjBxUWhDz11}vH$R3IPQ!;Np_4V zc`ldT7@(aOVv{iUUPv>fSx-+WC|&F%{x8+j`!ebzQeg_aV(Q9*QWmnl#*CcP){tLU zR~k085wAh-AomA&?#&hkEAJCb7~%`-wDA4qci?Q~M(B+93x1=WkMj2SqdrsrWyz#} zI26mgu$dFH%geihk2g(DeoMDI4Y~kYfkO7@ozI?3bX%n19Sw~{u>@Oh+q{8R-47(q zPLm-teKi5*Hb&bS@|QZ}uC=~P+;IN6Gcs6uTs%6+Z%*d~kT(Tn)X;pA% z@}8fJt{Dg0EWPo+x@z|y_@zpXK0Y3g9X^UcDB8c`LLWjS5&h1~q00VQad&-}rYd=r zR|t2ZY8eGQI2`-Fd2P~DH1|kG4~#nixZCj|wWVA>OiyIeciM;`m~@F*R!=o31(^br*KA?tX^-F7{h&T8AWNnC z)f%$21ZI#-3XqVEC>E@qENo=z-09+Mk^O6uc5IdhslPlUAxa?+l>VvL|u z8XD#0Diu)I?e&Lmz^RRfM@}4F!fpj$Ra&D=fkE#uex+uWcBtLytOCZzVeCp4EIG&7 z1;)85WaVQ6;vBQ?O``-V{cpl;3l!E?bv8E1pf z*4-Cr;l6Of{#z-GK3{%o%^0`MZ@uHF}IQSMGprgcE&ew-Cphi;0hR`(ZS zXjyl6HW@|_ESk`<()^;l5zWoOmjChlmeTlaWRAGD=+4|^vEsmq&)?eRyTO;3nAaQVVFDfhL%CP|I)%{xfOuOruQNZ}KD?m$g{&_zMl)R6hSBpM$^)r{ zGSEAdwFY|ZtniZbSfz5I0#f(|s1rqAK!&cbO5;H%=|`e!>=D^;e5-DVZE6{8JDot5 zPP^(jzI+x|l4x$vDlpzojUBG3M8tRSD!AD?_?VtUK6@#Y|5@jUA=J!g<4Ka%)D3W4 zaxQe)eR;!hjBF(Ohl1o#rhOO%xfxh6Mpr@)NI*7@9ju()M@uy-dfJ{1!r-ie8XkRq zc3lN8jY`9c1^%QfgUb5(CJkLjFJGrmh;TNp)7GIzI0W>YRqMqn~7A3Kc3Xb6IsnPY)5Q z+NbAt(vD3^bM&3eHH$+PR@*C?l0)$&x8;|jcMH9z!9w1}p@J<{Vy#?+Yo*mKZ68Zi zOQ*bV5>6jt3`;2S68F-H0({j*N-#zP*pjnPn%$yBe-#-H5t(IuVzx~pt=_g#8m`h& zHn`MeHJo>=R$RHX=3vC}?PK(EiZJZe%liLmw7ew z9}2#c6s5xQ4=FCqY2`OF9Kk+fVaFT#SqnQ3{y)z``V!0W5K=r+9@f^Z&d3OR+R@BC z!>-!0eCND--r(&w23n6U#NDhVU_N-8L>EGvKayuTGkY!&q zNl|s@s~RtY=O}bfjBOTgE_KD80$3M)gi`Y6;DQ}4CU3gC7A>GBVk`P}KYrziiiA5l zoYydmN>Sge+r}7{Av1)H@Z)Pk95g})syE^(YU5tBWfhh z1QzZdYqg&?(|FH!XUd5POA-C77~7#x-2N$@J=T1 zxAtN;sT!ToKa`X*9?@p#UaT+ErD{tHk02)KgtND3R?u@E){-k`~{iv`-7Cb(UPvIz*x+y`H8^t|47Z4le2s+UkiDJYZ(N8!{YizpWTUjBdkS^RX z#0UJokY?3#(K)^rYgLA*6;bLp9n0oVrBfrSkkE!CcX4rXQ7&geQbxYKx(y|DO6^#F zeP-tSm8%bDDGVSh_UdE7J)o)g;ygr%tV~(CQ^|QAqE!)`$Ire055+cFm94?vrn$Gw zVw7OkDxeKLzMP37gkeu*uF$f+KSWNCew;;Fpi%Ee2-Zwiv0{fzOb8>ph#I49hDB17 zQU^_q0xWcY!4xmMc>NiFIL~vEZds67CBT72Y!0)SQ-{6bTIUuwB3SmrrNrMU= zZj%Or_i%oRoB4!V`3Jz!RqHs zEHAY2{A*C-hK+mqwCDT=T&V&gOUrd8`Hjl|*z#p4p3dM+gQH+pHoJQAs-jNHhRWMs zqNpT#bPlD^Day3yabbN^(7|1;(6Huam5Qstv@7KqlWby7UD}0w{$RVo3*2KIyiR)D zlc}-k*u-7{DBT0vF==T=``f`Kp{{YhPqThlC@>mHVZ0V$OgZ@#LrBXnGHxI{oTDyP zG`*4_{-a{R0+sLUnQ{kWEL-X?G&S?5$!GeFP{X{%El@ zN0y7Qh;!aS2Iqoa+F_UUeHxlL5w%W^yJ_G9Wq18sde^>(tP0oL85 zy5&d$<6$S|elkNp9&xGCSc2yUI3DnJ55V0|mcD&w8VXge6xo>AysBYrQ}y-y-QD}6 zq>h+>g8?R7nN$HbCC49kKanFY@ng+8Or02L?-=dYeL{+G{Fp`MH4W8CPB`lt>lf-( zpa%i&rbDjpm$y7pmyzja`=EF)UMGLW3N_V6Bq|g}8BfWI>OsYcU@>G9SolRNLa z17o9N-_<(uFKeW0MQ=(sW^qa167e-5*((q@jQWR?x7oyB>ER6>W0a6Sr~&Vk^RW%L zLf4|Cg(B&Wh{Xz@Bmu(8QNLV9(us+k?J)y5V#+aFH#T`W5OXNlG$NqGV`&Upg< z3HLO}e1}G0-4fWW|LhitCa(naUZrkxiPY5At-`?lRuX=Lx}gaB zLsmh|$EMgm$mn1Hh4Ma}2XCUl&B=Bl+Sc}Ta)~t+DoK##lYeoBG zjY>Ao4es9^4Vo%O37SozE6)u5uN9dyc58^UQCOD#^YOt>1$d0|GZOgwk3iykY3ihV zT}H^K>55;Wfb+FZePC4({9b^hMm=QUC|()QL*eZgau-W&MvCGpGaJ#t^myz)Rm7D+ zauZ>OI}GvUetbi3V>#E*W9~RUI4<{M?Dw_Dl#4qlIge~An7dAmCYj_?><4f4-0}G_ zwWY<7%pVLzk+mhDn}g#ic`fglH8=x3wN?c%i)<^P-z~oART{apnwNjty}HT{ZhH*g zYvtMh9XgSdQ;_ALz=2tfE0B;#3V>t__fEYGWCJ;)HA3k88h1>GUI$QQ2E~?N*!?~+5@A<5|!P`no!y(nP zEbQ7gl5`3>Ge9vTHnV!|^HC~9FV5Ry(X!to8(Y`;pG94H%X{6;zot{BzbgmhvdlX~ zI<&01@H(q`n~yrAtHg}%FiKBbsF3a?Y7RpA`Odlfb6xt=Gkt!_>ei6&9`~#k zX^hp@6K4!nI7vzrzprD2u-}tN6eamOC_{>uKF$vtRL>)^A5eUYhj4-7i-9baE+1fE z0LV&Mz)8&dx5^z+LJGT(>HT)~r-gj}eMqiL?bjsptZqhQN@}}mOT~M9grvZX;u@in zB-3zBZLIQvPWmx@fh0eS)R+`MicJOTeS>|>Zew4~g+oWjq^PNk%SL(7sC-=ihi;9& zIp@U3N&rN+&pJF!zhp_db*-00BPoIB#amiy+hl^>M;Q-@D+j+vQlycX^Z$(=iStnM z`I;BK%$P%*PJy5@kSj`E|aXm;pN7{3qg_jw0(b8EmBxvA~odK89odU>E? z<$q7s%0RGg`Y~uuvD#Tu6h2!W(n@kx$KVA0tHQcACy5KGK?lF@*s<0%t>5QUeN z{~O`|d7C}5CUfQPa~r1}A*@&E|ME#+C=Gw@@M?bsIKP>_aplB9CG+`T_M zfQFexK`k6JcqQ%0AVrj#D!l9iKBoqoa#=tZ$UaUz#IDxK07O?74zqa!6J353i`5;Ns zkO{}Z`qYu?e8fWPX|KuM-HzPRk=ndt*!Q<;b5Qs=B&R*V?}mn+jH^JdopCOxU~xyFVA z9^{5Lh4Sf>;5*T+0=|>Nkb&0Zzw(V4S8|-TT~rS?_G(E<0=v=ix6I58OgA2;I6tc{ zRCQSQZzz8R#!?|KpdwM8O?(a;y?ph^s6}C@aMF5Ug=VcG#kC6|lhzF%WWiW8Z!rb` zu{iZf66-I0z8Udamig4BQq;oY2S0ZGiF=a+>o=AB1uJegziiIzh&B?` z{h3qveWx{8Q3daH$@pJ`cu;>#=2Gf3t>J zwsT>#q~cLEZ4Adh8!-KDIPi$)OxyutdGl>lGQ^*`F)LPh{Cw|^Z|lWB6iXn}n@We@ zOA59NYzi@_a7vaMf*2DH#sYNs&0+K3E;}8QJl6iCsqrHZLhk}l^(arcJwH4|%<{qQ zEb+MYD(rXeshQ^Rl_VxlB&^(jv8m_uG1nxAt3|tGwm>|s{5eS2Ojz3U%yDtgIuP4& zWXJO&q%wZjU4P<3&T-l#X9x^G@LnOrptddyMrm-+?QNZ%rvi%5zEC{=wVx76O`b`7 zM=tsi`@_IuJ^xTuH&NOjWBaPbLdojE&%f-NGH*jBkb_v5_?uVa2l~Yna+=zkd-V4o z%AKYGl|pSIQ4!_U;Psl;d@@xYa^jkf+fD(;e^p?0y5(J$rP9`Hf2&dsg(&-Zs>>Sl zi|0%_ccxSHOO0DmFy|s{;?II-$=7wK^&WgdA{~}1VP;s_y>3jrTj}g)8^qJe!5K@k zR6j9EyLE{o)`AJv>NpOZOB)5DhK|Pj_2}q^4u%#S2gLngzutG7fYrDHLpsdRs44 zZ3m8$EKX(?q_qV}rgd5~0z2ndVfMkP#rOHt6qcq?pe@^QR9^71Ah+XwNQ?liVn;uP z*koOot=<3=+=<+CL-se3EH#D_bLWap{4YyTGk~A|<*yGnU*`9`deuFjO$Sfgje)=`^V|HS6u@z>eQ*WsnF~3x zy+VIFFEM-EX+x^pz%k)4i2orm9Vds8L;~o#&pdv8bnTY;=1W?T`|^V)lU6$f00`jy ztK6rq!#^lL#~^zHd9*eJq-LkK+&2BRmOfU4->hF*QD&z$S5#foEX z!L6;N?it3Qln1}!$wFvVYX;Fh5VW5_#dm)YaU!d|k^d{q;WR2L1pwrzyKK#2XAIZu zXRJw5vwzr>-q%cTYDo9xNY8?Ci4X4wFTfy?l2oCo?IlMU<>NFf*Bsey0KgU0R#BVv zt$4I~xAUNi%&U;BFl+A_#VW#CWw*M48bDd{ui(WN-*{97Hw>3pys={{K_ME&NaZEq z!S}GVpjmkrBeDQti;L%BsTg{|sa$1cCUY*yl=&j{*6v=!xV;@FnRCqK!?bfxXpLyj841U};$t1xVqn=gPpETH4SEv;qm6nDt;5hN= zK=;=I5^mLh6iGrALZrtJkUFU}C+qf{Ge8hmT3a~QU54*%x-{DAFk`?g?y>z3gMJeK+Su$@X*Vv5Vo4B$Ka$lY+0TR@;Yj-aG;x zqIzLm!CMglHkljED?|!{#iLYwY~}vzs;lXhSq2&kstw=|Dxw<13HyjRgxcBn`IJYd z9l5w&_iiR;H{W2-@)Y9E5@wfLSHW4%W-BYJApTDBs~=4bcCBghvo$L&5{}Rd_d<|@ z=(B33K<$~_Y8&!$i>gpl(~ss$UrCl|!&dkd<7ac#!2z_GF^YHzZ3&!~IU{AjsD#yo zjbHL)ZRH|>(;+FF^)ga9y7zEATvBMlehwIp1g4=Lg7*UcV4EBdKAaoA-J#tk2D=zD z%o=%Gk6pFq@s*hg$`I9$EHQ));IeWp37i|=)(mo0yV|v-^+1Oq{{SPk!=?c3=~DObIBN^b_8H}Waj9&;f3{}) zn98RvNZIj_@kfE~7_CAA`y=J`yO(z&f~cg$9iCz;9^GvD zJbUMW(BWo^z|gtixNm2I&+~?-8)sb4B?q^xBSRpp66Co+W~S@_lox2Im@ocIO#hdc zB2BiDnJE!5$tzwy8Afz|Sr{o0L(2m4zqAzfzqIsuv|9&_*x@E*H%!M&*%t z_ihG`=RoFd&h0!Mk}`8VFi7snEcN;05K^(YM|O8^$o)p?0G(hMyh=)UVWE=Eo-MPf zV>(w<_pATi;8>I}{_bp`NjZ|sa`X}IQG#Ln>u$ssFz?u56e1EPJckbAjw*i9FuNxZ zyy+*vlJ&mprb-qrfaKIKTh*y=QLFr+f=s$HIbd&Lk~^seuV!9kn*^^GlpgcEpzfpo z@Fsq(>KBbBLu(npRyW1@nZ!*^PR~yWrF+d5G_>eS z)T1Ie#uYs}gG0+`d?r=RUHb)RNK00wU*BjP4|~P^B4z^^pAvTwZ5Prwhd>T&nnSd4 z7ojq#;T?tXExMj`5my{ku<#%+NJ@2E0j+JRoBQ*QXbl6YEFfAbB7%q3UgWJ}d-+}E zPq*-}`-}-uBYHFIMSqERaB}YKycS7W3+M@uvm!D~_eg7a85wBT(# zHBf$S3cISPKi}?@70(i}fFuw7uIxUx;uu|)WEG_Yec;xT5=P-RbeQ1!ZSjE=yzClF z2KHLxi|fypEHf{oCpv_w1MJi7kI>hO0m6gW9*fCDk?tLTFk?$_3K;1FxpssHM@bk6C)*^B5v^>{;ll zUpVFO=t_a?o3}HG=;xe*S(}358(rS*i3J7~@nhNKh_Sk(0^Ny^%E$OP*>nkAuNny; z>4sn!9#`#)z{X2SB9f=No{gp~hp!!QMCY+cGNH5*FA((`yM^K#qf%yEXc_d?S5o_E z3hY#J8pawOoesHzIq;>$820+_T2o<#cT%oM><@;06Z0PCpi^F@h5jn0w%cD1<42!o zhgiY+T)=`LUCergd-Y)>7spWZHlXP`aott0c>oeGBcmrex2DU`I=C{GIXTt$eUp0! ze0&c-&rik^KeqB%!z2 zydJ{VhI6VC=OMPzGC*leTsj+L*D$$?PPX;dzD-Q`bY zCz9Y=36=*-!qaHX=$til9$e)1RX>J)@`^J((VrsaK010&qh0cAaATRD|JD6sM9Ap+ z0v#IzS^8uAzg>LD=*oyj^ooxd$jdJys|7g12YRMol{Zmn+7y%Y<0Cm6ltcYm9< z5qSPw7wxOPrDj^}5}ZS08%4!ouH);a!bIOc;#6YLR-hnS@7NV(8X`6giQCC{OYua_ zU~csVM|$cj8$~Nyd4`RPwEFkP2YyC8iKf2x=cc3w+H?t?HtJ?}J^9Vw zajDo>jX&MPj>9yOM{Kf4UE4l3>6YD#Ji-y7Vd#az?0UNQ7NjL5*vzMaQFlwe{2xkJ zxi4_)kyaz!C~c;-SY`1@OoLav7J=Zt5!6MX9q3Qgj&Epf<J#!@j{ zr^gzU)Fo5VD)(Np z%sZQqPLy9y=LJqggM9tALED^$>U^5vMd&)|AaHxhW>R~C%^B`T_dW9^DMwSJ%)UXK z-BmHoe=`C3!d6I?7swFp|cZmq3TDEZ~z#)U*hF3_xl zo-*DgX>##9sgw6r=O}^Ya*3&ocwF>i&|C}x^jD#z8(2(Gm;?F}-T>onfVdQDCD(yM zJc`u?``X8$-@)`&tjZ0AC;Q6tOzEtVTDipth=!Ss@%&s-K8BdQi~} z$*Nf2V|p~16L0(k*h+X}R&A0R;{ghF0%_lU{VPNx)^t$2*i-LMUC4PWf$xe4MKK=7 z$BnI{lvLsQQMp5I{>#prOI%i)6lpm-Y{fBaki-9D0X)m0F&CRFKkJ@dI)h2^?v<@D znP(|`mY&D*fv=PJ)e7P;B8%>|c|C}tJZH;#u$)hNE>}SHi@NWyjLF^tN5s^3NnX7^ zTa`t}Q{K7L?|wG@hL0DnXxP55_r0{a=bqU;jDj{Q1;`A)b*AJ<&gXr~W+!#`#ypNr z*F$)dsWOk&=3!^r>MO=^KZ&R&%pxjW%coNj+apkV#TU4Ix?pK+%-=>D(+v5ujq6Vz zvp+LB9LyRX*7mbmBPAhP*aYhlRUhbS!p}zp={X6>oN?|A`yGWvrbpUw)Hqg=?UO~|FfB1A z&NhSl&bzw$bVtvzC0o4r=i7m7PB_W>=}jS47uuwaXMLI*x5qmG`~pqa&4>lr3wJj~ zyIwJZcwXS*>_hnfn2UG#z4ENvhXwDPV~HCkv`49Fhmz+6^@VCSk4>MpBjZ?Wh`4m~ z1G&>v1L0G4FiF^FgFeDvMw@_tC>RF)YhlsGcpew+E{ae3zyG1YLkz+!%*-Bn{&4DE z3Y)FBy1WV119(h;q863N`sb(i7FAq%oEe+Yv+sttUs2ES-CLSIwiqS(3!wag?Q)vV z1?j05^nKo>=~u6b8`uAo|BJ@)j}h$?kvY2JYuJuU%gXYVY%y@^^J=A`k?3C*!=rm) zs{ArL+hsJG&mGBPHq#9!t3AO@6h;n&Zz~jCKkTiSMQz7K-^DQ7i~NeHa%(?FbljO; zKYV9!Aa!&RESVfS;xhG%Y!y~)785qLvXO6i%qfaS zqWip9C?u#MSvOx}EsScvh+>heH|+Cy>HQxX8mYMg^4LX8#2`#D{!){ZE;rYDgZx6s z9rvx{{8eh>m5iM>g)4HuQR1UB;hpE3Yfy^Zp-zhoabuLwDh7jrjotk1sP&jBcC$ zHXiPT(iPS_{$=lJ{D1@bXLeQ7Zl)QqRxWPVDr`SX>xf>|96 z%biHutnmDk?EJK>%<4}GblY`O?>8!9yjwN~C0)}PVXmVSb!sA4*!X$?8J)YCYuEXzGQR z?61(MkNp;5F3i-jk+X8en%X7Hg6g*&my0{=A+Gn!y0s4Fd5R5+r?|72>%I#Pe$7~8 z@#m$>Vlc0=3OLjo;(9+!si{Yhy3DmUSsBAcBaE4Nlh2IGKJ0Q}_bqrgo3%+?k>l#; z*R#_f)+zp`TPlqG3M)gmrw+bX`D9r2;%m1-Se~RWqo0-dpO-#YaI5%JZR78)k=HWo zCvuX?)r;2_g)hJUvDadENnCwsBz;=6$MxIcivR97 zqkW$2?H?R+_5x+Nyizdu^v4ZDf<*E{W>imh!>C%%Lq{;s#~rCSMRzGahYs%a6e_Nv z8M8zL64AE{-%*v*>teBEaPhV#Z71%#`AA-cAK$y9x!L^;NlkhIA4LlyloIE}@AzwK zyKMo}jjkn1TCm7c`V}H(eZ%e!a={%yYeN5cX@OLU1sgH#Bzt5Vo7$a8OG&r z2W=h^HAyHx{y`kth|EXd^)c0>6Hu8hTkvhr7f6lx+^=D2yy1LA!)i!yDS981cskt6 zwmR?XR<)DDn?n8YmSPNTiS|0*n{98ppL@+n`qSs{DevvGo%Xm4QO>s!eqZq4R-9+X zbXQ^FZa`JO|M^C{(A}<`V(;xhE6Y|f?`)#*yDsR2=0u0k)1CL>?AZH)yJL4&yq@~t zRrDtLr}~U)*F~br>MunLCnPLdKfls_&b}>;4`)lRY>P!x{6Krh?mRV?0>0}TXh<(B${6&2%$5mSf@9kBynHoD^M~e&UD>OQiJ*#3GfmIFEzesmu zdSmjJ2OF3zG88K%!LsT%5--66kAj1b0omnXGCHYoBYjmNUG6y>F06albWKM^3YzAM zLOA_T!#?f#M=n1Kc3zj3Zt#(I?1yi%Edu%fP)^8Q@4C24b|N3hVdYGvLodl?_FrtX z+KF!c^62Y9^ayo+glGKLu?4>^ zvyf3glsq-BRP&^~BK-3NF#g+88Dh)){I`1&VM{SAxWU*jyz=Es&R-@TEy>*n)+Q=}>w4j6hk6Tb3dlPf8OM)5yd7paA_**}u%{1BF0#La$^j*VR-lM-H< zAQ3}ju6h!e8b3Y?dWBqZoX=SPsB;rpws-OG2=$I7ame=*EHD_y0545{3eICGzW(}K ziM#52b_(2d>LOBuN3-nB8nhiAB?zW%*7kr*Vnxlors=s&wmm!%#a>l^E_C%gDk2IG zcrG4BT5JHA;#hRllgsQeopgu&og9+(`-NS(xg<9uTjZJoy7)f-Dop??;+%7*MRv!p zMy@-vkg{)X>4;(_MjjYZ|1I5#eD2tD$q^k0xgd$^Q~;yuu64Xg8T#;-=UbYjml3%A zuC#PN(W%^V6UEywyEy&*yTsTSk6UcbST8%^cG)J~!0%ZN_!TXeWbO?;+tA$1cLMcQ z)da~-_Ol9Q2N68Ys=ax09%h(`lP#|ih3#q-D_?k?nzxZ(ycmA+`Xu@MTO0H6w(lv}WphpkSk2R%y@a+}w%=Dj=ra|FO z9KI?qO4^(~4$j1-H{mqQ^6LL3S1!gju(NqQ#7#-NWtwkPMn+@kHQZd5U5{ckwG%w_ z{Q;b3JbT&@_I{_~A4)faQwk33oe57t!I}R*6io;3j&BK0ij2{F-`yc8f~PXSn(@Cm zO6R=zswtn_f$^E0dNEH=LZiS_dXLhlie}B)Bd89y-2iLo1>Hx?t_u$_Qg4dnq|zU! zl39PgIU%{9rpAj_0bO2%bf}o0CbNP=5NR0BKNK5P5iUESF9!~K=Qk?`;uX!+V&Ja# zvNvD1$ZR)Q4Hy2ty8TPbJX`#|5W~I0x%9l=YW@yy?}f(*x=BFZwqu!fvmu*lLIV@{ zv+jO5{z~nkH@F8TV<|{n?^vUf5Zuor%GALH`oqQd_r{iU6Br^>o(j3A5zQYn9zXr?utt7`pgFS}tHP z;>eod$#{kfkk?y?A|f_(1)1AAx@yw0c|ZOlGm=>Vx5~CkR@ac8I!@uT!@0pHAkL^= zr9S%Art?Zq*bvCWkD1ZBVYcMgqE*q{TWYU&W6(68ZBJfQKvV+`a95 z$kg?1+}?_bcy%*t>AmP`GEVu+wU}Q?MnL3h!&V;CuV4Vv-`*L;^205&)prsqngQ2C z!ZWI_cH6PFe1dAl#V-C<+2Fl-%6TI(n?7AHQ>X2@k5R*(w-JO*~_p*_8r)rEdvt)(%1opc+d;mAL6X zuE-s5WJH{OFm}$_Hcs?#Z5r$#-`2HXE76m@kkjx}GI~qHYyjEFM&Zn9U*>WYk_&V& z>JLOh)@y;+zW-3hvH$cg1g0e8x|PoXRcavO{6^;WJ=aQWI> zl@Qxl*oxEN*lX!CLxH-dSLsR)NY>RQ%=Zi2yRzt~doHvkB!dm_!b*^pT_+n^Cq6dw zePq9<`0Is)$=AtPp_w0G>|w~arFoTzMn`-BWOiG9D6cB0=2 zb|L%sOU})ZA^RVS>}#RxpAVTs&+Q8&Kb>{+u0Si|#1hgc(+h|LdWDy-7#FD_`Lq@h z#LAH8ol9vAw8sLk>u6rqy57BnFO2ITqLLT#@U~z3?QBOl8p&y$_T4<^GBa<_9+T_e zMKPDFbl|;OKY()SC^^NnH!6pTS=}sb{Y%+DluM5% zq+2E7s&WkJJr>1nvSH0QNg8L>Eh&ZOY|qkiPTUCbwH#u9e0lYR?Kt^^@L!6w*Hwmi z4r_VKx1$#^yShXaixB>dQyUVunc7?)h+>Q~Q-(5AW&0t}{HyMk`PdRIVsi;b8h`TDOn2|f0oOrC$ zFEBlF#WT=0ppub>;GlO;_BKC0zVu!z^`9i8 zD}UyS+ZB^dF?k=Zdn@s9Y3G1QF9T@zD^8YJ3ah`qH>46UrOJc8ToLJu@=xrrlX70ch-_HhY%Lo>p(GxYhWuWSgV@DB(- zxz-lO9|CKujx?}_G3T{dN!1QADJ|1Y=_W#FrST;QxOvWg?YCAA2C(qvgf9lp&SZ7^jU^RI9&##^FcmXpC}1m${*k6P)UTgRc>tUmRR?1bMvNXV=e$bWNV+9C zWOf=EQu@s%O8d!LXfBS&8c1WzOqoKRp6){dML+CIfmEJ45$WW}!kkH1Z&4F87%d>a z{8n)JnjbMn-_TNXbBF(&Rpq2-{f%|JwgIsfTCe9+Jq>pTg?3mzP;0Ug2FY1{X(4$X z_SH>mInwo`TsMy#>8RkkBaH8C=74YEF^5ajjS&-*U2!;y<=1jljylOihO)#cQwH;1 zOzt`#o6ERW+9ovaI5}>fGKMHh)LOo@Y!OtK;a>qCM;HD*kPZ;k$;$(8mry1{iAX35 zB0qIeQ{zzKV_y$t+E;(`u2hXGjs`Nq+Q@!iVeo%d%TV5qdU_Ef(r;~92r;4}2ryzX z6lQg#Y}?Lo=TyVbCt>~CPg3rJlL`NN)`~3)W?3gHOc|=o{RU!TotZ{(hU<`s5oN{y zaK?!%iCZ4)T!TLrX98UZFor^gvdC)EfsMV(k85C~m+GuFVI%)g5arsV8Gj>Tf2NhT z8RjL%}d(D883%z*1Q^w|z9+c2rYR8X*&mYd5HOgdWqHod9!4+O- z9c--@h;1K}DiJ4xZbZy4&WC@HGqY`qWke#ls@u#>G#JT3nYHYS9knaWXo)q8b2S|S zy>?YdN0rq{H%SS%Q|3&WNK~goPRDdW1z5rRfe!;IoqlkFFQ_$azb}Zf%@^BAa1MCx z6~eRa&pJGH(u}3E{x&7<9_|GQj#I`QXvB$Emf9}t6n&DaV=Adja_rzwDq{+TCaOjM zz%Je355aO$Yn*c{r(A!F@Wy6#I~mw1z2~!XT5w7~e7&otoRY3G)J{hH<$xejTa_{5 zBBtO{0Mjur+-xEghZ?t#yC}&z7ZnCHw*>kZGmtDdvqA!?Cp^?MV#MSu1Nk*6?5&jc zca~#gh>6{ySDG22$Xf&+V}m=r?ui{-R$hab_kk=<6*%mfW%!MvIP;joEJ_)>{G#(r zIi`c(NI=3CWHJL%3hOvaFOzL!!lMSQR4~6`9V8GJI2b9T1AtX>jLUHYWCLh~Xlv?P zm9ne0Y;oC4-A)ho%GOZ@Qt2d5kp>aR1P4v`lv|jT`mfB8&M(|FM@499#iBT_CU7SB z5NhT0UFuK1i+Ae02EYYuV+5^6J$-0wEB^9TwJ$EG1s}bvuM&=#OtdPGrHMTMu(+21 zt+JiEG>~s1&)XcSW;c)(kCcS~4VrP9ccThDWGdj0nD|-V*VeIC-T`zV`QA6_Y5ksz z;c$^}yULUUbg#1PHH1w-zazp*@ty6I!s4UE8^6W8`t+P)jFX&vFI5^0gEQ%JUd5#t z2g~D|h0_mbF=p(jk$yecROsSub}LgMDkx0QdS8Rd0=|-4#f@tqitZza>@)TuO`J+T z$dfTz6+Wg=>&8HWi*_-Kie(M0ev`z%hFNF$bWt&5YwN>afT1{5P*=NWywAySJ1L$JcBw^{`n+U-#An5|U zd8?3OQxeh1WO2d&m{h(g-`!D`(aI~7JVtIEA!@Ib%XE>9cU+c?i(!gY2EG~mI-mn; zPa!1^-yE}7d{0VaX&1vR0Zee$l7Qi$S1D=qvv6ala^QOjQA^~6nR7RWPDWhdZ@xLu zkwEirWBO#%7B51OE*;r2axH;l!i@?4?q9$f1ynfA@V9!NW>}^iuYUja(g6^~0N;ha zdQ5}w_Zz<7TbRSsVdh62yAJ2LK(@$J4~%@-HQ^AZdZBOmQT8RPoGzupRMgMq2nDDy zr+S*e$cX!T+4f9JVW!Z~(2-k&(T)hZ`*&p!Is4Ogc4_O)%;l0uGxBH!i!GP0O96l)v0d$r%oTK=iW>cW(`SkYIV{J z84N;GoK;qK<-?mtKd6A=qg~=GD`xM$YubvQHnZBu1u?}!1P2lhpYUJWLwy@lR0gZL zI1zd3`I$gb2$i`8PII_6`gg2U5ZgZ3S(`yndRm-1*f<>7%nD+_ihzuK;=(p!{yZzK zMGA81mm-hZms32I|Ap-cxYBUR@RoWN!9W@-_z*#0#tP@pyP~sx4OrT{f{AG51)Ta8 zDE84U%wX+K$q;a9Gvv#0>VQ zb($|PezRL|f3OaFdl?wssRqNlV_9cZ+A*XOKx-cuTT@F{PiESPE03CRE{~s8@@2<^ zD|^s>vtEjD`S}a2u7*!c;wjEGQ`ly54QUWXmM)f_VR5BtNx}i~7V(|Li^@&HHxtgr90J5Xt^1nt zsYDhvJ8`+Ngdn0T(|5(}1ed9$!z#&;0YaKHjd8&QjX#lA9$J_u&D$Zg{qQ6F^=tVk zD-#?QOPTanCrml$Oi=9i5v^14Ygn!r_lz=LyoaBR%)R-*0LFMZzORcW_D~OQR(MPj zlE+OXM76@dC?P|VB0IS^Ta-zGlrB5{5cRe=d+Suk1Wfmw=@xiz-t1?5+t7aYpJA9+ z;@dgu*ev3Phm_f}%mQQcB&IcNGH{Z&zydg193PJ*0+`aTo~Ink&B~N9$}*~)S;;Er zziZvkV3|h}jh;xZjx)Q@{hWlCoJV=pQN{UpWD9fXj_1cFUTIS-i6R8fQa$oP*8qNz zxoeFU#PJdf)98`Jy{~e>?(Ge5bSmB<3|2vHqk2EI|toYyXGB z`keTfH2DSivi&>`{yXsw^ep#CeAyFL7L{#pC0+B}|4bT|d3(fS69!TXLLdCtP7?OM z+G(3BTZ%LQE-hzh2_xuRqPnAYRgH;PdLYbvz(8kq5mK?Hh!S&!F0VjEW_NtWw$&vv z6PdqeE!pD1#b`2w)ud;$D6y5I1n+6i)tI-)`P@CkC`&L~XLs4+Njz*x#%f6ghDks; zBj0E}yEF46!o04PLBVVs2JilWWMIH?s%9NLRIjD`IFAJMv$#~Wow+uf0=0O@Ad)o| z=GN2*rdn@ctf?x$U|Yi5gD4jq9BB*9ALO!fM=YK$uSVI8GMc8a<$0AquB~10Kmdnv zJ5j~Bz~x=}RL)wugdL?kkA5z-cp%Y0RMx93=6DIBf#}5rAiaE@gs}AzE$%WRh*yF| zM$Xb!&f0^;GR~6n{l-g{E%cuW)V!1zU>lq_H0b8KwaH^WKtDN%z&zP3`WaCnU|Wfs z`&F1!<+y+VI$vQYydg(mTd-_G)%t|;BYHye1`jZ=Kv_cNs5_Edp}%irJko^N+EGej z&(P{45-}*obdTv!K=tL&y?gtKbyHPhr0gP=d@#dSen1yqsnLV;6yL#OU%I?O-^mg) zN)z5muIvSd|4wrDL|5v9ey|->r(r$VAowcrX02^GozdEA5XLD18CB9yuO<2xwj&!6 zo3?`cwVFhJ>^`w9Em~H0R?c>wbo^7sqBC><%UBBz^bDbiZ37~}wMu$#R+_faeHjtm zz>#KV&PoUo=Mv`oLW)ce?!?_A<^cL3A`=QsxX%B>(YePn`M-a>5F5r04s*8I<}{}{ z=4=}_XHroVHgXP0M29hB7&hl)hKf=-C6(lSPIIV;GEu2ilB80fpYQLV`>*@HACLDR z_x--E*ZXxnU#*((&QNyl0Iuosd?x+2YDlL=fu^ckws`d5+SCC!jQCAasaxSsF^qCw z4zEyqHD(@Ji+7cL$pNWl0g>nL*T5& zOuDk>Upu7k^-SZ)t61Xoxy`{+Kg$A6I7k$@3nJb}ox-@)^usa;IJ7pJPx^%!SnR-# z_yrRDSwH%fu~%Ah1J#24Ozxm~6dCsfd%Z%P@5mDoaypSqhqSiT=&a}d%>K?d`aeXf zY6+2Ut`Y&H6gd&L*vD!p6WT*Q#+vuq^@27?m>61H4s{APdoM-?5yY?mlo6tPV2Vb$ z-#_}wAPT8@6}ZDj-8rBZP)V<;9~#M@4N#{bRL<;0i&EYAwK@eDkv{4s3>6u{ZRr-~ zr^R7&PS&jk3Ti2zj6FawwO%=5`#VRy6-`)B+Z1;3V53n^#zI$DJ1$5c)G<6s++aB8 z_IV7Z?eCO71U=OfFe&UZl(JFd*&4&z_{KemfiuCcKmb?EyqIKIw`wjWv!Je$w{J~9J99(VL0!cqt{~Lo1S#^2gAVgg z|JVRzuH?5=ZF#g%MXbv}QJ+1BHczFa&E-QIZVT~q53mvT>tO(`H=VxV0ix^)rNPXc3b8Ub;afd z`18;Zbw8)$@~TTpLaT%pbHv&UwwGc*A+DOy8m;OHCVFSm=N33F`O!q%7f=JNtFmCN zO$-GduA4#r02IaCw95Q;I5J`}?xC`1BmA;uV?i%;WtG514-F3eD+Hc*$Um{xF>m5^ zq~N})tL*9#+=+~H_GuH*3zT*FSOKR1Gzul7`V5R&9hEXj1pCG!jrb1u-`G>53=R0u z&Sd_MpIobk(@4;pL<>K;7QL$|bpJ@vQz)yqh3Z(MKG1o1DAXx3dfofAeJX&fcu1aW zD5!rB>IX6A4%F4$H9#g}O6*Z!We7u)BG@l$IKgr7q>nrw+&Ae>?K5q;WtH1aLN|fG z_nsBBxx6}eD?uv>LmZ=wJ{98T^T``@EZi^h8ZMFJiM+cdUUSc|Z{oLvK?e7t9l5^U zU!l*x^^)3YM;fbf>^wLg&Mu~*A##A!ukv!H+wXGUuDR@_p` z3!M!aa;J=t6OG)5t`9ykE;qKVP*qf|8nIiSVtt{j91cG+ny}-8S#!p@+P2zn`w)7A z2>yVf2Qm&+cY7DZ8%TW_hckrCTpiLF4r5qg+m4Po+7~1mb4*$;W}Fo_WxY(?4_yjw%I@FYP~n4dfG??^|TLYyP{8NX97=Hn;>dOsRA9z2!dsVJ?r8d_UasGA%~s}_DdW#dF;a?~Se zQu6#=5rRss@RKB*R!ORP1i+aS=9X?>CYlA_(hGKH%g_V$(m{99f=9pRY&7Pa_Oq0< zNIaeh?`PCr?`uc}<&8;<`R1oNt33#8^(bT-K)jWHDV#$69n{U8h{rTltMMbHHW5Y} zcQjgJE~j4I*a-0DhcKa>{ipyBUk)G_wt+E61<9Kn5AQ5c3wqOOx}=7!6~94&rXNE8b13#U6)az z$u-~M(_d0|+kCXyvC|`i{gH<^g%rq*mk94q;w_bl!yK@dN6n>Gtq_lc=Y!A#*^Vv2 zIl&Y|-k0atBSFU=<-FcFJ*rpuL?T>Hd)<=_r5>rzdK>f0-2U?LV_s>Fm8pG@L%p@f zL&RWN$v|u08RaJqzOQod$~RF<>yeXY8cYSfnT!>6b_(k!M1#bolGtn+9R&?E%o5}% z#IVmiq#j6i%}z(g(qbXNAia<41=RjfZ`Dqz4fPZ?cEH%&TD0fN{tX|jmt{_sm`t9c zLxzzSabv1I!{lOc=DYOWO!O*KULnr?B*#_!G?5zP8cOTg9P-fQSjh2yD>Xs4wLE{~ z`=Sax4BfEn5ubuo{md&O=shLocm*)<<&kJ$O-b9j)!aS&N1-M5GsAH|$){pSg^aYe zxWJ0cEvg&T$yYQ<)!QReD95)+-lZBxt zIIGH;K1`a{FAuV{JL+*Swv0V-$Xr?`31l=-z*eVg!)RV(k!0YacnVp3pdWcS*AmzQ zY>`B*ouqjh4(M8Lgtq`obLku2GGW)|cFa>Rla=%jQ9)wt4Hh#qaT!=hy_6(M0G=55 zRNd*61$CE)GfS1}jVd8Tswvf)&Z)JM6n|I=VA@mauQ{;i?$Vl0sdW}r+y+#@8Z+-r zZ=MpZ%yO~|E>mk$`|UB63%N@sYk7QwtzOog*6YCe1kil(hDF*7`lUP$l9~Mjk2#;$5 z{erdi-29?`3;36z{V7H6rBC~5^xT?)Yn-t}9vi6)NCZ*;{<63r zk*Nck(#)*yv}e26;a$RvjQvapI3^hoZHJsY;_YDb= z{@cf;zg1481cl^?rn_WG@*Y?Mj~QZyW_qQO!o~5<+(`Vk(I=+HHZGEwJ4|aE1tagH zHI^N2I0LVzeJ%A2*;4&#cXebj^CbSa@-O<8G75>>KqA;p8}yHAw9Y-ARqVGv$<6H6 z0VLB6?Msyd+_F=%MM|3F2Ub;>5ENH;LP-4Qm$J z0{d&f^N-xg1iuzyl}-U+G3KGP?85jmF>=RoeO!i9flhHA&~y(haGt-RxvZeg9X~Tn z%m2k5cok9P&Hi$$Vx&XTakEj8*Xz0elZ z&R1{*vv)pJk$RH7U+TO<=m^j24A-)-U*=gZ+X1#tCOexGP}_F3V9MhmEHTm*hc1V9hoz&eRC4s^ z>N6E3=U%a7VvwHpB1ngc)##zs_#G2h_7M|Ayl(m-$^e-naE1ul!8)}XxrmR9%=E++ zwTS~*Vzl;R&l0Orf6fMaj`x?1f9}dprKTtiY#vP|;}%C?VQrD-Wrnq|pcG1f7hub> z+;9kHcJh6QTCc!X(RX|nr}by`je6+U482}I3`25-0A!9G7gW=;_%?qvS}QYj8`iUT0^5MOll@y^iX(yy zAs)<;7jaWP@_YH1CKqCoOr*X`HU*_a{xbJ&eNG*=6qdnM6y#sCNb z3IxI)2fk&B9WX?2R0j}kW^&iafBw0c8GcqMVU>(=vgodWFhhCmHALLddFY?akYXG; zG$iYqBNcJ8SEu0+PP_HEeKm`$I8dIkQ}rdT0x^1zmwA~q znxJWNK)%xpX;(i2NmXNR*7wUTHiVXCX;LOb;J0?O@k$WJY7(?#b!-&f-%gzrx`%>X zB-YnT)s2MSU?0xBCv~4+Xh}}h}KW4Vio*14ljj_ggT6X=hH1gPFnoPF~HCtV}l>OO^TZG6LFX8LuT$nLeDZx z{;lSYW*8HUZoA_U^5|@LEk;x5Z6j99El!q6=w5zrkMV8G20E2jMFLe7c!B2{oGZm-k-^NKFR`1Hsx<_9D;~hRA&^3{VC-dV7}y!1-oK3uA)!-8>HJQk$SdAn2awW55ppcuH z;R~_!PmGHbOkWObgL6|zF9>!1nx_3ooALptf8-`wdr|^nt&~CB@NQW|dCI~~5KJs% zU>W1oJ;!73(^fDY>Lg}whVR_aJiTdEm|ZmXa!(m++rg}3v>B)ib{5-a8dxx96ww9R z1(~%E`{_Q3y(=&gL(`ITFe59jo}&d!=ERI@=6@S~wGo}?R)WsX<*nfsUbe~?t$w^K z7}?`>>VZr>s!B=JB`D%crWclUIT`vB1k3U|i@v)?3XN+VW{*haH?eNTh5oV3+a zPWRRU%(bBdtxefYV%+x0`vD0smnw;9eP_7OaIA~*ycRWD5ytB#J{1w#?5jOcYnjiX zUDeGI>7}fFO^aEJ9_nn`;Ly;|fJmdKHcm$^AG|Fd%e0E&;|$f}5JPiwUnzduCuZzx zUKw`H+tAbu_}Ku& z64on&PP%m^Fj+(GYtJhPzD#vmCd&7*8tLJ6%XW(uu~q7V7kHE;oT40P82){{Wv04jhEqF6O|W=PjvBan$Gr->phV@BQ7D zAusP|u6w4Kq#y3<74X+4lUX6dmmi>friZRvqDantAZxGV>v}MbOd$KWmiD>y@NT?>SuxdX|8wH2x^m^4Qs;E=WaV$kI+DB%)9nc7#-vB^29KEeFQ>w^ohg!=N6i3)} zz>k!3w9cuB5k}tSo;LQovD$c+&mxObnBBbiTy$7dp=6 zB;gNYwKy|Qs~c{o7N6flq4WxfD!BfE9dzui+8R@FpMnf*`P^q;o7+e-fHoA!0&RQT zR#s16?$jE{^gg||q_7MklI0`#_oN8$BhPLS{Ugz1afkn1@6h>| zOEZJcVb`ZO@N(m6y`sg|;*EINqG)^rBdq;uWCbfGzYC61pEv9WSNkC&@$ZqpTAFux z&GWRAf?*y<5T<%Sxu<-0bQ?ZqH&2u2G>AtT-lIWX+~gYQP8vj+N#8?zL@*il>TY(9 z9QS=*b3c9-j2U3f?1>dp<~ZdpC+%h!t2Xx>0NeRo@_YIP^8}JWiIAe;OY;3j;lKSxXkIN5c1-;;6gb?{ZGxBrt>nJV zy8ZQE%GJ4k)YV*mdPVtZu@{?K%K>LP${o7B=n>~C23V~j z*ZJWCQj>#^%G|WXk@o&jtkr=`E?>8>rxiIM(TGe+ITG;2Mp)pQ#`%fPDa($TIb3K) zP`M_5WVO^;?QdCL%`Ij>tIFByc!2L#ogj}}d(Kc`1L0+NCk^yVj<}*mE1_zpLQ;r0282sjj4Q6ZNRm#iyVPZ={o!fxIE7 zYdJB6(h>TEcf)zVU1Q0mt;WBlg$iPaJO2S!@K@!=l2NOdEKB9mA!@^E-toB7U8U>% zD^zBM{5#-$!COOup)gWZ0#&rBF*MMK46fBBKgp4LNP(%C|MD&KI1T*mVe?I*#&mTr zz^)bL&2%0u&u@XCq-?R@gU(|kUlz<21@LJHm3t$`m7Br{+|F^qv9!}6C+Hu2+wH4_ zYBINiOzeB5;`hucQBcd!`?av<>#KwaLTvDCaRD~lpvNpUEZ<5rm>KD%d@T)Qf0s{k zr&>rqOcFfU1)nP{RXr<(>UB_m0ghfvU%OxzU{%c;Z+h-H%^QnT|JJE!ZIHfme{2*in3c3D{f$I z?whD5D{u+1YI>nnV(-8U1NkH9^Tt9BB$?2<)m~$QYs~1|m)QnovX&@Yre13cKru`Q z+))X__Vx#(`%VAbCl9-sTs-K|lzAPs(#{NqB8PL7tmSu==W+5e=p85`1R$3vCS$5$ z2hWKuM@-Cp{?RvNHUWoe93k*#DyER=`=gdxbwTkdw$sr7&sO3!BeZA^wI)As(h687 zn53`S%)^WV-#EJAZxBG=DFP=y?I0$XJKlS-c3?kl)Zjv>xd1vICTH>h=f7CVN zti4-s_9U=~*n4@(W3i>7W%1>P2b01seZ~aa=08^@J|sgVPV((jkMxmrvPy*UK;NM_ zWGTU`*|Lk-uZ2-8O`QloL@0OWdqcy|BUyG!3NjZU7XhfAX?}{(OG@&X{3crby0azH zz6^&x)#|@an=zu|*J8fon!C7(f^v9cwU&T*TSD`cGZhH-meCe1 z0mU$?STgdSYG`bk!QcpwHLsFuKpdZMnb{_54j7DYSRP@PSY<&=Us}oLr#&_3kEONz z;%|$VrY5MaL61(AKzz;L5PwA`ea#9ly@EPGo$3{5Lo`*?rNkZvmso58vhfcv~>@h&0N1OHt7A>fP%yY^|{pyU|!4W&@J^oBEYoZ=d}ru{6znBOXo z{Y0o#T}0|2jmQQ$HMuYPF`CF$kCr|hQt--wo1ynr@EfR-#fW8%OKYR%%}c-1T~A1` zAReKO0J_2j;rpViS%ft zZyiN#MBt_BKEf7oB{Ql;e%o>!$5hcb7f0)O=UNhBhuC>mk~bkw;cBDbdu)=}wrr;$)<9o~gCe zwRfyup=!Q`fZ0Ar;5P6L^!zR6FiP3vG)0tDYS156dh7v-d zooj9*L%S?tZ)2it+9ox;vZo=4zBZWYMlT+m2QP8exw&<{COPB0d`(4gkQmjQqfSI% zex!}Pq6AU?2#nsc?0pu6O8R0DGT`1O`ADsgpG`#Ef=N*uV(Q@hTKRp0NYWa^1x6@%2PIeIsQtkOmuL7CRI)Ky#0mEA5nI#= z#xNzFci>3B`?hAEf1y}DO@h$#ToKXYp}hl-^C3!Kz?#;D05mb}=JLG}{ootd}AJ&qfWu(d0)-=(MIWjm^lD6TqD~Xi4#|`$MB|{UX3ICldkN;<%%|y5_b!@}4S4 z7Gy$9T)(N0s!{s=aDmKOR->G_QwHZC&N-;xAz9jhnc5GIxOwvDT<38_&Dzsy_`A;i zez(6Pb_`=)iLJA?vr3SOqJZt0yj7iXJLISv|0a&@6S#Q7YxGjj^LNXW_T9BQI!2hgfW84SgoB z$F(*y@W0j*=s$bcnwwW@3Iw689KYoGP$YuTM+oi^y{}6>{#2;LPiNP*S*0 zHT4QN@}3ajk14)2B+8Aa+a=WGvP(2LD9?=()GoB~u3$|29Y;fChfFk5ZG?AR*vAMf z2#@Fl!g&(|eu}&tSsP7Vvz$zw7$t#Xg(d91smUeW!;QAwTV(SdsInDe!W_8xUeq|? zO2X^*;{Wy`#g_y%%`fcn7wIP9<9R%u9j`V@WON$-xq!b(ID=XWIih~79v4_#EE4Nd z*iK&@qIcS^tJW&9J@n#CHf&N9tWgC7VQGQqSS7mTaWKP1us!c?GVa|YpijENY{M>ELgzoir)r)8&@im zyUX!P+^K{6adkjZTOjJypkj_?R9OB^L{r8Xr2%ntnV+8`U`r2mi__hC1|W~o z)Ok%~BW|h=GeoWya=oOd%MFzMrV!0OK=mF@Ri)v|29!Xq6*Pel`D?F*nn>H`p0mfm z7_$~gAFtURE^F?~5AN0UnQniQ70~JHg3UN`P4HNm!bypaP>R{wsLh6Z7~y`hGRfIw z11$=GXL@_%wd+;~;$7|V$3rH7Z|F7UsOX{5$6Sv2=Mj7H|MsnO68hMs;sy$YK#QQv zY2wH|Xdi4!r9T~A-5f1b{L?z|S|yeG zid*J22A{pDn(RPph-Tc>`I?FSgFm#P!7D;S;t3<~(c#Xe@VV?wLinDrEv<&wxYh4N zh|5Y3`NFI{lCh`RxmmW#tMaBZgc?QlQDt-23p@rqW?Bq7m0ki7LT)X%_frBBgZI@> z9S<%03jmajJioK8>f%b+vt7{OHjnqAbptK4A|Z+^y3q5oz$evy$Qt%td*M+L;K=JEC}K-NZX=+SO6rkP4Ch1f;xUMa(6w&DFUo5$x0*Y+gu zyS)WpQ(Wxl1xB+JL zQI+s>XHf__>n`qKrBCHij$UtFu;5{2{7}J~pAKlQnN<4C(H@Q6xJ#OPK!Lm?r?lzQ zU5CDP=R^zGb?o-0KYv{jIzxA z3kV zkBi{v=Z{nDO8SZ5`cHIn*wd0pI~@HtchRD!waC4I@(Y!b z=hFo4A05BMAJHu>t5DVt_6e>tBI<4+!!Z04PC88#0=WBH5#gxU2tUKexKE;1YX)*3p{Q(!^Q$?k)aQ|>ZCW1g9ayrMgr-7xOgnE*`2cpqH#1ujhnsfr zyWGDPh;A#9)X$K~SoM)9rmL^(=@Qf3V_ePH1|AS;ci>+gj^X}Af(HKSb5l>vag2vK z`^mz{Fe*uOGbn@4u7;0P8dbZ#)+!uoi^4s((| z8F5V*^8gjIB2DSIA9vyMoKJchgB`y2e>cYkTMM7r2TjPLo8xn1%5CUi%VW zWnhlxu;p~Ha(}ltA}JuXT6DJ5)y)K|0EiFBQr3bbH%4v*;i4b ziOC=_6ZKfsVYPRrKoFn;4X7R&hTB^Xsw=L%1!SBNc(|!=JXq@U0fT>9pr&$_Gn1?# zmS%qa@Am}gu1vfhhDdN0xV8)A#_7=G47ct3ltupJn#f9y8ZU`vjWiW(2c5&j5L3ir zu*EKYmA4N(uHh(r?}us~xdHVcqp$N>quBz#E8u70ZFGn9$>;7D8hC|eYF*jt;*)bN zet2jusu%}djXcVao;sK-VH)r5ryd@2kRw`7GifYWyd%MEtog7D6E5UEG#!UO14=k~ z_9cribg?#O4ca$;kndegV;Dt_A<*c;)u!irqZOczWl~JQAS=CKeMtDgbK;@Z!`WU( zVrF`A4fQSjHh|PR3j~YvSBiTRmY@~4o8Q!I0y*VG6WjlGJxA3YBh*_};Fe#Ki(`4N z({0%%!x+8vK4U8L6|0j@2@#ABK=?t(8wg*j`x@TKtmjLI`4k%{W-#?f7~I<4)r#vZ z;1^o3R?3cE=Db;ZDlo;H;^eJnb2~}dM-G-6pla9ro&x3;@1Q|rjAfSdbCA%`&~Heu zAk(l#oAN<4VG63F;AuI3P<;(*g0OL)n?jxp!_rBwqzzj=K9pJ^O+vUD$NX%#X4@vW z%03PTJ%UD7O>?ZKLQq!tB98oK9TwZkD>HpNz+uK{j14eDX}}X1=^yP)>M;xk^2Nop zlf9`2VNJ0xp=Wujg*(-KWJAi;`(^w`RmG&}JXX2JUOpvUEvOO_uoN>v4-G6PsRyk)fiv$?f=gfZLycGc z>n7X={wR|=<)tL=hlF9A$<{~rBztyUHmo+_mDpQ%!T93f7DG}6@87%3`;t`C(d7z^;+F?d+=c@mD4-J6(>NI*NhWwXV?CDG)t~E4HP5T8x&7?3 z3zNdF1$P<(*z;;SW#!{oB@xX+27_PHvk>Ih22(zyJj9TfDG^L9GqTNR@aU*ME!3S;v}!NF70Pw?Uh*dq zw}AKfiXl!Q%Zv$E{6gItSsE6-5;&~SsK>Olu1mWC$msN%tU}^~c5PacOLF@l_W}5M z)VfQ3sYl)!an>4ce-3fA-*s2wX{CWn{#7K>C~%P3n-tnQm@^UXAh2rs6ZEnmP}Oxw zoYr?vfbijM&N$ge;ZpunqvWZH2^zVX5n<|523u-9V#K8GDbdH$T#(A{839$tIP8X z8kmku>;`O@Zp;2fC+Mr&ak;rug+@lIStuun+NzWtv)8t&BsYVuDLWO!EqPxHCj|j3 zk>M_`j|ylSi8iAGlfuT+_>d!KgC?a=Y>j~q9};!}O6t25+n$;u>gwY3tmPDi>cQ+a z4Te{6kMc`gxBVVi0?Z^;0Mnw7@-7AB6cpbFcLJBGHqHbChzLM6IZ?&Vj56}QU-~Y( z<_}2Y#%UWG?|Uq_rM58qJGH4T}R3u26> z>L4oX1%_Okc;$veqz`s#;cw|?ZNI>o>we;yWc!sRQY zrS?!z1ofW~om7jUJ&-*cr0?Z{1qnXEQCWa|Qn`GLvC+X?MG1OGK(JbfFG|(_Rvk15 zFimbfjRa@0xGlwn_lg*rMkz8=drbn~Y2rrXi6v_H$ZrjUhWxR=VulJX>#pMLHZF%V zH(TSn9c@+~lVh1#&s}Hu+RYW9#Rp0!?Nim{EKsLHAnI#HMwwxbF3ulB^_86^n%GIk zlk2{B-Gw4@Vv=^8xD)p5`he`~aH1I8$Py$KL+2(cY@8y6Z)0}$wiQ^}yYBh{gB|rk zt>xR)kf*;`Dm#!BIMZ|01N?B!F2)$I+YlV?sh^-4Jq(i5qZV9xj&AW0C8M0;3TbKf z^e9uooov-~h_(FnyN>2OD#s)9uy0gGka~JV&6C4d)P>kcQsSX z>1@{Zb@_gIm6~VWqke_Iq$Vp4n`pjonYWZ>&At>r7{+o+l<-`eJSntGcsn;jscAHi z@G!=E$%lLpCkuCpmdQB00&S{UzzY3BYXf(dEfn(fa?=eQ@&sIWMF&m`IXD|_wHups zuA7qNrQZmBONq!-7>g}TRHc}jS*PWfvkE&gBZqUdbDiI6FRSN z&NA!q9vB*8ANOL1wMj7070r`RxYK(xy7!EjX}VCwTzm4{ag zNghP~{x@M#&l=%-dJ{v7$hc4eX3vK~Z#G8&hT~K6lmNKyENeO|f7+_4&~|A*On=_J zwJlZbLR7K!jxU2X1;s{Lv;*VM0s6*drz32kw#saC6` zq(Vr13OwszIG0D%Q`{rq0?U>^_ljKWYqfj4F_}Mh#i7RSpnWJI!ib)gBPScERS4)z zJ1Q_@K`MUB_VVaGxU}f{)_NdYK(gI*H*<=dr?MuMcBN3i9aE$O)GAr@?0C_fd$oj} z-m|%FMUEYW}_1B%NYY3|y2_nrsaa%2L6$_Jm1d_l_XmsZFyz43$xf)Jf zi_R21x*0lRm<>B?oB*$OD6lND=NRA!d!GJNwZ}cSP&~F($tOty4jhouj~zoE5VJ&{ z@GjRt1&;nqmuHZvuQL=(Q{_Xf1r8NlSaYL4AfA{=Ux*yFgHjG!rX<)y9R|6La3Uvgej zc+}Wk%_ig$S|z zj3EMw0Ei<1PXyZu5Wx|p@=z6!?g`;gH*w;w+A;mYUJdC^MSqT5BL`A%a?s(TQ{5AY z1F#4)*c&q7AVNx0I;3W_R3Qf_#xS{+5(ekx-v~3<`vnj+x6{EjbbFRB#EVPr(}rRO zY1-1{lBc3vYf%U-?ohiuXK%L`1|aVffj@=~2E>ZSe(xbrUhWg$LthK*6WqgJg9Cv8 zA+0PDqW_=Gk8@V9{@eGj;-B%}P5XZSx9{TJpMTB!g)V&k^XGN+mTHR~w7pu>tKTx> zR`;JTwZBhgm@lvB=B=?WyU2gM9w}krWNpIX}$T4=-%j5Q+-GB|6ZkI`t$Ff z!KNzf9KX?|*LKj=+jzq=*%6_9{`<}Ka;rS6`M0GXL)SX)5?|E}N)J$fM|B{AIGq~o zTif4tg0foAyt&_X{?o<3=VpFevuwrB@%^mLg+LJ_rFZFRvd%yOeXQtudr~S`w#z`hF04T>8~vA!_V&3&Zk&%(Qdf!3+2z}PyYS%YVcgva(l19 zh(EY*{PaW%P~;NmzRERpWLnj8n>yxQBfkx7v6tCHek$NbI3+y4tE=U#;1z8HIW_<0 zvVAiH^&*B}(#mFaHS5nku-mbVyn;zpsj!Ywf7a#vDLJK{)CpWj8KyUp;9u6HW0kw5 zx+k7SE}H&4T=+QYrEk-Qy+AWUI&J3X8NZX*FVf4OV+KRWQVvq(E)e_d{r~N&fxw(D zI=0rW(Ynq(EU9un<+un~sdsJ>GeEuZpSc#hQfB1YuR(B?3i56idUrDSn)S^}fvc6R zFiE97QVjbHS+S4!$yXQju9OKBx<~Q7-DYG%>b>Fm>lY-eY{}HcT`<9S`4W7^d*Q4o zCm-x#`IVo}`SoQ{W>U)Xk7HERmop=`d?kE9&KD#vEXCj^f5Cmr>I{ahSC(Fi$=rD~ z8Jm0{grj(A|NK;bp^Jj~na?x7%)fTOS)WW7Z2Tdb>SdLG)vA##JSDE7;d-Xrdz{>T zJ67@Et(1`d`M-cischRxl=VauWI_6G-I}aeZN}1Tm&hN9cOU4TbdLP^S~PrOMd);b z|0Utay_#8+!|dBd0>_1pzD-T6b5bpX+3fE>_MBst_@eiecKhw*vyPTV-Ou+$(NhKv zMZ7TbmNCHm&Qi*K)(%pcsatryTwLDROqcFMD=Xg!vMCM8etA)zqiN&6D|IDuxTFRk z^dYVJkNCZUq%PWC9K4>1_NTO@-xjINKir2Jk0MPZmG=h>ZC_$utp2ca*zO4V8Zu8D zmEDk~`+oIL@(xD{8&I&piiNkGIsB=5)2MB+z=Kyfe1QM4{~c?y1LB`8(gJ{}2W$|@ z`!77RHa}dcerGS;d0qDb8M&K1`$n5m>)!k%?=9X0u0Auv3$Pk)~zR^KT=PlEzYTq8*vU?-&C-qC|0yRiST+=v3cpzs}DbCWt6iS zK3E^S>S!g8Kbpro>-y0PVZ>^|Ae~i0$JGxFmmfGpJ~FV% zu3KVyav;*H#Fn$smD7uFqfbSCNT}P@-wb!eHhnIfXT2|J{GMARLrT5T2Y6(8JN3%- z{$94iv!QzlGBeem9Mx~mL~U65$7uK+I-Bog`|XfU5}AGBo}OR#_B`$Jn#eVBMB~Rt zuhW*{qDOtXWTxdkF=eRf9{62*2oj?Burh6Ynwx4Ov07x?@niHcjxhv1&aOB`|QOp$1WB0tMLRKE0ZhAnL9C z1K9NRnw5$1O?{d6L@&{k#F@ghkQ>5`rU`S$l?n^~#HsnfNy5;&mj)p zY7w)EK3i)OXVR-gzeKG5^gV3-X!aBQsb%KQ4Uszhgji}FMRAUWAibS@c<8rE&)MUZ zDS)A0{#{)sY>kiJtFu>*Pq@PF-Q-#ABAwn9qsI$Zm9G{RT^oM$%bIed1#3{DeNQdw zo$e2-OvjXscTMQyL^0vZqA?`@;KbaAn|$q|LTY>?p5TMMlrB6n0h9&8NF&MF+gaOBTG`xEzIa5v}ucLVO8 zY5$x@i|D_9rpon&;+#dL;%b@W|GIle0!zN-H+Y<3%z0Z2Xj|8b?Oy1NdbaO5Kw0jM ze=+U-&1rd9qe+!hFWUI!%060*YTpTM^A2;v(gJ9gEsWTh#3=Da&Rfr)M&K0Obye}89o{9ol!(Kat#z+L2f zNSSeAhVSrK^Jl^L{MFOH7PQmNGGngoA*z%p;COa8d6`1G8oyzX2^v8L42bsbjpbd1Be;IPnaYHE4#C$s6Bx1@`Vs^1TW-?zX(q=E6>7u`($&|t>eP%85PTR)RjW<8$XDVTWUQ%T`-lkQ9Bje z8p)$ZBjbm8_|+a|4w3xRZANaz+%Ut~Y)S4&lVagb1&V3qW7jj!=T`uizGvH*$*lM+ zp8Yh4{CxJo>cGMCCx)$ilXjoBxL~H;0r-6^hug@0pM+-`uf5*cm6*}@J^uFJK0HI^ zwS>rpXStrkK4VpIDM%=xhw$m@bcxC z7x#Bxtsh}MPHVlfwqrsA3FOdAoMl9@Q>QV zm_1V5zoUD?{Bx%ZOv&PlLwn8H!leiqk;d-lIaG0UW)Nlva8E*`^!lZ%GYRSsT+c3q z)L*&_N~OO2(f_#lZt&muyf;6OJZ&pmbQw>{0Nv}`z<%j_76`nr&@|7&3Vu+(^zC!U zX34ED_x#SC?FBz}{($a6T3&e}`^3Kw>_=fnbu63~dM$KK^{0Sycc&PK&iK(EwQ7(< zlstN4eBZfCm68Q-AAwfBb-Ywx@aX9N(xgKuXgtYI{gQmnq4VYON|Ddc7av+ZRu}6d zuzng%)P)6{_-|hiH#us>cB5!nZGF_!-FIoBs}zZC%UMC#pS}btU@e+$X1)d|jJcls zykchi>())94q(N2y=%uj{}SS1!op1vhjTAqo6K#699^Bd8>THVC30yVGMYFkVYn@} zTHE~Vw8sgdKrf2sBli|zxI^C(JpTPn-U*R7%a2?0i&qf1ww5kKz~kSDQ@bjEF6t?b zp)KUxm;cg?O2a(ge!>Cr=W`~$1;=Hq7;4m|4^?}F@n-*Xq*B%!Q;UzKEo z_UG(g>wBhJ5|i;pvb$6#A?D(F7iH7*d+FJME3T)-*mt%A4-R}>-@GPN;6Wp>G`vkuD~d0($$Y zAH;Gq{!C&StyuzCHCD&o5~89Q$AkaEWEQ~BkG4%82{cU$sonf(kzef_u)KmCS3SEu zEusA7)_iM5g8j5*v)<<9CmFlm;7UuSx{<`(;yxuS4*&69S)Z(O?=S8W;7{hs@T(T+ zvxN^FkG%S{Xa)1XKr5D!E1qNDwz{=?rt0n9ceC(+lv^ zku0_R7a`|mv-uMn56Ba>{;ag*m$n!{z8(av>VF|&UvC^QaPm*Qo=a>z5JPyFb%-|4 z&X;}{oa`0RZeFWu$@VC-f!vrzImj{xZ)46`!th_g)Vsjtve}*s$Za?s%dz<_lc5-q zLGpUwvd*tKZ#`|cAG`oxW2c?`ZzB;7u8$7{OKE%Ty!UQ^XB0AbVW0Bz1cw`6Em|Se z6YxYGM1Paj_m$ziZS9|jhJBn`%VbPjWSN_<5gEw}S$X)$>PAFvbq>Y$z))&-_2FvH<^N4m` z;WNpc`5?p%pJe5`$F>GPWyZ-qM6hG8!Mn%XW&MCdKlOmNEz3;wpE=oQmCDSVX>41B z@SVd_J>}55XYpXKXRa5hm|&mr#!P?-ivJ&Ym zmt+`at1=`T63|=3TPtS9CJE)5>{wc6KlJi$ye#mx%Rhm)hGwwCZLE9BAO_1}uXa%D zWfv~q!j4}*0yr*=vhk8n8PqWGnZ%Cxg9JOgZ2HAi?bJiIP3A)x+zApFii@)G79DV% z@w+k9@XyO;i_2}?6&Z&dkE!Qn&R!V7V`mN0aKs6>BfRA{xE`UGY|nAj=!nZ__&H`1 z{pSuAVeSJS^$s_QdX3ujztkBt)=lcbfPu9#$GEn>*oqJT}Z6G5F3I;V#)2g)0Zv0(N#%cW87leQk$>CSoox$+lY@VD7{U%WRW_ zp+2LB$m3UzAZ`tpsY2_!#^^@!-@tVcK@xRlaL;V8gQ-Cl%sM6|;&^D{~=v-!c>RBFog z80%<4gO=-6TJ!0bw>-{kuK0OJ@c?z()$uva2QaF5yb=`7?(I(hh&OYJy(m+umC? zcpW@tl32jUc3Eak;z7Xm2XaGvnZSqdF7f4$)$#TV;yi_%C_}RB&L7U#ZC_hwa#m$|@Gi;By+XNaHnxFToT9reNFE*+!`w2@)pIFDjm+%#~U-#d}0DWkq={!mFJ0jXKcOvvGNz#`FdTx zkC6APA%l3&#&hoglYnxYCj(#1^=}>7_*?y?=%UE*mJ_Tk00@N7{dSrB;rzHX-!Y&` zs2I#H#QU3iE?W^2FD+{A;;rE4>i5pRK8xwl5vp8U7uK@+pALa(#tHU0Ar@G(AhU;t&V5@8+VMM@b<3e*We%JijhS|ncm;&^xP1g?P?FWMBrJoy zSrIS?oFC{UBzTuk2B!OxEV>qzZqbV*l63=vsl}38bz&KX=2<&z_T-e2O`H#PhgVT~ zY_aNl)WXLCA**DZW=SQY)w68m>aTr~?SPH8SvqzLQ{EQY!rv`|%OJXP42GRU6GWUc z-a8)NEQQ8pIpG1n+j&>dY+fNFW@L7bF8Dq9Lfh4=lGxb&SkG3G8~Y*CsY9#!S%&7{ zKkDdSxZq^4i0o$7j7dGG5^>U9vN#A&x$=F>yaxr+81_w)>BB9Z!3Bk!WH)ICQQAs7 z!^@+9nZg&rni^6D`EA?~A=4&iol7pH$UaZ-q|s((b!7Q}iw4~ekL(T4z&E6?#HNT^ z?({G7KmKKP-2V4CgQ5-UafS9cC1=a{!!c~J zm&A)x*d($R852DD5&c7E+aswh-NwPJ7kSqBP&^=(IAX>AR=+JiLHvO71ZBKq`A44- zlc(^#g(b02BE= zD(4V#;>%hYon=eoO zd*p-chwT1DFVm6)e$k&HKI0E?Ag15xZ-(;^Wc|I`@Y`*++k6mxzt#-@0775Gg1@t` z*>Bb{XBOSy#=-vIO87D9y`Azr-{IRy53D)6P{l1ewfo5XY@>lj3^(HNk_euP-{GUW#p37e~183V|B0|XisWa^NJPt7Nlj0q_ z{o17XEQR&swh#72sz^f1>=sG3OgWrq7+Debfs`|s?ukno>qry(KZ8T;AK5>X{R#Xn zKX3Gv{k{IrKkA9~Exsd6k7TraA^pGJ_zzgU6UA8z^27H0A7|9rWt}bNSM-PMYGz?6B8GSYx|F_^q}M zZ*wfHXITVIB|o&g!zpk-WsRBePdw&$`U@n*RM?P$3csyHt5(_NbGJ2%Nh_YM% z0J&)OKkEk%hIl?7_kRO1#lDemIc{H8$ChEyIFEmCdi=AGi^KRm*=6dTApZbs`y}2o zn`sXGw*0mHxBZp%uwPgw)9Tf^BuBZCgZ z4>Q#MtJCRV%=z9X**y~J5d-xy+N??MUYaXJiwNIW(eg}i@q zi2m4m;m3@SN!0FH(#t%bKAEq$1Lp(#gnYFx4+I}ze#rbldi7?y^I_uf;CYK>l1L!% z4-A4Nk5+hPgtmBiU!aUg^~a&t?_R&aaJ~@?mrMukq4E>!ZulrkePsR<`4Yae-@GQn z4}#&s+hvY1=0|cloyeOk^7)vbR&7T!e7qYZgNZXN<8SaCKJ*@McFFb=u-Cy#+LNn~(s^LX1b9iME-j^&ZzmO&BYmP~NNS%)Fm9Xau2%Pb(-jz%N+ z8!Vo;%zeaiDTJlE>u-nKB$JtE4xA!-m^fg+-H>~OfgH#`go4RCoO;-XBi0(*FAgT5 z65*T-UC%eK8Q?#8hoaT(khX6}8#dc)JUAnpo+N6_vTksNTfHw12Xo7KLyrz*oI3d^ zdh+%$d-3(~COAy><1vToVf)i5BS%gX;CMYtICIf9b0jl`553rk=G$*}8#p!$i##kTKaC)7K|gb#AqL)vG}$JzMU-bNP@eI1v#IoM7={VJZE= zt?}W$?|)Fi$LBuHwto)!KPTxu5+G0L)?$#ex@gQyvy5|i-x%NIln`Wi+B%=DqAL3c&S;00-58DGi zrhSF#{fJ8&*!3inF~hkJuNRwaG18hG;eEal0?q}f)qyz+XAt07)#^SHBaQjQ*fLz6 zbR+IymLaAP^=CfZ$%%!Q6Em-dUpCn`p3>*Z#$jf%^xn=MeBs=VF!6Zwi(&2#ggHf_ z@)f72t04Q(JOgDPY?6MLpl{A9-+UslzTt`3-bK{2x9~K^<{o@1O zjG2&qw{N?47Ed#oXLp47=MFPu$QQJ~*MSA}*pG|uwnQzrgiZG#n8>k>Fug>NP9>9j zu;XF>0Niu^N?)6M^YEK5WW&Mlct_6%>m&fXL|GPllJxY-p=1U>1sf2wmxTL_mh5Jix$hh z8*R2(d6r(Rw@3KQ&lnd7c|@7W)S?Y?5UlOA^^_{gV7`Bkj8n zch?UL_Z%|GEGH#7oC^pbvdcK^N$+eL`+_!gmRV;5VU~36Pm3J)J#3kZEaMvyA4XYx zj_lc-&TYIpI2&vM#uwO2X&h7IwsA8l!JYMW3nZUX%(K9=fzg(teV0S>ACV7S1Rm_> zM3zJx%Oi&}dgIiTpDmZZq)PmK zjQg3E5_AjW!W+x>QLF8S!pMy9ho|hXlWBfihYO?pLgOE>3nz*i!O0Koe1(zj%Pg`8 zEVH>`7FolISRsVWyxVQJo50I*{n)Z;93_(GJg))zUe}~Y)DYx)iIN@&Pfy$Ntw*X@ z$?q}=(6EFcvMz5&8ntb!(_tB5dbZyJ`|#fmCkgo+A|v=8m+bTFtnvOoi}pCg40wI? z`xnGT_0l81M^1?A{{Vyk!~iG|0RRF50s;X90|5a60RR910RRypF+ovbae)w#p|Qcy z@ZliwF#p;B2mt{A0Y4CoX5sYB{{ZXf{{Sa*iJz$d0Ok7J-X(o2>NAMF#fHD~f8}#6 zgZ}`dar$xfZ|FlmUOue(mpK0b(#yZ7eGUCD=tc~4xvB0M`f6X$htP8j{Y*(+E%~ZC zF-o>(G+y~5{{UjmrDyp;Bn61?>#`7>#e`w?BXHl;hkr-Et^WYvaXF6RxVVSVjJW*{ zrAU_sjG1t+4rlsbmsP}(EfBpn>1L?1= zVpsk%a^k`+CHRK_0QZljqra`fBr1yU)NgtnwS3ohY+?ni|StdKu771CMO~u zvf@CZyGuWYB?b?gnqvtS6}&lp*4xjZlUzA zqc0y*UrLoV1(|@?{z-lyXpCWc`qp9eKK{4#VZWtz%o$QsSMe;@F^Xp}@{-QUa_SNd ztDgZE$&_B;*NTc2Y_UnEnq|Q|BfqV}57OU>hv?E?F6F`Z1}-Wt+FR$6*Njv&P7lOx z1=bqeDFGvXBO@ZGJan$Q9}u{cNbX^_UM0(?GUbzboJ+*MK9}?s{{ZkgoK7W@@fR?g zeI5k7T*DnrM)Un9q;8%=aJsKS%!n zVjd&ErqS2cX8!>3S^AM@GVfpbU!kA;4uA8n{V)WfxpvbueGmQa5gO_S-?RWYVZdC) z#No+hVKrz75~6cpF+CHNSSQGt#0)6eXk5H^aPkw9Ebs+E3hm>#$1wRWG?Xi%dq~0% zt<9}}*mkN2oy6f`B}4wGlz*&`-emc)ZDvRYbDHr18v;0si}`9Yt8hamXjp$US1|*b zPrL%+Fo>8EK6074?uH`sJ{)}NAJmX%G=G_a&^xjlVy|+GBKO3@oX4b_W}5zxcS2V8 zG{2)sT|g4G^bUT7%)h+3ad8Z@23)w^!aA21nSbyFnLy{XMI%A+8G*YN#j8U_7dM38 zS#eVNgWWXz%LuO8VAKln2&$&DE(Vm~n|$771}EGKg}mw{7TiIXJk+}@-r}L>s93b- zR!}$G5e1_168q@88NcnHz*=>0VwdOej zx~T0*r9+wLZ_+ckU0z_$?ROmA#TF^_!2V&XVn6xc*NE%r{T)k}oP9GZ{{R;lW9!U* zmr=}N{{V{mA6cPMs?l}EdeqMq0dkwZIv*i;DJI6n|6sW@-kJQtxN z21)O5$}3hi4*|K4h&yuwE3GxS$Tul~2MvtEosd*s97I!<6v65+I=ht%B1EOO{7REJ zik1V~x8S3$|)F;WZGvGaiRIjgZtTvA4Lr6gyz< znyTH)Fyqw6phZdz^~4b|O;o+}2ISYdODROzv6UD5hWJ3x*~BHVp_l&vrc^B+)jMLa zl<_YD)xzM0IfDZu8$g%HWopx;FhXXyeaC`}2ySk9PWcTyWIqs7GjL4(SZZnX@$|2& z0Em5EL;nC5IE(atyOs61$I{N`FX&2QR^~g*+N<0v8RW&v>wv(SdLhKk+!CO00ySgs zQg0u%9JD<~M+7L2)oBx`Q7aEQRVis-cpzI6$HW-9xP5Q`04Bbxh&E0oMvncw61=N{ zs+0t$-P|XTQwmI7A~k`>gg^sPg4NLQ_u_`cf?h@m@(jYJjMeF z64Sgw<1+g-pq{6x8JQTCmlx(N5;={RQ0JTx)uWf>%m5KYFmJTn8Xj--r!Zf{f_Z%pEpeSYT<7?Y<162DX!lEnzo#rhGYwid)eqbkF zBNSnAq6S?#g$g-EfGbVGTQpU+%h9=3L7_6{7AoD6#SmU|JfM{Fy$B1%@etZSFvTa? zFb)1AyEX9)Imft$#2H1F^M2+MQ!&+$h}P~74MGqDs|6`&bU3(_U2~YuifDo@wz!o5 zvDnncRYCZVa4B^Fv^&vgnjW}ym+CDN<-`q$FFhQ77`0ETDj zafZIH(JoeEGdxFAiOe4TqfsW4)Cei?7Yce+(E~tw4902w(;U+fim#XG+G+Jd?x2|! z*$}GNc?`WJs=xU{i>=(5xNgQ}VTIDa+J&^ol*BN*I)BW3OkfG}{{YCm&Y;-OIz9d( zsurnF-ck~apxxs1^ZAafAMf)mAy=mi0CUJ`*QbAYb*o6+AbW}sT~807i|SlSDcq!F zrmIJu67NsQW&rPe#d2_QDnZCr_>R{+cFag>RF}3#8Y*24tf5{YeHbE9aI|ir3lwIX z&-sW@ZnL?P!xEk>2rxKaNMg2>OQfdEVidC9?kjPXmJ@DefUlU1r*eb2QH_~dPFrOw zrc;sxp!u0H!74WqwgA}KF<)`wh#D6aD=#n^3ohUdkyXaj+uX#{Q5nk`u|8pN(ap?= z3+gZ41sCQ8RXzkn3UchZKnI9l4Se$|ex2vEFx(53t-~$O)=aZbHe;E4$x=sf#} zAYF5a#Tz+cK%-+xtVYD`{7O-mZsP1x>4X|VSqkoR2f5jAs+n%F%|#gjjY|`_(cCWi z^BloY+QBF-&9N?+xZ8Ejut1}b)W(B)t|j4cd5U3YbpTdsCJoL3s&O8-UgJe~?}#v6 z#u~yW!u1A_j~3lQkjoIkG4U-F*(?LeMj`+e`uD#X$M_kA3VS0Wb?#H6--vEdWNiHI z0dTnhj{gAUDanGDL3r7l_#h>vP=P%7my>m`h1b8_am9Lx6x7rTbW0?NS<>PX4tK~w z{&fX8?pyRH?l<+f>h4@pZTdT(GknjKb^v+AD$07tsk7X@3+n#>`aoyhp)x9a7&rLk ztQ1)YJP}6A6^un&%p)egSVdZ(yvx{@UobA|FGHW3Ii%Wc^ti=~FX+Fbn|PZr$3`HU ztZ8(nAJ^Ivbnd`uCe7h>aQj*nGF7aP-577jlPjiDCy2dFKDSGa9sLYo**U60vB2Q& z{{Z<=iE`xgGYw=u8G=Z3aB7$+wT4V$DQKdHDJc|7QnKaluTZoQBDThP^weHft+#&S z2rkQZLNrF(Z0EQzmP~e$aJD@m-9%kn5sbN*?g-ORySk`oO3bv$xEs#n88B9-BDa^Q zBLAuukZl9MTw80X_tboQX~ zL8V-Za9GQZGbp_ROWTj;J7UX_z8ci9agZDw7vD9~dBHR@`n zp2@fp!wyF9ML^bdtNUn<(#rGy0Eb^wd5wJ=pE8c%j(CI*y<=o+*D$|mhg>AkBPxU8 z)Y-dj23Tb=GQCH$0|PR?B8AuHSmc$uZXnw!S97pInTla%B9O6z&>-d7B6}TmoYD2U zafTJoIdE1<}{u5sDECVF8x7Ns1f(V`z!0 zj2HYrXp)O)UFF_9B{D$xg#wVxG5!5ku4`2nv<5|e_>@a0AzY_>ElrkmMW%7Ti9iCk zoXSvfH=Mck6tQaMR$FjE+Q%~YB&g!zsP4%~qnFDlxT=ZKjR7T`GkU3+;km zC29jp#HDRe1U{gSE-Pk)QLwX9JXPFS0wqks++VT@&VzARS40M8EjTzya6U{L5z8q9 zRHocZx)xQ~1mAPoX^D9Ep3?C0sDqgEjT5<#3v{C5XH2`l>^Pn@6EoNR+<_;!%+cItxvANV_S6Y-iIfV+TVML(ij^|Dw=G%sW zzr0d~!7WO24HszU2|)ZsaNRnG2C6e+;8H#oXkbAxt5N#C~R8nl!0|~ z2S403x$5FJVO;H*5C#Fmt~JG9pHYkc#7@<}{=rUw8Mw_ln6qCp+LyTpbR7Ebqqee^ zd_y5EvR#*qho5rB(mF#q$58W>&^I;X`s?%T?WHYP2^g^V=7^XlB1(;h*S~xD@db3Qr8v}T3K*Wn9*sb zEpsR?R;mk{Dqw`>(TQdRR%vDBxR?wC7U|Iz%H?$e!?{aa@g3-z0*K9k7|R$#HW(@a>=;E=P)Ck%8LrG zh`9uO&ZQ?NCAaey6x2mrHbw5ia7FRdxt8?6gk?sS{$PV;3M}R~TIrPDU%WuuG7V}_ zHGjn8i)IyhnKDdY`w;N%A*Sdz9S-l9SWi|@@BIuL4Of5lXU_&WlSL4!2=U` zTimLuc$8tG?3|IALt^4o3;CB-Wqs;Z^QgK*TkZvoQEbAvses#N*iIG`H8mYf{v%{d z{!Mo=&i<7vG1R%V zeA8t%kduj0iNX&dY){Tq0Mp#Hjy%qAja*u}WI2$+&$?p^Q-qd*^v2+=*>9Pxd=^?7 zc1wFr@e@U;yP6yMim(h#VpL-3@e8=KsO_}OwcJ2v;*flhO5C)U5&j%RU!{E=M}Jhz zaK^r6N`xFkOfN)bvI|K~D*)0rgzt6siIOKo)UZl^A_NryWtEh%izTR6V_))84wHyA zV|CQVFA?Ytdx^7H(-=~BZ{{7(DLGz#mTbx?EbFt5AH=DpF;KF#m_p<45DIfX$?hW= z%aZt;VfsK1_4g96Hfmv6$=W#l!>wzM0W}=%7{*A}D|PBpD$$By9Rp;j!9ZqZVB%!J z%+L9#Wdk%f@c~;2O(HHPOJu|%(?T_Cn%s56wphmEmlVM)6U11m%u`)J z(8km#svN?lEy1vRluF<^gMvGXz?6h-G-_XPZ#>Lda|h{aMsPG>l%jx3tPO0haka-t zUQwy#jrPtVfELEv!H-==6$FblFKM7(H7&M41^YkpY%oPtw>XqmTi=LhiDQXthb#d% z@=Gt6o*>4eP@BNiO%CPJo@W=UlqfTs%oVW$VQ0*?YMwib0>whD#CY9qq9hrvqtSta z+qQ8l@p9G+TrjLES1_X#VpWEHK|2SSU?BxlX_!(!2bgvR9M)<8+1pVSuNi}ubY3`s zNrv-ram`BfOB3(z3bS$0x8`I3W;i7r!4EQvgi2gOq=2A1bDy{7Wcn=-yg6x0hEvqq z8n}7X#Ipv64xu3}(5;N50*)37rM$dF;OCyEU{e`*mKKoo#lTEs9Kl5@>A7!lv{{9a zg&PONb#4up5Zuks*HIrR3NSR=%mYi5R=9_Wd*&9dq1m4TCz2u79%bUk5h+5*?ZFiN ztmEl_TaNyT6U0_8(543AhK3U`6C`2v?J2sBf;r3l#4H?mhp+7lwg8m0QI0;FfEmYE zf*A!pj0Rm(1hFrfcEnzMedjBmM9$?!6^ux?9^l#9K(8waqXrkp`!NQMN~A;FZ!PX* zD_P=TbV~|#=23WAeT@v^80QF6gk~B}@6)|H>N*+=QPi(hoREht-eLu}TY?H2Du|5; zE3-$5pT%khpm9*D7rTPp#X^C2hK?7BQ#7E=!n{}7RAiP_lx|qS_Y`UNh9k_nLmkzZ z<`;D2f%;UitdJv47>WuYXlu+Usjg*^tz0V?#BNm^$LyB48oJLh7S197yhSe0m=^6^WU7@;pvuV~DDlJVlyl2-EhAFQ)3?SQVVH3&AQ7Z^`OgBTe@f zR1xN0GEWhqeAWo5cW_7@a|*0npmD5`S`V0taZ;w@84NaWJV0MC5UeD47016rTaHoO ztLI>~aZ(oB$`ei-&Ss$Ld4Pfq;P`=8yk<0EIg3JQ>zI~atyLvoIuT(WwO%v zmTH0j0LY`J)??*(KN8)g<2*|hk1fL+7v>WiEEv?wKd@uvl@Ri8DQTS|Y2<|(qU0;V z5d@>$aC(Romm3dq#LFk*3LMj1a}bt*OFU1@@c5Q0v*+R}F`nh&4g^sVvKvm=cXs#3 zKX~#YEh!p>u(S!l6)a16EQGtlKwxnN1zg231D)pCfLil0vAd~JrZ`^_TSnbXD$TPQ zUoPNbc;+nMGbj0uRWU~91|loVxZ|9~rN&6DD=-f81589wM($lKYWEqO;4>BkHyWT< zn3L4ndw(JBh))L9s07Z9U+f?Q;anseh)i4$%JjFrfD zy1~n6dyEwZfU6s?AMC|NHa!*5nVsEWFa_E3kFzQasYNTcjYl)GSsQIH9v~N)>~WOm zQwlgO2D=P8Hx)T)W>qpsq{~$)VNqZJ#lYM~g1neK?r3!20#X81brE^gO@SD#?WyOt zzq~-kJG)VFx3!F#frbY(;s|q}a@B$)0v>J&l|02hjm#W3&FUbax~j}}f*vDWwOGBe z6d}(LH9vWs_<$>zR@x$8cPyhW!U}&;fH;89o?>Lzlv)=L8iGM=K%7Lub_k{I)7fKG zwltFzpzoNX-JQVAKJyO1a~e^yHWaL8nARirm(VEXsMJwVAaJ8I$hZz%F>ehJUKJka z%y=1wi>iv*W-3Q86*7yb5vEe17r2xInL{&-K)Do)X5gAb!H(LOXPAJUQISp{#s2`y zxr>};BzF>2w!Vdk?FCH5W#(x4WaI4p<(-Ju`HU!+pNT@wdbwh>rUXe;!{n8zed6M& z97gDDh^zY7nDDaPPh{-0d4kRr+uHvC*luF;biFVh>n$A{{-V6UFp4!TT|)sfZ}(9e zv978rZIh^*T`J6y&DPhKCr`{Q+W@rqP3{?R;KMhFm1Jsy-anYy-Q;#|z2;Fz1wmGA z>IHkd|{Dfl(sjW6p8JwcZfsQk)KWfU)y7 zYNLPy%(!kB#ygdxWMh@wqbHa)*)>4!cT4D_X?=tVhxp}d7Hc>g<8intGo5KpY z=a%Nr1Z>?F!Axkxtw7)LMa1KSo-Z-ZBL&P=ajvHX>%_`MT<2^}2Ly8GQRr^y%bS+& z09P6R0PJ?7a^?Gk917k8H5z7vcNwFg7ay=;n_$x4jKpd+RRC)S<7IxDZq`g4z!W70 z7SHqZ0AG7Ubum!&1rdfVqfy4*^MY7%X3Yl(Jqpl@tG-BavWg}g|a^hxZJ$?b4;Ws=2)YM1TmH6VeW3xhh#X{B%MUqlvmjIV083i;Hd}S3C1*aMY%DNsO;)9g zbe3Y^0aauD{^|@Zh-527m1?H}EMOI+00Ix6Skbn1KArS)oawQ8Aa5j4jatDy2s)qjmdoeAO)?#hX!C$aOza^ScWIbQzo~> z1@x4`*`_U{-p} z?2x`X{lV6ofA$DG7!^ileBjm4#rH zSR-ha(H*r4)Wtxqi1sF~fIeA8F=DVwKoPi13AQc0SAmsSe-oye5F5TVj9LsZNrE}(tvhm16xtg-Xi$N7r8*H zlof_B&SGbY%{5BRb0es zP>7;pp-}5r9mpwK!e0JmZKJf}T*`-{_=kX8&r6M)#dQLdZ%`>h4(n0Mu_<)u!3nj; zm?Z&=5JJqx!1L55D&FP98lW**S*$(70@{EgtTdaS#U0u zvm+Rn;gy(bR2hiFGXh>em;x~zgk}Jv%o<9ULkkunS^P^&OLqB%LSfa*ma^SuVFT`H zY-xr8RS;FG#13Ub*)(+OR#w!dq6jHf8%mZDOjMPKNG^r|g~k3N2QW$vMPOa6q7vYvio zn`b=B)kJ7YMPEWJpounkz%_0-D|s;nW`SivtQl#xv_YfhI2kvptlsJ=cmr7r#Z672 zGL+h}1G^Xr=FBZyTyr!TsnX?iOzE?LV#C5q1XZTh&|ypon&4@M?@@F+M7 zcl|QdtvOQhN3h|(rE=WHU8~yW0~J`6Wk7cbA-_}ZBh0pSv{WU)1aXsa1p@13!2PBh z>luyK2RjII+hgF~#qn7MVOsEb8haP@pcWrp~Mu;v+Fo@EUv z{w2C(h`G4d%X~@#5QE<_FVhqYXpK)d3Oq!{b2>Ve8EwFKre$6w+6XHgOAKJQH2`g6 zhXG5p=bai9|aw%(PdFEMAh7wm;gJV4*2)gA(lVXljgxYUaIF-Nl-%QRWT|HCmVjuBD+e!LW9`#4Tm`Aq2cdNfs|2Hj5fTDf#+hdF~GmqRUWbTz%kxvfA; z9mFmKzz#EW0N{f06N<7Mig+SC*SO7(OOC3=N;!)I&_s=a6v>vNw6grg05a~Qu|H8I z@G*f-W=gM^Wo~98++-h#XCWCiokS6!v+*4=mSHV}V!^$&8F!H}q`hH=MYNEGs*0S) z@Cw$gJVkY3Hf>Oj2uNH_;Rh@$Ox*xo^$!9P#CH)CIa-#B!zYcll*@Y8ve2%)v}J#Y zU=O;BXk?_-l>XUFwuTp6(rfbp#}9XF9k{$rO@4HmRlFa!a=wWF0Gh{%R}}&RQW3!t zu~k)N_*qMU1vq;k&;x>0(Nd^}NYv0+f>~~eoK04~T7ms27Oc*Ee&en{EC3Eyqbu6*}05a=$1$c= zV^LcauxTT*olFCD$%}zo7%`p7bEWN`rNO`qTr<#01<>;ssbOCeJQF-hfwdq$PrU2_ z03e`M)OEnVV?xuHH3J1Ns4BJZ7Rn_qUCU@SUwFfG-RHPj0|v1$t3!Ew!p8-|iB1w4 z${r${CzdLJ-*V`9Ato@+Wom zLYH-vWqre@Hx5A#syfVW%U1IhbbOY}dkMG-ux;L23->CNDiK{)BaNSJ!Szz*pujvT z`o{RZVzQzN5{+fM@$6N=q1x?kQdHU`F$mqqP$Wpfjbc|bH}tqdDa$S}%49bfK-_3* zH0jsgauJsn_{18KV(q2D z>#3!tp~+HmV*}=Js-m}sdW}O36xJiK;rv7vRk)N4Ke%`g?q5h?L{(f8)0vaka=XTN zFws>DBdMQwm#P_9_Z;*@4DK>rrg0qQrztSek<<#{Z&;at>vt~D-O_a}gBkA9HNQrG(nh3`MYS1a4ukFrRFNs#)bilp9I!!iJZ*tW%sD4wQYz1Qu6>6 zWOsr9ps7+P5lp;6a~hOgsGR1(WpEs^ZwMNs>~_!kp`Zi;rCihP3@`+#jj?zlS!-7s za}J_Ybq5f%4%vA?m;w8!p~w^hEh%qM{{XONDP3e;XZ_T?np#@ruG+86Yz~*Wpbs4V z%~Y`5vN3)&D6r<&zr1fVzPXpLdovcwiPUIuD79MS#HpH`iXF=vCz(ONF+f{8iKiK% zC4ow#RPh6qn8e&)v_9?tBg_d%8;QkgT-dkNt`&&O6|SRiH7cS4x`Ykl3YnC`wG^g~ zD&5AkXoWVXzj2njS(RNv+kRjGL`u3mLtWbVg|%m#&7N4;#G;I1A&OQiTEQ1EQvxov zEN$i>wNkBF@e5K0`L8nR=3%2KiM5t_g;#RL=H@~o@0iEz|AHt0;iP zO;fKBnG0{96Cku)M#9L}UFeGn?{x^%CINdzM~6{-L-7#M+lqo@r@X|A^{Ci4hY^L= zI*hrXR<&7KV5^GdgwNhlcM0ji`+-OlR)8q|N(JO~{Kfmh(Q9*wY5Yu;OmPqZtUOLU z+(&%DWaY%QMUD@eiYrboF&pkNb6UHK(Kv{-o6JW_gi@EL=ii};8epmSAqo%n%0+Zz z9%YG+o+82WU;uI%x!Aep4XFieI$>;NmtQB$qWCOV%%JA4b;}M#D=WmuR|`-+@N--C z%#F0xBJ6$Q90ld-V1+9;3aCB6QO~(dLrB#{D@$EUrV531fC|JH_AuTU)|;#1a^5D4 z#8FcVT+5jtUmV%z5CB|+S9Z8R67?MkaW8n8f3h!4%nkT$kIW=E2viS@lIwEi1!!93 ztr7i+kg;33?h0l#)?9_^j`p&kfl{*2AQ!*9w|~$rVGeLrd0@Cu0Xcw0Ql$hPrpPx0 zlnlW%+Dja(#SjY^XPDM#G)&-un5@X@M*cg8EmTz)rmyBUA}sQJ{6{jW*gn$#04paM zRyS?U#G6uLZdZK~+n%DN>BU7?n~AIE_Y0RT_CpJA%zT1wxPld1>SG3oF4cTWEWD)^ z5VqG1#xgaC?RCBR+zz%y zz9F~aHJ`M2wp$P?Y>m|!%n6&DTw94^u4S~ki>L)-dXFi@TsG*$Q&z>D;wJ_(#CKJb z++wv6EyMzrh^p##>49!>Fe~qH08PgY8uJoSG5VR=Cg8yuIcCIiz0^*SCMv|3AB1l1 z<%0!!i7tir73WVdAflg{Yg(tNbRT&|s?O%JT?xQbikNUUxmm11r#OMGbBHZ1x!k*JnWwzOS?Xl_Z2QcJ z!M763T$L2E>2Ik(S&G~_3*@C&;7ZY~aPC@_?mS1N1HwIlcHQ6m%vz!axGgz(mJ*DV zm2llkOdN9>jXfgtFYhTzbK-8zXRSfgnD^M+p;%Sj#RnGgEEz|;fXZEJB2w+kh+Dp} z1icpLrUw@dORZdUP|)!eY_xL>4c9k0XP8mOFA!xbeMX}+yddWD%op_JBkSwI(GCKAy$SU9*bmu# z6>PSi&dLu5>Z5LLERhizozC?(%^~9M{avsiXrFASo`qtTc5`x>M71uO7ah^7sGxh` z`m|&ENz+nA7*d0EJ4;ZBlb#?Y$@-q838Xvi4s4;tzreTy&Y{JQn*ylYEUKyq7A6oA zO?z(104Jm}kWm~uMKmyqE&V&OUTjZ0+WL*EO-Qfg?9{W0E_$+xas@No@jiAX@RzJY zEwUo3A{FlX5h`Guq96AwUO8In@lYvFn>(($^mNR zKzSjOsH;p3Pv6Aof*H} zx#CMxxTX}FMnkn(>xR;`RYJCFy+~y3$tsw|8Rn(}Ca-S!#C*kka5* zzQWkG%UEx}bVa^@Wm#Me=}>F&rvRH)C4{a{1e}t>PC@*Opvwv))Ps%Wb0hj9Y&+tU zwY#=LMt2hvp^OX=3iVccg)0t)06!6Ae;9~Buph#^yU56nDnFb&F8RezbQwrpsxnV@HG*d=CKY z%e!R*eGfw3XJZTEIi1(Wg_>yS6c?ZmkG1u`eykT$!VL46iqE(9rjbTw(DpVZ5KA<* z%xDiL;ImNHE>LI0i#8QK}RNgVCf}h66>Q`|`=tXrUfIbU~vn9ykA|s0(`iRv@ z&@*y8y9-+Rks`hvlVs*V8dVZb)-*ax&<(_IaJ%_SJ3Ns*H2F%1egs*VJ3+G}>ga?O z(%haO1E9xY69vP=Q$rqC9JLJHcjEgmY-b6hMTNI-)JBfItg1h$eSZ$e`(}f*c-Bn$ z@aK}JN$=$fv>=D{b`6?@TG<@g0x_21R2BU+n7tb%{L>EJOvVekD)@1pU8e6IA6}a( zI0{e)iRM+3&Ks7Bg9M=Ej~a$h|B}sg4>(9$XxSESthCN)4m|N;vMxHCO@O*!guq(E z?~Ht-98)xJe1KAN6A*@*XuqW>A|DwT&nfbL!!vIIbl_&J>8K_n5!J>(ng0L;4R&lY z!Zk`4`#s4-+(!xH1*-Ir>|zFo3Y9=7|7He%+!FJ$mOZ2|VCX@2yxex`JEY;9Rya^( z6C||On|6oI5k%aOJUTl4o^Xff*NE{SC6C2)y0hI7U7g}1>;`*ko1Jg3PQp=yJhCdE zurG@vp?Ga-npYH=+5eW5ugFV-dw2+={r2SU#i<&l;hsIQV55+T&(7j`jB-kKUPuPjO<_Z6!nANLoHi@K~*m;gUNVE>&?=`=K22 z9fNCD-9Xjrqy5XKz(|&k09_c^r6<$&8SE=rw+cERA zy!QXcLP8=@KCS=?J`Nm4X$rJ3J3l*@@L zbk|m{hIFkNFNOV&6W9^Iz%{Z`2<3h3n2jly`XgzZVn<*Mts z;{nUR3f|F80tHikkHt;$=N}1s=37L@K1#i#o!j10*yHQ9$6r`@Ocm6ksg&*Rv-vGq zQHhh(71A%`C6OH1aL9q++hc^C8=V?!7C#YyT_e8x#I+2AI7H8(nl;0?+eJs`yRCi* z{|CrxW{Ojr95p%4HcP73zI!jHm*OVhuWa-1g}frvdfU}((8twvf^Ik)(~YP^DQBe^ zr&;tQGWT@9XHdhn$O7>R@Wn_njnbaiCL&0*wN5b8!NHu9`uMC6^>T;(A30@p9*oKK z9oq1I=yL!$v@Cv*OJ-aM#JYgC8^7cyyGa?RbswrxRrJq!Cc543Z%2ig|6lQN+8M)^PH}U&^sOr;=m4fsD zQ^Y(kr9^gx`hFInc99f+R&tQK+?cuwyX_yVGU@dY#`>t|#MhYj{}Q1e510c=G8`tc zF3KH1{Q%W|+Ce_~1Fkk~6;^3P!GU^TGkk(>-GHR@r;r-vI!9#y^Sup91mDKCnk^(y ze{JM&tP3SHu%@1oXgQ-Y?rH`SnI;9ssmIs9`+oQ=OU@hLw}MEqk#)A0Y~o^ec&wf2_PjvmfEl3*w2FTlLtAV8@(P z(rA8&bvMN92DTO-EGOQgM3Xltx&Y8U8>-4u2$st_DYoWd_tgd^sG3jp$3s7(p;6Hf zG5HFyNBj@sx(NWQC<@O5TR|UJoBsfPmfgB(CU%+wSgDvPFQPM3^%;)4YJ*d@lZWp} zss4b;eqH96q*LzDTi9YA2~qwVjMk?hz{Fa|&;v1Gi1WtXm-$2XZ*Z0xoR;iFm8tce z_?zZ--d}LA6QqQnT|`SLXI$_aEKgwbSkPSZq_hYUP&c5qko+|T-m}crN!SgONP`Y@ zZ5=B-zIqxAaSp`YT}V7AX4TWc6S@1PB(Mew%4I3b}*P8R)5BWWNr#-|(IcZ@Ox`;h-h9VBH zEhi*&qD=P|G8tqS^Ex)Sjg6~3tfAgWfrX`kpXP=GBe-i#zF#Qg(SfGCYat8k$F0m# z8U|bH#i_i*v1;n%A$39n_-_~_viT~%mEZKSKSFlp#tL_W=+k{`m(oEy7PBUMt`@BI zIQ-m*Sz*@t7VE+!d|(W)FOia(^iCU2r>bJ`i<)oQF@A%SS8~axe5S{IGleNcDwe*~ z2w3X?C=-2x+{wG#tS_9e#{h<#$MRMG74mSjJf2`gRAdRP($~E)$I=RThsJXR(L839 zd3tD2d<^VgqOv-qqrc~&@=KA|ST&+TLCF!NJV`%jS+tWe)r5BWO6Coo2PqA@@S%$v zTi8q!>S~;ig{#j8M@k3GFLI$LvF=;VdKhvzZQt z*SPle6Pg)(nG(d#n9aVr^GE@?D4i&v0osTL=MoJxJ5zjkzdhHQtUQo)Q8aEnB@Ssn zJK*YCXx4u6&NeWI!fds|Luz!lOT(E6(18A6W7efi&2Wkx(l?iv$+^n662i}d$%lEg3hH8mw;X>USf zo^{oa;>=Jh5DMGHLJzfhQ2m7K>zk>Us{EXV1tjH3+vZCIz`YLG~f1r zV^G+k+HP4vpk88fE?&|l`W3fl&-{J&y9KqFY8l|_Ss~xSg<;_9X8FKqE@;3XxOjQ# zQ^A0f9BlsZTy4^Qy$tBkn!4OLr|?L7enZ0nK#OVe@_^}%YnUqwSkW<6MT7*QV#g-( zW*JdcTuiubN02qiHlB`(ZeEeG$?K9|{@nk<05XZGXEI)im6TRZ7+04aP9|J@`jWhl zUuykzOS1Lyy~k}uFs3a3cbsY%5K$Os1j9v>^^?tB64FMfqRw*aQUeNwdM6Hv_4E;H zypHN26p5f5iI6}jk7LN<_ctUf?NqaObz0Xz1LBCI?^FRLP_UVgahmqkbTm^W^dD|V z#_x6*PwO@1~n3Er0LHqF_$mw(re`)Ccn4? z0;zv0D0?W&7qI)IPy`hn?;j_6p!R4+NG|67W>RbIXq@p_k$q7(#{9l#qj$d5E)m+ttYj)StP8dB9Ie6*9bYs+V+5+QBBz?E6}C&KffgP0dR5KIV-onex|`jVSF2%g(#{JiN+ZC1&3$ zSBOIMQvw7zr-Ln?l^hEFLFw{$y3d|Zy5PLSIB@g^4M%e`WY~9c2;M>`hOWRc ztb=kscT)@nX)EazqPPlS$UZoA;cJtUIE3c2BQ@sdee>du(FBQMb=*VD&nHU>abT3P z9AN<%g2}Z3bQcOK-^Q|HLibrTp{yl!Yg#S~(NrBjgbHsA+Z25gDuP67@@Ai+4NK(t zg;5vchq?~$_&=Sdn{eXSxT9I}Y?M^jB+_h&5l;|ql_ep}_ruAbv$)w06)kRke11b0 z>5eRWT2K8&=)Q33N4PQN&mrCR*^GsL-J}>NFHEmC85NV6KCMD#6m9&R*D0!ePFm!s z!{1=Z-4*oAf)Emo7;a#9e}vhfqYtP%!sx(0kGGX-A8g3cxWQ1b>kgn_Qp-d{EP)Q9 z6ghCM3DH(oBJ|ZEJ7GZO6>;fKvmVCoy-9Rp+EudDosc89O{u$!6pKD3 z!-Dn@sm3uyf1*9;=FX!+<)*gFv#Gix*q3WJ;w;_X+R2THbM38o@VWT1z(t0y;6KZ* zKl31$#h05OBXavXtM5f3w4sBFFT(<-)HyMd9mUXx%)XO7cHI*6(UH zp#<+UBi@TL{S|TRlQkk%B;Ynbsmk}IG)u7xL|=G_tNGRp61*k}ud@KJ=CkmI=Uaiw z3AKGnmRI?9&Ix{BZgK5hfr#u0=SxYanm~$oy{KZPHXEH}g;U%SAI;NuN%U3~jpCSU zw^>)6I1{>t(;Q~y_YV+zE*_{f=Yqjde1)J{rCnx{xEi7?D$=rP&!;Z^@#IHUxZ!6_ z;@Al!FIiszwD{1Y%0q9g>~ktD;kwmK_OO$JyWheLbX&;n&aW67N7=;?( zX)0KQ+QUa^BYUsunAA@7d7-cUTgof1{5p8UPqeAZAGD9co*-A9&T`D3pCklEkRkzF zwPAzv3}G6>!@rIE11hch4i)6%42{20ZdMeiuPv`rmA;y-O6UWVBqHYH(mYgy4!N4? z@J3Z}*Ek!3mVJCx!cXdAJS8^g1XX6qo>`0LK!f>r%3Sd-%9q9O9B`__Pr zXN?rfVFE=4_FWgP@#H(;cS5RLfcPOUb8LD$@<{&);^{-Ow|4l<6II?$eKeD2JkE~E z&Pa&=md_(i*9ckH+cDZ8r|d20`^qaAxkK=duQ7?bgXg_zq-ZRzV2y+~>LSd$=@$Um zara>KE#1-6Wg@%GNRN&YD1}h?iUf^8C>;=^b8#l6qLy4w`@k!c7|)WzGQQISHYdkL z#YeS{`zt_BqTO5BWk9{B8hCiRP37K;u?K;8C)f8Z{7!4FG$I|!bsM>AS!rVmLn7b@ zz4iE)^i~tKiaSJ(zxv5<7Y<_5(UsHG=uc5B_^yt%&O5e!d$hwJ&AXv&-t%XEF3vLh&g+wyn_1u}j-eSMzDs=0+VJfcor5S} zr%l2_$77TI8Xyq(1X+d1q_G+=8$M(XwtIrGe-8$)Xad_+^EwXHM!amLx%DudLb1g$ zM6Oo)Lq+?P9!?9265pu&4_^}W)WqSkHb8mzZ^WxH%BXVSoonZ=^V|Ff!-hbRZ%0Sbnxk^mXjaMJi5(twBM2duLttLrp?4=w4&Visn5`^Ah|_HvgcV?Z#DjjKElPD1iY&Jab;B*)gsa-(}@LNT>QUCP>N1i%!NC?Z4ZT zqMz4#aWykZd#XoL4|Dy2r+;96%fn`-?J}O@k7X2)>R5E^ayXgFOq8>#<;j!ZKsVc$ zQq|8G(7bmaEf7D4HhE&o9+zOe3lWaU{JWF*neuO`yqWQwR;Sz27NM=DMIzD>g2`_u zs;;r{1G#=ZGlDzDKM|+NGBl`MI6YAGnF?X@u9{?x*|nMNNWpYXzYj?4br@j^2!VQf zbuVquR-D8ZRlVUl@x9rTgtPI{M+nmIb+I<)39#AAYQw0a)Z_+iOU;^>mZIYG9Pl)^FYg|H*xL8*ciMMWeA@1zLY6Yd;az&OX+4p4h>z(t?ZJ6c~|gGl9()EDRq8 zLasK9WGxLHHogyAN357L3w{ZP*m-fUNV{7UdioVo2ge~$^?~wc(xW=AKYX+S-)j-8 zp?SJ=Iu;N^ZzemUNz};CXt4ra^|lL}s-JUYYRjkUzUh|`DzArUPo?W0Zd@bNB?cD! zxCr~wKYou~ROZ7QU~(_ZNMYF48;o=nk7A7qH89tVd2$HeBoWj#$XD)_IHH2U3^rF| zSG=)SWGDO^57p;M-WOjgp+9?cNlJln9Xww~Mub4^YcR#uDD|@>ar(oEu;)dw?WSy z*n1>taP}HgtuiZ^Y1+&)u!q(EFQv=q@xn>M=UNJfenpTrSy~$PH{GF4&E zSJB0lpFfIJ!tTpk@*N2YAHOgZ?zjMly*~!<6wK2WrCam4ouK{uIK-%QB|?OfE-Xph z*NR`*57^)@lP|}wi}?z z&VR)MPY|;9_em3&)=AAvDK#y^n>i)J!S}e}3RgJw_UONY%+zU5j%L-;(YvhKV}pjZ zyIu|1KB9pKw4ehFb~*o%sOjv&CseP^>MM{9_P*Pf0`UP=DzjXuOC&ZO-S~M({Kq=E z!d>m%_i?AsGbfB`txz7iFn$%vQgU$xx7mLH@2RgJRP74e=$=Ipz(y!BP^e7qha>k^PkwXU?HJfh_VPMFmheI zsm}#Kry^DtphKK(7M>BQ$Li~@ZPL?NKemKjlyRN1z4L75KcsmYgLZQ}$Xsi$E?vlb zUH|!YZ;(ynI65(42I3@tAZ+WdhovhD#MVuaMRLPn<~J>^1ITmm)}%=e*e?VMr7p!8 z+X}ZxOJ}?KpEeCOIXQlx9}PY?Ol6bu`c4}W98~$FE&OZJ!i4cs1U!Dpe^hPGf4{c3 z(WB2;_RA+Mjeqi7wd4d&id!dBlr_gATG=fecZmr3tpDT9ngc&D5A$^gjwRalZe68< zwfbH522N#}<+p}IoYpi+SZ?;l=pDq5j@FU-jA~JcI*oL6x)2>cMOq150L)W1hj8EXxf0 zW57Pk$8)mK^SF4Bkt4XbC+PI0OFfves@z3GlwM8EqY!uL3z>l{+%-IDcJHLtBF^E1jhGzQ{ znN~uvjYzkpW?QYWIY)?G(wTR-R;WKGm9)~ky|qPh&?@zbRr#e>_5fUY#P}lTK5}%p zQwvd7`P`I(SR^#m#V8^7`Z5zs$7mZh6wLN$HNbVvC=0G}nXrM0AYh!*M9d429d z>Fs@xvBHXvQcskC7V{>V$FY6pVn~#^SiIqt)`%>dB!C@FBRUc4NtSh-GSxi8CwU{O z_w2u7Bps%bToy!7RNeOPqw?)zuR3z@Be7>vOurVjR#q820V+5%;4jNALItK>u^aNv zQ$dw)>7F{ENK7v=e^Xh9x^hyD^_HgtFK2VK*|&MH^8Ab2WFE<)d~yY6_O&(2(zS?7 zh>_pa@LWyg)y;%-C0*y$zgf|lp)>*sQ4GD@I20RRL~95lQ-O5{LaXU(wTrroOLf77 z9HzjS(l{}3mIYr`o~oV4lg83M)A0*(dEYnCi<2nmdhpBJoP~rGz!x$%9lw~|efanv zjnM_KZhIHB+dDq}%*9H&*mzrIa!}bZl~t4IC4AT_vx$(Dy$E4?$03ORc#4p7PT(bm zJO7#?T627UJCux^>%hEs=O@|!@2NtyEJ6Lz#mQxrY&PAv!SFJ~(AqSP*rWFJiz@XM z(LsMpnsxU1(~hm$#J+AHcZzdyiIp+q&EZdX-5L=Q!DnJAJ8HsPb2yrlLf+uK}I ze=bZ-5M9JuBLtq-eIwpNNRe7oD@k6%N{%?>=x8lIz{%Gz9-+6n3wZfZ4{fHD>ThrQ zn(AT<*1I2rE@%bsZQbW%1L$)rQkgCFQao^EPkn|w!>mlzFkky z?EvkflOwZL;>s8S!Bc+m2S8o8zJT39UqJkE3 zQYfxuGaltmaJTc-ZkGMQ%c80ZvrLpvevpHy&W-oBWK<4S^+C*b9WpcZx=r6~t$HP# z@BKA1aN2WPWnST3sH!DzrwzW2?8@UpY^}dyv|wUDI=A-TsmgmY!51m*L*PeMD* zs{MZeRfR-z-i$KiE^Gs#D@f!MghPHY&{pP1;BWAOO5)%AyuvGXMNuIFOY);F74~#T zbV0)ktb?wh0d_FGg2b|rSfX`WkE0Rx?X^7RV2=43c^}rq?^mP&)A#U&i9+bz^=P2Y z`>f$qg&Fl99)u{0o{rRq+a!XEn#8XCImZHt>eh>5{8o=_E>~gu0ZCW$aFr-lY{20=~CDAo|=w5S(Mprftcb_8lY;5ySDET_ekFc1^ zW%}@u0GFw?HcxLbzd37&n$Ddj3mJLqF4jOaeWvh|F|Qy+yesnX#n5p9!YOWebT~Y= zL@_RIP=n`Nev#*)oRx#OFfF`ZF!LEqfKLo=_YUSIIyka(Z&-)MJ0ozVhUjrba7~21cfB z5B61U7ZB|z0W`xGTkCvfTEhWx#6)Iq4IwcfvpKEDYkd?*pbS(*gIc~Npw z`C-QE)lRw84M^A=&bN!}OjY@Y+UE_ZtnDVmGcayG_9QcjmSJY+VOD9QoK-;S(|HlQ zAdA5(X^^~6D?fKI?WV|SH27? zh_R{|uhcMKrmlFZT;;6(5=rF{iJ~%5$mFe%7>QLx*OQDG|9wKinqTdcZH*$Lb|sCh z1XCgc-Vo^nafUT)O@OC?ha!h~6GstqvrkGc^?jV%b;lyx^E%AZBW&mQFW)2Km}>$l zt!~FmU`PLBxe30Lw3Q?MDwlk(>W{$*(|`(5*!$@+yUyyk{{YJ=b?Ns(KcNh|gdxMd zONsff+`1AUky#KW6w%H;&h*(}K!9nte8UA%$~nl6sQTy|k|t>`0}oq&6UOJx|LWQw zJyw)^{FzW?Ou%#ntYFl#eRG3fwxiokrcwJnfQnA2XH7}`-ZhS~T#T1v)w(Km?PIh| z!E;@F4I(fPe}P@z*1_}bl?qw zL;|I<;aVU68!Se?pUtx(d`?-hl5!nTD7y#PamTV`Dbv&FYuga2^yaCOSw7aAU=ooB zT;#OeAeagc+_1x|K&!5%-d1bAQ4J&aOU@PdcCV;CcM{tKmPDXgogp@)15tB!T*}Pu z_AdT236?NJdj0NOeVRrrizt<`;yd9sqMW!>v2GeTRz2nfJ&o4+do!OJBiO&Dr0@gIY-jWv7Z9icwrk}FsPrsG7H?V%fb$=%H7FOB6q(hAlpuZA%MhL^)Y>X!ICz#qw5jzFI z&)JHA(P%PtVOl5I*?RmT0a4fGYN|R(td(Z)_7qeuwGFAQ|06_J&-@o+v+3haU$dtrbvx7T$p+qzOlV;m`X~}pRo-Sk_d_{ zv$|s~+|V(7EKucoiZ<$T*0M5-+2c&zu)gJy{~Wl>QwSfiDKb*Ky!>sSr0urUUHIee zyJ4PYpZ#vijG~UAl({uuIF8d4^Ma%hh^h^@h*R z)`0cZ?TcjNH||$Neq?P@LC3FbjE*9PT|yzsTuOW0cLnQp4&A(o@YlHZ}E+t!yms#?9fx%HOGUCxj4J zTnmntD#{rvY<*~L3I5oNc3EmJZ12p8gA}ZU*bKAdjw{bdvR!qA)iB!!0p4YAL`;pG zv=zIST`>{SGo)Rt=U`>7%&^%=>1qgx{iG<)D;}Ga4=d29M?MV%#5Gs?xPwMi&e*I7 zd(vgD(j_YY5L_u<&iS5d2#tzqUNV5{&)`SkGL$9f!qDllo%8T9Ph>@_J4N5o`vbcC zj*Y40%v)~G_oAw+vci8L&YRxSR4!}n_ogYb@{N~LW!r+>j~UbYPasi9O%wh#X+l#U@v z=PkWvEr{wGzmR(EVFUHM%828mMEALVj;}~Ko+ju>l0C{*nA|p3Up7avNU42WY|qc# z_*3ZIne95sm}OA4^}R5p#SO8+^4qZPl}fhZAo!kM!5@ed_|c@6a^q*q-*ZNtjvpI* z)kp#wB9m15fQup4B@j(U`9{?+*;DJ7?N`YW4bIYz^q_Gqz-x8mNLJZg3P^lE>6oe{ z=Rhm`x+Z?!XVkdh?{7mAO|@}T+kXJbve}NmI0>wsUaE@nXY!52LEXad#$@_4O*GQ^ zi6nGAM&>O{Q*Ms*i7JY3jeJD&AHY+&=#m7NH8}N=?Ap8T6%7iJ0zTL$QXB6mPP6p7 zoh7Vno}CW`EboCLLjwI*>7=c*bBSKO&P^_FC~_iH-9DOrw|<*d2gtKC@nlEvXli^$ z#h%^9#Z9Xf#Z4%+3>x$FX@)uyvPE(XHVy%eBG>Sovn}&gbdg?}NF)2vwrl9dpbi+b zSd;x)efnc!Snw?gD{gbH(Z05RvV~H*LKe~cOUoUfptO&2B!0V^`<%O&mFIY18Dv_X z9p#yN4cEZG41mMh_B8WO^Ie@zQZ?iepq@R3C`GO-FO7%Ghdp?0e>J;8nhVV{EU>*_ zQr4m93JVJIXfTzTwg%fj%=w>~MEM*Cz<=0Xt)SBuRy(-(){-X!Zsb247`d-jt#oc& zmFpX(SQ@_m+t{p0_-e;)(Kp_ElkC{UYVk3X@Rx?dR6Np~uQEF5xYwc|lWDg1Acr2D)J4|^}?re-Rq)2x@ro$JO$K!s3Kr|6N zH-bT;K-XFrvmgfW{#t{(RN=t;e{QcLzYc1`~CyJqUR_@ zzzzMdfsJ(-4>S2B+Zq0YBUQ=O^^k*uzC{_5fx57eTs+hU+Pg7U$U2c^y_xa`IH{uC zZXpRY1P9AL7y94Mjf=O$-IybZ;S5g@LF{;GX5Otg5rv=1t%J%wMKFZfq?9rDmA$5J zB=-D%6i!@n$y6}!Nfz+w##tDI2tf}s(w#Cu&wxFIY&+He04)-&>DrDx=g-77>?zl$ z1rftX@dR>}%ldYWg1n@H(E|U*5l7PKme&PZ`PYW3hRb&9T}Os6Kk$tf>jfpoe%J+P zittAT;ab1BwmrCNwp}3JEzClK?(HN)M(__stFptzE%i`Mlu1JM0Ea4)1{nnvF{x-5 z%$G~OKjrkVL=ar{Qs8`~1f&~C_W507lRgry~ zY&5Re{M2-VnPI-=l8fADK0)0w&e4%$8(_1+=`8Y7g{AISwl+O6NQA9SR%nmHCTQ3j zNNTk;q1y}2NSm&p%b*C@=7byzAUluOgzwpudsL>AwFJ}ym7b9pU3w@^&^zEcnl2Nbc(KNrPSzoHSe8G}BvCte0gVF#b=L?}@z0dS&ytd%%kd_AjDEY<;LgHbKB0;n~f=kk;jKBWz*j@0G ztzy|dZ4g8OCg<$xF!YK7n57OzgQ|Sm`FEY{`$+2{x-C25tuAjkR@-nEbl;LJ zSk=;x8R&Pl6yp%o5z0twiNwM1$p;J!#?UPGYmuYMxjlvAR4jMic@H`l_E+H@(Ze)0j3VaM?i`Kz?V!dK>aE5p) zXO)il?u6hc^hx5p@3yRYOl}-dA5~w8G&yUncCh)Nny>|+Tf3RFxNyNcsA5`?Ht(}> zMWdf6o-Oa*4GzEh{01Lyf!>sQ>05*G9MuJTI*htb&UD}6QPXuQB}wao5Cj!m%(Knr zT-q>VwB_!IG);Z1egEyxRPy?Or_FAm*C?1+h7N_I$jKxzS)!|2cm~>iajx z>p<$c-c>cZz|8**%LY?uUC>XTGZh!mYCbLx*8YKCF>%01Rmna=n=;2-mPsWaC^b_Q zvb>;0o?mF(eEo!KaXv}AB6RejL{+5rE7=QQOY=R1|eX0f6 z&k_w1a+e?E_4Kn?yz6R7pPocrc<_pIwwNhFqe-~9#XV1xy757m+OXLw0vh=<#dZ%X z(GBmfQsVGp6^jRj2_&{oJYIHj$=VO^r8~t~ua&1z&$6qIPO{qfjm6!P;yZ1ylm#~R zCYHaC%d6%q9)a4@VQV*!u)5TJV^g_e+g^n)8meG|%K(~=SYo8B#cF(Q2lb0}N^g4s z%KocIjuKvU*>RWLb4yZ>nxPX&==X_nLxP1>ROxb)+d-0)O-FSnJq#i-rCc)Yi=3bj zfZ5=)RXw;q6X84@b?L!l{MoI^2^oxL?t#9$_Vb=)UGF%lE%0w*+sh|5sg0fq?|g6M z@k^{S1>W0Et33vZZ850B$3XKMGFEF%GIlpKlaF-rnZ?ZiydDZz87FuFAPlu#bd%{~ zFU+H3^HIOe1jbg&j#PMHBo z`8GZ00DS{SER~Iuoe`jv1Q&a^`&U$L-DH?zO91uPs^_c^yB#wXda~rdY5WK1Q1MLH zQ3nVwtyd^mu5;*ZhP=Xx$vrGykBdz-dAPaOV)dxd26!manCmCoE2hjN=rjPa&y+_B zK!b%e<3_zY@kEw>a}*+1riIGfbkIyN`_KL_dc>C=5i@4kd|B0~q5gVx$aH0>!3X~C zswmlPgDRAE_yj>rzLy{nj0>J5YBEO?japp(1CUvU*#WnF9CM(11aVp>cmDf(Viubj zU6!wR9j!|dk{n@T$N_~|PNYl7;`STA1H0`sdUy7fn@l1h>Mk7RxBh$?OueXxR&n>h zNww=yeQYFe8CxMcy3Qr@Q#=f$u7NhFm*NLT$jKo#3tdjwH2=l701D(PmVt3Qd*Ey)M>tfE?%!=mqxQKJZXdi z<6E`9Gg>-KZB5j%kbRG=UGPK{j=D#$(~po&kC8( zC5X9>3a75!J)2BMlrbAIS5RjnpS+l?_tKB0}oM`2vAgDK^Z%uH8P_@PFFaE z*E|oFVu`V004+{-)3Xg^?{z(Xi}M z1J_aJ(8KNr2mNjpozMSD&;q^{2!7n38Xh<5FHf3yL;*CFh*7{dA0_prK`Zoxb+K%s zC_2H%o8~@_4+G?bCP*$)$kU;7yB;Dw!^8OpX^=LKIO$v%oMy|<`!`j(ZgL+A@?|D$ z6&20STiDQPe;|a0aDaZtYs)KOXG=DJxpTNaTbADsA52arD9{8hR=K%C0-gAOjtEDG z^x*1Pd$RJ~o_w5@&F(rW`q_1c^$)!@`_w-3!q884`t3cEm%2goV#HWwMbUZX%v8j# z?H$_>>OwU}n8Yye`EPu>G@u}EqCAWKye4cs$O{exC3sHSn}%5wx7G_4E8Le5TIz8V ze{b}SETa8t&Ft?F)po7eQv7_y?Bx+v@^-#G_F(9Ct!;_}V{liDPO8UtjkSr1S4ocl z+i)}X);)kzS$zQ9C_D_3>Y<{BKkW=CG4pm!2ZQ6T;lG7H>MrGcvUR<4`V_rtsHM|w zl>DV&^I;N@p4<3>l=&Y({P3FUH>xc{1w*C0uqWBG%m-%L7XTvHho|`m?=es8qbC$1 z!JWHrx&xXCrC0$CX$d}dP(|a!*Q+TlKlqr1>-p`Nz-ccJ@V=sf-=WQBDgi*JFUfES z0~zoOWtElT(Dcprbd_<&)y&RFrg}cF(*(7xOh>J6<;|qFECnZwqE;)u(-An%LyWNM z;+w-?+3;#OVvEg)c9U&(r&$vY62w-7LTv5(cvZ{izqkQhHCcZOl^pn;=XZ>!syv?+Sd2oO6{&dCRXR$-1voG6STs8i8HA zW`I<*^8{P^Qosk5H zvvBq8Wwqpyvvx+|?t24*=`?PyjT3?ycRo-y`OCAGd;p~ipcLtQj>_jz03OvIukz%_ zhCud&v_G}RKGPo8kD-+V?On`nOVmr5hF%tQj6D8}Z?K9=l?0lE8g#eFTAfnm4rl-1 z=$LHs^L}(iE;h63HhN|06495NqRDSmY&L$t6H?&8cNixxVa531P%iSduK36Z^|&L-Muv& zHHTa$8O_TtE0i{RF^PkdSJx&fR$@}ZogEpTW}fN|C=xZ4OmRnht=mU_eda&@;4AC})i?F&DU)Y#~@q(CLX79Tk4 z9r~q5-<=37IcFsjmBU$<&PNQ+Ku0v?TLO1#yh3cFR1o^6G7R_6NbeF1T8Cwsk7eii zN_{FLKMY~#fy3fjj(lO$A^{3YQKU9Iv*`^eEzs?g8Wvw!s2akeak8iG@#vmnOg6)w zDQviqBH!I%@L4M zoUStoFa2mLjGz3JKO$s7hw>}xw5pXNXlKiuc6dKNW1 zk2t9Fve}IZg8-uMN8rIJi%5GB*uw&ekb~ScAtn1GVXeU0IC7b=h$aoqGZu>$n8=`u zVbCGeIw-(ZLy>?Edwtg=m~6j}h2I9XN1~t#s<9H8p3i@hLYGCfy;fz%3gA{hp`%e0 zo9>>vxGA=Ci#L2R;zJ!mo`H#7w`8OtHzQ>Ee!d+H3MdkoQIt>2QVjvbPOWL>i}JbO zFMybayK7C-0{eVXoQOrnn#2?e;1OCPF-ptqgl6Qi1b$c%GEQ9; zrC~v}-K{OC6zYx|6mZG+x1tHUSE9?=I(|$1(N;sqfOSwq!JUhWv}ffmo*t=m1)q7l zU5YwpOKOOdZF`mM$%G=i@$g0J`AnoLs{>n|dw_jhYyNvBqr`@YAZCvadl?Oloh0fB z$p}tZ;33P4n7&ErVo^)s*D;0v(<=nNJLaBYUA=-3<0fv7eR=`GfTH~~3#0z#2<%bi zs>)UE?8{<)!Hw8NAul|kc8vA`%t*_p^~VBWm)A8_RpZT=(mgrNwc(90zHONfn{q%` zj5+>mT!(>}y2{HcriUU66js@pI_abr4c%nhD43_={#FpUkcX#Ux&+57Z!dKD8p*j& zeQw0zXGh(X{V+eNgbYY3H&7Us{~upW2%l7&)nt9rOUB{Rxj)H%=R_Fw2 zmn!kuZZZ0YDP zCLxz8mBHC{BFH70S+9P=M54E~Lkt?|iKZSTTI)VC0%lY_{tW48V0~_~7{cuORWIL! z5B@z%^|_qfq{q(!ba}0vX{B3*2xeDy3FLfav;LZ-E!hm5+2cqy5E8m^Jx&U9|i z7M72_<*}M~IXkcY6>&rRFr&o@Qq7~A|9YmU8=Tz&m38SC{|n;qUl^@udJ{e$JkSS& zvW)Smy&#KNi>xEAgS6?b#|29xl9k2H&;@U>X){?Cbo4KqHi)Lp7{#jN+M%-gGdW0smx0BQj*inTgqG)PZCr85`GGRY zC<=VlgvkOp;3fl`jg109GE!HfulDwsg@qi{Kg`cn7!FaJQ6=}mtlcCGx z7!%Kkuz+5S2M0gCpdlwh#d++i3#n2VU!rp{%9R>64LhBddCBwgnn*7;hK9*^gYHKZtl>VY;vGX1L}B zFUgOp@K&wUj?gB%ggTRYntS+bt}P!YB-oc05RUCZHf8!dN3sc1I&S6d%qId4C1zd| zSKXTd*6@B1aw8#}G>`>!^-?jD_~pTOQ*sWygO=lVNsNiTtOScfkreq_9fbJI@t&wi zgd%fK-D#@e@YkF0_X}z1{_j3V%eGF=)VgK=&I}l9=q&39=#B=K$-ccJLARYsty`84 z0G4i{;hmN>%|t|Rc@tS{YnqZkJ{7lrANT@{2+T0eUigKgE_Z<$*vWwfbi+)U8lfgo zH|j&>1l+%NVKX~`2Pb6Gxf}i=OWRtC_eE92uJhA<<518v<~qM zNGfg@f5bu6z~l%CllO{VNpe)v#T_5#a;eiE{{U<;aA8&cr zWJ?WU5~{{4GLG)EQh>o%648XbOiLiVzz9ouTGtmqN9 zsM)+g;bq>Trm!yaF2DoKxzfGWK?JLvX7wrY?Uz`rc2sl{soZ3sYFlju%+AILWwivf z@P@jV*~AnrR@cl_#u%g6neskmjU0Bx45t`PL8Za%F9waW!_;v3AyIb77}RoKUTfk4 zmWxk-H<#@VzZpP16~D~yJy>!me$tE+xI^H8Od_mMjbVOZIDUaQ%viH5rvS~hVBo%Y zH!!NmAT%l*Sr&;<7!R74V|4n3l;^2J#-BY!?f8agvRw_!IlTCa1%n}Et(XYzYzxRn zU8~$pqG0>YD$e7OMr^O{6Dx7KLZhVfsLT|~uf%9yj^{G-`-s2X1r%RUvkHpAl|xiV z7^Y;k_?3qk?l+OQ>HyRO``i#lQe~=h@d#2{%#|=PNJke;d2RWMvZ+O_4S~lQhP+vc zGu!wjvLI{O`OSyK3DP=Tv`Uo9^ZuebEm`;f094N5tavXjIGYy*T(F%u2w8wkrg2^_ z0@+wI#K|Av@8J03Ei+PY6u4)lEz< z!VPUyWz9!ms?|V87j^sn#g$f+HmQgZF}swurcMY_*6&Ozn?B$I?)`3I71qWfC?mz* zC0lnxsPuvH2Z=t>B{1wT%i*U7a^Y2P23XP^Gc~YH2p(o!D_bQam5Ex_5!I2qw^3Ub z2b$b#Xw(>TTqc3|ltk3G%XyhY9bSGTvQFxtd2{Xn1RoO9)vL%mSOREQUe9k478Tw+ z#?=eJu(+w99Whw>fi^mq<6}uvelfW~jDEWrWm-1H-O|C#w;qP#9?z0NL z&@R6sC{k;gou!=o#Y&V{nR382 zALcc3EF0cGeMCbGd!Y*;cuVbN0k~$mY?<8Eq%of{wU9bss%oE5S!JN$6apz=BWjW5 z`enTRp@IfQ&e)fVbJRmP+%_)!Ooo$d9rBi1vVk zMS~vY;^bBu$+w6gc14WB>P6D(EY-j;p}qS50BSm=yJGl>#X5i(Ri)xBOLXFziUnUa z)Eo3sbnz*o&e_Nz?g}a#tOAn9d4)ol9lMH!M7&J`9Mt5SbQLXi1O27(n4pS);ZD+N6{v|rvhSpe$j`I~QR@a$Y zg%!Y&Ay?T?a1lz%5Z|a&V;}wf#cZJmFv6(}S@81>#_ha>!v{9qx_EvXejza6FJWl# z%a@8;h~SSLOPBB&ZHuoF$-YTbTwb0Tm8#-cm>a#tvvpWbVM~Jer_8G83$~y_Ta1t{ znXSSMa-R{{Q^D?8y>kJK8k9{f!COoB;wnnLd10`!opUQ-w3L}+aREz?K4OZ{_TmIs zSXLt)tJ(yVHqFD}2Q?JwUN2DC1^q^bZ2sWDConX#E0PceS*jwCsI9XB1;;RNF#wD* z;3A7$_H`8MiDndhY6Mn((@Sm_q2Zi`XDB+Q>_Yxp3ki@_a7vgQMZ`_O?geTs%M7yy zD5Wx%V%1?L>@ecD_NHLCP!BD)2m)Vlnv&IFBqT7Ya^mr?H}3wXf^{xx>!KOXy`c4} zYz!v};_%}-rB?BWY}=WGQzS{yXsk$SFnJ;d_)qx zuA&y3>Y|jTV6IS?(yY|6Wn`$Cv+XpBzT;VVgLpG6EpFxem5%cT_!uo0^A;+}VBU~I z!e)h*RlaTE{KV)uWM23s@*ux#HBWk+HpLCpFjjQ#KY8jag8VS~)y&Cj;h9BW#LM)j z5s2ScnDTU2+Y>PrYOje;x>JZ(n3s)?ArhR9B`(aSi?qbpS7OYh5+;GQU*$2ZSic?4 z1HbArl-mx;d`hT%3v0$ouQM}86P&~zQDVZFe((vQqAkt7Kr;~T=9a+DE-GThOpHDc z*i2iq`k!ll&_|)pWtmx6C4n-mtzvGixrHuYw8X4mBxui4tIi;+9^`b605*4f zmKCV;h`F0B%^EpFL5XS<i!dp)B?vne8#9S6vW*(`CxXOnfDgLFMz6mTv2+= z@*scqW?E3rVGTIFuo`mRJ;wku6`Riz)KMDs0;@H831!;0xF`j7xaP|=QN*QKQ_Mx( zRc0}4g;n^7qGtEzS}Vq}D1|9snQRnL-NujkGqBI`D2a06fmC}hRJ2bHcLE%++Rq|E0nvB)m~%O)mIhF$ZG1EqxUKjTiuB(8mqrV<`;#TxrflQXs`+@+7se>3`Ck6?U z+|(-qk1cpS>JR~P);r_nn}z3@$mYDo0{0ZP)t)0ocYTcAqOJ<_cFYLo$k?p^01@cC zVl1vb6C-xY0l&y6O zt6ll#V5srpb4ogxXm3#AS8g-7O7U}uYU$lT2NH#c$t%Alv-3Gfi#kUrv^nk1^A;Nm z)LzMEkBR+#;kOyw*0qeq46#+>Z3U{K`F9;a&{>P71W4rHdz5X3`w(n3ajA8=Q1O~8 zyaxQt1e?XYgEbiTredE=#&H*AWDP<#W>G*?1G-h>?uAw>Jo6Ql*tXrwVE!UfR(ZZ7 zYc1Ab7n0Twa7Ed*uB9~!G{JTUIXuC>6U0WU>FH-moi~o4Y@zYFmV#d*FPVXeDYuP5 z`P{b(H8n*FtV3YrY2M+gQO!gZZuypluNaj9k>EIj6m8cLDS2~I(?-ndDrE^^arS{u z*Aeip9WQ3D0tn@p8#@-sS3&)I?3+ne!INu36fb@=9oj>@H>;!MNJy zQ04(D7lRLBpbfEVP*KpZRsGOtG@)XYWH3GqADD_plN=A2_yDxNSN)H|gACh1n;7I7 z%zFpOhufZ0)YMwJ2?`{q+dSEvLA?9&AmSzXE$TUAV=TkwLLc+7r_ z+(MT8*D+fm>|a^wwMOv9rYmN1KgDDcDv7EDmGe=r-^EGlz^{{Y0Y zc#c zQ2+{+i)CsA1;KDSRIr##&m;oYQ8=JxqA+}l^m&38CpjKp#ATT+F77r`zvQ*xS82>c zKjkt}M|D!$b8@3deKEy{xlToc7lXHOQl%auZCaGW;#F<|wWH=fwyV2Qk5Z*<75gA; zox;V8z^73(g$kuW_vo=*y{{S%rJ>&BLxF%okF`7=>9j>3xiw*D;|N3?wer7=S~2P2OH*dZetTLlUj5Y-%k+(n4WYxR%1dFcK74+@Z8OyC>Y%!A1&d1aKj4!Jh z%ZCK0T6{|JP}kA7D5#V*=C$&5?ISa4!steqv*pSUz+Sud&OEYZf|DBV>>64$ZCuD>6dh9cC) z=urv|`j(G&?6+UUO1uNEBc)YwqVN)sg=5~ifb!fRT?vDj`L@6Qz(B<-jlb-~wpjHR zM7qH)6foB$Zm-Qp9)?{5KNf!bh%L7;Xbe7M0-f#(&0^*u<_#7ATjmu)v(%_rywoF$ zm&5K{PyzFA`{o!?sMX^4`Invm1F$jtLnfv|9cA?`$;u*&A=`psy_3rWCz}3#)mVyh znvURN15vcFFbEwVsHnhODb2L>>VNedh*@9UYpC02KhyzcmywNN<0r(j;HP&Rk(ax^ zVuW6K;st?J3L{!q@WH1i^A(I#bDQH+b&}?8+l{RrC6=r&m;j(x7kP;&^F+38f##!s zEdo6b?p%Xy3B&-#j^Lm`e&1)Nzf7j$6;t~j|NfSP`ttSoI1QLR#{=>R>R|>h}twvSltBC4%0Fv1R3*lI0 zzO*rByDgZ@J9%`Dy_K8*&jH>NdEHM&kQ}Zuz_fTSx15vtO zt1_O;+Q$iXYUl1?j>##n4{;VDjeRfiF3yUd5xkHfoh*<_tg@@QWtDCslRqq4SyA%G zOD-Bm#GotZaZn{WF$JeyKF}(Hjbi1|pc-WbZ)_U?w{sDxEY}gx<0a_gHCOz?5mYNs z>ImZwPk4$J5iGATs@5Q3VCv%6h@r1ETNRIGS+FFGrhxHu)H;}?ihI)P{s&zzr-BQkKP=O5w#9yB8Z z!>PxaxWFB~!faaZGt^r7#JxJJEz6@7q3Tv#hQR*-f36!w`VMg&8PGhyaq@oYaYzgA z%&!+Y+(mfNWf#P)0kw4vmoM7}JAu~ig;3JULbrDi{h)Z(pW`re9_msvqeBy6jqRBL zJ1bsbh^ovsYSbuzTwOfND@A-%EYp01S`62BQKg(BVL;X1E+UHA!NjUJek$M%X{}q# zK%&#ja?HAeYl16KMfsG}juuOI4P9s7#LOtw zI)W4fX4!Q~W$`dCF69x7jI}b-n`H}K6?%cRVdhjVhWok5QbJmCRKa#xETY|&9Vk(l z((V`|{{T{hl6gm#(+RWGEkOY2h6P;?#I~9YuHYzfC?Uk4$qKe1)F@!$VU)cyn*cjy zfikr|-RwJ=g2gWYPVQnJsa%KNQQ5qUQp;5X02O3YW>;n6F|a}|Dp=C*{KuiDEem?o z`DYgdCBYBBFoboUM*jdZiy3PAORBu@7X&#HsGFmQ?J3x=52*Z=)67!d1W+==#6QhS z5C}RU-^4>c?=fzbh6m31C^D2N@=!e+^2Gp927;;IYzvsK?94y_H5{PJsG{#@ycm58 z_=;_LS~#03n%%*!bFq!4{6N3ga*(U_6s%Pj8n44?%O+{~zO?A(R!Bv(rn<>|nfwJ;hnSf<)@lvuSp-bQT<@f>GImf&t2&><2 zDiY32yp0sYxZS&3VbeaP%cqG-B$V@|on=lwNZl+3+A52EROE9IxuPS&SxaiN+#(T0 z0+#fh4x{>K4duvnU4@mM^-DSNw=FtVaCi@^>sE-cc>J=H(Q=?khwS znZiA~eLzMukC27RzmhisJ8|Lv%+Hrpys-c`DO*srdN&4_d4Q2{!kN5 zOPcOJtXK;!HbaZxMhN5Xe?nDVW$G=D3w^u(@VLr8u5MTZb{{2dEZs z3@5}x)1sxDP-i-eNQ!eF&)NR~c$cIFVZ`Eu=H<>put%(=FHi-img-xQb6z2A3=8Dfn%tGqQt6amdP~@mc;$mgrQl=M&QQxUp z?hm1HrLnnyA$7j>(=n=8W&~japHPMTk@_OPh>R@lvQ&dq=jKrj6}57lexb94%30=D zXjaK*!>NFnnh8e)3CATL#AVA-w|O4AwxJsljOH43bjph;7Q!tl{6tG>gH<`(isB7A zN&|qwN_i0v78QaB^mAO#1kAx1)G!Vhz~jbcySuqjy$#LHo)z&6Lj?Uqu&WnS8CMNe zRT@0SV+7c3U3h>MtK8)>=3ZE5#MrFenMH8;bfN4$K z9ba=eZhm7_v4$&TsVi*FH)x~aV*c`BD#FVw{37`8vNfepqvSxM?#LG zfi|Bo|14YzI^_b+=VG#q+^X@d|K|%ph>rvc#Eck!{ zII2_(6@9_0j=pA0(!fc6e9Y<_x^WpOFL#+;MK-I#!~oFk6NsTzZReQi*4r#oEGd5j zGdU`c)YaSfE3P8WxSV+|UmFM#<^7aU!`7(1_&?cN;3{sDs3$ z#eD=Bs8|(0kbk(C489J0^{5$T!5z6fsG?-I+jlp#QKDewzAK^P~k@QI1k*S z1Y`&I{{6}_(YBuvVIxf`1_Ei$#xms~RYF%c+%}AyjJ*r(EMaf&1n&>#TolDCrZ5Uy z69`wydy1+ud(5|Hd6Xf^<|7EzTvZqGJr%`q0l-$+IW1CucTBA4IN2F>K+Fzkg$I@*bzAMv?g7<3L&9H3ZIdJ<$P&85diMpR z?zI$*qm#Jld?+q7ETErgh=$xwZHvD3I97!)#*Xy(jVLCSb+X{|5|wG66FqF=TG>#( zMHR^urG^Y`26K!aU^&#-xpxR97Z<6IY)QId2tvg4kv5pZ9XgOHkAbY<5u^3fY*W*Ku3~qd1;I+runFjJoO| zS5d-+nG~=!eZzNHd0+;a7QH@ZGmzZh)OAaiftNXskYkvGPueGVmnU#m@!Z%{E0`E+ z*ecwD{_MHNI3=xa%HN4k1_jahxabSgjmIk6rwkvMM}fd780xqUkVG4E>RohYh6*cu z%R`Xw&UWxWcv&wOsLF;&a7r$c=5z(E?r^X-a6o$Ci~wP=P8oF=4K*27%$4&AE5F2` zPAgLqwi4hrT?>{$4XNaZ#1$yZ9snb5>Nq;W@C2ygLpf9#nQN>}(ok}Fh~P7IEZQ%u zT*@lASQ;m+wk(o=6zhBBd^B@_WJHDFk6#6^PS6uOO?wF+*J{<9k{ zLf9&@n;v4;Qc(3Osw{VlfUq}I5KILMlqD!P=2(Ub=3rNHkCb&wVJT5_AbVP)(6H%_ zd1J4cUd}7i9xIt)8?`ijiD*O5pDgZp!xJN76TH6Vrm2Hrj#eC{qp3nQdYOg5ODbA7 z<^o-Z?nF}A;FQ=XMC?Q;tO{=lBTC$JnaSPE=eRZESmY`qvGX_P zE9Cf>+6?-gFtONtl@g&AThy@_Ji=KHS^offju#TVo>_XbQOA3jeqgUNsW2Tt#YJ3h zP-loD#mvfEu^eG(!MFex+_j<^p|0iRrHZ&#AeQE$*Oi2=f(sZ5^zM}Yp&CCZtpQJ+ z#mXlk=K;#_MgV&}4tOrG54c4Ut{5nZYZB({t|RKVmqTxhjqe=J;7XuLrme+;9dlG`*_@U9Hx?F>rXz#x@3(9&7u6E8*mgRKw(-;$pmm2`s&0 z^AlQH>6o!X5mK;Qx7UzmQN?UBK^2`;Kvv706DV>ea8OG*ocU8;`o3zxyc-CTe zeX{psUS^anolC16kVKsZWt5|B5#FAqkOJGb6sw|9>bE@sTyqRodLflg4B{v&2ksOW zJsXBZG07QWlda4{B5qfDnc5sap}v$z8b(v|s zkg{@dFr^uKOUtQXC*mZx;y(pKgwe^UmZ!uPjZx2;nM`*L(aU5gL!jbiOzvyV`pi!N z#J78SgFzNp4_C|-!ZoLND$MTs+zyJ&rJ(zb^rgf{Mz;$Fv2oJsqiYCRrtn!~`w(hrxz+PdbxP}z~ zEeyW+{6QQ8j;aRLm&kV?Q3fsqN}M@`*yV=ot-{zP)^epg?Kc_)n;d>+7aY?9gaaU6 zpbE=;)DG@blJYX`U9+gq7twl;gO+nKw6*sF2Gn_tuIem}_C<8nFLBE@x*&l=c+3%_ zUCPB*)Iku#R}euQ<~eRUt|Jz=GwCi1mR!rLo`Z8ibbqlaYYV`!=ohM%4u7Q2Ys$M; zDJdwRmJC#=;}J$pO2~yozyr)c7kml3GreXY(R9S&mBT#`ZXg@4dV#&`j?c&u)cM_y z)TPZB1_Lw8NZ(SPsqShz>_sCnN1GTikzH~*lsOJP$D{#7fphajW`(w^mAJyRtBF9) zYcj;QYX&)%u;S^$LTMCc-4lqwEQTx$u7V`#9I_$}CDcv<90WCsLTCnQn2ZQU$tgA+ zO=z?}ceQZ?sOD53Yl_J}U=(eMk(~Y`%GwEZbGVolX6uL?v>Ra4Wntz8tqWfSqE(hl zus5gy(7CW~v0m>Kw|``VO@fxFH3ph*xR?VFDV#(ys<)U$r=~F@Z&9hU z5p68bC{Bu=5!`ufioX%4>R?=>;s)-YnaWrlcOA+H`MOaC zDR_u%A)VC8U+y;xa>9o!489_&yj;%((J&G{)~Zqco|wq-Eh_##(W6niy~0qPVpys~ z$QTBU$2mL1>-;12D~i}ha%rqb0m;EoUPmNmm=21K3JHrKR#Vw4_exWAS>F?RHK>g+p6QHbTJ2Jmvl%5N{skO@ZNOl`(WY#@$KWuz>W~ z{7Rrb=FGu^+LwlZpkoZ<_Y?3acvT<7E3mGjf?X9dX_y>Cx~ZE4 zB(>CP5OyXbe9+1zoK~ftIl9acG9#$|Zf` zmmzQm2bp@+LljC3*OsPWvpFBn9BKfK?LXbcA*X4@`-6x~Cp()!EGg<)V4;|>!-LtN znG5Y0hT;fz> ztNVpt%mVwZE_}qyOvkIo6N(u57CwmYX}%%`O?7c?9A-ODlv`bnCL7dI4?I)@1%DGZ z3^DB-;>Wks6QMLWG;6EsHgd5CZdXBr}W${SKp5GW%dtg%Yg<~2k4hN|woOKUC7 z-EZ7#ZvOGL)?d^Nuq_epD6v+<)K6pyrFe)Li@V0+;)!0L1gf4Pb^Dj}1;D%9#bz{m zj%Jqx{?kx5|2zfn9@ZGMJa8TERob~OMfccE&sg@2Uygzwg6pF;U0q8(TIl&moZLm}$5SSa1^& zE;mZusc)LI2A|0jfmmt7BR;;-imEo70lS(-K#4(LVC+C3d=j9?_YB@eMI`rE zr$jItF*cYR9oASCa!hrIkyi0|gh+=c20!er1azVXjbP8XE#$bwx;`@$6UjBMes?g} z2BNq(`IjA?VqJkxFH*;y(H)%Y7RwxufYMs9^GmoI(Vfz0DI)9n1}7U=MMQk6TtGFgZ5$D)scle$oJOV<=ZKqg>}oD*{OdB2qxy-l zn%rtuy&{EH!k8}Ac$U?p3WgRtmqA6yxGJvU75YIIS-n{=P7U~jWmdS9sL}bG6teV+ zmg@B{pkCu;HsPqsfnv*L#d^dHTT}auT{?r5IGJ(zWxIE&NMV$DnKS#9wzVycVra&3 z4Pl7eTbJFk<>d^p&jABMs`<84ZH+F;{6!)aE0zA(lMc*k`;D-alE+z^FYzCY2zD+| zurON)P(WLWPKn;7cTqhKBG90Lre5QoV^gTO#cNc?q)d7GKvJBL2T?Le!H$=fIr9(| z6|0*oSYtjy*if}PbIfUe8;zq?@f!uUvo8bsT+Pun3(y|pqf|f@!K01FgVW|ry&i-vBY z_yh-OntWnqr2_~cOm@nQwqnyu-f9|Z)og0V4|vyC16v!kfyyYtzS)&`VqpOLo?@$Q zfvJOZuTiVB?9^siS}x(V3h@+7G(@E}7`MxXg-1K?D~Lown&UE;gFm>bZgDM0Vc@tV z=yQl@ej13?uNRSKnp(7#4C7&$N(5!a~`2afKbeV`bP6zcLdPt8Gp|*@(+p* z`R}H^kSieb!r6^QHmOl6hCKk*POj2R{k5DEQEv&I9#@io?AnP<>paTP>8#{@~k zSehkDR;p61l&)r5sDcZ2M7>7fjZ{T5%&Xi-X=7Yg|%{xp@ z*u+~c>gsfQ=m}u0?48lhgW+Q>(;w-0l+}H(lL4ppa z_-9}0EoKF%6GmV*%MWlWWxA9NK=qlqQj|(o3Bbxbnrazq=m!3S!eaps2o9h?xm7Ln zFv|w*XF5BE(c2dQ!_)%2t1W4oC8uh%TPo2zJ7w!I$yt?DIO++u|X^d{4ah=t4y^DzTf;vD;&vC2PlaWV?)e8kRpiA=800ae2`87!LI z8I#wkg-aFPPJZzWpAyWb1qse-XHDI*s)1|^31_$nenrgi)V5=YZ6Gl`P@o_n8AurS5h+m! zsDz{ng#jqJ)|6UADiQ|~2nY&NWP^Y z=GfoNR2lVO2 z6m&+2aRHFc@isxRZC7#1&R_#wB4x`lwrXrdCEnvL7^q6aCU*o3_=VbqMkNhO5nVt$ wKpILcj-V)js1>P1Lda?XP~+)J)HMLPN~z2RY67P)Dhz!OpoHO^!co-!*$upTsQ>@~ literal 0 HcmV?d00001 diff --git a/blog/2021-08-26-welcome/index.md b/blog/2021-08-26-welcome/index.md new file mode 100644 index 000000000..9455168f1 --- /dev/null +++ b/blog/2021-08-26-welcome/index.md @@ -0,0 +1,25 @@ +--- +slug: welcome +title: Welcome +authors: [slorber, yangshun] +tags: [facebook, hello, docusaurus] +--- + +[Docusaurus blogging features](https://docusaurus.io/docs/blog) are powered by the [blog plugin](https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog). + +Simply add Markdown files (or folders) to the `blog` directory. + +Regular blog authors can be added to `authors.yml`. + +The blog post date can be extracted from filenames, such as: + +- `2019-05-30-welcome.md` +- `2019-05-30-welcome/index.md` + +A blog post folder can be convenient to co-locate blog post images: + +![Docusaurus Plushie](./docusaurus-plushie-banner.jpeg) + +The blog supports tags as well! + +**And if you don't want a blog**: just delete this directory, and use `blog: false` in your Docusaurus config. diff --git a/blog/authors.yml b/blog/authors.yml new file mode 100644 index 000000000..bcb299156 --- /dev/null +++ b/blog/authors.yml @@ -0,0 +1,17 @@ +endi: + name: Endilie Yacop Sucipto + title: Maintainer of Docusaurus + url: https://github.com/endiliey + image_url: https://github.com/endiliey.png + +yangshun: + name: Yangshun Tay + title: Front End Engineer @ Facebook + url: https://github.com/yangshun + image_url: https://github.com/yangshun.png + +slorber: + name: Sébastien Lorber + title: Docusaurus maintainer + url: https://sebastienlorber.com + image_url: https://github.com/slorber.png diff --git a/docs/idn_docs/docs/authentication.md b/docs/idn_docs/docs/authentication.md new file mode 100644 index 000000000..cc87ec9de --- /dev/null +++ b/docs/idn_docs/docs/authentication.md @@ -0,0 +1,460 @@ +# Authentication + +## Quick Start + +The quickest way to authenticate and start using SailPoint APIs is to generate a [personal access token](./authentication.md#personal-access-tokens). If you are interested in using OAuth2 for authentication, then please continue to read this document. + +## Finding Your Tenant's OAuth Details + +This document assumes your IDN instance is using the domain name supplied by SailPoint. If your instance is using a vanity URL, then you will need to open the following URL in your browser to get your OAuth info. See [finding your org/tenant name](./getting_started.md#finding-your-org-tenant-name) in the [getting started guide](./getting_started.md) to get your `{tenant}`. + +`https://{tenant}.api.identitynow.com/oauth/info` + +This page will present you with your `authorizeEndpoint` and `tokenEndpoint`, which you will need to follow along with the examples in this document. + +```json +{ + "tenantId": "cc31a307-8a8d-49e8-93b9-c7cbe20e2e6b", + "tenantName": "iga-acme-sb", + "authorizeEndpoint": "https://iga-sb.acme.com/oauth/authorize", + "tokenEndpoint": "https://iga-sb.api.identitynow.com/oauth/token", + "cloudDomainUrl": "https://iga-sb.acme.com", + "logoutUrl": "https://iga-sb.acme.com/logout", + "pod": "stg01-useast1" +} +``` + +## Overview + +In order to use the IdentityNow REST API, you must first authenticate with IdentityNow and get an `access_token`. This `access_token` will need to be provided in the `Authorization` header of each API request. The steps of the flow are as follows: + +![Flow](./img/http-client-identity-now.png) + +1. **Access Token Request** - The HTTP client (a script, application, Postman, cURL, etc.) makes a request to IdentityNow to get an `access_token`. The details of this are described in the [Authentication Details](#authentication-details) section. +2. **Access Token Response** - Assuming the request is valid, IdentityNow will issue an `access_token` to the HTTP client in response. +3. **API Request** - The HTTP client makes a request to an IdentityNow API endpoint. Included in that request is the header `Authorization: Bearer {access_token}`. +4. **API Response** - Assuming the request and the `access_token` are valid, IdentityNow will return a response to the client. If unexpected errors occur, see the [Troubleshooting](#troubleshooting) section of this document. + +The SailPoint authentication/authorization model is fully [OAuth 2.0](https://oauth.net/2/) compliant, with issued `access_tokens` leveraging the [JSON Web Token (JWT)](https://jwt.io/) standard. This document provides the necessary information for interacting with SailPoint's OAuth2 services. + +## Personal Access Tokens + +A personal access token is a method of authenticating to an API as a user without needing to supply a username and password. The primary use case for personal access tokens is in scripts or programs that don't have an easy way to implement an OAuth 2.0 flow and that need to call API endpoints that require a user context. Personal access tokens are also convenient when using Postman to explore and test APIs. + +>**UPDATE**: Previously, only users with the `Admin` or `Source Admin` role were allowed to generate personal access tokens. Now, all users are able to generate personal access tokens! + +To generate a personal access token from the IdentityNow UI, perform the following steps after logging into your IdentityNow instance: + +1. Select **Preferences** from the drop-down menu under your username, then **Personal Access Tokens** on the left. You can also go straight to the page using this URL, replacing `{tenant}` with your IdentityNow tenant: `https://{tenant}.identitynow.com/ui/d/user-preferences/personal-access-tokens`. + +2. Click **New Token** and enter a meaningful description to help differentiate the token from others. + + >**Note**: The **New Token** button will be disabled when you’ve reached the limit of 10 personal access tokens per user. To avoid reaching this limit, we recommend you delete any tokens that are no longer needed. + +3. Click **Create Token** to generate and view the two components that comprise the token: the `Secret` and the `Client ID`. + + >**IMPORTANT**: After you create the token, the value of the `Client ID` will be visible in the Personal Access Tokens list, but the corresponding `Secret` will not be visible after you close the window. You will need to store the `Secret` somewhere secure. + +4. Copy both values somewhere that will be secure and accessible to you when you need to use the the token. + +To generate a personal access token from the API, see the [API docs](https://developer.sailpoint.com/apis/beta/#operation/createPersonalAccessToken) for details. + +To use a personal access token to generate an `access_token` that can be used to authenticate requests to the API, follow the [Client Credentials Grant Flow](#client-credentials-grant-flow), using the `Client ID` and `Client Secret` obtained from the personal access token. + +## OAuth 2.0 + +[OAuth 2.0](https://oauth.net/2/) is an industry-standard protocol for authorization, and provides a variety of authorization flows for web applications, desktop applications, mobile phones, and devices. This specification and its extensions are developed within the [IETF OAuth Working Group](https://www.ietf.org/mailman/listinfo/oauth). + +There are several different authorization flows that OAuth 2.0 supports, and each of these has a grant-type which defines the different use cases. Some of the common ones which might be used with IdentityNow are as follows: + +1. [**Authorization Code**](https://oauth.net/2/grant-types/authorization-code/) - This grant type is used by clients to exchange an authorization code for an `access_token`. This is mainly used for web applications as there is a login into IdentityNow, with a subsequent redirect back to the web application / client. +2. [**Client Credentials**](https://oauth.net/2/grant-types/client-credentials/) - This grant type is used by clients to obtain an `access_token` outside the context of a user. Because this is outside of a user context, only a subset of IdentityNow REST APIs may be accessible with this kind of grant type. +3. [**Refresh Token**](https://oauth.net/2/grant-types/refresh-token/) - This grant type is used by clients in order to exchange a refresh token for a new `access_token` when the existing `access_token` has expired. This allows clients to continue using the API without having to re-authenticate as frequently. This grant type is commonly used together with `Authorization Code` to prevent a user from having to log in several times per day. + +## JSON Web Token (JWT) + +[JSON Web Token (JWT)](https://jwt.io) is an industry-standard protocol for creating access tokens which assert various claims about the resource who has authenticated. The tokens have a specific structure consisting of a header, payload, and signature. + +A raw JWT might look like this: + +```text +eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRfaWQiOiI1OGViMDZhNC1kY2Q3LTRlOTYtOGZhYy1jY2EyYWZjMDNlNjEiLCJpbnRlcm5hbCI6dHJ1ZSwicG9kIjoiY29vayIsIm9yZyI6ImV4YW1wbGUiLCJpZGVudGl0eV9pZCI6ImZmODA4MTgxNTVmZThjMDgwMTU1ZmU4ZDkyNWIwMzE2IiwidXNlcl9uYW1lIjoic2xwdC5zZXJ2aWNlcyIsInN0cm9uZ19hdXRoIjp0cnVlLCJhdXRob3JpdGllcyI6WyJPUkdfQURNSU4iXSwiY2xpZW50X2lkIjoibktCUE93akpIOExYU2pJbCIsInN0cm9uZ19hdXRoX3N1cHBvcnRlZCI6dHJ1ZSwidXNlcl9pZCI6IjU5NTgyNiIsInNjb3BlIjpbInJlYWQiLCJ3cml0ZSJdLCJleHAiOjE1NjU4ODgzMTksImp0aSI6ImM5OGQxMjM2LTQ1MTMtNGM4OS1hMGQwLTBjYjlmMzI3NmI1NiJ9.SAY4ZQkXGi2cY_qz57Ah9_zDq4-bnF-oDJKotXa-LCY +``` + +If you were to decode the access token data, it might look something like this: + +Header + +```JSON +{ + "alg": "HS256", + "typ": "JWT" +} +``` + +Payload + +```JSON +{ + "tenant_id": "58eb06a4-dcd7-4e96-8fac-cca2afc03e61", + "internal": true, + "pod": "cook", + "org": "example", + "identity_id": "ff80818155fe8c080155fe8d925b0316", + "user_name": "slpt.services", + "strong_auth": true, + "authorities": [ + "ORG_ADMIN" + ], + "client_id": "nKBPOwjJH8LXSjIl", + "strong_auth_supported": true, + "user_id": "595826", + "scope": [ + "read", + "write" + ], + "exp": 1565888319, + "jti": "c98d1236-4513-4c89-a0d0-0cb9f3276b56" +} +``` + +Signature + +```TEXT +HMACSHA256( + base64UrlEncode(header) + "." + + base64UrlEncode(payload), + {secret} +) +``` + +You can check the JWT access token data online at [jwt.io](https://jwt.io). + +## Authentication Details + +This section details how to call the SailPoint Platform OAuth 2.0 token endpoints to get an `access_token`. + +### Prerequisites + +Before any OAuth 2.0 token requests can be initiated, a Client ID and secret are necessary. As an `ORG_ADMIN`, browse to your API Management Admin Page at `https://{tenant}.identitynow.com/ui/admin/#admin:global:security:apimanagementpanel` and create an API client with the appropriate grant types for your use case. If you are not an admin of your org, you can ask an admin to create this for you. Be sure to save your `Client Secret` somewhere secure, as you will not be able to view or change it later. + +### OAuth 2.0 Token Request + +When authenticating to IdentityNow, the OAuth 2.0 token endpoint resides on the IdentityNow API Gateway at: + +```Text +POST https://{tenant}.api.identitynow.com/oauth/token +``` + +How you call this endpoint to get your token depends largely on the OAuth 2.0 flow and grant type you wish to implement. The details for each grant type within IdentityNow are described in the following sections. + +### Authorization Code Grant Flow + +Further Reading: [https://oauth.net/2/grant-types/authorization-code/](https://oauth.net/2/grant-types/authorization-code/) + +This grant type is used by clients to exchange an authorization code for an `access_token`. This is mainly used for web apps as there is a login into IdentityNow, with a subsequent redirect back to the web app / client. + +The OAuth 2.0 client you are using must have `AUTHORIZATION_CODE` as one of its grant types. The redirect URLs must also match the list in the client as well: + +```json +{ + "enabled": true, + "created": "2019-05-23T02:06:20.685Z", + "name": "My Application", + "description": "My Application", + "id": "b61429f5-203d-494c-94c3-04f54e17bc5c", + "secret": null, + "grantTypes": [ + "AUTHORIZATION_CODE" + ], + "redirectUris": [ + "http://localhost:8080/myApp/code" + ], + ... +} +``` + +The overall authorization flow is as follows: + +![Flow](./img/user-web-app-identity-now.png) + +1. The user clicks the login link on a web app. + +2. The web app sends an authorization request to IdentityNow in the form: + + ```Text + GET https://{tenant}.identitynow.com/oauth/authorize?client_id={client-id}&client_secret={client-secret}&response_type=code&redirect_uri={redirect-url} + ``` + +3. IdentityNow redirects the user to a login prompt to authenticate to IdentityNow. + +4. The user authenticates to IdentityNow. + +5. Once authentication is successful, IdentityNow issues an authorization code back to the web app. + +6. The web app submits an **OAuth 2.0 Token Request** to IdentityNow in the form: + + ```text + POST https://{tenant}.api.identitynow.com/oauth/token?grant_type=authorization_code&client_id={client-id}&client_secret={client-secret}&code={code}&redirect_uri={redirect-url} + ``` + + >**Note**: the token endpoint URL is `{tenant}.api.identitynow.com`, while the authorize URL is `{tenant}.identitynow.com`. Be sure to use the correct URL when setting up your webapp to use this flow. + +7. IdentityNow validates the token request and submits a response. If successful, the response will contain a JWT `access_token`. + +The query parameters in the OAuth 2.0 token request for the Authorization Code grant are as follows: + +| Key | Description | +| ------------- | ------------------------------------------------------------ | +| grant_type | Set to `authorization_code` for the authorization code grant type. | +| client_id | This is the client ID for the API client (e.g. `b61429f5-203d-494c-94c3-04f54e17bc5c`). This can be generated at `https://{tenant}.identitynow.com/ui/admin/#admin:global:security:apimanagementpanel` | +| client_secret | This is the client secret for the API client (e.g. `c924417c85b19eda40e171935503d8e9747ca60ddb9b48ba4c6bb5a7145fb6c5`). This can be generated at `https://{tenant}.identitynow.com/ui/admin/#admin:global:security:apimanagementpanel` | +| code | This is a code returned by `/oauth/authorize`. | +| redirect_uri | This is a URL of the application to redirect to once the token has been granted. | + +Here is an example OAuth 2.0 token request for the Authorization Code grant type. + +```sh +curl -X POST \ + 'https://example.api.identitynow.com/oauth/token?grant_type=authorization_code&client_id=b61429f5-203d-494c-94c3-04f54e17bc5c&client_secret=c924417c85b19eda40e171935503d8e9747ca60ddb9b48ba4c6bb5a7145fb6c5&code=6688LQJB0y652z6ZjFmkCKuBUjv2sTIqKS2JthWrZ7qlPgI9TClJ6FnpweEhO6w7&redirect_uri=https://myappdomain.com/oauth/redirect' \ + -H 'cache-control: no-cache' +``` + +### Client Credentials Grant Flow + +Further Reading: [https://oauth.net/2/grant-types/client-credentials/](https://oauth.net/2/grant-types/client-credentials/) + +This grant type is used by clients to obtain an access token outside the context of a user. This is probably the simplest authentication flow, but comes with a major drawback; API endpoints that require [user level permissions](https://documentation.sailpoint.com/saas/help/common/users/user_level_matrix.html) will not work. [Personal Access Tokens](#personal-access-tokens) are a form of Client Credentials that have a user context, so they do not share this drawback. However, the APIs that can be invoked with a personal access token depend on the permissions of the user that generated it. + +An OAuth 2.0 client using the Client Credentials flow must have `CLIENT_CREDENTIALS` as one of its grantTypes: + +```json +{ + "enabled": true, + "created": "2019-05-23T02:06:20.685Z", + "name": "My Application", + "description": "My Application", + "id": "b61429f5-203d-494c-94c3-04f54e17bc5c", + "secret": null, + "grantTypes": [ + "CLIENT_CREDENTIALS" + ], + ... +} +``` + +[Personal Access Tokens](#personal-access-tokens) are implicly granted a `CLIENT_CREDENTIALS` grant type. + +The overall authorization flow looks like this: + +1. The client submits an **OAuth 2.0 Token Request** to IdentityNow in the form: + + ```Text + POST https://{tenant}.api.identitynow.com/oauth/token?grant_type=client_credentials&client_id={client-id}&client_secret={client-secret} + ``` + +2. IdentityNow validates the token request and submits a response. If successful, the response will contain a JWT access token. + +The query parameters in the OAuth 2.0 Token Request for the Client Credentials grant are as follows: + +| Key | Description | +| ------------- | ------------------------------------------------------------ | +| grant_type | Set to `CLIENT_CREDENTIALS` for the authorization code grant type. | +| client_id | This is the client ID describing for the API client (e.g. `b61429f5-203d-494c-94c3-04f54e17bc5c`). This can be generated at `https://{tenant}.identitynow.com/ui/admin/#admin:global:security:apimanagementpanel` or by [creating a personal access token](#personal-access-tokens). | +| client_secret | This is the client secret describing for the API client (e.g. `c924417c85b19eda40e171935503d8e9747ca60ddb9b48ba4c6bb5a7145fb6c5`). This can be generated at `https://{tenant}.identitynow.com/ui/admin/#admin:global:security:apimanagementpanel` or by [creating a personal access token](#personal-access-tokens). | + +Here is an example request to generate an `access_token` using Client Credentials. + +```sh +curl -X POST \ + 'https://{tenant}.api.identitynow.com/oauth/token?grant_type=client_credentials&client_id={client_id}&client_secret={client_secret}' \ + -H 'cache-control: no-cache' +``` + +### Refresh Token Grant Flow + +Further Reading: [https://oauth.net/2/grant-types/refresh-token/](https://oauth.net/2/grant-types/refresh-token/) + +This grant type is used by clients in order to exchange a refresh token for a new `access_token` once the existing `access_token` has expired. This allows clients to continue to have a valid `access_token` without the need for the user to login as frequently. + +The OAuth 2.0 client you are using must have `REFRESH_TOKEN` as one of its grant types, and is typically used in conjunction with another grant type, like `CLIENT_CREDENTIALS` or `AUTHORIZATION_CODE`: + +```json +{ + "enabled": true, + "created": "2019-05-23T02:06:20.685Z", + "name": "My Application", + "description": "My Application", + "id": "b61429f5-203d-494c-94c3-04f54e17bc5c", + "secret": null, + "grantTypes": [ + "REFRESH_TOKEN", + "AUTHORIZATION_CODE" + ], + ... +} +``` + +The overall authorization flow looks like this: + +1. The client application receives an `access_token` and a `refresh_token` via one of the other OAuth grant flows, like `AUTHORIZATION_CODE`. +2. The client application notices that the `access_token` is about to expire, based on the `expires_in` attribute contained within the JWT token. +3. The client submits an **OAuth 2.0 Token Request** to IdentityNow in the form: + + ```Text + POST https://{tenant}.api.identitynow.com/oauth/token?grant_type=refresh_token&client_id={client_id}&client_secret={client_secret}&refresh_token={refresh_token} + ``` + +4. IdentityNow validates the token request and submits a response. If successful, the response will contain a new `access_token` and `refresh_token`. + +The query parameters in the OAuth 2.0 Token Request for the Refresh Token grant are as follows: + +| Key | Description | +| ------------- | ------------------------------------------------------------ | +| grant_type | Set to `refresh_token` for the authorization code grant type. | +| client_id | This is the client ID for the API client (e.g. `b61429f5-203d-494c-94c3-04f54e17bc5c`). This can be generated at `https://{tenant}.identitynow.com/ui/admin/#admin:global:security:apimanagementpanel`. | +| client_secret | This is the client secret for the API client (e.g. `c924417c85b19eda40e171935503d8e9747ca60ddb9b48ba4c6bb5a7145fb6c5`). This can be generated at `https://{tenant}.identitynow.com/ui/admin/#admin:global:security:apimanagementpanel`. | +| refresh_token | This is the `refresh_token` that was provided along with the now expired `access_token`. | + +Here is an example call OAuth 2.0 Token Request for the Refresh Token grant. + +```sh +curl -X POST \ + 'https://example.api.identitynow.com/oauth/token?grant_type=refresh_token&client_id=b61429f5-203d-494c-94c3-04f54e17bc5c&client_secret=c924417c85b19eda40e171935503d8e9747ca60ddb9b48ba4c6bb5a7145fb6c5&refresh_token=ey...4M' \ + -H 'cache-control: no-cache' +``` + +## OAuth 2.0 Token Response + +A successful request to `https://{tenant}.api.identitynow.com/oauth/token` will contain a response body similar to this: + +```JSON +{ + "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRfaWQiOiI1OGViMDZhNC1kY2Q3LTRlOTYtOGZhYy1jY2EyYWZjMDNlNjEiLCJpbnRlcm5hbCI6ZmFsc2UsInBvZCI6ImNvb2siLCJvcmciOiJuZWlsLXRlc3QiLCJpZGVudGl0eV9pZCI6ImZmODA4MTgxNTVmZThjMDgwMTU1ZmU4ZDkyNWIwMzE2IiwidXNlcl9uYW1lIjoic2xwdC5zZXJ2aWNlcyIsInN0cm9uZ19hdXRoIjp0cnVlLCJhdXRob3JpdGllcyI6WyJPUkdfQURNSU4iXSwiZW5hYmxlZCI6dHJ1ZSwiY2xpZW50X2lkIjoiZmNjMGRkYmItMTA1Yy00Y2Q3LWI5NWUtMDI3NmNiZTQ1YjkwIiwiYWNjZXNzVHlwZSI6Ik9GRkxJTkUiLCJzdHJvbmdfYXV0aF9zdXBwb3J0ZWQiOmZhbHNlLCJ1c2VyX2lkIjoiNTk1ODI2Iiwic2NvcGUiOlsicmVhZCIsIndyaXRlIl0sImV4cCI6MTU2NTg5MTA2MywianRpIjoiOTQ5OWIyOTktOTVmYS00N2ZiLTgxNWMtODVkNWY2YjQzZTg2In0.zJYfjIladuGHoLXr92EOJ3A9qGNkiG5UJ9eqrtSYXAQ", + "token_type": "bearer", + "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRfaWQiOiI1OGViMDZhNC1kY2Q3LTRlOTYtOGZhYy1jY2EyYWZjMDNlNjEiLCJpbnRlcm5hbCI6ZmFsc2UsInBvZCI6ImNvb2siLCJvcmciOiJuZWlsLXRlc3QiLCJpZGVudGl0eV9pZCI6ImZmODA4MTgxNTVmZThjMDgwMTU1ZmU4ZDkyNWIwMzE2IiwidXNlcl9uYW1lIjoic2xwdC5zZXJ2aWNlcyIsInN0cm9uZ19hdXRoIjp0cnVlLCJhdXRob3JpdGllcyI6WyJPUkdfQURNSU4iXSwiZW5hYmxlZCI6dHJ1ZSwiY2xpZW50X2lkIjoiZmNjMGRkYmItMTA1Yy00Y2Q3LWI5NWUtMDI3NmNiZTQ1YjkwIiwiWYNjZXNzVHlwZSI6Ik9GRkxJTkUiLCJzdHJvbmdfYXV0aF9zdXBwb3J0ZWQiOmZhbHNlLCJ1c2VyX2lkIjoiNTk1ODI2Iiwic2NvcGUiOlsicmVhZCIsIndyaXRlIl0sImF0aSI6Ijk0OTliMjk5LTk1ZmEtNDdmYi04MTVjLTg1ZDVmNmI0M2U4NiIsImV4cCI6MTU2NTk3NjcxMywianRpIjoiODliODk1ZDMtNTdlNC00ZDAwLWI5ZjctOTFlYWVjNDcxMGQ3In0.pfDcB0sGChdHk-oDNmiIxsKFLxq9CcPQV5-eXWgIcp4", + "expires_in": 749, + "scope": "read write", + "accessType": "OFFLINE", + "tenant_id": "58eb06a4-dcd7-4e96-8fac-cca2afc03e61", + "internal": false, + "pod": "cook", + "strong_auth_supported": false, + "org": "example", + "user_id": "595826", + "identity_id": "ff80818155fe8c080155fe8d925b0316", + "strong_auth": true, + "enabled": true, + "jti": "9499b299-95fa-47fb-815c-85d5f6b43e86" +} +``` + +The `access_token` contains the JSON Web Token which is subsequently used in any further REST API calls through the IdentityNow API gateway. To use the `access_token`, simply include it in the `Authorization` header as a `Bearer` token. For example: + +```sh +curl -X GET \ + 'https://{tenant}.api.identitynow.com/v3/account-activities' \ + -H 'Authorization: Bearer {access_token}' \ + -H 'cache-control: no-cache' +``` + +The `expires_in` describes the lifetime, in seconds, of the `access_token`. For example, the value 749 means that the `access_token` will expire in 12.5 minutes from the time the response was generated. The exact expiration date is also contained within the `access_token`. You can view this expiration time by decoding the JWT `access_token` using a tool like [jwt.io](https://jwt.io/). + +The `refresh_token` contains a JSON Web Token for use in a [Refresh Token](#refresh-token-grant-flow) grant flow. The `refresh_token` will only be present if the API client has the `REFRESH_CODE` grant flow. + +The `user_id` and `identity_id` define the identity context of the person that authenticated. This is not set for the Client Credentials grant type since it doesn't have a user context. + +## Which OAuth 2.0 Grant Flow should I use? + +Deciding which OAuth 2.0 grant flow you should use largely depends on your use case. + +### Daily Work or Quick Actions + +For daily work or short, quick administrative actions, you may not really need to worry about grant types, as an access token can easily be obtained in the user interface. In order to see this: + +1. Login to IdentityNow. +2. Go to `https://{tenant}.identitynow.com/ui/session`. +3. The `accessToken` is visible in the user interface. +4. Use this access token in the `Authorization` header when making API calls. If the access token expires, log back into Identity Now and retrieve the new access token. + +While this is very simple to use, this is only valid for a short period of time (a few minutes). + +### Postman + +If you are using the popular HTTP client, [Postman](https://www.getpostman.com), you have a couple of options on how you might setup your authorization. You can just leverage the accessToken as mentioned above, or you can also configure Postman to use OAuth 2.0 directly. + +### Web Applications + +If you are making a web application, the best grant flow to use is the [Authorization Code](#authorization-code-grant-flow) grant flow. This will allow users to be directed to IdentityNow to login, and then redirected back to the web application via a URL redirect. This also works well with SSO, strong authentication, or pass-through authentication mechanisms. + +SailPoint does not recommend using a password grant flow for web applications as it would involve entering IdentityNow credentials in the web application. This flow also doesn't allow you to work with SSO, strong authentication, or pass-through authentication. + +### Scripts or Programs + +If you are writing scripts or programs that leverage the IdentityNow APIs, which OAuth 2.0 grant from you should use typically depends on what you are doing, and which user context you need to operate under. + +Because scripts, code, or programs do not have an interactive web-interface it is difficult, but not impossible, to implement a working [Authorization Code](#authorization-code-grant-flow) flow. Most scripts or programs typically run as a [Client Credentials](#client-credentials-grant-flow). If your APIs can work under an API context without a user, then [Client Credentials](#client-credentials-grant-flow) is ideal. However, if your APIs need a user or admin context, then the [Personal Access Token](#personal-access-tokens) approach will be more suitable. + +## Troubleshooting + +Having issues? Follow these steps. + +1. **Verify the API End Point Calls** + + 1. Verify the structure of the API call: + 1. Verify that the API calls are going through the API gateway: + `https://{tenant}.api.identitynow.com` + 2. Verify you are calling their version correctly: + - Private APIs: `https://{tenant}.api.identitynow.com/cc/api/{endpoint}` + - V2 APIs: `https://{tenant}.api.identitynow.com/v2/{endpoint}` + - V3 APIs: `https://{tenant}.api.identitynow.com/v3/{endpoint}` + - Beta APIs: `https://{tenant}.api.identitynow.com/beta/{endpoint}` + 3. Verify that the API calls have the correct headers (e.g., `content-type`), query parameters, and body data. + 2. If the HTTP response is **401 Unauthorized** , this is an indication that either there is no `Authorization` header or the `access_token` is invalid. Verify that the API calls are supplying the `access_token` in the `Authorization` header correctly (ex. `Authorization: Bearer {access_token}`) and that the `access_token` has not expired. + 3. If the HTTP response is **403 Forbidden**, this is an indication that the `access_token` is valid, but the user you are running as doesn't have access to this endpoint. Check the access rights which are associated with the user. + >**Note**: This can also be due to calling an API which expects a user, but your authorization grant type might not have a user context. Calling most administrative APIs with a CLIENT_CREDENTIAL grant will often produce this result. + +2. **Verify the OAuth 2.0 Client** + + 1. Verify that the OAuth 2.0 Client is not a Legacy OAuth client. Legacy OAuth clients will not work. + This is very apparent by looking at the Client ID, as OAuth 2.0 Client IDs have dashes. Here is an example: + Legacy Client ID: `G6xLlBBOKIcOAQuK` + OAuth 2.0 Client ID: `b61429f5-203d-494c-94c3-04f54e17bc5c` + + 2. Verify the OAuth 2.0 Client ID exists. This can be verified by calling: + + ```text + GET /beta/oauth-clients/{client-id} + ``` + + or + + ```text + GET /beta/oauth-clients/ + ``` + + You can also view all of the active clients in the UI by going to `https://{tenant}.identitynow.com/ui/admin/#admin:global:security:apimanagementpanel`. + + 3. Verify that the OAuth 2.0 Client grant types match the OAuth 2.0 grant type flow you are trying to use. For instance, this client will work with [Authorization Code](#authorization-code-grant-flow) and [Client Credentials](#client-Credentials-grant-flow) flows, but not [Refresh Token](#refresh-token-grant-flow) flows: + + ```json + { + "enabled": true, + "created": "2019-05-23T02:06:20.685Z", + "name": "My Application", + "description": "My Application", + "id": "b61429f5-203d-494c-94c3-04f54e17bc5c", + "secret": null, + "grantTypes": [ + "AUTHORIZATION_CODE", + "CLIENT_CREDENTIALS" + ], + ... + } + ``` + + 4. If using an A[Authorization Code](#authorization-code-grant-flow) flow, verify the redirect URL(s) for your application match the `redirectUris` value in the client. You can check this using the [oauth-clients](https://developer.sailpoint.com/apis/beta/#operation/getOauthClient) endpoint. + +3. **Verify the OAuth 2.0 Calls** + + 1. Verify that the OAuth call flow is going to the right URLs, with the correct query parameters and data values. A common source of errors is using the wrong host for authorization and token API calls. The token endpoint URL is `{tenant}.api.identitynow.com`, while the authorize URL is `{tenant}.identitynow.com`. diff --git a/docs/idn_docs/docs/custom_connectors/commands/account_create.md b/docs/idn_docs/docs/custom_connectors/commands/account_create.md new file mode 100644 index 000000000..5e27ce6f4 --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/commands/account_create.md @@ -0,0 +1,218 @@ +# Account Create + +| Input/Output | Data Type | +|:-------------|:---------------------------:| +| Input | StdAccountCreateInput | +| Output | StdAccountCreateOutput | + +### Example StdAccountCreateInput +```javascript +{ + "attributes": { + "id": "john.doe", + "email": "example@gmail.com", + "department": "external", + "displayName": "John Doe", + "password": "test", + "entitlements": [ + "user", + "administrator" + ] + } +} +``` +### Example StdAccountCreateOutput +```javascript +{ + "key": { + "simple": { + "id": "john.doe" + } + }, + "disabled": false, + "locked": false, + "attributes": { + "id": "john.doe", + "displayName": "John Doe", + "email": "example@sailpoint.com", + "entitlements": [ + "administrator", + "sailpoint" + ] + } +} +``` +## Description +The account create command triggers whenever IDN is told to provision entitlements for an identity on the target source, but no account for the identity on the target source exists yet. For example, if you create an access profile that grants a group on the target source and then add that access profile to a role, any identity matching that role’s membership criteria will be granted to the group. IDN determines which identities do not have accounts on the target source and triggers the account create command for each identity. If an identity already has an account, then it invokes the account update command. + +## The Provisioning Plan +The account create command accepts a provisioning plan from IDN and creates the corresponding account(s) in the target source. When you configure your source in IDN, you must set up ‘Create Profile’ to tell IDN how to provision new accounts for your source. + +You can create the provisioning plan through the ```accountCreateTemplate``` in the ```connector-spec.json``` file, and you can also modify its behavior in IDN using the create profile screen: + +![Account Create](../../img/custom_connectors/commands/account_create/account_create_idn.png) + +‘Create Profile’ provides the instructions for the provisioning plan and determines which attributes are sent to your connector code. For example, if all the account attributes in the preceding image are configured for a value, then the following JSON payload is sent to your connector: + +```javascript +{ + "key": { + "simple": { + "id": "john.doe" + } + }, + "disabled": false, + "locked": false, + "attributes": { + "id": "john.doe", + "password": "secretPassword", + "email": "example@sailpoint.com", + "entitlements": [ + "administrator", + "sailpoint" + ] + } +} +``` +The provisioning plan does not include any disabled attributes. In the earlier image, ```password``` is disabled, so the payload to your connector does not not include a field for ```password```: + +```javascript +{ + "key": { + "simple": { + "id": "john.doe" + } + }, + "disabled": false, + "locked": false, + "attributes": { + "id": "john.doe", + "email": "example@sailpoint.com", + "entitlements": [ + "administrator", + "sailpoint" + ] + } +} +``` +The provisioning plan presents multi-valued entitlements in two different ways: + +If a multi-valued entitlement, like groups, has only one value, then the provisioning plan represents it as a string value: + +```javascript +{ + "key": { + "simple": { + "id": "john.doe" + } + }, + "disabled": false, + "locked": false, + "attributes": { + "id": "john.doe", + "email": "example@sailpoint.com", + "entitlements": "user" + } +} +``` +If a multi-valued entitlement has more than one value, then the plan represents it as an array: + +```javascript +{ + "key": { + "simple": { + "id": "john.doe" + } + }, + "disabled": false, + "locked": false, + "attributes": { + "id": "john.doe", + "email": "example@sailpoint.com", + "entitlements": [ + "administrator", + "sailpoint" + ] + } +} +``` +Your connector code must handle the possibility of both cases. The following code example from [AirtableAccount.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/models/AirtableAccount.ts) shows how to handle a multi-valued attribute: + +```javascript +public static createWithStdAccountCreateInput(record: StdAccountCreateInput): AirtableAccount { + const account = new AirtableAccount(); + ... + if (record.attributes['entitlements'] != null) { + if (!Array.isArray(record.attributes['entitlements'])) { + account.entitlments = [record.attributes['entitlements']] + } else { + account.entitlments = record.attributes['entitlements'] + } + } else { + account.entitlments = [] + } + + return account; +} +``` +## The return object +When the account is returned to IDN, any values you set are updated in IDN. So if an account ID is auto-generated on the source system, you must send the account ID back to IDN so IDN is aware of it for future account update activities. This is useful for the compound key type. + +## Password Handling +There are three main ways to handle passwords on a source: + +1. SSO, LDAP, or other federated authentication mechanisms are the preferred means of providing user login on a target source. If your source can integrate with a federated login service, use that service. If your source requires you to provide a password when you create accounts, even with a federated login, it is best to create a strong, random password. Your users will use the federated login, so they never need to know this password. + +2. If your source has a password reset feature at login, it is best to initially create the account with a strong, random password the user does not have access to. Once the account is created, make the user request a password reset to set their own password. This method is the safest alternative to federated authentication because the initial password is strong and never known to anyone, and the user can generate his or her own password through secure channels. + +3. The least secure method is setting a static password in the create profile that is well known among your users. This approach is not recommended. It does not require any automated communications with your users. + +There are two ways you can generate random passwords: + +1. Use the “Create Password” generator in ‘Create Profile.’ (This can also be configured in the ```accountCreateTemplate```) + +![Create Password](../../img/custom_connectors/commands/account_create/create_password_idn.png) + +2. Disable the 'password' field. + +Use ‘Create Profile’ and generate a random password in code. There are some JavaScript libraries that can generate random strings suitable for passwords, like [random-string](https://www.npmjs.com/package/random-string) and [crypto-random-string](https://www.npmjs.com/package/crypto-random-string). Import either one of these libraries into your code to use them. The following example from [airtable.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/airtable.ts) uses a ternary operator to ensure the password is always provided. If the provisioning plan provides a password, use that value. If the provisioning plan does not provide a password, generate a random one. + +```javascript +async createAccount(input: StdAccountCreateInput): Promise { + const account = AirtableAccount.createWithStdAccountCreateInput(input); + + return this.airTableBase('Users').create({ + "displayName": account.displayName, + "email": account.email, + "id": account.id, + "enabled": account.enabled ? 'true' : 'false', + "department": account.department, + "firstName": account.firstName, + "lastName": account.lastName, + "locked": account.locked ? 'true' : 'false', + "password": account.password ? account.password : crypto.randomBytes(20).toString('hex'), + "entitlements": account.entitlments.join(',') + }).then(record => { + const airtableRecord = AirtableAccount.createWithRecords(record) + return airtableRecord + }).catch(err => { + throw new ConnectorError('error while getting accounts: ' + err) + }) + +} +``` +## Testing in IdentityNow + +One way to test whether the account create code works in IDN is to set up an access profile and role that grants members an entitlement from the connector’s target source. Start by creating an access profile that grants one or more entitlements from the target source. + +![Testing 1](../../img/custom_connectors/commands/account_create/testing1.png) + +Next, create a role that uses the access profile created in the previous step. + +![Testing 2](../../img/custom_connectors/commands/account_create/testing2.png) + +Modify the role membership to use ‘Identity List’ and select one or more users that do not have accounts in the target source yet. + +![Testing 3](../../img/custom_connectors/commands/account_create/testing3.png) + +Click the ‘Update’ button in the upper right corner to initiate the account provisioning process. Doing so creates the account(s) on the target source once the process is complete. \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/commands/account_delete.md b/docs/idn_docs/docs/custom_connectors/commands/account_delete.md new file mode 100644 index 000000000..0fc596868 --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/commands/account_delete.md @@ -0,0 +1,47 @@ +# Account Delete + +| Input/Output | Data Type | +|:-------------|:---------------------------:| +| Input | StdAccountDeleteInput | +| Output | StdAccountDeleteOutput | + +### Example StdAccountDeleteInput +```javascript +{ + "key": { + "simple": { + "id": "john.doe" + } + } +} +``` +### Example StdAccountDeleteOutput +```javascript +{} +``` +## Description +The account delete command sends one attribute from IDN, the identity to delete. This can be passed to your connector to delete the account from the source system. + +Enable account delete in IDN through a BeforeProvisioning rule. The connector honors whichever operation the provisioning plan sends. For more information, see the [documentation](https://community.sailpoint.com/t5/IdentityNow-Articles/IdentityNow-Rule-Guide/ta-p/76665) and an [example implementation](https://community.sailpoint.com/t5/IdentityNow-Wiki/IdentityNow-Rule-Guide-Before-Provisioning-Rule/ta-p/77415). + +The following snippet shows an example of account delete command implementation: + +[index.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/index.ts) +```javascript +.stdAccountDelete(async (context: Context, input: StdAccountDeleteInput, res: Response) => { + const account = await airtable.getAccount(input.key) + res.send(await airtable.deleteAccount(account.airtableId)) +}) +``` + +[airtable.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/airtable.ts) +```javascript +async deleteAccount(airTableid: string): Promise> { + return this.airTableBase('Users').destroy(airTableid, + ).then(() => { + return {} + }).catch(err => { + throw new ConnectorError('error while deleting account: ' + err) + }) +} +``` \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/commands/account_discover.md b/docs/idn_docs/docs/custom_connectors/commands/account_discover.md new file mode 100644 index 000000000..7966f87da --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/commands/account_discover.md @@ -0,0 +1,347 @@ +# Account Discover Schema + +| Input/Output | Data Type | +|:-------------|:----------------------------:| +| Input | undefined | +| Output | StdTestConnectionOutput | + +### Example StdTestConnectionOutput +```javascript +{ + "displayAttribute": "id", + "identityAttribute": "email", + "groupAttribute": "entitlements", + "attributes": [ + { + "name": "displayName", + "type": "string", + "description": "Display Name of the account" + }, + { + "name": "id", + "type": "string", + "description": "unique Id of the account" + }, + { + "name": "email", + "type": "string", + "description": "Email of the account" + }, + { + "name": "entitlements", + "type": "string", + "entitlement": true, + "managed": true, + "multi": true, + "description": "The groups the user belongs to presented as an array of strings" + } + ] +} +``` +## Description +The account discover schema command tells IDN to dynamically create the account schema for the source rather than use the account schema provided by the connector in connector-spec.json. It is often ideal to statically define the account schema because it is generally more performant and easier to develop and reason about the code. However, some sources have schemas that can be different for each customer deployment. It can also be difficult to determine which account attributes to statically expose, which requires the schema to be dynamically generated. SalesForce is an example of a source that can have thousands of account attributes, which makes it impractical to statically define a set of attributes that satisfies all connector users. Although the SalesForce connector defines a standard set of account attributes out of the box, it also allows schema discovery for users looking for more attributes. + +## Implementation +If your connector requires dynamic schema discovery, you must add std:account:discover-schema to the list of commands in connector-spec.json. Because the account schema is dynamic, you do not need to specify an accountSchema or an accountCreateTemplate object in connector-spec.json. Your connector-spec.json file will look similar to this example from the [Airtable connector](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/connector-spec.json). + +```javascript +{ + "name": "airtable-v4", + "keyType": "simple", + "commands": [ + "std:account:list", + "std:account:read", + "std:entitlement:list", + "std:entitlement:read", + "std:test-connection", + "std:account:update", + "std:account:discover-schema", + "std:account:create", + "std:account:delete", + "std:account:disable", + "std:account:enable", + "std:account:unlock" + ], + "sourceConfig": [ + { + "type": "section", + "items": [ + { + "key": "apiKey", + "label": "API Key", + "type": "text" + }, + { + "key": "airtableBase", + "label": "airtable base ID", + "type": "text" + } + ] + } + ], + "entitlementSchemas": [ + { + "type": "group", + "displayAttribute": "name", + "identityAttribute": "id", + "attributes": [ + { + "name": "id", + "type": "string", + "description": "Unique ID of the group (ex. admin)" + }, + { + "name": "name", + "type": "string", + "description": "The display name of the group (ex. Admin)" + } + ] + } + ], + "accountCreateTemplate": { + "fields": [ + { + "key": "email", + "label": "Email", + "type": "string", + "required": true, + "initialValue": { + "type": "identityAttribute", + "attributes": { + "name": "email" + } + } + }, + { + "key": "id", + "label": "id", + "type": "string", + "required": true, + "initialValue": { + "type": "identityAttribute", + "attributes": { + "name": "uid" + } + } + }, + { + "key": "password", + "label": "Password", + "type": "string", + "required": true, + "initialValue": { + "type": "generator", + "attributes": { + "name": "Create Password" + } + } + }, + { + "key": "department", + "label": "Department", + "type": "string", + "required": false, + "initialValue": { + "type": "identityAttribute", + "attributes": { + "name": "department" + } + } + }, + { + "key": "displayName", + "label": "Display Name", + "type": "string", + "required": false, + "initialValue": { + "type": "identityAttribute", + "attributes": { + "name": "displayName" + } + } + }, + { + "key": "firstName", + "label": "First Name", + "type": "string", + "required": false, + "initialValue": { + "type": "identityAttribute", + "attributes": { + "name": "firstname" + } + } + }, + { + "key": "lastName", + "label": "Last Name", + "type": "string", + "required": false, + "initialValue": { + "type": "identityAttribute", + "attributes": { + "name": "lastname" + } + } + } + ] + } +} +``` + +## Programmatically build an account schema +There are many ways to programmatically build the account schema for a source. This section will cover one such method. To start, register your command in the main connector file, [index.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/index.ts). + +```javascript +export const connector = async () => { + + // Get connector source config + const config = await readConfig() + + // Use the vendor SDK, or implement own client as necessary, to initialize a client + const airtable = new AirtableClient(config) + + return createConnector() + +... + + .stdAccountDiscoverSchema(async (context: Context, input: undefined, res: Response) => { + const account = await airtable.getAccountSchema() + + res.send(account) + }) + +... +} +``` + +Next, implement the ```discoverSchema()``` function in your client code. The following function calls the necessary endpoints to get the full schema of the user account you want to represent in IDN. After you receive a response from your call, you must build your account schema object that will return to IDN. The response has a structure like the accountSchema property in the connector-spec.json file. The following is an example from [airtable.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/airtable.ts). + +```javascript +async getAccountSchema(): Promise { + return this.airTableBase('Users').select({ + view: 'Grid view' + }).firstPage().then(records => { + const recordArray: StdAccountDiscoverSchemaOutput = { + "identityAttribute": 'email', + "displayAttribute": 'id', + "groupAttribute": 'entitlments', + "attributes": [] + } + recordArray.attributes = [] + for (const record of records) { + const fieldset = record.fields + for (const [key] of Object.entries(fieldset)) { + if (key === 'entitlements') { + recordArray.attributes.push( + { + "name": key, + "description": key, + "type": "string", + "entitlement": true, + "managed": true, + "multi": true + } + ) + } else { + recordArray.attributes.push( + { + "name": key, + "description": key, + "type": "string" + } + ) + } + } + break + } + return recordArray + }).catch(err => { + throw new ConnectorError('error while getting accounts: ' + err) + }) +} +``` + +This code produces the following payload that will be sent back to IDN. + +```javascript +{ + "identityAttribute": "email", + "displayAttribute": "id", + "groupAttribute": "entitlments", + "attributes": [ + { + "name": "id", + "description": "id", + "type": "string" + }, + { + "name": "enabled", + "description": "enabled", + "type": "string" + }, + { + "name": "department", + "description": "department", + "type": "string" + }, + { + "name": "locked", + "description": "locked", + "type": "string" + }, + { + "name": "entitlements", + "description": "entitlements", + "type": "string", + "entitlement": true, + "managed": true, + "multi": true + }, + { + "name": "password", + "description": "password", + "type": "string" + }, + { + "name": "displayName", + "description": "displayName", + "type": "string" + }, + { + "name": "lastName", + "description": "lastName", + "type": "string" + }, + { + "name": "email", + "description": "email", + "type": "string" + }, + { + "name": "firstName", + "description": "firstName", + "type": "string" + } + ] +} +``` + +There are many properties in this payload, so you may want to remove some, but it can be hard to determine which properties to keep in a dynamic way. If you can programmatically determine which properties to remove, you can alter the ```discoverSchema()``` function to remove them. + +## Test in IdentityNow +To test the account discover schema command in IDN, ensure that you upload your latest connector code and create a new source in IDN. After you configure and test your source connection, go to the ‘Account Schema’ page. You will see an empty schema. + +![Discover Schema 1](../../img/custom_connectors/commands/discover_schema/discover_schema_idn1.png) + +To discover the schema for this source, click the ‘Options’ dropdown in the upper right and select ‘Discover Schema.’ + +![Discover Schema 2](../../img/custom_connectors/commands/discover_schema/discover_schema_idn2.png) + +IDN then asks you to assign attributes to ‘Account ID’ and 'Account Name.' + +![Discover Schema 3](../../img/custom_connectors/commands/discover_schema/discover_schema_idn3.png) + +Save the schema. You now have a populated account schema. A user of this source must provide further details, like descriptions and identifying which attributes are entitlements. + +![Discover Schema 4](../../img/custom_connectors/commands/discover_schema/discover_schema_idn4.png) \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/commands/account_enable.md b/docs/idn_docs/docs/custom_connectors/commands/account_enable.md new file mode 100644 index 000000000..bf2e06379 --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/commands/account_enable.md @@ -0,0 +1,70 @@ +# Account Enable/Disable + +| Input/Output | Data Type | +|:-------------|:------------------------------------:| +| Input - Enable | StdAccountEnableInput | +| Output - Enable | StdAccountEnableOutput | +| Input - Disable | StdAccountDisableInput | +| Output -Disable | StdAccountDisableOutput | + +### Example StdAccountEnableInput/StdAccountDisableInput +```javascript +"key": { + "simple": { + "id": "john.doe" + } +} +``` +### Example StdAccountEnableOutput/StdAccountDisableOutput +```javascript +{ + "key": { + "simple": { + "id": "john.doe" + } + }, + "disabled": false, + "locked": false, + "attributes": { + "id": "john.doe", + "displayName": "John Doe", + "email": "example@sailpoint.com", + "entitlements": [ + "administrator", + "sailpoint" + ] + } +} +``` +## Description +You typically invoke the account enable and account disable commands during the joiner, mover, leaver (JML) lifecycle. An identity’s leaving from the organization or change to a role that does not require access to one or more accounts triggers the account disable command. An identity’s rejoining the organization or move to a role that grants access to a previously disabled account triggers the account enable command. + +Disabling accounts is generally preferred if the source supports account disabling so the account data remains for later reactivation or inspection. If the source does not support account disabling or deleting accounts is preferred when an identity leaves the organization, the connector performs the necessary steps to delete an account with the account disable function. + +>🚧 It is important to note that although SaaS Connectivity supports the account delete command, IDN never sends the account delete command, only the account enable command. The connector’s developer determines the appropriate action for account disable on the source. + +Account enable/disable is similar to implementing the account update command. If you have implemented your source call to modify any of the values on your source, then you can use the same method to implement the command. The following code implements enable and disable: + +```javascript +.stdAccountDisable(async (context: Context, input: StdAccountDisableInput, res: Response) => { + let account = await airtable.getAccount(input.key) + const change: AttributeChange = { + op: AttributeChangeOp.Set, + attribute: 'enabled', + value: 'false' + } + account = await airtable.changeAccount(account, change) + res.send(account.toStdAccountDisableOutput()) +}) + +.stdAccountEnable(async (context: Context, input: StdAccountEnableInput, res: Response) => { + let account = await airtable.getAccount(input.key) + const change: AttributeChange = { + op: AttributeChangeOp.Set, + attribute: 'enabled', + value: 'true' + } + account = await airtable.changeAccount(account, change) + res.send(account.toStdAccountEnableOutput()) +}) +``` \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/commands/account_list.md b/docs/idn_docs/docs/custom_connectors/commands/account_list.md new file mode 100644 index 000000000..28b9535a4 --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/commands/account_list.md @@ -0,0 +1,145 @@ +# Account List + +| Input/Output | Data Type | +|:-------------|:-------------------------:| +| Input | undefined | +| Output | StdAccountListOutput | + +### Example StdAccountListOutput +```javascript +{ + "key": { + "simple": { + "id": "john.doe" + } + }, + "disabled": false, + "locked": false, + "attributes": { + "id": "john.doe", + "displayName": "John Doe", + "email": "example@sailpoint.com", + "entitlements": [ + "administrator", + "sailpoint" + ] + } +} +``` + +## Description +The account list command aggregates all accounts from the target source into IdentityNow. IDN calls this command during a manual or scheduled account aggregation. + +![Account List](../../img/custom_connectors/commands/account_list/account_list_idn.png) + +## Implementation +For you to be able to implement this endpoint, the web service must expose an API for listing user accounts and entitlements (i.e. roles or groups). Sometimes, a target source’s API has a single endpoint providing all the attributes and entitlements a source account contains. However, some APIs may break these attributes and entitlements into separate API endpoints, requiring you to make multiple calls to gather all an account's necessary data. The following code from [airtable.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/airtable.ts) shows the necessary steps to create a complete account from the various endpoints the API offers: + +```javascript +async getAllAccounts(): Promise { + return this.airTableBase('Users').select({ + view: 'Grid view' + }).firstPage().then(records => { + const recordArray: Array = [] + for (const record of records) { + recordArray.push(AirtableAccount.createWithRecords(record)) + } + return recordArray + }).catch(err => { + throw new ConnectorError('error while getting accounts: ' + err) + }) +} +``` + +The following code snippet from [index.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/index.ts) shows how to register the account list command on the connector object: + +```javascript +export const connector = async () => { + + // Get connector source config + const config = await readConfig() + + // Use the vendor SDK, or implement own client as necessary, to initialize a client + const airtable = new AirtableClient(config) + + return createConnector() + .stdAccountList(async (context: Context, input: undefined, res: Response) => { + const accounts = await airtable.getAllAccounts() + + for (const account of accounts) { + res.send(account.toStdAccountListOutput()) + } + }) +... +``` + +IDN expects each user in the target source to be converted into a format IDN understands. The specific attributes the web service returns depend on what your source provides. + +```javascript +public toStdAccountListOutput(): StdAccountListOutput { + return this.buildStandardObject(); +} + +private buildStandardObject(): StdAccountListOutput | StdAccountCreateOutput | StdAccountReadOutput | StdAccountListOutput { + return { + key: SimpleKey(this.id), + disabled: !this.enabled, + locked: this.locked, + attributes: { + id: this.id, + displayName: this.displayName, + department: this.department, + firstName: this.firstName, + lastName: this.lastName, + email: this.email, + entitlements: this.entitlments, + }, + } +} +``` + +The result of the account list command is not an array of objects but several individual objects. This is the format IDN expects, so if you see something like the following result while testing, it is normal: + +```javascript +{ + "key": { + "simple": { + "id": "john.doe" + } + }, + "disabled": false, + "locked": false, + "attributes": { + "id": "john.doe", + "displayName": "John Doe", + "department": "sailpoint admins", + "firstName": "John", + "lastName": "Doe", + "email": "example@sailpoint.com", + "entitlements": [ + "administrator", + "sailpoint" + ] + } +} +{ + "key": { + "simple": { + "id": "john" + } + }, + "disabled": false, + "locked": false, + "attributes": { + "id": "john", + "displayName": "John Doe External", + "department": "external", + "firstName": "John", + "lastName": "Doe", + "email": "example@gmail.com", + "entitlements": [ + "administrator" + ] + } +} +``` \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/commands/account_read.md b/docs/idn_docs/docs/custom_connectors/commands/account_read.md new file mode 100644 index 000000000..28e260f2d --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/commands/account_read.md @@ -0,0 +1,91 @@ +# Account Read + +| Input/Output | Data Type | +|:-------------|:-------------------------:| +| Input | StdAccountReadInput | +| Output | StdAccountReadOutput | + +### Example StdAccountReadInput +```javascript +"key": { + "simple": { + "id": "john.doe" + } +} +``` +### Example StdAccountReadOutput +```javascript +{ + "key": { + "simple": { + "id": "john.doe" + } + }, + "disabled": false, + "locked": false, + "attributes": { + "id": "john.doe", + "displayName": "John Doe", + "email": "example@sailpoint.com", + "entitlements": [ + "administrator", + "sailpoint" + ] + } +} +``` +## Description +The account read command aggregates a single account from the target source into IdentityNow. IDN can call this command during a “one-off” account refresh, which you can trigger by aggregating an individual account in IDN. + +![Account Read](../../img/custom_connectors/commands/account_read/account_read_idn.png) + +## Implementation +Implementation of account read is similar to account list's implementation, except the code only needs to get one account, not all the accounts. The following snippet is from [airtable.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/airtable.ts): + +```javascript +async getAccount(identity: SimpleKeyType | CompoundKeyType): Promise { + const id = identity + let found = false + + return this.airTableBase('Users').select({ + view: 'Grid view', + filterByFormula: `({Id} = '${id.simple.id}')` + }).firstPage().then(records => { + const recordArray: Array = [] + for (const record of records) { + found = true + recordArray.push(AirtableAccount.createWithRecords(record)) + } + return recordArray[0] + }).catch(err => { + throw new ConnectorError('error while getting account: ' + err) + }).finally(() => { + // if the account is not found, throw the special NotFound error type + if (!found) { + throw new ConnectorError("Account not found", ConnectorErrorType.NotFound) + } + }) +} +``` +One special case of this command is the ```NotFound``` type. On line 20, if an account is not found, the ```ConnectorError``` is thrown with the ```ConnectorErrorType.NotFound``` type. This tells IDN the account does not exist, and IDN then triggers the account create logic to generate the account. + +The following code snippet from [index.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/index.ts) shows how to register the account read command on the connector object: + +```javascript +// Connector must be exported as module property named connector +export const connector = async () => { + + // Get connector source config + const config = await readConfig() + + // Use the vendor SDK, or implement own client as necessary, to initialize a client + const airtable = new AirtableClient(config) + + return createConnector() + .stdAccountRead(async (context: Context, input: StdAccountReadInput, res: Response) => { + const account = await airtable.getAccount(input.key) + + res.send(account.toStdAccountReadOutput()) + }) +... +``` \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/commands/account_unlock.md b/docs/idn_docs/docs/custom_connectors/commands/account_unlock.md new file mode 100644 index 000000000..5deba1404 --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/commands/account_unlock.md @@ -0,0 +1,53 @@ +# Account Unlock + +| Input/Output | Data Type | +|:-------------|:-------------------------:| +| Input | StdAccountUnlockInput | +| Output | StdAccountUnlockOutput | + +### Example StdAccountUnlockInput +```javascript +"key": { + "simple": { + "id": "john.doe" + } +} +``` +### Example StdAccountUnlockOutput +```javascript +{ + "key": { + "simple": { + "id": "john.doe" + } + }, + "disabled": false, + "locked": false, + "attributes": { + "id": "john.doe", + "displayName": "John Doe", + "email": "example@sailpoint.com", + "entitlements": [ + "administrator", + "sailpoint" + ] + } +} +``` +## Description +The account lock and account unlock commands provide ways to temporarily prevent access to an account. IDN only supports the unlock command, so accounts must be locked on the source level, but they can be unlocked through IDN, and IDN can store the account's status. + +Implementing account unlock is similar to the other commands that update attributes on an account. The following code unlocks an account: + +```javascript +.stdAccountUnlock(async (context: Context, input: StdAccountUnlockInput, res: Response) => { + let account = await airtable.getAccount(input.key) + const change: AttributeChange = { + op: AttributeChangeOp.Set, + attribute: 'locked', + value: 'false' + } + account = await airtable.changeAccount(account, change) + res.send(account.toStdAccountUnlockOutput()) +}) +``` \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/commands/account_update.md b/docs/idn_docs/docs/custom_connectors/commands/account_update.md new file mode 100644 index 000000000..3ac928934 --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/commands/account_update.md @@ -0,0 +1,87 @@ +# Account Update + +| Input/Output | Data Type | +|:-------------|:---------------------------:| +| Input | StdAccountUpdateInput | +| Output | StdAccountUpdateOutput | + +### Example StdAccountUpdateInput +```javascript +{ + "key": { + "simple": { + "id": "john.doe" + } + }, + "changes": [ + { + "op": , + "attribute": , + "value": + } + ] +} +``` +### Example StdAccountUpdateOutput +```javascript +{ + "key": { + "simple": { + "id": "john.doe" + } + }, + "disabled": false, + "locked": false, + "attributes": { + "id": "john.doe", + "displayName": "John Doe", + "email": "example@sailpoint.com", + "entitlements": [ + "administrator", + "sailpoint" + ] + } +} +``` +## Description + +The account update command triggers whenever IDN is told to modify an identity's attributes or entitlements on the target source. For example, granting an identity a new entitlement through a role, changing an identity’s lifecycle state, or modifying an identity attribute tied to an account attribute all trigger the account update command. + +## Input Schema +The payload from IDN contains the ID of the identity to modify, the configuration items the connector needs to call the source API, and one or more change operations to apply to the identity. Each operation has the following special considerations: + +- **Set:** Set tells the connector to overwrite the current value of the attribute or entitlement with the new value provided in the payload. The entire entitlement array resets if there are multi-valued entitlements. + +- **Add:** Add only works for multi-valued entitlements. Add tells the connector to add one or more values to the entitlement. Add is often useful for group entitlements when new groups are added to the identity. If only one entitlement is added, it is represented as a ```string```. If more than one entitlement is added, it represented as an ```array of strings```. + +- **Remove:** Remove is similar to add, but it also works for attributes or single-valued entitlements. If you apply remove to multi-valued entitlements, doing so tells the connector to remove the value(s) from the entitlement. If only one entitlement is removed, it is represented as a ```string```. If more than one entitlement is removed, it is represented as an ```array of strings```. If you apply remove to a single-valued entitlement or account attribute, doing so tells the connector to set the value to ```null``` or ```empty```. + +The following example payload tells the connector to perform the following update actions: + +- Set the title of the account to “Developer Advocate.” + +- Add the account to two groups on the source: “Engineering” and “Support.” + +- Remove the account from the “Moderator” group. + +```javascript +{ + "type": "std:account:update", + "input": { + "identity": "95", + "changes": [ + {"op": "Set", "attribute": "title", "value": "Developer Advocate"}, + {"op": "Add", "attribute": "groups", "value": ["Engineering", "Support"]}, + {"op": "Remove", "attribute": "groups", "value": "Moderator"} + ] + } +} +``` + +## Response Schema +After the connector applies the operations defined in the input payload, the connector must respond to IDN with the changes to the account so IDN can update the identity accordingly. If an account update operation results in no changes to the account, the connector responds with an empty object ```{}```. If the update operation results in one or more changes to the account, the connector responds with the complete account as it exists in the source, just like an account read response. IDN can parse the response and apply the differences accordingly. + +## Testing in IdentityNow +You can test the account update command the way you test the [Account Create](./account_create.md) command. Follow the steps in “Testing in IdentityNow” from “Account Create” to set up an access profile and role. Be sure to run the aggregation so the account(s) are created in the target source. Once the account(s) are created in the target source, modify the access profile to grant an additional entitlement. Return to the role and click the ‘Update’ button in the upper right corner. Doing so triggers the account update command because the accounts are already created in the target source. Once the update is complete, ensure the account(s) have the additional entitlement. + +Note: Testing the account update command for removing entitlements using this method does not work. You can remove the entitlement from the access profile and run an update, but IDN will not send an update command to the connector to remove the entitlement. We are looking for suggestions on how to test the removal of entitlements. \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/commands/entitlement_list.md b/docs/idn_docs/docs/custom_connectors/commands/entitlement_list.md new file mode 100644 index 000000000..2fb536e7d --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/commands/entitlement_list.md @@ -0,0 +1,90 @@ +# Entitlement List + +| Input/Output | Data Type | +|:-------------|:---------------------------:| +| Input | StdEntitlementListInput | +| Output | StdEntitlementListOutput | + +### Example StdEntitlementListInput +```javascript +{ + "type": "group" +} +``` +### Example StdEntitlementListOutput +```javascript +{ + "key": { + "simple": { + "id": "administrator" + } + }, + "type": "group", + "attributes": { + "id": "administrator", + "name": "Administrator" + } +} +``` +## Description + +The entitlement list command triggers during a manual or scheduled entitlement aggregation operation within IDN. This operation gathers a list of all entitlements available on the target source, usually multi-valued entitlements like groups or roles. This operation provides IDN administrators with a list of entitlements available on the source so they can create access profiles and roles accordingly, and it provides IDN with more details about the entitlements. The entitlement schema’s minimum requirements are name and ID, but you can add other values, such as created date, updated date, status, etc. + +![Discover Schema 4](../../img/custom_connectors/commands/entitlement_list/entitlement_list_idn.png) + +## Defining the Schema +The entitlement schema is defined in the [connector-spec.json](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/connector-spec.json) file. Currently, only the multi-valued “group” type is supported. The following values are the minimum requirements, but you can add more attributes. + +```javascript +... +"entitlementSchemas": [ + { + "type": "group", + "displayAttribute": "name", + "identityAttribute": "id", + "attributes": [ + { + "name": "id", + "type": "string", + "description": "Unique ID of the group (ex. admin)" + }, + { + "name": "name", + "type": "string", + "description": "The display name of the group (ex. Admin)" + } + ] + } +], +... +``` + +## Implementation +This can be implemented in the main connector file, [index.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/index.ts): + +```javascript +... +.stdEntitlementList(async (context: Context, input: StdEntitlementListInput, res: Response) => { + const groups = await airtable.getAllEntitlements() + + for (const group of groups) { + res.send(group.toStdEntitlementListOutput()) + } +}) +... +... +... +public toStdEntitlementListOutput(): StdEntitlementListOutput { + return this.buildStandardObject(); +} +private buildStandardObject(): StdEntitlementReadOutput | StdEntitlementListOutput { + return { + key: SimpleKey(this.id), + type: 'group', + attributes: { + id: this.id, + name: this.name + } + } +} +``` \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/commands/entitlement_read.md b/docs/idn_docs/docs/custom_connectors/commands/entitlement_read.md new file mode 100644 index 000000000..5d1547fc8 --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/commands/entitlement_read.md @@ -0,0 +1,64 @@ +# Entitlement Read + +>📘 At this time Entitlement Read is not triggered from IDN for any specific workflow and as such it is not necessary to implement this in order to have a fully functional connector. + +| Input/Output | Data Type | +|:-------------|:---------------------------:| +| Input | StdEntitlementReadInput | +| Output | StdEntitlementReadOutput | + +### Example StdEntitlementReadInput +```javascript +{ + "key": { + "simple": { + "id": "john.doe" + } + }, + "type": "group" +} +``` +### Example StdEntitlementReadOutput +```javascript +{ + "key": { + "simple": { + "id": "administrator" + } + }, + "type": "group", + "attributes": { + "id": "administrator", + "name": "Administrator" + } +} +``` +## Response Schema + +Entitlement read fetches a single entitlement’s attributes and returns the resulting object to IDN, similar to how entitlement list does. You can implement this in the main connector file, [index.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/index.ts): + +```javascript +... +.stdEntitlementRead(async (context: Context, input: StdEntitlementReadInput, res: Response) => { + const group = await airtable.getEntitlement(input.key) + + res.send(group.toStdEntitlementReadOutput()) +}) +... +... +... +public toStdEntitlementReadOutput(): StdEntitlementReadOutput { + return this.buildStandardObject(); +} + +private buildStandardObject(): StdEntitlementReadOutput | StdEntitlementListOutput { + return { + key: SimpleKey(this.id), + type: 'group', + attributes: { + id: this.id, + name: this.name + } + } +} +``` \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/commands/test_connection.md b/docs/idn_docs/docs/custom_connectors/commands/test_connection.md new file mode 100644 index 000000000..563110a61 --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/commands/test_connection.md @@ -0,0 +1,60 @@ +# Test Connection + +| Input/Output | Data Type | +|:-------------|:-------------------------:| +| Input | undefined | +| Output | StdTestConnectionOutput | + +### Example StdTestConnectionOutput +```javascript +{} +``` + +## Summary +The test connection command ensures the connector can communicate with the target web service. It validates API credentials, host names, ports, and other configuration items. To implement this command, look for either a health endpoint or a simple GET endpoint. Some web services implement a health endpoint that returns status information about the service, which can be useful to test a connection. If no health endpoint exists, use a simple GET endpoint that takes few to no parameters to ensure the connector can make a successful call to the web service. + +Use ‘Test Connection’ in the IDN UI after an admin has finished entering configuration information for a new instance of the connector. + +![Test Connection](../../img/custom_connectors/commands/test_connection/test_command_idn.png) + +## Implementation +In [index.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/index.ts), add the test connection function handler to your connector. Within this function, send a simple request to your web service to ensure the connection works. The web service this connector targets has a JavaScript SDK, so define your own function like the following example to test the connection: + +```javascript +export const connector = async () => { + + // Get connector source config + const config = await readConfig() + + // Use the vendor SDK, or implement own client as necessary, to initialize a client + const airtable = new AirtableClient(config) + + return createConnector() + .stdTestConnection(async (context: Context, input: undefined, res: Response) => { + res.send(await airtable.testConnection()) + }) + ... + ... +} +``` + +To implement the ```testConnection()``` function, use the following function created in the web service client code, [airtable.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/airtable.ts). + +```javascript + /** + * Test connection by listing users from the Airtable instance. + * This will make sure the apiKey has the correct access. + * @returns empty struct if response is 2XX + */ + async testConnection(): Promise { + return this.airTableBase('Users').select({ + view: 'Grid view' + }).firstPage().then(records => { + return {} + }).catch(err => { + throw new ConnectorError('unable to connect') + }) + } +``` + +This function calls an endpoint on the target web service to list all users. If the call is successful, the web service returns an empty object, which is okay because you do not need to do anything with the data. Your only goal is to ensure that you can make API calls with the provided configuration. \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/getting_started/cli_common_commands.md b/docs/idn_docs/docs/custom_connectors/getting_started/cli_common_commands.md new file mode 100644 index 000000000..462a0ae14 --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/getting_started/cli_common_commands.md @@ -0,0 +1,17 @@ +# Common CLI/SDK Commands + +- **Development** + - Create a project on your local system: ```sp conn init "my-project"``` + - Test your connector locally: ```npm run dev``` +- **Deployment** + - Create an empty connector in your IDN Org (used to get id so you can upload): ```sp conn create "my-project"``` + - Build a project: ```npm run pack-zip``` + - Upload your connector to your IDN Org: ```sp conn upload -c [connectorID | connectorAlias] -f dist/[connector filename].zip``` +- **Exploring** + - List connectors in your IDN Org: ```sp conn list``` + - List your connector tags: ```sp conn tags list -c [connectorID | connectorAlias]``` +- **Testing and Debugging** + - Test your connector on the IDN Org: ```sp connectors invoke [action] -c [connectorID | connectorAlias] -p config.json``` + - Get a list of actions: ```sp conn invoke -h``` + - Run read-only integration tests against your connector: ```sp conn validate -p config.json -c [connectorID | connectorAlias] -r``` + - Tail IDN Org connector logs: ```sp conn logs tail``` diff --git a/docs/idn_docs/docs/custom_connectors/getting_started/cli_getting_started.md b/docs/idn_docs/docs/custom_connectors/getting_started/cli_getting_started.md new file mode 100644 index 000000000..81ac589f5 --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/getting_started/cli_getting_started.md @@ -0,0 +1,46 @@ +# Getting Started with the CLI + +> 📘 **Currently in Beta** +> +> Connector development using this SDK and CLI is currently in beta. To participate, please sign up for the beta [here](https://app.smartsheet.com/b/form/1e4a7f063de4496b9c6d33f191996950). Once your tenant is activated, you can access and create new connectors. + +## Prerequisites + +To build the CLI, the following packages are required: +- Golang >= 1.17 +- Make >= 3.81 + +To develop a connector, the following packages are required: +- Node >= 14.17.3 + +## IDE + +Although you can develop connectors in a text editor, use an Integrated Development Environment (IDE) for a better experience. There are many IDEs that support Javascript/Typescript, including [Visual Sudio Code](https://code.visualstudio.com/Download), a free IDE with native support for Javascript/Typescript. VS Code provides syntax highlight, debugging, hints, code completion, and other helpful options. + +## Install CLI + +SailPoint provides a CLI tool to manage the connectors' lifecycles. To install and set up the CLI, follow the instructions in this repository's README file (TBD. This repository is not public yet): + +[SailPoint CLI on GitHub](https://github.com/sailpoint-oss/sp-connector-cli) + +## Create new project + +To create an empty connector project, run ```sp conn init "my-project"``` in your terminal. The CLI init command creates a new folder with your project name in the location where you run the command. + +Run npm install to change the directory to the project folder and install the dependencies. You may need to provide your GitHub credentials because the CLI tool depends on a SailPoint internal GitHub repository. + +### Source Files +The initial project source directory contains three main files: + +- **index.ts:** Use this file to register all the available commands the connector supports, provide the necessary configuration options to the client code implementing the API for the source, and pass data the client code obtains to IdentityNow. This file can either use a vendor supplied client Software Development Kit (SDK) to interact with the web service or reference custom client code within the project. + +- **my-client.ts:** Use this template to create custom client code to interact with a web service’s APIs. If the web service does not provide an SDK, you can modify this file to implement the necessary API calls to interact with the source web service. + +- **connector-spec.ts** This file describes how the connector works to IDN. More information about the connector spec is available in the next section. At a high level, it has the information for the following: + - What commands the connector supports + - What config values the user must provide when creating the connector + - Defining the account schema + - Defining the entitlment schema + - Defining the account create template that maps fields from IDN to the connector + +These files are templates that provide guidance to begin implementing the connector on the target web service. Although you can implement a connector's entire functionality within these three files (or even just one if the web service provides an SDK), you can implement your own code architecture, like breaking out common utility functions into a separate file or creating separate files for each operation. \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/getting_started/cli_test_build_deploy.md b/docs/idn_docs/docs/custom_connectors/getting_started/cli_test_build_deploy.md new file mode 100644 index 000000000..ad8ab9010 --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/getting_started/cli_test_build_deploy.md @@ -0,0 +1,116 @@ +# Test, Build and Deploy Using the CLI +## Testing Your Connector + +You can use the following Postman Collection file to locally run tests for each of the commands. + +[Postman Collection](../../../files/SaaS_Connectivity.postman_collection) + +As you implement command handlers, you must test them. The connector SDK provides some utility methods to locally run your connector. To start, run ```npm run dev``` within the connector project folder. This script locally starts an Express server on port 3000, which can be used to invoke a command against the connector. You do not need to restart this process after making changes to connector code. Once the Express server is started, you can send ```POST``` requests to ```localhost:3000``` and test your command handlers. For example, you can run ```POST localhost:3000``` with the following payload to run the stdAccountRead handler method. + +```json +{ + "type": "std:account:read", + "input": { + "identity": "john.doe" + }, + "config": { + "token": "" + } +} +``` +- **type:** The command handler’s name. It also refers to the operation being performed. +- **input:** Input to provide to the command handler. +- **config:** The configuration values required to test locally. A ```token``` value is not required, but the default project specifies ```token```, so you must include it in your request to begin. + +## Create and upload connector bundle +Follow these steps to use the CLI to package a connector bundle, create it in your IdentityNow org, and upload it to IdentityNow. +### Package connector files +You must compress the files in the connector project into a zip file before uploading them to IdentityNow. + +Use the CLI to run ```npm run pack-zip``` to build and package the connector bundle. Put the resulting zip file in the ```dist``` folder. + + +### Create connector in your org +Before uploading the zip file, you must create an entry for the connector in your IdentityNow org. Run ```sp conn create "my-project"``` to create a connector entry. + +The response to this command contains a connector ID you can use to manage this connector. + +```bash +$ sp conn create "example-connector" ++--------------------------------------+----------------------------+ +| ID | ALIAS | ++--------------------------------------+----------------------------+ +| a9360354-2f9d-4111-bff6-7cd53184a61e | example-connector | ++--------------------------------------+----------------------------+ +``` + +Run ```sp conn list``` to retrieve the connector ID at any time. + +```bash +$ sp conn list ++--------------------------------------+----------------------------+ +| ID | ALIAS | ++--------------------------------------+----------------------------+ +| 39fe3f4f-3559-4e1f-98bb-2f6d0bcb13dc | airtable-hr | +| a9360354-2f9d-4111-bff6-7cd53184a61e | example-connector | ++--------------------------------------+----------------------------+ +``` + +### Upload connector zip file to IdentityNow +Run ```sp conn upload -c [connectorID | connectorAlias] -f dist/[connector filename].zip``` to upload the zip file built from the previous step to IdentityNow. + +```bash +$ sp conn upload -c example-connector -f dist/example-connector-0.1.0.zip ++--------------------------------------+---------+ +| CONNECTOR ID | VERSION | ++--------------------------------------+---------+ +| a9360354-2f9d-4111-bff6-7cd53184a61e | 7 | ++--------------------------------------+---------+ +``` + + +The first version upload of connector zip file also creates the ```latest``` tag, pointing to the latest version of the connector file. After uploading the connector bundle zip file, you can run ```sp conn tags list -c example-connector``` to see the connector tags. + +```bash +$ sp conn tags list -c example-connector ++--------------------------------------+----------+----------------+ +| ID | TAG NAME | ACTIVE VERSION | ++--------------------------------------+----------+----------------+ +| 8cd99eea-cfe1-424f-abfd-6494292b13a8 | latest | 3 | ++--------------------------------------+----------+----------------+ +``` + +## Test connector in IdentityNow +Follow these steps to test a connector bundle in both IdentityNow and the IdentityNow user interface (UI). + +### Test connector bundle in IdentityNow +The connector CLI provides ways to test invoking commands with any connector upload version. Before running a command, create a file, **config.json**, in the root project folder. Include any configuration items required to interact with the target web service in this file, such as API token, username, password, organization, version, etc. The following snippet is an example: + +```json +{ + "token": "123acsa494fbasd#asd" +} +``` + +This file is required and requires at least one key value even if your connector does not require anything. + +Next, invoke the command using the connector ID and config.json. For example, this command invokes std:account:list command on the connector: + +```sp connectors invoke account-list -c example-connector -p config.json``` + +You will receive a list of JSON objects for each account the connector contains. + +```bash +$ sp connectors invoke account-list -c example-connector -p config.json +2022/06/29 11:06:07 Running "std:account:list" with "{}" +{"key":{"simple":{"id":"john.doe"}},"disabled":false,"locked":false,"attributes":{"id":"john.doe","displayName":"John Doe","entitlements":["administrator","sailpoint"]}} +``` + +>⚠️ Sensitive information! +> +> Ensure that you add config.json to your .gitignore file so you do not accidentally store secrets in your code repository. + +## Test connector from IdentityNow UI +Go to your IdentityNow org’s source section. Create a source from the connector you just uploaded. This connector will display in the dropdown list: **example-connector (tag: latest)** + +After creating a source, you can to test connection, aggregate account, etc. from the IdentityNow UI. \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/getting_started/connector_spec.md b/docs/idn_docs/docs/custom_connectors/getting_started/connector_spec.md new file mode 100644 index 000000000..37a8b98de --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/getting_started/connector_spec.md @@ -0,0 +1,65 @@ +# Connector specification file (connector-spec.json) + +## Summary +The connector spec file tells IDN how the connector should interact between IDN and the custom connector. It is the glue between IDN and the connector, so understanding the different sections are key to understanding how to build a custom connectors. + +## Sample File + +To see a sample spec file, see this link: [connector-spec.json](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/connector-spec.json) + +## Description of Fields + +The following describes in detail the different fields in the connector spec: + +- **name:** The name of the connector as it appears in IDN. Tags can be appended to this name. + +- **keyType:** Either “simple” or “compound” This determines which type of key your connector expects to receive and send back for each of the commands. This must always be indicated in your connector spec - the connector returns the correct type for each command that returns a key type. + - For example, the stdAccountRead command input is the StdAccountReadInput. if you select keyType as “simple,” then the StdAccountReadInput.key will be the type SimpleKey. + +- **commands:** The list of commands the connector supports. A full list of available commands can be found here. + +- **sourceConfig** A list of configuration items you must provide when you create a source in IDN. The order of these items is preserved in the UI. + - **type:** This is always “section” - it indicates a new section. + - **key:** The name of the configuration item as it is referenced in code. + - **label:** The name of the configuration item as it appears in the UI. + - **required** (Optional): Set to 'false' by default. Valid values are 'true' or 'false.' You must populate required configuration items in the IDN source configuration wizard before continuing. + - **type:** The configuration items' types. The following types are valid: + - text + - password + - url + - email + - number + - checkbox + - json + - **accountSchema:** The schema for an account in IDN populated by data from the source. + - **displayAttribute:** Identifies the attribute (defined below) used to map to ```Account Name``` in the IdentityNow account schema. This should be a unique value even though it is not required because the connector will use this value to correlate accounts in IDN to accounts in the source system. + - **identityAttribute:** Identifies the attribute (defined below) used to map to ```Account ID``` in the IdentityNow account schema. This must be a globally unique identifier, such as email address, employee ID, etc. + - **groupAttribute:** Identifies the attribute used to map accounts to entitlements. For example, a web service can define ```groups``` that users are members of, and the ```groups``` grant entitlements to each user. In this case, **groupAttribute** is “groups,” and there is also an account attribute called “groups”. + - **attributes:** One or more attributes that map to a user’s attribute on the target source. Each attribute defines the following: + - **name:** The attribute’s name as it appears in IDN. + - **type:** The attribute’s type. Possible values are ```string```, ```boolean```, ```long```, and ```int```. + - **description:** A helpful description of the attribute. This is useful to source owners when they are trying to understand the account schema. + - **managed:** This indicates whether the entitlements are manageable through IDN or read-only. + - **entitlement:** This boolean indicates whether the attribute is an entitlement. Entitlements give identities privileges on the source system. Use this indication to determine which fields to synchronize with accounts in IDN for tasks such as separation of duties and role assignment. The boolean indicates whether the attribute is an entitlement. + - **multi:** This indicates entitlements that are stored in an array format. This one field can store multiple entitlements for a single account. + - **entitlementSchemas:** A list of entitlement schemas in IDN populated by data from the source. + - **type:** The entitlement’s type. Currently, only ```group``` is supported. + - **displayAttribute:** The entitlement attribute’s name. This can be the ```name``` or another human friendly identifier for a group. + - **identityAttribute:** The entitlement attribute’s unique ID. This can be the ```id``` or another unique key for a group. + - **attributes:** The entitlement’s list of attributes. This list of attributes is an example: ```id```, ```name```, and ```description```. + - **name:** The name of the attribute as it appears in IDN. + - **type:** The attribute’s type. Possible values are ```string```, ```boolean```, ```long```, and ```int```. + - **description:** A helpful description the attribute. This is useful to source owners when they are trying to understand the account schema. + - **accountCreateTemplate:** A map of identity attributes IDN will pass to the connector to create an account in the target source. + - **key:** The unique identifier of the attribute. This is also the name that is presented in the Create Profile screen in IDN. + - **label:** A friendly name for presentation purposes. + - **type:** The attribute’s type. Possible values are ```string```, ```boolean```, ```long```, and ```int```. + - **initialValue (Optional):** Use this to specify identitAttribute mapping, generator or default values. + - **type:** The initial value type. Possible values are ```identityAttribute```, ```generator```, ```static```. + - **attributes:** Attributes change depending on the type selected. + - **name:** Use this to identify the mapping for identityAttribute type, or the generator to use (```Create Password```, ```Create Unique Account ID```). + - **value:** Use this as the default value for the static type. + - **maxSize:** Use this for the Create Unique Account ID generator type. This value specifies the maximum size of the username to be generated. + - **maxUniqueChecks:** Use this for the Create Unique Account ID generator type. This value specifies the maximum retries in case a unique ID is not found with the first random generated user. + - **template:** Use this for the Create Unique Account ID generator type. This value specifies the template used for generation. Example: ```"$(firstname).$(lastname)$(uniqueCounter)"```. + - **required (Optional):** Determines whether the account create operation requires this attribute. It defaults to ```false```. If it is ```true``` and IdentityNow encounters an identity missing this attribute, IDN does not send the account to the connector for account creation. \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/getting_started/example_connectors.md b/docs/idn_docs/docs/custom_connectors/getting_started/example_connectors.md new file mode 100644 index 000000000..6485f2e32 --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/getting_started/example_connectors.md @@ -0,0 +1,5 @@ +# Example Connectors + +- [Airtable connector](https://github.com/sailpoint-oss/airtable-example-connector) is a real connector that works like a flat file data source and is great for demonstrating how a connector works. + +- [Discourse Connector](https://github.com/sailpoint-oss/discourse-connector-2) is a real connector that works with the [Discourse service](https://www.discourse.org/). The documentation for each command references code from this example application. \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/getting_started/postman_collection.md b/docs/idn_docs/docs/custom_connectors/getting_started/postman_collection.md new file mode 100644 index 000000000..8d045cfc4 --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/getting_started/postman_collection.md @@ -0,0 +1,5 @@ +# Postman Collection + +Use the following Postman Collection file to run tests for each of the commands locally. + +[Postman Collection](../../../files/SaaS_Connectivity.postman_collection) \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/in_depth/api_calls.md b/docs/idn_docs/docs/custom_connectors/in_depth/api_calls.md new file mode 100644 index 000000000..dbfe18cb1 --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/in_depth/api_calls.md @@ -0,0 +1,35 @@ +Calling API endpoints sequentially for hundreds or thousands of accounts is slow. If several API calls are required to build a user’s account, then it is recommended that you use asynchronous functions to speed up this task. Asynchronous functions allow your program to execute several commands at once, which is especially important for high latency commands like calling API endpoints - each call to an endpoint can take anywhere from several milliseconds to several seconds. The following code snippet from [discourse-client.ts](https://github.com/sailpoint-oss/discourse-connector-2/blob/main/Discourse/src/discourse-client.ts) shows how you can use asynchronous functions to quickly build a list of account profiles for your source’s users: + +```javascript +async getUsers(): Promise { + // First, get the members of the group. This will call a single endpoint to get all the users of a group. + const groupMembers = await this.getGroupMembers(this.primaryGroup!) + + // To get the full user representation, we need to invoke a single API call for each user. + // Because there can be hundreds, or even thousands of users, this would take several minutes + // if run sequentially. We use Promise.all to execute a list of API calls in parallel. + let users = await Promise.all(groupMembers.map(member => this.getUser(member.id!.toString()))) + + // Emails aren't included in the above call. Once again, we need to execute several API calls + // in parallel. + const emails = await Promise.all(groupMembers.map(member => this.getUserEmailAddress(member.username!))) + + // Finally, we need to update our user accounts with the emails we obtained. This code + // doesn't make network calls, so it doesn't need to use Promise.all. + for (let i = 0; i < groupMembers.length; i++) { + users[i].email = emails[i] + } + + return users + } + +``` +- Line 3 gets all the user IDs for a default group to which all the users you want to track are assigned. + +- Line 6 gets more attributes for each user present in the group. There can be hundreds of users who need their attributes fetched, so use Promise.all to build and execute the API calls asynchronously, speeding up the operation’s completion time. + +- Line 9 uses the same strategy as Line 6, except it calls another endpoint that will get each user’s email address, which isn’t present in the previous API call. Use Promise.all again to speed up the operation. + +- Line 12-14 combines the data you gathered from the preceding calls to complete your user accounts. + +>📘 As a general guideline, any time you must execute several API calls that all call the same endpoint, it is recommended that you use Promise.all to speed up the operation. \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/in_depth/debugging.md b/docs/idn_docs/docs/custom_connectors/in_depth/debugging.md new file mode 100644 index 000000000..d140e0cf2 --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/in_depth/debugging.md @@ -0,0 +1,77 @@ +# Debugging + +## Debug locally +An easy way to debug locally is to use ```console.log()``` to print debug information to your console. You can add ```console.log()``` statements anywhere, and the messages they print can contain static text or variables. For example, to see the contents of an input object when you are invoking the ```stdAccountCreate``` command, you can craft the following debug logic: + +```javascript +export const connector = async () => { + + return createConnector() + + .stdAccountCreate(async (context: Context, input: StdAccountCreateInput, res: Response) => { + // Print the contents of input to the console. Must use + // JSON.stringify() to print the contents of an object. + console.log(`Input received for account create: ${JSON.stringify(input)}`) + if (!input.attributes.id) { + throw new ConnectorError('identity cannot be null') + } + const user = await airtable.createAccount(input) + logger.info(user, "created user in Airtable") + res.send(user.toStdAccountCreateOutput()) + }) +} +``` + +```console.log()``` statements work anywhere, and they work when you deploy your connector to IDN. However, these statements can create clutter in your code. You will often have to clean up debug statements once you are done. + +If your IDE supports debugging JavaScript, then your IDE’s built-in debugger can be a powerful and easy way to debug your code. + +## Debug in VS Code +### Debug through the javascript debug terminal + +In VS Code, open a javascript debug terminal window and run the npm run dev command. + +```npm run dev``` + +Now you can set breakpoints in your typescript files in VS Code: +![debugging 1](../../img/custom_connectors/in_depth/debugging1.png) + +### Debug through the VS Code Debug configuration +To simplify the debugging process, you can consolidate the debugging steps into a VS Code launch configuration. The following snippet is an example of how you would do so: + +**Launch.json:** +```json +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Launch Program via NPM", + "request": "launch", + "runtimeArgs": [ + "run-script", + "dev" + ], + "windows": { + "runtimeExecutable": "npm.cmd", + }, + "linux": { + "runtimeExecutable": "npm", + }, + "skipFiles": [ + "/**" + ], + "type": "node" + } + ] +} +``` + +With these configurations set, you can run the debugger by selecting the options shown in the following image: + +![debugging 2](../../img/custom_connectors/in_depth/debugging2.png) + +## Debug in IdentityNow +You can use the ```sp conn logs``` command to gain insight into how your connector is performing while running in IDN. See the section on logging for more information. \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/in_depth/error_handling.md b/docs/idn_docs/docs/custom_connectors/in_depth/error_handling.md new file mode 100644 index 000000000..5bcd79e7e --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/in_depth/error_handling.md @@ -0,0 +1,81 @@ +# Error Handling +Any time code can fail due to validation issues, connectivity or configuration errors, handle the error and provide information back to the user about what went wrong. If you handle your errors properly, it will be easier to debug and pinpoint what happened in your connector when something goes wrong. + +## Connector Errors +The connector SDK has a built-in ConnectorError to use in your project to handle most generic errors: + +[airtable.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/airtable.ts) + +```javascript +import { ConnectorError } from "@sailpoint/connector-sdk" + +... + +export class AirtableClient { + +... + + async getAllAccounts(): Promise { + return this.airTableBase('Users').select({ + view: 'Grid view' + }).firstPage().then(records => { + const recordArray: Array = [] + for (const record of records) { + recordArray.push(AirtableAccount.createWithRecords(record)) + } + return recordArray + }).catch(err => { + throw new ConnectorError('error while getting accounts: ' + err) + }) + } +``` + +## Custom Errors +You can also create custom errors and use them in your code to give more meaningful and specific responses to error states. For example, when you are configuring your connector, it is recommended that you throw an ```InvalidConfigurationError``` instead of a generic ConnectorError. To do this, create the custom error: + +[invalid-configuration-error.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/errors/invalid-configuration-error.ts) +```javascript +import { ConnectorError, ConnectorErrorType } from '@sailpoint/connector-sdk' + +/** + * Thrown when an application missing configuration during initialization + */ + +export class InvalidConfigurationError extends ConnectorError { + /** + * Constructor + * @param message Error message + * @param type ConnectorErrorType they type of error + */ + constructor(message: string, type?: ConnectorErrorType) { + super(message, type) + this.name = 'InvalidConfigurationError' + } +} +``` + +Then throw the error in your code: + +[airtable.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/airtable.ts) +```javascript +import { InvalidConfigurationError } from "./errors/invalid-configuration-error" + +export class AirtableClient { + private readonly airTableBase: Airtable.Base + constructor(config: any) { + // Fetch necessary properties from config. + // Following properties actually do not exist in the config -- it just serves as an example. + if (config.apiKey == null) { + throw new InvalidConfigurationError('token must be provided from config') + } + if (config.airtableBase == null) { + throw new InvalidConfigurationError('airtableBase base id needed') + } + Airtable.configure({apiKey: config.apiKey}) + this.airTableBase = Airtable.base(config.airtableBase) + } + + ... + +} +``` \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/in_depth/linting.md b/docs/idn_docs/docs/custom_connectors/in_depth/linting.md new file mode 100644 index 000000000..a46e1a68e --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/in_depth/linting.md @@ -0,0 +1,23 @@ +# Linting +To add linting to your project, simple install the linter using NPM: + + +```npm install --save-dev eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin`` + +Then add the ```.eslintrc.yml``` file on the project root: + +```yaml +env: + browser: true + es2021: true +extends: + - eslint:recommended + - plugin:@typescript-eslint/recommended +parser: '@typescript-eslint/parser' +parserOptions: + ecmaVersion: latest + sourceType: module +plugins: + - '@typescript-eslint' +rules: {} +``` \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/in_depth/logging.md b/docs/idn_docs/docs/custom_connectors/in_depth/logging.md new file mode 100644 index 000000000..5127e229a --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/in_depth/logging.md @@ -0,0 +1,170 @@ +# Logging + +## Printing Logs with the CLI +Fetch logs from IDN by issuing the ```sp conn logs``` command: +```bash +$ sp conn logs + +[2022-07-14T11:04:24.276-04:00] ERROR | connectorMessage ▶︎ {"commandType":"std:test-connection","invocationId":"49213a1c-0ba5-48f4-bceb-b6b5b0ec18d5","message":"Connector error ConnectorError: unable to connect, check your connection parameters and API key\n at /app/index.js:1:441187\n at runMicrotasks (\u003canonymous\u003e)\n at processTicksAndRejections (node:internal/process/task_queues:96:5)\n at async /app/index.js:1:441923\n at async Connector._exec (/app/index.js:1:5872)\n at async /usr/bin/index.js:1:77407 {\n type: 'generic'\n}\n","requestId":"cca732a2-084d-4433-9bd5-ed22fa397d8d","version":2} +[2022-07-14T11:04:24.310-04:00] INFO | commandOutcome ▶︎ {"commandType":"std:test-connection","completed":true,"elapsed":62,"error":"[ConnectorError] unable to connect, check your connection parameters and API key","message":"command failed","requestId":"cca732a2-084d-4433-9bd5-ed22fa397d8d","version":2} +[2022-07-14T11:04:24.442-04:00] INFO | invokeCommand ▶︎ Command execution started : std:test-connection, for connector version 29. +[2022-07-14T11:04:24.442-04:00] INFO | invokeCommand ▶︎ Command invocation complete : std:test-connection, for connector version: 29. Elapsed time 144.178µs +[2022-07-14T11:04:24.812-04:00] INFO | commandOutcome ▶︎ {"commandType":"std:test-connection","completed":true,"elapsed":369,"message":"command completed","requestId":"cca732a2-084d-4433-9bd5-ed22fa397d8d","version":29} +[2022-07-14T11:04:24.890-04:00] INFO | invokeCommand ▶︎ Command execution started : std:test-connection, for connector version 8. +[2022-07-14T11:04:24.890-04:00] INFO | invokeCommand ▶︎ Command invocation complete : std:test-connection, for connector version: 8. Elapsed time 125.749µs +[2022-07-14T11:04:24.941-04:00] INFO | commandOutcome ▶︎ {"commandType":"std:test-connection","completed":true,"elapsed":49,"message":"command completed","requestId":"cca732a2-084d-4433-9bd5-ed22fa397d8d","version":8} +``` +To tail the logs to see output as it happens, execute the ```sp conn logs tail``` command. + +It can also be helpful to execute the logs command along with grep to filter your results to a specific connector or text: + +```bash +$ sp conn logs | grep 'connector version 29' +[2022-07-14T11:04:24.442-04:00] INFO | invokeCommand ▶︎ Command execution started : std:test-connection, for connector version 29. +``` + +## Logging with console.log +anywhere that you use console.log in your code will expose the output to the logs. The following example has a printed statement in the index.ts file: + +```javascript +// Connector must be exported as module property named connector +export const connector = async () => { + +... + // Use the vendor SDK, or implement own client as necessary, to initialize a client + const airtable = new AirtableClient(config) + return createConnector() + .stdTestConnection(async (context: Context, input: undefined, res: Response) => { + // print the output to the console + console.log('testing connector logging') + res.send(await airtable.testConnection()) + }) + +... + +``` +When you run the ```sp conn logs``` command, you will see the following in the output: +```bash +$ sp conn logs tail + +[2022-07-14T11:23:05.418-04:00] INFO | connectorMessage ▶︎ {"commandType":"std:test-connection","invocationId":"e5c73502-2c03-4b22-aa0d-5b67655e8f2d","message":"testing connector logging\n","requestId":"93370aa663d94bebb509bf5661f18650","version":9} +[2022-07-14T11:23:06.085-04:00] INFO | commandOutcome ▶︎ {"commandType":"std:test-connection","completed":true,"elapsed":1071,"message":"command completed","requestId":"93370aa663d94bebb509bf5661f18650","version":9} +``` + +## Logging using the SDK + +Use the built in logging tool to simplify the logging process and enhance your logger’s capabilities. To start, import the logger from the sdk: + +```import { logger as SDKLogger } from '@sailpoint/connector-sdk'``` + +Next, add a simple configuration for the logger to use throughout your application. + +[logger.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/logger/logger.ts) +```javascript +import { logger as SDKLogger } from '@sailpoint/connector-sdk' + +export const logger = SDKLogger.child( + // specify your connector name + { connectorName: 'Airtable' } +) +``` + +Now you can import your logger into your project and start logging. + +[index.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/index.ts) + +```javascript +// Connector must be exported as module property named connector +export const connector = async () => { + +... + // Use the vendor SDK, or implement own client as necessary, to initialize a client + const airtable = new AirtableClient(config) + return createConnector() + .stdAccountList(async (context: Context, input: undefined, res: Response) => { + const accounts = await airtable.getAllAccounts() + + // use the logger to send accounts that are fetched + logger.info(accounts, "fetched the following accounts from Airtable") + for (const account of accounts) { + res.send(account.toStdAccountListOutput()) + } + }) + +... + +``` + +## Configuring the SDK to Mask Sensitive Values + +The SDK Logger uses [Pino](https://github.com/pinojs/pino) under the hood, which has the built-in capability to search and remove json paths that can contain sensitive information. + +>🚧 Never expose any Personal Identifiable Information in any logging operations. + +Start by looking at line 116 to 122 in your logger configuration, which looks like the one below: + +```javascript +import { logger as SDKLogger } from '@sailpoint/connector-sdk' + +export const logger = SDKLogger.child( + // specify your connector name + { connectorName: 'Airtable' }, + // This is optional for removing specific information you might not want to be logged + { + redact: { + paths: [ + '*.password', + '*.username', + '*.email', + '*.id', + '*.firstName', + '*.lastName', + '*.displayName' + ], + censor: '****', + }, + } +) +``` +Now compare that with the object you want to remove information from while still logging information in it: + +[AirtableAccount.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/models/AirtableAccount.ts) + +```javascript +export class AirtableAccount { + airtableId!: string + displayName!: string + email!: string + id!: string + department!: string + firstName!: string + lastName!: string + enabled = true + locked = false + password!: string + entitlments!: Array +} +``` +Now when you log the contents of an ```AirtableAccount``` object, you will see all the fields redacted. For example, in [index.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/index.ts) we log the ```accounts``` in the following code snippet: + +```javascript +.stdAccountList(async (context: Context, input: undefined, res: Response) => { + const accounts = await airtable.getAllAccounts() + + logger.info(accounts, "fetched the following accounts from Airtable") + for (const account of accounts) { + res.send(account.toStdAccountListOutput()) + } +}) +``` + +which results in the following log output: +```bash +$ sp conn logs + +[2022-07-14T11:19:29.368-04:00] INFO | invokeCommand ▶︎ Command invocation complete : std:account:list, for connector version: 8. Elapsed time 111.836542ms +[2022-07-14T11:19:30.629-04:00] INFO | connectorMessage ▶︎ {"0":{"airtableId":"recdUN76q9KibYMir","department":"sailpoint admins","displayName":"****","email":"****","enabled":true,"entitlments":["administrator","sailpoint"],"firstName":"****","id":"****","lastName":"****","locked":false},"1":{"airtableId":"recXJEzpeySmtlIOF","department":"external","displayName":"****","email":"****","enabled":true,"entitlments":["administrator"],"firstName":"****","id":"****","lastName":"****","locked":false},"2":{"airtableId":"recnsv3VJ1K4k867v","department":"external","displayName":"****","email":"****","enabled":true,"entitlments":[""],"firstName":"****","id":"****","lastName":"****","locked":false},"commandType":"std:account:list","connectorName":"Airtable","invocationId":"541bcc2f-1d42-4c78-b201-de3ea46552e0","message":"fetched the following accounts from Airtable","requestId":"379a8a4510944daf9d02b51a29ae863e","version":8} +[2022-07-14T11:19:30.678-04:00] INFO | commandOutcome ▶︎ {"commandType":"std:account:list","completed":true,"elapsed":1290,"message":"command completed","requestId":"379a8a4510944daf9d02b51a29ae863e","version":8} +``` + +You can see that any of the PII information has now been transformed into "****" \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/in_depth/rate_limits.md b/docs/idn_docs/docs/custom_connectors/in_depth/rate_limits.md new file mode 100644 index 000000000..181fee6cc --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/in_depth/rate_limits.md @@ -0,0 +1,88 @@ +# Handling Rate Limits +APIs often implement rate limits to prevent any one user from abusing the API or using an unfair amount of resources, limiting what other users of the API can do. The rate limits can manifest in many ways, but one of the most common ways is the 429 (Too Many Requests) HTTP status code. You must check the documentation of the API you are using to see whether it enforces rate limits and how it notifies you when you reach that limit. An example of rate limit documentation for Stripe’s API can be found [here](https://stripe.com/docs/rate-limits). + +If you are using a vendor supplied client library for the API, check the documentation for that client library to see whether it handles rate limits for you. If it does, you do not need to worry about rate limits. If it does not or if you have to implement your own library for interacting with the target API, you must handle rate limiting yourself. If you are implementing your own library for the target API, the easiest way to handle rate limits is to use the [axios-retry](https://www.npmjs.com/package/axios-retry) NPM package in conjunction with the [axios](https://www.npmjs.com/package/axios) HTTP request library. Start by including both packages in the dependencies section of your ```package.json``` file: + +```json +... +"dependencies": { + "@sailpoint/connector-sdk": "github:sailpoint-oss/sp-connector-sdk-js#main", + "axios": "^0.24.0", + "axios-retry": "^3.2.4" + } +... +``` + +Next, run ```npm install``` in your project directory to install the packages. Once they are installed, go to the section of your code that handles API calls to your source and wrap your Axios HTTP client object in an Axios retry object. In the following snippet, the code automatically retries an API call that fails with a 429 error code three times, using exponential back-off between each API call. You can configure this better to suit your API’s rate limit. The following code snippet from [discourse-client.ts](https://github.com/sailpoint-oss/discourse-connector-2/blob/main/src/discourse-client.ts) shows the code necessary to set up the retry logic: + +```javascript +import { ConnectorError } from "@sailpoint/connector-sdk" +import axios, { AxiosInstance } from "axios" +import axiosRetry from "axios-retry" + +/** + * DiscourseClient is the client that communicates with Discourse APIs. + */ +export class DiscourseClient { + private readonly apiKey?: string + private readonly apiUsername?: string + private readonly baseUrl?: string + + httpClient: AxiosInstance + + constructor(config: any) { + // Fetch necessary properties from config. + this.apiKey = config?.apiKey + if (this.apiKey == null) { + throw new ConnectorError('apiKey must be provided from config') + } + + this.apiUsername = config?.apiUsername + if (this.apiUsername == null) { + throw new ConnectorError('apiUsername must be provided from config') + } + + this.baseUrl = config?.baseUrl + if (this.baseUrl == null) { + throw new ConnectorError('baseUrl must be provided from config') + } + + this.httpClient = axios.create({ + baseURL: this.baseUrl, + headers: { + 'Api-Key': this.apiKey, + 'Api-Username': this.apiUsername + } + }) + + // Wrap our Axios HTTP client in an Axios retry object to automatically + // handle rate limiting. By default, this logic will retry a given + // API call 3 times before failing. Read the documentation for + // axios-retry on NPM to see more configuration options. + axiosRetry(this.httpClient, { + retryDelay: axiosRetry.exponentialDelay, + retryCondition: (error) => { + // Only retry if the API call recieves an error code of 429 + // this logic can be replaced with whatever approach is necessary for your connector + return error.response!.status === 429 + } + }) + } +... +``` + +Because ```axios-retry``` wraps an ```axios``` object, you can make API calls like you normally would with Axios without any special options or configuration. + +```javascript +private async getUserEmailAddress(username: string): Promise { + // Use our axios httpClient object like we normally would. If this call + // fails with a 429, it will automatically wait 30 seconds before retrying + // the call. It will do this three times before hard failing. The catch + // function will catch any other error besides a 429. + const response = await this.httpClient.get(`/u/${username}/emails.json`).catch(error => { + throw new ConnectorError(`Failed to retrieve email for user ${username}`) + }) + + return response.data.email! +} +``` diff --git a/docs/idn_docs/docs/custom_connectors/in_depth/testing.md b/docs/idn_docs/docs/custom_connectors/in_depth/testing.md new file mode 100644 index 000000000..bc5b410fd --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/in_depth/testing.md @@ -0,0 +1,209 @@ +# Testing + +## Getting Started + +When you set up a new project, the following test files are created: ```index.spec.ts``` and ```my-client.spec.ts```. Execute the tests immediately using npm test. + +```bash +$ npm run test + +> test-project-5@0.1.0 test +> jest --coverage + + PASS src/my-client.spec.ts + PASS src/index.spec.ts +--------------|---------|----------|---------|---------|------------------- +File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s +--------------|---------|----------|---------|---------|------------------- +All files | 72 | 100 | 75 | 70.83 | + index.ts | 56.25 | 100 | 50 | 53.33 | 29-56 + my-client.ts | 100 | 100 | 100 | 100 | +--------------|---------|----------|---------|---------|------------------- + +Test Suites: 2 passed, 2 total +Tests: 7 passed, 7 total +Snapshots: 0 total +Time: 1.937 s +Ran all test suites. +{"level":"INFO","message":"Running test connection"} +``` +You can also view the results in an html report by viewing the ```index.html``` file inside the ```coverage/lcov-report``` folder: + +![Account List](../../img/custom_connectors/in_depth/testing1.png) +![Account List](../../img/custom_connectors/in_depth/testing2.png) + +## Testing Techniques + +[Jest](https://jestjs.io/docs/getting-started) is a testing framework provided for javascript that focuses on simplicity. CLI includes it when it generates the project. It is recommended to use Jest to test your code. + +Testing your code is important because it can highlight implementation issues before they get into production. If your tests are setup with good descriptions, the tests can also help explain why certain conditions are important in the code, so if a new developer breaks a test, he or she will know what broke and why the functionality is important. + +If you have good tests setup, then you can quickly identify and fix changes or updates that occur in dependent sources. + +Jest provides [many different ways to test your code](https://jestjs.io/docs/using-matchers). Some techniques are listed below: + +### Test a method and evaluate the response using ```expect``` +```javascript + it('get users populates correct fields', async () => { + + // Execute the method + let res = await discourseClient.getUsers() + + // Check the response, and make sure it is an array with exactly 2 elements + expect(res.length).toBe(2) + + // Evaluate the response email and ensure it matches the expected result + expect(res[0].email === 'test.test@test.com') + }) +``` +- Line 4 executes the method. + +- Line 7 asserts that the response is an array with 2 elements. + +- Line 10 evaluates the email field in the array to ensure it matches the expected result. + +### Test a method to ensure it calls another method using ```spyOn``` + +```javascript + it('password is generated when not provided', async () => { + + // Create the spy for later use. We want to know details about this method. + const spy = jest.spyOn(DiscourseClient.prototype as any, "generateRandomPassword") + + // Execute the method + let res = await discourseClient.createUser({ "email": "", "username": "test" }) + + // Validate that the internal method "generateRandomPassword" was called + expect(spy).toBeCalled(); + + // Validate the email field matches the expected result + expect(res.email === 'test.test@test.com') + }) +``` +- Line 4 sets up the spy. “generateRandomPassword” is an internal method that gets called when the password is not provided. + +- Line 7 executes the method. + +- Line 10 checks the spy to ensure that the internal method was called. + +## Setting up Mock Services + +The easiest way to mock your client is to set up a mock service that returns data just like your service would in production so you can test all your functions and data manipulation in your unit tests. + +Mocks help test your code without actually invoking your service and allow you to simulate the kind of response your client expects to receive. They can also help you pinpoint where failures occur in case something changes on your service. By using a mock service, you can test your entire application without connecting to your service. + +Create a mock file +Jest provides a way to set up a mock service. It stores your mock files in a folder called \_\_mocks__. If you name your typescript files the exact same as the files they are mocking, those mock implementations will be called instead when your unit tests are running. In the following example, a mock has been created to simulate calls to the airtable client: + +[airtable.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/__mocks__/airtable.ts) +```javascript +import { AttributeChange, CompoundKeyType, ConnectorError, ConnectorErrorType, SimpleKeyType, StdAccountCreateInput, StdAccountDiscoverSchemaOutput } from "@sailpoint/connector-sdk" +import { AirtableAccount } from "../models/AirtableAccount" +import { AirtableEntitlement } from "../models/AirtableEntitlement" +import { InvalidConfigurationError } from "../errors/invalid-configuration-error" +import accountJson from "./account.json" +import entitlementJson from "./entitlement.json" +import schemaJson from "./schema.json" + +export class AirtableClient { + constructor(config: any) { + // Fetch necessary properties from config. + // Following properties actually do not exist in the config -- it just serves as an example. + if (config.apiKey == null) { + throw new InvalidConfigurationError('token must be provided from config') + } + if (config.airtableBase == null) { + throw new InvalidConfigurationError('airtableBase base id needed') + } + } + + async getAllAccounts(): Promise { + const recordArray: Array = [] + const account = Object.assign(new AirtableAccount(), accountJson) + recordArray.push(account) + return recordArray + } + + async changeAccount(account: AirtableAccount, changes: AttributeChange): Promise { + account.updateFieldByName(changes.attribute, changes.value, changes.op) + + return account + } + + async getAllEntitlements(): Promise { + + const recordArray: Array = [] + const entitlement = Object.assign(new AirtableEntitlement(), entitlementJson) + recordArray.push(entitlement) + return recordArray + + } + + async getAccount(identity: SimpleKeyType | CompoundKeyType): Promise { + const id = identity + + const account = Object.assign(new AirtableAccount(), accountJson) + if (id.simple.id === "1234") { + return account + } else { + throw new ConnectorError("Account not found", ConnectorErrorType.NotFound) + } + + } + + async getAccountSchema(): Promise { + return schemaJson + } + + async deleteAccount(airTableid: string): Promise> { + return {} + } + + async createAccount(input: StdAccountCreateInput): Promise { + return Object.assign(new AirtableAccount(), accountJson) + } + + async getEntitlement(identity: SimpleKeyType | CompoundKeyType): Promise { + return Object.assign(new AirtableEntitlement(), entitlementJson) + } + + async testConnection(): Promise { + return {} + } +} +``` + +The method signatures are exactly the same on this mock file as the signature sin the "real" [airtable.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/airtable.ts). The only difference is that the response objects from all the calls are made without actually calling any external dependencies, so it can be run quickly in a unit test without having to make api calls to a real client + +### Define json mock objects +The responses are stored in directly imported json files. This helps keep the code focused on the logic and allows the response objects to be more easily generated directly from a tool like Postman without requiring any major formatting of the response. Enable this situation by setting ```"resolveJsonModule": true``` in your ```tsconfig.json```. The following response file is an example: + +[account.json](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/src/__mocks__/account.json) +```json +{ + "airtableId": "1234", + "displayName": "Test User", + "email": "test@test.com", + "id": "1234", + "enabled": true, + "locked": false, + "department": "accounting", + "firstName": "test", + "lastName": "user", + "password": "password1234", + "entitlments": ["ent1", "ent2"] +} +``` + +### Use the mock in your tests +The mock is defined in the test file, and Jest does the rest. Jest overrides all the calls to use the methods in the ```__mocks__``` folder. + +[index.spec.ts](https://github.com/sailpoint-oss/airtable-example-connector/blob/main/test/index.spec.ts) +```javascript +import { connector } from '../src/index' +import { StandardCommand } from '@sailpoint/connector-sdk' +import { PassThrough } from 'stream' + +// setup your mock object +jest.mock('../src/airtable') +``` \ No newline at end of file diff --git a/docs/idn_docs/docs/custom_connectors/overview.md b/docs/idn_docs/docs/custom_connectors/overview.md new file mode 100644 index 000000000..9d06180c3 --- /dev/null +++ b/docs/idn_docs/docs/custom_connectors/overview.md @@ -0,0 +1,23 @@ +# SaaS Connectivity + +SaaS Connectivity is a cloud based connector runtime that makes developing and deploying web service connectors easier than Connector 1.0 does. However, because the cloud hosts SaaS Connectivity, not a Virtual Appliance (VA), SaaS Connectivity is limited in the types of applications it can connect to. For example, you cannot use SaaS Connectivity to connect to on-prem services that can only communicate within an intranet (no public internet access). This excludes JDBC and Mainframe applications, to name a few. + +## What are connectors? + +Connectors are the bridges between the SailPoint Identity Now (IDN) SaaS platform and the source systems that IDN needs to communicate with and aggregate data from. An example of a source system IDN may need to communicate with would be an Oracle HR system or GitHub. In these cases, IDN synchronizes data between systems to ensure account entitlements and state are correct through the organization. + +## Why are we introducing a new connector? + +VA connectors always communicate with external sources through the Virtual Appliance (VA) as seen in the diagram below: + +![Old Connectivity](../img/custom_connectors/old_connectivity_diagram.png) + +VA connectors can be disadvantageous because you need an on-prem virtual appliance to have any external connectivity with them, even when that connectivity is a SaaS service like Salesforce.com. + +It is also challenging to create a custom connector in the VA Connector framework. Therefore, there are generic connectors available such as flat file, JDBC and webservice connectors. These options provide flexibility in configuring almost any source, but this configuration can be complex. For example, when you create a JDBC connector, you must use SQL to define the data model. + +The new Cloud connectors work differently - they run on the IDN platform instead (see diagram below). + +![New Connectivity](../img/custom_connectors/new_connectivity_diagram.png) + +With this process, you can run an entire IDN instance without a VA. The new connector also includes a CLI tool to manage cloud connectors and an SDK to create custom connectors. Because it is simpler to create a custom connector, you can create specific connectors for a variety of sources, and the connectors' configuration can be much simpler. For example, you can now configure a formerly complicated webservice connector by providing two parameters (Base URL and API Key) in a custom cloud connector. \ No newline at end of file diff --git a/docs/idn_docs/docs/getting_started.md b/docs/idn_docs/docs/getting_started.md new file mode 100644 index 000000000..cd914a535 --- /dev/null +++ b/docs/idn_docs/docs/getting_started.md @@ -0,0 +1,71 @@ +# Getting Started with SailPoint APIs + +## Finding your Org/Tenant Name + +You will need to know your org/tenant name in order to form the proper URL for an API request. You can find your org/tenant name by logging into IdentityNow, navigating to the Admin UI, and clicking on the Dashboard dropdown and selecting the Overview page. The org name is displayed within the Org Details section of the dashboard. If you do not have admin access, you can find your tenant name, as well as the API base URL that you will use for API calls, by viewing your session details when logged into your IdentityNow instance. Simply change your URL to the following: `https://{your-IdentityNow-hostname}.com/ui/session`, where `{your-IdentityNow-hostname}` is your company's domain name for accessing IdentityNow. The session detail you want is the `baseUrl`, which will have the form of `https://{tenant}.api.identitynow.com`. + +## Making Your First API Call + +To get started, you will need create a [personal access token](./authentication.md#personal-access-tokens), which can then be used to generate access tokens to authenticate your API calls. To generate a personal access token from the IdentityNow UI, perform the following steps after logging into your IdentityNow instance: + +1. Select **Preferences** from the drop-down menu under your username, then **Personal Access Tokens** on the left. You can also go straight to the page using this URL, replacing `{tenant}` with your IdentityNow tenant: `https://{tenant}.identitynow.com/ui/d/user-preferences/personal-access-tokens`. + +2. Click **New Token** and enter a meaningful description to help differentiate the token from others. + + >**Note**: The **New Token** button will be disabled when you’ve reached the limit of 10 personal access tokens per user. To avoid reaching this limit, we recommend you delete any tokens that are no longer needed. + +3. Click **Create Token** to generate and view the two components that comprise the token: the `Secret` and the `Client ID`. + + >**IMPORTANT**: After you create the token, the value of the `Client ID` will be visible in the Personal Access Tokens list, but the corresponding `Secret` will not be visible after you close the window. You will need to store the `Secret` somewhere secure. + +4. Copy both values somewhere that will be secure and accessible to you when you need to use the the token. + +5. To create an `access_token` that can be used to authenticate API requests, use the following cURL command, replacing `{tenant}` with your IdentityNow tenant. The response body will contain an `access_token`, which will look like a long string of random characters. + + ```sh + curl --location --request POST 'https://{tenant}.api.identitynow.com/oauth/token?grant_type=client_credentials&client_id={client_id}&client_secret={secret}' + ``` + +6. To test your `access_token`, execute the following cURL command, replacing `{tenant}` with your IdentityNow tenant and `access_token` with the token you generated in the previous step. If successful, you should get a JSON representation of an identity in your tenant. + + ```sh + curl --request GET --url 'https://{tenant}.api.identitynow.com/v3/public-identities?limit=1' --header 'authorization: Bearer {access_token}' + ``` + +For more information about SailPoint Platform authentication, see [API Authentication](./authentication.md) + +## Rate Limits + +There is a rate limit of 100 requests per `access_token` per 10 seconds for V3 API calls through the API gateway. If you exceed the rate limit, expect the following response from the API. + +**HTTP Status Code**: 429 Too Many Requests + +**Headers**: + +* **Retry-After**: {seconds to wait before rate limit resets} + +## Authorization + +Each API resource requires a specific level of authorization attached to your `access_token`. Please review the authorization constraints for each API endpoint. Tokens generated outside of a user context, like the [Client Credentials](./authentication.md#client-credentials-grant-flow) we generated above to make your first API call, will be limited in the endpoints that it can call. If your token doesn't have permission to call an endpoint, you will receive the following response: + +**HTTP Status Code**: 403 Forbidden + +**Response Body**: + +```JSON +{ + "detailCode": "403 Forbidden", + "trackingId": "fca9eb2227514d6d90cd4a1d1cdc255c", + "messages": [ + { + "locale": "en-US", + "localeOrigin": "DEFAULT", + "text": "The server understood the request but refuses to authorize it." + } + ] +} +``` + +## Using an API Tool + +There are several API tools that make exploring and testing APIs easier than using the command line or a programming language. One such tool is [Postman](https://www.postman.com/downloads/). To import the SailPoint REST APIs into a tool like Postman, you must first download the REST specification. Navigate to [https://developer.sailpoint.com/apis/v3](https://developer.sailpoint.com/apis/v3) and click the "Download OpenAPI specification" button. You can then import the JSON file in Postman by using the [import wizard](https://learning.postman.com/docs/getting-started/importing-and-exporting-data/) within Postman. diff --git a/docs/idn_docs/docs/img/custom_connectors/commands/account_create/account_create_idn.png b/docs/idn_docs/docs/img/custom_connectors/commands/account_create/account_create_idn.png new file mode 100644 index 0000000000000000000000000000000000000000..fba31b3b8e9266a41dd517eabbb940e90c8721bb GIT binary patch literal 40144 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

J2M60v=C^||v(i4B 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%0Aj(XOTSp=0L^Tnm{%)JEe?)9 zREpwlaQ#EC(<#L1pZ+-<_kRSg`TKe%UVG&NUcByK@Gm&rU=lFsyKDR%Y*KCie;aH% zoze4l{WUWLJj@NSn4mBHD_aj7vUKqO(1h^6{%xL;7kER`P%o}cDn2?W5*2*szU7Bg#x%&*%xZntbTTjK++=(Y47Ygih#<`&!4!*o z2<88(7=q>#NsDn=t(hK&QV*%1tKB#fO20FM@RnPZ5}OA+F>w~cAy5+wA}JAFimy3` z5jI`NdD~t#x`FVLZ{JQEi|IwEcS~he4h0a;4p?_R>{{RBDcZ;WX=Nrd#nk0w%|r}> zr@y3s+Pg|Koa0rE>5-a3d@bwE8mN#@nks){1orGF3%D571`wJ3+FfeP!FEi%uF3a) z^u-795u4@V;0SExPb2ppro3CA1Ru@+p&c%ad!Q2Ubyet=Y2<0=ldL?S!)k8aK~2P3 zmN0sFIrPgw8dWS~v5vY$B`Yi5Q$-|%`=GXW7dI+m8++q!g7-0<`u^(x+P~BthsF9)FW8wYQE*KF_l25b)nT*u9VIw6T?1kwLZrm&RTr+^=X$TQ%i#^vpbni;1?&7{92rXghQW0H$ia2>@G!F^4OKS-QorXV zU1g*L=r4nvt3H5aa6JU*coVnZl&(Ysqr7T8;E*xj$fRrjz_$3?gH=lL<9FLA$rPvl zWzcr*AUVbH{kzX*6Z`(lyX{be5f%jN26^0%)KM8-nc6lFaVFEJi{71XWCW<8ON8sY z=~>Tm?I~!dGif+k?#woq}N7>5fw9TB-n-atCvgg^o9Zm6$JJ?-7}L$Z>AG9DmYt2dg4!2cZ=2 zRs?#eq1FVTHOOLh`xl?uw#hv>cIr{2vtl#aN8u@qeT!(t7UVJ0j;=Qgbn}9IX}108 z2(4JB9LaRn)SsXR)gaNztDGA22E|0LkOwyE(M53wj zYOjx`@$`0HmT5SO@*Ax7cSx9*i7zsK-IF4=@hr%{Q|Jb&cHC0p7W}ty2Fase`CbW( zr#+$0-e2}5=HcN3ebVManQn*gA5T#d+$s3UML`VREFEtE0ZJ10_g*{%W|c-d*a!)}*jTJ5EKjj|&H>ufwag6=@$n>A2bN&C7YxB*};oxK~5q4Ty16-RX zsLMc@%|C{W)ti*5!I% zvbhg{%4543v{Er3!M@wo%JE|Z3H@tGnpXjYx#^u8)EbKNbFk(_{?5bguX!$G8XvJ} zg6y*4H!3Bztu)zC*4g2|%K*EJ*-sk*WSh(St>x)~4zrEQBFS~(<>nU+dl2geT${UF zNL+9ii>CX9g`$5UrA!111+2LR;Qp$gfSXL!8LC|XFKQ0R5Cc_3kUeJO>^ySp3m~_6 zvzezYUK`2w&V1anAeRjDJ&)Wll0KvVkL^+jtSLbG!hSgCx$`eNA?rGWHC{Tx zKt#?xQ=tZ@Up>@+lx-k@lZVzSM>ZvcXfOmDACKYT^oW&jz(^NyOka6O8#t3tQQ@9` z(-VNp9sd~h9bH^clP`-m0bXm9Ou*^ng9tP?F^iL!b{W!$u(e+p6-*k4Nb4}k#1568 z29G)YN5Nx14-G>8spK(t_d1dYR$AU;#z|0pGYO6eXQLHNb2=)lHJz#@iBJIOn~2kr z;u%Rbfl&X2ck>BQKjn+AR)Hv%FGAnkay)+#^tH)Gx;vAO)P?I$MijI$A%+~tdNW^1>nI)RV8ko(vzjf@W_$T(d;*GI*R#C z+~qCR!z3y)WYk-Umc&YY!iz6;*6M2=o1%rR_VgX_p4#F}=gUY%_3vZtO%Fo0=v$+H zQ(f9nR8+h~|J)wclv&ai$drIdG7{ykT8mpDV!lF=S~qdIJt^$b<|l^Xp?u2kFY5Br(~52I?h^RexY@pKF4YDjI{VP zrwt>2Ui&I{iVk1RtyQ|QKuSclK_WREh4CFJ#rWuj`UHtPoweP!?t&~ z^9^nnQv{G)7JhlL4a*AKj2tW4G;20gJsB_>eMxsRv4%WxkGgl4{e)oM$5w$j?CCk}YE)4}S8|18a=HlZ3o{U=(zcxS zY4Dy|l}$aK*bw!TIm^ApdCSF4OT7l?S<{8@l)U!j*^s0~=O|(@Wwh#`tjh6S+;K(J zxeT1eIcJBNM#XTJ#hSzXCLHvV+a?3#6qyoO(h}^jimMnWLhw`EqjB=g=ibT#2@lWcEp8&Q zU&9fAqtm>bh_-C>F31Z#tY8gw;3BMN#=D)s!kB=!kR;*u^TA>2$$Q4tsXpH*Hqt7J zfT^pG0&pkt(t4g&B~CbfeSO}z(&E*rPj;*$Im`PFW$1d9A7TWt+}T`Aq}v>&%~CTz z5xn|@AiazzulU(z2jiBRB{>6%C{n+7(JMjL%=&5B-{&kCFo)d!>Q&7XDo`I3eg^UJe7-n8uEOQ6xHpUj?LWKF5l5e=}jduAu*Lm+8;G3UYVtV{;J$T&O9 ze70fK*gLaH6v%u?bbsi$B~AzxRxtFqpFdnsV(-4)i(UdRXhGPLuX&ZC#6RF2 zZcPJwT;({0jP&hwzfV3KFx#<*U#6zoWF5XL_KR2-7&iV)C5gdwV9LQsa+#0HFWoi-(rwR6Fw z&*gU8v+|-<)eb&YTBvhNCvD1}q~EgP;fT#CBJ?Qf=964eNv>ADv%&soJVYoCKb!1y_ci88X`A}8>JSw+J5dCz}a}rK7TySiMe$9O|LsWBgJLi9!6HP zSZf_8=^_d(njMSTM29&7kstNX$1oF@EH}t!Qs|Ci#9T@sto6yl7a$oUh;8Q)HBg>I8g*&gZ$gRi=DMp!&Hsx zO~&RTigH`*$gnP!RjIL2f(`mb=B_at*LcrR?tRD2p7NV#0857jC2Fd5F|+Vurx0`g z;#RBJuA^eURar%gUDCVSAV*xq9?Id@tS_l~ZotFYj7ks=wJP^{HDz zwX*9fp4f{*MwfQy2GQI|(#P+rO6R*0Y54S6!h%=B@-P+JE=&~qWri(ngDE3HYXp`} z=t=i`un6b!+DhYNiC?z}8q-h$)d!4~RJM9f^4wPegmRfj?snB1&6?hg!=?Iy;(Y^^ zX4}Yuxw;j3+qCD+^+gBf+faorj zfQ5W8bIcYeo5qePO4Ii-aVt3@GoRZ)cwvjmVyvfcc-`!goQ+!yf_KAbqdRpql*sl) zCOPX_MsjaNPjd73`88YhE#~~EdujSVXheVN(PUDc7mpR7-1$Q59|81=>q48G$bu-D zFCux*m4x7qIL*91-qvVOse<73lg-V0!F6+Y1)JMCs}l&Q)z#7lCbY8!L3G!71+4n$ zv+$$b^_fd%$Rgs7zA}7~h)-hgY_j+E_H0m|I`7A>ZkD{Rw7~H>C~{Sm!bh5zotV4j zU1qoB<&f;^hk7pRReO8)j`Dr76>eB3;Ywg@KgpuW5(#culv|*X*aBhU^n{X`C(DIT zg7zN0>ooBE@%hWf$D!G!@*H#1y;&a#&h^KxicxWqO9;GyPRy&;pd+*uTB%2(XN_>O^)!<_CEHZ7l5sAPY9pgqT zVYVsWjXEW1u6?-`{q?;!%9*pUTXP1RlNE>Wr%hAO#lT;vll64_u1U~eTYp}YHHp1M zVW+Zou6ai%;tsL!B3HPA9$NmnU6O6D@_NYPZ{ozaeKFQg38dYn&X!}0g83iVBHvP7Ei*+|9TRTdU25fMHjZBy;Yi;rL@g-=cO zF6&4}&`I2df#VV1oJAsb2tSq<^({HGQ3+^xr9>N|V@!}nf+-_TnSSB$W+NNDvx9lf zqZaeg{Jy6CxQ3zZx4|Xov;rn|e%!?f&g=6fDOK}Xxq&fmEIEp^$wY7$b1N;_P|hUI zZ454>IezV&E*nj8LbiT8-bizj4H6;87c3f5=|LW6sa z@r?m!9A}rmwfgJn8jLpK4#g3-?(Z-YQn)5&J(cU!t4f{oNo6ZAys0}}gYqd154TG; z5Y0zn7Ri`J&zJk)##EyF?BWsaR=tYZm1k-DVY!pxIoafUuip@EJ$X95Fg_-!y&qK> zs}pr*@7hZDhvJ4@?9ip<*R2w&FS0WQv}X4gN;g^*l!RsQl*zBrdg-D{imcF0-fI!m zpj9O5E{V-BCw$jmvk_|{j=G<1Qx<5d{=ffaE0`c@Bhf`}sP z1s0UHF)N$gz9+8Migq?zIm_^mJ?=I=+ya1_vp{9DAtZfk1asd@`J>}v0*)5S!%}Hp zk|Q=HCezU(+0V$3zFre(pN6^4q_AS{locX&NwpFRjZg9?!FcV;*WWg==TFuyu`)Ro zvd2{DP=xK(YVFsQXc@qsM5T9CcX@r={s4kTzEMj&o6DS5%;zimavZvLvI!P+o(LpHj68 z(T)7zqQJdT_@@6-p2CPoEtdgTA_n7f$XzNUQ6E3FwLd1R+IV@sm)1Ubmq=)JTxoyy z#`v45==FN!!^(hR1mUCRFlw#c>|5qVa7Ko#<GbPEMt0 zcCBbW`xtsixyE5+V11uh3#oc=IK+U06^j!n2Ir|!JR( z)4L>>t)D)9XlrYW?cnm+)|n!Gym!twOXq_BEW*ee1IHcW2(XJMY%6pAfjm-nmnlfa zHFx;h4F;;#9dIXE_=kI9#NM}BKh=h$fRLaK4(OqiwY9~dr=v5{=!q!Q=6})~LLElL zv+*T+YZh6Uoy`PQ7d?mi>~143I5#3qT2y9dWh-lI^A7i$hhH`#L3;!o8jFlG`pTJ^ z;R^FKn-l2Al^P5U#u<%_gI&_0XN%EI$o;Fk2ImOpIbGSXoF6N|I`g{R;XZmCb%Im# z#*7+O)z`0a2oiBJ9>zY|dnmm*FggmyZ8}t77rA`vs)BH?kqM5NY?+t@{vL8Unri{L z!~OM@!AxwN??H%`wzi8gn%3Y1Bf0j=H)PfKs7M1muaHu9{mt#Z9?~Z}&BwQJC?mRY zaJXPc1*Of$)5Eif8*-t@iTo90OTQE_JIcQ6=6+V=fEqJ8(NmZ0dgyYzz+z+TQ0f`( zZRCLLbXrYvsBAcL5b@Z(CGz}Ri>V#aM_mgPu24ke+8PT@iVX_BiA+5l(zkB0B^uxD z`z5GnXgD^QDZ7faqUbc(&;+^OmO#2{xzP^VWP&HAij&ic5j#7oprS$p#1y>R+nAeo z@5iChw&v#W#TU9<%}3?o)WR9FNV>Lr)qZyO54V!Fw6sPhC-ZL^{(ir=F{$4OPtHQq zd6mY*z-Q}SLYhKAAWerd2<>_mL4OWUR@MJ{H4=fg0oM!4tD*>;Zc*!Ka20v(Z>h=3 z2Kr!!(<0@ATDJFQ(KgsELoDan5XW1hAZYy}CwP2PKO}-wM7)W~`1sR~TX?_!?jJo5 zN1>PR*z~ZeDO1a`mnmhM z*(92Y&nC6eL3~~j71L5QHBAFe&D0t*X0m*dq2i>8iXi1X-;G*c6+(eT@>Tf;--#Nj za}Uj`weGs>{xNIK@Gq?2`SJUmv-fxJea>fVbvVLPi-1mduveqnkEFYG6|&qilwVT` zp|nhCb#J}AG%(4duN(~3v~rkqyWAi|ymI#X*N`!JR(kMB4>&DXM>VA>%mUn45D z)#mK2@ubN|mftR_g;&PcPd${cw;0*7xY&$GD=(hvm$}1fDU>kO@gsrmWc;Vi$D%K} z5Vn0tUak2vP%J`A5mH9SrMI}R!vd2@b{@TLerX(fV%b)L!bKEt-^b#s}+P>3B3l=Hc{#dL%@e zd1@JATs0rP~Gi4x(^_`@TP46OGiJ%{hBNO!i2excJh)?zvwYuuBJ z(7Rwm!de%nHLeEv&P&?fs{qgdPE9LICGcrVd?}RX-30e~qGLO1sD$y^t}u;C*K4Hv z%QdxW%8JDL&FxHAl6;2`%Zd|-EO0PjuZ`{MV0_oIV0laMy}sd6Gbf#k^`w}h`@MCk zxNv)tRNEpubG&9h5AzG4$f%t5m~b#p2}%pFR;_Gm$MtN4$#QxSVRq5fGni<+ORC@` zS%iskBR>gEkQP0jTY|Xh?f9LEYvD+WAPec!JPJ+ilCi;3-WaGbQ$L0Fo2TAOoX+jq z(Y?cpl7Cq4g@pfa&39Ky)!H)}OMbs09nFH+=c5WUxavWe*48-)E;@?-Z4yPGuuXRjX0*{l%j>x$_kxyEC&?+_yS# zElo+gzk#NPIbl4#2=U9Q{%F`M@d#cLgP%aMgMc6S{P}CE_E$_XAVl?yj?R<=#>dk` zp9xWqrBzrvK!~yn2wFpWzT9||0)Yf>|I&ElAFvc(P0pl09x!F1+S_A{ikN|TtGpN& zrT6dDD_bd4d$Q|~{yICOen#=D_=|bHQ%`brs38*z4>?`VRU6nvrmGXS@R0XEdt7@L ze_ModcE*8z8>^%GjdRsLU;)>HF?y;W6yUH&)y3Nb=IPP%9!^K}iW=hM&TW-nRH0ib=H)W4>91SNW;aaXNkl= zZtaPk%`R_EYe?hu*&#oke~~tRR5LZB``ucpj)D&rXc6BbVL5|0HkB@pytNA^IFqR8 zo>|d-!X{D3Ge>itNrHNMQv#}?@x%sQx_PVffGt8@(hRS#d!X2Dx#xgr>d74ZY7~Ef zE_f+EFlPKPF6mNz@_xJWAj6a7vIo6v+A3n?#*JVEp|~#k?MZ2K4FGwES#jRK&qZb% zQBBw8?ju!loirzg+frRI7$P)!QQ!;5jVFO`1*L#bF-r#q-qY7rTlgl>rPb6gNv{(~ zwZOiLM}^F$*dt{n!izK~PaREx`igHpQ(-}BO@pBL!vW+h_FdY{`)4}F7p+?p@D>B1 zTgSWyR#$RD@CNErZay1SJoa`DqxmL(W}aG#L&zDjBKNSKzJ{n67>i%OhIQG4N*elA zL~D&U=LR&ZR`LkeQi@}Ab5B3(`zr(zAXY(~;%_Fo~M{h7F|qG2{T1i9;KeQuxWa1`?!0s{ci|jW<$}d`7~|YwBoSa#M6eOZOn0_ z?#Dlt@hvy$3bfw7bLB_S&n1Ht3KZmfvJy4A+<0T7>sSb-;#DO)K9}AyAv|R`^o@0R z)S#mnruU6<@><@96+i!2$a+`d%Eu3pps178N~6&v05DV#7Z+CpSx*7o_LdXC&K7nS zFuqQ^QRj2Q62rG`4mS89l_mjpmP%jge59jCQ(a~CCN-XRIldtz+tgj3@VH6~N*_v5 zw9)K0E=uM-5@;{2$cu_avZ6crdW~8Z!6fu{)HWhMqD0H0LsBQl-K+7*I3B;UGyJC} zVPvtORzoyO#|@L8j(tq1rDU>9*S#eef=Rw@KYZBRtgkUSsJtr=kg!t$!%ayfnq0cAgSDI`xUu{YAK+fj$YHmSib4WRtd}9b@ z7p;5PwWkZ~xVOdKFBU9ko|$|srSt#gJZ$GeZjH<{Rjj}vGRmw^#ul`-rK(p151N1j z1cI^^aJrobiZ%RPXBo)sBsih>{1tBpcW%0r5e+sh=M*CR?MS4TC#H-P9|WaU@U9f2 zU6W25ch|N2&b{~aULifRs*p}lqPM=rJl6GCJ=*W(YmfmQv_M@vsh?!G$(S9z3@C%ygtNuT75MlM~t+RvY4o2sJ);{NF z8vkej=e8a@>u-X@`bxP`VGIyIc{jJ`S-#e{$Ls?sbnoU=pUjB8Y}i=_ACC&IA}y;> z0~mM$x7j)dUc|)NPxvvj-iBOokKQ1vB+hw}-FD+fy}mzRcBA@*>+l z8A?K9-(OHC+D+S=Lf#UVS7%}dg-5_DW^Vca?ygEAhGZkpDDS<=+XaDyseaj!_4kR^ z|8_;sF9Q!q%Y>-J?gqriYjA1Uv-@0)hd=%^AIIp-7i{8RbG!ef>i+r%{#U-2&|ZHB znZ=PZ8@bXa4S~oW1@iwuCeRcWQp6VovhHis(ZB5$fBge;ZH=XWJ%#=UJBX-sP^xrMT0nY}Zlef7=%FSegwR2HOHg_U5Tyhm z1Vox45Ndz`Np61kyWj7-|9kg&^6buJb~C#>bLPD7c~3q*G0|nd$aRr{fq_|H@1Yq3 z!#{^-c`ux!@8m7Gg6KQOKr`J33^k)XczWTCySA}51H)I~r4#3~^fHs5o=qSF153|8 zAI1USG8YC08dU$Gw#945b==uE7OvR%?FhFdsM;BP>Xj06?K2PWpVcA&E19V1C9-eU9c#5?_DsT$yT|PGi~ZO3rsNyG?dm0Z;V$z8z4eJi7c|Ev^zWMa&C>Obn$Z1+S9Xu?oKvkCi zXvH8{00M!Od0FB$UWWn(rPbx_gUCl0SeO)wv^D~M;e&wVc&-a){_~uc{)KiF^f1UD z{28JexnA|b22!^$-?QV_+!(MOkSchvoBaal0ty18=Z6_R`GMlS_zB2#Ib8O=u%3ta z!&7shCvKGBSjp|`j5wZ`tFoJLZi1VpF27Yq_{=}AGjueqvXF9dDA*&D^3P!YukF5> zpY`cCTo&VN(VlZ-8#_Ipf@NbS83B7i&iX5>BGH<20aUX$pQwQ3>*A@7L+ogwTBT|U zc7qj}&7YPZCGWumv|*vc3oUi`K(E7a@GH-Qw6z7Ud1x3Nj@k}bh-L^W|AKjcX_!mC z^*OOJ`P%IrBEpV9zwuOys|=qK8E*Y|KNwOQXPX#4i=2cKyDjlY+d;WI16tRv^W6SZ zXokSs*;VM3e&e^w*jZ0PsbOD>0@F@~~Q z()t-mmMj`y_LI}+{%y|N>E&r!8#nkDT{I?S+WLP@k7HNdddU7dyGgY#~ zR6onCtz`Bku}+YFCqy2`Z)F!4{%2U~$0Jd=WQNZnsLILhW}>Qa@*JNu{WfG4&5t6G zmzoUqYxkQkgQt0(losmLM))4#267zn) zxB~P>hR90?zD^*Z?uqE>$I?w!EA1tE3nIri4$`u?Sq3j{3>aS2lJ<{{O+p>%#gq6! zI{D+a?!MAtcLQz9t)w79F^i%|hzLqDmO;Z?^~IlS_#ZKG)3Zy+Ncv?RGhkvIi8;~Y zd%LEPj#pn27cibaUS@~gPRMfh_?>QOHdbJT6 z{#YR)WUu!uU<;!>-L%=LAZyR1VQ!yox*^7PzDv-$=G@TR9(N%@L3@mks-WZ=2$bv8 zCABNuoKdm7W4jwalt?;X;(YAy=7>qd3<9OP5>lo|JDeYUqy5sAycQ!UFFyfhYweJK z8R8|h^rEPIvYDTHI|5kH5Z7Jel`rDDmY`_%#g9cUYPvlt1ge$h9br0@X+v0^$VHj8 z8Aa#H5hVfJuQ=Jb?A!1OdpG4#9}c^_XW5AuZ%sj*X0CvgR~xdk8eKnn-k0B3KW*6h zL67_y4xjFDRQ16=IUt3sZu(ieNWJL$sWv%%;yPg2AXVp-PNxv92QL_!@+m-atG%_` z9wQcKScW35Pn{v#|Ebd)0>m>$b$0e*!U6b8i}1ZTWr^v=1kNPAyN6D+BPJ31{qCn_&$1PpqnO zx5TZh8{(-QL26Sq^De9c<(Dod9yx@rAL^4|EVb7UUFLDH7Jxk0KFf7V*{GRFbLek=g-eB*J-WPG^TOe0Ki_4)%S}(yQf{PAf-2 zi@6M1=Y7Z#6%a^En@(ybTmVdees>v9diNnd&d|dnC)a(u0)F)@LCS$CbEG3h{{Zcl z=NuE`lzXogYEf%3_<^B|>f9z_*Pz=8hY#=hcU7hTz6UxaD=&v980Jk#Ig4HLAveH2 z{T+W|c6e+jVp68}H#k@QWi^jV^!GF8HL~`NgtWaJhI?jHL$xy9c@!Xou#K=EhQ%UBPp`UQzQl~k$|t}G%Rc;}P@O1@GdkR>={}`^(P2%0o@EmH zIO{}qr)PD^^*HXUJ9Ti=-?vywdaYg^>-`|h(Zq{;_*ny!s#AgjRr?|nQ`$j9j6}pf zv1OoD(x%z$91D4f@5mPmcZUE@qZfCb?~Lq=STVkR8?a&fM&o+J`}3@*H|Ti%4C^_0 zY$JKzdp}bxBNc5@B~0B)iu@7tnd!XHqxlqwL~*}yWBj#va~S%eO6YB^bFBQ{=wPoP zHQi{nIle?(=h>u@)dG#sIljfx0Yr*Zb3n4jIsdl&sl>li@lcete%cri1&NWA?QtIk zXNY)eNXHD@-Bkn zCI#(xy%aY%q`xZ8E#J$c4P74*(xQAdrrNgmNa(C`&r~8xj0=bJP=;~IPOq|SwVSIu zfOfU^*RHRncdEz@9coMKm%mUELigmBP*9doa-gfwqallQ)!16)0>^-@U&;B0;5T2! zvG`~Yq|R~Em^~SGG%uajp?Sxr@W^>zxz6*7FK|VgzPNM@M!?Vi3KW!r zupF7GhR}ZSwNG~op_cHgc|-g$lIbU5fhaKL{8Fr2wJRENdY`978bKe+@2V+BNOz|} z(=H=WRweD&a*xOXA3cBWOx{2}G9;tKT7KU}nsqe3J@ zMfQ%ILRxCsf7Y_b@{8V;R`3?=OKKA@#jlpDj0>Z5;qw_Y3Xn`|Cm%7+u~LOa-*`SR zSN>Ybcvk+e0|}jT6>XhARf)Hrne9>IPnXbOI=$Ed-LX=A$@d5z?{{ymgyCa%FuvoL z$DUQ%&g(?QjbxiX9&L*M@4?Hkb<3eWQo-O*`enQPPT0K3&O%46;qK!ms8`309l&PG z@bIw>H%LEY4l#6ww71W`E)w zLjo#!<5Q?IKjRo`?V0Z_AmQhMGcT{5A2FT{VfevTgRNVxdo>e25d_4x+qfdZlGS*r zDS&hsHPInp?ZM~6*DCTRVpH!Q^lIe-gYTU;Yyrab??11z$qwN-8D;|}Ap8rPhI^O(VW zjhOU)Um&RE*eEN^u*L8*scrtG&H{0>MekfR1ynV+#KLU^Mp$VcyCEV~!@(!&UU1G; zgZr_agzv<}i0|KvN-MycLt5E(d_$SG?{pf6p6BprMInca-*)H>j3Nj14NFK7S~;XK z(lHT~6|geP-hcy(#bOT%Qh~Zu(Vl+EdxWsHVRn_6?Yzis+--8e$%_WCDzJIvmKQuf zxZv(chf%7)%Ns*qGdM;xRRc~sFGK1cK926Pkg{+0l$;b`u`WA-hqrtJpR}AP2NtUR z$T{Qjk_g!N#7q0>+JTSe#yOSjzaQIh-Fx&2u9Y|VJkekyH z_X}R57G+9W8)T0ZO7S1y1;&MeS@Y3HCKs1bFVV|$pmu~>$i~Nj6Tm@1JB!=V4D+?u zly(gvB08nq`!+v^D#gcApp*9!NP;6C2(qYpf?1y$RL53X_6BjAfYrTC{S60$m~XD_ zu~%Xq@*LadnyhO1ZKZNraixqmCmDe@03yK)-H*om+>8cnT-qfHO|c3){^44#sJusU ztbEV;YMWnq_A~STn!0@O8dl7i;uW#i`P1tSSnli3170ovF}eXT?Ha9f!cP?#M&~aR zQ#4iKqkqF6`c}54gaLoeRR-a1NIN)>3gKGX)q$;}4LK>f$9Nxm@!P)di7@)w6a*O8 z%eT(cUoqkw?um_KZWsBKWF zo@*iLbUy{$>Jhz&IC^n5BGIm>GuQQ-8X8%~XuKRdBee0=XHx8XX0x=0lxw1f#QSjg zEePVE^SWf}ND%vp^MLzs>xqioOkh%Z5S;ddbJupDYd4&^AuqBp?xewK`mEq=DSEv#DpOlts+vcVF%ejvBpy<9nl7)g>X za}vR07mYb5x*8f|s=sOsjMO+@N_DMNM8?I0JZ$UYc&(wg&#%t4%(q)~M`Y;_RD3@b z`;`smx-jpxJc0bRxk_n!9t)@xz_jlXsqK*@a>Pz^lL^$|y5cw~Fi1n)1OmU}8g|sy zu4$WPszvy_%{_gS*@jO!Xt;B(gO(uSh@h4RTeQ>m;2j5#;lPOHAqAC?oliDhlLT7R zK2~7*D+G+-zg`EXN{;A&60~7j;z%6^$2TH(dUB zt+9f%bHS$76LNUmE_m;kXfXKhUGF@L^tg>Kxp9%mIeSOIv+wf1CRDhg`U4*^`U|Q5 zfUDpNjtnV&;|yuxnz}ju7aQ^*7gT|*W6K=PK3Ny4_x9Bv$ncbeh%6be>f<~64L;W^&+k-$jw{L&&D;ukjbuIB->-9;sKNw{%8y0ENOp)SY z$YD0qDXUlN-5Mjd9J^1!=sgnw_C(jFeFqV*LU?d@6indLi{%PrLJ?$0F6|VX4&ubN z-;`?8T;uQ}PC~wuU0)U-XxIL;4#-7tb0gQMQ#t$e9ppgUFrp|0Z< zXVXgDw-K6}nC32VLr}H+0=xJ7r%utrrj`-2XDn>t(>7MM4$^Zb(rmKh z_|r$ER1R)+ulCjg>M@T^%Y=i>-yaLbW^fZ7wtCTRkEd*Wo+mr`0V@-n<25rTa-~N1 zHjW5;T1#-&W8KD|=BAngBBq7e-q_GQ*K%t+#WdDAf+y?86Y79Ee#g<*=44eKN%muj zcx3^ODtCI*K6_0laj2GUAm_^H9VkCYq|$MVT}V_$CTubthS-V7z& z^uoSQNxEUojbzoLi2-kj-GGP2C^A0w!88qEU+K;RH9@@Gphq84g7W!AQ=O=| zcHFC4V!Y#Ka5hFVU+8r>rM<~`Ql${#y=XRWT*{{fCRbXBNx#%(k@;QhyEA!Ro-Vn3rWKRXE+Jo-2Ed!=u1N^nFwXeO zN6{Jxt7lUm=mGn7(q$3{N^a`dpZ44CjWsME9m|lw#z& z!=ocTP_rZ*-IWH%M+@g1+VF>7E&SVW3>Gl7dX>4Ud!W>l1ggo{j1J&X9NREjA&A4< zo3hp0>hl4M(I*a?1nkp#_Ys#Bz+??DQ_@oY_7mk30>lNUg&on5K*Ouz`G+JRk%!H> z#3D$?Yx23Urs;;A%*l{6JcSCXUe>feW&+sHN5ynTKo&|{N4MT?<}GAak`nT^RZQLJU>OwYL1gR!%#dMfhp^qoh^90P3G3O*K%V2IDqEUwZ-g;7iTHfR zcFMR?(9==(z@Nxtv;6yKS?qhnaeYg!lHyF?&M*CO=t7{WezSy9V)R4Bjf2>9Nw3G{ z7BwFqB;v6P3d=EVLr}j-tludLB+A4oVKm&mh&`m6k7p zey0*-NkHRkks5j@QTBf}E@UrJiQHrOvBRVmxo44r567S;Zv8e%4RaiJYJgud>bLjG z*cm2?r(sY-nv>9v8AZYfrbkpkoFmL{6+${-%KkWx89Z6;z@Y+SKSHc?O179X9O6d} zyJ}bRsD0IUCMhaza_d_V%_`FV*teXN@Ne?UKbprQt^)B5)J9mVxFFy{$%{5w;a~MW z)Amda`>ydm@O72h#s{<63Q5K}TYJdy9n#^ZajOfm6EDou;DNs=2eI-SOYNR=Vv%L+ zafXmUzWv7S<+Akon}ussonY-cahuW6xy4og;|->wi7*oKs;RkFo6mEJ`UYi@RK+ZI}6}@^U<0R`oeCu?4v}$X_#m_I?Z75<0t?x|xu4?udNy4BxZbAc$gM4D#VEs@M$9aibH@fI zyqc-ETp2w?Rsqj>M>hatb2Qaznzs*kYh#6bcd@|5b(sUuIm>KmJ0a5AL?+D3Lg9FI zGpll=+(#Ruj#@!y7Uo+I29iAUf1~;gi7{6{|H-crDB~CTl+8<%P%4twKtv$0NFFw> zzY|wx6MXv(W9y-Ut`(UW&|vaD7|`Skw^cB@S#CuVF|s4h))}3P-h2BAve!U9l}sFP zD$Vzs2qEmstM5;yn(}!ZN(&!3T*2;pDC_scoIcu1Wk%7`RmNj7+nc<8Z3c}e`j226 zo1%M{G6hbDV_z2Um}VOdWr+%zm$p?hnB*#&gR33JgS?4pLV=F~m@-70B0hYgYX3vz zF79C8qUBc#xpl5`H9d}|+C?dyj&s}$Rd6nsBxFCE&(+=ryQcwj&tGNe`rpgK*0FTP zpH4+Ut2x%72cSxcU0wTSKD(FmW6NpbL97emsB3wiWau&oiyF}!^{#$7&$l^5l&oBW zG$jq6a8+S;@l*V>Q(0#lVq{R0yLV-)%{Z{+zy8#dvtc_QhlJIC(cXu;QsQEaCbihd zgAcXIf8P^#&{{NuaJ1mmO8*zgf&|L%R_{T7yEs9Kb&+VUOHkWl_$wN@9B*e z4Oo~xOP*DQG{HT!92}x^cJeirzrQXr5p4@l&=aO1OtPzSB9r3mvX+dKpBH$nh!tylw~A(J$5Ms;;tx1CkBWYE6Ue(rfP@t_F2X*4gv3GUy1^l3VDy3@|q=|3f@hE&sO!3 z5M^dC6VZ8=4bkHBaNl>I7Gn-^pQcC?TTV>|LL=cJVU=y=g34G08NiG!Q)8)D)h+d5c)id?cTnN6i6@KcNtLNn7rAa-<1YeP zI20aJk%{bc-Z(@}y&G z_P5e_VcneIq)!a?fMO}-#FFYVxA0{;i^pbMzh?$GG;Vr5JrgtfbKUMqSsbH|(1dM^ zpMyYBbNP+!asQ%_sjkwZmq=Rd-;lNkOO+oDOI+Zl(8%}NW=C!45`$ua`XCA;Vb=i@ z-XUmct0h{XRT)I~hRAN& zrC|}2D*qx(xQE&r?Ljq=`71_6PxQuXm&x@2I}W)Gu4f}) zIj1q0se60u#Aof4_37cm5t@$@nsrEyInOXTJQ*5FLmOp5zeDz97Tu{brefB2-5=b> zhODRSCb27K0UHS@mB3XL8_+sEk$u+kj<~giFPQDYdjPi*!N0Q zim!q|`I7dxy68Z3>;wEH-DaT9K}JdnB<*lji|~b$8;z*4EY1T&Y}ClvrMxOVc4ple zYPwJDOjk7a4Eth6zB~RUsnT2hT+}SqB6{NfulIF+NLjX{@i#!ejgtsJ6RSwtT;*ye9J^`ik@~5*!uY;);M@LH*h8Qz{|Bg zw_!CGz@>`w-Z<`OhRF5U#)=!3esU|E@(pN-Sduc;xX3>2`=IH4TykdMs&w8hix=0i z`+~csZZm(mnVIO!NyUNdaO#}V!Cy=0p-! ze>Q(6Q$ybV0OM8rY>IHj3tqxiPPPxgbo>?Qc3ih(Tc50oDkyP-4MYnYM#U$a}GRn0&7$8f5huBEQX0;EM1>4#4-q-MJWQ0wk#r8E^oInTiQE@aZK%}7%v zXuV*f)^heFWc*@OG9=iE4RswYY8S$j@iPOIyP!o23H9fp@H+YcIPbq~%kMdr(Cx>A67_Vd76}oL zzkK)^etj5%`mkDRL=zu6(H0Q6c14sBAnkCe(+8YE)*T7zbDM0B8Bz5L{T>c6t^6}t zW;JIq-EmEF>t;rm^{XqsFmqMJ&xy;cBZWF2|ETc=ce8dRteCLDmB?khBz|w)V;#^$(O_Y#L-M z`6Mg4s%~i*{HS@uFLal%t=*z1j0#aZD9Ip`hmH&F^k?MDeJ(P39&Q53;!920B&b2` z!1~t~bh+9_^Ditki$Q@qloGD@@aB^q7y2{I;&=CLjC&v?s6M=OmIAjotGaJx(?Tlq zfU3ekgHSK+(twX+#L-6C3~>qj^l66@z$17C`wnu)NmU=hq5$=yzPiTqC!OGo$*(Si zF?LllGVb)1WQ`qed@a2;Kks!gxWYTohaSk2o-hPQRU}lMG*zCc?gZzmEqMPE!u=;k z@3qYPXBq0XSNf6*bs-zy7l)L>`z~sg5ui%yt-9UWZox zarb^VDSJlOk5T2#D2CP8Zm{_@eFT;Jw1&^9)$gs=)DMOG*dNOgYKF_RRSf(HRq~yZQ9R&t}DV?Us0HNR}u2#bw>q4*C?cp^64J&lQoUSJ z+m(O)>$(C#Q9nejRc3D-QF>(6#rVF&g$y$aZa7>*=3~!nHHO<7sUPp)94U7+%`2f$ zL-)cA8NCeE;7saL@jte%-X#E381*DNe}QFC-L^SzN!-eDe|=i~(h7~25CUy(wgDWJ z$b1BZW2$mDtciL-PHXZDdtrPtqff^hlp1jwKam$$wOM+(qWurG(9y;mpVE2| zNVHd?p*S{5n+--*m#6z{2N9I>g2ojS0n0NA5uUSu)cA|X89H}(PPYW|B0%yI$CIf* z*X1u-B_3(IB^^yM^2(faviQO1+rcUP>3E>cKse3noo z5iI43WZ$ZeB-=+nOTsh!8y%ZfP_0BR@Jd`h}8ES90^dpj8{DtgI!qp37r|A}7f(nzl3 zxsY04u^qhX@?f?}+`i9U&M{k#H}^owodtBnEwE8MEio_OLb9Dgvej?PjCYm*aOvr* z3!kptyeW|@SDHPQXCdn#(Xl>>5sROR1Jyc$?s?6(PE86}*PhSa2KywjHK@1oDWZ?} z=l>GJrod4vDlpzNo$TbDC0WMrWVx8^fmxq9C-2jR)dsO?8T)Fx<8HjA^lj_ z;_LXWhuoR%E3BP?^_!sW~^P;I(T;Y=Q}jI=%eq1G7M+-LYw%Bdp?rj`s=vX5?&tAxt-R1_+ z`YYY2zdS${gzV8Qv=-63{l(;lk1&`UW2Z3!hi8*4XdFf8wL&;xDQe{fVfxdeKP_C?vt>DPcanqjRm zu)C&{zyH!rz#rveP3pR={O=UM*7XTso>Xf({HRpX z7bn?8Be#6YS2qvYP;&vo1q@gAp1yNGur1vKxE|L~u3fuEqGCy(^OFphhKN%4n*!0v zk)w#yy2F8Bd)7x5*VIFaU&5@M(-O}@^|Qu;3iDGh#;=Y#CH_?~!WR2e^8TzYzHI+P zYBXIUM)ur^GBIlQp7#O=u6`mrt|KVA!vW(kL&;p(lC1k9#*fyT)_d`RrQdX4@odj> zrx-6?`F;NMV;pG<5->+(T-ImFmdZAajN}QB{3V3KY|1f>mdCuxR7na=Y_ZN^s%#5# z^Wtyxd}e|m`^ScDNY$)TU!keFEw5n8osred`%1WFF==U7TU!n4XZ{i0G0G4Tzmd-8 z?S<^-S49qNPBh$DbPcHw`O)e!;@B3c@JnKPIY94wq>XW_l)C(^g~xV%v(m&&Sl=bj z1COKcV9AfejzwqcG-r;0E%Mt;6*T#d4X1*23{euA`}D0n3B8YWylks>sq#mx9h;dNKWo*n<=jO+U`v z|Jf|-tf$5A9~;-M^ZrIuhm>w5Z~N(3VraNsZE$Bx)Ei;9Wdl%VBRziE0;W{4Q3}fK z756G@ji*|;@;WS&!L?qeG;vxyx8i|3SxF!%)Mm`=-;`}_!W?{$BBZL-X= zt}$XL&(yLB^D@Ec#J_?^BjiE0gqLNx}Kw*t4({3cE)SvTvlr|cK%#K=lg^22kGf0Fl7Nq zor95`aG_g29GLxm>RIPF@ZE;x9I8#eZ7*pv~x7R zS_?-_+TYVE;d`x2*ZLm;btW6rj#Xr(rG5QlKjdyQ;$obD$q_bbeI!R-*fFUIWH;Cd zL1Yv`ND7m*iT|(-HiXUz&m4#OP4D(-&ETU?k+O$|fhWJ>)6dvxF<8@udUS9W0<0@( zz&r&gjUVNLQxUokMhAZN2J<53gN_^D&2K$@Y5eG6wQ6~-!skQ3l=wdntiXF-Deu z`W`Gk5>xzk_~s%JbEp^-{V#60mF5>7p%1MG&geX47cX!!07={q3mmZjQDHz<+uR{p zb?yh89#`<6a@295ly1~}Z3>Ws{=NnrjKYK&VC+oBQmAl;B76Vsug%^QznqpPkPX7a ztuB3!k$Ecb4@Gt}();*jPzBV17t=9YWszIkcXu7pQDZ~wvl=T=vadRMR0Fz$VyY}D zFUE@Jt;dKsw9EH&h5F5JPdVkbmBux8?wk$G|Lj4frQ*Jt?kopwX0$6*>Uq3wjoe=r zYztV<8*W?~UyEEeXp1;W)Q<}yM)Vk3`=lCzYUdiI{I@?a1ZozLYT{`YM);O9KTq2z zm2|%hE4g2@_h)M-8$$c#QE>>@^2k1O_Iy&0=Upe?_z#I)ojGaxtMhT(Ifwy-pMpE*IlF`^H4r1tk{MfFj@D-qVmZTGuRG@E>rioCu^KY z*C{q3d#c}WHWqZf9{E7qd;No?7P9sQpvBKN7^rt-f$YNx`45MFH2#DRuN4L~Nd~DL zy?V!p34Bf zD=qIOc{a&9Q~Gh_oy{Om_inRlTg9{_4r%@A0WZV&P_28YkL#7+`SZo%C|aBnmXI20 z@0k!8XTIt)(Bpue*0gIkUpwSAg`*z8r&mA*SMQb>LjqDxrsn$VG4tM26 z9jW^GU)7+_iN>@>PwE$q_`yr)DFs|@-mM~qE-{-gIV4xd$F}gFPYo<9oQ+#*o~C8n zH3fuCcZTJksN$j|iAO%ZqI=I=0b@JCZ2i@a)rp*tXT41tZ>LVXt`gy9ZT$_UUT)PU z``htEzpA$VU*45(+f6p+Qw4f-^NFQ*0?$|AhCrf1b{L5iv&j)Tn;r;WwnT2KCNG%V zFirPjyU4?9SQ-AQh+vwQZB;_#k4^Ii=630e?6vg3^2vS*y5V@)$4UH)6aS0$bFUHB znbcwiR+7y;$5V}Tk>8ofG9>h>dR`r2sM^USqyiQz`Zl(_yS2SlP z>+wrZ^l4E$sb?=$B~G30Pu;223G#P{-)s?qlu7Vn;Znr|#+fr{rL2|e8C$InwL=Fl zALqQ3p|eD-z{UK7v^bsf^uWZ4rdLg7)ia$nC4ei%XU4bmkq`EKwcF(Fl>_WL*=}9N zr)zlTIk?ic>vYFnzNgr!Y_X%dpqR>1`_^^p;>wWa!Dg~Jo#WLy_Yvq$^?Lh#MPo>g z_$RBEZT;WWn!}hKqhzr^o2xYm95(y$vWELrxkesR?Vs>whD~Cw>qW=KdPV9x`(DY* zw!eePfAS$q#ou4L9#D10I-R{UXkwP#xYIM|A<^Csq6_C<2{TT;FR`0nkoD+2pwsvP zVYQ3mZeW*agjuIv^mGF)VUO=HS+ucOTLT@{S&@ax!Jh{fq&o5g)5DUi^tlKW8Qdyi zhAI^36xEGxfTG>!2j?pl_1|`~8dkcY^YHX2yu9Vn5i8dnFU40`>MH#002R6ja5%_; zW5hiefSsM~+EWf+F9{+l^ahC+Xc~**XKUIxof`c#%bj3(ujT{q&mh#Elu{8-E^-V? z)+&Y`9IeWeYsz+3Mx8gh9|lo(fTngHKUM%tL>Jh1zOw#4PA7Qo0Mf&d z;6C_LaqSAyI>Y+eC1%iOJVH=4t{^xk!9Aqf-l;Gy^|MY#$pUt>2zA!9mq z`Xw_Rb*R^Ub#uBfabsN=yqM zgh>3A6vu34aLh!BP!TLlmqP{zaNx9q`7+V(n77r8I?IjO3tIsRhNs_HsWDSS-gX|7 z`Twl)ifIe50JiN#IcJOCmKbK(r$7)A8^=azTC_Ppb&Fw5d>E?A7pqqn{8=$F;$0JX z0aNc#A8xBe=rs^tUSm!BOqdetT^7;_*AQ{A(-NA=s;#YUG0N{idJ;CP4m?6@7j{+; zL(DonpQ^mxE3ok1&*IUnp#&cf>K1w-&-1S3R5;AQLd=RRb5E)+mBlR)Gvl5CAZXNjqemME{>GV^Z8i}huk7Jc?9ai*KUrW~&M{a7!L?yWe&?o#8gjOe%_A`DhLs3CK7;#=gWkV8I#@CiSi(*9fvr;aN4lie6E0xUXh^ zP~o2XXn|<4hOqOCqkrJz*NBq6#W5&_d#v8(PFo~?$QZ{lproNV(>ze6h%AsPW-=F= zXxruJo!7F-q-+!k%w9)k# z%jr@Mwh^Bqcuno*wc2NMJQVa{BsHPt;7;7`)4mYi=qHU)7Nwt*Xy30*9jsM@PlFXZ zrm!1>lcUkWn;uQy-h8{##`BwHL&&X0r+D4^Ul5mo21ms&?@Ej4KTqvQcppxeDx|BJ zhmR){hqZ9Vw$Uy2ys821U)d9NdAh$%ZzX!?R9y&*j9 z=U4Nexo-ATDzLaCK;b?;_tB`OS>|W=<5em9^!N>_*u^gnS0Tz_kL%sXJ9Q@_I>T%C zCZ;b5KjCyhHN&9+ZP#`JGE@Voe_WBDT%^G z%CjyuxFJ2dflU5;hob(`@S6t-|v&4p*(B$r0|v*;NxfF;lSWjv}Oj*&bp zbVj^kX%wt4mNhKoD=#VHOFGi;EI^nkI|+w%{-eI@$O#HB?>teh$TG@>KSks9w(ro_EBzR|_cGfsJ$)?-H{_w=)d1)Pfn#u~@ZgcaeQ;U{7$CIFPCAX-rAhco9N z1;txazuKEMKa>)6yjy9{8l2Dt(YaAQBeKkOS%$F}R(+s;aHJHl-)-rii2AVGXaTn3 z`}BF?VSI<0gDY5J8lcfuNd$1f_m!cz>q$KyP9ouOBZepZs#QpHZ;{Ep>9KSnodBkb zSGRXBg81EhGRM%Y>0Hvl%zD!K+${(Mh^h)LD!?z}2QJy|#^sV^`Yr_*4qtrMgNeaO zLzBbRbp1EDbFxqOmlK?BQIZ!J#Rhiljcl2wtU{bA9^hX)bei zwz0b)PVhyBjLwmA&pobNLundznOl%C^hAZ*&mIodD#EoXS%syd&1BIZ#X*HWBAM66 z|G`@Nu|C%J3y8x~UD&Z1mS)xS*gw`gC?>1|h$k1b?_3K!H0^8BxH>@5V4;aJr{GNJ z<-NHLwSycf>kP7p+_8ZBX#5C}pWiD6rkB(A4qa11-~veK*myw; zdSI}4X$J33@5Lh+_6q$ZyoNqy{X-lrGur9}6HOGZ8xf&@CSU44)EH#nA2~Mb`9y1b zXGigE3#{ULCOKnfD6zayFly$y>``%PJsIeO@#C;L3Unt2FA;VgZE`GcDjb&(2IPhV z>RpV4dLoo$wJ$SI0Jds&D<`2wUwHzA1`SW-pRWcX_rmO!P#;mQbM?G`2#eSGz1+{l z9_x>*0*4wVlk)Fl%c#-@1~E=dmz!CxL;O^th+pVt+2)4CJix3FV~}T{!8JDiD_&SG z3pDP`Oz08P!~{XH<6gpaE{_e@5W0 zAS|b|xl83FzPFt;?1{1Ey!S}fi4${t)=RC^Xlx>~nZ)m4O5vdh^1^WE2@R`m?QpeO zf}2Li)FfB)>4YQOf!vKc%=nb5exv7aq#S5C=p@ub35I-eS1zen)H3n9Ke6_(bdhF` zn=#c->y9m%8D}mD%Ca?Ud}V3V`3ib+h$~Cj{MQ9yVE6`y3VfTxIf2BM4Ra(+T#%HL z604?*JI)76e6J5TyZQ%Eh9@sBFpEjfmWD}gkT+;=%}=|9KHxU&I8|fy^|KMr#DjDZ zQ=j$#&hN zG#VS;Whe$hiZt{iq+F9$vk66WnEG{I;+CvHpBp+mb3)Y27PXgs4+J^mVfG_n*)!pT zN>p_`#J=@U%|w8PvQf8S?uUdHd*(VvI|2vKm&K|BhZe8{Qt;j&C7N)0eYH$o;M)xn z3W;`V&ZH{@=-G#^wII-kXJ~B!6H!YE*znIm+ix{lu41sc~azelPpAOEC4Jr-!u9e~l%g)xg6htC4{nKvZuznag)C|ic` zs=6mn-m`Bl(O(e9j~(eJE=32BJX7skgB+yJ$0fD~h38n@&9!@c;427ZM*_Mdz@Fg- z)}}pyp7=Zs+0{+n`qkf}UMf@78F!%9r3-Y{ti&aNn&~~mi@Eb3E)<%urR29guax*Y z7lAi>!^DMn1}n*wNY@cQX|}3yVoiJQg%bx2Nm>rAWbnJyWU#?%o>i`-^4OUDlNB|z z6MXE_*Z-cLvwB6#$v2GDcQIhS_iQfWdH&&%vfy21`-&{I_%c6=%{A)fADh}hj+()$ zM_A*VJ9GtrK1el|p73qGrf&1htaJrmdpXv&Psn%FC;%VunVt>v-u}|%wA4Dku=)p@ zVS}E)4EGwn+&?NC3jd@P(-!{mFU~Hj$`3{V&m6oZ+Umu4f0^lXp+?Lj1O*TqsTBoZ zpN%o=#TQe4*vctaxf2$ilbnhRy{yWKJ_2Yy1je}m&T*ASl{P|BUFqKZ8kmYaOi$RWsrl%8X z>dF=~&yj}z7i;ew*F@I#58GV}q9TiQQHp?q)JO@qAV^20cadhO(xvO7pdh`2fYb;f zAiW0>A@l$N0-;2@AtV7p2oM7Act6iR_qzN0^UXi-nK^T2=FFUH&biLFY?keU$@({| zb%GKSFxqUF0^}~`y6MO5xT55{)+Zm$+Udq|3BHG9v0VQAvkAnnAGykU^xpryzSr<~ z8pR0!J9CY+aboE5<4!SYX&rzoy2b|-`F_Cn&(cF5awt5DhdMHiul;Pb|MrpkS>sC! zJFh^WzljC>+<0#!>9b_W&;S1WyY|TQ{|`Y0;D-MG(|q-phQfc@kN?@9c(&=tPaTf` z{;r+5e&p9e_bxAX8&yUUhAN}Cul={+&;K;myd3mltVg*2wS&WwO~i9ovimb`Vd} za}Q~l>nsdM*SP8?#hAJwd)wxwxONy`gmZZ-emq8Wb{o;oXvcZ|^>C(x{I4A00(~m_ z$lrfxxZs$!_fOK^w%_%x!#+h`sfE^JsU7S1sIdf|PtRWw~A4O2R0;E{bw zUHaR?C59z_tTMI+fXJUXajI|k9LD~CImc2&KhN{i2!M&jv%%?&t2(H19}g1zm@#^s zAHZ(7AVr(>b?5nR?A^Q#_2T4DsQ3@`rcCr8VX7Zvbqb%Zl#NJ24n~9ZmP~T;r+xq5X73I2eel2ekCay09(Z z4Mo4(c$dNEA3GL*sj|EbBF8oz8BCR{Rs3)}`<7MfPgQ~B6_=EFWx=|%+3Z!U_qCF4 z#`9CcZl{w-Me}M^S-n~gQMli1&vRF6AaYuCe!q=#i@>>beLx$XGKF$&7V4rNUto}(2_sog4SmIL9v9_AM_7de-heYPCjYC zYF%;)=XPI>+@Z$Y{^TNk4!$OLIhT!)DoID$&6Qe7I*&YNS8~h)NavH%6;Qd;`ZEV=6uzz;Tj);dt$mNboMT^AXijBxlbIaZ%04$98eU}poP;mDW3|j zFIEfp5rT#|P=C-u9Yy@D5MlTJz`*qsRdr4FN!E$7^Roj^+LO(CR(zGCLF4 ziQg*+vu;ntseJ%psjgYYDTOLMEnchr4szZHrR)_cmRN+PQEBpkkdQv^YK7bMQZ00` zk)u<t~^|x*@wm*ct6L;p^lU>ki8->lb?x0dO-1bXOmSTn+64&!CVNfh~+0SFGRt(A+k) zkwP6mv?rXeetTR7?%Db{QO3@B^4S2arpj5AVCnj>`L&#WZOmmarGRgK;P-@JYQq=> zZ@nAv%_ULXUl2ke(Kbm)v;#IbYq7p@+-^`%&YdV)gj}A2mzrV5ko+McVUtyauH90) zdW8_mP*l(ZvDHvmHAsgyvnW}0`V3HpTy`zQ!M3GE&Sgp%Rs2#>#1cQMgMDDjXZ&EY zk(_*`C)a43Tgioo$7;$j&3N3a?@FIA{X%v^pUDia2O!GUj6>hnqEz~+<>M@G959Ha zOK3a#g&6I}jk8QIR^$R^oeh|XqY#->+=Mk z@A*UbO6gLA$5G~lLkgMj4T;sqQlZ9Y`rNWTT;POUBs@3_Qq=z79QcYvTuvXgR9Qq6 zL;`hibfLq(=VMG*alY!Rj)4Oqo#yoeQ*r4Oqh>^KpS)kMd7p^+I$ux9jn*ytJTu+O zeX_bZ1(Ve%x^dEi?l3s-woH9MR&<#yh={Se>UmIK8SB|SVdzf3_gw-dT*}IE&u*ODbW9iw2~F_h z-FGeLvw3fEi*O)!WutX%H|XiNZ*2pgqlkfJ$m|FK44|YVBcgm=H&@gS(QyM<459}? z-KkFjIrIyh%Rnwd2=#p{1&4{P z#tNl72*QVPi9H0Brg4-Im^Qoz=4>4B;jvoojDEFQ>dQ3Vwxnl@`F^D*xYGe1Ny=ge zRAvSg;xZh%{H$8XDB#NdQzLC?pKQ*SjTj&~YQS5~cHlBN7lBHC??uGm5@QIdsbhx? zZK8JcY+ejaTPG|oAk;+|CI6vr&@-E+P1xHXM7Cvk?$KrU{MSVYAEFPkKy@zZp$KE% zHG6LHJ%xK1SUxqIV0L<@erEQQ?cg6Ft)YFk)h+3<1v2BinWo!6ry>9O(H>(*d%h*W zp6X-r>_A_6>Q$P@O3e{33ttpggVh&1Vo@50?kKHhYvrCFJ$?4{ud|Quh8Z{VT)B?0 zw!XaVrCGF>+qVaQusGU<;`fd)Tt2*1VO!jmN{WYCgbG+JQxhNXzBA9ZBa|;}K7$`! z_Fcs1<;~3#iOJ{Ejun1GA7AW#7o9)zP$mfRzEPqCq}Yj%FJ~0@uAk9fTspO6zdvMh z|G{Z%=7hxqgrwc9qqnNs@goN6t&XWMX?vpvbLGi(CuW1O>v#DLgF{*dYR0lIXmsv{ z_Y)eP8L_su57#hEGh}JJL4Y`f&z{35K@wjtvuRH2*`7GPFjALS?5sNQyG>@iS@2Yg z-6M|xejDR6zx|fD*uz--lHi?K-y3vv9dI*K6dK zN2=CDSxrHu@4c+tHYFk*bWlPncUNCS-ff4uD67XSDG835v**XkkE4q;-DBMj?Ug{; z20s~?cD0j6E^Uxz9iCY&^HFiON?vM+zBJdZp2Xc=oFC|QTDcXdZ~yuFEwd_T|Mv^0 zgQ-w5bNw7RJ*_J}d}EpClWr?agFJYz5Z$+S zN}{WL2CVUWdj^l|NYLfLqLt1fZdGEVyJe7cp-Iyq^h{1U>%*;J+6U2`1#?xM0%eGp zwe^MS+{E2ojfy|ow9C2J7h@b#1~$K1%`FG7?G0C4zI=s)yjy5wKHtRC<%`hEXq~GY zga)ZKzZ_e)&j>tDlz0TWLx3S-2DaY-YH4wCX*vwMaA|iCsW@aIZw!Yu#~E$tnp9d* zlKqg3-e}eVrIET(l(l_!)|e>nN6yYZu;LG$k9-t+bjhqd^uel98^CIEmOfM&cUQ7+ zQWy)tXB2NqNhy_+*Rp8kynUd-bwyv1JNm%T@NiR1Su ze}8GEw+h#!W_S|qUDRKF++mXquG3khqTke9`<^JzF-87BB0Bd(`)X&=O4DPHGCAMc zX{;{PT;i?Fl^L?G8@yLNv+;j1JE$heTq%GY5YRFg|MtsxE(YnzIc$-;ur)mv=9AxMmJG;FQr7a?3uM~boUC)@gUqT@LvbyL zI=gf^gwfzx@Bn#Qv%^{V%8x7^igbLBQIWd;cqakwt5wfGF z-94P$uN&9T0fSI!#vmpvtoRGXXCgp z2P5G%Sm)*P=fzhRV^v2CcxW45@i!(b4wQ+ z!+Q8<_Tr>$!N9vEvZWOSF)oe!0 zT2hBN5gdPR_R#8r<-Kwm6Q&vm42m!R8DX_0sM$47)=J1^3^3`ozAGbRvKCa4V#$$O zZ61F{H?5h+DL)k-8+d)jCCt_RL(5co@tLo>If(J;TcxI9@w;oU17R3_$qkIrCZ!uw zXiEfm7@)6VIE%iJg;w6R%6F>4Q)MX`TY}bcucY|Z=EO$AcDT@tq*LjNvTh2_?uMZM z(EIF{R3zu=MVr`W(oo+ykM|OwwgMd2xGXMgr_6OSbW|q}?}+}w!?gIN5{SJcrxTld zPXmf{C-M7%Oj5*mo4W(LO09fmJ3WZac?-M#od(Mbze$2dfkkTmb77=gZzztH(CLQZ zy+9f-kmc8JeF#l%gvjsGe3vcJrR+JBd041!f51l&Dv@o~{@7(JxVHxEG@ePR)ibs1 z-UDH?6&A=Oq(#nTtN43=n`{>2)5^!$JA^H)!Q+D78_QkWE@b`GtxlZ83N~%wcci?M zk~v?AdiC7nnuoF(Qgd$TvAig*-#?87?;K}7gitTG&dCMM85?xom+^Qws~GfSqa^QM z>-H_{S_>`KkO`j$E0=Iv6X)?W-P51SN1uFdw03?Q_|0E?5z0{7JO2{?<@w zrA+1p&{W`t*T+dj_tPvMjEsI9JJTUvml6plq}5fEnxSP2lLn8BXu3LinQ=H@ag*?f zCKR<<(nw30eYTR%YhSKHb+d}$E!&LO!OQ`O zzUtIa{i+nN(=c_ty{WahcDvuxZJD$6Q8P@3JhDjrEpOpE!lx*rf9$Et^9rXTsBW$* zA_KUC!4?}##gm-=5g0ngoz0F8_Gw1md)&wqq?jlkeI_H=*{Z(gYfb3s1H^Zm-4SR1 z*6~%3#y@cVpfUa0sbLGoL1vq4F z)him`Y=*?mk5eDV$$>pCW9tshS2B1C0xbjW2h$&iGPap0aaUF?+8%W=swC&@;|>Ph zc9!dxeeFH1Ogxr?^>4MkQuGPYbH93ZV~8;Sy2M52W^20?=%8yfEckP9M<`2v+^&D9 zZ_waGo6Y4-nrZO$Lom0MCFb+Eu4qQQ*8ws}n{>8S=i>9>UaOI^4u8oSTC^i)j;mz< z+LUsdYm)jnPTl;>(2Y&cN9oS z@lTnv$~CDrjQVE}twZ-pYXfqjqSm#C>+J0E?g@=YtDj8jc`rZ>H$H3|CKL#XrC&^5 z-QCqO@GW`%s%-Oq=P}1=qzwZy3+v-j_DyMgRcfV~t>~{75e&xpRF<%wr!K$MqZl4M z!p`r_N#m_pb_^xGJ|#3#9cFpM!tnN4S+63RVQ@ zC1G*X@fdf4VS6yh{qY6f<{`t9VKI!f;*LfkXS%O?v6o znB3bA#e@ww5-xP)p|{hr;c7xFT_2U}Eprkg8nms9H|RjhAo?NZ;I z0QrQfF1LyCudjs$sk7p?(qF_9-l2`ND7yGsgDJnB)fvI~iF$9V4B2H}O^8(mPc`-y z-+VJq;5R?SENR!LUaoc8%-6tI_!Ksj1CYQVWWFUQ#39n{a$u%t#Za5iYQL9b9qNqY zmH=hZDTC?%1QK$O*2w{vR)7d0jvZ_wUsh>uMrV<8M8ezlD~H#@;Cfdkr&^2Cm-Mo# zd(N|o0el(qPy_!PLbhKY`_zH)nO&Z!eXCID)8^RHiO?1P*M1;GXdmA$WIRx6e>>7Z zCtWp;DQ+T^d8S7q{z^HL$4)7%$1pvxZ3gW%=k>B>x|6$QZDUfW$0@tOe5nRsO>*&n zlNjK>OLrN(?r+jOCaQcL&`gp-&X5>ToiEnMRXEOK)-_csq{43PW10rbWh-D4d{0p_ zrWKbqd@EryfzI8PKoV=576kbTN-CQPE|_vz^0}*f&)97r(`qGb&;UCT2v9P|f|pwa zNJLIq$GqKrd{|S(jkraWbB@P@r^=y5t-sxe1t-yUo z1x&YjmG;epav;&x!6O{M6kC3LSm2FI4ODw3YP_~`+OE-IEP_$xy5!E%QpT{qMA+%Q zo>kWvH}JZSNFX0Ri5>1P4xvPx83~p5Dlhpx{UQ(pSOO8SZ=0Om3tN*g$*H~BVdPe0 zmIL(^O-AR?(*j5&4g`FfiE%MfBnpD}$op8ohjML^U+it_>A>s=D+LsuE4;Enq}H}CFUEm!(qYcDT@dW5|SrjX5l zcpyrTZyy@iH1nCSdkdB9zOXf`bFW~Bf|j?`JCbzU;@dE530+jJKAb^wFI$MUG`gVK zN5=M*LhG3{2`eqi-cC>SvKgfQxrld{VX-;-Am#WXg_$EW>k%NFcLyCz%zCrBh}Yg0 zm6#b{9pJOVO*ytId;NAt0>DHEPkrEnD_k`qmpm9K*tcsOU`q8~smRrolQ*!BX$yG;E4rVTmc&?QX8c-> zt?F*C-qtNcy>kmzQMS=?%p&v)cT!Acf014m~iv(-bz{_hv-Nda)(PH_89P}_= zrgy;@p=y^nQQ?nGv7i0GPRz>^SPZ(k>A#yDMU*dnO3!BDMfqCL0_;sHPMRUry@GC* zcDF^6wytWdVeFXUFH2JpHCUU}$K;HURi~`B#Sb+?Ifl)>mNdj+AR>seTDxJ~)+YV7 zFy&G0<57c@vl$B-su+&zfq8zK)ziD${`@=g-jX8+{mJd%gWj=*3Qz(>U?PJ8(q51+ zTEq)QrI#iR<2{Sfj$s&MM{{PzgF9i^_TnEknGk#E+LQMYj->lfm45cGoUrL?%wF~< zqwbo`4^a@b2Q{#4i?`rr_KIJ{@k-4#%rlg%bBZnT&mjCNc$o`rS822mRjfPi;di4vH8vYzuVR8tDUS3b`1Y+`{5ac?wKbJ_AHcYJs?DPRhw8DCc z2wN#}9=^6LcDy!Arj~rK->7~*i&W{|rckziKfu2>wcFamy3;VE-vY1d?aHg@MTwc3 z_|G7DqY+KPyANkgD{SW^BdHM~g@nY}^W&rxFy>8ELTRy4J;vMPm}q{dK)K5-qJ#9A zZeWz}C%~H#3hKIlJR4#_e^7D{#&?2A=-U@#40`f+&-96d{guo?gwx!NmmVdG;Bfb}*N+L$1vU!fbqXu$KMp5ay zpKoq9LB41-2a{x@RP7eVa&w`{Qs6i{Zv~7U{A|gVNBnEc)9yx35$Z0i{n{qS zme`v^YR_iZB^ftty+`9#SM?Bt;)BZeeKGWE2#|1cj*GEUDTker!x=r@WxA3J$Z@6H z71?GdZrT^AT%un`;C9bkn!?%ns|I84z)$>eAf_QY4&s?lqa>$%mZy!X<3upLTnv$^ozx0p~9 z*EF6KhYQhD4;?k+P_+8$^G9JEC2g8D*&I}2U+kh5)6j3RR<3>r@+WTBTy9}ie;xa%nb;)H0GWqz?(o8_$%%F_*@pT37S*wJFf!~c5 ziK+VEUUZmwJcZB<$@Or7m>f@&h4mpZH;_B{srw1%T2^pumpR>LWsEb}q>ef1(ecb) zO0Bj=rs2Ud_~@%gu-I=8l-nMMx4&Ceht(N$0t3yeT6(`{*-DyH4d)#ur@9w;W&83@ z1tqdI!R8={Q!Ts>)nDn6;jN-eU)II%uO<}-HMMHfd-TyWD_W;r4k4Tf$7~k!cdEyY zli(q3ee$_DS8KJX-vhf}Up!WR8YzEZ40-nPIrZS3i0jCfnZG~>@G?E9Ax{X4>W-za zxXk`I)sP{Ba{_aui}5R%6HD6r*eP`r26nmSAhFu7JvVl%rhUp^lV>BpzwJso3 z+@R!9v+FqFYqbnd$}lfT3R4tUMjRtOg7zaC1IOV}giMg{_9<_vCV!~>2+G-sp{G!{ zZNPE`9a5nb+J=x5Dxd?4bB()GAPfD-_^SbRn03?hC%WK-HtNZ#B#L zDgRi1zpt1d6FjlOZos4=x>FN^->^8~8M*lKfM;0jB6U9sUh4FpUQJba(CL4E|0%cf zWEoDE687U+>?`(h8HT+yxt&Wk`J>z0&Vb+N$*E#pKF@R#sNP zHlLwQZ(hIAj_?r{X!AV~+zOmV?U9CiTd>p`zYv&hRrmu`R{-~rn5hvQm~Bwt8fBPg zR8(ETascfWdYJ>3TJCFdYBcP8T`)t5vIq2g>!6j>c&ta}nNVu|V14?5`%oBHL2rte z4Q2uOW-bQnySBYD6mX$$`KvERBFSNHvdDr1tAiv)2rGuX|N1R~T&ci{ktwqu<^t%x zjtm6$rcG$Qsh=svnwVpTuQjgsoUAEdZo&eK*XWa>I+qvz8xLkZpB-7>wrX82$9`;2 zWFsU?vhrX7l(ziVLFapAulf97Ww+WZ!tuIFgvl?4VGXYS;l-@iYdB>?$m^jo0%~41 z0V@R%M{MnvCyidWw+~lZ^x9s?-QyS&7ADui9ZKbY#3;4m3qc<<{jUn8!D$5D4L@;Z zTX#KKcTiUg4YmOY&ijQhgz?+zOh2{g*eevRYOGqk3eFYIv81MR8UhGUS^lFnx?B<)=L+PE2+b*kDr|w9?=L?L?YBrH3K!=wai_Q#z zgU*80_065#3%Bu)F+QCfAsM>Z*aVrZ3z^QMxbv=j;xaddAZ5P8<-BPXQ$ilHu~wG!NLdWTnwZ#>X%wCAe6M;1_giL(%~}@JNc2iF>3DIU2e8N#RkYcw0duS6ly4P= zr2v*WxpwZZ7YOwH#`dAEx6vCghf>igeRDE@Rz?2_asS$vyXFjad3@mSzv3Q_USDY7=C`| z(iHJP`txRTtw%mDCNKv3)Cy)DP?>+8jQcjtrR-iyZpbx$i=Ml)qLM8X-8&mjit-jg zP=pZ#Tgw%frwX|>Qz+n?GGvLPdzvhJnvh!R6z_p+lm95;Yq8q{-DZL>-uy|tG+{k^ zmuF-f^YW!rP(idupe07p>OebNFq2$I@)(oGLCjh4fzLm^&u!}cU^4(rlLvbi50oA$ zJxGHYx%t?HZO&50<>-L*hf`7w{kxMCc&}EXssW*Tcy4O~KJx5yi5IrPS{RQbngx_; zT-XiVlw@}UyRQU213(P}ih-f6WBFR|iJZI5cQ!o|Cdv!a#H`||{;^Tyt3x>Ly%3Am z$9&%Bf7GhOxEY&Bbt!N;PW6y#_dS!rDJ94;IBusZy5RhqqfH@U9*7VFAL=JxcS`%@ zV~mQd-jsHydNXK(92JrN(T)a2h7EI^vmVvp+aX? z&DuOS)1$oF`n_^(ux@TZtSGFeg8pd1*fqCq(eOb;=Zta>>eb+)zSlqw{!z3ENrHYq zy#G*uP~Q;7To$#}j3=j%v|OhE9l8ZS1mU_34H#R5o%ndPoLL@Ii8NoRXj(CAoqJgu z_UH9uWgEcc)C(b0hr72oQ`ja><>h?A1D?Xf{x+byGsf*cisMxt@H(AH4U(?I?TR4U z>I)9RsShPWPCwvf!^r4B@yhNa-kMNdc53FDLe? zl7bbg@Fw3BmkB3Q4Y#sDaB$D;;^)id#wa!gGc|Pj^fNG!=0eS+TU~V_0J@Fk+S^&N zN+NP1l@;T(Z-SS#!Acl*>6!@x+~+`aB^%C%dFHfdt%WOH1&ORtWX0_kKDBUH`4Pl| z-o1jUo9^)wyl>fuvAb5x$cgujB2K^8cg@|kxs0PO8*euba^e~<=caF`lov#~9d_2o zZn)W59`MG#n)o(Gs;tFl*VH26T;4nzR&%V@!v^f+)e|$P zz-R((R>N$0|1x8_ z2g+k=NLXO}xYPL6krg~cr7liv}FbyWaO z$N--fy~D7=DQ=6Y)tz*#+LUN<-Fr7P&ycRe<1+^hv8aY(B*wjx7~PQ$_~cGZo&WVf`Yc>F4u4hC*@yF~!s+?^sSpKn zv^LOyLqm6ZHXh0gKe`)PQoMT~7?@(~z@XA?n8jrM;hT`Z5V7}yN!lmx0bt>~tsCC# zbV`(|=&eo=_mP(hROF7|W`B}e=iKvjTOyCoM8lhrpzg2&?a(8KZk|>hN`Wh80ki=? z{es|D456*GF>1}MT@|{{{{?e>nFTp{??HJK*eWvC>hpu2P%VxA8tp#7#$g8!=SfBz;%JQw+!1J}>3@muLMgQ|GwkM5q@qlPx%j5j{Y?n`k%em04`h0H~huY!(Z<6NPKcb&9RSt ztd7io^~3)u5BLJkdA&p9x2jJ6dceKM->Y~A*VmuZez{cO#o*w&t_SUaF#lTqWnnwt z|HI2qwIFQp^XEJNs^l`4*d=I(=D$G60&^EGLD7Hw>m~Wd$|E@VoS^(`8(hObmv8+h z4EXc?)k*$$f8wz;>hq@m3Q7HE^SzO|kt5fBtwBSJYku^|HLD}PzNkQR@mqe-JFWH) zaJ7b(<($}0lsq>4*LtoAuX_a!pS<(yR?V2cz`H&Fd=xczxh{ChbL$2DqhB{ z3-tYX;kkS#I}eZZznUv&VT z@9aN2TH)*FuirdxUz;cjIf`S34%*b(2wX55f!5eG3e-`5Z7KfS!`=|u`wqU?moDw) z&l|&zerb^#nNnpQKPXtSJAXtl^9gXO%BeCygDf4dyu-}oyHWsy>V87KJH{&yttRODMU{yA2)fmZ}Z`~-0Dyn3wwBh!4zG85PYR3&FeY{hqtxE_g^~coj78l2>#ZEXZK;3Ep z?GQ7Ba{(7%D6yvf%eiS$s$553@s-nA-Q|4`N*4zbW_g;xLi#z$$4>+3r6^XSM7`7D zFeOnSL<>mf`i<*%=ykLm%(m#I$;JdLv{VEzY=)MJ%uAaou^C=t3I%&!);w-!#;=7*HPoxg? zWIQObukW9e+OwE4s(F4CGFAMpP;W^|HWh9vWD`m+2;TbR0iZj=BX!{sWQaU<#sKix zfEBzx00?q|M67hurbE<}U1G$??@tIXEN?Dpv!zWpR!!Oc{Yk&v=}gvcHj!>#I)AR& zpLK>L%XH{A@%fJf2F=E-);R^d-JU7q|Bj)h^O87}u&_N8mS&8~qOLq;r*(L2r%yrq zGS@rKqy0G6`x3y>{1ghShd4A~S`;wMe2EnuAY?sg#g6f>bW8&3Fz`)BsFK(6T7Zh z)#Fxf)!6_P^d8bom?@x#C6FeDvoz9&Ty-aGgR8u0p$2bm2|A&y;&m)CYZtKNsr1xNk}uN9zT0oOz&U!zZ6K_F+kEYU?P}Ah zXQ0MBTStX@*Qwi3y<8b|vfm7hQ0;`{lZuP09Y&lcHQ1%r!Z+O%R!^ zvX}1As`s55Y^`!Z9j!*?qp2g;p1Gn^NRiwMw3$(OWnG+@vX=m$T+3HCrH5OJH$15bArh6GeOK+mDf)$O2M*u>bJ8Ip#@{nBTWvfQYe(cO1cyC z%mwi8`4y4nxpJ{zI|l6PW%ReoU)N?mLp6HhM_9efI{m~x$OX0Ex>0u)di3b4gd%jn=J5AemuqAoVhx{{HyBTc7cN>vxoE^(=Fnve6Nb z`g7lZ%(W#88)#)bE-Lzd<4ylMv4PX-$l(@&cXO)j21Qo|4ra zARHa9swYm|K!hSBJ-48ami7bY{z>oI(S0Vlv?}EEP#zuWwK-~*A?g0M%(R+Mi|tEN z=)sJk^41V>c>T!?6qY#$D5v#;7NF@D^G5JYIdHxKj&X?&4%7V~lwq%p5mu=(pGI(V ztL^qezg)EaX0n;&(}&_ciId#&qanE36{nG62h|d*f+#Z@V3O1KQwgqyEe8gP&1)Ff zo+7|J1RwYWl_Bw`$t||nJ-w~9!#8IrF&rZnKYfJafNERXIw5fFY;*neg|M%2Quc#3 z+QgEl+xRJuns}`x?cR3=PK9@ATr3ynIsv~RAv^(k@#WN zNy)4Y^EVz_uZ5SXZ#}}^{&ooYq%Vrb?;AMvC&>`%)1#cgdl#hUl;DUoAnpsM7aA=G zhDm;H@z{?;5BM+{%6u|WJp?Mxq@xT12KzXa=d*Zkd<|>#c1-JMA8EuuwpCb;iBe1-^|;qZ zidfftJfq&_gnLyW>9cqrJ)R*|2(sELRnx|FGaEQ%VF2^k^ou!uszI=`%P6;;xNLd1 z9I&)~319OExvHKO1}*^s##+!t-stQ@ic7elV^sB6h9>Zl5hMFK-yr+C-^dt&0zP87 z9;NcmOU>52Od!^47P29FN<_3;sgba#0*xyk)%M(k>%FE9>)L^JrM2D%C863&g-qrI3iufPBi%HSUvmx5@ zZPcor-M!vL;kGPDQ!7|`PvzM0@Ivk8G>0#zxdm);B9~SmVZG*b(|!9N^@95}odM*) z7F!P7b}(B%BG{!#Z2Ws+sUb-MzwIYV*{ja8)7{ZmEj~{7OG?XBblJA6IIu}aov*KM zue0W$=a8C=ha;*(gq~*ma$H` zMfo7$eTto-#>=ksIWk$;Y_z}G4x_|EvS{4ql|mU9iFSWKO72Y;r)R7_l}GLAS~!e< z=yX(KqQ&f%w&9&?JF;%~2VLM%a{Oulcxp&=h`^|39GfFg(B8hKS)K{Uje8i0nn`Rq z5;HZcK1{KlYTF>W>? zK{Y6AJwH>Dp)aN6^>8)&0sy3VwZTqfR4ki?+uw)`1@g(W=-0KQYXPKHFTl|&_4-MQ zX3u4{{&o1!k>brYo4EKp{-6$EmRl^6Z;T=gQ*|K^$--wYFeT)MdHeg)HOYF9%MB%5 zl-ZJKKy0epU2BZ4dbVrM67P!r6st(D;w!}^X%p(v;0pbHoIWOa<-6!>g?lVIDb zJEr^h*!10c>x?j|{Y}PC@b}eb-`K&&UDdAGMQvC5qcUK!Cv^3obiWas*ta&UCznmb2ME1WR zBB(_eToRiN{<=*lc=EjgmUUH1W|}+}pdJQNGp|4VVt7-BL>8Ll?Y%xGk{0vZO~9({ z%ZXjVgS!TUxotPq&LMG3Wv9L<^4(#&Zd_sh2Nr?-c0TBtfD+R>e$VC3uxfY=j}a_c z0>v>h@??^D*Ka;KU>r46Hxwy!zr^UMOmfjtWN7PbDk&SAzEMBF)_87NE-00A?2J+I zd%W%o(#|{drsE1?q|{10W1FtXVy~UruOG{!>`*!v&_puAg3C^kOAT+a4m%JRSo2Q_ z$tad?^R^5NxCKksWblQUQ-Hzch3F@_G-T|-v^W}Wa7s%7|r$Yw&k4)Mz8#MaLa%v zC&%gq8xbO6f+f%pk1mox<+bNkA!l>=ZV0Kn68hYNGLI17B|(?IT%viJmHT*7);6%( zOhx)}e%lWXb7;x+v?Sz$-w{8XLWXgzmYnzgFEc?}4xk40E(uUxn5 zd%o6>@7D1xT>cEhR=AwO+OnJ`f!?Q?G+eR)5&_aD)%$TOu{lYqbu6*}f$Gj z(yJ<~pbOn`28Z#qAm$Xb(_j|qMHrVtw+|ca0=Jxdj$Of2vYf#wibjg$8}PQHwRM6> z^U|PgTT`W#GcXMtsE#;WaQZiv)x0uNZ!pLF-uG;fZqT!|ChYHk8D8SFaz=kf8(_2w z*6h;p@n`$+kYjOF%QvMjtp+*$*=@x-paS&}25!+|t58)UiCJM=U5nwSt&gf4`&>mh zbCkRX-y0n6Hyc<(rVN(FEX7W)g|yo5%2U=Vy<(aJZLMJgHS^i>-s4tp9=c7|^@aL| zr-ghd*%=q5bxaD}nidcrh4EF?J$u4~8ZQ@|@+Vbe3Co|eD=OmfO7fek&1*55j3$y; z@q_of8^zy?j1SP;Lt^i!rlTPUCo&&P9cAcZ*{Mg~N?iV+(KAbOCQ)p{S1RG~Oblp@ z9WZsyT8Eieheii%|G*NY0;;v!Zccpj=ZLEnT+3YFsM@=P*lCTyVor2 zwHwt;7(cd43a#(O!eM?vFvTgVc_g#0f6Z!97qy>4d_gT@>#vUJGjG{0H`{*shfUx1 z3|;4iE~7QLwam0t^LIvT?|I~XQHcY|kn#YX9nT1#9|x8DvM#UiUG=`&G^hKiN^Ts0 z6zkg(=lW2z>}2E0%Uc$;?K*u)qLFw%Q|b@en_D)uj~p$KJ!}PSAh$;qjz%TMjUUXm zN7*U%QPhl|Q%XJ?-8+4w>z^V-DL{L82<|^U=7SyEO2#c`dRD&kXw8%@wTpe@uf%0P z?vmkqevA9=<5(UATP2#_4*>SbMV<|M*tB)^rZ?NIwA)jDef%(RWK5?0U;@ZGbhv-2 z;Q%eT1|{SjZBYxWs2jI?ol)H0**y2|Y*8mp9tsRi+iMQ7F%}NrKUY>c5X7qCSl`ce zJ&rD>9eGVWO*w!+W6CM2bNa{p+}sMY@m1d}hn}ih!J8H>&;Ib9y}&N@q4>!J`TAIFnm$rSXu9t0POWVhd{~b}-#%?5(o{_v|x1eM7Ivw>5n>Oox!~WH*-< zrr>7@9kjbSSX@ZB!Ot-A~sf_e~R&IFYU z$&?yNFWjI6>ur(DzzbG>rnMi(+_Q0klP3r&Djoe*wXMA=p@#BiZmAEkzVL_*0D;*q zdFISn2{#!M>?lZt8*A0;{6*4YTxauflGD<3rX9>#`#*Y-I4ie4Hk?+uoN@R>~mHptgHuKzF{E&wOb#LHt>HSLq^>!{4IY5v; z0Z3bA-NOzguq;K|IQCI|r;WDr>!Tk4ax-8H#{g&tY&`H}26b<9idW$7T|+ElTqjY8 zR-fiYKSc|}yavbRD&AN?aR@a*zkGsF9J-3R6qI!Skm41+m z)AtI1DKH<9O}XsEh0K5gYWlHikz-2OuH0>+NC~=7lBoP_=Po*>F0}5H?bvBD0y3D= z_B;Fzq0$yD%VJ-4*q`LsR9;b+aq0k3*(?quonj{SInM6ech_%DktqYAT%(8CZ+(Ax zeMmy$(6qaNX>JtOV+HK9x^L8zb)yyRL-;d1+@T|a3DCLz0|FRffVa2Tlmo4+3jO_G z5j>#;wp;@tl-84n@qjgpOc%)m$Z;+WRk9>bqx2=6dM?^c2wz)o`tUh5NeH7VaVqZE zv17UywVT63ZdxqAje5a@Wvp%_LE&}hCE6>Kg%hU?NZiCyQy8Bhg^~ie3t;WYu|GY5 zWQRq3Xwf97!OEcK3)6-Y#MRcA6u-Hw>j71!$NkLD=r`Mqe>BsfKk9hLCT^8lW*j6S z{W2q-+63gsUeE(^)r`=!9pT338&!*gDd0iWkT+k(m{N}WC-O_xi^kn`F(I zwdR`ho$vcR&-=~~ozpg|v(845K^0ug9U~4pEq3tWL9X;$)#W@}b&xiG?zMl-^f5aR zk1zkubIdVtVjTZQl|_}BOZ^)vJ`D*pH2-%3Z4XDlUXa+|NVIDaN9PZ4r~ChUdi(Q& zK(|9~Byf2By>8EI$ZNt(7qJ^o(m!5hIEm;(91W0|Hta(T9PMA*4&;JB5z$j+g|G&I zU8o&*dD-v3v-{KSt_ro&N7w%T17eW(pa%+Ftescix&wG7wEzb+_iyOD0>9m`zlT6b9_PrE49-N76t4 zjWxQ~@v&Xq&cr14-#XdP5d)}OJ^>u$j(-sm&)6)&>A$~}yQ2p2?gC@R5)C=w;1c%Xt zsju1;8IUNz-tPR$?_Bj6y~7}-|GN;A|i;te_R#+@)(ex zikB!V@18YgsX_&BJEQNE(tG#hHjN*}bUENGD47RN@4B|*(Qd!q3o@kAdv36Xa`wDB z0t&$}4uO;e{*5GyAmj_`Ex~uR1)Y=R2)L1OfA8OEHi7@8G+U{cLQyXDifkKVT1%H9Fh zzAA`b|M>E0fsz;CoOthvGIX`lyv#)xpe=8|yZG{POTq|h@(p0tuXuiWKHYIE;}~#k6phOJFCPk@$KR2Ax@J-Eoaq8 zx0N5~8zR)wRG)(Z#Hepiu4>fxL?xelN+{)Pa_a>aIhKbniPV#czvp|CH9ZlO)9kou zvQn1q)<~n7mTvQSX&x!_D4;%|BKyb=6;Z%UzXj0KTWEc)9_yPN0F==^%_gW$?s%uK zU)zQkJN64}g(pR6$K=FjVe<&-&84{u&tN%pLIk-NIOjOBDF!GgBAC@IhWw-x_BcZ3 zrJ*-6G2%j;p-VdDt&1X9I)Ta(9XNi$66r;rciU16%n@8>&pL%V`rnL&@?)2a2m-_xxM4-f);!8|%ss7}NM5bPF*GIR) zTLo&re>-zQ{L`M=E5h%ZvGOS{A5i+4Yt!_~1ii&oR9;wl>wAL(hdDw`@b5BrxpciZ zcGUnn%AKsddZv5L6IM}hM-bMEw;U<Ym1zRnHpU)|;*S@VhK{ z2mV!dGyl_4M8XrFX4i{W>E;{HuwaILv)NUgBGK{Bx6`NU1Wz z>(v7UXX6(kC6=_srJ~cfr%6EVGV5+%=&$An-Ci~^ruR_YDnQ+14*gQ|38N0uXi09o;{8U`GLD~`+J#t2&_C3F<@$6xq>E4R=m*8Ub9kZ&XR zyK>q-4MInuVW~L-p_I@onm84?(=C4<;?jXWZmu{PnJ0(7_w8Y!S z0Tuj(T_+d-fjED4q|*4k{H5hWk2!&56)zJj+Dv?dtru|MP8Rq2ms9G_V$NFvtRYhCkHag=OqOV3i#zyz*R2aDz92~AT z^*#^ZE7abl;(7ItR?CBtRe*TxAV*B*?^2%U3cxo(`jhPggkHZ(?bWY&shz_kt)1WQ zs-n@K7NCtYH8@>`fB3%?9O?G6}^Uo@O`FHKZ*)w}pk{E5ID-wTJ8 zp=;)zIeJjBSoM;)Bq^t-o=79>Wu<(pEZUXz^mo6J3zjEPQ{n%D*|DDc9p#7KzNb-irZ>+miqa{wiVny8;ccOYklvPdrx{QGZvh9yiuXdjn(w z>q!B1=j&}+A`I@R->dzL{HOn)Eilz}217SbCgz6D)!$og2`IS?{KdL#drJg}Yq%gv zx?e8U^11^gR443f7%tb!#6Ff^#e2Z={%9V_G1q+m0r_tz$FG&+?ODEe<+Lt0B;yC~ zi81(Ht}2*!3sguE!!6|r9T%1(tYZe9tTTRDQ`DtOi~bPcZ;r=nU9UFJpICtQx=YnQ z-6!*VHA{j>bx}$vF-}_Y?bwa0!HBG0$rh~SWpeo;XtX%0i;&8~)lGJonMx&Okfm;`3pxm6M)s(ZBlcx^enN zq`7fy^MIjV|6zFZBy1k`hsw-IK$lT1x8QQFN|J{YoYt@5iR|R)AE&I0PO2lJcrMQ& zA?6CUQgEeJ9(@tN(id}Ry#^eo4ED9$j0-4wb2fo{)0}+>74@|XO7dMpN+OBLvxPNdJ>{-{@RyPV^WYA*t^e#S z`YLALc)GEr* z1q0?UrJyd37N;>hS4dMMHagiAj26>wp;WDC+S*3}4VA|jt`hfObk2Nhxko%4lWm14 z_Zog*zRW?sx1KChX0<-!K57K^04I1i#>s&3e^yF|mg%}?M+%ss$8NumN3N=e3=;L= zktG85c4cmSEfoci>aM+i?v3lI)Z0H8m5&sk78)q$FJ)PlU2aMX!DQA_ z$!NZKcgPt_q2&`2&BP-A7yV#)F$9m~{Ro`@UiGHe{UKOlJu((@_~$ywGHaAhJMv)W z7X|o3cclEI?%6UKhwcQE+-H#H((&S0pZ-dFxy&B7{{1qKrvxy>3qYLvYj2|xXHl_j zV!-|KLJU;of~h3hVSM&Wg6^0Q-Sbiz)AuZ?us|TEuTNhGB3)2wo-eXm#$4YnPQiwhC+4Nhmrv=GfNS9J+vYMqkqx^ z`EwYnK3}z=J1wtGm^lYKfMdCgEnTgjyGysyFX-~ZVH_82A~X*PC23J@9ZC+F2gsPY zPe2=g8Ke-7Az1j;CmK>x+}OCisOuUvFEtE)IBb{Ry;WnyBe6NA7V{h`+*H@Y9!%gMLc3WtK6!%qYt;N;*XuaWAy#rFg}52i4hTWzIxpiBC^Rk-&W z_oH-yl3<9n)}#-~o74cQ?^O?!_9pk!%7r=9&mlqW@$c`Szpp@~fJnW=b zTXAGb12GeUlu=s&{I1UQ#COCB*`AkRPkrz@eYA zcMC3m4;Xt!aB`i%Xz8h`q88qP>#SId$=5ODqNlFjRhW{V@jnuo9$L3^oW zTGfjmcCUtU;~|dE-NG7op?}Co_kMOT_nxB4*G*+BFH0}b@#M7unP_1sg`CgZk`p5_#;T(kI~w$=NW3FN2=v(U9Mdh*Pz*^u@wv zl`iE|qfJZ3PkgY+yHFZe&xI!FYE2${#`|_15iAvaCL3O>rAqk<`Tl}Fu-Nc(g8S*( zj>=gqe(+y?&7celulCzf5+>tJ^vOU*iVlAz3!g{ASJe5N(K!_#kUSQ?(d)ZYOM)03 zsP5GTuU{AXppARy3MPLfd{ugYRwYz1Rs-`=_g&TzGl>-xQMFP^%F+H-Jy$Y#!3xb7 z+t;cvtZkbeWMx^P!o1?7kpQ;_udkNlV^PmeuY2^)8fANV;#qVejKE_ojcuCo`awb< z1bW=-oE++RV@XeHg`7_+uyEN9EVs@e{zC)iM%n5b*rj(}b5BY_9i83vb>gmk&XF@G z1-*k1vt1u86?3~PI9qfm9^{bgyc~01_xww=7~*T2Y@1? zdM6|;k7nK@*A+)z__3+i_B&kUVgz@*>T>$8k~A|^iZoy(?i%m*h0g5;S1$OBi@~y$ zVJsgK$97ezA~Q3;$m#M_ zl?|$rPi!`I^t}LucAN2;wyz=FHQ-&2axe>QP+c<*G?g3rh!ejl4JF<8UP8{93 zw>H}#(SzLE`e^yXU}YuCk%4>ylpLO$fBn_4eC8=bH@V9Kym>2C^(7xoOKw{vLW>rU zH^Jx`8Be>%>!ILZ{0uLIeih$*@E#9fS}#>`f=*~e8O3fZ>pl0Wc~=!M8JJsRG9drH zMKemnwEO&KbKv$4>NHc7RDnD0V0tv~dIFlZ#6ItYnrUrAOK3a`_S?uH4o9SA(@ zMWmV)X>%C-_MuXOM1x(Hg?3dw_}yK?yi{SL#p+~w60^k%T$@s-z05STZTU*syo;*c zR=`SVdbG?5%9&$tt|`HYFPW^&cE@@n9R4JWN`bouRM}?gWn=`=4wk3F+9N7SeZ=%h zg1^8qa1zwa+&|ArAi?rGvs`if`@QMwSglw1o3olQK`zYAnNF;q1Piduj)+GlaCpj zLw&p_4q64Hm{+aecIJgwk|brEXQw<`;`KsOL?01bvmZ_8CwY61$`P!`0!L()qkGHr zFzO5Q^0o67a|xKkaB5^aX2A2{Qr_4H1|_TnIsL9ZZ_jhf&GEL^DwvS!9nR|il+#+? zS9HXn>2Etln1a$?9Jgui8Jt3|JUNL*+d=l*k zW_)-g&Dfk9P3_u4+d7QbF>u3LIGqX#yUY$qCg#xVjFeKFZYNJzo7vDpkjG@am4Lp- zK+U82mICX#AR|v!e$u$7>eOHEf_z%&6-61y`nBri#c)rP%Go{GkaU&B_A<*Jq{6)% zb12NX>ITPvNC3+%;j$u*XPs>2x#^mN_&(p+RVCTPq|bBFNdZc8k}i|S7T;lYD=)xKV~Z^ zf@Msr?yDM}6%E{gn~e3IrBYktlEV-QOCugFP04T=&-I^Of_jb^T}hP)mdx4z0C0eU zQj;hv<-Be7ax>Y1Ph_26yJD5qrO-3w=JJ`gmP6c6#z;98v#}*ZtUNl9j>uYUt{19bA_g*{f=J-ksn5`D}h?lnK7#EYou&E$?YphQjEXeHd#YPiocH z?vT4nsWD8{D;kk8{#N2+%#K$`!Y;jV;rA#JKZ(5vv4xkFwiV(?RGQE&9m0T0KV*y-3a<| zPwvO+EsTD^uH)DKe2K;#RxP!i$Hsow7T4mGCfXz#-@@E+(R-$u=EvQqHwUXQG9x2o zi!$QWjpzXUfB+^cge1LV+qn+W=4i-3?B};ALRTUy7}wR^quT&H#~~7 zjTf7@{e;`y3D5)A&gZPna33_!2gEInDH6n^o6YU_X|!|MaA{a>d z(Tt0Y`LkcP@1%cZr#Z^S?>@fSRhwW?AbY^Kdg{BuWpig+Zrhx&2CGpsRpuX?wjJd3 z@ypr9lqo8ruv13AxYjA1klV&bv=tl0UME~N)=Owv$t8+yBuQb7_T~&aCAS`FP``YF=!)gX; zpwpXww&~qvp)Y4|{_VGFpds6s-}dVk>(h6;D=WoOj=p111#AMisy17-IcId=ZQM%K zx&{*iJgI!q9Zfq9%iVQ9v3 zMCo|9BH41Y`+0p0Q?}1$Q}p$^pKAr|(M(iM`F(h&9TeOKZCJB};lV8aA?kb?^y&k^ zlr7HMshmk7M`0%1USp8NPd(NpiG)y0Y6Op(a1ymNV0^A+unVUfj0KRZ#bJL+IM{cbdl6ZnCP4CD&K< zpQyW?%y{b4y&I#!V|9vEHkPq9v3e@gUO5YhR8km1S;SChT2Pma^NK2ozr=nz=y17| z=@5V$$jM3}NBcY$my=K22;d0Kfus`J{3%TYFo5hFB$Q#j@2)e$S>J{Fek8gFsx#(N z6v$0OVQhQKgwcxfut|p2ndRd6aNw>J7F&cc((vW7odd1jdQ{T++!1n=yihnV#Prw7pIbavcg>EQ0SQ(N~0oZ zs?R#x`C-y$@m}-bx)R@oV0L&Er@WHZ`d7pHom;-tXL|~qzUzfO zkVdz~G=z`z2?>*9FjAR=uj9{Y@?bgtV{ZY>)nfAdLue7OIA=g6M$m?Gm6^aBu2s$r z5jK#9G-FH=Zs?dSI8MMyg;0^V9M)fFn6&V{^htdd^?QR=>ty=rAqspgz6Tcm71H*C zUQ1#wlqitJhgvas-_eG}Nw|4}^1*op8&(^sy5wsz$)#%@EFzFGxm<{)L%Db9xOK?P`-Ge-+~H78IWP5)$)Unn9-=?SRU zm2U|uNnB{KUzJ}X3~;+nw1x+$ue>S04@@Mly9rCLDPs#(2V{NebabFa`us^w#T7pV z)}Qd&{X%Nzligd$oh~M%a-wsPmikgIzs~wpI(kVxJdLv0uJ5CG!MXEzxW|Wmsp;wR?&JOLh(WeF5w)a62&cMcW{+af)EkGM%(19+ z{8246GGuW&94UJ*=e_`ZjjlmXJ#=eVnVEBpc zsP8!{On_>kPg|~6rq`KSvX)ApOk}OcHY_}>8I2V3GE*U$>IcOLkef})vqVVx^D{m2 zz_R4eB?&H0SX;dhM=rN$Vcy~JM}m1Ikxkgu#c*Hy*;2+>B|mu}yd?!<;N`$!|J9*PHQCYE;XWoD-v_TOcblg>>`PljiP^hP zg7D@1Uf-Dp9H&nD)60#Km(u0KS;KatUs8tzd00RZ?zXEJoa3NoS@x>k2QA5~9!zok z32Eh3RT^0*UPjzXekxs^OZe5KXLD## zy$r&~(q$4f_%+!>KLOGhFj|L&dzt&pg)Y(%-pchM^UafK4F4u&{7PfDgO83+mtTw^ zxtYqusrk?&%1`2Z$DBm!t(XvqMfO{@aJU7aus*3Sg#)0dM&e`UpD*TQtoJGHI{~c% zTL5$9OSWeH2&dWtu;s1U0nn`gJwm~rrMkQb^(l6jvt8-VE41^pIBe49<&>(K6W5?x z4E=dh5a=2`BgOGvOZn;BiEAAZ)ixx?_pdUXR}q9^R7y z=nz>nEw$%q?e~gx$H=fVHWHS_5<=R8j1C9ZJSVmZK~Ltf*j&~-r?n{`KOXzvfWflViIDW-6Ub$2j=&@465v=OgFNUYIV=>E? z%x>yv++=Nykk>6iZf|emx@`d$!n0}LsDOy?#S2cdYL-iX+SPu4D?B;~_R;0YNo%hJ z!$}QnBjSOJ4{Hr)0IZl~c|}ZZJ6J(RZ6ObfX;s#JGG{^Y089kAx^%vNdNIWqEo-^f zM@V%aZ}h0s4hun2`mQE1LPToghSnjK!$zb)Srj?aV_r7-WMqkjEXu^xg1$Vk zZ*VXV295@wb)U%^`I>5p*^v3EyRub=Aww`u+Am3+A7rJ>OEq(gpz9JbTzFe!J(d_orpP~HR?qjijs8_}xZ!+@t?UU2^Qa0Aw@|*5Wy)Wk zGE{gZ%=!CuPM++9fz$FTf=@^X3#2>7*Z8=@U6x%ohf7voG9&fhg{QK?8 zX;B2l+Ja&oPMwrfnWTLxUJ}(Z!3}n&80q-9IraCd5OJ{(e?@pbDsh)?*WDGhy(wZMl72*(&ikL zAM$sM_R}=l=GZoj`gBJe zH`^4(oejc|XJ*)DW~D=4>jCypE+dgYhW9UmQIGgilTPBn6RR)*$| z*!oL`XjA@9V6`YZzt@pt8@3M<-G~miy<|>}D6u_TxJ6<3F@`u_X#KU#*cVjzk`0n} zY#&>Zmb2St+m66_I}q>9_Z}Mmqs!Eo&)Dc{D!^%EWDrB=@xOx7chCp9i_PyV#&!w) zPp|-=c2(Kj-yC6J3J2Ln*?io;?UhDmm}>MouHw#b4tg7hQX|K9)O`>D9HO?s48PU8 z$26jB40Zt7yrF74njEt^wZT?>KCo*C$S%MJ&@*B4SU6hLcYS%N+vuk0aT%}X?mUdM zGG;k^9nSW>*S>!yFJgVqJI5=lTe`0pnot!Xn9nLhH3pAcLXu<6fN4|Vq{2r#XU6}ZkA$h<2tfqU|7vMSH6F=8o#p#EC1fov{$?Jy7)G*^wrh%~a zT8LRnyL~NGe&873+l`QWxe6wmo9M-TPalVzRI9`*pBAWC>*KR#R%^&OH&30s{P>p7 z<7)@FEj`I(0QQ@i;+1bJ$_1c_Kf7s9hJgL|J_h`~U*EGMb;IY?8T7=M4B~izts*qT zw2qB72X$M2`pedC^2_?kX$YK!fsf%T0KOCRR}KWS0EBb|Ax4|R?C<+(+dl3_2&>|n zk5Xj3dvXsj+izm)F~7KqR1$gy%A{YepcV&{Cx~e8ZbilQ7^Qht z`m}x^Th!2wN>B22Q%hPQ%ezp){kOT7T(dSD4Xj|r#H3J%K|P!26=JQs19ZGl-0r^` zQiXg?*wI>Rzdvuw#M}t_7_T?rO(oR)H4TN26NeC3-b-+1wZdqw|1w>hGy-7Ix;~pT z-OsI!O{O=%b@6-d`47+PjVzUic z^(9u_TYdN=JOu%_;??(Pu1QI?e$Y&M$fKs=$RR{c^7%?wfEjld3S^ z6EkidW9|#JDsq@yR;awyT0+%syBs;Qx6Ix#2U ze)6|Vs}%B(+FgZSpOVC7FBjs~3oUC!n>cZsREB7LSM(|7ok3=+3O&FRHqaxJNBkkM z>=vQ4;xpN-k1^JxJ*%7;$A$xdKpKRw64#C!;sGm7oL}q>M~ev3zt=36J*l0~w`p>n zM2?m7?Y-`gGnbbPQ=IpKjB4ot6aCvWyhWTkn!cKgUx{~aAZC~FzQg(RGD5u^Lgy~% zHxg}Bn^F-7X>j`6I(DSLG&TDB4W;hC1UB~(`x}7Ojxy6b>DV>XwHSe`l$93oo+@as zcw~cTv6pK2`XDss#gSpUy4%x))h;lmUytgM09oZsfwhkgyd(jOUno6+8Ctrsd-;bj2P7ae!qzzK1rG1krs_TLK zCZSpamsJR}LKC?B;zYNB9I}$;5X{AQ(8?YeHWmn@Zn>= z_oY7c{6Uh(D$4sZGY`7p(8iTiMVZI9v?^EMNr&vF^os`^>MUZkXsS@(Fh*~O!>9sD za3`BZc*U+TUd6K~q|Eu@bliCwbRLZrgp73xC5NjrWwge~fRGCUK!KX=YqFwHDr^WS zVF55gfxz|z;8Ms-;Y?MwQ5Ls+J~juaYRcwuo6`mGmV?g**{F(V7GY|fb#{1Un5f&< zGfxR-$Z~16Fv767zZhSj$%|07oBwm_WXIbYH+RA5`0MVj6VfJ=MedW8LkvYWT3ic= zJI1(bfz2p5C(rs3fLa4AByWpt*8Q@JuMYD?`v(vsl=!5~OGVknPbq}H=?Il-0c3do zw}0{Gc}8FN53=U2m!$E@IZj#ZrM}`2c(1(Axn!=E#m&^dYxfPt%QOS_5qA#O`DsP1 zP+rfN5%f7Imkz>U>!9-o%YPgbFvwBWjHY7&RFw-rq*6zx^?e<;7%EVA_8kF0rCrG?)!WQkQZ>-5J@|@vYB;bj;zfq0d{03dC~zI{%<5tHt*wqHWWFg z+GK15EoyJsF33Rsjypenf3xpmo%qWI(K-Ken1Sf5y|W@CNcY(PH^+2ky+mR=e<){o z)6_A4SJh^hRX(Xf`KDKiTM?=KK_lK>=59Z>k!wJV-*~ZZD|qoMHURj&&Yk`~Ta_ra zgH`(fo!v_j@Sb)U3KmD8KIUvbLC@vm>`6LDAhFiK&84*NEw1K)c2o*n0E3=H3P}X% zM*d=sdISyOQ_Tkmyp%L?xvBE8By-qEopCJ>Rz<{jsbHw?9d6(Vj3jeaGnD^rIAhkB zr#8-xCAyu~IAvp6AA?=+k#pFJ`0q`12%T_EI)H+$H zmIhxlzQP;Y3Nd^CILvUT;+luzYw>`^SX?#OoG3Vx};k|zQsIm>4R@6Jus}r zGGWsuI_{Ud0&@fB5cw6e08P~o27)zJg)^P0)>cM#i(_ul02}4Fi8P^Fv^15g@^=I{+;S zAno;7uFwx+yMY8j*PAQye2d@0;WFq|6pC3o|LRm(68eL3v6Jd1;0cNkumwPpm!Jnr zNTEa?Wm2h60=3ne@MTi%s-8C{FRv!5p^R^c#G;0KG;#}_LMX58Ssa~ImBcTt#b9)0 z?dl{;S{rclMRcjfZuv?T%hhVTT7S-7b=!e_+nXc{0eTmSc~si-o9w6t7WS0wT7-(I zOaxLJq?t!HSO`FX$;r=J+h8Hwku)P(&(gT~XqvQ#*C9ToD}uh%Gi-Ysjn!9k?^s-% zO;=ajpe@&_d5eic>z7ITcQM}#)fSW3LIvEWY!GDcZdAZ!Q$Xh7I(R}V$Y=Gw>{)r} zIK8UEN(kUxHI0ne;>{mgXE{{uhbog~2+@^Eh$ z>+bkJ%Y!^-Qw8sCNxyQ-M4Q5{>@EG$B-y_(QuAnWG!1&(({cW*74shP2Jh6H(q|(n zm3kA>Cwl~C-E=J72U_e(bF8g3!HGDq2iX8pFDBI3)F9-mRk_@P2x?DEROByxRM+UO z7ooYEHKNbT%Dmb^keD;IG~Rup(6ax_TL)YH@a*J+KbN#$ix#jqy*R#4AlKd8V{sfZ zcUZnI;(U_}l>{)7m>wB3Ow?RSDA$$f<-;PN^S3srd?$G01f0unw_FBXY zbUGN~kbr^0#J2AipmayqFKvLT^#ktKP#Dbk)29a^yoxFKg8DyS2B$a-#P(y3486N@ zSs_u`ceY0~;QRB<4dfi(d({eg0CQYJ_ZEbv04@d8?Q6eFT04q(fOTG2E38z%2Hx<+ zKp1z5seK_th@xHtzs-B9vgI$S5%r&A>?e8iKPnrvqRKc=|GWs)Cih>}Hf%NdZ$t_k ztABm4`NQ_IMo}#prrV@DW^DDz?3ZosmLz~G83k<{%m&@kZ-?Tsf4_*F$ zbLQuy0itat1f!e(~FB`TiS8i4E!P=96Ai zzSRkD5`Dfcfxzvq(Yx(ij&G1?YR1gwLxTX>=G$NVc(-`LYi3V?2^LMs$?1?7)_us% z%wZ=|5W#C%^IjV!--L%U$o|P;RMAJuz=mE=^WHIo6)7u=tArOqpoGg$bSyT&HHUbh z+BMyoeepA)a(T*toCPp^Y`w$Q4fI_z@tSR{}~-(UdH?cB<9JU+n)3qyF1N z)NVKu>0?yTcjXK_-9!d@$JinpJzY?4-S|lcTJ%r~wUR+yrN9LT2ZK}EvmVXHX0vf$ z9TnPQ_!lhup8Zy@ILt@T=TK&VT8cV@L-XJU6@;Uut+>qGosYxjWUhvJ)-79)edqco z$PSkw9EI7X+yZBpA$evz|AGirvG zyy$Zm>Tu|l*VOtL^;7iOA~QTCK%J?Ih`hq#S>J3%01_Sofy@RXa(6k8WCMMTzE2Io zL@~{!0i^}bAH$c8DfR4jf{b^`k1=ldu}CcQ6P?cGWdJm%#Hyc`$G{P#7XX2l5s7`P zK>kH1YAw;E$P0Q%po0qx?`&Trcd82likXg+9R?FHi}YmA);UW1gtYk|R>y%9xsDew zr)=wnpyT4MiRJr0pMKbg2Ro&!*WmE@4gZ;3*-s#g@DlDg@F3?HmPU zIFf+&3W$6qlUB#Ha2puSI+%j_ZTQDD2?}OB!26P$l6b;B$8IdSEj10Ti?!0)rI%Ml z)Yn@*D0KCACF<~{*X>uGbt*@D+_m7Tr?9Z@NP?+8%sXM_t2D+4H+V8Yb;^(bmr6GE z2JkA6S_k&f%EtgS7sz|~BJBE|^g|jh%XDpcM}8Z)NWjzw=qpIAt*sFxG09Q8UlZy> zUV9#_AS~SA35VvaGQz^je*}$O?YWBDpn^)ezPx1z+GpxR z1ros_NnUHcd4PhCS}SHZhFe*v;e3rzo%!gg0x6eyuk;(+bX4u`1)zW~GcHb_@4u6~ z{Q?AhpCOL}jT+a}dd8A@EZ(C70uiq!j1VF()GR689zpwa_J~|?mQ}-{ zD~5$U88xo($QpQJV(O?O*5i>H3ZPOI##aiK7e67;Z)@OUH%puJ3}-fSigP``z7G|R z&qm9+)8~uKyk{BUmPC3-2|Q9GIHn#8_xZh&l$u_vD{DKxV8yE&QNAodTftx;7?eb^ z`)wa?7aswaVYS6NtoLbnCN*C?r-hDRtv9ZBO`?5L7!knK3x|0;n`NWvfPi(JO9V)- z3!f|Lmjl8o9>8Y2!?FNqBLT;L1q;{Sp@x<0r`kRO4?j{9fHQkbst^D)fS&YG?Hr&= z_TH9CTKBq5&+}x7!Fc6oXjP){TYnfyVSdVkVrCgh%*aS7A)CP0h%d|VVA3FvGjWCu zd5y2VdLo;OhPNPFf4p0e6;j3*ZqR>nW^4!l>F&}p`Wy}3lt{B=&G6L8qt+X!3$XB} zRIkYA{)_d~vdgPq3{q24`KJO)2^^8jN`u}y@;v(vJ0mO|97%nEfa{|t(xoe-AKg$% zlu{leyY=gZScm&QtQ-a;p+MSZ3?*$D#fr2VKM&ofb3)qk{m-Yp@Z?bW>e@8$w3#`m zk9gkSmQ+{Y229Sy+v1M`K$Znw&7OsHO-BhO(uwAzqRAZ3>-8VLwfcMw9{Rx46!wC_ zmRHeI<7R?J30$0@j)JAHT&i}*;`fB#KrTyjW4<;=IH87Bk$z|SHgf5^9+uS z=vA&x@l4D;e)ekvkVDjt!^MO5&p^X&4rerPJCZqDEb1r|Aeud(Rs#%dp?8$A|Y^iD8YmZM3Rtmm7S|Hk7^hAsoJUjokd#wa+l<&quTo} zJX6VFKAQV*hI}qunV6Ms&rhyQAM~}FBO{b9hIx)3d^FqBPBXbo)!5ird%TUrK&3QT z+c)|InIuJpRWgvtf#HekX&yMhv`|6;k_Vujt4_+hJ)fVav{I7z?GhON)M{gNVz>~5 zdd71QFg%v51rc-*r_X4i0t?G(CJ%Z(Q|%jL?^${ds`zwu_&q_-rQB|7H8zt>1+)3J zR!Snj6}7Qsv^LyZs&##W)4C^DIZTKB7X0?5T!9FimOg`2PLxvW`0&h+3ai;dr9K^X ze3r7$R1~RxNPu)^P42;6=qV8rHR72ui;u> z2TP&OlGw>Vev$y?Z~)}Y6!x>CWTcLM3=oI{pJTJ4IVj)zf^+exC+jaLl`?>=f`TNH z%aVqWqRbWC!R5v0or}k%l`gB-H(64%2HK^4v}tR6b^~hHJ=%snBEIRpXmGHiRVzG0 zBVE3e*iyx9l$i$yEpZ{tdRhL19l)xGOPsp=*uHXI1KXJTC;M@SU(5qJ>8+GfC1tH~ zX`Ga0z67FE74dw?iKObDjScb8QQfO>+bT>q^2*(Ss&k=qfy>Wt;iZUl2M68VD1U$| z{tJ*dayC(>*%ll^oGoLcr;vd>X(TZi=pXbz_74r&ApCKLQ9ce1N+(4t;tf zuWB-^Lq5eg`@TTGPU&RwhN)m{dwh|k=uh;gC3q!~&yHv(4vLdwsI9DXysUI_Vrh#- z*ujmR`7jhbU-nNmo4C)Z5iHvY8%xty1` zClTp$+5BN-@$+jCXzl|LIeB>*8|A&e{Ga%+s`66OhLnVoeHb|@w~-2+pF$p50^*PN zdn&~S;z7f&%r_F!%>F!#gioOO*qvwfBg-a>r-4u+>gE2b&7W(t{V#-aw}k!vPYmUr zN^WFy-#3e|+94?eaw8A%i?pH^3-J`4UDvin)1|C;HmAnlgl&A8 znbNx!azJQHUP?j4$=cRp)R~JOs|CpdT7sUBy@CG;H3K7y)EX0wS}yL)Eq~BCLnH=w z>Z_{?Qm7crevyPD>Wpc9!hkC_v;@tVTl}J>dJ(l43chJ%MD9H_BdYvQ-q7zb8SSi8 zF1C?c>5f37)%8>sfis=?@JBj7>jukM*Vi)XB%yr*&#r~=$xD%72rR1-dc<$|DiYQ5qSpH9|Ijs5TNdP+HFL?Lqhbfqe;R@bYYgH4~IK6weK)HW#@r* z^nB43;wuh&dgjHAfT_*?uDJ0}9 z@8mhxWV*Rp34cdk>uhJVsE-soAH2-QEH_sO|t4|O||N8Q=3qf41N;Th%D_uT-=TszVp zGMmd7W0QlOyX(oFcHJANAIib~1sJy2BmtZy%*h)zOTcpo^dRsJo$Lqd*{qPs#mhl0Mr#B!vWlU zri|}%OS3g}-=LhGubLYW7}mBFI9D(xoOxwcfV6W+*Hw9dhS3f7T&`GVo}06(=*0i2 z5xiW~&>UAXQH2lb_Uh9uSUNoR1jw~YR#xpEpdDQHyzM0*uakVrxG+gMv0|0Tdj%4| zn2q}plGYTBgQbv94jLS@2@xoOUg2$-nzjHKPR`8moVR!ikW^$A-hMn)Gb}LCeLxDG zWRz))vtv&~M|=m51kB58bRr(yO3^51dN~FM;VYWv$TW!L?{9VuO54r^gTzrKvN^%L7o6W2Z-l)nk88 zEx}(b`DR}FOcw-!5c4phy-MJ4ei@b3KA)J%0n-D=K2ub`xQ>0Pv;+$KY*hVmobNzJ zx3;$SI9JTgsP0bnMIf2w>vLm;dgKpt={m0=g!*yfK-9*L4RG$f-v!6_KF++Cy{uj6 zPrr*n7g}1#U#wX6G)q}Ib#m9b`k`#@G#?)arSqS`<ChID_|d*VhSFkdAWKhqusy zl!0UYdhd@Y&s|ak67h4R1Z-9$NTKhttvZ1GNEvoIsax+8dh8`<$L2)&Hj4%L?H9=1 ztNpT8{a?_!YCuV`*&kjB0>wjeuiT#3&URa;F<^6f+B$u1*Jmp*IW!)1=v+ksJMDWk zP1O_jY@PJ!HNn-#eMwq3&-RsDyUYUJ@anohJK8Khd40N_U6m@o z<*)xi+RGLWdAOccC54|Z03IZZcI?_V#9YPh5 zE;SH3C?z3;5JF1=&!V2{6EiN1&P z6N^>g231`dv2fAU8Z!-l5@5$v7&%+DeJOD)5$@x&S+dP=%oLy4$|~b*ST9$mU0eNv zpC=`0F+|)r9v;cY(JkZ*@1W9Xo4Z|Zz?j&1Bi`s7@KWR& z&A{;T9Zb2Q6nBYi76ypPmRYO68=R;arE?no{KqjA{+Yc2eHkz=>(2~e4S!)ajhH#9 zDJ~Sg%BJISP6f?NRfJ?c&78C0UzB#gkYqPGC;QdX>8lx6n>+zsWq7&N5qVmiCuGkd z(aVk&eeuJfGJz_7#vNgvl0v#4aVbF|fQE@bR8cu@S#IgzL1eQ_N1}6cuP*I70d_zK z`LjDe91ib9*UZVdPuoC!E5MtE-Fa#!ScI?7;)^{xYMqxB5q2fv%&=8O z=S~*u&y2c8XX8!%y^_6_6RBZ>!H9#c^x0Z@?Q*?MS)+&I#%g>$@rEUeneX)p>;BXvg+M+7 z`0O259eP}Lao`#=rZdUmEg)s&04zlO?X^8-lsSEw1xykL(O~I~57~fe2_ykTTCR2O z6etQHV=G!=k3YJ4CrKOVZa^xBV1fORy|3q;A~w)?W8*!)QSY9!MTQUd!wYQl6cGcM zX2CxW4K=s`va8DL&0R^>GjZhaIF$<5-XDtuO0zH0lCp<5Z65C0P}Wej2Ojr=7Gs|; z3hd`hj}Y*uD=8iksNx2}h`Y-lJ=ZNbSR(_7OG~09UaCgkYuWpaqwDLLEeQ{cOl!*__Fc!SH}?Ld2s(hjam;Ea)=q)N zZUbp7z<95uzqK78NmuR^6DYB2Kq?BbBgEy-9Rbf7{U-XB<O7^b=%UH6k0 z4nH|-5h=YTG4|6qVzW8Ba7-jpO1SBWgy}+=0(2ANW_xBug-F1pdz#rbfZvgtneR^v1Pj9tn_U^onvr+yLdh9 zI3ynPK$R7Ys;>LgAD#2 zBGDs`oeRP_tv5W49xZaRkU5@(wB%IY#&D8^c6aK;wht%${EV;S_X0J+lO8R=gAhm+ zh_9oHEq@Snw;(~p`o4#UheHm?<=dADyAs$_M5PUOE52DO@}%0;7B~Cd8IMTE0K$~> zgn7t!)cE(=Zvz|su!^6)L$Lt<9j#Ox$w7VuOmhG|G5gHC zM-wi^b5(&Ou|2?Mj!ta)Oo{JzzNP$v;-1Jd#o44|s;t!L54L1&&7GFxxGs<`x^q8= zV3)^gMoqq)U6u0E&jtpJSsg$acRtd8I}>oEt2;mzED>>ogHzg>32?&?!c=629P~it zpP%WuCt@uZDEpM{BwwFAwgD3HpdxN~G_$G)9E<=t4RbG2@`@Cfsjge0j{$1AaMC{O zY>VM6>yN45@gV>)*cmfnudQ!;C0gXEpaF$TgaJ#4fs_go&A0s2H z47t73*`W|AeoaDB5+!Yzlm8z{5MWjW1pDK01<(B`E%n_;ZyZ-`2`=z#$qTr1yq%OH z;QS4flARBu&O%#7v#k#P{!NyhxUNUAD^obSga9e<_!Y5jY(fXe7= zJr~G+_XlC@2mC?K%l%#DIe;DhZ|-2f8GYsb|K<&r@g@W6q0N}YP5#4^?LSU0g<-#t zwmHOCpTBTSgChZqv2nJ3OH$i^1ZyLJb=?1O5(5=j{VUZ0{`6B}`*-^UR=>YbrprV5 zFa20J@KhxIyL}{WK&*g7L_hxTTF16F5!_+izsV`JQR@2I;lELUHMBJVwEH)Wo2|hA zO;^>V{>Mb+IS0>yE}=> zdMTr!1pMHz@K_J3{lBQ=zNTg!D=S24C;mra|)h5=YXLGE$b?lg!{nJz1Dt0#Z4QX#6ubEry8Z9PV=$IfE~VLRw1@NGcpvmJ6$y^Isdm* zZ!8c93_4RA(C3t-F?qM2?rnPiE!C`yJhq8?Y{GAIhjaD-=Y?Ha<9pioMtFAXjWc$g zB#Fx0?F;@k2->cKt|X3DnU~;Fd0nVlR4*L*T&Z3Czz2Bt-aVG(?M=xFMa(ktp*Ydz ziYR;z+<)Z;4C*>aQ1HdR!;D(XI0*n*UzuZHd<72KqS*?EHESF^fVi@=yPKw5To_pi zWf7Z8oa+Tt75G$9CjQl?_CXPWn!b90!%b+wXT!)N&pSy)M@c{8bKqXKFnyDU4!jd0 z`Z*ijw$>)%a~QG7jsp=R2BLOZ!M2w6^5+8sNDa-ShUESMt#ha%QEzYW9}|aT?~((; z0SacC2e;nvA@>&pdUNOSNt}%KxfQ{Dr+MMuAX%EsByFT7|A?T z&$ZhDvK!90Dn5)Sy54u)&oNx2X>&+?pA!?xmZLI2020)UUeeFIhb^&bM6{hQO3#Of>m!5Q53jp^ANOd4k(z{C7(7vW<%JA3S!1V9R( z_plaAIAB_fQ6AXqWB|l64W-4`g6Y@Zh_MmMJ-^BmmQk_?c|sk1hE{N;-{9oCX81hK zW+uQr2M`e+dy#aEq!L#FLkF8ilwVrt_oA+gcK|-^cvV-&PBd3Xh>WwrG+@T;_v}i- z{$El=lr;Gh=DK4qRWAYn{K-_O+_~y_G!Jc#NK5hXr+=S9%2xk&Wg6fOFSFGzXYU>? zoR0_trq3(s09@pbM9UwC*`Gtl-4CS2NfjJ#j*_O*S_dZ7WefwPVZSealJnek|(^6-IgY>|#uT)9^fP93vv%AUpu8)`wV4ULt zJ}&?he_vXwki;3v_M}iz(XDYC%7!s_o(_y96*~^_afIvAKfn- ziWq#+w9R7dKL**|!{4-NbUJ{U5av7&QdF9gj!?Vbiv1(jNYgVvfWG5V_W{W5odY$Q z|FTfn)3mqki;N)=Z^>muIFHSa*_#Qud!*Z%$cpi~Wr>sGPpDd+(j<@(r*KpfJzxMI zyo~E%{)WC|D;gfJdJI�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�rx(bF1met@itc$lIk1s z^{us}zM+H(N&6mr$iJ;Y?Y{_Nu!$PkIsj6qt+0TX57I@G1~SFmJWMTGAKv?noHh(4 z?d>`LxyVHcz5UKO9)2r^ggFYuH*Iy9RDx;tM&vv<^kmr2-T#D;~E?VaOM4FQT}q6 zi=RM8)s^+2;jHU}3EvQDdOjr76_{{=Mz=Jlc1_Igg zrkO&HFve!gyU82jTHO@^4$y2%O&${_TAgzNF7mB~V5>NPV0LG^#otQ2HB@pfr8M1jU77vew%DJLEHTYgiCP8FA;}XHl9o;67bV(S)8CtR zzDG+$pl|*{{izl|o)Gz+M^E`foy)rJ-8X{Tj#na{`~I%xU65#!w=E?I>-qFKl9F7r zC?z6R`XAV;e_BKIpucWVHA22rt^P@8Y1+v-mo7EA2qyyE+fW>YNW>kwc(Pj&J+&`ia6;?PnN z^-ecpo+{TpO0C(>1;od2YOa{WEp5T&kdTne&MTm&K$YUG{-{o4DQ<%hX~;9RD*mu#*%fdF z{90+<@hp-JwdD66yj66(393t%+-LH@k7YZj*t#lD$4zggy|eG=WU-BB+nn{1Qd{qS z&L~jjB{VbH0XVJo-di`csyrFj`vybJtHE}g0DlSXw~2nC52(@y<;^#55ttm(wwgdD zz9Z~(n_PqZaf4%p9PDe#{S_0q85t8m>iqg#N4?5BFKuo|oScT{Lnf9Q$OIE@hqe|X zL--ty?~{^>e>iK2O2bCcaXkI<{-+`SGR7~rtSBA22C#xDKG6J&NUc>O+1c$uYc7mb zyP^|lc}qw^3W>F|k@mw%4UQFdgHdXbYq@5!Rh_$teRPnV@$t!V)qN8P=;qwA^u1vz}AzKUjXgHNXL0)O|u=wC?BTX zp7zXy#^yNgSC@9Z=hBT9FXtEmmwZY6R_84;`2qQ(#op~C^J)Ztz}gKkg3&M`nV1cN zJNTVgdmM()WrY_4x`v8RJy6#H#ka+kA-d7|oL9Xh;>odJjIV#}#35ez18DQOBVMAWEC|@u;s$tqxFrBxpgXPRc20knjffC zpQjRr;k(O0KXye-zG^z&l|4Bu6fctw`aZc?I_Z@_fyUgYAdBqDH5|Jl9@3{=NZ&n6 zmUztG=Ff9ckkfT8CK{iW{r(o|_itTh&Pp5!)k&(V)zUEqzyu<>3lbJnHELbdQi*>^)NUV#1qJ(n8)A2hxyVw$jSCEmcT@jKyy=r6ee4`XX}4xHlFT z_q$I65>%_7>8*H5#|VvAR#s98xrdHFPi17L&S0+~q|p){g8X{snVz1B676{h%2Q?P z0$LB*{?+%VrTY3kH+1qDICw<1dcK_AP*WQriMz;t*LNXRgc4h;UteFA-o-|vnMK(2 zTe1J?_GX&ooEJ7+Q$NKb}N%+Ro?9q|*rPpsZY+t9GP! z7c+}U`%&m_?rKCoOXuzUx|vda8q))5f$b+EXp!ILzR$$a(u3aB08I0#8O`h?Xa0JE zuB1XVbw_`8V_<+__OoADm`XhD%+1;mbl@&|xj`DNRk_4UlPvp5LK~FJA?gQx^YgY{ zh@NEm=Y6{epLnKj-OM)0dE)8ap!~=|-Fan)-hquB#HX%~>0}gRnZ-ma-i|9DF;UU3 z6lNms*<7GG7fnoKou+54i`@;sMtt(=P^Cn5lf&N~tVl=vYVo%6XV-!y0?EQUbB$|~ zzH7r=?KG&X5pOp>n_2B!KOWz#d&?MhLtV(@>YL*|_<^Z&b=Ioj+%PYREx(Scv90?& z-7NR?QPlEHXO(cPP$EqB{ZmU>xR;`Yh9tZ#@?w@p+=--X?9tj!v2eWR6qtN{jMv(Q zgjv@)&RfsX4Pz^{=taQq@hP7`{26E`e7CyB&(Q!r~6;S)hj#eIFc{M&{^quaD) zA{j>e%t!hGN13IBow>+`Usp5U<}J#ijV>RjrgFjYxy>`N2gjG3mE4~_Jt0@GqbrT$ zqnR6>k2&A!*!5@Bz6UKa06hFb+h_l!)eFix_8>len=io@=F4oF5o6}pO5S$;`tFX- zpkKj&stb#mkyRN=y2qY+C!$@M*K3)b`fM6JYBF=`Vv|*7uy&33dQ|M zBa(IM_8pTUpNM3&cBY;mk%<+^h3PqLmG6Sp)U@jBCp;58%smAtp4THk@E9CSW@SE`yUev&LR zqZ-tdbHb9dC`s1vMG2@fRY^%yRmIzkdA}9%rpYn7{v@iEwZ6qo8XKDZ^bR(Qf@xsJ zyd$H8Kbcii7Ib5w<((F2l_A&o2PHQ`iID{Muh8BVI1;1ZW2Ij70uIF?%LAhbMzs(h zc6`Rz-Nqavr)L-a#UG_2QYD99B&*SUy8W@I)L1zJW2)R{`~u`p0igSDKdz4M89R1r zOgRd8npr`(H3`Z0to&hiOpKk>f2NfNii=n}o!;a+!Pen~rk1FS>!0oob_8%?4X02l ze`;LVQ){>A!wT@sWSZOK450bXeDePD@wN}u*{g+;?wKt$P*d?cQ>IQ|bPH!}+mCud zh{{q%8C4kJD?`%JDSLUL&Rd@YiqXx=KW0rV_D&5f#<`#CK~hw5ikVaLV+WZYas{kQ zV_sn$*W0N9X%Q4%5o$UEd*&PXqb1sLzdK!ol&3m>X#zyJHw0a))q2i~)}UV2H>59@ z$DbRe-l7BLKhZlf>KmB|>j(xszD0;Ynt%3A#6?fBmkxSWXI6Y zQX*12@b!W-8lIm>eWofaHw2B0D*re!&_5wjC454cQ$I)kOHAevY|hr>*fLVXS%sco z)RMAmCsmqA2&2rukiP|*?m{JqaxprBl6RHjhs2j3y94W;d^w+i)zn}0Fu;IQ>@fhw zM15=NfUy)%5dmoW)hEff(L7;z0#z1yrj=KdU=)euTk*!%ttOl7KbI-I1oj*w+{mF1 z4q{6QO-=n26i4I=YCt1WVEoKLU48>5^k${X3uQKBBH%K|o8#a7hAgUVv42^f4J8W{ zUX1jtp{G}(r<%wm-kP#9yAM5L9+yQ$#veOb3JHto4!aRuXDKcYE#L4obzg!^na zi<6a!v}Mp~)cFg&FYMOTolfgcWMUcXBhR&4_}!$9=q``t*inMJ0TB`GBNA!e*%iw= z?fH?|!hwj2OpdogcC<)4O;peNo(<$%QW{5*Vf6;Tma4D_*PJP6#*S2}Hr;=pT5_LT zqbyBHqtUif*wsb_pU;A8xbo8aY<}6eEdvpRX&7w>_6Ew2y7E;Dw3VQuvU0vdx{eB zMb+%O>0=j0jfR?{ckev!ki|;>7?TM3SU>MxH(z)|cP`!+TmvPaMSS6dhu6{Oot=nV z9M*ZYg$5s+>YD%y^tGlZ>sT-OFRto`OESmvOLH-+BLDel|FIR1*3Y2XRxRJ@RYA%h z+Uoys7+EcHko>Z*=&A?L9PeG=>KA|emdk8gz6%S9-|%=H5$-GPYc9yMjcwRf;OpHN zOoqj=rUgFsqePo;NJqxB_grULZ=fN6V0kT89I6@e<;!E{uF#UOWMITtSNGt9mA0%6)-o^T}Xr=7Ou|Hus+0A58s%Mj%PR0S>U?U)tcd${0TMZ z^zp?4*W)hshr}kG_VAZ4dWm#cm+Kb38S$1xvD%p0$Tm5sc(W6-XO5mq*WCr)79cQJ zKO5!^`bQi)!oKdowxR9YvDeNga#yCW{RM`2{e}Eg zuBtA38^dnYAm=8HzWrdEVt#F{sF=t=j^F>owGY0x3Laven#i!3b^OpHHL<4tSSoy& zx#Wvv8m-_;g*f`^Tlojg^zib<84cx)cXeX_q>mn9-+sh$e!ljfhO)vts$5uxT&o7U zqke0M%VCU|$9AwWWMY_<`Z_7O1y@Ubm13^p0DYniyI#P(_`|wa77Z89H%dEc#}g~J z{z;uUtB9U$4S(Dg@E0bSP3%5zD_0*jca4-@!}!ihJkup)P0tg z{*G_o7q=!|{c-pIVkrA=n(Ouju43#n=;^9&R&jm-^3h*M{(t7=JVV@PMdAPQ%hyfs z=#T!ZeQ-}KknlRH9h)o?1lgTEP$8A{>w$pGtm8i#_V5T{Yyq-%+_Q7APTL1N7|M3anvwJW8ss{P@JJ~6E&i+a{{`VC$nZ}** zd|rp!Ul&8U|NEc+`szu<-;UO+fWPxgF3b}CyXTO*S@C}yj7yv6=>OaMeRj(79|QES zADc}7Zqod%Z}dl?AN%jN(O>)jbFKXA0f1-YH$(7WZu0Tllfo>K|LXyo{qGYo=kKpq zG1CM0UxV`3r~Ue7v?$TvOqjnNz@5KYRj>ZmSGzFlf7a`+Zana~0FaBwKWh&KxuxGN z01r58O8v{yd4k&__9tTX_JWmiqiGcyyek}dV)71R7ZE(H5kMn)`Qsrw?Os#r zUV9in`u4aCaR%a$Iq}f!utLPEzyx+DS>ficXAETr==l9gLwYNhIL{R{*a43W#(JPB6h6t1dCx|ofT!Tlw?S?|?~U2?Wvsr1R+&&h zxfl0z+F%e3m?o16Ns*0R^~T~Kg$AJ%*sU8`Ueg-g8Dr^MGKU5HnV!O@iG<&z>(4gD zyyLCy{5@x2_lrCepc`{9&NkXAlyYCX3s31Gjt3U+AS9GmF#qAa*!$J4xwOl7B89MF z?D3_22`~@Ws$Zi=-AR$NG~EX-Tno?CxcMS%;%DKlHT?NYdjtK2SDs(t_i4+_%(wH^ zhn)uG0R4uq*bnOKe$7{gY$=1~r-7?%HNRUMDr9^M_@xTzSyvgKI{~}`m6S2c&$$@L zNWzj7Se0W^BRY^5Xo!fwn3 z&^(E;6!i5z8`0-Fdt*NnfIV!t(ss3E*HPGHYqsOXCabQ%LTZ>SF_~Dp4jSee2rbPSIO^zEBw$Ce-W99h&!_| z2NU_T{}4&FmKjhS0>O8v9(-g!y%)>0i&UaFJBsQ%c5k1s7*81OYOP}M`_t-sb3nc) zAg|UEc7FnsoUmx4u;3E^zrxr2@r%Hi$1J_5g{_-slRk_1*Y~_tYH|t9WKM?it-K~$ zF?gwmX?oe?MFeBOdsBQ^-BuB@x9a zl=)5!Ii*#o%S(%+*1H4+a~RqovperK1GNDy0&Z`}wQ90$*mpNZH~$KRZ)i|Slwmaj zi^RJq%Q$`vWcycVfq3%T4N1lPPlQ`Ks*eP_q-zx}{96coWiK7#Prq#qaYyWO)n1vU zz1P)$-N(_x!>BWVVX!_3dkRJ;&LQ~6m0A0j4}eNC=j~kDrGSGp!0+WZZ3E%qlQ7cW zfjagHm1<=p!F|7-+0!{Eu;7D2^U&X{1jn?`Us{@S6WEYIVK9L=6}wUp$&;ySHU0p1 z9QVz}F9pFY6(leii?|CKObwDfnDn56h1d#N3qRn3y9VSi6Pr7DT$;sYnb3lx31lat zr@YRv5g@Jv!|&#S$zz!^uy))3ljJYO22UEwG3GW}WUDxuW{^##;hi>UioD;eSag#u z(Vc+rLWv_b;#{v`)gt?HeV6BBuQwE^#WpZhYRXcHxrAvLU~j!oUho!7Zw3xN%L`ip;^21hwQnUluR6~4PMgB9-2V}5GVk=A zk)w{1bw({u=?r}l=Yyzb03kEQw)n-)AGAtySAcskGuVABD3}n)MC4&BK4$Z)J*hqBT+I4U@w{BToz~B` zNUABui*=KHJ{UzB5^-F#V+YO^RS$MK5yy+Y?Haf`yKC^Un|C9m-9;5V$o((o30f}f z2s9koLaQwZxd7APq%iIZ(i@*X?&Qrs)^%i?%ruWLL@i&V`Yl& zRk2ocI392Ebec*UyMDAUqC1s|B{<4Jp^7&C`Pv)xLD`;`j0qnr4dxZKj zxCv+H%70&x~5$J82a4*74pIcsa^@@4A7phRz_Xhb6%ZY2LvA$*R zT5K0FyURZ-ZK9|O;>vlX(vcTejCyWRc!GCV+P2U` zqeW^ADR7n`SpEyk{i~8+bwS=aa(}1OLRrf>d`1CrAd!#nH)0 zn%hCTP0Xs97erOrB4e+Zt&wLDd_`->YMLt_?)Pi?Kk7UdtSNmrBdi~uTJvmr(v!^B z#lq-q>oQJ1aD}G9wGh-#6|DiHvrK=}f1j9}<}1qE_dwKkOe zmmI=8*N7;w7EplFCxA3WYU=ahmGn>NbRvSaGE`^q96vYc;4bFsEw$%~wB!~t zp_w^9|A--)xT-PT@o()|mAEl6Q2QKModB^g;BULUs{fR@6-g1 z*!-EaTQc$^<45GPB0u{`lnNi}TAp{a!fmGNkW9&zws5aT0qtqdKY%&6EiyF;0)gZQF-f>T{-VS6N&-_Lbm3&v?dWt^{N%m zcAK}(nI*zgx=#%R*(=q3vYk%m4oFzO5@S!l^_W}B_lXD!pEM(4eGke0Rf>MPH;?7w z5^nA%z*Cr+g?KQ!ICs1QJq#&m0_m~Cm{AJcFK9TkCf|6?x3GA3XBDh5?SrJ%oBc@~ z`NV#WqY@D;GNe?Loh!)aM(b1Qkp~_q#lRPt5T`iN2G=bb$i#Wvs?5lgfQUe~7d-?1 z%GK}~XOjYZ!#{+5ROqJh!aFLhDCzReF7ncbaxR};e`tp#$W9W3_Hu)F$9DTS*EQ|C zS{uDE)dKH#-&>7{oooKszIjkg&eT{dq+x$ev2dK+m+Oc}bYo;Oqz}&P4dF+*7E9H~ zh;nZWiuT~V1WSLs|KbZJ>FrAFs@g?T?M6t=F{>NsK0QOawe^hheK>dVG7omh*f2tzzSl({|r~nxIA33aMIjMNI>t{N~Iy zICS8O;ufS5IB-?3W%{$~2ZVpfA$Rmzfk!U58^%XJcKq|lY*WCu^M!%$S4FVal7!}{ znY%>#Km5vb?@ib@LhOr@bZ=~V`hl$PdcHcyEvCA5D8U2#j$Z*>aGyeyy(c(1FKo$t z@q?9Xk7~iXAT!KuR3)_#=FwGgDSZJNzrx4VL)F4t8(*J)w<*Lv>8H(fCXZbOgDWjy8NswmUHU*w}gD0%o z|CE9f&Ng@RiDv8h9qO6Pgw4Q=qXP`>aRuGIGEfaBo#_FvSD0V^(rs*MGFG{19JEQE%E$>e=@Nr&{zejvA@p|*k zt8Mm=7tNHwmiSj^35MwU#g!(Z#mu*@1-y~asM}l@({g}0?dVqNxHjR3zcOgfimYQj zfk*-HctOkBFxzQybE&a3{rtY+6#F`yvC@3wnSWB#T(pfZNJ2+8x`fth&o(V5K}vSr z6rxU@9{BTZ%Tm8JZefNV5C=Qv(8(7l`-_XBha!Tb@2W2A)rv}D_->C7fg`B)D}S(0 zBMUR;&;6}2Hzu(U-)&hFUiAeJ6gnAbuGFY~zvaA?AlBS&rGtGLmt(1stqGY&R>GT} zrN*AKIRD<`A;)&uVZT;YrhVp_UAS9o>zmHsgk25IlI25XNP|ej7&-KbN}lbN1Ur6- ze-OljW-?)Ot)#)pLUVT7ysT)=(|nNWLO9P_XgmmULb$Na)87PJ!`HuBW_CX0^5+qg zo9PDQ4^r}La6pT+S@@myZ*#-07mhb*oAsjd-Sl6nk=pV`M71Ohj@ApQ2s`|q4_Kqw zY#xB%JUCu(hOSV*f9T(4)%zuBB8i9{G6=&(TD`=2Jp9V8pbq84i`2^*PHh!Y`YJ!? zi|{NMDFNqF;715z6Krv2KfOpl`tG9#CezOA8`v#j&s#v1R;$4Xtyd}VR)TH-dp^fA zU0$}Aj+n=Eh8!XoWx@a?2V+Rpl8w3l+iLF$$D>7paeI-@?@=jNhRU_P_HAMxoSgrr zN4~K(85kl=6&=@1nEC?*Gi!q*W#`CfrUHv>8{VJiIb!o$@gdC5TNlojd}OgjETC|8 zrRoD7ce`CaD!?toKc#$5LGXehZi?rLgMEdhsD{WH1;e+KbpNHD-3`|BYQh5>5}!pk zaJ?$gQ7X-n3gxu5TOvy#Vm|*1d)vh#V#Rav+Uol}v|6W++8f?RPvJDdA-q5=wKBCN zbmJKP7%dfB=5ibJ;)xvg+Fb$SJKdJ?TQ-hw;*bl@pXD|&nu*COB%7#Y-LMuSo z8-%v7P|WO#`teQkg35NvE5T2)9GvU)+5b-*&?H{%debDXg1q$1jm)g?{Otz)KCuak zUCL_z7t(V_C!WKoEpN?!Ms)|#o|Liz9M1w3IZ#1d$;xt22fg^4zY8pfHqooqgmuCQoU96Ljc%{ z>JB^A+%Gi!$4Yx=(Dg5V1^pbTR_RIdW6Q!(TjD-ed?c z??-mVKfI#KmMW%qx)x}J)@(ke2bRH|aSnokDg0>Z_TZ!nOvXvO=&x&ZU$a4%Wc&Ij zuK9wc%Y6V?&Ek7zF8ye5R?V64Ji*jd8UpOY`o?K-X@rGSg<8mgB<@zqz&eZxQHgq@ zRc)H>IhS_n8yciCLl^8}&buWD9l%Wl?54{d_Gg|@Tn?x3`y`cagI?xrf8MD6h-Y@v zQd;z6NJv;vNQLVE=S^J5-e7(N_^*SyMxOkNv`fyX4m67Q5F{OA+4qu>9d% zd8rnfJ?$#Hr%8r7hQe98oXv#Ceoep!jOMmF^^-?WKT4aS=jN7U<{^xE=tu`B1 z+C18V*OI@gd@XS0=zK7@`gvDhp&xEh6mnPjp@RygkUMo}PuL1pFq^1HZst44Vn*xN~uwA1(xu)N6xab{Ay>fP};^Ez-v=!||bi-&2wZC!u;U~4KFZVS$P5gT?&#Wk*3(z1B z!Lhe+x68wrOt+LICFEL#9)l4IC2+cue+wG@Gt2QV4PO--XogVxJ?^nN+l(qw%j0PK z2K7%hcxxC!Sm|b-kN*hVy)qKPneQcSc&Bo z?|1L92rHlYs~^V)F2Hp4+ifInZy%Gadw5Uc0ROrc5Bd$16Re3C#B_4)gc<|ulN7YZ zcGbd9@r#Q*Az(S*W$pb#0DG;R;bvU*ums*j{xt-Wv5lygx0zIME9XZ5i#uopY$?I}Za{h_T#gF+VU$GAgV2YAVfI-@K> zAhDDq?=H^vJiLtf)Y|G#0R7Ob@2;~LM;d@%j?e|$FDL#d?9a~)s)4!L6Fj{^WK&yh zIQAIY{NiVm86E(r`ad}cDz!?y0P=D(;6$RUplD`%5gPb%9kbeVun>N<`TXDb?k}tb zh5jMmv&4B$6_Pz38ppdA-uJ7?wk&!CbK;~ymCE0^Bm*UfcH&bSI2r(RyGYu8oOf|v zPiAK5G%P2UJYEAX6jn`AbXzM*xzm{`g^77WdLtv2YH3pa0+E$q6TyIK=AzP%SlEvEzUAR2S`cps)4%G`bXO7({osto&|M)Ta%--!;Gc=hw+GB z&b4oNFHi*Oec@Pl+}VItADsMt#4F?+8i($U#93nN+5zkn1jkq8hz9_ZgV9%Z=6<#+ z5yqSN4o95iGMHEQwk^P^mTW)@k%~*cZRm+5!vXqER`cfw!k+`;fu0a&Bf%fVfUk+8 zfI|G`ar+VS6k9HBVH2z=e1-HK)gcWaWNZf0iu#*tt+ZL9Y z%wJmlT~3*^z^UoWQ%H&v&_CIEn)wis1r#nHG6SCGg)Zm2r1s+MKj0Wqiun#Is>^`b zse->M(;W^x!}M|u)*!Y*fb0>A<53hsa7a{1&DXHOsg0* z`V@IP&rN|Y*6!>e*Hnq_&$BXk?Fy^|)_LFX!m()a6Q?thKJNEXdcrPmUL`Q7PSI-J z&zjsAJ94>T>w>)#t#f*dO~COLv!Z?jrA&^RNAXGAwTxa(F{!p{!W>gwXn!XM`^c;E zXP-*Kf{4Uj<~{i6J9in&z)H*ZFEIGChr)sSz4hg-2@d>TK6UdQ<|H%zs6T9ltw7h` zvA>{9g$hcXupALuqg>fp8!0Pn!9H$!66H{d=_b`z_*%sI4Y;rDOiae^2ni>EGwz`0 zKRe(@3Nz&jAhh1P9raDR4@E@*2R(%)u&!;90ny*TTjpa=v&5#RFwX({{49q3Aq!t7 zy#;TS>Lf0x&4c92n4<+^x!i0>a;(xdaQI#41y2=pW&Rn$UpsvuVd10kh`YxI05Gt< z>Fj`A-;#__?%bQ5TmD#35Vqib=|lw3tZMWugMOLqwb9Z)o@rN5yjd^x9YCd^Qh8i^ zg!gGKRp>Sp9&ni=!P$UiZz)U$_4f))1BWBGYHZYL-q)UBJ6l-@uh920#>W5;jraMk5lWe9SHZ~N3J{A2XRk~~ z>q?D{=7xR6y!>MN#5nT{Is8?Bn@C${rV9CS1OopyNvYur&|uimpte$NG|k>cIoba4 zO5jDwnj^wnY}4Rk!0GMNhX6Zd`fJtjgOHj7ZfXIqKu~#s37xo68+f^S1{IKi>z*Ki z!E^aQ?ao_a;axq(?o-4C7=3)A0OZ%5l!I{_wWIxJ3C%M1nKQ@FPR$MenY#h@Mwd^2 zV^$n`Zn4p2MqI}A++?6B4{t;y!A~gn`PcnFN7bI$>iWkCD%pKO1nkEpTf2pNu_OW)*wcLD`AmZxsVb*^uAQ ze(vcUrnv941_+)To>hZ0|3-LTp9LI_a$&DTI)~NN$=)NcKw1p8h563Z-s-d1H#?Bc zSxiwVX9bYq_m!Q?EtPSQv$K8QQ_-#IFJHe(%G`qKR3Vj&E#X%dDwb*41W2ifl2_+; z!UH1Mi56&Q;-6c^O&vdbg~-Xj9+ahy6prTOC1vJ=G@ z=C1hi(Atez1}J$_eG?Zr69X?r&ZL`9h6)WTWw8h!HY=p8X6jR1!w$aB?i*D&fY*itwddB?uL-A+ZUQ`%N{p7@n-oVON>V1q z?9-l8UNm4QQ*9NKllM~^P;UHukwXB$ruM1b=0X)nx5@RhUt;~TNw8eoU14_En|{v< zs7PE3*zK3~1_4qT{?CU_W=r#fw5f6?JFDW6O9Of>G62wCDeygR~2{Q*$7uH(k} zbaqn$!5tNpz9n3%t!ZXz=eE1)cY%5#1S!~m+(Jm=76Eif34f|ODpV9 z@FVS|C#FNP)1b=ZS6cG#FLG$Ed30G&3;8c60Nb)z;Ec$a>&AVcT`{ZMo%6#jKM)G^hM;+-0LIZ|jeMA&kylbHOwi~ul zt*=F7f%MbG-o_XrqK$ksnpFs0nxC= zaG#6`wNQR(16lzq(+oLOvuZo)A(3~UrG5Uz5UIG*(N@LtknwmjD+(7H3sxB`TVEx+ zNuLh_GKWGJc1RPd)-~)lBRED;BXrr_)YNvY`(}0;#4~e2v!PyKr1^~-v{^ zX-rS#*C;Qz>6;|z8TS6YS%r{-H6lsL=<17Q6A1@oMG+WlRgnF*-3^CDAG zTNL@bGu z!T0G`_)(1W!qf$~@7U83ms9!fK=zlk-j5bM_(peKKGYfhuq@fCq^ZfLH@flDWwP~G zkFmcME*58Rk%J}%xlbtXo?#qBd+n~@a78CwMI%2GG9CBh6Pi{htFL^u+t8Q+)$2L)-&A`zzIhTO9DsjBxdPAIkir}3%AA~zeX6ob1=mQyB>l`3bI$?h zPItU3?w|Yc%ua^bQ1IC2QB_<6)t9pO7jhzVDlvA2T9R6m+KnU_entkHrpZ=O4a-H7 zPyj-#2d>gMp6jN22s5!=`D`$s1(5D=8*N_$8EFuZQsi9X?)jyGz7A+)N?3Yw(`>V; zK2JnOFRd6+)H}qWcaG90Jay>VaOIp$B((*`iK&j?HFiA72I#tUviOU<_k110o#9^o43NAJmDM%^5z9yYa(-;sm3#|G}h%r z#vQ_NF=rglJWIAx^#y%*0OxOtxdXnqCUZOtnq2p&qJt@Xwsn6-hT*K`@wZQ}KCayo zj!GPV!PIP`Wo@z$X4#I^(Mp<)io1wvK8=jb-kj&ZnC!`qxgquL>f@KI&7qG9|M+-S z8lsvpkpxOgs;plKDzk1r3H^OdJY|2z<|h5)W{hd|=|yD^{fC!CH(A?ID^yXb2n+M= zI6wEEnJFDaxYt8B7=xed$X6AJtJ;r`lzhMQw@x8OHcg*(heoJ0rco?SglH%aUP~~% zwik7O444k`>Unq>h z@qrwtzpKYZEu5Uy^5OjB&yIm>KMU5)ioCq~R0uoavA}C_P(UlzqN1O%O^Keq8sr)v z;m7W$vzDyZI+e-o2T8&B=)ogir!~sMZgD{iL%dEV^Yy6>QB}16;KmwX{&-!*(c2YK-zJf}Ct>F&iuzZ+e`C6k zQnp4Mh?SwfwHE%V6zcKy9UmGF-Ne3*$LeDZ&C@YD7w`>9mh#QM6mVu66^Vu^mYiOo z)w1!Vg?-F=Nakd=#Ebdav$0MKkFhuL69r@9OV*48YcjG@=BIT8Itx7OVXggG_c%Wa z_m24Ue)gv+*HjH|m7j$bB|QIl*IT~W)2{Vmu0OCGO6n2LgF#|`*YeEvdhpl{cx#n? z*7x5xhD6+1_Eu9)-EiZ#>(%z9VSAPPMpXs;(w5h!tVB2o?XmIIIM^)v;C1^a9tdG1al57t*HPF5$cs}W(X(O#|jgE!b) zP8-{O#0r=`D=0Z@M@~ovt;1HzztY1_pvM^j))nKFqqSv3Dpd!QX#^9sVtRfJ66>WS zX;Q&1DGWqmL&wX0>TpSZlLV_Tr>U`$n z8C}%o)N65Go9vNOh?=_mhhsbvmhsMR=;RxC9OOu^N>E$*+&@9P-oJvg`nIcf=2H>p zjbyjb<{B4yy%o;29T$@~Tt>y!AJ>*v+~HrV@K?nK9U1Wx4EnN-bs(8a1%s2SE9Ya- z70|QL=gs84Wt)3n!Ju3yI3xc@xbXDFFOTJ{@`RT+1!Ucw41t@r{y1dvla67 zaDTh8?t<*SH(@(3(TQU!=4E4fwNcToNBFOUe-}mclt1V`%Af8@JI43zlO~pCqSvlEjqVX`X#+{|Df37qYq+RtSw@o+ZfApWTTUEE%ovf=(h6GU z*>$Z=DJ#ur#QGkedRieSL>l(C2Vw3m)RSPx$Xo16|>Hv7V^Nj>Xl$9i`*+vd+NUn z_AQHK2Dh!*0`@Xo7^F68eyKO=yRDe;7uUP3=GE&NL>`a6h8?MV(RHa@OZ?H|uZ=iV28hJ*zB3_w6=z&d6U z3;==hf0AsYI$?(@}!RDiE&(-p1T zB&@Qg6KYj-As39L^LWdorgNpn0ZwL(Y$&>1IiwzuW8kmaViEf)tO|cgvP9GXN^roH zMDHimnd~VrpUmPqoSY6@TEcXG=oJ%E6DoKRoS||TgIX>(lggU(V6xi$Bp#D1Gf?b_ ztZ;B4cNlq=*fO0(gzYVxq+$x|%{3d+4YKD_vZd zkU^uKE>vg|kJKxkconr213#)^cpjINe?c7wOk1D z$X{!~gRYJCNf!6jcfgPyqstyof}L3}wg~2 zzg@SpB4ct<0b2Qbr^-Aiq+P>Wz_}~>tIAljiVM$e0!7v5CHdi4uOgbJCE4bkp`eDH zQno#?4oSJ!Wsb@52oTT(^3~ESTW(!Nb`YllnW{=fZvv ziDv${dK1AVAn7;n?y@$EZCX$JbUZrPA}azJfPiL5zTQh5e|`5yK1{2EWdQZ`EPO3`r^TBaYZQMsM5ka-?mSjg@6LT7*>QCv z#1J9RbBIyLRIR_I6Ln|2L!ZCYZC_nt^)-{G{y^4mf9qqQvCnznT7#t{`N0}lkqGuK ze0l41tkokf<=ROhmJ~I5q)(@YJ;~s#woa{p2@!LzMU7E9_ms8f3-9AMm}ZXMEWhT%wmT7C3xXnEgZ1mkM#$9E zodeXEcFg|zDVH@hT87ZTwfoq7?6Ed8T-{juU<)g6+IX0^K0Uayo)^siy9|D3D9FMs zI@PEf22%vCq9?jK zL{{LhqA}>G}ljjYvg94dCO93)Kq`!)cGc|3Du_3uVpd}BqRkq zpE0kg(FYqI-wNM=DKJYX4Z%{j>6kLot{0U!_o-C}RZz{g^e8zoR%Ee~Rku>ch8J24 zvfYW_+4)2h-K#k{ToR>(KWaJ#=ld0cklTE*=Y)B3efLD1p@@mhxS|ra?XvxTVY$r4 zVcBe9<%46v1j-qU@6HNMhhc0~Q{u3Wt32nacn}dmsb^O8>(h`R`l8WoTd3}|ML|RV zv*1&Y>c-&IP2R=^H`{#DRxy^IqG zLU{-;@g%cB-(|(SLR0s0qqb{p>Q(v=ABRx+dRx;nlS0&S1>=%b)=K8El;{l2|3le- zKsA-EZ@@UCqmBi*qk@W*I|?EoBGS8xhyekmgbo7ILX#4ZK)^DBfPjQ1z1I*>I)o5M zr1ug+3y}_i1nGnlzMWfsf4$>>t?$cPf#l?refD|xTb}pX?`~@o>ghDx=&%3t)c&`{ z6E2b3(r3b!YhBZ!#bos4>7-CijSAo9fbd;+2u3-}FfVt@@ZZ{&MM^?n$3>@|zAYQ= z=8sgYu+mI!0{uP0h8W%xae#1v;V+P5hjt3Kb1I>y?Q+F&-l8iaq9s30~sZ|f+r}{@H94GUPZ396S>yxd) zL0Wy?643UEr}>6+zrjOKV2ot4XjDNR&I`r{k^4jyB5WvMrDM~YX{K^hj)NX~sO=gh zN9$icM`@;0!^+~s#p|?}z%8zQdmx?tY?Y%&mR5(+4al3R&;j6;EHLv6g zb*k-UFJiSPBKr65qL>jov%uib&2I)NPfXHfH!mk0VQm2S^y-lZpV|9q1dh5miB)0 zb14KhrX~%-tY|!F9jwxegHe{?t6Lj=74e&cUw@&-rkLidTO?#BtjT!d+6HD227?$I zi4>`H+!LR9&^q`**fBw9j{WRH2ZK6*^ZfI~3C;B{--HrD;7i|o8H;`L@xF{D2|qFf zVitnIRzNX$>=mKE^?{(%z(&PQE4BXKsP`2DP@)9J29l&YwNCBUv^6?q{>;vv>8#Bo z3u?Cq#qBN)Pds@tquKWehp+kkHG^;dRmrT71ojpfog9M$mfl!ZJ^PaWPa^7&LcFJ5 zblV!JQEUp4>f%ZBSF#-S7Hk`Bmy;sz^x>{H6L?4*?epHQ6+eTNTt05Ry^x-5nn`CzzT@=P5#=~6&V zmRavx?B8_4fDw0e!zs)27+fE?-t1iQmJc&0Pn(9P&2{0d%ArMJkASYau8c(kd(ayS z7f%#-iyr5b(J}SDlCSp6hUq=X`Mx&!c>NwKCN9-9?^*SnSzd1Ut`suPZztUHELKG| zZzH5nNXeuS7${Cra!#`a=Dzo~(*)<*$~r!!72R)F5>KM-*%Sq`Z7cfy70%}fwCn3% z>6FZ}+I-04%c4e=dgsRUJrA|??A8wiiMp?@Z1#Zj3Fo_CE<0fiLu_pMArRWJbAd@^ zw_UUYjh6%IRs2Hq=YIC;UZLDXiI1FBC*s$UV{_;8o_kZQb8k;?95s%BqyvK7rOn>Kr&_EqMnQ*H`as5e{Ci(k%<` zzl~0Y)XbRwGRXa{*-w4fSOe83jEhwI_Bpb2bg6drC9i?-V6Lsc8QOSFy5K|pU6Q=C z9^L}OPYCELXg7l<)vVlo#83bQLS6#Vy&HS5w=Z0KMBnw5GJVUypwgWwjg4Od4Rm!2 zy)j9YM9rO+{)WOFr$Xp0m6+`(_Oau&U4aV~dy2@bGlaOLU#0tI=HSFmRc!*(uzpa# zKDgJabKe7c5X;1xSaC&>uDl+FG;T!VIG=Y#z}~bsL@MxJ2^(JImw#)~h}4{!=W{%M zQxfK-Yam8zYZF#{QXw74Cnm+Z8Jlf#(6{?^7dVN$-U=?4Um56ID?HIeefXzJjbAlk zs5D!CrWuu-=y#Xuc%a!fszvZhZO6CBCi-Pv-!d9)dF+d*B^tfX^iK+|jc=Qpwa8CO zEZ&;1n6kPZuCEaHs7&cG!jzCQ1p2NE7VQGL5bWe|#f_D`S zle$CT%wS6j=E=jpHJrX@fhqCRmah#|AJ{~$-+#;Fj-z20ypXF@|1tyryAC!u`WOd= zSQcCVe!GN*qy=Y<>mczF7i$w|gH+AeM!JNg_OUfCPrg}IF~d_%u#o3a8?xA2QAIPh zTlAPkx6KMR%tl-$b)GV{zxAv$@ZwxuHUI_|W`moZX0F)3{tCocl7Tbjm|wvc6G-@#R}@^_^{H5P`-L)eV~&%ca`m%jFP(N2@~Y;e?Q|-Q3YF-c=)4! zv0uv8PR8O&0s-;f8hLtYyQ*Yj#%W=SR;xL|D1hWG*B!jP)to8{vbabUN_(X41&AK3$BLJZ14Yh~tl@9@8SNWIB~>=O8|At6{57)Kibc1UU|Dh$3z*pE#z%$~J+apK$B;P|#A za;NiKf~`E*$xh8VR;_iu$MDxU@bxjq6U|2-UJT)3Dy-u zDD*G)&{Hfd164$oWH3wN5G$^{B=P8OE5*)XvH0$O*^}UL#?`{A6n=kOH693;X|Nbv|Eok~F95nFzS2|n%-j9dgI&4!d|NSoD z^Fx`SCq92a)M5AJ4?EsEth&ng!xk3Sw|~f)@%-n({r9K*!wrQ0bm@OLJ+J+P&i>yo z|N8&@Xwb9@%YkFJ%Ci@#f#1M${Na#+5CS;IbF|{Y*CU9PjIfS0GS^z($*doCf_1;U zRvhsQO9b}tnF9;|`AfnqhrYW=`d>HrgV8oD&!;G#zTiFhfBZ4yh8YhF3%5?N#-51! zp?`jN91GVW)B($${XopNVZ^VuzW*h8{#5HER?${+o4>%(I~jiA26-$dwC@cjQuf~vLbQu+Ro zAC6D|L;PCM1n8U}UblG8a~l7o?F|!G;Xk=l!%rK4CDDFzUeMZ~oB>?ydm#Xg$v>G@ zUOqq&|Djzh&*g7iJNh3z^MAj9&TqK$Hz5zPs_Nf7_kTMvKRgfm@~)972|v8R&7vB9 zav`Rq{qV}asG3O?`(YCcYlxN6RmT5}R#odEs?}`wz|h>q&;Qfq5f)nXC(Vg}1TUUB`0+His257B<$wKg1Sc zvWmZ^fAE7IdLGoay3S@8{8ZPyZgiaR$3V-6^R7&7@xyE2#l%05|28)Nw;c#U@J|Jf zv*Bj~7xph5^nXV)KY+77jj8>~__6}?s{TIeNUlH8zC}Te??|@~eO-YX8D;b3b;wSy zjgMQv&JlEx2=BN?Yq?Bhkx>~WsdDKZe~QnbBdk|(=}o0xG(F5vSpG_7+fDL4XFww*w(C(tErs{5{ZO75R8W4yPy^p^@sM5aKg+SpNARZUR*%ZN)>;B zU;HLz6zzm-{9v99r)NZ%loUAqI=Rdsm=ldsOtL*It`4N)+!5%?b=i@9XGE`@2&ljkt95mDbgl&4EB z-^3hvd^~7-KZ@IK`JIt!rG2ee0ZO-wpHlva4ilEE@EOoOVQC zVCJ^@Y1ujTz_+{T^tJI|`Q=+87!n@v~dllXFBAp48T9@@Uk!O3ZmRAa7h zX69n&=fXqXiLD3^Ez)(Njs11lYn0UxHuNTvqfE@gEl^UMuZ~{CzcAcPQ=Il*0x9NF zJk=X}DvQxXAiQuN^j2XDo_b>f7NO+a$9jd+@HX?eyD{W)^CPd-Dn=sE-Tz58{;M}D zY*j4eL^o?$)1>U9D%F<>@7lW+q*qvO)LEP{Ux4&mXxsRlU_4N*F$mC)4=h ziz5cO-F0^>{far7Yb=3s1p@1rzq3X1P2u&UiLTL$mbfM8VsZjnS{bP}9P~z)g$_uRP!=%CAQQ5eUyBm!% zDw-(&i}ZQAAWb=QYISvWpg(e~_*fc3)qN#IL*s#ggVBdnUTKX4FN|i{*^OC2u<( z967p;cF~{yoyYI??F@jT`1{wzq7sXe z7yRIh&JXU+B4e^}?~Dw3y_=p>2LT zeJ9_1G42>g3%FnH3kk+BuD-ibzfZvB>!+yQ*vn_fTC~I$1Sp)ej5jPkE}GW|cTY-4 zT4`1C3k?vprixkn9WixJ$~40=PqK}4vEugDzg!3>D1TAqb>$S8i=$L^)*xJ=g?8j& zvw+ktPp@Vn23Jp?De~U3K^Y5LdEZhmg=;~8&qsCfOsM2ix1{J$N}yTy3$!tHGg@J# zyT8n8b0s1qM1~J*N;*3tX@n|wnd8MNPTI%`+g2)Yv*qO2Quf8kl*tr7uifwig=ud+ zU5WJ;Pq$X6Zm-xV6h^GC{#EH6?ZGf{Y%V?zK@q6)g?K5} za^S?YGpzp7(ALrm2*}_sNdItOtd8+Q!#M}WeLnqL?q4Gp)6$t^cJf;Rvmj0#!mAbx&XIF1tGTS|aDo5JCO-0a^kgHuMPry#+50sx$+ACT+kD<{*VT3y& ztwKz}id5c>vj|+Vf;$sUP%)_q0vBA5H6|yca+Ajt0X@OytC z{=yEenY`YdcJj$bqXB7QT_Ee5O*Gq`B7+N{D>YDi z`~Dog{14q%j+<1%aMI4h#ofx!48|=|OGh;}KAmZZO^FskCuOv}c?!(812qT($4!4{ zxVU}5T2ei8Q-UJQ9+^DdF{AY=(P8_8ddFv(e*11BAU3+rS{RW?gcd9;pw*8rFv}J_ zXlU#`lQTEpvTST4g8gP*@D`?atI&{RVv_L7>F3-Ed`}-ru3oJ+q z1{ar$=aGmFjJUAyb?JEe_OpdoGHGbfsMIR*frhyI$_W^EKCnEHF1A;ZV}8-fy9iVb zyAL{PJb((3C|FuNt|tZD4o?N(9U$g51UUxyA4<$!ANUgz=+N_g+@#JcTyA!D@j7uV zFz%|j5W&oQ3uCyrS9UB>B@ig8VBFDQ1w){bH#$U?7X~jD59sLG73NnPUA72#aB$r; zE5VZ!Do0x^sjb%7Xl#JX7A^RXQoVtW(_z}=HDAyY-ukU8W#@^OYw?sYw}4_)mFEiG z{(X%+=(qKe(KKNNL1NueLo<&`*ScBVVdosgLO6ScpN?}ZmE8|`EtH{qkk$gkCV@RB z-Y}|;^ZeJmt$T`kE*>)>U)Kl6SG}w9ebz#WIwiBIJG9yxwj6PkNKs#ty~o)jM-BOt z+2qn~za_Z%OHS-OH3m!5(;m7;sfr%LAf7!=_Xu5*$5m9x4UUo?wl_gv@6EoHQW}M8~%$@xBS?Nu$U#aRk{DPX3UcB{Bob#Xrn zt=Sj1)GpexiOx>{bPG~=^JBbel@%I{$rJ3Xz32Gq3yBu~_sRb9cSKDk^?=Pl6J6u@ zkC~B$CUcrJyD#@QT*X_SSD~sVWgXP$N}T{=FteIC5pv9!74dK zOMjq`99o4Ty8d@cbGuW;fNgDhi-2T}KQjR00S9azP<0q zxCvA`>k@G--TO00G}$!o^FwNvUP?&Oq9>SAxY4Lyf_8jp1Iz;jNT>irkMSP8lx#-d zrBlKpEr@=XQ+o~h*oizcta6iU-$m}9RyZ%F&Ht1Bymrpti^9dDOlQ`{R9 zMB(c~y{~-8={oo7^AF4s#j9&4rMA)p)V;>&^w*`s8d7^X>g(Hwt6CW*SyaObM9=+IvMS#eC7}VSi0&{0spp%&{7@*AN)709*C@$*aQM_ey50{94IJWwlhnFXNz>ar+s8i%^W=@sH-BnHZ3{xy z&SCPseMj@}E3M6^pt9d1cROV+2C7)H`ppJFbeDNkV&g3z+gTsbx2#D%%{{LwW22Mu z=Fi)2KJ8DxQoFV3BmhZKDDT}g_ltQSQwW5b>9zmfc?Z7m`jr4AfDj{y5z!HgR8=Md zx#JfSmow*}Z5r(AJ!6T^L*R?^VWFnH$h2Do0*E~7#a#N>o&=K~kudgt-sRDpFd zEc=k#um|tjly0R z>%#gkNJ${ti4x0}=I$%QsBGgvxsqLu_+;e6*!u8M??T{30NYZVqkGXB1n~$;ufj%0 zdsev@U0&%Kal_<8OF~TmQPeO&03ooDxu#8A!k=>ryyL;s&H0@{Z6>SDrML#;?+)PQu#PTKITtY*#nFv$C|S_{U*h=~Qi>4k}m>pY{B z-PZotxF{jWj_(M!6e}z6dcwV))sF7y1D z0WYmY`Th%wAJjY9QpFT~Bb6C@$87Cwofvo#gNH`h_I%j(rTOi)HTLFws*(J=jFY8d5GQ5tU3A- zG`cW78&*H8v*^(Q^OLBYrBG-Al=G7r#a0{~2fT@KnR}P8sfkgUi+=QkcCzWajDb2` z^MQ|10kr_>yHi-1Q(WX_kk>D|)FY=MnAJeu5R?V0;`t&F zZPp*(6TXFph8dWdjeSKO0LRo;{F=uQk3nHAGZd*gxJEcKcWR(`J~X5h7+!-x6^x}0 zh+ge1H)0Rk$ba$+$%&fFkax{0rmUyV5VD+tVdQ5K`W~>_?9jXTHj_$+T$=faQ^PDz z;*AA%t@rD}0B9m$JpIg(jr0@FOC{N*A=f{Vt2C?=`70cFb9a~Pv{5ndVlF{e*Icqc zH8BjDj4`gE&b+zv?~Tg#pPHLL?fN9FLVnhngIL3Lw~t&2{3q~)OzukdC%oFBeD*vF zDRh`nTp$i7nr;4(X+}q4-7Nh(TLV$W)!WzXSIL%L)A;OZeSs@E!dI_86ip1~iPyqCBo(A7{_pjCkvq3Cwh;r1uUqBB z%~+j47RLgcA8IAZ>2%|E>QAF|L8$j^2s!YjzadLQ`!%7V z5I_Xe3y-2s&Cq5ayaQooTYI}9!0w9ii@>-Jr5txq5T1Eo9s;vczApAzKNaX)TIw-D zCmtHtfLC!_^g-A8XQ9U2AgcYSO&v9FH+1Patiu)`85u8M8P;cDm>l?!w>5*C<_}^c z;B=tXjeWX2UL9Q@O#cNZ0CC@qo~F(?UI7yhfD#?|r;9`SfTOO78b5ea#~l~C*-(i( zEs&SJSaf?|(q_teKz08tW-*f1=JU2UfP0H<~ESgP&yTbl<}ZrCqn{Pd^=2O6kG40X8HIw2_ zQy(D-5%sWmOz)(v)B2ZJRfUdkJSWQs-{rWJ$=S%frHmS5u?l|3_$p=Pvsl~?@$SrV zGgPg&YhJgCzn15LaUoNjq+Rh6H8-w6nO=dq8}6T`!xwEHK7P(chgz!j_V0d+hR*B< zzdkA=E@W^#L}^&TX_rXipOs<&VK!qtP1H>q+i zjz!Bj4i|0&j~6$-!xFU4r6NaecdJ45PUTlu-`!GTB%TNhg=;Jq%Tos|VC3AKpz!VL zpm|Dg<75Z=w-cv&9P>66=jod+Ca~S&_m{^RRwcJZyAArk7E(>q5Zm63%Q}5Psh4{< zNMnrgYEFZ0z36V0d|)1UrBf5Te0*1O53jico}I_Z)tS*2^$6YIYlP{n>FL?l_I^EA zTR9>7Q;KTJ$EK&BA$;3LM>W&xWF7z%tqrkN(e!sxLNqT`ap~JJeP3fQg61ta()nV-^tiChDso=F-@QX0krCgw( zx=r5Ddxaq4+0PF-=lyiHX{r5#qdly#`dpW5rp#QW!F09I*hr}DR28%;0I`F&}Y*odqV{utZV+^i{jnLR*NQybD> zUwya2sb4pe6d1-YByrg^tLZIqGeta6);9MZZl#=GNJPRE#2i5t)}^G%%O*DUiTO;Q zhcTK$jVSY61=y^$U2=Tb=(1u{OUvwR>1uXWTbl?gZ_CaT z_=T#3HRh4V*Er4fp|;;{{odKY5AoaNHDkRAS_~8rAdvzsC3L`|0?-{;dxQfMK5QFG z!P>xh`2J6Uv#@LkT;xI?U317Qbs5|dK+si>^55}$v@jEh529$x1;qGGOF=)qW^}E~>>o)u{i?C2 zIW_)35)&oiaa|V_zvfp4Ry#c$^_-c7MqMlo==WwCPhRYSoq6DfKrMr!S#I5V1-CmP z3ok^*XSDEm%j3hRxl z9m4G+N3kOAMlsh={z@rC>aNuAj<-SOIQH7z+sdw7?vFn3UKlXaLZUfy+ODA`hc5M) z2afY(xLWbrO{V!6zsA>D2Xpyps@BrmR$Tp9x1XdHQzrz`NoopdE|@xN>|WcZ0^$*2 zNZUJzWPyyW4$Ade9;fu@Mfzqf4}DZc8qM7_-<4pXo4 zhq21RW*%^Z07k97zc7iSgvN|gKsbmF>OoQXlbwA>NSj*KMxdC0E4QtZ#GET99%4xy{c-0Vi=d-xvU>Q0&eA?78Hm(Jmxs?#|PU-^vuXrY+)z;N26`$e_69e}3 zJ_;ygsc!=osBFuCG}D|MPrG}Ssex1^ShS73V#KhXQGMjQA-AZVGrSTODHc|mE@5271f+2x0^Ty{lei`CPIi_)*kY0_QE7xePZe`iuu znk2j4nq5Zi1Vxh{(lEYfw8nX@ztmuHV>)bE-*IsfLwV~e}jQxG(MLudc$<1}EAf8MBOQ%-MlVcGx7@f0tl}AVfTyDO)4L=7!i&vG- zWDJn!c{=eP$Tc+zT$K^S^LATr6xU8F0$dU{bdk>yL`sQrJ{ih8&M$#v5bBIKQh1!u z(!})2ISmi!FK>s>mB^?gGYp($96^=}*p(Xo05CM%F8L;gD#_l}{hFSVnv%d(yf39O6e>loEf0>U@EPNl9 zncJD1$AOlCP0yE<0|fw*Cu+RBw2?~B$Z^DhrVFXkbWz&1f3P$(4p@VjG{bzAx$AwA zD&0L1B)^Jh!(2J`bA^vCr%lCe8`7H6PH&JX&ckf;$u%MscMXy8>9&4oC{eRrEVc@( zR-YQ=>>XThmYTE0`Q$#Tm>X~DZY<3)%6($Pv!7O8NRlUSD`>UWu)J7M%OrvNuZb*W{0qk1%xZ_OsYfrrY-HAR!hpzMZ_B9#SNt|cdtSs z$9zEd>i9in!;|qvy1E*L@)d4b03~O3J8GaRQbLGI8!aYa`6Bvb96ih3+u1;( z#i4Tt0|rnmaBftu!|M}NJjhxIMg@EMH?qM94^GD%TS-h+avymFjo3^zExsB34~23k z46tttGgVFbfoZNx4698l35M(-)q3@eu$nS)Z>bM~V)Wfz*y1K>B<3vUR0vD}p@i46O-Z5K za&cQn#~^5t6VLZq&JAjYpKDCxhk3HC)5hGG+Kwmf5~Qm*n4RP~bvpz`!j_ky&ioE+ zpkb=tEfg~^mJeuq zIKah;L7fU6UGJFKODfVGKxf+RP~ObOr&4P1V2MUcn)my<^ssIP)e8y3iGV6liBz;e zl{I|5yfr>;R^^;@k2Sqp0|1SV znSGsw3{SSGNL}U#mNK+R?(prok2{cd}PME5EO{(uY>Zv8?;^suGVK@kf+z=BO+_Ch|E8YIH;kFR+E6;KmnJ-Cn8KG0;oQPWdXIdgn?bkh{tjjrZR+R@8&-4}Xfen)9w zXjDrgO_^j06vzBLf^XQptsXoS$iFqzDmDaV#>k}g&Hj^!xkdIqm> zrKW;jC_92d^<6;tS=9O~vd)~7^Nb2GOUmLS&gL6GHwagJ3nT7|eVCp-CkJ!33wSG# zGbb#Z3F$oS<%3 zkFDlHEbi{oVE{X-oyz?Kl?}X+M951TR0aU@1Aj!$ zB*c^Z0WHEH4mg8Hws#AS9rRdnJD1?Jp4_%IkbAB>aUxWbp0p(ZX@_EnL+&a(UJnlM zZuJ4Vcw%>>#0d9@FL3462@!*ylOQaK2B~up4(j$*J2GVcc zaO8udU+mP$Q{Vda*vZ8JBiBSNRq7(Q8`({2ty6{tEj;RvE75ygf)%S!Uj3wQX7(q# z32$F-Tryg%b@?9hIxq8K<|-zTtMe&o?yxnVS-&0tF*f-m40Nh6%=Up}#o^H&Cu%JBzai%7w`@eC)uL zVCLPm8^d6_W@frmQu*yQsAQsmkf;{WdUsS`PESl&(~6TRvQBo~#d7L>1Cy~9xA*dNFv+#VcUoMZ3{WD8 zUp~~GevB;Wp2qLI1MoA*EpeP4Gn&YNr>(E8odlWuycW)h)h$nwmXR^cBnWiNKz>vt z$PaaN%pV3q>lk>aH1V|zMq0Jr4DgCJ8wG_g)fIqLKRceh{s4qx`D+(nO((xUb6Qs) z+(FOR^oDvN5cKN0hiCyTdxqwUS*wq@2lXyS>Gcf=m(s1a%yq5xI_jTEl}yxq=VU$2 z%un7U=EDC(H~bQTol4o;YCTA7Yv{~09$j5u%#AJ~xvJi0C=`q^pipv1px`AH@;%CU z&TP`sL(m#Rg(nvAc7FcIF)8J%5_tK5`tXiIMDP?yHEqTUAL6A3us8NM0M|vjgfMit zot01L7e@VwZzaB;-F>Q{1=-)xT0eyp=Wdp>P>8DdD@4WLnqxp5y6{Ac<$D_6r@)3` zK=Sz7zsoalkAp=U8q|XLo&fg=^85>+0Sg>8_#Z}~gV8BD?w`>0Zcls%$1%e?F3yHK zo8Jd`U>j?wRmS4~(knx)e1^>b&Q(S?K8=3$Bg>b?;RE+_r4Rf!*{=UT+*kemAGn4r z>3@7QIi>1RUB6@LWmbz;m4yj5{15q2+dr;u?{sj(-$}qH{=acyQ{wR7g|pzJB!AFP ziJq#QhQUAX$wK*jRaEq6yxXwbqn1DJ%XPZp!@K__k2C40KjHm8`B?oETI0{?=%);S zB)GD$P@3NTjcBfFeV#M);5(TIP3w90bDC=U-*~kDVkHufM#ZEqj(`L61v9k#&3_;T zZ?k`3GPi`=LixN%NSPBGheX=moe5H@gGjhyIf zzdQwg|N7R;oVLzRnfTX|jzy!cT$!mP1)j2fd2Tk~h!rr5tIYt`$>qNz6#CYoctu4! zmLEr7Jp!5&VmYmdGVysS^`q87gO{nkp1NwR#*P~6-%oSCA+J8ZCP zf1R@}1DQ|;(u;^8aYsGsmCo?jqa9ceyv?Vp>RD%o6P^d?->e3K@(S)M0HupYs{D2b3uXW+xrlJucA^j zd{nsdu&y=t>{Hw+;=>0Nc#>4WXZ^Lgw;kM4Y#q^}{GAC^`5LQa zfabJyv=x+gt<iXMj!y3+Qt?ddH83c4&NV;W! ztQm+C2@y=bgYx-Z4F5t+GYy)@=0cH*0J#s45N1yF9?g$KW!D_+p^rx&yyFk&V!XZc zGHC$89nn!|t56OmGp@}Y*E5{&v@dyTb@%&wJP;j>7Ff|i1thNqCv4lpt0bv z+eK-Y_=X9oD5e(f5O{312VR zl5Ns?Ul?xc-D3UG;dA`52CCFk80G9@3#qK&nS(K>emm_x^{qBF=g~;5RM z$t0%LfyqDDAv8-&aeOjFKIu18qzh5Z8N|DLWf=&azC0=)K~zr<1-8c z^y*s>T|m~YXE4q&DN-Q5mtu9z^gPPmQ}aqkqG}(IZd&X_2x@bw#hs(xj-5NA!q=}q z(r^Dw$&0MzAu%TDu^t~9KI&F10iL^gK<}`JPZcGeJa->ua!)!sSp7Nw!W;;HTT7+d zy4v-g+^xQ@xaFmlreq1c=59srcqSEZH`@DGz)&&4TA>kJ^Vc9IWdZG0%_YWQx!}%i z)0N{Oakla(nC(&Re$yX-&=@oA+*{|q##Z5aAp>|WiGXZfTI$J6sy6f0X(dT7_qa(M zKut_?6D5!LgcB`_Q%UmB;oycpko)^$;M`@Qp`nD2$QT-aF-Z7$D)8ZUHiIoIWW4c9 zY}k?V&;eGWMd2H}t}h)&4vGgX53WU3<>k57Gfp5kH*^3Svsa{BCA+UrcmD>Ry|GCE zbWbeEH-VOCCY4~#Xf%T}UqRw>0kvcBoNoQEUnv+~NQ#Tf+rsZ@ zwiCZx6_+vvl>m!BP1I|)x4%vV0k1j-wc7y!dCvj!Z@1=C3SvV|P)koOnM&)vZ zxM}g`(%?e6cWRYIV2<_zNegwBm-7-NG$MrHZrCl1*nVRX*Ud<23>k3B1r;} zk&hzxQ0oiTAqFG0uEQTqOX@d5ES^!6)tbK~wgZPd)5f~O-ZHrkSJyG;;ju=Ly>Tl` zWgjX+be3#h9^$Z}sd_-Q6?#zzV1BdjQs92sU7Vj6)ayafiIXW99}>n@_@edWh7>*G3-9-H zQ_kyo_fJpyi{o#YS)XXJI*j--?pni*a@Q&8@Er%USZWEmTnprKde(Ht^CGBOXUk-| z>a-ii&%5wyYM9h2^X{hjMgnAs!uS?IE{j|r-m2Z$;Z6zcN^h`yf94Z_q8t}O;Q$OWK)1|N zhQS&~Q!tHR_cxm@nUIYepy-9%s-QVZqXSa ziG_ZEa7+@u({HyY3JHag?lh1un4;ZhT9c$20j({$xyBh&>bW*OYj?HW@k0<>jS;D~ zykt!-NhvT4S{&KyXSruE2iN&k&mJSir?a=Nog(E`&cA>aYA@tJppGYHg5pLwU&=!V z$C7-mIIO;v;-c>ztal*i3aY>4dKT|K3^SxkH#6%vv8< zF`Blo>&fYYxoHQ=L?zy|2_NkC1(hRM%WevOC$-zl;u<>d2IJL5u3Q=SAImUbe3iPj zxv86$YCe!>e@^P8lQ3jwUe8`P9x!dptIV<{#FPs2OA8+_%DD6c>xg!400{Ei7kTrQ z7fVoi!4kLm0c##C+svi3s`gsa9ZCa4j)D0oG0JLKm-5w!{g76>Nz18Qfw;}jml5-+ z7j5ARA5Cp*jY%ECzCdn37K~W;y1jEwq0-IN)_;s~S7N0^Gq{pVe97J1bLKTFdu+^q zUlMK?y8;k*B`mxTjGUaN7YtPP=gdn-jvS#Bs4q*3umWcUbIobOY#5MrvVL#iHQbfP zFb#7J(5^2uG&MI?=E$J5L<@+(8&Z95v5&)F715x>8q^*Cz3f+&U{0yQV%+as1NbWI z&8DP~K#*}m*B?ysu+9_pP!f+M6$Go=YC%Ni)!b=Vpwk`tYknZCmrD+$2*gx&)0wQ# zHH&SlHm{WVl5U@SfjN#645)`j;)#=CX#^g zwg6Mw8T)N!c2*N5?L1x#_!ONCr>Od*?IghTGXSyZ{_$4CK2;p>A_izmyC6Dsc9oI8 z0yV8%?i(N42g=0&jP}*llQ5;?%8y8C*UW%4IUS*e3&NrmLiqHDew$4TRQCFwSr@Fn zVKl=iNA6^ma8W^E3Q_5I|CK3gh%T6Y&PpR&RPB|d@jFiPp}|aPw+KHtJ4(2$N+?h2S$p<6(Y9c<4WQLc- z%5sQ8_h9ksl7;5T<#+s|rdV}LZ7(P?C9$Rhq@=ftQT`#u{~HYmg^#{clnMCZvI~#ooue32UQMFxQ7DPNh5E5o88d~grWdfM&KirlJn@z^8 zjZuj8`RtV5-GTf^mn9rM7FH|dd(HqR97HB^6&_SfyP{ZTe%jbUJ2Tc##Rn zIvw~#nN&Cz+wh-gBGU|sjZA(DEG(;D0L2x@`s)%)l>9i{xeUoJT8`QaF zhxL|oox9GPW3MZe?Pr?sK4F~utJ(F)gG%|5MHnch;n28)LuHQ!%Uhy}7K6?HjJbp^ zqBkhN6p&PAfm$EH%`E`qJ^;#aA$MlsTr2A{%y(O>*g(t$Cw_?imRm{lvb-rZ>yFf3 zYkP-yy>ep!h^zcvxidA*pu7!#K~$t?Ktjdiu;TiylUgY_=*e8g z3=}DCK0Hq>9_!Z#su7Ih7haqb6#hfb)Q`ba+^1y21~dMCitW=&Wz1N#ImFz&NE$pe zSLKL^VV|BgCPRFonoj^?pX?nfU+!Y7Y-mB%LHXC=rU6#-`SYblL4Jebd%*kdXcoQn zxwBb12{Y)Pn`6LVEXD3-;^=2pF&>0Y7N0+h-0GJEd?P?%YcC4*?n*dZZnd^4Y_mlh zbyH@zuksypL3>`MB$b zDRl*rS?AQs`nQLV+}$y>$VvdbMvhiF*(yiq+=pT{wkRP_=!F}zQ-Zv;o&G#jQk5mX zGvC49uljBen0g>;UJvyldB9^`RMv*fLDdS7FmprRn7s(mHMy6|9CH0-nW9ejA5Ot+ z(A4UYrdcR7TwGLCPp5vn5&>T>n&ZW*r^w%Jm4%$ncXIkXz%e`J=sD;_%{7`ir(c)a ztYuc@SIn2M^s!*J)WZByM>7zEjnAs*5>-mblm6kG6kf;cYb%@iH)r!ygp2z@K^ymn z58RJ;-KFUSS>|2j<;nvZWutuwzGJ&7577lh(Gu4e%qe}!X5_cEYLWHw#>O?TxfHCT znzW4oe|vS0cPC&Sv+CkCU-LaG_VuoH#puO=$u#{6!g3qoVoc!FKR{AAsU4{Jpvf(T zXnGM;=EzZK`DjO1aefEzB>+i1ivP$C-C#I4SY1u+c2*I^(ERnU#}XoamO>xlmAg*7 z#AdQ<8!7fa^F6tnSES}(^DnbsH>XHA-AmWkWcGffR`2|h#ZbWHMFA%fEH z1MTg4_2K^f23pk^O_YlZLAvr7t@bwG+kI%|=_D}M228rR)0v2UXpx$V*Z~~#k4Sx7 zv-c%XN0Cd#F@(Mry5ZL;{5&?^g%q2AE0E6SGIq}Sv-^j zYP+q^w?}Ufbs{OCVC>>Z`;G(ffp+G|R8VOt$D682aPu5o%vxDP^Zx)gCASon8u14= z5Zt*dKCuL*^kI{r#l!g^qs<#QAxiS1&cOQk9|kfi9$u_kdN=)`g%YU24yKH?lPFAL z7Fhk`ZoIiyTwR@_)NV;*Y3zsqghzfL@QzLiEk(+zZy6N6!l!1})g8*owdEeL-o6WG z7#~LS3s<_0YS3u3W8sT^A2G%Tm=F0653oyS!&Gma1R^=pX0rf}{*CGKz8X|G4V)z1 zJG!9&&X$~8ZWR6~cgE!M<-`K>oKS@Eu$=sE$1kNOr1eFR(Hk5)vij{Q(b%55c4l?R z{mjO4snqKFde2;zB@r-=Gkj0RJC6D2@k1^o$ZdF>QhC5I2c+~e4XXFPNde3vX;74{ zEY3-)IOc0YLM-MJ%UrjyoIy9l{LF34v2s@BIM_wgZd!_DKu6L@9XuXPGRTtxG;EMs zc&(#4>HcKm*7(Jvjt}vbvz~sSwB5{Bo+j!Fqf)m-1)c!P zbuweU?f|3gjQFjnykLW6TTA-+a1_H7{_6&PNR0Ko>WP|`Apt46m zM%X0xP4B(WU#<80NFNK~wr@apT5w zPW(K79VN|fWDEHSf}&p-49zlgwF(wJu^Hm$ih84bQ}SCE6*cx21!xHMFCuR{Rvs4} z&1_%XFvONSwydCcbK6&^lk9}5r+Tp&eVV_11w`=6=l6Yv%m|7nxnii)B^D~J=!67( zS0jBURh(qu9Tt}%xtgaX3HKTRGEze%OH_7tHoS^gj{MHjeMyeSZ3T8TrVpjvsK^*_ zmd33GJMgM?T!>=Pwcg#P^|6m?U$j#4{p>)DP}nVR1f8`rQzf-EzZt)~e!I<8hQxW- zaS{Ef4a)AB*b#B^u4X51SALN!>IZrdhh%ExaWRWRphUdLyIpNf6iUH#f2Kj5V-$Nk zZLZhiQEZVBP#)Yt=;|SLHOKZ!%H&Fezfb>s&B4g66ETJ6cyG?iHd`@V;cJtRMNoH7 zHlWYW_N9eSzS}m&uF}>GR$r_7=9HHkO4xSbFD~5RyAPE%$T9wSF}nCqEAf2gV){5JPN*_!7$f0!r}6&oLk3YtG6b+9l8>rggG8)3%? z2vuE2(W`HWsrZB`a|9I@1>Q`IDWs(L@3q82Y~Ssp7x@s(98Jh{<5-(+W^Q$CCXVM3 z9h#UGg3ADh7-IG}qTy81h#o{E)lR?bjEB{J0ll`rL1|JK@)G01{yCRi^C$d}8DMPN zIa-jwy{j(N|2n65z}Dz|{rG$lq+?xqhBM14!*5@bu^j9gj^$1AG~KpB)4!-X_sm9p zoQ3~HMph{YF0wH%t5H>6=p<-g{M~r+w8Tz1i`GroOL#R^#KwjBPJ~&3ouD@Xuk2uS zTF7nG@dO)N+o7=!2FA*rw@)=v=9<<=3IJ&NlS;1C2V4EmDI>a!x}EzEUFx_9Z|$Vy ziaiSx5)$OS?-*?ZA1zOd=Em}-$6E!BWw!P;x(Fe#07{zWS}=VGAUX4Dd0~*}O48pp z>n@xhib+|7P58L2w*)=~#1i1^O^B2A?ScxJKDZaah!@Vr@(vFJBcLyQWfz2Ms+Rf@u^iTvy2^FJi87 zRyiA623<}%dRfSL&i_LgN%B)tiH2g4bP0H01*+Xs!3_c)`NEHj0ePem`s?~p!Kza# zgF4A2>R2!OOi~^%9fpwObY=dw78X#W@;lAfEIbiByNYYBWk25Z`!ssgH@PsBEo{ z7tI^U_~=r*c4TUIwYzGC*8I8|n-~^?SMmemP*Kutd5jr@3J)o5Z9pzw4pa7HK!fBK z&dIAyjuO%4_az4lM@fHhi&OV$rJG5Knbc=`3rt+2Wm^GMIi?XdBgrrQl(238TSNiI`gOY{k$bq z;Bbd{g>ddOHIfjITWQ>}uP!jkzkPcQl$D}lx?Sl*J~lLOF~!YKWKC^N9B&|PiE|l{ z0svbrF;3dJzX?HswNA~mhp`#V+70j#W1nk9$|qLBedZsEw=&&rOuJ_$domvajUG^7 zN^HPc6u$cb2{j=)i`#GVFrsIIJ*6;BRn!PpILnhuPvZhejXFZ!)E-L%jBh2DOX`ye z$bb6K<}SC}p_EBj3@m~zF|rc@HgELO%r=W(127@S*t*A`OnFUgHO%^MUZt9We=uIE z$Vc1D9Nl0}h`%k@e*{|^9c7&JW>RN-!esYU0?r^6;tr))4;ucJ;#*3Lkq{A~Wo#d1CDZjK6Bb=I z&OUI;$3Iu=fviy*hCfe%2dx(z+-Z~sy8v8FOxn)dW6`Fs zEafT>&e(HB`k#@JL4l#zk?o}W0B_!w_D>?h!uqgi1aL~p&nr7AzzD(dWLxW%6+hv? zn*{O>CkeM<7;L;>@^OESH9J<3z249>WY4P~@;6@$*uY`225g+Mr`rbed_e0x9gz@H zEh~RYjGG&mm%?SkcG-A^M$Ht{ z|H@bW@`o=FZ=VDMh5gkZjw289zGdr#Lr$^$H^}Ej>Svy>es#~`N4L&wf18!nT>PH) z4O91XbFsqwcL?%Z;=|tw{n2s_Dp6%2tfa6Mxm88}4sG95eBwJtIP>W1y91}-eJeU9=6hK@ z&HrVNA%W>C{i}xwn0@hipZ`QAJvmVd6zSKm+>^5x6ae4h!Sla)-5zhNtN&qw&xjv7 z*v$C)^4VW4@Tt?`SEUjDLqzY{V}I%S+4yStzt7n!orHvTU?9E?P`b4Dx7g^3+20}_ zx*wVNCQ|Hk%FPqUzZX??E$iE8sU7z36Yu{!AL{F|_o6MM_@C$2G-yVTeqS0#UbgtH zEo|;ngmMwfOTL26N`m#5vj{vNsPKA<1=pVsVvMgtaMYb2CB{!Lee>`$leWGdkU$;R zUJ(A~PsIR{VDu`Rz|4|r( z5pSQsKA6SiyfwOQ;9*+JlrT-IJK2BvyVXV@>@gXv0jpMQ!pHL}40T9O_x8Sl9A`f! z2&gF#wae=+NvxKJ} z{ci35$alc~i7mIXzPEQ9V{yjW%} zRFa#T`r#S%tJ#mga`l~ab2E;QellcdhocRa5v-x1VSz>6dad+}p9@@y>*6-5WYVvg zMLoh9JIC_w+pZRP7a5Vpe=+}7b(?EdoqWX6&Z6lCV0a2ko#9e>^}cVnIM!W48;e!} z(KrHY{r_RNp+!pm$U5OR&Xecz<$LJ068~fUl2^g~A*7^a0I4{%MwKt01j$4GR_j{W z;R4s$q1>e5!p^_T!2*qok4YP@4;a+cvhnsbu)LfG5C`(QA+PFj=7l!7@sFa?FfIX= z8XfHgeoc_U83^Rg0OFpHh}shz{8QYvkZ6g3xVT!)=Dv%ERPWsjI&jz((uCr8jSbD8 z?}iD$wkR3|#PQM&!YYiA?oaEN!W9$Qj=K1S`ea1syq~;oYMHxLd1rF}Ci(8m!Lb0B3IrYoQ9Kj|8E79eTpb`t98^`x;QRO?>>wR6@?RIEfit zy>ry_T|c!>%5PSAwsOJ3Yvd#d zxLG~lVQriwT_zPXv+S<22%LVQJC!7L9aN?0q!z;%h{usziMfgeno|8RrsZ)1>>_A` zBo&8lEE1c6i7o8+vpXEk>q7p$5J7k+8JX*MH>ap>>j*Q02YZY&HdU-KP8d<^Fg+1} zk*W*q=-ZA9;Cc3?1g#*4s{KNP;{J7t@F8mCHn*IIuPD(!0P*~B{hcEdvWM86l4_v6KIgy^{20odQ`U`_~Nnn>*ow$>GTuI${b*S76+D1ur!TN znI(JK>G`-OS1vw$+I&V%7y{NH(%}!0b6SD5zJ?Go)6*j{QJkZ>{b47-&iHNdlhYII z#~eUh?jbAq^Z4YXfRd6{lEM|_pvGqH$&)4zAOB+9`{bc{TF6=aKvBy`NI{6&RON~u z`kuwiW~M2dSP`_CsO)v3Ub`3WqO}F1Hoc^J>6qx_Q(P|xR zpCs>97c&jVwucpO+r{3mCHcP_mqu{Vx=A2pc(myWg(njY1AxGOd`?#gcu@L|e+iIN zX1Kul;Ra*3dIckpqo@D8I+qFgSxQSgWI9AxJ@nofQ4zL$|h^Eoa^0yfqUC$?=5^_Aw?HKWtnUx05hoFRz zSwiK4A&_Ho4iM3zMBgz(3SJbotQ`t4x2*Z?i<`ZNKeWE|wIX8K$*`g}nb>jtdeokk zslIaUe}&?;Ue5WzGcuFgO366m>-G_4vKe6cW$Tl@1UXtT=wV{fx^?FA!x46VP-yu2 z`g%K$n!@5T#9oKm+}sCO)^Ighc4{kp?=kRH{2JEA6vR3QJO^zr4>`*Hkh6}Uk(HZj zxZ)ubVf`nOX{UKqsrMAh1N2irHKkfe)C9s`-S?AWbqC1?QWixSwY1IXHy%c8YfafSG za5gJ{wwU1zbCcG;Y8d`nEiD95kmWR2W>3xXl|jkn zgNc0lo%G1;;JdQ7(x1wNhSt@8xJd>F7PzW64~XpMx*@EjV7VWg^AA!J(moVub5{o54(W z5mp93i@;%nTfXBfv%dbO*Dc4lOSE=rNQ;>7Z|A8{andvOQ)x^c*1E#fNl|4^##JJJ zgAz!tm>sG~+T3U=83oMJek_Z+yuL0$ni*^;i#t(cKPU+BW?oM5RRF*bW{**)Y$z>q15N$7U6T%^9s!B8dTrV}}3{CtsAf`0&#JZ-R^bhpT zpI!ps7Lg3VwQYw~Rq5HA`_G?9o>m;r_@OXyN=CXVi|F1tcJSaGgHc;ch-7IQah>J- zXmfs*Em}6(z&Vy+rv`Ce_bh6fePE5Aecz|5J{T6(E{c5Srna2YvGAnn3@%!}D~fVv zkn8YVVv;>mlqnmQ_4u7|GgVg-6SUb8$&08g4SNBBX3*3}YGXC%;UnK`$Kh@+7fO~4 z-=*42j`5sl+)`c`2G{G|&ojG{@EU9eC<`UxM5RS9kM4YKzw8dg0thie?I9%4#@bdu zjBx2uOhFGE5t2Z>cBNuxu`68##Akae90!L3PH~kjrcPO{waoRpcN)E7vX`Jcdp9*y z;ozX`I$DX_yxY}ymo`1ry;B40y%p=>UqOXti<5p)@iY!6f&ebz39;cULcGA?LL27G zyTX4aKjGGKs-`9aTHoOzPJ$V|F>u!|BC_f1rqpuxf>P&|7f)c^3_g#0sO8LbVHBS={|Fp_E)2EP9t#dq7l`7=j=M1yunakneWd)6@TBc83Kww~W%u^(R z|HBDEQCxlD@tQi5KIzvMalx6IT~+zjug^fYQJF`od_JLna>yOsShG_&`cu>1;l8RG zW1I`0b!?tR@vZZ8<{eBn&Qs@RQ=9S0iupsdH|w80`DcGD6cqK&sa~z-T0pcp-Z(VK zmDub7Ho)r>Q-8mXe$euc?*9~!+Ai&lGF-H*1g2f^k4{wipP=nK;KE^TO9xP%02C6U z2c#C|u1!WYH77Yd1~(_4WnI?s>fW?FRo(>|j?4f#UG>AgpxrR7^hh$olM6tJ3fAB) zAbaJf9@8s0#wL&ztF{wH1PDdCP7hZdHxO{z%0}7#5k!#a?soJxh-zVL=#jWs)=~Lt z26rBxdj1}A?c>bHTgsKEZWTFLVK7wSYXS3zIk-c*33A6GoF9C7uVg=}RXC<~kbT=e z-C=sIVeLddyr%YdsQl6Ow~k9N34>D_Dd2E&@409XxOs6Qjd*Uum4`s)x5t zo;@;qhE--tzT08HvCS3A2_J zs6*b|*G7;Zcvp)#1mQ7QrSqel#$vc8DGX$zWDK zN?iWUOu58G`;Y#G@*`zzZi6%Wdbz4*Q4cG`nzE<@&835|jeGG5Vqmb z#H_@KeRq_K&6wpFWi7=la?cL&scFUH2ZQV0m!D(hDGG}ULh8Ba!n92LG}mbK+9yGv zs+Ihz`^y1rkN@-j1Ic2Pu3tlpU?L7OXAb5e`&TrJ^LF zHsc`R|M@KgE#%=;ezr>eY1)R06eqlTXdkN>QyJXXgxc>zgXlOD|T9ol-UUKNY< zqiu(14r&X$yOmcEub86LY$&8;HS|(dQOAIt(fsf)z^7@x67|oVIFP$DttCE zo)MMrOM|xKf)IN7>Jbo|09}&Y#mGOEaO1M)nPe#di zz7-sF$*T38dmg$_V~O?Z_RDshw%oNo5puE2v;6L$ph-+-&YNF!s%f)Ekq+87Zsb^^ zm${ion6KR8yZYe4eXq@6EAL^w(5d|WKQyfx*lSq_jJs-1R* zc9h{bsBQ4^)|qhN%7Sm5IB+;OWuVIQ)W@_lIty-*f{wy$@(ncTV(VA0Z{pn>hAGrj z*uQoveb|ID6w{B18-C@HncYI|KgD_RATItyL+Dw@x_FLQX_roYZS81zANw6sMN538 z^PpfthoOi5eP?O2^sxhvG!4!5^IRQr!_Su!`>LapqO$Yy9Qn?_7Lv~T=v`&2?dh?y zj7zH1vCzlDbKE;Fizns3n>UAs#U9V!5sG~`6F0S1m)INoU$G}Ese?BY3)OV<*uoR? zgi-cu7WDEtXJ{*9Gh>ly1u#8SJ|G?%OBVSEfO-Z5_}yurSl>mk^aUbuZE3pJV=@ zLThEE9M1U2QTac_(^MagY4;k&QgN&dM+^NZTtciEq{Y>ch;mXUW*5tLMKGLtbB^?r`wb!~ZcODOjN!7B01Z_0D_t480I-dQx!d>kbIO+ZOZP^q>I;>>1Rj0Mats|cP)}9;=Dl2Q$ymSHiY?#m zcqj6!*DqiHbZ25dBol*}O^HtCV4wbKgS=-C^+m|LSC>MI&9w0ohyVLowVTTKeG9I? z|2d0>ci8&6P00()0|!5cZ#!1_-{#0V`JKxj^7uQKt6W$&)#~e0-{W#KK1<~Nw@9+| zg$7Hv@4YtUdvA8}$FGz@@DBC|d&ic3`p)ON)$?t~iM7{~hoLXYSAXnvwehjvK0xLC zS%=Pj=S=y8zVpq!Um3fYXT)jnpVk!AFb9rfjQsrCEcIr!OgbjhW};3hyR1|bqEn+u zRHVCJZeCvA`lXD*G1^wAiNV+wxpUJ^PhbDMoeeT-+i5YIMBOCchSwOm>&=Y%D3`N} zDCIM(6;yip_-qc3JS8tbDwp$|6HRHFTXUohh37eEJN2E4ZEx6B8s9bRGBX%kP9l+4 z{gOI0amKQYmYgrH!iJl8gQah()rQ8V?I*F?)mr}@hG^rKXj0J2!?o7K7V(m_F6plI z`S!(`9U<4=Bv!@jcZuc}Xo?b=v9idx|0Yn{rLDh?CrBi_Odne=g1;VX=^GieBKxpBI#g@YG-~>+UlFr;a-^<4rabZxnp3<=x=FV?QQ`D?L{e{tCHMwkl*RlCWMdB~Z0 ze~r#$!WF-L!SY-GJn$a4yiM&%Ou>Fw@r<9C1v-SS70Fa)WN0)0LGmffYRRmpvOV2e zyJoDP9dY2-U;8OCsN4svrvwp#B0|RAI^nzmRt7PkV5Qh=-GqgyVot`vN_~Z`E3s1( zW7du>T}C749oNNf)c1_uziS8g%(OHhymErQqFfOhK$SNxu*8GN&BhtBi_F@xfX~K>N%%IXY14T_a-( zZ;(IGR~NdGzM}z|Sb3k%ZtWfIOp`)_`Iu>p4b;!?MlasoZPCUYim`DR%MunrRTL4a z@l}(~y`^kUW|aHY8Rh2inT>30aKo;VV#o1S&D8;O4cdUe6v?3AyBNyy!H1G=AD6cZ z&9&MmmN)Vq$3#bOrfd&+N_w+8AxV8X83nI=MeT5!nsZfSMGYiQiHiv?s-~QCoz!|K zM{_{|fhZdjx{C;eVfUI+C)Zc%I ztOW&^jT^1OIAno{;!6$F zG%Ut%ne_}yRZS+vR25$GJT7ctF%I>BL-GQ^cs&c3c3hD zDa6Y<#Gl_)wBXrUbhq&6pl}4fzFa$=Xt0Wb;a}v?HdJquuhQM>D&alVVVs9a;l^gD z*owY?gbzGj)#@90$|s=(7W1a<-aK`t}P3wrpP3nR9uku{*# zU)-@eckUH!KD|l+Le#OVliR4-RsjXmy&7uj(2pg>(WA7r{V0-F%E z8F$>B2fVoj^?x4a4l1$48W>uGQEkPP&u8{D431b!#*JQjVx3huRXV(G=M-1*sHI3t zbV4lN?7U*(!vonEjJ8)sa=>R>H8pkn$wW2u0&ab0?mXhb)_PCU82-tvzOK72&XnY! z>Ej4};59lMKS|eEH2#!ayFL{ucaXM|&oezj#v9=mEWD@ob~*00h|r3rik6J?+)@?} z_lv<$b#0tNBw_jy%vKJDFthGoY`j(@=LezYk#o&~8)vrXN)KL(a)>`XIha_3TvuMk zs+@#)`=q<`SCayV+z+>CHvavbyx^}sNX8pu0SeB7=%(4YP&cGbcz$=acGLU6Ls12> zccIk?1OnG0-AlUBck#Cai4#1YlLD>wFwaf*I4!KH2*sLvRz+|H{u9CN zeZ6eGxQJCHAqQ|YQN-5lb_$L5I(KW8nr&?Y5+-m3&}}rdT^@*P(d_NN6RdR8JS zBePBwik22=s*)z++Nw$@im{QeycO_V{m`h!n5cpocD09-XQs>KAgxn~Rm+iXg3Fk} zbh`AG@gYVTs|h2!8)l4#GKEuM#x+7B!$&YwJ(qT&K4O((j%N!u{%GXM8I^_Qxkc!a zN%10e7{4_!$uwK=)0eAJz|J3PdQX+H%xd^~E!VeksFKhcseGl~*zJADp;4u~AC`>! zX!yB%<=IYR;{k?Vb+2_vbHWV?T%+?lrEu#oVZBfn6DG;df(?=gR zx%NVsOO9wR0vnI<33|3%H^LZK;PQI$+pf6hJWIScC_cipm2c$V!i48N&R- zJF_F9+eeH|rjEwO;nEFsISL`!9C40iSi@$5ZELwMg>Msk6q9(-g8407<-27?_4Wmc z*RoxcJ{zWs8zYf(h3f?UD|er{)_uIFwDQJfmMmcbaQl*RG%X4Cl*TgzmDcqme6ixgGXVZZRAnt9>4EFE3KYLTO(xkw9h7Rr78D%U+W zr7$+RUdt}gqx_-P+trVDNBI!=dRo{#ODOc>Nlf+|m!?V;N5%-F(qXNvbfCbiBy&(* z>WjJ-glj2*fFOQBM z(7Tm(1_p|egtSe?4CIY7r@y4gMm=q>=!H|5;Dv@=NAGLb3=s}Bir(0ugio}Mmina; z_P1>vq>^;jZUa`z^Mn=)Xm~Zf!V|AVhuLsY)S3%CkbW&*xO*+>=Bb+dKc94suxwX}PM~YoQN=}beg%%GCOo3h~cPc;k3H+ljB{d=vSv!?B zHQ`Z{uya_lWo8xGSOLt_x1xjkX8N$G zcH_{=khFJHVxIE0ZRwFuW0DKYWkjgk&#?}o?2>&FVO(+OeELIBfcU;)Yi3BOi}>Va zAiQtt54--FSnw4f%?}0qU10cx0`v&dm;&Z6PL|Vp|Hn7k0@|}+H98EX4Cace$=#5?D7|-Xm^%H@4&BRhm z0P$-rJ#WQ(2$9al#YX&qjyJ2CT+oG5dC_;gpg2T}pQD0E7t-=mi*ImVth7&Q*#GYZb25F{sZ5on%@K<)-lA0h31DlPopF-H+FdU6 z`$oR z|AN7>T3;<>q^kww=(5h{CsTU8dP>gOn8XCdNo!&8&0gRVg%8^QVdKe@n}BSl-ajSX zd_~O>J}J@ynGTako^F?G?ar%ST)&)&M!5V{=EIfem4fFnihYtgthThsuJ$%&S$O!y7-)>zJu5T*u3`0~- zwTX4W?7{w3qpsDWyn=$!NSPMcTtj`UIc>AT*e}x^8`Y_WwM1_uLXrN>iO>a$pUy{yhs~D$JkD$wGld9RtW3ZfTT}Gbp@f)Y1k$N8u)q)M| zEIn2t_SQFAXG+b<Utg?V z>6E>Ug_=@OFp)zs)wf}HKi7pT@RflS59jhMkHL?mG8%T{Ed8fE`MhUy_J&faZV&t> zb6aOS)(L$SR>J8}N>(|*%7Gh~X-BqA(`&X3NVoP=v%^&AStrZb9b4vuABKnZf4JA+ z4b`rs0^^^L+goNuwk{pWJJ+8OlyZ3Ed<+87KE05yI!>|NSJXd5bYm9I;M<&uyb@3ZY1V$uZK!VUmIJlQ{N)KOM8xnSdz++o_v z?fpg+HTQBq3o+j83dE_fs#s$f;vGu)g?^Pj zu66NcQo0}@*PK3qnmUnC>#Nhf^;o!~KbN07HwBZB3u`|D0_+3@L}G1B9$vqZKb2F# zXneqS>R1LW@$Z>yVMcDFPZ$4V<#J>zsWAcOsGO0t-?v$b%;o3sNwdEE&_#=y6}MDz z81wZ08LTyHsgS6s>C4LsBfBgKZV{D=3Y1=jZI%7|HnAdel~;X!lF@!q;1X-;1j9bEKy^(sfp0%mrTnE-)ml!p)9m8(tm8au;Y^Bbajd)N8g7g zM57otE~VMiHRi4jyB|qd-pJOuN0{u_aX=h6nu}r*dXm=tDV8{6dA8p%;if{O=Ngd8wTP? zqqi&QK?zOlWO#xFowGL|aLS>m=sI)SQBOe*#CSfZu}-*_u{j2xm*-Tz_~ZxqI|C!L zL?s8GE$+eh5y{d9UC_2_S<*$GIcq_i_X4u1rnru8g>D5$dD!0<*XqF<<7CT+ljyYMc za0HBq8+;%zvSePIH&2_0A|h&d0;$;B$LT~!nkws{ZdBGz+NbCGI@_MfwLSuG6tFV>g2!?}(JFC5z=KRBd1Eoq%`p&<%O?p53jWF0+)-8Gj4+M0cIlvG z9gX0g(RCFN7VK8lrQ@NShK~3lRlTRbd-yBSimWhL#`u)Ql;) z&@rt-U=v>f;OoQVq9(b}OGJI|)~4xc!p4@ymdnqK z5bs5$y`S)KqQ!?FIC$`>13pD~u+EGfM2jH%441vbgJ`@`4V^BLVZU;5BnmY=T5Q~b zXOFpfVYVN~9gGim+5|ebAg_NQDzYb+KRkvPV5zF=^CAul-2H)~@wZQez~WGWZaNP% z*$!KewCh{uklk8y9q7D)J$2cKSZ(f6GwdN7fG80%Dp*-`Td)KSv4luqPw(Vdcw4~@ zMF@Jk2~Q*Qc;e!*yiFJSs*G!6@TUBLRi|r6jq2AH0p8{v*)|ZJSwzP4ipHAF$vDSU z@^kbXrIL-R(|0}l`xR@d_@DbxEHR%(Ree!Y}-vnDBrw>;>% zCOoj+&po?j8;PwxS}PXYDKNPHPG?ResZW#X5TXrFsYuQ1`;-dm?o zX2^CBITcNcmWDhRC$SXGj8o;|yo$;&T&f~U5@W0W-tLrU9E&7a8cpIO24Bd{?=rrCj^ zhpwYZolFSWGH}k|FeN{Q{;c8>bBhSYE7a&r97vgATe?uqFbRio#ZhS;-oPe;fp_ymp4AECPmNbW)>f?oY19gCYJvFm` zCiM=~O5qAf(W$3HjeuDUO+oAMb4lnEMPrSM)+%~*be$~nKYCtMvGkl2BPy{f;U9I% zncVuA_J2XL6M*>d#>;1 zg1_X~InWaIsx~u|3DBZHZB}{pqu*=@M$xKg3nb8G)%b`@|auprCN zR5yVTH-x1Ro+@6126un)Lo?M-Lx z=y_=a1583;QEnS(4*C-oF*7MmUwX>I)fg#C_`GUi`6bUu7n%<_WMa+Oj3Xa) zhi2Qt@D~9aVIxfs*lXV?;+tr zlh`znQD=0o49o_oO#bsbI5vnfM={-bQ=?d3<}O+)Hl=r3?wY($MpoCe?A%^khuLxy zxbjx5r!sXLcMwro+N6Of^|^=y(cUKAhDlVyht$(t)uWd3o7H;I@%tJ_;V0}xog`_k zNad9fe4a^{mxa$qhr)+5TlrnRNnrBDH!@66fs8U<7)V#DTnHm%*LuT9rR@;Qpp~PT zVc24B5wtp;iM7P@3@KmC4p|$ntMV1dHG2=wOvTNm0|+d|cJ@9zH(p-W=~Kfdz!x!r znAO!siyLE=WbGvMr>F9+UQO1@y^^#yN;1>;S}psxQv&$g)(av)r~!BP?(!#S&XUKU zjL|xHT!aJ%hG{kHY3Mv2mDQnt{fR1)SoCx2>dc@H6A;HvIC*ucie1I7joKAUyLR@q z=)}cK`MN(i-ifs)H+Bp(+Jh6RMidqI5}xA#D)S zz1-kDx2Wd0>F2`Kt6-y!L^nw3!l=UXQYEba;uR3Q_$MN1mVd2sRn(y!Kx24XYaNDz z(R3o~PU{u*zlG!kF8gh&(LIwf{cX&lO`A1K(S)7-fClHqi@Pg{;*<7)I}?#ixR4jo zhWM3Gj0d<8N)VxULS8O(+#L0Fu$h54t%) zO%X4FVRrF5W9dt|tCr68TS8BtUxJeirKikbJ7I9sP5prs1L7d8OL zxmZJE@K)?pWt5B)U~q*uoBF3bR{xYwNd}fy4*~8D6I36RUB;{H)Iq<}!n(R3*h$rV43@c{x@|6qzZex6m9jA#U z*o>iUoED^;o7K04K1$h{1*HvhM`DizBCZ0Rg)}nS6gsEbD4hmcXHA5ry%$S+X>?MV z4uWgUX2``QBDelkuFIy{!-$91&7Hj-?CuM078J_A{%5Ofa4^+0p}R7tC|A$b^4@(a zi?{Ya-s6({dQVd;1R85Tposn_cX8)GLUl;tKD;vo9lJvt~Rz)f_wrmM}umL zX5%>^23si2s-Dm=*PrO3IsY4Je6dju6|`Q)q$vObk2xQuX!ePQhT>kAYs`x6$X_vK zE`dI#=|I}f7y4;x&JK*%yX=~kW{)^TD(=QZ>O^MbNB~4Ku)zd_boBUyT9Y~YKZWgI z{R5Q5vcqw~nvb0zU_aNFx`qilydEUsO0C?v?w;Ei0)qMW?uuQOh<9z3i! zuy(wp;uMR2R2T+}KVs;)ZT3*$tfKbsA8+X_L`FW!jeWdfe30dUer#U`C7EAd@Hr9T zj6KG2q~QHE5&jDeD<5S%jF3({)xezdA(;cKY*NH1a#d8MGB4ucVB9l9*$7VPI>fN_0FKnVc{>gph%v%m`PX*xBI zCi_ebwn1BQDBGBg(f}A3E?h5ipwkwqljXEQhj6F}YNb7SGAbD&g9eM`wNPOu6nwQd zn0C27lQxNwdGEewgLBxYDHHu6%y?Ji1|Ldc9Dv*tFLM6skK36$1ks$nuxBZ1SgyYm z`anAM70>@%+CBcsdJ6?5*4=CD8)C3xrS_B_fQSDNuWZNgOP&Q(jF@TOu}$L~kaR3m z{s?F3T;6bjK3H!lhWP7$j`9~K+Gli)w2a=1ef`7fJ4fVO;Q0thZMvjz>Vg(LoZ>+8QpUiC~agp|;-;wlWIUM|sd~Ztp8dzkt0b=T;LDzY%-)+223(1zSTpyJo#57_2aAPt2Flmzfe?FkP03+(6ip{+ z8LW@GmgO4!xt~jF_9j=r2W9{HfNOS{=dZcG!g8n;|UZ&KzkMU*{8|p ztNb<0aX4aOvXkx~0wTQ+k#jqv{EX#Rg7hXHw$45^xDq)neEnvLwCfP8meB1qaS`6K zd-deX&Ztl#4rbz~pwrBp*cOR4mfaPvp>(Jue0k1$e2O`b2Q%m(5ZY`QS27q1fEHm_TmviVFq^{R`N|%g1=KaU$#-TDh8r2# z4b@QAwO^Ms=djOTy}B)T|5TmQm;28>pHa5!rj~6Ne&lK;n7Si!rR`jCyf78Q&H?^1 zE7m6UL-{g3lZnAw3#}+zf^ljD*BI>hG^FJ1oLZ$aHPGx90VBEL3)=uMK$U8MmGpQ` zmv?@B0jv!(6C@QZFJN>AR=RTPD%$Z`J*6H@Zc|@(K4aM<8;TLF!W$LWh(sxmp9YEP zX7Qa0D_8i=d%bspFq&p9o;e=oq7LmSA2)75Bfy#QG4))lP}$u@sxBX5>ao&g z&<7xZ%6MZNKjb!j+T!klKxteSF9`8W@eM1vMg^u~2uNISa~ zRMr_0vd-1aY8inA`f4?wN6NGRPh5=g8(Rq+aN4jRNQe9xDgO>EbNitlF)+$#0G%N` zwpiXmaEwaKEd4ch$vL2Uzrox!CzFeeOsA}MHodd5t|g=a@5IE3(Ii8Q zyPX0|92-#T)n=I}AH(Oup0hX^l@F|>(@xZc9D8luilCJT13m>^Jyw?E3Lm5F@`F1^{xT#URA7-p2j2mj_fPY#y|Ih&d1op-yrcj?Vo7Y#>Y7C}VJb z^Ui$o3`9I=H!gbGPJP;Riv)7?{=%clhI;N{yr_#7-hSc7MJ#e{^805evd@FtRZ38B zq}xaqYPWrA%^vbX6=$rVbEA_JblM7KZ0|-k@U{=>B`lL>$^f7cRbDjoYp}GykefgN zx4y`*nhan}70eIYl5SFK4`CjSKL}mS2HR#%PPL&{3=#i!+M~v+ql2|yLD&0oc+fLN zot5LFOsrP8j?(`Do}D3D!s?4LvANmy&i)^^sfB7<#xr44BRRf0phxRjhI}G&xN(jy z-V2(hzh^u?5pt%z)DUM3$xNH-e3_Z@W6@T$w;)vk`JqpNcepX9jLq!RY(_TOt@iog z>)MuT3OBZgLdy#5_EA&9mWr1)=F48@mq zV4SJqFdA~IGYlaFjTrJ+#6!{m8cuf+Nb8Vh?M8Qzm~!gw!J(J$nX&y|vW@)p%jNB_ zwa#+;t?k%t+B%guamt6Qn(-UR@Ugs5-{w@mjy*Kx2kw(F4patd)Dj-f86itK0BDFZVB` z`&tHS8(Vn9h}p)Pl}(BE@A{hOi?{N8RGF+5>LP*CXV5tjxMU`E%Fm_nmf+I)BT8YA z2a~*@`-W37HIln_Dg-@dx=hg}Y^d-AzWxQ2FV|7^Ioy2t5UEz*?ldvucLWzk0P8`fpvd2pk+NB?qt_7~P%b^i$+kV$Avjw*}~K?c5}z z7a5z#SJxy8pq%mO))nlI$X&h}8awxU1-xP&Oyh_iv0hsQ7H~V!Hj@5&k}*%OMC8aB zEB}36DL#%i!_RcgN@*RSgjy!Ip=X0-n9x6>(Yk2?;xNO#Ym{bVV)B?y2xzp0`Gi`B z6`7Glf_?(maJNo)_}8N+o2#T|-|y1irTcC~E&_X=?6=C2>3z*ryy)FL^H)Hmv--h; zw4HAn6RSX5id89>{YsVp8FjO&-V)RE+gd#lsLEF+0*E2E#e3Kc=H|RgWkVAy>E0um z6u7knM!`qJqE);z)#>Vv1IiEhHjj*hyv~FXP{>tP2aIj@?mAb2i6{GZej}4w>(y1R z?S`Oe3d3*fu^%&%@58;o)z5!(;^Gtk@bpg@`RAWIjOu}bKR^=Km;ZBhS;Nn?|3%w- z05zF@;iIm*cEPnE3IeNw3J6#z(pM2NRO!-1r1uhfv4VnthAO>x2+|@1$SMK?(o1L| zNQclN1PGA-$^P!#QP;V1XYO2PaUD~>?|aL6PkEl_bVeT!S#1`#PJrH2P(9^C=$1T6 z=QR4%&!BDa7q+ILq@@9R4!#B6L~NB5W?EUUAusQZR_)tdCs5As_>l?c9 zhIzF>-<1nuYEd@!5#DnVlhe(V>NlM9L}@!JVyEmQ077zbWIH7ArnCz*Ap=3WUY2F$ zHA~Mw0Jg^TlQNt5rR(ByP^{CqcR%m1fEtcTp;3;uH&vUY+0M|;p=X=im%d3@yC`=%EU*X5Im&mV!n)FPAY*b)tQ33b)}*;=U}HHdOZZ{2B%G(sym#ZF|5T z@Ix>B{V!Eno96=_mR{GfeIX0}$jm7Y5(o2{V;T!y&NCMb7}*E4twn6K+}%GsefHEl z|CPDGD)9%Gbr|>6E;{3p>h=O!EmrZuMn87QWir(X|6zL|0}g-lMBhp$r?L$Uc{X8! zHps_UIs`L@M?uQA3rTbHEjDS9COrbl&|X?q*={|Plym2y!kxMb3_GZD_vE#<#gI>L z&XN-8*eVLax0%1xdJZ61H0Ou)j8Ljr!+g!pk2!Vb45wH8SdH=lHeJOXs!yH1Uy-5C z3w05~hDFu3-Ze}Pm>ghW0oL>lCsMgjwVYp2@V2&rYZ;BYFVT0BHi&Kwi9RCfF3sk- z=nDYi80+n;)=zM@_67sXhmarpOiCQpBLf2!G`{6^fsZBVQzrrVjq57n%Ju9XFLxGD z#jC4L3y^K)y(nS?E|mfO_w2`yEPivfGo8FueI(3);+}o`6i`o}o&jWFS9|Im3-nDN z*4OkZ9c?ndyn0dq@DIsI)E{1HZc7;bp%N}^?TUzL=Y$Py@(3x<63(O;gP0#AR@O1^ zS+CtD5pn)N&FL7={nz!|;dzY2TMwfELvpt3Ib z79>BT;uT7ANhMGeS(4+(*b@{9*$7$PO7CFUX0XJ`EdfT|3X#_Nkn*FMn`G7t3iHTA zMqNWwlh52V0{4(G@im{Xh1%KLxt&Ph$CULTa`H6wBCdYA0I^ zXQU0RjJqq$eA>`*3%)HN(KoY3ZWaxjwOda>Ds7w>Z%M!FLW>vjO^uqG2Kmf8lxjow zk$E$;-@?ajJ;j|oCQQ|MA*bw%0DGhB+ErI;YfX1r0Wz8&gSmS3s_IT_W`cV-G^~g@ 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 r?9{J90 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 Y53wuf1jsWzpp6e9t8y#zrs3272j?m2s{jB1 literal 0 HcmV?d00001 diff --git a/docs/idn_docs/docs/img/custom_connectors/commands/account_create/testing3.png b/docs/idn_docs/docs/img/custom_connectors/commands/account_create/testing3.png new file mode 100644 index 0000000000000000000000000000000000000000..3998d980df68bfddac318c1c06d9e7c0bca5e082 GIT binary patch literal 96328 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

g(8RO9LGmqk%l7lweqN-597-Zme!z z2_}oXnZ7`Q?JS=L^G)Sf__6n>Nnoh@&y-9@L^W3`Nl@6HU&zGI6!ExLUORk}+b#7_ zCr>Uj_+Va~2O^Pf>%3fG#9#JegKf2BK>&0|l=%*5lhKJz4U5DJJ#LWVRd*evzd z)epVpdJf|6_FqSBgQ~aKv9W6 zde@gj&tIjWEEkHVQ!T&{LCDY@fEWwVLbZ;n8^JC?*SMH3;tODw4Mg$%#n_ntuNa&C z8XEpFC(UU--};!GOnw91~x5eI0^OAZl~vM!2G0DscKGc=P4*txuG8(%ka69AMOo;v^L*sS%Fq zz|zcHeF-`+h5HcL`I*tJPii~b6Hp?qbL9yT5&@PSYHYL7j?W@6iMYI_mFgL)h3XQw}} zlTLl#oopWN=}O%T>ahB&XIvA5-!vO?9zgGdooMo(|9)752tpCU{F1TrYn399=E!=ojxDte-)UJXn!DIxps}RPI7MSy=(7(N6CHo>C$UXu`pcXoB^_EF(m=GwYNB9L#!%=SWeW`+22Uw-!%zMopG`tLV;DhD64yA@>^Z!gbDh9 z@-FOMFk%*hYyVz}J<2gn8?8HWXU3pxe5!vz6@=P)vVKVm!Xe7lcSmXEfl;VC%Ou&B zeBut$q$noo{=buC*dQRZJep7;7EXDeO z9J3`jh|K%>kL5}^N+3E zm0|C`z#3Zy=MS)$Mb&tg_E!rB=)CE*1JKW^*{%Olf8*xO)=E9P%VdHM$%cXng9qU+ z|9_hm{y1RaXx*FVc0ZS>0=Q5dpwfQXUh~>m*Qhhy!8LIYUW7b3%Whx~vN5Fn%sW;QvSJe-y0I^97#x6g=%&c}r5QMXx z?G=Vf3l`vl`p-pb7G&!w8;XKuALC}@q)ANYvX!5pc(^bXi7+A4DCe`>+&?yOsgvtt zZp^&b6SHG>q^_LMf)#37VVU{izUujB?N$T@B)7|o%}c=VY1hK^S(Mg~axZuo79>v$ z84D61|8R7H7`fS(MGt;(gTfYbRg>QwGM)gMRuUr}I{&>;mVWo`rri0q3;2T^lyhoA zLB;tx*`OQ+fZ&1q1#~6JyBi0w32jo}uiM$Pqjwg7j(b2x36ZJzkjjllzZ{-BL-4Fz zxGjqxzf5TRqwL*RCN9F@xGoA;PI;tie+{oyy0&=8jG4gmh~q(hDg(WmwFgtSr-!()LK?Iagmq!V6jchLaeR^ zTe#yve3mv543C>ff820ay{;}=eZ26HSv2L}gresonOc4kJ;K+}6}HVy71%U<0pLL| zNy66dWy7~y&-4l)ZY`SO2jL8$=fHhF1Zv&XTw8*;l=S0|J-ZA!G7Rb(ap=ps$%$}) zQ;+RGPz@Q#%%Yk?fPS=fN>yH*Cb~O9*;GqjVze=GFCENhMO`yU@;8M(2kaJ!mUVLF z{oepthv?hA3LZt|_lTUhWfgjO!%^Y5*YYW(+~OL(15O^kn$LS$3wI8)8q zKc?m~6I8YavN16UhMvE9K8L&lv10j1?eJ~)ZBXdQ z1JU?lZgyrMOgh470x{qK9&ss;J`XLWZem)2PgKVs*=l3X1R^cTMy(}1+P3q zr2H-SU3E9;S7^6)OwpObyt7BH(D38Aqg;AGjODkd3zZOflggJ1v?0tx5tmb5bUj>8 zJ^3^!$-)Z_a{!QpPr-&E$pr~jSgv}K@z!;!FU)f_e(TH}3Z9M>*+N_ZcYd8<+R3>u z({)M`zV4s*pDGamnw(r%Uij0H7XBn~jq+YNBGo~jS%dpt`NM4-H-oGH z>5k~mWag$Rdve#S6Pn5~b8m&e9@zi6J=IKFdDoL0PA1|=4n+j`?C9xMMtP8Z#NJB2 zH5h#$Hm_h&&V?pg#P>gUi-!_c9|%U%XSiibY4(*TKfKIW@?A`YpZ@)AAr9CoAiZ^&`zT2=5ok*h$5Ik9}!`-D{*JE)!0%)2jAf zubYEFszt0UKEZVM>5`ag>W!mQ=hJ-h7e&GrG?m{U($2Xv9=GXUnQ2O(9hp{sJSmB$ zqTbAG4Ux}}z<)26ZI%x^1@b{*7B`_pW$T7KBJra9Q7#RXI51Svo{SSN*`IV_xnEOL zo1iW;QaJgC`^hy>z0|nWX?jf_Xi6~XShG0H?6*7m0t}zqy~BEN+^}J&cC+d2?Z$)2 zXIRl$P{hd}9sVZ>3)st|$^yM2BBn+=25K#2wP-f+-@}IyCZKwkwDDZ9?$2B z*i)iF6cTBuX`u{ZIPynWhOnD1PPXYo{ab2ZT>)ZIPc+E2tU+N4=k#`(C}YTfX-DP4 z$nC$vbr_7ywzlI*bFJ`xMZz|uVwNyBpI0IOT)~jr+qm~9Zz~bU z*sie^X!x7$(3_IE4^`DW3Qc9RK*o#qEVC8dOWhVzSWqUM`D`ZUSGYq{{kws6$xeYr z*l>PvlMiIGXHTsx#fXmvx?6UYJxFrs9Xh88jy(pXW4$~JC!m*iXV<7B94q|9%huM3 z2`n6GSzJl=$qUZ-3kGqHG|x!jtw=$DH$(Jc-!Kj{`)eJ$RY{cD+$;yMi9VHTd)_9; zD{#@zBhRa(R$GUXTgci$>MJ{`>nvJ6G|J{oG3`B9UZfRvKIWGPGzvhQBmpA6(gJ6( zvmYi+bab{6^@{TR?~I!+o*ky1-Jb?J2~&<>8pobnE_U-tQeYL}L^mle6Re4LBAtWj z(FiseoV!qteZVN_$p8!`YTM@&5^NEkhG=NeA>M|fmc^IjRbY91Outfd;rxs9pF*h2PTcd^a`dxZib_0|Q+mE}VSLJOyrSsnPW>ek1HcKau)*0z5uFFJ?(7?oG4Avtw=H^7Psxj>&z>Id&NEIIl~0TyjY1SaG3!Aq=wak2r3AcN zR}(b;Y>|T-s5})STX}&{eAy)o`l;a00l@)Gd9WFM_wD2^H)?c*IhUV@^c+G)^-*3i z=(aOcL`(Z1Iu$ZOo^BSb)akMwWG5H5yVSh+j%EQ=R#Q0 z)#c8hy@KfX(%$KSAmN+!aDAXX=QT}<6cE^NQM#m|DdF%UmoE|&u3I;!fM}^+;;EB{ z@WMqSSUKPWQ|Eu~;`Qs2fwvUkogQ!_JKfQ&}7PYAwpdK!1XZ5SJw3YgP zoxdNRRSRxl+_;)=k${$3mtA9Rx(f^acF>ezZMW!qyT)mPU4f&Q?Er5)yM+Pe`&ehX zM7v^&zEhnnCP!)&4!!#o_|wuG)%8t%T${dV+aoiE!u4&$--U=`k|V93xXW+()VhRhAQNzO{Dh3AN5IXxjuQzeL zPd}tx&*n(S!Hu+)?jCWZRXW%m#X?1KUwTLsIQj9=s6#c#(cHR=H9@vVDaPCo9y7BB zIY@UxBRo+1EBdY{m1g9eRnPXxuB)1FaH_y~xa^opmKcQ_2tI>cG`Z@+`jM9N3h@OO zOK;W((se2Ow>}{jYsp?kqo>Z>`$zOz#$Z-r3Pe@GxB+M1Z(XkJ(&|cE5r1yV{EqC4 z(-t zX%PfM1g#*R7CHeYNsW@1UUG#IcschdeaNHaa3NQT#H4V;^zX3J4l!?rmun--)s<9b zu?dI9SL(0cPTcEfWo?!Kwnw@a#@E-30F`{OsIEF(X22ldmh);d8Kt`Q!oU~J5$_~q zpGz`cvu=|3q`$qZh)8;S*`x1E(JY|QT=>tFOfE8&c3$$P>uBX>S6D%ZFACs#h*R6Z z6Y2}HYW6e9M6FbemJUUNhLSh`$5vB&H{u8 z{qwtfmmp?2D-|BgmtcU6R&&UCe?JiI3^BCpX6Hx&Yo(;Nfi~A+3davQE16(kb9LbUjOdO&oUe~`L!=rl2^Yg<4!Z&i z=@Dt@XKyi|JaUy!VxFuiSbPrp@~@fePlaiKVmBC-930T2M)bPDKzotC%toOhI6)jU z@-{`Dsa&HXHF-mJdAXdy5eif7D!^#>;xt&;NBz&fdp-J^mWRF(-gkrfgUa@;@XzSn zRhn%8fLx~hk)-Pn1D0P%UciUz&0a$H4p|u*r>!1K5%H`L=a0%UHSj*w;=>KQuxx*= z)IiI_F*n2aRz6fKg!$g}WY(0G&`fk^L{Xbk>^5^hwOo$ZV_X|ZyYuei@UX<{YO$L0 z$%*4m=+a!*XHU@;#6oZ1kFO8aX_ta*GX8+altq z@R^*D-+tzUsoiA`MCM(~@Z)s)w@(xCLHF(goP0t2lUpG%aC#tx;R3}3z;w(&0hsfK zo#}>>N7JAd-XK^q&>j17k5NI``pZKl-zvi3p7J$6`LxiMh-s}k3LyJOl_XC=9~hzU z$@rXl=2nE!Oyb~7nF8xwNJ{TV)xT}!m+49))R(&vLe{=Wq;;XF}n{o;uMeW~!jvP;?NcD2wDNbNT zx)|LGV$$#o0iIV8%+He_pN{OOHAmp}2IB!{ zx4hHx!lgN=KHI23R6b|)anKvd9rglUjLI%VNI6)?DYyQhYEN8RO@#wh8tMI@ng3zO z79&5E@53W(NU>oyk_Gkv%}~D+$xcx}E4tOE1%UI}k$Ni`pd|~jAAuai5#{FWb_VtT z%a@)n9K~6{KEbnFT*o9O4YQ#2gs#OwE~1X;H?|nSeIc2o$&Nix?QAMrWeyVHC@lXc z>Po0CjG}Q`{9$hSU32aKu+QJ!K!;IBAj0Of-hW@Y>GBa}gDh% zzlmWuIpx|oUbOTZH}_9tc>D;ak`Wd{G_X9aK41p8p&}Y=QyMt!-Xi^{L625~f$6XW9eY$Bt9ZbCv$EcpIz zRncVR-g67Y`lo>baB~WxUP-u|QCq27<3tgkGPdW>=eR^1?VzH>sC2u(7mpCkYs7(^ z!wcyX;83Vu^>rxyJ~I3s1yt?tc)f}#9aF;T$AeEY!1oGG%k|GWZ82owGi_mIkx>Rf z*(P95Vo;T^c%EkEzEds0`LJhC7yox0aVqD_)8u^$oVT-Xbbt$;pq5U zPtYz|xl63V*}FJR$t@R5J<(IJSoS*Aa5^_N)m9?JqFv?8@U3S_J175Ys#76cB=6(s z0*r`(Tg`84aJ!a%-3*s5>uUp$scaMI4B zo>7lMzpsPvG-4^)x#+r0{q>y&e@gxG@TyGKo1(zIlkF$MlT@mmI2le6RZApWz6F%|w!y&9#$pZ&rkeq#vBGcaz+1 za-uT&nhEAQA;))19C^Fx@sDK2+hk4py|SRZ-hcILuBs4ED*o}$|7v{1Xur|BOI8g5|MAPK{{J_y<9`D<`X8Jga_kf&I*PNDlLd=;prMsneLvNI zxDvGGK*MWp7((jF_XmNVHw>!zCnuBw&7qlgcE0p}r~=2A3aj;V4T#+Q%Of~J`?+)1 z)4ru#hVT1(iMEn&6i@aCgAFSeRr?R6D9w((9x`P3(9QlP{53a=E3wgGW(+4y)vLqb zi%$_wE#g}v@Iogf?_mN4xY~it03mP52RqD_GT1dY(v!z!)+HDA8w+~zzQfuB=bcQM zo+MdZ-9k$HB##NT$BJ1s(JNRa%^R&oB~N=B3qN{cxR`;2FP%WHsFIhXg)2NlXJxVy*%pdmE^A$)N=Q*z| z?c{x4mX87p)fOw-EBk>?@3$Uh)kX{X$-%*OsoD6Wiv+oV@$!20ow%-KUZQYitR2MI z(1%rL0JG;lxHdl0h+Brm@wrRw8g6uISY&eJ!G*!&i@!sS-!WuWodHApY&5Pl#E#sX zahO_PA`&QnZm|b|4KhY8zY+iAQMvp1^#`kaspgT zZf-AB&V<^=8VAQJMxAl1$&!H=x%S!B^;UC}6UWwCx3Iy}1&Kc(XOG`~0P*zC^u0zy zGvPbbH$P!RP>qe#fL5yZh7=#Zt9#j#z-aNyFYY*F>;k|I^9WIJ3%~ma5jipKdg;TW z;$}LWkfwoaO};(G1Um0Nl6K}I=z+j{W(RW~!ujPMcv*uA=^>!vDO?N3ip!0Ur+UBg zBI{Gh<_?OiREg7=VNlkYcuAq}P(!X^Xs7>3TVTAm!oQb#}Cv+;D4sthZ)rZhGM3JMP8;L%3uUkJPpV zpZbr-`R>mzATj^|8A4-{&;ci?&hs7o)wIFWYBX3(Dpv76nnBiylM8+^M4ZnZqViU3 z0V|n8Wkb0cG+I|pP!OkTH&*$ERs{`77hnCBxM`HSVpe*=Hd>wErlvnsyhz+{3{};f z!IZtl#MvB|`m}Q10@GMSS+;HY-9&Y3RuhIHTs`N?HgFcDK|q+^aJE=`VmMzGZoF_1 z`u*Ezes&B0aWd|kEu~oEp^~}?K#sTk{=EpQAbfzsEwvAi<+!*er>$?%6YDvY4VUN5 z^jS-L#kkCKg`mX}1Bz#jUC=~#qgcprY8T9G@a>B6gs~?xkLSeJgP}b88;~yhm-#(t z)U>+fy*Msi-f$>LoSUGCun%Ny15?`NZby4EL^A^-WbOO;MabA+p#(qwp@)cv-m3~X z6a(y*Kek$EjPsXu#?b1#SAuT48ZumVYR4mD_OIKsZ`(e$_Bk@rzS7ShH5AXBl(_lZ z%gITZpLIGfFuUscbvul8bV^>-3~`q4EKMgm2jji3jMG|1XGRA)vYMQvq@~mI!weoE zU7C-cOSdvCc*pUrUv}*X8gL%??y^Ng$NThTPn?3;3vOO@c7)^+PQO* zp1#2QS}Xz2!!sgBo?BwvnFgT8iyK zk1rYX0xN@8Fi#a&oS7~2O_E!W0nL@Dl;ogg*}cb95Kn$3L2MFxqPnDZQd#*o zP4{uf=qUR!VV$$xLe@o>V4JId%2kb?%2fE+IJL+LTde-#wIzG!9BEro0d@Z3#+@=b zpZuHDB$d-msB&dP`Yv&%DM84cMLzTW=!l)}hr*`nXf zzult2EVq&m9PXHQo{xe0&% zRNYcthXa;7(bBQcFteF^#{4ne#J}%Vr`^3pYVG9k#+{{OaHU&6j;0h?RV|&PtJ^;y zCr~)LEMXmrxW#VcdY`d!QxU1tt`(y5u)?TCj?L2N@m7Rc45>A?$dWN;9d3K_nr#wV z6@fG;Wr7k9f;athx`*9w9q5@Y)#W+%a+6COKc7J$Adhf0Z@NiIQ9D>eYhKu%ilm|f zCrk`)F){3ZJrk)YTkI0cp5lirDGa`ICw8)Y!u?vYReQOy~Fg<)-L#squ zYDem*yr^`~-uF9c(f@J0ydBsGk&6F}+Pj8po3r=CoU|I#xL~DJE|_f_CJJ~{BE8k^ ztSGr*T<#Z7!E~cMk5!th?|vF@IQQuY(x)o`hPiiCPvPw*da~VmH^wwxr|j2LwjA;- zyC`eWAsO+kV&-;ciRDZB6-L=kb!L6t#=|2X-7nKQWa=@=zMuzf?F7orkB-n;pa}Eh zp>J$=aoWkj(F#rR6&DVVs-KT(o|qq_>2eDBp5jT|wIVG9!FMLMJ&KU{s@{6^ z25XkW3mDugHY>qmDUg1Yr{>S`lMT4zY&i3lMD-ir4kC5KmG7#=+jh`suqQ)=U>hNM z>s~BSk}I?Aqxyc)9a3^Ovi^D#SR$Qh;R z3Z`*(v)i=xor%u%zTdxA5i&yS60^{Cs8+XF#3ziD zc|NVN`QvKXZ(K>K!CPYs3AJqTy{&tu6MrNitBN;if6Z@de??Q)a%l8U&dtu>e!))u zf{co?&ne3=f3RkO&@s;qo{wV|W1Q|;8VCHDj2&~PF0HgvQsbh2)%EBnhBh0Xv@)F6 zND7|)Wq4Sc{Z2`=GnV;*R++BK!O7$E9)CKRgz5G^V`V`sjmSnVrCjtZEuaks(x$&7 z^<6p&iTS?lQkWY4UCCLH!7AF8<2*HqT@gBACZtBu!wncr$;{VC@(nY~-io)Wl!< zb%yjTKspH@A1>48j5MGyuSq8=BO1DkPi9^lcC5Tfc_eFiIy?EuMOJP-==rSa=}x9i z@kKeP(AI8Yz;ZbZdC%6rR@{2GDg?xHJ8;S2+j~t74;$oJ*ZC2N-Ceb0xU$sYZZo=a zdYEQ+wz8gH|1U@5%=h)->o9K|)UYe%y7LUavnuRF_NYL=^if?3Ce3qY)VL!R8UJXb zY)+oKp1mB|%2=Rt5^tH5r{YTSTpBgjdgYv@Uu@PMRO+05*7R`|PpIp%6DEyo91X}; zr(G&$tzGO^Qo49!n0!{2hh zoHeCQ1PYrp?iKb1(XiM3>=v7MV8{Ctu9kK^yJiHZv-!SAxxCz$m*s;l-@KRiX z`aNP+xbdN?DBiAZIaleaCRD6EgW@nc9`nRniv3Hg;ZT8HodipKhZdQ{vJwL@8Q{&6 z=wp-v2h{2Dl%4bq(nDpLA#Z z3r$}-Y>Id}g9M!@Xn1l#}0nN{4ea`N-^P z(4QZ2XYR8VfA;}zu_HS1s7HN0dV#h}YDa;{C@7*?HVA6Y=UDz&Z($M)Roc4I;P&0~ zgh9-QuSSHc5E>rve(S@K5Y~XMbLz7NHyOY0tCIW~^|id!4?j9qUyc;Nb)S|azaL~2 zndahtrVHF7h8w4X-F#Q7MS3Ql5%%^MeM=rmOlHGBrt(Yh4F1s@j%ro>ae>fYahkHpxs$0ZX7CBy-N=9NPcPQlqCDIqR3+y&svotsZFX04tUNv-&~!jEJUe71kCJs!caBL(MGX?cgj2 z-n&I-V|LOhJ|RIeCJ_Zm&+16-j_a|#C=$u7{>XBKL%fbha^bU{AsB+qT)4kSQL$FH ztm&DfnuN#i_wL$G)lerB?NoiWbMRIV^>@L*B z?<&eZ)muhuB*(6O)=g*)Rb7$rhS9kBKt(({of5OxhK{)E^pI%o~Lk+v< z?qGse37I%}=a`k66Le>9N;&#ba=Px{(l5KqmHr$(>ewzgonK0WnkgPUm%sZ^t3S#_3dHTeT zTtmG9XQFmlpbyHqBC-gRaD3d4f-pOj<#6CShSiH&FHMGlzx2oHlFZ)KjoSV~O%II& z1gMh6&egHQ{HxE}Mp+k)sM}qLHSuV7(p{Eupaw=M+I+Y+|IhV=CwP5aIzF9H7^?7xD29vb^!D10n=%GmTX1k9fr zeOAIhDv?KTo1Twz)Gite3l@z8s6tYj_SLiU6t4s#6o@iv z(*8?6Bh9OtVg^J+D8M|^d-^uX^u8k}d8m*W$3A_}*}HcCfeg>pnZMOFySo=^e^Wrr zPK>$S(4;$55gU}_%$tmyulv-DR+O7-^B0%dYaINFziDX~CA&}TW=<|%i*9mn1>rTy z3)M4UtlyI0v(n6F8#*c#k0dS&gxEQm_6|dO2W6h|=bxXWsY(#>(Fh|Qjvgp(^>+B2 zwIF5+4b$Yfi7b|tiz~kQQQsoT&>2?5m+#6&+Cd{f(U#jx*7ao)9ekXfHy(eJBjZ`FhX`i~IFaoHoyS(7i~naRwe zM%siI>PBPF>9V}?#oJfjPu66p$2i#!tlUkct8W}j$o>6ievZ#6r@pyQp_u5o@!Mgl zD*kpgy_;_3^`UGCDk|(M9Y0w!>mlbtPm?A;&Kh)5b5c)V4DR=XkKz}Tk&`%l6Yku^ z?o|34{@cIzr@Ki2lK!F+yiEBWT?9(lSL#XK%sAJgHT|>i-yh#9wc~d(GcUB+xF*)v zwf}t3EH^^t(D>t@b*i38+%7iupL-w2 zv5y_S+X11iMa=Yo0ZMKI@*5y5ly!L#BtLY+lw!Xin=`=(V68KQMb90-4G})HelWb3 zZ`;QGPkl*{xs>9z7g8l-)I~(Z5wrz&FM7FKQ&!Ey7-7o06)^bX0;^p>0UYrrhUqB!Q2F32uy} z%pzKPJi1$N+`)C%k)VcR_M8ubh?DRak{(X(jkJ@B;pF2(PkFClTN}|y6ZAigY}(8v znvpfUW@-sij^32D4nEj@Q|;o02M`KAY6&^#HKmR4x@e;}>M>;Qgp(@{5;uGoG=zT` zIgY*f5I7o=-hdatjW?Gs{2~v#^mpWGJdDsT7#3?;3#O!Ko!q5I{G1C@-=i0Y)!5I? zs8y~1wmof8>4EJGe$N~aKDVpsJo2|00seC>7V;S=!VPu>E1;ikZf4h)m2gs{W#8jv zk#on(`_{*$VxS19Sh3Qk917jNea}u*(`WH$IgdBjJ}4mGYNkP3L84u?X8ZH6ep5y6 z?eWmn?ch-!ea7vXHhw>=W=KQ0t^%WncViT9r*|)B%^?G0Fx1<7;HageF&h3ik z`mm4tg#5zMj#B5a2;+>c@vB4)Y41n}@(}Z}CN%_34CD#FI$QE+!=4J5FXWw#|E4W? zQqcNa!udkWQITHzp0M4vb{|{(;MZ%Iy}?vC3-#30LMzs$UEIp$z)AAR%7o{HdmKHD zoO|A9y5wt29I(ycV%;RJ*VdnqZwyv@rX9OJvP0?1fIuz3`B8S= zVB|G?o;B5BsAJLC30Ym7*RuV&C^eatxq&&_R%52|!sXPRjeMzf{vwpMmQH-i&L&w! zd}!q1bjTN%=LiYy!pU)R8}k;ZvfDfI7%rFQ4WG6b@~qFN_aiclHM=LA+1mk%*k>BD zqlZg+ZF6q(T9UfoU@;U{j0{(A>3GH9%+ul6r0&`9kqTww_Cc;7^exv6x%HW?@RFsA z*=>P?&-f8H0wQw41$K`gwM_3$ws~gWWRSGCtk;s+(=OX8BBKqdgw^N_!hLek1+kiO z6_e*qsaU#eQqb6uQhT1$nw)7&RBJFQzV66%TF)JmuWfKr%1r{e7rW6iLUZ$#EoD)& z;Tawa8g&eG;)2|g20oM`s5i(NCc|uh{r5sLdo{OzHf*_`f) zhuVy@3R|sf^HJ^_Ayc|em1n9t3O6G?MD-i8@nZl62zx z^s-Zpm|mU9Sy3q=m58+gHOhM9u=|YsM%!kW+nrzJ=w#KlEEJREr2p5CeSCarWwsQR zpy+UXaKB3cpZ78+Wnpxo+B=xvEoFIrjP_-I+&PA?ocX8h{J0JKZU}Dq{rGUKeK{1C zHngRzUhM~4RU0IA)DfkI#I`C^4MJIYRdzbxY6QF%%8Rx3hp9W104yR?BB$WK>9O*5 z+6y)cGFNHCKSH(hI*#;zxlPZSd3~_+$zyH&0m;c{^{fQFejwC5|3X@G9$>>x@qqE6 zCLFd%p${b5fPTX?iM`A?Kqtd?Cs;4GJdVC?(Z2nI?oHh!e(xm(&59rLNNvc(2fvS3 zv|@A?+AnQ*rPSKEb>`@eThe z9HW?23qHPdPC}>6e7RsW)v`pO7C=1wtfrom(|5jvfX;X-u@R9iCMbQ?rO!Pz-ebvd zfG-d8S%z6SAen{ULVmyI!Q9feH9t~)EOcMSeyO)jccW$PUbrueV=Q9S4X1qiFQbFy zW=kPu$`~!+Qo-;0%SNS%FOD@p)R}{Cfi06EE4I|?i{XIif`Mo#JzoT^O zb%b>gB_dx6OM8~x5RI^StrT}g4Y1bb$r|>&SmRpTf+NEWt+x23pcrCvn?yy<(#{Ag zxRM=v_O$)D`xs$0qt-ovmL?ePHVUY&mOyICd&a;$MtCg@OyPegPSb?9(<9?fWV#Up z4EufPow|h#EiuQQzzAkkL|@Ceo2sNo-+rXFgLdp>IV&Om)@P-%FNXad^Lh_|S`=)P zO3U}R_E9)Lv!lM_nArTC;H~eBo0l7&uB>|J$rt4jD!*xCyYtmKl%Ka^PI8AmcMdBP zGlrabA)~T={R?Y3v;d)*Dg0vhv(ovRd9p1dxA}~p*4OOBx3_|B`c=9(iaVzRt`}kK z60DTqkllD`RsgEew2V*N6sOY6tilQ~Rf1+JNPoL|IS~Uz6`;<4d|_ zx9jR9beZ3;CwmR{bs60hD5z?+#FbP=(-ImouaGa)^ta0Zx*}b&L$eZ z&JE9%s328z0rPN>Aq+lvG7`nr-}1R6V2(|b9O1LET!oDiEo+g-Q9qsyI2j}x`Q6#2 ztECsIUH2femOSbBnDi&bXr)hw|Bccu66g^;pDN66WbEDgmt|G;b%bc_ zYkc9#%|_pQd69uxdRwhmF43uzd%2DlG%*lSYU)9k+V{0)KSW`_-hESs?GWKzoFyqd z@2xPNKfvGl;Ba=4?Djnq4bvA$LACd?T!JM@l%XCSbwkyd2D;^84LpAT(LFCFhrNl zRUE$XE#X=v*{42Nu(Y}YRE1`uw6O*k>Z@LJ9doh=&A>YwzaSk)Yg25xCi6=aMh*qeKrk4k7xOQ zYF_@h1f=~#A>L2^_cw9KUZT74?EqSdXYhVQTN%HPP2s?9+!M>5K)p}qJ3YfF1L2~q zA8o|3Jd6G_G*xU|hL53()nmr}AONTgy<03P3oT@Bm!`JrIfy7$bHX(fEa!idrJHze zfpFz*6GumQW*5~{j{p6|FLvK=dNf3YhuIhyz4`Xd#M$7rIH;^r&B9;L?{BMZ{!Ndb2XJ0rk## zwYRKNfp;se9~#^Q&0v;QWX86rhQQ&}odK#OlR=p%HSP45MJmsOWe>A(1gt2>^1Sl*+UntC5-gnwll2P z*2c+m-`BhOw>}O3vWMsQzy^NQ8fxXpsxwIVG%-z!k^?BR*NIh?kJ&@n)M&UzmMA9e z20=wBxYuL$YVX3MDpA(QSvwWHk?V{&@X!~Ed!7M(^gUA#rHwJNa98qk3M{kFhV+gST{0Z+9NivGJmjMS^$bZ@rxy5|s5fkbay(a(7Lg>2>~K z#tL_vq)u5)uBNgp>9z0s#@fnah8hjCUp3#1^QeA*WZ3uH!iw3sD2`7>o!Ry18_(5& zf#LWx|1%2wb(qKf#okR_$_d`A5F^($g%i8zLSeuIX7o+|D?-|+pbJShj6Y3Z5si@cI3O64BL*_FEe~WZPPm-f} ziQZr{1Gx3UjaK&mha&t_{H8neP#dM!4ibY2F#7r>&ia$Debf7y$uk zN$aV?088sxvAiO3>NG9ZO%-)Zw>5iheK>3(u!bwar&P|3X+>H3rZCorIPrF>)nV-{ zRwE9_eW_3Oh>asz2ZPSlcjO|Jra7QAm-X3rJ- z*bPiSdJ1#U3x>sW3qF@`QQf>@Tzua3!o52QN;QWMr#D@cL$aaZr~)opLIt+WyvZ;L z>&9S?FQleV(R_dyJmI&;YF_5jJu|x&fTnd(gOWyDFEuhJ)nX7-4U|%FXL@Ga@X@CF zI?*{s3d}GAaBi57V(7JUFDt8*ek%m`ZsB-iuEWI%rFeo)6IgPbcjb> z=1Tx@KNlX>z@Ta9Sr+f`;P=X@sz-Om=xGhM%kH5j<}h|R_2em!6r1{4GK(fkSKe=A z062@J7Yi%*zf8zzQ{p9f)EFj*fpbL+ztDJ(x7G_I_qEM9X6x0Hye{omFNwED!eDwotQi<5t04c_d?7AV@L(zJO_0 zUG4oDPiXDa06drn;xvmKzkl^&KL_x<2bO(x7`$K4m>>lP2DOAptTsiix7q2i*xyTK zO_}9M+QIT0N^!FXOvudjOSwA0D6$&Wl~yD{j8h_OB!(%%fJ#YYmW!AH`|oMJq{HG~ zF@3&mYKn?Vr(|UEYgg&-0+TW{cVDXe2B+K1*{5%bSHIQQ|H|1ohH(K$PE;?I#%(WcIXw&Agk zjSj5W<$HJRdYu{+0Zu9%Y&?n5y`A)VGOo~kLJ5E!HUVhpQMFXYJFq@qw;|Uu<c$Eb=kwrtka9?>$L`*m7vsXNtY*_*vZKK@8#i#~z!IM>1OIfUHDL&5` zD%*HxU`Ui>ar(|exe-yywkIRP$Q`MZuF>Znwbi5(* ztb!eNtq683$$0`}=*8-&`}FBmN1fi!*?M2DBwvHbmw(qZaV7@#N! z(GGM;+8_>!yF?19y{D~Z|6M=)&kBYq4lm@0heN{djtg2E!Xz$_FDW*48Vc$9Oalmh4dRj_~CfnWEeqoMr7~gHtyWp2QK!<*obU3cb+O#UPustleKKiTLHF6;%v+7>N!9WXat^O zLN(0|F#W(Yw}Hv!Z(jHJfB8xPuqn1g zVr^wEW43gxKi$urHJ*fE=Ci)p_|j^i@To3|1=P52{Rcs2#RxFreM+QTV(LLS9~oB4 zzS6a{dfbY7gs6~Ae%~roS1R~t{L-Hyoj*6f8%Ra`hSXGNohgw1LHf*gBHyjM!*eQR zs!;Hx=722^q4{Qw@1?zx&~$A~-B^cylE`C7dWBb6y!Wz|dgPg_?Ae(sYa-&}v?tpS z%zZqdX*p0G2>&Pgtm(6g-;dL*iCfo(=fyrG?FIF|eV4O?Sl1(61y zlE;;h3N;nBFJHaQLL!vlJMSFa??V8I#%OA%d@Fz35NsrT{UEKzc>NT$Ujl9lTZ-~} z-&c_EJnLKjVuM1V2#|e1kUxc#@oL{@_+b7NvK4iqmspv!-)phTmG!wiwbs<8Q%W6@ z#IZgx1!&Ys*%6>32^2Pb>bmY!^?NJMR_-&t1~3K$_nvb=0BK`Wsp3N`L`?J{6!!Gk zLnm}qr(8Qc`;*T721OIQt_yywfr+q2KALfZ@Hos-BlxUmT=^-(X@5sY(*n#~bMFOV z&@}*A(lbKBhJ+_E?6?W+WnlWxTEt}s#yAv$2oGAx%52%#fCw?8-K?`u3{Ff? z*cc86$>sGe9cdpv!GCUI%EIEhs)m2t z2bX?!=x&ImG)KxUhngaWvO^Fallx^^-wg06IQ^JVeC$oTqv|=PWX8+zWcKsiD7W^< zlBZlCWu2XRj5~Ya=M>a&7m+en-?g$boUCU;yM5iL>zT7na{8t)WlB(SFk0H>^)()j zzge$VsGkYb@|xitCQ@m=(_b9%Db83OR{P@(yZ~i!*>BmAetT_x#mUh5YZPwYr@?I4 zs!MBgjA!qZU8eAM74_}0%sp}|Mx2}|+z{8Hh)?DuFhxGn#uKy`&IiszTSY{Q>_Wt; z{Y2bRDFV)++`(~HawhT^rUcHS4J*8cjBUobG8bJd{gTQLmG|;~EbJ0HCM*o?SU%;n zZ2e?ph!7H=m6bJDCrZr7%2HA0v3~-wBF&}GO&Nu{H1#++NJho9`lS}52y0+H^7CNt z-vPz!Rl#F&Xt$-Oka`0oqf{k`guj;O(~&bPt7BaifuOXZH6L3;tVh(AE(O&96QPxk zGsB_-^p8xm2_R)l?~MdU-_!?gULVo%j$VjFL9#1g_3`Zo;3B``QvhvC9vlE!AonpM zZ;`D{DY&1-owa@5ER1OCW2g*2~KF^}>lwK0iKkwHg6J9oo2! z0izCaiJ{x4f8bLV)(icCGycy#<2h_{96vXCvi}Ai&|tPuC?E3~GJW^q0b=0b%G|h6 zS#OcDY5BJ#$Ai3_T6W71D`W+cy=7*H+eAbOV`81LI4Rq@UN^PP?y5U<#V%!goKz=r zR@!{}C~vN^qa5wrqbd{v(~OJ{Y(%m*Q%MWUB`oCVwjncYPf~$IMM>jj*!cKXhXFSg zhw^9qvN!yW6FWsiGQA%*+&fo4uwB=e*-!QZyv?a*b5ou5Ss0@*`th|gbKWBX4WMTb zuhexeLzdkDLVjpG1mWJEx0Q8qZ*f9fYpc^h;Dx&TQZ{v=!VX{zosrSJGDRgyP*=6X z!a(z~?TPY)bJ;Tv-Yh1OY9uTyyj3>)r}fo;i4o{z^|pLY8@6z&CR7@C?VOKB3?W$V zs05NtC+QA4jg4~khYNt1gZ6c^2LTR7)d*rH*)RrcfjepNJg4z8v9pZ%ZN}9TQzElB z*FV_KOifemIf@zjQKnw$i64U5Weas4=m=}?oy#9@CrU&e(6dN1Pg;Q>Ic>=JV%%jYPn;WX(Qe}nYD?tMsj z?7hqJ2p9VTA{Hw&(POcYdjyx|j@0fH=jFaF0b3m8v4C6xUw8^R)|wfYa^`AH4Nm}>5kf4y}fZ)tlP{q5A=E#W2B`2R)SaMx3zeEa4CAWm;{elV%&=F%rFH zaX`ZW^qi}E-8B;4**dOpMJlDY^j^DLAJt_KQoBFCcT8uX_e>ci5+%|Nm6@*)VY}Zeim*<`?TR4=Id|Yy9T#HQu0$Vp%Dazk&Fcg{m zr!c5Glae-v)n>(ZuqF22ojur`iK#T1(U$EM?=xQ;ea2u3^Y*=We8v?)f3JdPf_NJ&&j0NfY8}}Q>YVaIm}zj zrvk#VV)`yU4vKM00Jc#5{Z%Dh*7v&|%`iWO)FNTtuMgBQa5K{%oJNqX2xU$1rwDX|@yy28-5F%s+k?LjY#NH|!bs;VARo6?fbLm-IDD&r;1=U({dZvUnhQ*s6525gmg z^^AVEbVF7hC)d&Bm8o(xz>{!}D;>^tOm~*Cn|pyzanz7EN{@GX2{i}gQUI|e{rCZr z?d551DW^LW`$^zc%L$3q|?_<458SI2e;mEM}j|8^1wBf<18c0b;SxXpT}DBdietFeY!$M+W$+; zsla=leo9c<=!EjFmUrI1ri5Mx7e6-Mg7paIb#|pJL4QHW!Hjh&$Ht^T7u-I--pr}v zSOJeC+-bHN+LkhJ^0bRBG69fB0>tp^UZu=5f&>Ror}1A0q@WfDK`G4A8Rp)o=jYy- zy+@gD9EPHoTiWwRoEgO^VbWvV?CH~|V?#FLXVXp!R@uBy;$&9?lGrp@R$zIbgh#~2 zX18fvQa_pCng49pk)#k!xu`QgJDQs-)yz0McF!~FMNjMb6?Q$A<=fktytmts_KHl7yV{l{mZD@7#Rwd^V&2or!Q7et2-P$aZx@;XaB)czhMi_@un3!pW=zWbdQG4AXoa%iZc*>^R5REaf<|)SsW(4&A1N1Uqw^)?XhGpFaFZe zpc-9${hZDXN1wRSHgoajdOOckjg1SKO z?2iI%6Yx@lfOpEyLL-5V3Mr{v(pC_Ch%X)qHN9NIH*m znTbgf$j_}t?{;Wm(Bfo9GH{bmpL7|xU-Ta48>mTHg@7SMl3VrKVQV(`X z?4rzgj`*|`65l!889iZ}Ble(vU{)1Ruc6-)BH`ZMJoXPR-|{!0S@t~(*tSOxWb*=B zvZ~o#j*Vm1gTq|Hg2Gqvy1LqFj~*RImGyvj%Kzm{5b3x=Uch-MECUK%Ev?sCxw&Yd zm;g`2hwKN@w(WQUoOn+aQytuHL(k$Vc#)u2aXI=x0)p{5dP?{II>j}3hR{B$Lk!(pG>P=JAqjK}r!$CrwNh12F=kS#sTv7rtP3G=b*dL1_Rl@o{JV-uePGQ5 zBaJ&4S`}oREt3ICiQ?Rb#&$=i=NQb|48=f^udAh>nm^-!n`k$Js}KSI921J`5>wm4DaWbnjzADp!gAlSq|4(J?C<(oKeSCSMi(IS?jG8G z!_m?j9hRiv%!MEtQULgM7Fbq*`;1Cj;j9E+NDSDtrmX<{|CE>r;j; z!8`1Ky{aoa&vfW6WEr+#w*oFqywJSdYE2R;@Holl4GRlz1C@xj(${~?q+^{0g+8i) zlIwfzgnj+Md{%LBcHe3vFC#0dPMFZ0jc+|?dK74jLI9}cG!yH(a^HaMnL(7^flgGW zdLe52*F&To1)ogtYIyobdZ_VeTVb{c32UZP_#t~=T;)OQ^Bvtvwl54?UN}qN7fL1P z3xDK}OfVSJDMR~qMZj86X}))oNkiWL97`UZH~up$JpA$Y=3wV#aZ#e~z3Y)@C2Vwp zph-#)>E(gz1nDeW4}r|boX*$Jfrh{_Y=LvCbU@W^IGP+~NDpP{V(edE&$E2(;1(U&ns2+T54L@0K)nkw@OroV#tV-5(UE z_Q?6f9m+VWdU*_Q8G&rQi$D#Q%TXOvF4twCwlog*PH((JWIb5(Vx+44Q@Qi-(7pq_ zF!xv)5Ivwo2sXp>`3$Uxn5dqXRw5CQ>cMiW3HKQpuA9+bi7qMWJr?OKD=!si4Y zRFn$R5&eU@sr7b$&;)Alhwpo45N(i?eLUDb^~otpN8?4{_w}?=_2B85_*9D}Y)k2{ zi!)O6yEV9=T5tiC**d647AP~h)*#~SzNhsyU-W+{n8e9{|CVK1V^3~&EC|wZ=;+^1mPX1061BY3l!r1b^ZiV}RBkDd?wTnx7{^MqM zc2Tr_w$^pm;yO{0@3TwoGSc=`o~eFC`&7-;4sXS$kp~CPFe8KR&a9;JMqNuVrelUs z)=qzwhVA1@3biDBt2|vTHGU{07H&oT@4m&n4ywQ3CGS?WB?aZz-NQd~*%i_`d;yb| zEAfCo<%F!{8s%v9KQbAyQ-JF6(#e^f(d{OA8K!oV*q`_?G1tY%1JjA zU|5c>>8*q#-KaX@Sxe<2`x>0E%M!w_K&K>?4=cR=Hu+}RK`!&xZItudj_~b&j>C%g zmh290BKEYtlc@@m6Z@1IUOy0l#CP1+Ce;uTj9xl=ej#_Sg$N{@NB)U-Qr=WRAEf~= zl=Blv)1O{}&@m&`?8AfiDeWaIDKTZfuX^GgCI^<^Kl|tTz3Kn3Jo3M!Y(Fp2FIpwN z49bx^68|9)wBGL6g>m23wKciak36@x`O*Jv8n*u}5#-z44>tX`b>aADAlO(PtV&UQ1aWUbv ze^kGl9#V@N82$@ZUYN9hgt$%rQ{|@r4=|2@t@RYPZHQ-04wp9V`FTVOTFJyNCQ+YF zQ`NMuYP}Y)`W%&fk4zeuKDseGC2~qUTmX{YtB;pia(}HvQ6FT6XTvlLZtstGNJzWh zY?jpUko7nI^Bjwd0;3FmZykI6C?GOh{6xhB2Om!S5}Y@+v+c(MmKW>!3oUC^2HZ?; z$7=AnIqif|^E2<$`z@ip51(Q~EPuC6Z|%qIJ@B1S#W!ADDn7LPBj>?GqXQD&XW}=c z%_ilxHkyBqCr)`U!vyBlvkHj&BY%NUw*D-_u@OdBW0)!CTfgOB7#iu^4qU4nV@Kfh z#N_H^0FcpWvoIZeySQxNKXU)A`yhH39tK{iN>#5TO6u;++#&9UH&z|=)1cc#feleu z1e&|;!v|hC^w@u5)Wj}cvsxvFj9qp?>)Eula;_9MKyE)!T;S;N66^@#YOv(4Xo_r1 zuX*2an4RPcBANf&|o~ zWXOGm{5~rRlyhZ>(s;&1c(+Mk@&KR5v@|z-dq~P5xtq!9a;^iTvPM&PY$g%2OXV}m ztNHp%hkq$e6Q#UEI1;N?&)NG=ckSDM+yX}uuv(P}aq50*(V<@iP4`XZbKx|*PvJF8 z9YF9*8>RKB8nJ2L@aL*(NUbLpdQ48sPd8aDe`6X$$t(`2d=VDI{PCOD+**^bR4ltg zYWG;Dfy?C|g+Q1bWQbrQ;(gNAXUED!#D&|w{6=wFLvdv$l^5LfG>E`yXrzvRs-bOU=iZFl0G{Cdy1uUA+rh%wz27My++h$k#HvR-gXW8`1`Bk92wG z^lJ(Vg2*Mt&bij3{HHEmQWhsG17V$)*HZc=R%fj6>{`D^g3bJD6+Q*jXKF;s>dPf}K_FZ0mfsv*39m_bF+`v(#A6RkFOUP+3oXl~}yr!r1G zXO*qztZHgaiblp_rgY2(8wb|Cfa!@jYi!!cliGuIi@uBlSxA;@V+U+^l2a8ovQ=<6 z;SIF!hY3KsGfKO}AJH_WbNl|wM(F_o$_zDF0LgBoSf}h^Oe_Tk`QJoZCGt*8Trj+Q z+X80x9<}qiZX2v@9-_bD_AOU-2hXI2BQZ)Khw)ZRf;tTjsym_N0(0?h{vr)PBMbBvU!cbu6ajQm|*IDw%^ zsR9d(*9Bdj!IW2OgF#VddAYWm+m`AXaG^J}qb!7})c^iQhz*DY8q7^|4S+~Db7n>* zEF66UUxXFC>E@Oy1qM4?6Fl{y-{w-yt(zH4TdylSBeKstGJ@Ccj&Z`4)%0 z$`3tt>hUs+Z7h%zs>hwx1ZLiJylsGW1MeOGBi+c286tDH_?^8waD67SO9>Zr^--vk z*@9azufrqs>IUc8lF@4CUOu9LRReuDTgbtd<=nOnwjbZJr3x(d7g&=gjgK(s(Ghmp z8(%^sj@~WiU2$7#2o5d48JI@A9lAYrKf=A|`3Vpj+Kn$P$Xn2Osco6?k#C+KK79@b z8tLi}wqKA}Yd+9K5l2E6eIa)?$Wb4z8sDl7HU{Ua4RtX|?V$n#OHbs@4>Q$bq>X`9 zf=WYI`&zk(s7T>t`FcZE-+xKbPm5E2F0tH$y?fL1Q9Jfo`EpWdY=zsx) zRQLlGLfuHS5&$cs^2BnRC!x=FjVIe*c-a90nZQ9~uayJH)-lA`{G;N% zb3RykH&v_#?F+2~i?jjT!-Vrnfs)}%xJpUv=f2i2k;|;f+ylxSVGX4PUZZv)>4@TS z4)KWkj7A~o7k5kv%957HgBrP%Nu6!!goXvY0Jvd|Efd6>;bZ+3QY(PO6q)3(my`X5 zjV$iwg)`uv#^UyF|H`U9W75@VWz%V1JG}GB=JbYW3pIJ?#eFQA&G>4(^w>pHI>@L4 zYeLdK_qk=C7_)QKoESxT%u<>H&Dyj>paC;aX6kcD;Os9!n4KjiK2?h=J^$9JG7sXA zm&Zc$XXyX|!t$6ujiXI&DyiA>H@2+}xhZt$*8!)Hb=6El$1ITuD-mmnmznr}B~iG*!y=F}*(lS|2;<~Jls*m4e=^S-S$wUG z)Q+<@gXd6+fZ}D4&tu-GXfq0FpolVjY}(WpYNPux!2e}4?}d%?4|-(FGAs2njZgkj zX+>3!P6NrGjzzEOGv3^K@ok0OP9?I@7o~4niOEwf$-^pm?+wSaea$Kw{(AQbhXXIV zKbKpP*?Xg>6k7&fg;3P){SqVX;hQ)4*rhk47|itsSgwdS<_R#Gr#0_GPrdF>DGa5N z(^Q9EDYC+pIOL>UQT&knY?t+1k7P~!?SlGs`?UNEgJ9Yq&R;z6r!)@-Yph#cFg2B} z*w{Vwlct7j^$0YcaFi;l>K)Ee6cl!`i3bY2_C8&|(4l*VM#dn8cL^B@lv*p2tJoOOFau}ZyD~sSNoa5ZUCaHm&V%&D@Ity#pbKa>*-f6 zb-nNbv8lIg;IxJF)bSWxzr5VS_vpdFsr%b`xVTREeYkshs!cTHANd)A&AyCyFPb^T z4TAtuoni)IMQBZ0wI=wmNI=!`jzV!9y6hlYr=y-ZOWTQ;=5Zd#YtuKhh$ql{M~Yk9 zFh_$4S%fj$3n|_nXm-DiLzhbkPfD+*2HG| z&%_P4X%obl>ksCd<9v(R38i%PK(Mp}vB(V`;J_Do_KiO~CG3VJk2K1deY}pMhAD)t|0p(q&+qYk8bz{MY)2Z>u$t`>!0ixhq z4bl$>bBXD{$;uLW`s`Vq{zQ9rv~zZuPT82A(n=hv4G<3Z*;M7g;lV-9x?b*#Wm*w7 z%U@Nc(9$ZgYPgB2+0lIBPZhkBxt*4g_uV+J@ArGnpL~Vb?LPL^9t84Wm-@rs2Z0f8 z9AHg48?8uLRS&RW%vTio{vh{&Jw|25mYjF8dgF4Yem!s`q{5J;6;#BqcOxMnr&A`5Mp7(Wq0|n;kW-P&J#qekDuslnaMxua50Q~(A`uj5Od8*YL_N6{c> zJ45c5?9fMVD2?m4hievIu;P-hUycg`l{I_%k9w{$Npx~tKBKSMG3VprmG8| zs-j0~hx>KCuWC{9==Y@pDI@m>mLmGsvQ&vB3c+$~{1_rx^F`a#rt zQdXpTLf#dj5dA&4##;64|^zPIN(cZjo(tzdaq0+^26!ZHfc zpjm=iQD4UMfw5^6eL~A6efVy#(=as`>Zx0Cqac}*nd~~@G!e$d-PU-?G1L|sAi;Mn zwXhxRN;-8GdYl6>B!7B|W{mpRyLU_HD$l=6L_wE7+(8_83`5_)X*X}jRCO#u1>7B2 z)#g$$W9pZ_{a9b_#6@)Mya5ydul&r7UN@%v(aRbE-K`&^GMF_ld=3Yf;Tm2wm=nmK zU%mHwX)~~}g1`;k1}10p#a25V2W?Nv;8yq?muySwT>Gd^cflIbn^erp=z+OD83&?w z;hr28QxvRif478p_VE@3E4C~+YO80zr?`T6AJV~ix;+nsV3Sbln53X2=L;f0G z(&hbr*@c-)_!Oy8VfXP0pIRnsq)*xSRnu_D34!Y%y9*mfpy;;6YsWYb9#q9omJP_@ z8ZGYa7B+V z3#uQ~rlpC^xOu8*YHGRO>TT}Ly=@x-nTA;b{ouZRecxT{>qSGsd}`W0Z}*?gnCJpJ z%#0RuxX7b|jqAFTp|L}^PE?fm>fpBH(F|9+lKqdyNH+HdgnDaLYnFUE+ z`TVbYhu53i5gvmLd&0m;2Jh4%Xxg5O%@P>xAj{E0M;!%`$r^{#pvA%AUG=t~0pgu+ zk(p&2<2e5D9#=_jYxyGuyHN0App65d$P@%zZpIhAA0AdgojQpuuP|piK7dKPD_R# zX{TDm;l`a;_yXVC7S!{#JqYM}cK!Mj(E^WQa|xff(${##=z__$gQpJ>Op=oKEV^1J z7^g$gX6KR7xC*9#(1GN6r3S8Z*43-pYrZ)|g89RjLJ}8cM4F$Aa{Bh$uJK=>o*#Nw z>=2v$%8xx>w!TBXlK2@|(V^Ij#2luPOYwa6X(m@l5m{dCN=%L@8)u zfxzDr2MXFX;mfDhA`B(zt`$%qsYl7_0sMe(FEPCYh6CLzxP*(YAg8mXj_&BjHtZ4L z+ZJK$6u$q!@7rAguMtv@0-hEy6WF%vSGWHZEtyA}ORVI(UYu%~EAH?W`TO&qh1fRZdjq0EWJ>{U2a?<*Xne_K1rSV)77 zkm+O1!8$KDm-mt+VLvwquUvv2TL^D$L86n?b<%^ddu|bEl(Qav#~Tca)v8icRaDe& zraO;9BclfeUGZ}>Y+B`{nEaj%ZiYILT`kx`Vp@s8pdidq7n}NOR zo?n+>laC{?1mpbc@bh24)@RgKie&ytLjB)JAlRtx+4QbIxZh4&(G6^T%*mnxAJG=x zZu(CJYQJuK-BHc>m()+ad%D00dw1X0b1|4ZXJ923>t|fc9njK(NDe;*bWG|~Wv7wu zLP2E%D6-58L=l3>?c43ag=QHRmlY=t z{?uvC*tTfOn)K`;YXhSSJfPZCm!>rt=T%noInH;-s-_lzeEa*;ZsP_6R{&wBSlto* z6D{ub=xkc3)p>;5O#5cZbMPxX)}G$fa4}=6%f@*oq;eRmK82mHaWM#H5cG^Z7~AX% z{a=Ki_z3va=~Jx%#PU4j>K&WjTWj_ypInzy)Jbb-uS3|(Tk`9qH?^~0*lRg^?ZSgq zGp%DB?~EU{jcU_|)E&?$QMuf(R!n-kLG{4ArPsVr_i1wymZ4_Yqx)fwp7a+S@ekLTaw zwyhbQUH(3;TW?ZScfa6;tvbBn*6K>d`tQ^3fx|`#nzLLIEf3{bgmGP{Y0i3ts2wVx zr=`_?ecNe}2JT}qYGSch18m)<;|f|w zLz@OdU=axonBfKaj$G>;19pq!Hj-6{P(kMORFNFjSYJN|I!|+-KR-jVV<;U`{lL11 zCK_7A#)t zwZ>By&CXe2(c#}02&QGu`Sk1tBXhqYPd^D^;kKbzp49X-DOZk7cZ?;6y(A^<$|@@> zU*c|SM6fZ#eR+=bG%;zg7eGI6NSm9}ReZ8_C=Bq>;aMae+Kk!1!_5tyb0Ww ztd85=&jG9oK)Yx@ixr_wZ zaD48oN08bHMp2kz*C?px#Y?~NutsQuiG2U!jJ9f9T4sFvh7lIe4TB>@@0w@1+}bJt z&~rx|p*<#@-9RouT@T-}(|;`cC>KA0xgm|-aGOSeCSPU8>i)SmH3?c&Ia%ENNZZl1 zB@fL-K{rE;*$IW2#8j!)%PQAorRqbom&l5A=s) zy`F(9H>Iz{zC^ZqK(IcXU|KWpZ^N0ab&@aL8QUs|q(x8VtMgKuBq$p#7MKbXRGe2A zR?1L%{y01`G)EW}o@!>MqN=WCJ1J!v3y@vsZCn&4T>xPdmFDets5s3CH2o{kfLwb^ zNLu(!pES$_Z;4%K$sSiRc7VG|D~u{&ef+RssX$YrfC(T@?t;MR+t0S8KgtVU zHf=`IOT~<#G<+$};}|ZtxVRHpwsE@Td!-}EVWL!aS?!(iW_zVgev;{Jkf+Gt#uJl+ zWv;;|fqKttbx9AOvOVPFQRDB7lyni1bK0ON>i678M&}q9TX^g|B*r%GsJ(}O;Uo7q zV){o(1?8OC*{$o_9~c^@BNeB(Je<|T6y!bJuVHll$;kqUl!ZZh*TpYNu3;juYNoKnc;xq3V3?8aF8Pscr| zD~yT;@^sZZWPN4KKt$wpIP|}l6^+6W2B7YiN7^J%M(8(>l1wNIUoD^=#orGx;owXZeEgd|- zn`)}elgjR;U-n!cpCt}1bZ)F^MKm7Cr|C)>6*yDkJ%D18(=_+KtSn8F9GQqAlOl)XlMc=y#|QXNDHG< z1f&xJgrd?zlM;HlE6$vA|8vfl`{D8fOMtz1_I}@0p0(EV+%PB#3tSKBg;5yw6)}0c zRb3d|0`l}N;Jor)uDGw65BCyIibD|VQ^6Fa_clq5D{NjI4wU+Im%%)RPRIrOH8B;}TFDa7uolf%RDgriB* z&C{pPasnz!<^6S4qN1anXE&e1fC^)zy+v+O3O2e{tc*TvHQ*l&1I_CV-l*b@#Oeyu zf#hE6!Z*!@x0@y6wHDS8P)F;)`9t4Yt-#*xn-%9&jBL}Xqj<;cJ2LS$C2_W;GX2Kv zZ~=a9w2<2j{NoU=s4=^2@z~z6=C|o=VLW2t)YMwd7){*X<+)Tz9X@`rnrGjwg*P@f zmN?NldtD5pjD9EinlFSec9nRlvma%jT03SQ1#D-*B~!&d&GK+=cv1uI)MgLaX-1#v zxP?DTjA$Zh*GfKob?$ODKG4s4;yO|trKc{aLMk?8PCcNC~-WeX+FT(M% zgIavkz^gLH6nkHBP+%Dr%>$(iel7mUhbpFTs_(u|yX33|s9vw<*whoy@bc8!BPaOh z^*=<0Db+jPk1qslwz7rHc+K?R#2uvwsj&{MxLL<$>t|}>plBZb*(wH+j^IBh(v=MD z>rh86tRJ2;EfU8!-*L$-m@A7_DtBzh*#g@@TLm9h2sl8wQX|3?e25=|in|5ZS41h! zewSZ!h?wV&HW>+?^^He3LLZ4%ys`Txh_mxDW~OX$6nH zp57yo=u6%y-Ff=36okU-2XbxW7I{dGx6#FaOjG^ro%_wJB=>{n<6PXLvi#EX%k=J| zJ`s>^Ij6O{#R?07A|yVvwq2?+-E6;$g)#oa?PYb?s&2R=j_;7qt%_4k_qb_)MD-#D zF3hSm$5#Vwu9&`Iw*Z)%zhn6O`a9c{(7J`ZJJylM`7C@blEdU%*^c~J9)A7HFx+)8 z`EajnzTN@(0;d0tnPbdUYx!XXI1S~8>X~FZfK99u|HNt2*LylmP9^YS?Jzy3k6-m# zU5=STL}6j!u4LIn#-``59w9i|-zm7&m2al-RJ9ma)K?99#awU_z2yv1=mafRrLX(P zou6-&UlazG1|UkSO4+M00!A<`_lA{~)xzAEf-U?gc!1#W(5UROiqU*kHXp@{@l&Ol z`24{WE}rsSEa9qZ*N%saMrQ=>!ETqOlB)yxn&XL=oV(GwFl!ck;3fV0S&MVq<#^~X zEofQb3tTRNKr$0hw*mhx6=_IiIOR4SVEm2zawk9^SB#mF2L$b6afN*S4s|Z@IC%xy zILWDg7eP{3yOuwl-hGgj^&;<_!=9dL+qik2LA&1D0c9!eM60nSr=E z9pu0ab4^oYCC5)RL32SeyD(*RsI)1Q?LeFiW8$}<1Ezz24@q6jqQDpj%%T?J)yvU?_of2aIoR>u8ifc)%@)I` zn0=4#^~RTG!JHuyP`ik-?m5qH%2E9<4Fdwi`XWkw*>FW(=VS*&l}QBBwt4*_1&x(K zcYKS|#v$u6Q4}a)#8TZ4KJ_9^@&B&gqC@6i!u!yFx2lG z@ESnLPleo+xV^kXn2BHH8FVUYbS*;S?7qf{R;%0{vddac1|4QM9MDnHR-i6O z;S8+tZ3?AK;10H;i1`UV6@(nxU*kwmaNA@5xb3#n+KSt^0_ZcW;8Za?sjXAZI$%(r zJdusf;~3_nB?f%A_5M1MB<)N=;bP9L}TObIxWmh;9Pe+_Uq4NC$dnv_D}ReVrOJbwVAMCzD$n$bk>2xH}Q=% zRjkSxXTpwG4h3#6Yc8x-;xr5UK1KCqgmx2dTZe#Dl36cc(Xx?bnrI}Ue^l@=v>a`)e*KMaf;h*?{ygy;h&#{uG6S|krm$Y zU>%(E)z6^fSFU)HKJ#H$FKx|_OQD;n`9Zva#>;RoH$~ zE`jQ~=$*C)B>DLdhwCgdy1F4W;PjgW0iF+r7huupgTe>2WF<{Xj%O7%W<$NL&U~2_ z+41H3XRofdQ(%B|ay?*Z&VDk^vIfHOHPMv^pDj44MDAs%o=CstPUD=Oq}8+S=|L8F#C;@bIhhs0i?o zP3bDIR)-q~pWf3wH(AspO?e6Z=Hh1Ya0-?OYcFGtqkJJMGjhYu4F(|(7$}-l+B}8u z5HQeAeVhTL6L5zhVX+TWMj6JV1R_9KPRTGkF9MX5$@}O?m2VFlTQZYHRCf=P$@C4J_vr z#GE^=XbQy>twd>nv__kp3MQ8HwGHrw?ex;ae0+F(oq6tR+*XAW?-_%`>?g7{#pNuJ zFXo%&x7#z{iQsEbhg0ykJ;$7zqD`$UqM{x;U3b#{oVr8w9shn4wZd1gA{iSiBH7D! zR#bTsD))oIQ$2U}Kc)V7bn?&W zKd;C{KbhWtYGb-u<@A|TuYccj<;MnHQBh~?t!L}j;O9k~S*5i>Px-ctGb=yGwcdWC zCOGcMJZwNB9x%xk%CGww;93+tBi+V{0u@)cA|kx5c%-C_v8z%t-Snn^qrL$S5e-~j zsKV!%KucfQkzxh;B{Po?L;EK<50%iDWioM%Ikd>*fvXpfGGXs89KGj- zw^8X=Tt3ncvyb|<$$c=hMMcqQGypGBe!hPtLya^t_%d|orh~&zorAxM5f3aL2vnHa zvPT^#*~7PRqVN0NMo?Ti`PUGU{G}bUEwgcA#O*?Zqnmlbr)fTsiqHI+@i!PQU^uk? z7mwnmD2M8`YhNrK0$RsB%Arz|@%)u;@1s2Q(rIZane4(Gp#EwH`t3a0fGc4+@~Ci+ zlk=k6)u7ZoKWbc@{7hcHp{`}p>D1G<)0c3!0|HVT8-aiE!i5V54jghQN@$wYgWlRt z)DKt~G=$+K=yFu`{#mJ_u0H#Hz%@KrQlfSuoA8g&g zVhi`)Mj+|TEM@((+F}1xZ0h@4Z#%)I8=D&XI67kZN|7ekbmy=9R{(EMT zsZI3Nzb7o2COF`&{nsIW{q1$||KV~TWf$#cYSTI{ukf$m-RyV`HP+|XL&7Jf|3+B< z`F30F=rO~s+~HmcMz;5VKmNa6(Eq+aAG>=0RUKerGHw*lmCqR03<;Ob7*{asb^_0?Fnwx=q=Lee|Megy9x3vM zb8>PT7#O6PRrolzzEi@bnO9-5-G)dYDygrl`zl1u`m8!;`hPwQv**A%>g`Ow@cJ`=E{hl-kuNqkH-Y0L7dU$ueJqyey*x(L`TobkXj7F<(6+U;WpL5C z5>4FQ-Qk=O&33>kh@(tJLCG^9pei^x*x=SJfDrEheMnB=&bCB+b3(v=b@u;tFqhs! z)!yD-n1s^z@F+Ze=8SC#42#AG2>%7Ns{l!>s;lD*3-!v%%KFN^@vy7*GIMt2Mf~{h zo7?uOu$Zi&O~aF_hQl1HC*z4o+_SeH9fxN?Uc%fhX7I?!c-*HTMu zU+MjRHzz;&CRQ!=%2gNiGP%db$U4G|qX;SE+@=!-JX7E9wUOu8eq*W@0jA{G*x1H~ zhMQ2R)YI2zXJhNM^N9aw3G+m+;j`IJ|I(!g5|WZp@$tfefq~52vhS(beK^<$Dj)m2 zO$=@s~&NUZPBl#ETkq9&67MOx)fI zI9pzN=|lDOnHZ&vPrdfrIT>D`S~e%r71Km%oV|PQ{9hKst%_QmgtxT#^UaOD$>Tfp z(njHB4IHMvp0*sHua~&`PITS7OfgQ*Ijkk&UWWFGS1B<&N;;6H7{WV!_}jMp%Cw}{ zsO|Vh-#8pNH)asplhYA`AfEvx@X&SoBtO!lVqj*u0Q!8Mx>ikH7*HM-3Y80(I8{H_ zvSF8#;^FqP@QHHO(oZE~X)o!FyO&o8_G_w6Rj$?vDrkMaqer1olnFj@QvT-VE;%#T zr%(4ztvgnCOlC5>7KJ}jsx6<|&ZOo}o#4vzn_W%7)TuF=`7wTj^|-V$aV0TlT}%A3 zugYo&l$)d4h%xWhsfh|+jE0N)RK5xw#kYQ1OcVLtHUvse?wkSj7T)}|d-=~|&#p6w zoTAU`wRrGCK*4e4%9Y5tI2bVfz#(1^>M%3?W%{_tSFcXOvqItk-!U~^d>MY?#EHh% zR-?JWDs~PIpIq_pZ_bwv{myjveQPu}ZzrI*xajjQqjE`ak@|6upT^R+Aq!pWh$_^U zQ4?jN-T^z8C-!(%$in!~NKT6>=IuTOmjWrq1t3VzhXPs(=T zHfDW|5>>jOK-YXuA;77=S>idcg$9cpSTSUdn+vq!C<9fShL*fvu|R^727fwx`JCI1 zfwgr6qJ$dMwHfp^cF1b;NU})?5o<#TMD+{_N!oS__=ep951o0 zy*O1YXzlk>0#v?Kh7|OvMZQi;U##LVAA6l#il;y)LD#S)?CLT_{FHfhA~qJQvL&Ha zX88zHOV@QrmhobK)Ec6pA#MZ#II|MR)Mf^`q}fJ)UU@)^ zQXFw1AfR;nU{(1Dv)R%_6h;`0wGUc(IW~VUG9uy(EPOU?*~{RGMRDJu1j5P1RpLIZ zhVK7xGc=R|=8!O{?OAW$9OplKwrSKuP(i_jH#}2PY&6RnLg0jq;@m6nxY%6|>UrF; zSX-0cNpW>?!F7)6UH{2Sg+>c)X&D*8k&QfgCnws`W#twq~9hFVi^_Ji8}+Hh$hyEdNpd*`&&)KK}}`L)z#@yWnp9J{Ns3 zPvQ0Wwm;+FY8zF!d)b6Q7~|2y1A-W&wZqx>*+29`8*EY%leCo7T4S|IVsc+O#!P;c z8_0M-oc+R?AXx?+>mfy+?p0fJg4`y9vW9FPptY8+SGMSB?hci8#WRgZJ zcdAYMEGtG2xaDa9=(w#eZj-EKtJ0_E@mU`0=PhMI42y_VGW!MiNP6l$T z^o)!~yP^^&3YigCyzwkkET1d54awops8}s*IdJlEwy7X>zQ(0iZtkkuqD7F_b)rQm z6+2r7;>rPuyLN4Qe@3%r*}FsrYYO?JMeK^U*T;vPFYVZnyU9eV8ji-rNr(D^@I^Nw zA(YISwgKWsY1sL`0_X5q?9UTso})*rh~Ff8d00*y+H1i}HV%3#)}&xu2+%)9%pKrmt7BKxNL!&eOkd8wJs_MM?~UJ~OcCNhWbx+=g8XZ(u2g zns20v^87J4p}%i~rX`T-^6|1$mRlqOJrFI7eSqt1z9-e%Za|ino?%c=`66wihWH~)wo!r(2mVL)eTDoMW zuKo3eIOz>7bWdcqiQ5M~>sDDZWws#G!qC9rgW5a!YX?=}?-Px9i8A&rw6UMnlT(LSlAN5J|U5m-r_3 zyxu@DO|*26qHze-plg#Kg=cXHGv)O=W=l0FTw1e&B>OSm)IE4*!w;f2i0=X)BOK|= zbH!f69`u(pct>mT2n32eLw+khsAp)Ezw4`ADA&CVF&^*NA!=8HXgp$2+MVZ1A9sru zJ$c=FUr2Xk=h=-rTP_1fMEl;~i1L;WE`B<(`8~pGwrxMjdK|mbvY2URjXPvXfrKq3W>3CP#4H8eD+ zOV74IEdIcH7SBEe>~WXa>cYDSEs0496~Rl>(`9i=<2+TXOItj%nIF=wSgWy+pN@x7 zW*?odlJF(*CamGMl{V&CO7wsw|Z(_m+j`SQ$@V{T0>KKDbpk$b!Et09rOH`!IKr)m;Xn1_qA~of?|70 z|Lk3d=JIAJ)R1gsk?S@M6wX(1BF>f%Jc6NfOv(DR$r4$zbWQZvPe`}s->ENrh z@MD4eNX~m5tke*(RfiY5c5iyq-ao{pt$FUWpMJNQ@D#jB_Y1-OxU?KvfJFSJF(PHp z@2gEN3;HPUP)yx5A~guX%-7*hV%lLs&YZ0o9ht!)29{&^#yDVK&TbDglh}u$Ob>HS z{HY(?l4a#3)GjEUKI&4`=yY(YWNoPaB}(^JN}%$ZQF`93&L68U&nBk7Y~dREQOOtZ zP5{Yy_s*RPN?9T(4rGLgjE>CWK3eL!d}Vc8)!|mrn7U|3d#n>Pxf~z2Gg08K84U)q z+_K|V)q33{mPDwLe!J(HwNVo`=)CKaZ`7YWgr&+*AwqUrSA8IU|KmF6%?9gY+PqEx znghELt87+%?O`;N#g+b?nW?48b$%Mp;Y?VH`q*AEt$6PuMX}7e56o*OOZV3$wl-K> zOQ0xApmfy}4AItk1T16yI&By?SB{-(He1g(H(w|RW`@#p)iud;9-XLLw{y7!v^zz2 z%1ums&{6G{k?oecuI}%m?Q^??FRI}6kL=~1u~HQBne7*Z`~XkxbMlr2*4K)G{AbVh z4mI9IHy=he<7;l`8J3xfK|B=!nWF5GWw(ocJ#A^0@u*B@mD?cpm8a1t)F)S%Ztkw+ z&sO+i|GdPPq+?^1sj3#aZN0CoO()1g-3VoJSE0sj5qn1y5&o}>C3?!_0?C|VWQ;H!p0vebDow&hlU z_3T}vo#ce=MHmUf`@YC8-G;pJowHq<6uP)1qkw`yqopI=gMP=mPv__el${Wfm^dSV}o9N36 zYZ$*Z|JY`Z0V&6Ftio~!3w`lhh2*Ha99dGtxX6CI1v$q-GNlKiw%0GR+B0Vv} zMvvDNAO`;Y?HP;H8o#thjb+vOah{nTR8O+Z7RjO)UGrYwxcG#m$D2XS+?mliktP0` z1iAGtnH9=jhN(&thC%Ar9R90MH$$EoQawpK^T!H}A4{DtSpB|+#O)+5w{?eE8j+*ywJ%=tU|HLz= zuSosqx(r%XPUPhj&-$r`KvIVE5W3^l$Lu~_Y^r_`i^~cFt{M3Fnnd~iLH?&PH}ct) z=FSwl=FpV(AHVa^?A6^#h{^7Qt_H0?k88;V6k^nBzRbQC zJ}p}~uuhlb;zzm?ud;4t-sksC{dg{%l3F|INITYPRMF_;e07^6w0iDzLXYt6>O`*+ ztn|Vaq~0yv=Q%Vy{fE8h((J+>&bEsvRx@{^TB29qVcvq_$H3B2jomuR&7BL93Ga(O zPkO<6mL1!*d-u{O{T1h_QpG&eipyLV-Sqo{ON{C0^0CUF*W>GD6Y>phdBZDe?Fp4Z zSLn_4)oX+5j2(7>^&t82j_*tD>$J|4t)Rrf zZ0!DdC?V4seC*`Jxy0;e&jb=Kx`*ViHAiwF4XsXn>@(99iD^0$k-fIo5BTMzhcKe2 zJ6V|}20#~8+Y*=3lY4mEbUdoZrUXTVTqRHCpJAAYeSKvW*U1}BC4>y^POL96jn8l@ zez~Fo7TA2bS7TYfw9L^m{ z?l=VHH}N9!#qKq%PnnrVzz%W!&3gxnwdavmJUKCG82eO2_8p6KPEIZaQfB8Q5?9@u zqMl!=UUaN>;-yv-s(@h123`$ z&OSKiH?>(SHz$Oyg$|POCKri@?_Q0QUJWj;+tN|7QPiBoIT;&=^(g&-M5BCTaU_j$ zk#rTkOx&>3Di@P?t0ZXkU35ku8(yf~(B3$4|I05d#>4QIi5qa!Wn6p5gcmVYeINKW;lDt`UM!|`l}~(K9As{n3?E3hjHllfCtf|Y_pw^o@!Vo|XDB>n!;8;DfLZ&m`Pu73 z3=dK0K_%v(b5Z7#u2oz0y%L@0E59~i=hzcnAs+PJ-bQ^~Niy-e;<+5#v?xTO+ zeAv*Mc1iOACy&-TX3B|q+7rh)9U8avjWDwCf!^5MT57__#hv~r=X9vN;}bjc#aD>Q zVdTthKV>D(YJ0(M})&IQ7w!q71acVq)i{0lW&$P)Cj& z2{ZhV5DdXb{adgl5J+ro@eyb#4fYL_UNEVlgNs}ZNa@Q6nPDI&-m|^d#de=LZ0$x% zXqmZ{8mz5v^A5J2$ozrxs8X6c6T2A_r#OE|jx)) zg3n|iUqJF-Oo0jBW0SCLXSNDO?TWayGnI{(qV_T?-V6w|(fb9FKWG`FW1>p^Lvy=N z#@@ghFN|I!$wNk8R3F*})$lw(i2yw4N|`OT%5)(2g<_VnW4xDpI_b3wZYX^dXt-s4 zji@U6rjP7+b$P2q3hn)Jk%dd~($0oWHY9JMis<(QMM(u6+fkJKsWO7kv`|}^*&b5) z^Y^;UeDb<%_2C`hVkV;~JNURhOv4np;-GTGN6WUF`Bd;n-z7LhH8iI4@~9s4h5j{8 z&pusrb7MO$9e?yNZ%!9mJn?AN%xpcd>E=<)?_FD~I7kgmt-1i3wVj%Ts!WDpQ)zsL zW6e)}ug}GrCdGcfA2Tu44%vjwW?v2%po8+5PB(3iZO@7(jben{`r(~+BUbUUqj0yA zg%&_EMNfr6c+dB))U5Px;EpBk6b@>{XKvyYweEepQ~Rtw$HwgitTNRv??uSANw-uE-WZ;ITLZnfwa~mJU1?_<_)&q0TEvL;e#yHC?WlV!JQn{EB)K3Awb{#ZJC*wK?VparJ}fD z+SC-pHRp-*!o`Q#;5kqLtTu5J&&^~**iI?;AU{?LACg)SzR<@Qk-Z( zus45$FPS1b%&d#z(t6%p-=ep~kBoy-u}h+Nonv32cLgK*nNjk63;wBA9h<}meVA5X zgzUTFF)Jn#4K67l;IVmt^<{i%12O=_^s=Wi%sO&h>*z*Vh2_Ta5~a@iYKt0*?cHimncD7rT#AwfoK}O`{e&d$I`)8~?Sy^B1 zf)WV|Gf&=`2=!Hdg#b8ZeK_RT0)t{ck*e-D+!5_JS9vpBX;GZ<#-jts{$ZqmA6~6I z)r)4INpZ#y1eYnjV=>e8vzBtI`4ctgJX@4ZDwz4eYK(F8QCg+{RIQK#`;$&@)F1LOtaL~BYYxf zBN2OycX=(|r%Zi)m9|}0sQ+cgHs=6o<8eg!8bpI!qf867(gETV?=)S{r)BX zkrXEnsdmTDQ@gRn&D-{?J-jy|3*wE+e}~RCz+cpPD#{u&1S%SZ za*iJ3IukM3X7ctIfz(~uv5aO4@~WPKLWmEb!|VpLH&wmUF)PpYZ#aY-qJ^At3`hi1 z!7A-ni3Ky`_5el>MC}Pa7#>yIg?ZV!Osg_?G*W%|DKGf|^8rVc1&V0I@2AP`#B4-( z{>G5*m!nZaz!EUe>V^6_x*rP9nL=$%I-q}))Vgon8n89zwT01zl@-cg4|lU4J9aj; z{Twh7#l>;Lu3t9{^OWTd4i7iFe*HNF^dlg>29>vvkV8;S2<1^Qgw`U9<>R7X<$gin>PgqOZJ@Iu$%OL8JLRPFJRl#R_1%;U>J zA*ViZ z_3PJ##(7ZDlkl%*{{S_=zg;pAmO}{)4>Xbh#p9voNAejs40f=bJ6`(wqIuxhE2JBb z6%YwZHXaP(vK%xLJkjZ35iLORbS{qLEeU-^_TdOY zWo7dhFJ6G&HOkWRo4C`>Q~$2uG9?`Z2MewNgfKuKL&HAE({yz-ZTsKV;&N#S*0)rr znGgQwdA&-}ld(|zEq}H7DW`=cxykC^oXp>jzfqoDXkq!y?D`%5YxY5H{3k-ys$0VT zee4H`%@g!;1%+P;@BckKRwni1H|VsZ_WtMng75zaU->qEL3yz& z0{8LDziu%A@?y;&Y@6(=e)bnh91lH${PzJLh&4LM#M75e+-Pfo%EFJ^btI1868%qx z0LV~AkMCvWou=PYgfe6Bix=%RFW8{AdIk_DM&S{64fpS6gKr-!&mTA5l#IOrZn$G- ZcU~0U<;+axamKYGRkg3>U$K1je*m|7!mR)R literal 0 HcmV?d00001 diff --git a/docs/idn_docs/docs/img/custom_connectors/commands/account_read/account_read_idn.png b/docs/idn_docs/docs/img/custom_connectors/commands/account_read/account_read_idn.png new file mode 100644 index 0000000000000000000000000000000000000000..8ed594903ba0990de9f3d11f2caf2b1885cc7d5c GIT binary patch literal 134399 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 AX#fBK literal 0 HcmV?d00001 diff --git a/docs/idn_docs/docs/img/custom_connectors/commands/discover_schema/discover_schema_idn2.png b/docs/idn_docs/docs/img/custom_connectors/commands/discover_schema/discover_schema_idn2.png new file mode 100644 index 0000000000000000000000000000000000000000..0fc6507dbe0457d5dc014ab70a903c3ebeaa6a13 GIT binary patch literal 82379 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 Ib?t8b8)Zs0e*gdg literal 0 HcmV?d00001 diff --git a/docs/idn_docs/docs/img/custom_connectors/commands/discover_schema/discover_schema_idn3.png b/docs/idn_docs/docs/img/custom_connectors/commands/discover_schema/discover_schema_idn3.png new file mode 100644 index 0000000000000000000000000000000000000000..6a3e971829807de7055ab274f4121518948b0fdd GIT binary patch literal 38337 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%0DCe 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 z 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 Gp$Pz}xUOpe literal 0 HcmV?d00001 diff --git a/docs/idn_docs/docs/img/custom_connectors/commands/entitlement_list/entitlement_list_idn.png b/docs/idn_docs/docs/img/custom_connectors/commands/entitlement_list/entitlement_list_idn.png new file mode 100644 index 0000000000000000000000000000000000000000..0757364788ad1ea9114f111b6f57b3961b14dab4 GIT binary patch literal 495919 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�$eZ(~589-MUc4&45i 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

DXuIk?&)p?J&~mHPQC22dzp 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

w7)-Cbq)hoQL9rSHJ6f(D^rL?8!Y`yd_qd|?C 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%0DJ>+S`oo#Y^7cd0^s2la#7I!&%FbAd~{^X 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

  • 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řLs^^ruQ}dv;+}bHz$TW&nMPv*S;7 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

    &wgQ0Kfm>*Qf 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 IwXVx?N^mbw+})wYO3?xZifeHw?gV!T?vR`J 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 KTK-k*kpBj#W~(It literal 0 HcmV?d00001 diff --git a/docs/idn_docs/docs/img/custom_connectors/in_depth/testing2.png b/docs/idn_docs/docs/img/custom_connectors/in_depth/testing2.png new file mode 100644 index 0000000000000000000000000000000000000000..cb58f7ee3f1c5fd9f3cd2018e9af61064d085193 GIT binary patch literal 49415 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 literal 0 HcmV?d00001 diff --git a/docs/idn_docs/docs/img/custom_connectors/new_connectivity_diagram.png b/docs/idn_docs/docs/img/custom_connectors/new_connectivity_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..3efd57539ace2ce6fa964e681c6eb07a77b2d3de GIT binary patch literal 51357 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 literal 0 HcmV?d00001 diff --git a/docs/idn_docs/docs/img/custom_connectors/old_connectivity_diagram.png b/docs/idn_docs/docs/img/custom_connectors/old_connectivity_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..cd2bfac0b7c10c1862e93d3839437ffdcd76c222 GIT binary patch literal 82133 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

    G_ZQLy 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 literal 0 HcmV?d00001 diff --git a/docs/idn_docs/docs/img/http-client-identity-now.png b/docs/idn_docs/docs/img/http-client-identity-now.png new file mode 100644 index 0000000000000000000000000000000000000000..9af9440d1ecd4065df4977ecaf4bad70dd7d2979 GIT binary patch literal 71376 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 literal 0 HcmV?d00001 diff --git a/docs/idn_docs/docs/img/sp-config-export.png b/docs/idn_docs/docs/img/sp-config-export.png new file mode 100644 index 0000000000000000000000000000000000000000..c92bfaa704b02ff494b6ce5402d29e1849458274 GIT binary patch literal 244005 zcmeEt^8}zGDr*^(jeUeB2pqC-K7H3-QBHp2t0sDgLF!V%pgd|&_j3EyodXE z@BMt=zu}(Wh&eH5$J%SH9rZ>{5g+F%4iXX)zS1lCw@64>WJpM;zpyZX-&{dG(~wY` z_LSshwLG);7Cn5aC(kdBq3r?&lgyV(PNXhNXC`Ad2-G|nbf@x69hM6ZY)Xwja7(6$67y!xHXuVxg zOlr(^QWHQ+G8z?CT&L!C23Z_QkP{LoHI_i~tU$b=@<}|Ce{KU--skxFfA1rML#h1^Uht1-V~Zl#dM>0y%!7t}2xjQRJa z@43cbiAhC=Bwlq)@9)ZjYMfP3HOPK9mBz)zRgeWI#v2A1N_{P4OsIL;haD_V-=b%BzKcOf|jghF1@x0EG zBv_f5^BHxHg33Bmnw|L>voY@kY<@oNs_|5i+!Yp@n46QGNs34%cs~;4FB&~)&*)#lxVDugztZr?_*rS0WnN7PJG2-i*~W9L3VO}I!q*hQb$_dsMo_r^w>Bo_ z42UX{iIxj4>XW#y<~1K}d6`=E=_{iN9c-Ln-|PJ+ zOz77|6^4^kUYRYrtl;nbgA_+20>Bdu{^NUd@!fpk8}ixrQd3jJM}o}f!740Du$I^1 z_&eHSvB|jd?zBL4Z9^{@blc@4;Pv?Zag$Sb^t(2dm;VKSuBSUUt~FOkc&g`5?u^L8 z^rN4RAlsU$Wpae8>!BGpLv5Xi&M$T>#_mBg)wV2T_^NyeZ*V+HD7|NDkPkjXmJ*-8 zR)CuHClbbpGqct7ptEglJuz$0OOWb;!oQKT^n)#0?#`&HhJw>*Aeh-!ufdLHf}(sg zzr z=yl}|lkQ7PA^ff~JWFn?{;`xxX-audfT zA??SfnVa30GV$beM!>~XPx8-aS(d0gr4_GKw&+#bb+UQJ>gIur4l4yq9lkfQEFvlk z-#9xKd&x0l`9$Ds>o~`RRTtDETY}|;1GN09qzUPRk@W4eK6`XGfBJ^dWr@rxNO1qQ zv<4kA(E_$-_0QkW{OSLpHgaShTLTls+ggr#glqEPz& zUMfL_^*GHJL4#^U3d9;|^1)s)(~i?U6P^zn3JceR9M7Rf$n9mk+e}0MsFS_ybCyW* zPKg?v&#lJ@`KcR%jB|~oKZhiDXyzxnx!f*tf8{579Epv$Wq{9C^S9Ak8nlZgnO^V2 zEu3z-=K6l(CX|xQ(uP7Kq_h*&l3%k%27lASF&sf=IB}omx_JNf4c6K_E;ISbWn*fu zuJ>x<{v@n4f=NkoH%LzAL4xmU6qAHs0a!ph(dD?eO<;ci%j`(=;qmsu`4NZ2!`2TG zi^}3`%V)BnQ28X5V}=vR^lT+MaMG`(_`?&~emj=&(&i{Oxz#*!n17I+IMAW`U$n{o zEp1-pnDS|ysyX)e9T!qV3!O(e#p5|ma0V4VLA0Np%5o|@Y~`|)gAX2 z(}k+qCmx9&0FS+&-Y&Y4?w8K%jYQOFRzKxxtIowxrT%!QuZY60rchB&)5d z$S(7@T-TQ1_F!3b>5oJU;!E&au}m*Wgee~Q67aLPednBd+HKCPMVus=#NJPf9IR?T zHV*m8dN2^dBa&%BNHy{;-*2rdjJ^ZDKb#-kRsn!9OH8cbYAy468F|H$kwzmvVu*dcpVZe)MlyC!}yM zeeDRB<2j88kQiJ{XhWevA8&t#-JQs*#i31{q=s=M5p(F{YG;SMCUPGe(zI1BCyF== zS;be^2<7|!`B^O&02fbKdS^QbY`LHvwdsgExYL98fPkI;JM~(1K{GPqXGt>h>w?TA zv}Q!aqKa--;T%$~BsO_X(kcCf^wHG)Al1EpYlUS3sb~bpyQ8eS_xRJWBesCnHNAJE z`f3FZg7Kb(DUp$OIfp(?tNN-eDXWEtlF_&jkx;oyFm|uBZAEYbLzNQn+8o}16pC_} zFD1lspnmsxzr4JK+;vULZLo1Nf5k-Fm5F@lA_}Ab@x$fM@$E_d2&_*@QH|}(#~<%V zef|xnSpiq0WpD2tl#ZiOTd$o;xY>K~U1-TnVdS7YTOVy9R;KWl_3xZ+WXIE3?HpfFT39MO4?qvjw|HkKu8fhr8KVQa!t#o@B_-_5l5oc61URWdD z#muaGb)Ej#$U*TWxL$VywLeQAg_QfVyv{vK@5y&;7i_iU08*cQ2@z$0AC+%pe2BRo zb@&9o@iFdIXLXbT$$vEjQjezpQZm>Vsmtn6JiIDk2QQpprzooZ-wxllCeo!qJf*+M zZ9GyH5P;c3cGc#kKd=zHgj1u;vOsvMcdXQ3@jC6!;N={}Y0et{Jh z=#l5f3u|7bW{IVIMb>-;&lO6D{`{CBR3h+5h6uP`ZgxxHh}5~yX4{X%^+c(4+@F=S zxxnM3);~cF9ktJPyP)^ojdq!FxJwiXG>biH`ZqJy?V-pTd_a#Z5HxhZ27B)OEM}C??wzQ+o`EB}1skQ}IHulfbbo&J z3pR;LG@Ikb{jP5a4fkqmBf#`xZ-eP}a%^d?X2K^mD)QA`od_1S|2VvlV)L|==RPhP z=AT?hxKySatRfxrZ@{nb50M*`e^O&fSN$lnPY@&d6u_Uj5aJ&jk(u-P{3E?eJsHof z>2CK0Vwp#Fn{QHCKg4}?sCvER*4?pi(WO6&JTxW2)dNlj!UH} z*o+Yh$BM*{SP278J*8jVCX$!ncauv8`8?2}Dn`9)(9xACOygp&YwvH* z7?aMhgNcgBfy9!f_TjWRxYPE%5C?9UM|wE&XM2ov9eKcK$us~7Hqb>g_`(Y7xdz~! z2nTCb1C`nU{N{_cWNZL))l?HLvq~Ja?4oywHW7ASUnmsG#11D!{nz^(Jm9WWAu{Ro z-%v!X3=I^gQ0poWWGxI@R`fl^+7VuveCN1Q#Oe%SGtq}5Y`i@KqZX5VqF_GHsW(_O zBkv~Vi1>X?d0rA8M(~BVhhMH8`6(Xt8bMDN{-C$<+Vk1u{gAG_lF(Rpgb*tbz#3H+ zY>7xOpZ4BDq|)our2<>Q8U1dJQVIhtENyc**)bNC3=FNUzzvs>NSt5cRo)$|-mS5w zB`L8+F+|iyOAhBgwxB8!(FoKj2fIxU>5j17hkFr!H_EX1V4<$)$UTgmA;L;oSCzOGP>rL@0;Rzr3S#p4XuahoN6wS9QlUB%f?3kwZB)Of#3heK16?LVxN0Klc4p@4)HmG}%jHjrGA|&1|0&n` zGRS0!I%YN57-}cN%w83=#3Jr4+57Php~BKGEFEz6Qke_gM>@;WV_Y=!G(6dtE6cf{zp2%);Z%z>I$X!HN2tM(cU`MTa$Yy_29pZ0)Zp?PZk z(~S;iUom`PZ{L3`DlQH_^xsE$xLYH1`K=f6);P5QfVR(2aw86B-&%D7V+DjS;8@={ zvmQ?;!)m6>_^N}M^BsxE$yYw=HpDBt$}UnKF3Xj1x1s@es>fhRK9bCK0R~mAakyj& z&7g_@nQX`XB<{CzPR92i`!3ssZ(hTkr$E{-$Y$k4DG=qS$=Lok^Ws-)ZV9Q$*x3^w zllHs-h&3MOvaB}}q7GSwOW%TrzVkCg_{&B{?uBQ&%!CdUtJ?d*bsA6CV{iv4f{i3O z|4#iC{20Zf#y@pB-MIXP!g|_QW(sSb#Lxq?$wP{w%cz6YPhqKhZj8&SqBmGhkfc|h zlI|1zS>IRX1DkPmYMhpyeUG@b0=lLQH5k7q(pZpuPuQPLLm`zSH+NJ(lLBZVj1+IM zx@n`(k9P%%dV_uGO&t;X9p|%kSJPF}kkBYOY@zy<*+rN9r6&WqDpyRtJe8qa)I*`_ z{3~m>O9bFXxZc~Lt1BZIYv=C1QSO93DJ=I)$$kT7dF+JU3HL!1H;qE`Uf+1;S}7iM z*R^iLUtAb!taqJmZ4I8LNH6wCCa9G#PV1?@w0&7?qcMV-RKOd1Br%fdrs{iPFkSn8 zTmP=*b+_-=cbGu>l=4O%@w0F8=#9WTJW$maPXq(aO)V)1)&A|J{|t%(x#}ymo&vk0 z5U}CyJJdc8w@B#MR{;@k;AT7Z)B7IA!1+JyEw3^JEKHdyck?n}$-NyyyMEDCSH;;) zhVl~cU^Ftn9qF~WV~)$7uoGMR%Zoz)rDqRbBPrBEUe6gZF1cx{>cWEHUW=7IaeM#+ zVn${byHZYiVPy*YD22GE^17>`^vpm@5^Q>Zsr&gZv}RN#JL7y-xi(ah!FX zsgU}_vzkdOki}|PKMkGTM`pVNB&duPrDZaa0vbLSS_RFr*Bc{@Ay0PJkI-2ow5l*2TZg=id~fG>RGS+Rl`m>gf`T4{50T)(zgvXPbo(yl zkgcs~2yH5Jl(NLgW*I1M@$WIUURO_%G>Yu{`(ifHoKXY4ve zR7|Uc|F(gj1R-t(6lo+<`514UwjK&W0&Nc4SMi=Uemc2v6cMLkfkQroYYx(Pba}TA zoy}_p@aiZu&sM3@E&$DLxR!joyYCf09)Lvung`PJ!-rGZKEw8IE0UmH0$(QP05QJ7#_;of6^P+MggqVb1yQm zH#BJ-2boZcFXi^okGSfYGU%fGT@6<(GQ~@>rv~3>7pOw=^Yba!^ft%_KQZDkmOEse z4m0>aG~Qm_Y}mZjNabdZj@rWpUg_I)y%AKP%ZChb#`zZ|iI{42)jp z6Mf>#po^xK1qFFIf@dyN4;a`tz#_7mvm<}csSxvo2D-@i zcAqRZ+rGG#e~Ylol-Ew>b#|)aB~Ds2BomFTFNak}f$ukHA5QL-l}eID3ZMPef@*hN z4@~z5DXxZ04hxHlXgXW)E-{`c#|geMBzsuLRA2VVlTI5xc`ggGuj!Me$5OhYRoXp0 z+1t1~-DH%}WpH$l0kt)Jo;^_B5gHt&xG6W*mV83c%bc40sH80BUl1 z?(lIVgVp-v*P1}{`9o>8=ennq;}S8o-MN|yq`nonOSnr@9Nmk!iqh*TZAa#u&Na+;Q- zV(%szMn`KfUB3dLTC5is7iB9HCY^~>7ZR6JM&FlPF zuIB@!x?Fg83QCJ;V3*&@xYyPTFE@MOU#zg?;yKAW82BNiHptum zxdpF@?bC;OLC8~i;sj~&G$39+eA+kd&n7or+ac=j&HCN&XNqpc$8)OIaY(EKv6gjI zHvD?hx&nZV)zGV-hVBmeH`Ce>_^SV&mIkB$OuM+q&V`C`SC}_k?60ewf zHz*~bBw@tYzDW3^<*=Dx7Xnz_j~|8q-a{NekqBwIG|-k!~ZU3 zUiXJ5elbIc>KD>b$-H@VdW)B5CB@&%73)JFs;hFCQ+!`dxPEMao)>_rp3c8_`1sRW zQ(jj7Q7P&z8zfSQk2vs)+K8DtiR0;vh=GcQ4mQ)`e)6w*`}3Qb-_-~q_eOcbLp1OY z<|7jh1x$#Bx?bjA194A@cq$D-TpULcxl9?a%{gjAHSXrh`F=cablFIF=m8*P@gL*W z<@=Y9v4+eG!r9H-68A;|gvsIMhkAgpP}LJs@ZpB8TAc$02H7PyD`C1dnir36ir@T| z!y}=ps2G%H!)39b8E)^74@gM`#qnC5nVwFagSv7ZrC&PlZEyyt`Qve+5+DoH^=hfa z*UQ-e1UFO0B#!S%Nbd^eL#3RlN)5Hq>+oiL6jGw#@Ra%LC`)_vuosad6kFm=6cH*< zWkI5VCfV0^&4COOE9X(95edKPe@7eOPLLFmqP~#uyXSVitTFv~eo6iUtT0`jYl-^l;U9WtQ5O<@8 z=Zfip-^?-s?C^!I23o(!yYdgqRl<_8AcZS&m%fFdv?DC4OwpA;sMq(GOD5TO5uP3U zzctIn<(9(alNeLfKDo#_!oSuzy%5Tw!z*l(n0uo9(!Qgj?(7e{;^F9|bZaawKr{6T4>d47T$iM zP1IUHTR^`uHB6RrUUq9&Z;R>Fl^ct_}}%XublpvpdvB4mXDf zam4cJ2BvASfY-2*whVxEAuM*+Stc8#EY&rGo;pnm=amdh)Hm8mL9QgcpL(v{GJO0S<;z*vzjrD0FS0vo+;I zf-1cCG-2HUm_OS;4lBbE1pwdKHbJ-!7MA?kNKsk*rhM~j`j0)e0=nLJR@Xgo2~KD9 z7NuqEI$uz{1|IQQjY>_x#2vG3`ok}35<&7~G%MC)UtF&JSW4;7hkg&)Z~0}XhdNOU zcz2eJyLub-Y_UQTt;&R4t#Rx~LxOnM!zf1pV)gg>iEOs6>FDOKX7j3Y2zEQX@4gb4 zW=ILZ&@?Icr?7|XfbA_dQW z=nYG*ud7(p$uIW-T6_#r`F}>neb@a498WYz*~w5yq7KaNA-d+k9C~=aqUL|IJ3oX; z@2@)hE^k6Nat;>{ESwH>x^7TIQzA{c6Z9zP{(C-W&#;?nw%_Ul-j2yYNynA2b2HM~ ztw>|@cNu!D50fwk|x|_98mcIv{5kNiKZq$PdHdt{pl4njUY5h0<@Ep5 zb|Gf6nukMcmJ%za#Mk&3h}dUC?qx4bqm@{Xop!uvFf|CY(g8bM({tKPRIv-5&Ia zz8{bDG+!)w7UUAo7CoZsRkfsI&<0aSIP)Z^XGF0>-POfB@x$nP%edk2&eo6`##^Ux zV$ue07z7tBlJy^KSm7J2>p!;%@M51_K+mCA&i2*;+ysFx>n_OCi#KE`{eV6p%k#I7 z3b^&t3fDKBPE&zd(?-@hgLdEA{H))Yy*+aBeW=x36@itZL?pTNHJSH102*iB{fW>? zV451qdQU~=C$IiheKC-50hn|EZ>MGqHbmyItEr<@YeM4!ue3ZU5Nx~r72XDOTdY0_yzcQd4+?AR$TDg_6COdMe8xDsRiE?jkJ z(1~l?PA91XL3Jwl?ttLo>R#E20E6(`#wjpnovMi^GIQ+c0mW%zlhbA=wn*Z7)mJ~Q zJY>$fO{+jF2^rpWl2VfLngy#c(g&Oc$*c4WjZ?M%CzF~t*DRPp_4-YanI~(y>UwXREnxHnDuXP);>tBgv+$i%}&d?yzYs**Jit!s9 z!Y>qacY@puAA;6Ifv^&Rzqf@RN9=;vRuqegMF#$9k8tWMV&$z4;97fm0mlVP#_1UA zbz8`K%`Q_=op*!i_DIyM#^=xvQ zzz8uX=})cul&M_$qvT-moRoxItgeIyPhqHpRF2pAsFSTZm4h$o>|(mPRZ7-@cRZlo z#k6Fen3H^di?f~sXbrWB&fMLgkrw>X1?NNDnH~OMQ~2nc3PE{$U_7JwbsQ1Tp{=-8 z9yp;lK6Hu)RX6EYo=787sJwEMvo*l1`eh8EAyg@gqxYq3I*>@MD8_38LCbMC?^p zz}B5w)Vv>*cD)3Lsj{?}DKh;Vkv{Pv-S5~!?{=qHYrg1pzrTGFQ^D61k5YgC@v-h~ z8|eTXLkrhU>uPr;T<=rIrGozv;z4yOC{2wB!$6${Ne-mYR0~8oA$^w8r<%AIzEE8^ ztJJv`=c%^ZP-c#)6qPIA%ji12YD;`gT7UGahTv*jl#rlmqE#zRyN~G5bfZx5K6 zQjU{{#)91NXmkgDV;(9PDCT~#eX9Gzj^}G;A9R4O?7zeH|U7TsC}$ zw5*hC_O+hL!sc+o2@XbAFk=fEzQ+!VK8i_%)6ytPd3=nRN2QlwFf0EL`1PV7;b|N| z3j1nOfqGCc+XutLt^F@1aZA7da=cpqZRon9ad)>Hz?@X=q~{^mc>I(!z&ZsxplW=oV*gRlB=gO9q_1m0J{opJPO9Be zPP5VNtjU1-pNfUwR|u27B#ac6b@O@(YXs^OP!6OKO&jb7O{cT_VkQosW2morm#YAH zl>Fs9+i8I*UeuElh<^4()+{xCZ(Wm@gu5d{iujmv; z0oOMU#u@doeG_Ri&#-B(J!RV)vWv=u`b&BPVHsp6EJFMdX1!k@1byLU6w4l7hrTez zoSmglNbsxQ;KR)#I9&GGP@t5ymQE@%uf+k*0}SfG3>HoHD+BC+V@dE#gv3w(wTP2# zWp%nNCFilFo-XwCX+5rUzXY3N?sX_IVkb*&8-GE&PE0d4{&iZ#X$Cu%Q@#|y23N7j zH7K9Q1O3=v6~BQ~L8|j~jx?rCkK37vL@FzF5^!I>21Le)@1%p`8IQ!rT4WtF;Qn-h ze%4#|68CFtN5+zSiMK7M$D%M+v?xo|JKHI|bWIJr{jIvLKTn@^&|&I;-|#HP#m<9Y z7LHWF+x^bcNkiViRTtwxznBgCYiM!^)KYXulbx5K2>6#DP9Fw8aD(^=dWh%N0BWI}f4+ z=66PVFBSBjmYZ2aRfbG7Uc~Xa4&sbIzH>{F(`2!$JVQA{(2s8&eK;eg=a<`Ymj*jICEUk>4@p0bqG2!(+^w;d*?D%Vn)(a!Q;Ph^>cdWZmSe8!a7c$M|ukAyJ+0NJq;lb%XXZ z@*m$+aao(Z6gMRyS8$p{UAyF@_;O${I{qQX>q9>Y;Mkqy;%Kh>E@!VzIkVr1MM6AF z&Hx8ooQ;wqU%q|bTs5>9poc=|GPo|~40$=f!7_MGF(Mtlj&z^ug5xLa|9NAaqxX0aB569pQs}Hpq zWTx*w?0=O^E8$FG!jhA6U-_-#WhUhTyCE}HMK{a02@9nICw{M3p8`_w12FLx!D%%1 zggY`04Nk%m*9gJTbpW7D*PhS&k1t`NUf1KliS5gLsCWGVPnU9|pUBJUS=`XOIV&@B zL_B@O-W1Z_&mOxf9wXqA7-8j+%6(K-{vpxQvAh}|P+tRNm+{uh;P26RZj&3HOOVol zgIn6NDWQ|ey!$j`Z7Vc0-SSxC@v%QIh%!n~K{`7JGE29ow&g(ZuNqxJTa`{I$+NhZZV!Zq461G^8!k0-LWBJjj zCj_J~iHjvhjS`^Ct#K89-hCOM()T#;l6OaWgxY=0t7sUWRu|4flMW1k*ZUJ|gLs$B zdSIw}_o+8iiJt8s9M!oQrT-GE=i6uc76FkN^VVSA*y>U=s;34%Qr|>2U7sNv482Qj zjJPr<-AbNeI8oc6zRET0Tdn_P+!P&hsXdSSR|{uZ zpJ4H$Vig3vKOCI+om3)`#Sl$hKWXKA+`}qhd%>T|Wf;PxOxpf^_&X{JX1?HEr}WYz z3;^_=j-u)DFE(7P;C5kk3E>1))d~>oFv<7GTF*8Thu#Fye+#HCJR4S&QrG7JwV&=; zz73kIQ1ciydNb~(R&Ml_!1>+!-}?JZ-imG})&R5jXN!x?;k*SEE3Zsj|6>h^h(C-L zS_eo9k8Xt>H+a)Hn)mqi$+MtcAe7YbiK1ejyyrehBD^F z8!({B%5&==*|z%0uMxCkK=pm097~%G*OG(qkhhbAl|MchEPcp!Ve-w}BzKw*0nA4Q z4VWitMWHCOJ-y=lR9X5NCwCGmZnN%}JoD^@JLS67F$2Wy?>c`N^@3iph~4^&I?pE# z?c5$)PKzpnUZRa#d)pQcp2W71g1 zD%?`lDXE@Xrby9SbqY1b8w!o6N#%{j>T!&z;sUsTW5eKbz+J+Gh8Y#AGh7XUhb%IP z{(Mqqv-c~M+Us_^{PiiEiq>MhiC*#+EBdcb$F$in2s1Z5sPxx`u5N&2f8g$*faxD3 zZn4|3w_y_`@M@N&udeg=JT*sv9uF{FXMlF+gfcsQj@`pr=(?_aoLUX$!D2a>h@>Kk>7lU zeAA&p_n;HtjyW3G1zTOry;LbmnE#1xT~RMjL-SZuOsC4N3{PR~)P6_Cy0%-|n&Es$xf6tYsVa_Z`%uTr!U?_h%B1jOp&hEs3|?;; z_WZ8BulNRLTR`SS{i9yFYdcb`9CHb29<5QZ1!yy&=RW|#@lx{H$V5~8i_27s{^j6E zt??Kb_-lK+%%49U_T&`qRY$dhYUBz8DQDNyqw0=lvKHUU*m<;lpLnr8R`4XD`c2)2 zVq&;`(dRU~-<4N1TiuZhndV*swqHFaccoa~+cCf2jyyC;4L`xtsFWG_9ygC*$VP<* zA8HJ?`xCZsQPcUWcwr0+pk>Wr3Dx%vEX=hu(nIjnn7=Z}F{}`ib?>W*@bv@q#fuJ^ zjt;ZyQeQtzV!R)bRlopLiO+$*MeQWy^8HD}E+jlLJ`U4U>XfqmaVQu| zN;ovo!Bz^0`N9Ki(0~9lTjIz7Tt7u{yBpav)s0FBpvC`tSuQE3*yZ+>VrAE=HkH%V zr%M(*IFc<$yjHpg^PIs1ONm8jfL9J)-Cyf@?fu|ALHZ__Wv)LJ2jg+VQArMAjr&?F zaXPn8(DKUD_(P*N=w+x839|&%p>^kK2#wrL|7ND@!=A*tn+w zn3-eEfHfRrZ#%J}TCy-M6+4eMk;3yy(mqHG-auuQ+Sqozhey`9CoJ=)44^A^K1>c& zPt^kaWrE2yVJzIko4zW7QA7~3*OT%u}ii@(hn!s&l@}ZS?s6h zkUMNXy#Hu%9PLdo;{$45*oAZF1Zao65BF_iD z;268bvN^Bg(gQH)S9)tOkZcT8sg*rt?6A#oH<9YTy@MAP96bQuTZPgN1ASRjBbOyh zjU=47!d?`}uIBxR(mQykI`ZdLVFW3K_E#3?NrefX+>I2zb+Cu#Nhr+kd{tE*Q7|^ zGOAbg+eeNK`z8sEtO*ghNvt`xpO+BAEE-0wGzc8y;C>*Wd@~SM0`6VV8yO0t$CzM@ z2fZYYI(d$3Y}lpA!)3ZR_@JvY&46AMogc9$oZJe|QS(t2FV^yM9dLxm4#UIebIpK) z+Qepl^3Te`1sr!C}BSYd#15~_DTn~iXuMOPe{)RY_8LocJpb3dxIMdjW}MIsK3zw3`XW~s3+4X3M( z5rtP{Cp0ThrAm#=>oDrA?*n_ZwTd-;*wFDW=XUzASKgk|3lNB_Yan{s>%^^JEZmdX zDAD&#-Mn)}omPfUtbRnHi!4WD884A$T}d5r^Lc{}Na~xgOZzQ8L2kyWj^pw_#131>NVuux8yyJA(G|cp zc;l2}eE9(R+28*}>Y~G=*fci|D1woVp zVq=o9_I>}`Sf%}B2J{TA)CrG9jxt%)@Xpu!i}u@ATCP5^Qx)>*4v&i z8VGSmo*&d#{xc3)kCGF$gb|0Dg<8u#5 z{v6f=AM7ffzRi#6MhXPJ36HK_$^o?k^{U|}yQXcsDpS6G$1UW-EhC+uwf(6g`KDPW z+q<|qJuIYm8#ju;Dh;Zr<2V+M?4XjO>Uy!XZ}heD6u-morvQ0Z5CHqwkGDIrk}~kd zzz9P|ksIppa7-tnTVEXHH-O)N%1M#!#VfE`xxSr7k*sn>{rrOn*zd3gkMfNoQLnw; z#5PmXwAaH@3sR~J0sjZ%jONdsOGj*Z*JDaEyz2ld`lX}&S<^-?#URCtctAY^`@s1A zXj$>~^SS}XEa$btM0Qpzk2jo)#F$@Qki+OW>&x%g`v&+wz2c$ubfY5PiKTCN?V zIcu)~m`AVv@EDH(Htn_5Ah(Ymbce4VNtu^zuV@i;CYqhtDM}sNOJ`Mxf0kJ#gNub; z#(}$oZt*bLz8vjjCkhKTPRwP77>SBLOKqxx&AiAbN>sT49Ho#BV<1AL4+6|FiiwE4 zF1Yk08ics%Hv?Y~)pDim(M3iwDAHqL8KFViKXtZzn+f=&%>My=o7ui@e0yBoY-j}P z8)B3NCB6Q1uUO6J#IFFbOn}W=UQud!I-m{LAT`)=*NvfEFg+dx74u?M+(abp(Y9r2 zetKGN1naHUrh3IBaX}+Z7AV#JOmu(753t${VOCy|)>(5gYZze|FX(W^GT7NLgdj60 zwkSIXAKJtEcH_;X?-!&_mI|+dZJVUgf41uIx%eyz$-|!uHXiP1{EOrUX-)ewE$We9EF-?{MvjLToSk70X zP|qrgj~pGL4HptLeePd#;pg9wcJ!3#u>h$Fo}F@Gu``1EVU(PA>I{nt9oUb{*jQ3D zHv4^|xxH9cOU4=|vPr5C4}?*EF~dkLoq0r>s@pQ&bHRG&W1ENG%Z{^8OD;FEBBp>0 z`Dm}9!}Rn3|^ZogVkS+W7$9tyS}P{o;CR?Uo!7_em6Ju3m1^}`d^ z1;|Ra#Y1vEr?EES5RE~Lt&a#Mldo}R^XL9e_nSZ3V_p!z5D`vHk>kRa(8-&&>ySwT zyLfUYy`_T2XJ^t;S#N#H;{ZKbjV;P{9a3jUGb>e0AHh7^(HuRjY6&&2Cx8CD-gy%6 zs%%gy*L3K-CK)8h0sKc}tqlb;V2CL`z^uRA7mUpFyKmR}T%yF^&%x1J{Oz)(L>a>J_t}^L3yW zU%c)|4TN)^Kw{(|UDs;Y)@ zYIqLWniIqh-vYzcBOa(bdot_LjAjg>VNoHdmgXG5U~cW~bA*wCY09Pp4{W=mxp-tD*# z*Rlg1mu)SS&JodXoa!lR%v-S5Xh_OlfkCcSgF-9Xk1xVuTsnGarNOws6UzOh`ez!PP2yok@V&}bQRg;&1^|-Ao0qPin1AhA8LO7s5 zZ|_g>k^m~8lGFT|+2x&SOiV%R3s5+){y``u7PpxS2@OuCH~z{4Exx**=4QfUe7J{| z9FaU2Bx@ZNQ_2CX58=Wwr*7SK&sY+xcsb8L4F$?EI;=+>y84B^j()|VLzj<*n_dTt zZFH<6sQBHJX$J1Z6eW<`{w`m6f$#3Hv9i;aY@f>%|ZAUP-eXr%RzG3mr>%PH&cpdURs&-BQ zW>3vJ^p3B(+p>NFF~JVwJ-FYbcA@#@WkoE@y`1a;R^v8V-Xpz)n>0%Fg-on7HKL47Cw)Vr`MYbk_ngDaaeSP5oD?IIlqUE+Z*Nm1OYl-JfK4KkgbW& zd+&{jW`{5mf<^&SxAFR>>6B8azF}f66&2MggKXB$u)TJdsG^<>hh9+ID%*Qq-q_RM zzb$4-*O*4e6=LR_P%4n-yz~Jxd6cP@r;Geh%F>iez1V%JznaZ?<^*qd>bc{j!@=^S zZ53GHqWn{pI+w{m%&(MM@zE4gFlqPxy&2G2ra1K?*wxckeKp9AN6Ns<$J1Me zMZtaF-zq8{(w!30Azf0^ASKbL)S3m(9hxbz5mY}ye?nC zHD}J*d+oJ8o74F09dP+mWhzy<%?Tuz%>Dsyw$@uaS~exa!Tua?`;kiL&6gQYx5u%r zPLRyeS0S&ex5@*|0;VrW4e!T&;ZvgIAZVT{V(Csw!WH64k==nz@bElrAzxMFeNIJY z5=um~>(*bL5ltU2F5bm^W^WHo4ht>ADiDmAep}_%;{i0Qkv$C(_PMvg;!n6Y7d;;2 zhYhRn!4C1dSCZtQefKUkZsJJO*tf6!~+wOSI}@ zVhye^d%*|{n0LTL0@U2m&_r3=nalY8GAyZgou(I^8Z~uWzZm2nee?(RkKZzBhmR}E zDn{oZUg&Dz`E<0tAx3D|It^;*E|T4}qlFy~r_Oa!UA%g*+T(>Cb2%Z+pTf;Q=N>X^ z)aLR1aZ66VR$RR6fBRUg$hz2geqiRFuGhqCzn_*OMB}}`9H>`R^@r-}>6`CDfzreP z3egyrI_HYs5BjM+#if7fZdKEtYu=XcI)u`jbf4n+rZ1Ar&y_x{~70%wH%yOgHE*tz?zrv%)r&Aar8V>!7Cd;jYf(*Z?sC@de`OEZT?T2g^k#H^r z-rQT%lycLK1eZno8?Fsqfr`}Ed|{nouexp=CV^H|%DP?t;1ea;xg7*d&?n1Xguv{* z*@IfYZ|9jdt#}xB{HvH{dl&@lgSzOx4L)RgPTYShRAbhui$TmzE4}~n47dGUXlNbp zT(E2=`+t?6jAqZQ>4z}j+I%WhoeASaFqSD08mbU$UDs{uHWx5;K1XL6)~-NFS-$vM z_A=0Fl*{_SNJ-E(`;bWeO%*Jdq zkBUl}2%2;mx8#dD(i-P(=;zM9k3XBUJx%S6yX8lR*YXMQSAkD7i*{xH=^?)i9sAsC z`K@x3fhby7q&z)krrBBs9zDyWlyJYBN*C+&&}V)`>7 zpAnrYrOb3QV-t3`i)+T~D?+nPnQ1f-Fx4}IX{H*dg#F?bU6Rq%$$3dyJ2vM4-&0yc zKlNwW&1Jde{dJDrQ|8H~i|;%uOGEnwqaSB`;Oa8H8bo(%>l=}=uFawaK`B<{)4=kU zQ01?5IFe;=b6z3^#F=$&UmzBojNPeKYM8@vPg!w8sC>+mi+x;3{zs#j9zXB=gFlpf zUR1m>v(koyw&*sL=-~cP|I0&JAStY`GC$mmFkXSy}9&nX*^ymS0JUL z$LK3>xbK0t!!D^ZY1+Ab<(B(PSG*%xjY-xD`zf_$MUpw_893}=|X9Dm*m7L*3}^-w!R@mqa!pbx?)&T>D7&78+mb(E<{6?Y!Kxc z(Ls*TsLkNd@@~fi+BKUJ6}mD_FyY05k3iDJ;a>|w=Gz7_TiWxX>9xYdpy0T)c}E|6 zAl9FM_Xeh>4;ra2)(t#?a3pdM+WnJ0-qRf}Cy)_j-`EMfTz?E}?EPj2nNTGGN9r!b z%L0&uYJ-B1@n0K$*5*|P)`yGQmg7N_i#aRG2j~zqr%Yb8|8t+x`m99X>G0$Wp|i6C z`1$XeZ|_Jak#meOAx=J!?#8~ZM&5neG`fj36zAuS@nm{v~y(e=>r4p}fprE3> z3Ei~9{4LO~$>?@ykU`#lGsTFaVL7ahfNXW9@Zd{_958_O*#>JuzS7gvw|uT;PMzr&0Z z@+w%*FZ-;%k$JYRYI;@R@9G#!jkY(0LS})6z)xm$vYge?6*q!UQL-ueX1g z?g|_;Tki%ihwbzi%uX)0sr6OnX<5m>_D(=9UyvTZ6rShhQTtaI(fa<3X{pUtf~#h; zatcq_V-(mJonG`tAM{oDw{rB3ff5WD2B?tid#zy*^5?I#X8pN+sh&Gl?Mq;i@25e1#1@I%lAbK1U`rfVQWn6}@ zz;0`#u*9U?(?Gip^NwZnI-4Xn&jF%&0q2m|P0VV!=q*;_%DD|N-2?Dcc=s0Sj5DJc z<8I=apl|D&)OSxvrwM`fa!^Sl{+~Tk+Hqt&e&|x`-AXSa@B>b&_eIW>&!;^jbZqnk z45}XZ>^{W=VHnDbFE1~*;9Y&d9=48swlIrcQN6Tz9sM`xT=9dN5;W~(Vy5o)Cyb(x zTp;FQ`G(qR#=5%zdkKF&0|DY*0yI4<&oVd)ubuUt*Wpx>`D^cNjG3$2OjmtqgbmgD zQ^F`aKexQGeU`VE8g&=9 z3!G&$P0BM4&iDEohn@TtS;jVZbdJFd;$oxMEYx;(kM%=LEk3qjn{VBl0jh^tvhqF z4K*aLx8JE6Z{{lcp=tA?{eDZz+WOOGTc5?j=f!!kqtHR{GxAdrvmyR`3Q%(E5 zxl{{byQ2*acpu{yJw8|Pku2ur7eyzB;2#TH3zR*poO01bxDp@BSJv~2`q36X>bsu{ z?6g=xkLhTqn?N<>uDG_=-|)ZnY$l64{=j58q}=ZD6nfoX{%NtspFIN1E`&xw9I_y% zDBAA!06#0W32UX=>tG!MUv-xTR()VLUw^#yiUvzz!2fQ=A_`w3dz@?l z4W$n56M)lZ*5yhbbN&;V~ zJ)`$V=RwcE`??&UdP;I^)C3zB@qc6D#_H>*(xx7NmF?+(-`YOlwChV?+RZpb9$-Xq z082Ac*OFgYm`eA=#a-%tYUs6kab%MzJbm+yL50)88+Ob0w2Jy)!o zmx1imYq|xa+8xsE7s>@~6~K>u^c7W41s9-M9^jWaZdrZM_8T8;Y&$zTIwZ52woUrGv?I#CV&ZUtSa$_pcg6 z5#ejnS4=;u@3-4!+c|Y!`@*YTacRG;i(W6DOp$0ew|y?Q!IsMari^t%WZQIB@+gk{ zZH_E|uRlBC67DP7h$%;>hlaPYhIfZPI%x|XT*Ggf+($Rtw{!N}WZIXfK;o7VJg1}& zz$=@djFs8fa;rOIf9IPWbOB%YJjzG{1_??;1yYPZZIF=TvBc`s`%W+XaxFvR(}Un* z_p2*+BcXme!-wF0a@zRG8tMPt6kp4{sB*paX$)MhNOZKSdgEkTde4g;U`qEk;VVYK z#C;+%mEmx;A+d^co(l6h+^p@-wYrjDJ$cq#7xWlUlydu<4jgj(#o8*Skf9{z zXmL#J9$FMYGdKyRWPM?X``*E^19Y)hotF=Pt3kR&!wh-pXy#utm&2dyjAn+W#ag*T@+Wp*>ut_!DiSHb#7;*TB5acp*s9j_tI zRoe_C*LL8QWGMhlg_|6yguzdQ=xS`Q` z@vM=l;WQ_O%6WE>x$XQ@iJjSA)aHSpEkl+i0PYQ&IEO*6w%z;X0WysT~@wrjK?Ty@FYrqr5`B z;Im(!Ce;0F9n1ABO=n)d{%l`Ov3%Y!`7b6%>WmU@#WYs%E8qvXA-5Hz6YM2q2tp&# zlCFb$yhq<33Y_tZ*JF)+Q5EqYtk2SzVGAG?GHrXO zm1#)K)k5LY%BWrIOx6o+dNr_09V$-?yDP0{IlpVz47i96>pvRSL9qGaP6^d}eDGw1 zc1M0DeqT-k(;W_r&{`5O6_iR2&Hg{2g(Glk4s0T*_Fymc5;DgPyuKPnRQ^K4{X@)2Bk1z15^XpQ3j*XV!W)_)z#VypO~ zNMnNzpl$eummg#Ho{Ww)6lGrM`71DX03YxfR4p30Yo@6Gl`jQ|Yo~)u)F;E*S8BSi zL|1s&Um}TzU><46G5jiGg!~G;^jPXU;;s@cQm1Zv$I{j?wNH$k_e=L8BG9C2^}_f+;~Epbb%duFhc~drnNFdS1-wzv`CWob!TG=0%GMLqd3WH zY;D4H$@r0ec5K*({-7_Em5;h?xju6W8M{q-gSz0awo*k|{6L|SMLSHwue4rpXEOB( zh`^z9<7s~kewAPKynANP-$`BFT$UbZiTs}psWFGe&uALzs&vj?tmm)l4AG0!9p*Gd zt2fBrgSls4W$&s`a~C$UK(KMp-`CnLMtIo|9qm{9n4wAV#lMTRgR+z75Ngj!ypy3|qQKnqq( z#Kj~T6BlpgJ$Wsnj4y6AgdG0i4v#H2cs(Js2L=v!ml67FZv~#arX+6aZOT-mxd`+U zz1Daz+f>z0%`a<06R2BWr&;rqj4o}t%r%AYZCV;VHe8X7d%Ujf(7DEiN%36uq7mzn zr(lj~kWu*!z#W8iTS%FG`XR%P$3n6EsG5nG;wAZK*N#_4kt^AP4f5d!#-uH@qIv(- zp`#Yyo8f?}@v?5SBUoHULap+d`3zi!gB3_>y9>n$jnyfpb*k_Qqp*OmDv_y{n+=3t zrHr79cs{bGJybI{L~jYJEWZmB^@XbT#_Xl4WARHf z?w(F5XN*)Oku+RnV;WlxI;@cZ@2kH6fqUTASD%MaWry`ONWEM8|8*~q93O`s4c-s! z1+TCL>jlILe>GIJ^#ncJ4$JT)NqWos{U@NxBr-+Mb^T1x$5vS6QFPAh7vmXl;!0+B zx@QE|)4m5(Z33ecRa?HL$Wx6Z?GVh}zmVW3 zrW3kC3Fqj>-l&L~K9m&h(D5LZ8vQBcC%I#5+HSUc)CN8dzbcLQ3{HDfPnKlp0gjHzl6Mr7vtZz)%N;fX;sOE_wl6Kff zHboowNzqrAL4%aH zDf3v<=y1<&XjFJMLR8Od?<_a#mlSvNqN&wJ+{i2Y(>KG!5?CSsC1$v6C+zjC`gjgs zuB4XKf??N)@Xd!2{?EQYEVb+OX3PSh%YV`~&*RQ&y>HQHb#8by<)UUUHjuVS!_^a# zX{}NPoZf)+@R$RvG1OrY`9}4Vb;qS}0y5@GHM~ulC-aA?yD)))BdH~6JzKE2mzeXv zrO`^GjxYVM>oXe0A&pO0Oy_>1*VJr3<#St!x3>ObepuyFqP@_c25QdwoYbl6*4tB;ibk*Nc`Ex$28 zv(QlIozLdW7!eP<7=CNLUG6q=iA5jw1#QJMjYETIj_+Q7K*n=NUw3X(CB1LeFP~}e zv+Zc$91PF0`9w$_R{$lNWn<>;hfg+^{eC)Meh>DS+q?#>VR1F4>F@gFU5CBhrkJNM zPWIFL%RhG$5^^-~P7^y8^L&^cQY*`F?n=Azu-<&Nqj|3crZ8sz8VWx40s~UHz7HLsi#$DspE@CTVV%;oVK&q4 zgJJdnZ(Trb+??E!=p2O5)IQix;(|hqGp8u_e;V<@^B%0UZS60`gOC@_zD&)sb)DDA zzlt&e>9+^EKTByC=$GSvf1^Cq{q}%jL!^J%XSUIo9Am^?OKpJ!yf4eTuu#l zfLa^B8PwIwQDMg|M!4>|@UdvJalPze{nVAL-10{poBf~VE}48UfQZ)p6&t}~VmWLW zZe`nL!6hkJWLyIE1VE`MQenT?mPAj;J;_AzP8*I?={oc74!ziAH!J^`4J)wAtI$l*#UxNEZdZ}L zj;ho?0WH7Jw=Gog;Re^o=0yj|ukU00Z46OiIt!_MpI=+?zO4r87Tqp{l#rx;5`LXB z3Rx;7moaxIy>uRd1+FX&wA*^40OzQBYn*T(cL+naB~bX+@!6=M?;?H=k>@#ij1`sz zbYT+q45#3m{6qfQd*ZzqKvXJmK_+_`w`^@~ z-9dM&&q-7}jlFSlQ2oFFUY~yuz%P$K6E17NBNBONB}r1KAVKLuYG?jir9A|PpvP8> z&UOH~1;mQ4#x>bi*PSpe2Tz?I=lmd6Na`|Xppf-84qTFj8&1>|ets2AF2+VNZ{{aGr4*!WCM~3J8qv|0KtQd@I zPIoq=t2*=w%KiG&tG1YTY&VVp7&{D!$`66D?}jfo^#;*Uk??Z znS1)BnmPSZy@hQga#e<(U9bg^^fjTUf3n^E(ZVdXL0ad=VihsUX=a3ecS$^)cCJV` zx*iePl~pVG_b@7p@7t&^{PiQTfzWoQw!#TxRA*k`WbtZ@>Fu!IU`HW&|A4ge0Z+)` zTHS|CP+9K?e|ZA%;zte-{rsxPv7mBFE}ti~B+xRVSN~m~MFq}46c^?i!AgT46@sUY z16LNI=M)E4tFM&itq_5O`lG3)Q)C^XU6?hls18t~`v; z>cMgnWm*}1$RuCYY;){ReyyQ-HTQBvC0TLJMw**2z8>fQ+Qs>X#hVdUo5@u5)%-*S z_ha+6h2jW9-y3RRHCfL^GG(dLTK)`p^Mt~VPezqe!)57a$2D;3f@?!6^8Sp6Mi*AK za7D6`8*Z#0Y;PB^Y!!<(26GS1m~sx(mk6kfP^?mB1=$7y$!ikn{(IsSa|~nQSUxQA6K%W?>;pk3rAGF4JBib@TNzj%EmnQ zmUrhN^Q9n^04K9Hd%1IJMnt@$`gJ5xlNezv?});(7ptHhR0vTrM$$Yv`+m)q4uG&y z=?@V9z(Qk9+W{yr;8BpBQ@|z#r9A7+$x5n-D=l1Pgdb$u^?dfB+UhNsgt@=?HtR!x zFEL)>8jP9&Ss%7`8fyWOWx2g8cypXawrr+sjJ8VZGKJTysV)9r)8EI@qk3TXx@BhW zqob)QD)9Mqj)z9kqUEWgRdTTz8MPB*h#2A4gCw(odorJniM>kD-vYje;Xq&ljNd?A z!^i(_sB7sG&`jYIybqw=gQ^)$C-+e#{J?}}>yUCi?M%n%9P&*-IouL`yx?n$=S)Ww zv#s@B+9`;iv~6<$A**Cz3=P@0u$!v1wn5JyQ_qoEwCO|~$k)u?Hk)ZLKbFkNaHbj! zSG0jz2>ktY%ETiGGd}*82KUlgX-)Qpb;h%4e5sT_a~X$RMO-nm8{m8s`uHQ3Y+6!k zP9(J&=21lB6jm(2Odk9Y>iU}~{* zh2Ip$mb12tfZb5Z4ftzJoUTwear!Y#qWs5HbT!^{&Ru!u68>zdene~#X5!3NDMZMc zA{qx66++crM%E(oXY72B%^wZXtb7nklpGpkUdywKeSN9yCKNZ+-WmZ3u3phzMpZzKgOC%pIMuqo9&a;Ne&|$;&pG@pF_%6nH4P`n> z_Qq8okNS#^lw1|V$2?;;5VpybKqsL{KTyzI^Nc;@@pGrRgV|=e8rbC(7Owz zdsiqb484bk(q#&Ew|-f&eZ`BxIJj;`V5N|;WXs|TVqWdbaKaRQx3^DHodf*uzU-_N zMod|exDJOW)pMJo(V_A0{oq)@ga5y7-2iz7;@28#(rJI=YAlF|oLx(j?tV7c2$CEI z4xg__z7+O?Mk~8XPD#+h&bIaFm9+*@kdc?f|hlCf%f@1pl zj(ojd?oV^$jrJn zWjTc2u+^_?`K}etpsy5J`_f8*G?G2vlFHE`w|g3YQgBp$8-n&Sw5!pig)M@I-hz)Z z>Jjjk;=3AT@+=aP)mH#mH+BU+rt%qK0eMXY0gq3Mh;xUE(drrGa+511t3S!`3UT0` zJ0D%5+&wFbYVAhP6;Lp?Ngk-@+LOJgm|I0mR|B{(A1MKu&W!$0PcL{tp4)Z)3n4g^ zUaowCQy_qw9upS|;F zy^H+f)ay>6{({FAm{V4-@+7o26AG}(Wc-~hH9^NMaF>SuHG3^92w}dHWKW-4R(?Zy zaKDt6DM!y}kWAJFp(+yl^-D8OKBI}%t!PK20sq4C*~}z z0c)b+;@Prph1ygjQu^8Mr%x8=O}*SBaI zd1$)H1Toww9gA+^hWwr~m5L3^r%}1H4wO&;I%R4fH zOmBv~kc*|Gz2})yG$cH=>+kWb(2R8vL&>?q124(6b^4ctV%Eh=xrHuIsB^cz zT5Eg_Wvl3I-h?>b-d%r0fCW4RXWt`?wzG@I_^16XZfOUqVdPq$p)dveV^!IKu($4} zeX9!div59wwfPK50;yBg<%1XIge-QEB&q9uu9J$O^=KbZfl>a<^NA!M!y+PARd6*? zxQm`A_M%g*dGc*P25*-iidNLxi_kmQXZ5>((^_2(D(fD5$D*#dAWaiv2pi$5TOdnZ zUTdJpZKDFTfW>`O&)6hNBWpO)^hwv;kTx(E8~Q-J9|kbq<;x3l*07TYt zCwGP*m^*4Dp2jdQtaY9F&o)Cz%YDGm_1Kk0psC0s_NGpF^158Bl6%^+ zmPSs$bJ1SxtpDzZh5IbGPTZ@li$Tc)CMFou_YWU5pOXnQCiFN72q?2-)@T7xjHwTRzt9lrgN~ zJ*PUgWQlw*@l)92hC)dv%WZ!8^n}1ef-rTN4lU4(v8tTc_DqVHaFiMA&r@2tH=JJJ zkLnVMR&wXd?j~nr67TVje`pz_TodE0R2wOFV$E{)9IFB|(dfU-dKJXj-DWDqlNz)~ss@P_%noUAyI?!MbO4j#-MEma?9YzT+^R|C#vw%5PJCy2@)nr(i@Y zVB0fDtijzeNNO(9* zM^4~%;>YvQ-~)~*j_1bRzq~_Is{Z{y>{X0O@T7Hw7$mg9@s7^A^7o%QM~sRPsiA4u zdKB$}sPU&aDo=U(jsOl~xCbf{K;Z*@Z{7aowhApJ%lEl71!po~i&tirVsx^1UkU?G z9Y%ZO#VbdW^u}XA((resP+{h7_xA44cL;rSJ%PSL4#qQjIZ$r30j!q>^MoeN-F6_` zCDf(H#%gqx_VTzjQ}xXhmYoRz@UWHz$m&rUT?8b-kukB0Y&D*CGOS-dc*Ic{x<4H- z^Rm56XE$>a_vd)7SgMdFlxB)SG_+&vO~hS;iML6lvmp4L-xbeQR3IAh$meN!Q%Q|V zFQJ4w(s6_B}_VmeS(rl?BCWMRD{%TEzpz8T2eHbSwC_q<~03SSbN+euK#V`PK+jSzUf@ z+=K{^VO~DQIDj zZ9dA5fLY&`bAWh|h}VF_BX5zQfCWIB&-ENHa!4J<3|crn`CUa%P+Wy>IVoDtBwwBt zfmH{1i}%Mv8Sd9+ASEPpqfFSjcMe3DTOr$KUq+_sw^#socjjU35Du2sFyC!>YVXxSb!-0ubxzkX0i^6lOBxW8ZzANzj#FDKK+-!5Rym1t}xWqN7o5g<1BH zECR;1(A^TR%G%44A#Vfk<@K4JB-SU20!2KZp5eNJ9VMh+$G#sPk-Yg2sU$358Vf{2 zR=)iYJ{Rc=u)zt*wTsudd@}S}ZMj(_P`4NaIt&15l4B8z4kzgJUV(r`Kai&M!U~fC z9VOv?tTy=gKl>5TUYb7(bKN2_)lypl@R)OUd4unxK{UNiS3P}TkpNQHr{>r>qUOiL z338anELpWde-B9=Z`(4QH-g;qW{OROjIq{ey&rMrC3|Lin^dsus`ue_3m#wVKNwPFB&=N2Z$Xq2@X%BKzN>dQX zq|8)smfz#sigWNB-f|812p(56R`FQ+7~c=KH@-J_|en1ank1Pdu2&D;Q7LF6{S zJ(2A>vwo$&%RWhck=%ari0*cKW+#$0kA$fc$zJ7vdZA<6|h<6 zrnC8xUF zn;44DWmCj8Pgo-bX9Yoa!v-IA+h`NI;;>#t8UxzZy(`<61Ocg(xm1XHC!2TMLQMZD zEHZX;tWk707FV{{fL{bAs?^!9XXN&Y;Yl#e_1^r;I zSQ#1x0m}%wHQL*v4et-z+?-Mlrb{@UHmYd$>pF!cQ2uu`maUJ3r@uUSfozQd)sQA8dW=UWYN`aKr@&)~lbPw4{WJ?Sf$ za`O%v0z=T^XQI``WH++|3FZTGvb4udM5PD8D1 z$A7+Q4|}+)-1>csRiteITxo~c8*#$EoCrueAUZkC1^0dX&Eo8g`<>sH7H~G+V;o9! zUOvubbDc0CYlYkPhb+p^LgHzz?QaZ4c+|FBtpyWid=KbY8^i3yoX8 z$~}kp0z)@;+dN;aARnIsFXmUNY>wj3ypTl+EY_MpAR`KEI-**82BH;{l4`1%nj2Sglo>nG4@}Y9{`r8%Wq#RHNep zxGAN^4a-~KizC62m@1E3__n*nR`Ox`U)!o(;UKJpxUtCRKT)Vr7=8rkt7EnEsDHSf zWB97BE?JqQiuYXXC-Q`@jEuMkpynOcE4XK^P&h%CmdtPxuw>R+4B2EHht33Dk1|d( zsw*4Ga6wE;#toy381YOy6R@r5w*O5|$hvD+RkXjiQ$f~Zl5!W2y{dT4wtVvdjNbG~ zQHVWPVltgh<2oEa3Nq|`j+Pd$%PqC5+iXHF;@wU^m#WMOK?M&#?7dWfwovwrrF&Tp z8>L$}`6CKR8gJW_AIobKoyf|&OJPUSXvoge^7WtbRolG9c8-tKwc=r|5ziEQEhid! z8w6f@Dn$}e1!0LJfgd-lrQAI8jh+C3FXI6)+%cky_o5;6oF=+MKGTWLQ*Yk16+L~qsC@$m&?`w@CcQ+oA6dS(?=bZC*E!IUree}zs zOty#-n}xi0p~dCx1fpo;D0ETe!_k_)-;qs8WZhT^vRrU|o337|*5c_MXVDM>MFD%<3SV}$%{?3-CB{~b8rlYLu9rRnUKc?kaH7SASZR3Q*?&CPIpww1 zT+e>fL%ZXQjo6jKDi9qh;zo)*vl)~}=L9##xmr@hwBOEDK55R@SN~Fa9MATU+((fW zoh@hN^pu`dG`g5gF#VOpe#66fqu1{5_VL9`Sy_b4wtvS?GG==J- Dv}HV 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

    xV({Nn9X(2IkZOC?Yq?W+F7aOWmp_ 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ࠡj=*fg}K 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 XNzj9_P4i?BfIr~pO3#X<4E+Bev$1%m literal 0 HcmV?d00001 diff --git a/docs/idn_docs/docs/img/transforms/account_schema.png b/docs/idn_docs/docs/img/transforms/account_schema.png new file mode 100644 index 0000000000000000000000000000000000000000..2893a8f60d297f8f28f5e32c8ac2e4192c56a555 GIT binary patch literal 192134 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ν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 E0UFiCAOHXW literal 0 HcmV?d00001 diff --git a/docs/idn_docs/docs/img/transforms/account_summary.png b/docs/idn_docs/docs/img/transforms/account_summary.png new file mode 100644 index 0000000000000000000000000000000000000000..828bb744cdbd4929b658fca21b29fab04b4db589 GIT binary patch literal 204282 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%0A~n%HCV#l0@70S1*A0=6<7;sQD)6% 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 literal 0 HcmV?d00001 diff --git a/docs/idn_docs/docs/img/transforms/create_source.png b/docs/idn_docs/docs/img/transforms/create_source.png new file mode 100644 index 0000000000000000000000000000000000000000..000071d3bf4b71ecda051afeb359d07d3da789d8 GIT binary patch literal 105048 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 z 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 v}WxD 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 ~{*a4qTU#zz``ALj8)tlms?BMqdoUo) z-9Ujyk?w)@PULtr?wa1L>c{r=QDw*YeU5l)?~N4!#Ks3xdium4uE)dMjc@000<~qj z^^aaw-S^-5eEY)g0}L9(3e0nsJpP-21@66qsKq^GGDAY*=N4s{%Ld6 zP;^Y|-fat>rCG{LLh(!o0t#C_8x;IwlTc83u}?HS=Q^Ue@A`^zV6gWUKdUW!YCr6- z*EIE`oyEnkeQlglJQ4E|N)P>Jr2AEf`H#-5_3xy)UR|-a&vDf4jU{kiC_fDc;&yCy zKNPTPYKp8K({zsC@?$MjlA@hXrgh_NGnCGAcxmD!^eI$)Xh;McQLeGd6z_Vi3it27 z%WuwIF`&IDEDDq;K=J9kzvxeZC$Of@n5(>eYJRyPPCRfztG0~Klg|H9_tEgkMrswG zA8--t=)S*-TjjAo&$1IO&VY9~7IPAuRG!b|FVJ0MY~?zeci(q308{B(^ZgSY$`psO zpsdCrL!IVNo_zi?4CBRjJq?<=^6x&$Q?3vVR&*coifL@+%Of~beNcF*3I%3>J~Ca~ zM-k_S>tC(vu+rl^kkYB7RB|4rf+^iR540(P;h{i2jRsa~Q98#l@U4KY*3w`Hy>Ht* zc+C>8#W4u)?cI=dxX5Y^sp`pHdAZV5584H?QXCogp`Gjyg5+6gqLLL_HU-RjyQ_NI_L5iZQ)8>7$*Zzfq7Qm8MD^_i#*?~#cecgR* zK}x5%cD{W;>G2+tM%{Ub~2!1-Z)#FH{d@%xzv+qPAHS7TI&X@7yX@ztW!2VhIkgh z&t~W_^^-LcP`GEIg7)Y9XK&TcdHJ={XZ<*b@cbQxF2{(dbFzlqE8LB69=z3{#}Uo^R%=jfeyZJixzBv*@N6L8$1?8 zP597_LV&rI76 zAd1>Q8xj7L9BJDB*XBJrn0gJ84#d121?Q?}@!aQL2kM|?nYVN0ezFuDwnK%i?tVhu z=TdX|^16%(v@^PU|WL)?O_ zvU9;oz(ni2g6wl~Ke8q{;}HwUxKy|#h*6GIx%TYiITTU>jhtk4*2`~=pAIV1!_J!v z&)Wpc*XBGLff_Y`+!z=Cnu*hJ=dzy=MGpBNyG5n&Jk$X32tIG@+zv8d{vL7O#tHQE z6Q837^z~oV7&}J|7i0$byrpsKOkviW1f*8F`S%a0KwbiMN#vhjs)j)Pf%pj7ny%a* z`F!>eC{ZR`lM(xO~6*$8uyq zn%6j)j`vcB%U`AY_3#eR-q|~!FPa1XF$3B?pk295O7i*De|!i~_^nWKN<(U^G*jXB&RHTQL9gnY1_@-{4678cVElR1C*Zarz`QwleZjpf|j zP=Q}xN_qAqf(Bc_b^?!rFqw9}Bo7hK%D_V;P^Q~@l|iSA{5Eq?H(^}cg*v12--Qxq_}VgH2e;$jiFW0*N&4AN^V;_5^KqF=n8sl$@h zP#4I`G*i^$q5rRWoVkB}eeT=8toA@u-4{B5>Cf$rXeoTZ)rzPGm(Rc9F}9w!M^f5p zm*s6yr}s+)z8!!0kW21L+*i)Gz)ii4PK{q|C++ip^xf!)V6o(z!v~L2i~+9Nn0bUvx4tDnm{ Hr-UW|H%@@q literal 0 HcmV?d00001 diff --git a/docs/idn_docs/docs/img/transforms/how_transforms_work_2.png b/docs/idn_docs/docs/img/transforms/how_transforms_work_2.png new file mode 100644 index 0000000000000000000000000000000000000000..0538ab9a0d8b5b5853eb9ed87ce582d8ddf9202e GIT binary patch literal 31355 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 OaAc(vC3ElV`}`jd+t42X literal 0 HcmV?d00001 diff --git a/docs/idn_docs/docs/img/transforms/how_transforms_work_3.png b/docs/idn_docs/docs/img/transforms/how_transforms_work_3.png new file mode 100644 index 0000000000000000000000000000000000000000..1a7dc36a89c53e0365835459cde717d6e534abff GIT binary patch literal 48584 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 Ncg19HC*Rb3^*( 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 Da`@)E literal 0 HcmV?d00001 diff --git a/docs/idn_docs/docs/img/transforms/identity_profile.png b/docs/idn_docs/docs/img/transforms/identity_profile.png new file mode 100644 index 0000000000000000000000000000000000000000..0d3792e7a9c8bfb083e57cadf1d2d4b8e3881487 GIT binary patch literal 55746 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 literal 0 HcmV?d00001 diff --git a/docs/idn_docs/docs/img/transforms/mappings_tab.png b/docs/idn_docs/docs/img/transforms/mappings_tab.png new file mode 100644 index 0000000000000000000000000000000000000000..fa42c9684b0717cfbbb26d8f7274461a628ad094 GIT binary patch literal 341114 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 z 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

    (gdrG%6G;+{fCS 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 J^x3Po{|C#>bv6J1 literal 0 HcmV?d00001 diff --git a/docs/idn_docs/docs/img/transforms/sailpoint_logo.png b/docs/idn_docs/docs/img/transforms/sailpoint_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1ebab39208b470a61956053e13cc6667eb01de53 GIT binary patch literal 15416 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 QfBf~=vMMqqQpSP*2feTykN^Mx literal 0 HcmV?d00001 diff --git a/docs/idn_docs/docs/img/transforms/temporary_password_attribute_mapping.png b/docs/idn_docs/docs/img/transforms/temporary_password_attribute_mapping.png new file mode 100644 index 0000000000000000000000000000000000000000..632d9af88770f1e348068f24e2daf91c2a412375 GIT binary patch literal 53093 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

    )JIQ;}wA5Qe+{ZBvcBjQp(xLPd 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 z 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

    6R`5>FzunBoqWxy1S&M^AG|`ch>>w?moO9 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 RbOhi}LR9uy!Bah-{|mxI?XLg; literal 0 HcmV?d00001 diff --git a/docs/idn_docs/docs/img/user-web-app-identity-now.png b/docs/idn_docs/docs/img/user-web-app-identity-now.png new file mode 100644 index 0000000000000000000000000000000000000000..866376ea58e7f4ce7062248d3ca21c43fee064c0 GIT binary patch literal 93703 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 **NOTE**: Sometimes transforms are referred to as Seaspray, the codename for transforms. IdentityNow Transforms and Seaspray are essentially the same. + +## How Transforms Work + +Transforms typically have an input(s) and output(s). The way the transformation happens mainly depends on the type of transform. Refer to [Operations in IdentityNow Transforms](../transform_operations/transform_operations.md#operations-in-identitynow-transforms) for more information. + +For example, a [Lower transform](../transform_operations/operations/lower.md) transforms any input text strings into lowercase versions as output. So if the input were "Foo", the lower case output of the transform would be "foo": + +![How Transforms Work 1](../../img/transforms/how_transforms_work_1.png) + +There are other types of transforms too. For example an [E.164 Phone transform](../transform_operations/operations/e164_phone.md) transforms any input phone number strings into an E.164 formatted version as output. So if the input were "(512) 346-2000" the output would be "+1 5123462000": + +![How Transforms Work 2](../../img/transforms/how_transforms_work_2.png) + +### Multiple Transform Inputs + +In the previous examples, each transform had a single input. Some transforms can specify more than one input. For example, the [Concat transform](../transform_operations/operations/concatenation.md) concatenates one or more strings together. If "Foo" and "Bar" were inputs, the transformed output would be "FooBar": + +![How Transforms Work 3](../../img/transforms/how_transforms_work_3.png) + +### Complex Nested Transforms + +For more complex use cases, a single transform may not be enough. It is possible to link several transforms together. IdentityNow calls these 'nested' transforms because they are transform objects within other transform objects. + +An example of a nested transform would be using the previous [Concat transform](../transform_operations/operations/concatenation.md) and passing its output as an input to another [Lower transform](../transform_operations/operations/lower.md). If the inputs "Foo" and "Bar" were passed into the transforms, the ultimate output would be "foobar," concatenated and lower-cased. + +![How Transforms Work 4](../../img/transforms/how_transforms_work_4.png) + +There is no hard limit for the number of transforms that can be nested. However, the more transforms applied, the more complex the nested transform will be, which can make it difficult to understand and maintain. + +## Configuring Transform Behavior + +Some transforms can specify an attributes map that configures the transform behavior. Each transform type has different configuration attributes and different uses. To better understand what is configurable per transform, refer to the Transform Types section and the associated Transform guide(s) that cover each transform. + +It is possible to extend the earlier complex nested transform example. If a Replace transform, which replaces certain strings with replacement text, were added, and the transform were configured to replace "Bar with "Baz," the output would be added as an input to the Concat and Lower transforms: + +![Configuring Transform Behavior 1](../../img/transforms/configuring_transform_behavior_1.png) + +The output of the Replace transform would be "Baz," which is then passed as an input to the Concat transform along with "Foo," producing an output of "FooBaz." This is then passed as an input into the Lower transform, producing a final output of "foobaz." + +### Transform Syntax + +Transforms are JSON objects. Prior to this, the transforms have been shown as flows of building blocks to help illustrate basic transform ideas. However at the simplest level, a transform looks like this: + +```json +{ + "name": "Lowercase Department", + "type": "lower", + "attributes": { + ... + } +} +``` + +There are three main components of a transform object: + +1. `name` - This specifies the name of the transform. It refers to a transform in the IdentityNow API or User Interface. Only provide a name on the root-level transform. Nested transforms do not have names. + +2. `type` - This specifies the transform type, which ultimately determines the transform's behavior. + +3. `attributes` - This specifies any attributes or configurations for controlling how the transform works. As mentioned earlier in [Configuring Transform Behavior](#configuring-transform-behavior), each transform type has different sets of attributes available. + +### Implicit vs Explicit Input + +A special configuration attribute available to all transforms is input. If the input attribute is not specified, this is referred to as implicit input, and the system determines the input based on what is configured. If the input attribute is specified, then this is referred to as explicit input, and the system's input is ignored in favor of whatever the transform explicitly specifies. A good way to understand this concept is to walk through an example. Imagine that IdentityNow has the following: + +- An account on Source 1 with department set to "Services." +- An account on Source 2 with department set to "Engineering." + +The following two examples explain how a transform with an implicit or explicit input would work with those sources. + +### Implicit Input + +An identity profile is configured the following way: + +![Configuring Transform Behavior 2](../../img/transforms/configuring_transform_behavior_2.png) + +As an example, the "Lowercase Department" transform being used is written the following way: + +```json +{ + "name": "Lowercase Department", + "type": "lower", + "attributes": {} +} +``` + +Notice that the attributes has no input. This is an implicit input example. The transform uses the input provided by the attribute you mapped on the identity profile. + +In this example, the transform would produce "services" when the source is aggregated because Source 1 is providing a department of "Services," which then gets lowercased per the transform. + +### Explicit Input + +As an example, the "Lowercase Department" has been changed the following way: + +```json +{ + "name": "Lowercase Department", + "type": "lower", + "attributes": { + "input": { + "type": "accountAttribute", + "attributes": { + "attributeName": "department", + "sourceName": "Source 2" + } + } + } +} +``` + +Notice that there is an `input` in the attributes. This is an explicit input example. The transform uses the value Source 2 provides for the "department" attribute, ignoring your configuration in the identity profile. + +In this example, the transform would produce "engineering" because Source 2 is providing a department of "Engineering," which then gets lowercased, per the transform. Though the system is still providing an implicit input of Source 1's department attribute, the transform ignores this and uses the explicit input specified as Source 2's department attribute. + +> **Note**: This is also an example of a nested transform. + +## Transform Usage + +You typically use transforms when data in IdentityNow or on a source is not normalized for its intended destination and must be mapped, generated, or otherwise altered to meet data standards. Transforms have a variety of applications across IdentityNow's feature sets, ranging from account correlation for access reviews to provisioning new accounts in target sources. + +You mainly use transforms in two places: + +1. The identity - on an identity profile for identity attribute calculation. These are calculated during any identity refresh process. + +2. The account - on a source profile for determining new account attribute values for provisioning operations (like account creation). + +### Identity Transforms + +Identity attribute transforms are configured on the identity profile. Use them to determine identity attribute values calculated during an identity refresh process. + +**Configuration** + +These can be configured in IdentityNow by going to **Admin** > **Identities** > **Identity Profiles** > (An Identity Profile) > **Mappings** (tab). These can also be configured with IdentityNow REST APIs. + +From this screen the installed, available transforms can be added to an identity profile to transform identity attributes. Select a transform next to an identity attribute. Once the transform is configured, click **Save**. + +**Testing Transforms** + +Once the transform is saved, you can preview the example transform data with the Preview function. This provides a live preview of the newly saved transforms applied to the identity data. + +**Applying Transforms** + +Select Update to apply the transform updates. This starts an identity refresh process to recalculate and update identity attributes for all identities in the system. + +> **Note**: This process can take some time. + +### Account Transforms + +Account attribute transforms are configured on the account create profiles. They determine the templates for new accounts created during provisioning events. + +**Configuration** + +These can be configured in IdentityNow by going to **Admin** > **Sources** > (A Source) > **Accounts** (tab) > **Create Profile**. These can also be configured with IdentityNow REST APIs. + +You can select the installed, available transforms from this interface. Alternately, you can add more complex transforms with REST APIs. + +For more information on the IdentityNow REST API endpoints used to managed transform objects in APIs, refer to [IdentityNow REST APIs](https://developer.sailpoint.com/apis/v3/#tag/Transforms). + +> **Note**: For details about authentication against REST APIs, refer to the [authentication docs](../../authentication.md). + +Testing Transforms + +To test a transform for an account create profile, you must generate a new account creation provisioning event. This involves granting access to an identity that does not already have an account on this source; an account is created as a byproduct of the access assignment. This can be initiated with access request or even role assignment. + +Applying Transforms + +Once the transforms are saved to the account profile, they are automatically applied for any subsequent provisioning events. + +## Testing Seaspray Transforms + +**Testing Transforms in Identity Profile Mappings** + +To test a transform for identity data, go to **Identities** > **Identity Profiles** and click **Mappings**. Select the transform to map one of your identity attributes, click **Save**, and preview your identity data. + +**Testing Transforms for Account Attributes** + +To test a transform for account data, you must provision a new account on that source. For example, you can create an access request that would result in a new account on that source, or you can assign a new role. + +## Transform Best Practices + +- **Designing Complex Transforms** - Start with small transform 'building blocks' and add to them. It can be helpful to diagram out the inputs and outputs if you are using many transforms. + +- **JSON Editor** - Because transforms are JSON objects, it is recommended that you use a good JSON editor. Atom, Sublime Text, and Microsoft Code work well because they have JSON formatting and plugins that can do JSON validation, completion, formatting, and folding. This is very useful for large complex JSON objects. + +- **Leverage Examples** - Many implementations use similar sets of transforms, and a lot of common solutions can be found in examples. Feel free to share your own transform examples on Compass! + +- **Same Problem, Multiple Solutions** - There can be multiple ways to solve the same problem, but use the solution that makes the most sense to your implementation and is easiest to administer and understand. + +- **Encapsulate Repetition** - If you are copying and pastings the same transforms over and over, it can be useful to make a transform a stand-alone transform and just have other transforms reference it by using the reference type. + +- **Plan for Bad Data** - Data will not always be perfect, so plan for data failures and try to ensure transforms still produce workable results, in case data is missing, malformed, or has incorrect values. + +## Using Transforms vs. Rules + +Sometimes it can be difficult to decide when to implement a transform and when to implement a rule. Both transforms and rules can calculate values for identity or account attributes. + +Despite their functional similarity, transforms and rules have very different implementations. Transforms are JSON-based configurations, editable with IdentityNow's transform REST APIs. Rules are implemented with code (typically BeanShell, a Java-like syntax), they must abide by the [IdentityNow Rule Guidelines](https://community.sailpoint.com/docs/DOC-12122), and they require SailPoint in order to be reviewed and installed into the tenant. Rules, however, can do things that transforms cannot in some cases. + +Because transforms have easier and more accessible implementations, they are generally recommended. With transforms, any IdentityNow administrator can view, create, edit, and delete transforms directly with REST API without SailPoint involvement. + +If something cannot be done with a transform, then consider using a rule. When you are transitioning from a transform to a rule, you must take special consideration when you decide where the rule executes. + +- If you are calculating identity attributes, you can use [Identity Attribute rules](https://community.sailpoint.com/docs/DOC-12616) instead of identity transforms. + +- If you are calculating account attributes (during provisioning), you can use [Attribute Generator rules](https://community.sailpoint.com/docs/DOC-12645) instead of account transforms. + +- All rules you build must abide by the [IdentityNow Rule Guidelines](https://community.sailpoint.com/docs/DOC-12122). + +If you use a rule, make note of it for administrative purposes. The best practice is to check in these types of artifacts into some sort of version control (e.g., GitHub, et. Al.) for records. diff --git a/docs/idn_docs/docs/transforms/transform_operations/creating_your_first_transform.md b/docs/idn_docs/docs/transforms/transform_operations/creating_your_first_transform.md new file mode 100644 index 000000000..0f7362eaa --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/creating_your_first_transform.md @@ -0,0 +1,206 @@ +# Creating Your First Transform + +## Overview + +This guide explains how to use [IdentityNow's Transform REST APIs](https://developer.sailpoint.com/apis/v3/#tag/Transforms) to do the following: + +- [List Transforms in your IdentityNow Tenant](#list-transforms-in-your-identitynow-tenant) +- [Create a Transform](#create-a-transform) +- [Get a Transform by Id](#get-transform-by-id) +- [Update a Transform](#update-a-transform) +- [Delete a Transform](#delete-a-transform) + +## List Transforms in your IdentityNow Tenant + +To call the APIs for transforms you need a personal access token and your tenant's name to provide with the request. To get a personal access token, see [Personal Access Tokens](../../authentication.md#personal-access-tokens). To get the name of your tenant, see [Finding Your Organization Tenant Name](../../getting_started.md#finding-your-org-tenant-name) + +Before you create your first custom transform, see what transforms are already in the tenant. You can get this information by calling the [List Transforms API](https://developer.sailpoint.com/apis/v3/#operation/getTransformsList). + +```bash +curl --location --request GET 'https://{tenant}.api.identitynow.com/v3/transforms' --header 'Authorization: Bearer {token}' +``` + +The response body contains an array of transform objects containing the following values: + +- **id** - The id of the transform +- **name** - The name of the transform +- **type** - The type of transform, see [Transform Operations](./transform_operations.md#transform-operations) +- **attributes** - Object of attributes related to the transform +- **internal** - A `true` or `false` attribute to determine whether the transform is internal or custom + - **true** - The transform is internal and cannot be modified without contacting Sailpoint. + - **false** - The tranform is custom and can be modified with the API. + +```json +[ + { + "id": "2b5191bb-051f-4edf-8283-3962b4a0f7a5", + "name": "ISO3166 Country Format", + "type": "iso3166", + "attributes": null, + "internal": true + }, + { + "id": "484e717d-2841-4bab-9bbf-6f48d8096965", + "name": "Calculate Partners State", + "type": "substring", + "attributes": { + "input": { + "attributes": { + "attributeName": "Location", + "sourceName": "Partner Accounts" + }, + "type": "accountAttribute" + }, + "end": -1.0, + "begin": { + "attributes": { + "substring": "," + }, + "type": "indexOf" + }, + "beginOffset": 2.0 + }, + "internal": false + } + ... + ] +``` + +## Create a Transform + +This [lookup transform](./operations/lookup.md) takes the input value of an attribute, locates it in the table provided, and returns its corresponding value. If your input value is not found in the lookup table, the transform returns the default value. Replace `{tenant}` and `{token}` with the values you got ealier. + +```bash +curl --location --request POST 'https://{tenant}.api.identitynow.com/v3/transforms' \ +--header 'Content-Type: application/json' \ +--header 'Authorization: Bearer {token}' \ +--data-raw '{ + "name": "Country Code To Timezone", + "type": "lookup", + "attributes": { + "table": { + "EN-US": "CST", + "ES-MX": "CST", + "EN-GB": "GMT", + "default": "GMT" + } + } +}' +``` + +**Response Body:** + +```json +{ + "id": "b23788a0-41a2-453b-89ae-0d670fa0cb6a", + "name": "Country Code To Timezone", + "type": "lookup", + "attributes": { + "table": { + "EN-US": "CST", + "ES-MX": "CST", + "EN-GB": "GMT", + "default": "GMT" + } + }, + "internal": false +} +``` + +Once you have created the transform, you can find it in IdentityNow by going to **Admin** > **Identities** > **Identity Profiles** > (An Identity Profile) > **Mappings** (tab). + +![Mappings Tab](../../img/transforms/mappings_tab.png) + +For more information about creating transforms, see [Create Transform](https://developer.sailpoint.com/apis/v3/#operation/createTransform). + +## Get Transform By ID + +To get the transform created with the API, call the `GET` endpoint, using the `id` returned by the create API response. + +```bash +curl --location --request GET 'https://{tenant}.api.identitynow.com/v3/transforms/b23788a0-41a2-453b-89ae-0d670fa0cb6a' \ +--header 'Authorization: Bearer {token}' +``` + +**Response Body:** + +```json +{ + "id": "b23788a0-41a2-453b-89ae-0d670fa0cb6a", + "name": "Country Code To Timezone", + "type": "lookup", + "attributes": { + "table": { + "EN-US": "CST", + "ES-MX": "CST", + "EN-GB": "GMT", + "default": "GMT" + } + }, + "internal": false +} +``` + +For more information about getting a transform by its `id,` see [Transform by ID](https://developer.sailpoint.com/apis/v3/#operation/getTransform). + +## Update a Transform + +To update a transform, call the `PUT` endpoint with the updated transform body. This example adds another item to the lookup table, `EN-CA.` + +>**NOTE** Modifying the `name` or `type` field results in a bad request. + +```bash +curl --location --request PUT 'https://{tenant}.api.identitynow.com/v3/transforms/b23788a0-41a2-453b-89ae-0d670fa0cb6a' \ +--header 'Content-Type: application/json' \ +--header 'Authorization: Bearer {token}' \ +--data-raw '{ + "name": "Country Code To Timezone", + "type": "lookup", + "attributes": { + "table": { + "EN-US": "CST", + "ES-MX": "CST", + "EN-GB": "GMT", + "EN-CA": "MST", + "default": "GMT" + } + } +}' +``` + +**Response Body:** + +```json +{ + "id": "b23788a0-41a2-453b-89ae-0d670fa0cb6a", + "name": "Country Code To Timezone", + "type": "lookup", + "attributes": { + "table": { + "EN-US": "CST", + "ES-MX": "CST", + "EN-GB": "GMT", + "EN-CA": "MST", + "default": "GMT" + } + }, + "internal": false +} +``` + +For more information about updating transforms, see [Update a transform](https://developer.sailpoint.com/apis/v3/#operation/updateTransform). + +## Delete a Transform + +To delete the transform, call the `DELETE` endpoint with the `id` of the transform to delete. The server responds with a 204 when the transform is successfully removed. + +```bash +curl --location --request DELETE 'https://{tenant}.api.identitynow.com/v3/transforms/b23788a0-41a2-453b-89ae-0d670fa0cb6a' \ +--header 'Authorization: Bearer {token}' +``` + +For more information about deleting transforms, see [Delete Transform](https://developer.sailpoint.com/apis/v3/#operation/deleteTransform). + +## Next Steps + +Now that you understand the lifecycle of transforms, see this [complex usecase](./temporary_password_usecase.md) using a nested transform structure to create a temporary password that can be sent to each user. diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/account_attribute.md b/docs/idn_docs/docs/transforms/transform_operations/operations/account_attribute.md new file mode 100644 index 000000000..ac06fe268 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/account_attribute.md @@ -0,0 +1,124 @@ +# IdentityNow Transforms - Account Attribute + +## Overview + +Use the account attribute transform to look up an account for a particular source on an identity and return a specific attribute value from that account. + +### Other Considerations + +> - If there are multiple accounts, then IdentityNow by default takes the value from the oldest account (based on the account created date). You can configure this behavior by specifying `accountSortAttribute` and `accountSortDescending` attributes. +> - If there are multiple accounts and the oldest account has a null attribute value, by default IdentityNow moves to the next account that can have a value (if there are any). You can override this behavior with the `accountReturnFirstLink` property. +> - You can filter the multiple accounts returned based on the data they contain so that you can target specific accounts. This is often used to target accounts that are "active" instead of those that are not. + +## Transform Structure + +The account attribute transform's configuration can take several attributes as inputs. The following example shows a fully configured transform with all required and optional attributes. + +```json +{ + "attributes": { + "sourceName": "Workday", + "attributeName": "DEPARTMENT", + "accountSortAttribute": "created", + "accountSortDescending": true, + "accountReturnFirstLink": true, + "accountPropertyFilter": "(DEPARTMENT == \"Engineering\")", + "accountFilter": "!(nativeIdentity.startsWith(\"*DELETED*\"))" + }, + "type": "accountAttribute", + "name": "Account Attribute Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `accountAttribute.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **sourceName** - This is a reference to the source to search for accounts. + - This is a reference by a source's display name attribute (e.g., Active Directory). If the display name is updated, this reference must also be updated. + - As an alternative, you can provide an `applicationId` or `applicationName` instead. + - `applicationId` - This is a reference by a source's external GUID/ID attribute (e.g., "ff8081815a8b3925015a8b6adac901ff") + - `applicationName` - This is a reference by a source's immutable name attribute (e.g., "Active Directory \[source\]") + - **attributeName** - The name of the attribute on the account to return. This should match the name of the account attribute name visible in the user interface or on the source schema. +- **Optional Attributes** + - **requiresPeriodicRefresh** - This is a `true` or `false` value indicating whether the transform logic must be reevaluated every evening as part of the identity refresh process. + - **accountSortAttribute** - This configuration's value is a string name of the attribute to use when determining the ordering of returned accounts when there are multiple entries. + - Accounts can be sorted by any schema attribute. + - If no sort attribute is defined, the transform will default to "created" (ascending sort on created date - oldest object wins). + - **accountSortDescending** - This configuration's value is a boolean (true/false). It controls the sort order when there are multiple accounts. + - If not defined, the transform will default to false (ascending order) + - **accountReturnFirstLink** - This configuration's value is a boolean (true/false). It controls which account to source a value from for an attribute. If this flag is set to true, the transform returns the value from the first account in the list, even if it is null. If this flag is set to false, the transform returns the first non-null value. + - If the configuration's value is not defined, the transform will default to the false setting. + - **accountFilter** - This expression queries the database to narrow search results. This configuration's value is a sailpoint.object.Filter expression for searching against the database. The default filter always includes the source and identity, and any subsequent expressions are combined in an AND operation with the existing search criteria. + - Only certain searchable attributes are available: + - `nativeIdentity` - This is the account ID. + - `displayName` - This is the account name. + - `entitlements` - This boolean value determine whether the account has entitlements. + - **accountPropertyFilter** - Use this expression to search and filter accounts in memory. This configuration's value is a sailpoint.object.Filter expression for searching against the returned resultset. + - All account attributes are available for filtering because this operation is performed in memory. + - Examples: + - `(status != "terminated")` + - `(department == "Engineering")` + - `(groups.containsAll({"Admin"}) || location == "Austin")` + - **input** - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. + +## Examples + +HR systems can have multiple HR records for a person, especially in rehire and conversion scenarios. In order to get the correct identity data, you must get data from only the latest active accounts. + +- `sourceName` is "Corporate HR" because that is the name of the authoritative source. + +- `attributeName` is "HIREDATE" because that is the attribute you want from the authoritative source. + +- `accountSortAttribute` is "created" because you want to sort on created dates in case there are multiple accounts. + +- `accountSortDescending` is true because you want to sort based on the newest or latest account from the HR system. + +- `accountReturnFirstLink` is true because you want to return the value of HIREDATE, event if it is null. + +- `accountPropertyFilter` is filtering the accounts to look at only active accounts. Terminated accounts will not appear (assuming there are no data issues). + + > **Note** You cannot use accountFilter here because WORKER_STATUS\_\_c is not a searchable attribute, but accountPropertyFilter works instead. + +**Transform Request Body**: + +```json +{ + "attributes": { + "attributeName": "HIREDATE", + "sourceName": "Corporate HR", + "accountSortAttribute": "created", + "accountSortDescending": true, + "accountReturnFirstLink": true, + "accountPropertyFilter": "(WORKER_STATUS__c == \"active\")" + }, + "type": "accountAttribute", + "name": "Account Attribute Transform" +} +``` + +--- + +

     

    + +When you are mapping values like a username, focus on primary accounts from a particular source or accounts that are not service accounts. + +- `sourceName` is "Active Directory" because that is the source this data is coming from. +- `attributeName` is "sAMAccountName" because you are mapping the username of the user. +- `accountFilter` is an expression filtering the accounts to make sure they are not service accounts. + > **Note**: `accountPropertyFilter` also would have worked here. + +**Transform Request Body**: + +```json +{ + "attributes": { + "attributeName": "sAMAccountName", + "sourceName": "Active Directory", + "accountFilter": "!(displayName.startsWith(\"SVC-\"))" + }, + "type": "accountAttribute", + "name": "Account Attribute Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/base64_decode.md b/docs/idn_docs/docs/transforms/transform_operations/operations/base64_decode.md new file mode 100644 index 000000000..afeca9b0a --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/base64_decode.md @@ -0,0 +1,84 @@ +# IdentityNow Transforms - Base64 Decode + +## Overview + +Base64 is mostly used to encode binary data like images so that the data can be represented as a string within HTML, email, or other text documents. Base64 is also commonly used to encode data that can be unsupported or damaged during transfer, storage, or output. + +The base64 decode transform allows you to take incoming data that has been encoded using a Base64-based text encoding scheme and render the data in its original binary format. + +### Other Considerations + +> - If the input to the Base64 decode transform is null, the transform returns a null value. + +## Transform Structure + +The base64 decode transform only requires the `type` and `name` attributes: + +```json +{ + "type": "base64Decode", + "name": "Base64 Decode Transform" +} +``` + +### Attributes + +- **Required Attributes** + - **type** - This must be set to `base64Decode.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + +## Examples + +This example takes the incoming attribute configured in the identity profile attribute UI, assumes it is a Base64 encoded string, and returns its original binary value. + +Input: + +```bash +"MTIzNA==" +``` + +Output: + +```bash +1234 +``` + +**Transform Request Body**: + +```json +{ + "type": "base64Decode", + "name": "Base64 Decode Transform" +} +``` + +--- + +

     

    + +This example takes the incoming attribute configured in the identity profile attribute UI, assumes it is a Base64 encoded string, and returns it as an image. + +Input: + +```bash +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 +``` + +Output: +![SailPoint Logo](../../../img/transforms/sailpoint_logo.png) + +**Transform Request Body**: + +```json +{ + "type": "base64Decode", + "name": "Base64 Decode Transform with Image" +} +``` + +## References + +- [https://developer.mozilla.org/en-US/docs/Glossary/Base64](https://developer.mozilla.org/en-US/docs/Glossary/Base64) +- [https://en.wikipedia.org/wiki/Base64](https://en.wikipedia.org/wiki/Base64) diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/base64_encode.md b/docs/idn_docs/docs/transforms/transform_operations/operations/base64_encode.md new file mode 100644 index 000000000..3cef35116 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/base64_encode.md @@ -0,0 +1,85 @@ +# IdentityNow Transforms - Base64 Encode + +## Overview + +Base64 is mostly used to encode binary data like images so that the data can be represented as a string within HTML, email or other text documents. Base64 is also commonly used to encode data that can be unsupported or damaged during transfer, storage, or output. + +The base64 encode transform allows you to take incoming data and encode it using a Base64-based text encoding scheme. The output of the transform is a string comprising 64 basic ASCII characters. + +### Other Considerations + +> - If the input to the Base64 encode transform is null, the transform returns a null value. + +## Transform Structure + +The Base64 encode transform only requires the `type` and `name` attributes: + +```json +{ + "type": "base64Encode", + "name": "Base64 Encode Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must be set to `base64Encode.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + +## Examples + +This example takes the incoming attribute configured in the identity profile attribute UI and returns it as a Base64 encoded string. + +Input: + +```bash +1234 +``` + +Output: + +```bash +MTIzNA== +``` + +**Transform Request Body**: + +```json +{ + "type": "base64Encode", + "name": "Base64 Encode Transform" +} +``` + +--- + +

     

    + +This example takes a binary image as in input and returns it as a Base64 encoded string. + +Input: + +![SailPoint Logo](../../../img/transforms/sailpoint_logo.png) + +Output: + +```bash +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 +``` + +**Transform Request Body**: + +```json +{ + "type": "base64Encode", + "name": "Base64 Encode Transform" +} +``` + +## References + +- [https://developer.mozilla.org/en-US/docs/Glossary/Base64](https://developer.mozilla.org/en-US/docs/Glossary/Base64) +- [https://en.wikipedia.org/wiki/Base64](https://en.wikipedia.org/wiki/Base64) diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/concatenation.md b/docs/idn_docs/docs/transforms/transform_operations/operations/concatenation.md new file mode 100644 index 000000000..c36ac3e88 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/concatenation.md @@ -0,0 +1,95 @@ +# IdentityNow Transforms - Concatenation + +## Overview + +Use the concatenation transform to join two or more string values into a combined output. The concatenation transform often joins elements such as first and last name into a full display name, but it has many other uses. + +## Transform Structure + +The concatenation transform requires an array list of `values` that need to be joined. These values can be static strings or the return values of other nested transforms. + +```json +{ + "attributes": { + "values": ["John", " ", "Smith"] + }, + "type": "concat", + "name": "Concatenation transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `concat.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **values** - This is the array of items to join. +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + +## Examples + +This transform joins the user's first name from the "HR Source" with his/her last name, adds a space between them, and then adds a parenthetical note that the user is a contractor at the end. + +**Transform Request Body**: + +```json +{ + "attributes": { + "values": [ + { + "attributes": { + "sourceName": "HR Source", + "attributeName": "FirstName" + }, + "type": "accountAttribute" + }, + " ", + { + "attributes": { + "sourceName": "HR Source", + "attributeName": "LastName" + }, + "type": "accountAttribute" + }, + " (Contractor)" + ] + }, + "type": "concat", + "name": "Test Concat Transform" +} +``` + +--- + +

     

    + +This transform joins the user's job title with his/her job code value and adds a hyphen between those two pieces of data. + +**Transform Request Body**: + +```json +{ + "attributes": { + "values": [ + { + "attributes": { + "sourceName": "HR Source", + "attributeName": "JobTitle" + }, + "type": "accountAttribute" + }, + "-", + { + "attributes": { + "sourceName": "HR Source", + "attributeName": "JobCode" + }, + "type": "accountAttribute" + } + ] + }, + "type": "concat", + "name": "Test Concat Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/conditional.md b/docs/idn_docs/docs/transforms/transform_operations/operations/conditional.md new file mode 100644 index 000000000..48a5c8c02 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/conditional.md @@ -0,0 +1,102 @@ +# IdentityNow Transforms - Conditional + +## Overview + +Use the conditional transform to output different values depending on simple conditional logic. This is a convenience transform - the same capability can be implemented with a "static" transform, but this transform has greater simplicity and null-safe error checking. + +### Other Considerations + +> - The two operands within the transform cannot be null; if they are, an IllegalArgumentException is thrown. +> - The `expression` attribute must be "eq," or the transform will throw an IllegalArgumentException. +> - All attribute string values are case-sensitive, so differently cased strings (e.g., "engineering" and "Engineering") will not return as matched. + +## Transform Structure + +In addition to the `type` and `name` attributes, the conditional transform requires an `expression,` a `positiveCondition,` and a `negativeCondition.` If the expression evaluates to false, the transform returns the negative condition; otherwise it returns the positive condition. + +```json +{ + "attributes": { + "expression": "foo eq foo", + "positiveCondition": "true", + "negativeCondition": "false" + }, + "type": "conditional", + "name": "Conditional Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `conditional.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **expression** - This comparison statement follows the structure of `ValueA eq ValueB` where `ValueA` and `ValueB` are static strings or outputs of other transforms; the `eq` operator is the only valid comparison. + - **positiveCondition** - This is the output of the transform if the expression evaluates to true. + - **negativeCondition** - This is the output of the transform if the expression evaluates to false. +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + +## Examples + +This transform takes the user's HR-defined department attribute and compares it to the value of "Science." If this is the user's department, the transform returns "true;" otherwise it returns "false." + +**Transform Request Body**: + +```json +{ + "attributes": { + "expression": "$department eq Science", + "positiveCondition": "true", + "negativeCondition": "false", + "department": { + "attributes": { + "sourceName": "HR Source", + "attributeName": "department" + }, + "type": "accountAttribute" + } + }, + "type": "conditional", + "name": "Test Conditional Transform" +} +``` + +--- + +

     

    + +This transform extends the previous one by returning the output of another Seaspray transform depending on the result of the expression. You can assign Seaspray transforms' outputs to variables and then reference them within the `positiveCondition` and `negativeCondition` attributes. + +**Transform Request Body**: + +```json +{ + "attributes": { + "expression": "$department eq Science", + "positiveCondition": "$scienceBuilding", + "negativeCondition": "$adminBuilding", + "department": { + "attributes": { + "sourceName": "HR Source", + "attributeName": "department" + }, + "type": "accountAttribute" + }, + "scienceBuilding": { + "attributes": { + "value": "Building S" + }, + "type": "static" + }, + "adminBuilding": { + "attributes": { + "value": "Building A" + }, + "type": "static" + } + }, + "type": "conditional", + "name": "Test Conditional Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/date_compare.md b/docs/idn_docs/docs/transforms/transform_operations/operations/date_compare.md new file mode 100644 index 000000000..464b23fe2 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/date_compare.md @@ -0,0 +1,112 @@ +# IdentityNow Transforms - Date Compare + +## Overview + +Use the date compare transform to compare two dates and, depending on the comparison result, return one value if one date is after the other or return a different value if it is before the other. A common use case is to calculate lifecycle states (e.g., the user is "active" if the current date is greater than or equal to the user's hire date, etc.). + +### Other Considerations + +> - In addition to explicit date values, the transform recognizes the "now" keyword that always evaluates to the exact date and time when the transform is evaluating. +> - All dates **must** be in [ISO8601 format](https://en.wikipedia.org/wiki/ISO_8601) in order for the date compare transform to evaluate properly. + +## Transform Structure + +The date compare transform takes as an input the two dates to compare, denoted as `firstDate` and `secondDate`. The transform also requires an `operator` designation so it knows which condition to evaluate for. Lastly, the transform requires both a `positiveCondition` and a `negativeCondition` -- the former returns if the comparison evaluates to true; the latter returns if the comparison evaluates to false. + +```json +{ + "attributes": { + "firstDate": { + "attributes": { + "sourceName": "HR Source", + "attributeName": "termination_date" + }, + "type": "accountAttribute" + }, + "secondDate": "now", + "operator": "gt", + "positiveCondition": "active", + "negativeCondition": "terminated" + }, + "type": "dateCompare", + "name": "Date Compare Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `dateCompare.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **firstDate** - This is the first date to consider (i.e., the date that would be on the left hand side of the comparison operation). + - **secondDate** - This is the second date to consider (i.e., the date that would be on the right hand side of the comparison operation). + - **operator** - This is the comparison to perform. The following values are valid: + - **LT**: Strictly less than: firstDate < secondDate + - **LTE**: Less than or equal to: firstDate <= secondDate + - **GT**: Strictly greater than: firstDate > secondDate + - **GTE**: Greater than or equal to: firstDate >= secondDate + - **positiveCondition** - This is the value to return if the comparison is true. + - **negativeCondition** - This is the value to return if the comparison is false. +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + +## Examples + +This transform accomplishes a basic lifecycle state calculation. It compares the user's termination date with his/her HR record. If the current datetime (denoted by `now`) is less than that date, the transform returns "active." If the current datetime is greater than that date, the transform returns "terminated." + +**Transform Request Body**: + +```json +{ + "attributes": { + "firstDate": { + "attributes": { + "sourceName": "HR Source", + "attributeName": "termination_date" + }, + "type": "accountAttribute" + }, + "secondDate": "now", + "operator": "gt", + "positiveCondition": "active", + "negativeCondition": "terminated" + }, + "type": "dateCompare", + "name": "Date Compare Transform" +} +``` + +--- + +

     

    + +This transform compares the user's hire date to a fixed date in the past. If the user was hired prior to January 1, 1996, the transform returns "legacy." If the user was hired later than January 1, 1996, it returns "regular." + +**Transform Request Body**: + +```json +{ + "attributes": { + "firstDate": { + "attributes": { + "sourceName": "HR Source", + "attributeName": "hire_date" + }, + "type": "accountAttribute" + }, + "secondDate": { + "attributes": { + "input": "12/31/1995", + "inputFormat": "M/d/yyyy", + "outputFormat": "ISO8601" + }, + "type": "dateFormat" + }, + "operator": "lte", + "positiveCondition": "legacy", + "negativeCondition": "regular" + }, + "type": "dateCompare", + "name": "Date Compare Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/date_format.md b/docs/idn_docs/docs/transforms/transform_operations/operations/date_format.md new file mode 100644 index 000000000..5cdaca900 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/date_format.md @@ -0,0 +1,94 @@ +# IdentityNow Transforms - Date Format + +## Overview + +Use the date format transform to convert datetime strings from one format to another. This is often useful when you are syncing data from one system to another, where each application uses a different format for date and time data. + +This transform leverages the Java SimpleDateFormat syntax; see the [References](#references) section for more information on this standard. + +### Other Considerations + +- In addition to explicit SimpleDateFormat syntax, the date format transform also recognizes several built-in "named" constructs: + - **ISO8601:** This is the date format corresponding to the ISO8601 standard. The exact format is expressed as yyyy-MM-dd'T'HH:mm:ss.SSSX. + - **LDAP:** This is the date format corresponding to the LDAP date format standard, also expressed as yyyyMMddHHmmss.Z. + - **PEOPLE_SOFT:** This is the date format format used by People Soft, also expressed as MM/dd/yyyy. + - **EPOCH_TIME_JAVA:** This represents the incoming date value as the elapsed time in milliseconds from midnight, January 1st, 1970 + - **EPOCH_TIME_WIN32:** This represents the incoming date value as the elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. + +## Transform Structure + +The date format transform takes whatever value provided as the input, parses the datetime based on the `inputFormat` provided, and then reformats it into the desired `outputFormat.` + +```json +{ + "attributes": { + "inputFormat": "EPOCH_TIME_JAVA", + "outputFormat": "ISO8601" + }, + "type": "dateFormat", + "name": "Date Format Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `dateFormat.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **inputFormat** - This string value indicates either the explicit SimpleDateFormat or the built-in named format of the incoming data. + - If no inputFormat is provided, the transform assumes that it is in [ISO8601 format](https://en.wikipedia.org/wiki/ISO_8601). + - **outputFormat** - This string value indicates either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into. + - If no outputFormat is provided, the transform assumes that it is in [ISO8601 format](https://en.wikipedia.org/wiki/ISO_8601). + - **input** - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. + +## Examples + +This transform takes the incoming Java epoch-based timestamp and formats it as an ISO8601 compatible string. + +```bash +Input: 144642632190 +Output: 1974-08-02T02:30:32.190-00 +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "inputFormat": "EPOCH_TIME_JAVA", + "outputFormat": "ISO8601" + }, + "type": "dateFormat", + "name": "Date Format Transform" +} +``` + +--- + +

     

    + +This transform takes the incoming date, formatted as a common US date string, and formats it to match the date structure of most database systems. + +```bash +Input: 4/1/1975 +Output: 1975-04-01 +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "inputFormat": "M/d/yyyy", + "outputFormat": "yyyy-MM-dd" + }, + "type": "dateFormat", + "name": "Date Format Transform" +} +``` + +## References + +- [http://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html](http://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html) diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/date_math.md b/docs/idn_docs/docs/transforms/transform_operations/operations/date_math.md new file mode 100644 index 000000000..f703d3108 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/date_math.md @@ -0,0 +1,171 @@ +# IdentityNow Transforms - Date Math + +## Overview + +Use the date math transform to add, subtract, and round components of a timestamp's incoming value. It also allows you to work with a referential value of "now" to run operations against the current date and time instead of a fixed value. + +The output format for the DateMath transform is "yyyy-MM-dd'T'HH:mm." When you use this transform inside another transform (e.g., [dateCompare](./date_compare.md)), make sure to convert to [ISO8601](https://en.wikipedia.org/wiki/ISO_8601) first. + +### Other Considerations + +> - The input datetime value must always be in [ISO8601 format](https://en.wikipedia.org/wiki/ISO_8601), in UTC time zone: + +- yyyy-MM-ddThh:mm:ss:nnnZ +- 2020-10-28T12:00:00.000Z, as an example +- The dateFormat transform can help get data into this format. + +> - The industry standard for rounding is actually date/time truncation. When rounding down, the fractional value is truncated from the incoming data. When rounding up, the fractional value is truncated and the next unit of time is added. Refer to the Transform Structure section below for examples. +> - When you are rounding, the "week" unit of time is not supported as a metric, and attempting to round up or down a week will result in an error. +> - If you are using the "now" keyword and an input date is also applied as the implicitly or explicitly definted input parameter, the transform prefers using "now" and ignores the data in the `input` attribute. + +## Transform Structure + +The date math transform takes the input value and executes addition, subtraction and/or rounding operations to that value based on an `expression` configuration value. As indicated earlier, the input datetime must be in [ISO8601 format](https://en.wikipedia.org/wiki/ISO_8601). The `expression` value leverages the following abbreviations to indicate which date or time component to evaluate: + +> - "y" - year +> - "M" - month +> - "w" - week +> - "d" - day +> - "h" - hour +> - "m" - minute +> - "s" - second +> - "now" - the current instant in time + +Also, the operational logic is defined by usage of one of the following symbols: + +> - "+" - add; This must be followed by a valid time unit. +> - "-" - subtract; This must be followed by a valid time unit. +> - "/" - round; This must be followed by a valid time unit. + +Some examples of expressions are: + +> - `"expression": "now"` returns the current date and time. +> - `"expression": "now/h"` returns the current date and time, rounded to the hour. +> - `"expression": "now+1w"` returns one week from the current date and time. +> - `"expression": "now+1y+1M+2d-4h+1m-3s/s"` returns the current date and time plus one year, one month, two days, minus four hours, plus one minute and minus three seconds, rounded to the second. +> - `"expression": "+3M"` returns the date and time that would be three months more than the value provided as an input to the transform. + +```json +{ + "attributes": { + "expression": "+3M/h", + "roundUp": true, + "input": { + "attributes": { + "sourceName": "HR Source", + "attributeName": "startDate" + }, + "type": "accountAttribute" + } + }, + "type": "dateMath", + "name": "Test Date Math Transform" +} +``` + +## Attributes + +- **Required Attributes** + + - **type** - This must always be set to `dateMath.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **expression** - A string value of the date and time components to operate on, along with the math operations to execute. Multiple operations on multiple components are supported. + +- **Optional Attributes** + + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **roundUp** - This `true` or `false` value indicates whether the transform rounds up or down when the `expression` defines a rounding ("/") operation. If this value is not provided, the transform defaults to `false.` + + - `true` indicates the transform should round up (i.e., truncate the fractional date/time component indicated and then add one unit of that component). + - `false` indicates the transform should round down (i.e., truncate the fractional date/time component indicated). + - `input` - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. + +## Examples + +This transform takes the current date, subtracts five days from it, and rounds down to the lowest day. + +**Transform Request Body**: + +```json +{ + "attributes": { + "expression": "now-5d/d", + "roundUp": false + }, + "type": "dateMath", + "name": "Date Math Transform" +} +``` + +--- + +

     

    + +This transform takes the `startDate` attribute from a user's record in the "HR Source," converts it from its native format to an [ISO8601-formatted](https://en.wikipedia.org/wiki/ISO_8601) string, and then adds twelve hours to it. The final value is then rounded up to the next second. + +**Transform Request Body**: + +```json +{ + "attributes": { + "expression": "+12h/s", + "roundUp": true, + "input": { + "attributes": { + "input": { + "attributes": { + "sourceName": "HR Source", + "attributeName": "startDate" + }, + "type": "accountAttribute" + }, + "inputFormat": "MMM dd yyyy, HH:mm:ss.SSS", + "outputFormat": "ISO8601" + }, + "type": "dateFormat" + } + }, + "type": "dateMath", + "name": "Date Math Transform" +} +``` + +--- + +

     

    + +This transform take the `HIREDATE` from Workday and converts it to [ISO8601](https://en.wikipedia.org/wiki/ISO_8601) to be used in the Date Math transform. The Date Math transform then creates a new Date of `HIREDATE + 1.` Since that is then outputted in the format "yyyy-MM-dd'T'HH:mm," you can then use it in a [dateFormat](./date_format.md) transform to give a WIN32 formatted date. + +**Transform Request Body**: + +```json +{ + "type": "dateFormat", + "name": "WD - HireDate", + "attributes": { + "input": { + "attributes": { + "expression": "+1d", + "input": { + "attributes": { + "input": { + "attributes": { + "attributeName": "HIREDATE", + "sourceName": "Workday" + }, + "type": "accountAttribute" + }, + "inputFormat": "MM/dd/yyyy", + "outputFormat": "ISO8601" + }, + "type": "dateFormat" + }, + "roundUp": true + }, + "type": "dateMath" + }, + "inputFormat": "yyyy-MM-dd'T'HH:mm", + "outputFormat": "EPOCH_TIME_WIN32" + } +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/decompose_diacritial_marks.md b/docs/idn_docs/docs/transforms/transform_operations/operations/decompose_diacritial_marks.md new file mode 100644 index 000000000..be22fe369 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/decompose_diacritial_marks.md @@ -0,0 +1,79 @@ +# IdentityNow Transforms - Decompose Diacritial Marks + +## Overview + +Use the decompose diacritical marks transform to clean or standardize symbols used within language to inform the reader how to say or pronounce a letter. These symbols are often incompatible with downstream applications and must be standardized to another character set such as ASCII. + +The following are examples of diacritical marks: + +> - Ā +> - Ĉ +> - Ň +> - Ŵ + +## Transform Structure + +The transform for decompose diacritical marks requires only the transform's `type` and `name` attributes: + +```json +{ + "type": "decomposeDiacriticalMarks", + "name": "Decompose Diacritical Marks Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `decomposeDiacriticalMarks.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + +- **Optional Attributes** + + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **input** - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. + +## Examples + +```bash +Input: "Āric" +Output: "Aric" +``` + +**Transform Request Body**: + +```json +{ + "type": "decomposeDiacriticalMarks", + "name": "Test Decompose Diacritical Marks Transform" +} +``` + +--- + +

     

    + +This transform takes the user's "LastName" attribute from the "HR Source" and replaces any diacritical marks with ASCII-compatible values. + +```bash +Input: "Dubçek" +Output: "Dubcek" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "input": { + "attributes": { + "sourceName": "HR Source", + "attributeName": "LastName" + }, + "type": "accountAttribute" + } + }, + "type": "decomposeDiacriticalMarks", + "name": "Decompose Diacritical Marks Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/e164_phone.md b/docs/idn_docs/docs/transforms/transform_operations/operations/e164_phone.md new file mode 100644 index 000000000..b104d1fda --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/e164_phone.md @@ -0,0 +1,122 @@ +# IdentityNow Transforms - E.164 Phone + +## Overview + +Use the E.164 phone transform to convert an incoming phone number string into an E.164-compatible number. + +### Other Considerations + +> - If the input string to the transform does not represent a valid phone number, the transform returns null. + +## Transform Structure + +The E.164 phone transform only requires the transform's `type` and `name` attributes: + +```json +{ + "type": "e164phone", + "name": "Test E.164Phone Transform" +} +``` + +## Attributes + +- **Required Attributes** + + - **type** - This must always be set to `E.164phone.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **input** - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. + - **defaultRegion** - This is an optional attribute used to define the phone number region to format into. If no defaultRegion is provided, the transform takes US as the default country. The format of the country code must be in [ISO 3166-1 alpha-2 format](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). + +## Examples + +This transform transforms a phone number seperated by `-` into the E.164 Phone format. + +```bash +Input: "512-777-2222" +Output: "+1512459222" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "input": { + "attributes": { + "value": "512-777-2222" + }, + "type": "static" + } + }, + "type": "e164phone", + "name": "E.164Phone Transform" +} +``` + +--- + +

     

    + +This transform transforms a phone number seperated by `.` into the E.164 Phone format. + +```bash +Input: "779.284.2727" +Output: "+17792842727" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "input": { + "attributes": { + "value": "779.284.2727" + }, + "type": "static" + } + }, + "type": "e164phone", + "name": "E.164Phone Transform" +} +``` + +--- + +

     

    + +This transform transforms a phone number and country region code into the E.164 Phone format. + +```bash +Input: "0412345678" +defaultRegion: "AU" + +Output: "+61412345678" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "input": { + "attributes": { + "value": "0412345678" + }, + "type": "static" + }, + "defaultRegion": "AU" + }, + "type": "e164phone", + "name": "E.164Phone Transform" +} +``` + +## References + +- [https://en.wikipedia.org/wiki/E.164](https://en.wikipedia.org/wiki/E.164) +- [https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/first_valid.md b/docs/idn_docs/docs/transforms/transform_operations/operations/first_valid.md new file mode 100644 index 000000000..e0974bb81 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/first_valid.md @@ -0,0 +1,148 @@ +# IdentityNow Transforms - First Valid + +## Overview + +Use the first valid transform to perform if/then/else operations on multiple different data points to return the first piece of data that is not null. This is often useful for the SailPoint User Name (uid) attribute in which case each identity requires a value, but the desired information is not available yet (e.g., Active Directory username). In these cases, you can use a first valid transform to populate the uid attribute with the user's linked Active Directory account information if the uid attribute is not null. If the attribute is null, use a different attribute from a source that the user does have, like his/her employee number. + +## Transform Structure + +The first valid transform requires an array list of `values` that you must consider. These can be static strings or other nested transforms' return values. Remember that the transform returns the first entry in the array that evaluates to a non-null value, so you are recommended to provide the entries in the array in descending order of preference. + +```json +{ + "attributes": { + "values": [ + { + "attributes": { + "sourceName": "Active Directory", + "attributeName": "sAMAccountName" + }, + "type": "accountAttribute" + }, + { + "attributes": { + "sourceName": "Okta", + "attributeName": "login" + }, + "type": "accountAttribute" + }, + { + "attributes": { + "sourceName": "HR Source", + "attributeName": "employeeID" + }, + "type": "accountAttribute" + } + ] + }, + "type": "firstValid", + "name": "Test First Valid Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `firstValid.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **values** - This is an array of attributes to evaluate for existence. +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **ignoreErrors** - This `true` or `false` value indicates whether to proceed to the next option if an error (like an NPE) occurs. + +## Examples + +This transform first attempts to return the user's sAMAccountName from his/her Active Directory account. In the event that the user does not have an Active Directory account, the transform then attempts to return the user's Okta login. If the Okta login is also blank, the transform returns the user's employee ID from his/her HR record. + +**Transform Request Body**: + +```json +{ + "attributes": { + "values": [ + { + "attributes": { + "sourceName": "Active Directory", + "attributeName": "sAMAccountName" + }, + "type": "accountAttribute" + }, + { + "attributes": { + "sourceName": "Okta", + "attributeName": "login" + }, + "type": "accountAttribute" + }, + { + "attributes": { + "sourceName": "HR Source", + "attributeName": "employeeID" + }, + "type": "accountAttribute" + } + ] + }, + "type": "firstValid", + "name": "First Valid Transform" +} +``` + +--- + +

     

    + +This transform is often useful for populating the Work Email identity attribute. Since the Work Email attribute is a required field for a valid identity, it cannot be blank. However, often new hires do not have an Active Directory account and/or email provisioned until after the user has been provisioned. A common practice in this situation is to return a static string of "none" to ensure that this required attribute does not remain empty. + +**Transform Request Body**: + +```json +{ + "attributes": { + "values": [ + { + "attributes": { + "sourceName": "Active Directory", + "attributeName": "mail" + }, + "type": "accountAttribute" + }, + { + "attributes": { + "value": "none" + }, + "type": "static" + } + ] + }, + "type": "firstValid", + "name": "First Valid Transform" +} +``` + +--- + +

     

    + +This transform is often useful for populating an attribute called Manager DN. It pulls the manager of the identity and then gets the Identity Attribute "Network DN" for the manager. "Network DN" pulls directly from distinguishedName in AD. With this transform, you can set a user's manager's DN as an Identity Attribute to allow for Attribute Sync down to AD. Without ignoreErrors set to true, this transform throws a Null Pointer Exception (NPE) for any user without a manager. With ignoreErrors set to true, the first value in the firstValid throws an error for users without managers, but the error is ignored, and the transform selects the empty string to set the Manager DN Identity Attribute to. + +**Transform Request Body**: + +```json +{ + "attributes": { + "ignoreErrors": "true", + "values": [ + { + "attributes": { + "value": "$identity.manager.attributes.networkDn" + }, + "type": "static" + }, + "" + ] + }, + "name": "Example_Transform_ManagerDN", + "type": "firstValid" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/generate_random_string.md b/docs/idn_docs/docs/transforms/transform_operations/operations/generate_random_string.md new file mode 100644 index 000000000..b9854363b --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/generate_random_string.md @@ -0,0 +1,96 @@ +# IdentityNow Transforms - Generate Random String + +## Overview + +Use the generate random string transform as an out-of-the-box rule transform provided through SailPoint's Cloud Services Utility rule. The transform allows you to generate a random string of any length, using true/false flags to denote whether the stringe includes numbers and/or special characters. + +### Other Considerations + +> - The generate random string transform shares some common features with two other transforms: [random numeric](./random_numeric.md) and [random alphanumeric](./random_alphanumeric.md). In most cases, either of these other two out-of-the-box transforms are recommended. However, the one advantage of the generate random string transform is its support for special characters, so a common use for this transform is generating random passwords that meet basic complexity requirements. + +## Transform Structure + +The structure of a generate random string transform requires the `name` of the referenced rule to be the "Cloud Services Deployment Utility" rule built by SailPoint. You must also must set `operation` to `generateRandomString,` provide a `length,` and provide the true/false attributes for `includeNumbers` and `includeSpecialChars.` Last, you must include the `type` and `name` attributes required for all transforms: + +```json +{ + "attributes": { + "name": "Cloud Services Deployment Utility", + "operation": "generateRandomString", + "includeNumbers": "true", + "includeSpecialChars": "true", + "length": "16" + }, + "type": "rule", + "name": "Generate Random String Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `rule.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **attributes.name** - This must always be set to "Cloud Services Deployment Utility." + - **operation** - This must always be set to "generateRandomString." + - **includeNumbers** - You must set this value to `true` or `false` to indicate whether the generator logic includes numbers. + - **includeSpecialChars** - You must set this value to `true` or `false` to indicate whether the generator logic includes the followin special characters: + - ! + - @ + - \# + - \$ + - % + - & + - \* + - ( + - ) + - \+ + - < + - \> + - ? + - **length** - This is the required length ofthe randomly generated string. + > **Note** Due to identity attribute data constraints, the maximum allowable value is 450 characters. +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + +## Examples + +This transform generates a 16-character random string containing letters, numbers and special characters. + +**Transform Request Body**: + +```json +{ + "attributes": { + "name": "Cloud Services Deployment Utility", + "operation": "generateRandomString", + "includeNumbers": "true", + "includeSpecialChars": "true", + "length": "16" + }, + "type": "rule", + "name": "Generate Random String Transform" +} +``` + +--- + +

     

    + +This transform generates an 8-character random string containing only letters and numbers. + +**Transform Request Body**: + +```json +{ + "attributes": { + "name": "Cloud Services Deployment Utility", + "operation": "generateRandomString", + "includeNumbers": "true", + "includeSpecialChars": "false", + "length": "8" + }, + "type": "rule", + "name": "Generate Random String Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/get_end_of_string.md b/docs/idn_docs/docs/transforms/transform_operations/operations/get_end_of_string.md new file mode 100644 index 000000000..95ab6c2cf --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/get_end_of_string.md @@ -0,0 +1,78 @@ +# IdentityNow Transforms - Get End of String + +## Overview + +Use the get end of string transform as an out-of-the-box rule transform provided through SailPoint's Cloud Services Deployment Utility rule. The transform allows you to get the rightmost N characters of a string. + +## Transform Structure + +The structure of a get end of string transform requires the `name` of the referenced rule to be the "Cloud Services Deployment Utility" rule built by SailPoint. You must also set `operation` to `getEndOfString,` and provide a `numChars` value. Last, you must include the `type` and `name` attributes required for all transforms: + +```json +{ + "attributes": { + "name": "Cloud Services Deployment Utility", + "operation": "getEndOfString", + "numChars": "4" + }, + "type": "rule", + "name": "Get End Of String Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `rule.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **attributes.name** - This must always be set to "Cloud Services Deployment Utility." + - **operation** - This must always be set to "getEndOfString." + - **numChars** - This specifies how many of the rightmost characters within the incoming string the transform returns. If the value of numChars is greater than the string length, the transform returns null. + +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **input** - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. + +## Examples + +This transform returns the last four characters of the input string "abcd1234." + +```bash +Input: "abcd1234" +Output: "1234" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "name": "Cloud Services Deployment Utility", + "operation": "getEndOfString", + "numChars": "4" + }, + "type": "rule", + "name": "Get End Of String Transform" +} +``` + +--- + +

     

    + +This transform returns a null value because the incoming string length is only 15 characters long, but the transform requests the rightmost 16 characters. + +**Transform Request Body**: + +```json +{ + "attributes": { + "name": "Cloud Services Deployment Utility", + "operation": "getEndOfString", + "numChars": "16", + "input": "This is a test." + }, + "type": "rule", + "name": "Get End Of String Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/get_reference_identity_attribute.md b/docs/idn_docs/docs/transforms/transform_operations/operations/get_reference_identity_attribute.md new file mode 100644 index 000000000..6755fb69c --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/get_reference_identity_attribute.md @@ -0,0 +1,75 @@ +# IdentityNow Transforms - Get Reference Identity Attribute + +## Overview + +Use the get reference identity attribute transform as an out-of-the-box rule provided through SailPoint's Cloud Services Deployment Utility rule. The transform allows you to get the identity attribute of another user from within a given identity's calculation. For your convenience, the transform allows you to use "manager" as a referential lookup to the target identity. + +## Transform Structure + +The structure of a get reference identity transform requires the `name` of the referenced rule to be the "Cloud Services Deployment Utility" rule built by SailPoint. Additionally, you must set the `operation` to `getReferenceIdentityAttribute` and specify a `uid` attribute that correlates to the identity whose attribute is desired. Last, you must include the `type` and `name` attributes required for all transforms: + +```json +{ + "attributes": { + "name": "Cloud Services Deployment Utility", + "operation": "getReferenceIdentityAttribute", + "uid": "manager", + "attributeName": "email" + }, + "type": "rule", + "name": "Get Reference Identity Attribute Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `rule.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **attributes.name** - This must always be set to "Cloud Services Deployment Utility." + - **operation** - This must always be set to "getReferenceIdentityAttribute." + - **uid** - This is the SailPoint User Name (uid) value of the identity whose attribute is desired. + - For your convenience, you can use the "manager" keyword to look up the user's manager and then get that manager's identity attribute. + +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + +## Examples + +This transform gets the user's manager's email address. + +**Transform Request Body**: + +```json +{ + "attributes": { + "name": "Cloud Services Deployment Utility", + "operation": "getReferenceIdentityAttribute", + "uid": "manager", + "attributeName": "email" + }, + "type": "rule", + "name": "Get Reference Identity Attribute Transform" +} +``` + +--- + +

     

    + +This transform gets the alternate phone number for the user identified as "corporate.admin." + +**Transform Request Body**: + +```json +{ + "attributes": { + "name": "Cloud Services Deployment Utility", + "operation": "getReferenceIdentityAttribute", + "uid": "corporate.admin", + "attributeName": "phone" + }, + "type": "rule", + "name": "Get Reference Identity Attribute Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/identity_attribute.md b/docs/idn_docs/docs/transforms/transform_operations/operations/identity_attribute.md new file mode 100644 index 000000000..32a5712f0 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/identity_attribute.md @@ -0,0 +1,68 @@ +# IdentityNow Transforms - Identity Attribute + +## Overview + +Use the identity attribute transform to get the value of a user's identity attribute. This transform is often useful within a source's account create or disable profile. + +### Other Considerations + +> - This transform is **not** intended for use within an another identity profile attribute's calculation. Identity attribute calculations are multi-threaded processes, and there is no guarantee that a specific attribute has current data, or even exists, at the time of calculation within any given transform. *Referencing identity attributes within another identity attribute's calculation can lead to identity exceptions.* + +## Transform Structure + +The transform for identity attributes requires the desired identity attribute's system `name,` along with the `type` and `name` attributes: + +```json +{ + "attributes": { + "name": "email" + }, + "type": "identityAttribute", + "name": "Identity Attribute Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `identityAttribute.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **attributes.name** - The system (camel-cased) name of the identity attribute to bring in. + +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **input** - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. + +## Examples + +This transform returns a user's SailPoint User Name attribute. + +**Transform Request Body**: + +```json +{ + "attributes": { + "name": "uid" + }, + "type": "identityAttribute", + "name": "Identity Attribute Transform" +} +``` + +--- + +

     

    + +This transform returns a user's Employee Number attribute. + +**Transform Request Body**: + +```json +{ + "attributes": { + "name": "identificationNumber" + }, + "type": "identityAttribute", + "name": "Identity Attribute Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/index_of.md b/docs/idn_docs/docs/transforms/transform_operations/operations/index_of.md new file mode 100644 index 000000000..e51cf70a0 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/index_of.md @@ -0,0 +1,78 @@ +# IdentityNow Transforms - Index Of + +## Overview + +Use the index of transform to get the location of a specific substring within an incoming value. This transform is often useful in conjunction with the substring transform for getting parts of strings that can be dynamic in length or composition. If the substring you are searching for does not occur within the data, the transform returns -1. + +### Other Considerations + +> - If the substring you are searching for occurs multiple times within the incoming data, the transform returns the location of the first occurrence. If you want the last occurrence of a substring, use the [Last Index Of](./last_index_of.md) transform. If you want an occurrence that is neither first nor last, use the [Substring](./substring.md) transform. + +## Transform Structure + +The indexOf transform requires only the substring which you want to search for, along with the `type` and `name` attributes: + +```json +{ + "attributes": { + "substring": "admin_" + }, + "type": "indexOf", + "name": "Index Of Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `indexOf.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **substring** - This is the string whose beginning location within the incoming data you want to find. + +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **input** - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. + +## Examples + +The "admin_" substring occurs at the very beginning of the input string, so this transform returns 0. + +```bash +Input: "admin_jsmith" +Output: "0" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "substring": "admin_" + }, + "type": "indexOf", + "name": "Index Of Transform" +} +``` + +--- + +

     

    + +Though the letter "b" occurs multiple times throughout the input string, the first time it occurs is within the index location 1, so the transform returns that value. + +```bash +Input: "abcabcabc" +Output: "1" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "substring": "b" + }, + "type": "indexOf", + "name": "Index Of Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/iso_3166.md b/docs/idn_docs/docs/transforms/transform_operations/operations/iso_3166.md new file mode 100644 index 000000000..278107e97 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/iso_3166.md @@ -0,0 +1,92 @@ +# IdentityNow Transforms - ISO3166 + +## Overview + +Use the ISO3166 transform to convert an incoming string into an [ISO 3166](https://en.wikipedia.org/wiki/ISO_3166) country code value. The incoming data must be either a recognized country name or country code: + +- The alpha2 country code (e.g. "ES") +- The alpha3 country code (e.g. "ESP) +- The numeric country code (e.g. 724) +- The English name for the country (e.g. Spain) +- The native name for the country (e.g. España) + +The output value can be any of these three values: + +- Two-character country code (e.g., "US") +- Three-character country code (e.g., "USA") +- Numeric country code (e.g., "840") + +### Other Considerations + +If the input string to the transform does not represent a valid country code or country name, the transform returns null. + +## Transform Structure + +The transform for iso3166 only requires the transform's `type` and `name` attributes: + +```json +{ + "type": "iso3166", + "name": "ISO3166 Transform" +} +``` + +## Attributes + +- **Required Attributes** + + - **type** - This must always be set to `iso3166.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **format** - Use this optional value to denote which ISO 3166 format to return. The following values are valid: + - `alpha2` - Two-character country code (e.g., "US"). This is the default value if you do not provide a format. + - `alpha3` - Three-character country code (e.g., "USA") + - `numeric` - The numeric country code (e.g., "840") + - **input** - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. + +## Examples + +Because no specific format is provided, this transform defaults to the alpha2 output and returns "US." + +```bash +Input: "United States of America" +Output: "US" +``` + +**Transform Request Body**: + +```json +{ + "type": "iso3166", + "name": "ISO3166 Transform" +} +``` + +--- + +

     

    + +Because the desired format is specified as numeric, the output of this transform returns "724." + +```bash +Input: "ES" +Output: "724" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "format": "numeric" + }, + "type": "iso3166", + "name": "ISO3166 Transform" +} +``` + +## References + +- [https://en.wikipedia.org/wiki/ISO_3166](https://en.wikipedia.org/wiki/ISO_3166) diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/last_index_of.md b/docs/idn_docs/docs/transforms/transform_operations/operations/last_index_of.md new file mode 100644 index 000000000..dad761aa4 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/last_index_of.md @@ -0,0 +1,78 @@ +# IdentityNow Transforms - Last Index Of + +## Overview + +Use the last index of transform to get the last location of a specific substring within an incoming value. This transform is often useful in conjunction with the substring transform for getting parts of strings that can be dynamic in length or composition. If the substring you are searching for does not occur within the data, the transform returns -1. + +### Other Considerations + +If the substring you are searching for occurs multiple times within the incoming data, the transform returns the location of the last occurrence. If you want the first occurrence of a substring, use the [Index Of](./index_of.md) transform. If you want an occurrence that is neither first nor last, use the [Substring](./substring.md) transform. + +## Transform Structure + +The lastIndexOf transform requires only the substring you want to search for, along with the transform's `type` and `name` attributes: + +```json +{ + "attributes": { + "substring": "admin_" + }, + "type": "lastIndexOf", + "name": "Last Index Of Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `lastIndexOf.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **substring** - This is the string whose beginning location within the incoming data you want to find. + +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **input** - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. + +## Examples + +The "admin_" substring only occurs once at the very beginning of the input string, so this transform returns 0. + +```bash +Input: "admin_jsmith" +Output: "0" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "substring": "admin_" + }, + "type": "lastIndexOf", + "name": "Last Index Of Transform" +} +``` + +--- + +

     

    + +While the letter "b" occurs multiple times throughout the input string, the last time it occurs is within index location 7, so this transform returns that value. + +**Transform Request Body**: + +```bash +Input: "abcabcabc" +Output: "7" +``` + +```json +{ + "attributes": { + "substring": "b" + }, + "type": "lastIndexOf", + "name": "Last Index Of Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/left_pad.md b/docs/idn_docs/docs/transforms/transform_operations/operations/left_pad.md new file mode 100644 index 000000000..c08f9573a --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/left_pad.md @@ -0,0 +1,90 @@ +# IdentityNow Transforms - Left Pad + +## Overview + +Use the left pad transform to pad an incoming string with a user-supplied character out to a specific number of characters. This transform is often useful for data normalization situations in which data such as employee IDs are not uniform in length but need to be for downstream systems. + +### Other Considerations + +> - If the input to the left pad transform is null, the transform returns a null value. + +## Transform Structure + +In addition to the standard `type` and `name` attributes, the left pad transform requires the `length` attribute, which tells the transform how many characters to pad the incoming string to. + +```json +{ + "attributes": { + "padding": "0", + "length": "5" + }, + "type": "leftPad", + "name": "Left Pad Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `leftPad.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **length** - This is an integer value for the final output string's desired length. + +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **padding** - This string value represents the character the transform will pad the incoming data to to get to the desired length. + - If no padding value is provided, the transform defaults to a single space (" ") character for padding. + - **input** - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. + +## Examples + +This transform takes the incoming attribute configured in the Identity Profile attribute UI and ensures it is padded out to 8 characters in length by adding "0"s to the left. + +```bash +Input: "1234" +Output: "00001234" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "padding": "0", + "length": "8" + }, + "type": "leftPad", + "name": "Left Pad Transform" +} +``` + +--- + +

     

    + +This transform takes the user's employeeID attribute from the HR source and ensures it is padded out to 7 characters in length by adding "x"s to the left. + +```bash +Input: "1234" +Output: "xxx1234" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "padding": "x", + "length": "7", + "input": { + "attributes": { + "sourceName": "HR Source", + "attributeName": "employeeID" + }, + "type": "accountAttribute" + } + }, + "type": "leftPad", + "name": "Left Pad Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/lookup.md b/docs/idn_docs/docs/transforms/transform_operations/operations/lookup.md new file mode 100644 index 000000000..0de9c1f4b --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/lookup.md @@ -0,0 +1,86 @@ +# IdentityNow Transforms - Lookup + +## Overview + +Use the lookup transform to take in an incoming string value and compare it to a list of key-value pairs to determine which output to return. If the incoming data matches a key, the transform returns the corresponding value. If the incoming key does not match a key, the transform returns the table's optional default value. + +### Other Considerations + +> - If the input does not match any key value within the table and no default value is provided, the transform returns null. + +## Transform Structure + +In addition to the `type` and `name` attributes, the structure of a lookup transform involves a `table` entry of key-value pairs: + +```json +{ + "attributes": { + "table": { + "USA": "Americas", + "FRA": "EMEA", + "AUS": "APAC", + "default": "Unknown Region" + } + }, + "type": "lookup", + "name": "Lookup Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `lookup.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **table** - This is a JSON object of key-value pairs. The key is the string the transform tries to match to the input, and the value is the output string the transform returns if it matches the key. + > **Note** This is a use for the optional default key value here: if none of the three countries in the earlier example matches the input string, the transform returns "Unknown Region" for the attribute mapped to this transform. + +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **input** - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. + +## Examples + +This transform tries to map a telephone area code to a city in Texas. There is no `default` entry in the table map, so the transform returns null if there is no provided area code that is not one of the provided four values. + +**Transform Request Body**: + +```json +{ + "attributes": { + "table": { + "512": "Austin", + "281": "Houston", + "214": "Dallas", + "210": "San Antonio" + } + }, + "type": "lookup", + "name": "Lookup Transform" +} +``` + +--- + +

     

    + +This transform extends the previous one to show how multiple key values can be mapped to the same output value. However, duplicate key values are not allowed, so this will throw an error. + +**Transform Request Body**: + +```json +{ + "attributes": { + "table": { + "512": "Austin", + "281": "Houston", + "713": "Houston", + "832": "Houston", + "214": "Dallas", + "210": "San Antonio" + } + }, + "type": "lookup", + "name": "Test Lookup Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/lower.md b/docs/idn_docs/docs/transforms/transform_operations/operations/lower.md new file mode 100644 index 000000000..0b4c312ad --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/lower.md @@ -0,0 +1,81 @@ +# IdentityNow Transforms - Lower + +## Overview + +Use the lower transform to convert an input string into all lowercase letters. + +## Transform Structure + +The lower transform only requires the transform's `type` and `name` attributes: + +```json +{ + "type": "lower", + "name": "Lower Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `lower.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **input** - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. + +![Lowercase Transform Input Screenshot](../../../img/transforms/lower/lower_transform_input.png) + +## Examples + +This transform takes in the input "ACTIVE" and produces "active" as the output. + +```bash +Input:"ACTIVE" +Output:"active" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "input": { + "attributes": { + "value": "ACTIVE" + }, + "type": "static" + } + }, + "type": "lower", + "name": "Lower Transform" +} +``` + +--- + +

     

    + +This transform takes in the input "All-Access" and produces "all-access" as the output. + +```bash +Input:"All-Access" +Output:"all-access" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "input": { + "attributes": { + "value": "All-Access" + }, + "type": "static" + } + }, + "type": "lower", + "name": "Lower Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/name_normalizer.md b/docs/idn_docs/docs/transforms/transform_operations/operations/name_normalizer.md new file mode 100644 index 000000000..76edca57c --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/name_normalizer.md @@ -0,0 +1,93 @@ +# IdentityNow Transforms - Name Normalizer + +## Overview + +Use the name normalizer transform to clean or standardize the spelling of strings coming in from source systems. The most common use for this transform is for names and other proper nouns, but the transform is not necessarily limited to those data elements. + +The normalization logic within the transform handles a wide range of use cases: + +- Proper casing/capitalization of names + - Any string containing either a space, a hyphen or an apostrophe - the transform splits these by that character and capitalizes the first character of each resulting substring. +- Special replacements of patterns that include "MC" and "MAC" (or case-based variations of those two strings) + - The transform automatically converts "MC" to "Mc" and "MAC" to "Mac" when they are part of a patronymic last name. +- Consistent capitalization of strings that are part of a toponymic surname or a generational suffix: + - Convert "VON" to "von" + - Convert "DEL" to "del" + - Convert "OF" to "of" + - Convert "DE" to "de" + - Convert "LA" to "la" + - Convert "Y" to "y" + - Convert Roman numeral suffixes to all capitalized letters (e.g., "iii" becomes "III") + +## Transform Structure + +The name normalizer transform only requires the transform's `type` and `name` attributes: + +```json +{ + "type": "normalizeNames", + "name": "Name Normalizer Transform" +} +``` + +## Attributes + +- **Required Attributes** + + - **type** - This must always be set to `normalizeNames.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **input** - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. + +## Examples + +This transform takes a static value and normalizes it to a consistent format. + +```bash +Input: "jOHN VON SmITh" +Output: "John von Smith" +``` + +```json +{ + "attributes": { + "input": { + "attributes": { + "value": "jOHN VON SmITh" + }, + "type": "static" + } + }, + "type": "normalizeNames", + "name": "Name Normalizer Transform" +} +``` + +--- + +

     

    + +This transform takes the user's "LastName" attribute from the "HR Source" and normalizes the name to a consistent format. + +```bash +Input: "Dr. JOHN D. O'BRIEN" +Output: "Dr. John D. O'Brien" +``` + +```json +{ + "attributes": { + "input": { + "attributes": { + "sourceName": "HR Source", + "attributeName": "LastName" + }, + "type": "accountAttribute" + } + }, + "type": "normalizeNames", + "name": "Name Normalizer Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/random_alphanumeric.md b/docs/idn_docs/docs/transforms/transform_operations/operations/random_alphanumeric.md new file mode 100644 index 000000000..04aca5dea --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/random_alphanumeric.md @@ -0,0 +1,60 @@ +# IdentityNow Transforms - Random Alphanumeric + +## Overview + +Use the random alphanumeric transform to generate a random string of any length, comprising both numbers and letters (both lowercase and uppercase). + +## Transform Structure + +The random alphanumeric transform only requires the standard `type` and `name` attributes: + +```json +{ + "type": "randomAlphaNumeric", + "name": "Random Alphanumeric Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `randomAlphaNumeric.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **length** - This is the integer value specifying the required size/number of characters the random string must contain. + - This value must be a positive number and cannot be blank. + - If no length is provided, the transform defaults to a value of 32. + - Due to identity attribute data constraints, the maximum allowable value is 450 characters. + +## Examples + +Since no explicit length is provided, this transform generates a 32-character random string, such as "VtPeE9WL56lMTlvfjr02KXqS3KtgDSuk." + +**Transform Request Body**: + +```json +{ + "type": "randomAlphaNumeric", + "name": "Random Alphanumeric Transform" +} +``` + +--- + +

     

    + +This transform generates a 10-character random string, such as "5GH2qsjU27." + +**Transform Request Body**: + +```json +{ + "attributes": { + "length": "10" + }, + "type": "randomAlphaNumeric", + "name": "Random Alphanumeric Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/random_numeric.md b/docs/idn_docs/docs/transforms/transform_operations/operations/random_numeric.md new file mode 100644 index 000000000..0332987a3 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/random_numeric.md @@ -0,0 +1,60 @@ +# IdentityNow Transforms - Random Numeric + +## Overview + +Use the random numeric transform to generate a random number of any length. + +## Transform Structure + +The random numeric transform only requires the standard `type` and `name` attributes: + +```json +{ + "type": "randomNumeric", + "name": "Random Numeric Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `randomNumeric.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **length** - This is the integer value specifying the required size/number of digits the random number must contain. + - This value must be a positive number and cannot be blank. + - If no length is provided, the transform defaults to a value of 10. + - Due to identity attribute data constraints, the maximum allowable value is 450 characters. + +## Examples + +No explicit length is provided, so this transform generates a 10-digit random integer, such as "2334776774." + +**Transform Request Body**: + +```json +{ + "type": "randomNumeric", + "name": "Random Numeric Transform" +} +``` + +--- + +

     

    + +This transform generates a 6-digit random integer, such as "759931." + +**Transform Request Body**: + +```json +{ + "attributes": { + "length": "6" + }, + "type": "randomNumeric", + "name": "Random Numeric Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/reference.md b/docs/idn_docs/docs/transforms/transform_operations/operations/reference.md new file mode 100644 index 000000000..2d6e2e41e --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/reference.md @@ -0,0 +1,78 @@ +# IdentityNow Transforms - Reference + +## Overview + +Use the reference transform to reuse a transform that has already been written within another transform. This transform is often useful when you want to repeat the same logic multiple times within other transforms. This transform allows you to maintain only one transform and have it propagate through to other implementations of that logic. + +## Transform Structure + +In addition to the standard `type` and `name` attributes, the structure of a reference transform requires the `id` of the transform you want to reference: + +```json +{ + "attributes": { + "id": "Build Display Name" + }, + "type": "reference", + "name": "Reference Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `reference.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **id** - This ID specifies the name of the pre-existing transform you want to use within your current transform. + +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **input** - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. + +## Examples + +If you had a "Get Worker Type" transform that evaluated multiple pieces of data to determine whether a user is an employee or a contractor, this transform would output the result of that transform just as if the logic were contained directly within this transform. + +**Transform Request Body**: + +```json +{ + "attributes": { + "id": "Get Worker Type" + }, + "type": "reference", + "name": "Reference Transform" +} +``` + +--- + +

     

    + +This transform builds the user's display name, adds a hyphen to the end, and then adds the evaluated worker type from the earlier transform to build a string that would look something like "John Smith - Employee." + +**Transform Request Body**: + +```json +{ + "attributes": { + "values": [ + { + "attributes": { + "id": "Get Display Name" + }, + "type": "reference" + }, + " - ", + { + "attributes": { + "id": "Get Worker Type" + }, + "type": "reference" + } + ] + }, + "type": "concat", + "name": "Reference Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/replace.md b/docs/idn_docs/docs/transforms/transform_operations/operations/replace.md new file mode 100644 index 000000000..e8d651323 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/replace.md @@ -0,0 +1,84 @@ +# IdentityNow Transforms - Replace + +## Overview + +Use the replace transform to find a given pattern of characters within incoming data and replace all instances of that pattern with alternate values. The transform recognizes standard regex syntax. See the [References](#references) section for more information about regex. + +## Transform Structure + +The replace transform takes a `regex` attribute as an argument to identify which pattern to replace and a `replacement` attribute for the characters to replace the pattern with. The transform also requires the standard `type` and `name` attributes: + +```json +{ + "attributes": { + "regex": "IIQ", + "replacement": "IdentityNow" + }, + "type": "replace", + "name": "Replace Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `replace.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **regex** - This is the pattern you want to replace. + - **replacement** - This is the replacement string that replaces the pattern wherever it occurs. + +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **input** - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. + +## Examples + +This transform makes a simple word replacement, exchanging "IIQ" for "IdentityNow." + +```bash +Input: "Working with IIQ is fun" +Output: "Working with IdentityNow is fun" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "regex": "IIQ", + "replacement": "IdentityNow" + }, + "type": "replace", + "name": "Replace Transform" +} +``` + +--- + +

     

    + +This example uses a more complex regex pattern to remove any non-alphabet characters from the input string. + +```bash +Input: "The quick brown fox jumped over 10 lazy dogs" +Output: "Thequickbrownfoxjumpedoverlazydogs" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "input": "The quick brown fox jumped over 10 lazy dogs", + "regex": "[^a-zA-Z]", + "replacement": "" + }, + "type": "replace", + "name": "Replace Transform" +} +``` + +## References + +- [https://www.regular-expressions.info/replacetutorial.html](https://www.regular-expressions.info/replacetutorial.html) +- [https://regex101.com/](https://regex101.com/) diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/replace_all.md b/docs/idn_docs/docs/transforms/transform_operations/operations/replace_all.md new file mode 100644 index 000000000..7ac4675a3 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/replace_all.md @@ -0,0 +1,92 @@ +# IdentityNow Transforms - Replace All + +## Overview + +The replace all transform works like the replace transform, except that it can perform multiple replace operations on the incoming data instead of just one pattern. Use the replace all transform to find multiple patterns of characters within incoming data and replace all instances of those patterns with alternate values. The transform recognizes standard regex syntax. See the [References](#references) section for more information about regex. + +## Transform Structure + +The replace transform takes a `table` attribute of key-value pairs as an argument. Each pair identifies the pattern to search for as its key and the replacement string as its value. The transform also requires the standard `type` and `name` attributes: + +```json +{ + "attributes": { + "table": { + "-": " ", + "\"": "'", + "ñ": "n" + } + }, + "type": "replaceAll", + "name": "Replace All Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `replaceAll.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **regex** - This is the pattern you want to replace. + - **replacement** - This is the replacement string that replaces the pattern wherever it occurs. + +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **input** - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. + +## Examples + +This transform makes a simple set of special character replacements, exchanging a space for a hyphen and removing the Spanish tilde from the "n." + +```bash +Input: "Enrique Jose-Piñon" +Output: "Enrique Jose Pinon" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "table": { + ".": "-", + "\"": "'", + "ñ": "n" + } + }, + "type": "replaceAll", + "name": "Replace All Transform" +} +``` + +--- + +

     

    + +This example uses more complex regex patterns to remove any alphabet characters from the input string and replace periods with hyphens. + +```bash +Input: "ad512.777.1234" +Output: "512-777-1234" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "input": "", + "table": { + "[.]": "-", + "[a-zA-z]": "" + } + }, + "type": "replaceAll", + "name": "Replace All Transform", +} +``` + +## References + +- [https://www.regular-expressions.info/replacetutorial.html](https://www.regular-expressions.info/replacetutorial.html) +- [https://regex101.com/](https://regex101.com/) diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/right_pad.md b/docs/idn_docs/docs/transforms/transform_operations/operations/right_pad.md new file mode 100644 index 000000000..bba323206 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/right_pad.md @@ -0,0 +1,89 @@ +# IdentityNow Transforms - Right Pad + +## Overview + +Use the right pad transform to pad an incoming string with a user-supplied character out to a specific number of characters. This transform is often useful for data normalization situations in which data such as employee IDs are not uniform in length but need to be for downstream systems. + +### Other Considerations + +> - If the input to the right pad transform is null, the transform returns a null value. + +## Transform Structure + +In addition to the standard `type` and `name` attributes, the right pad transform requires the `length` attribute, which tells the transform how many characters to pad the incoming string to. + +```json +{ + "attributes": { + "padding": "0", + "length": "5" + }, + "type": "rightPad", + "name": "Right Pad Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `rightPad.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **length** - This is an integer value for the final output string's desired length. + +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **padding** - This string value represents the character the transform will pad the incoming data to to get to the desired length. + - If no padding value is provided, the transform defaults to a single space (" ") character for padding. + +## Examples + +This transform takes the incoming attribute configured in the Identity Profile attribute UI and ensures it is padded out to 8 characters in length by adding "0"s to the right. + +```bash +Input: "1234" +Output: "12340000" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "padding": "0", + "length": "8" + }, + "type": "rightPad", + "name": "Right Pad Transform" +} +``` + +--- + +

     

    + +This example takes the user's employeeID attribute from the HR source and ensures it is padded out to 7 characters in length by adding "x"s to the right. + +```bash +Input: "1234" +Output: "1234xxx" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "padding": "x", + "length": "7", + "input": { + "attributes": { + "sourceName": "HR Source", + "attributeName": "employeeID" + }, + "type": "accountAttribute" + } + }, + "type": "rightPad", + "name": "Right Pad Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/rule.md b/docs/idn_docs/docs/transforms/transform_operations/operations/rule.md new file mode 100644 index 000000000..5f0a26439 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/rule.md @@ -0,0 +1,69 @@ +# IdentityNow Transforms - Rule + +## Overview + +Like the reference transform, the rule transform allows you to reuse logic that has already been written for a previous use case. However, you can use the rule transform to reuse code contained within a Generic rule that either is not possible through only transforms or is too complex to maintain with Seaspray. + +## Transform Structure + +In addition to the standard `type` and `name` attributes, the structure of a rule transform requires the `name` of the rule you want to reference: + +```json +{ + "attributes": { + "name": "Generic Calculation Rule" + }, + "type": "rule", + "name": "Rule Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `rule.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **attributes.name** - This is the name of the Generic rule the transform must invoke. + +- **Optional Attributes** + - The rule transform can implement variables within the attributes list. These variables can be defined as static string values or even as the results of other transforms. Any variables defined here are passed to the Generic rule and are available for calculation within that code. + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + +## Examples + +If you had a "Generate Random Number" rule that produced a random integer value, this transform would invoke that rule and return the output of the code contained within it. + +**Transform Request Body**: + +```json +{ + "attributes": { + "name": "Generate Random Number" + }, + "type": "rule", + "name": "Rule Transform" +} +``` + +--- + +

     

    + +This transform shows a more complex use case in which you have a Generic rule written to perform various string manipulation tasks. If the manner the rule code uses to determine which task to run is passed to it by the `operation` variable and the operation is intended to get the last n characters of a string, n can be provided to the rule via the `numChars` variable. This transform invokes rule code to get the last three characters of the string passed to it via the UI configuration. + +**Transform Request Body**: + +```json +{ + "attributes": { + "name": "Cloud Services Deployment Utility", + "operation": "getEndOfString", + "input": { + "type": "trim" + }, + "numChars": "3" + }, + "type": "rule", + "name": "Rule Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/split.md b/docs/idn_docs/docs/transforms/transform_operations/operations/split.md new file mode 100644 index 000000000..40fa3f721 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/split.md @@ -0,0 +1,83 @@ +# IdentityNow Transforms - Split + +## Overview + +Use the split transform to use a specific character or regex string as a delimiter and convert a single incoming string into an array of values. This transform then returns the *N*th element of that array. This transform is often useful when you want to split combined names into their constituent parts or when you want to simplify an ordered list of values into a single attribute. + +## Transform Structure + +In addition to the standard `type` and `name` attributes, the split transform requires the `delimiter` and `index` attributes. These parameters, respectively, tell the transform what to use as the pattern to split the string with and which entry in the resulting array of values you want it to return. + +```json +{ + "attributes": { + "delimiter": ",", + "index": 5 + }, + "type": "split", + "name": "Split Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `split.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **delimiter** - This can be either a single character or a regex expression. Transforms use it identify the break point between two substrings in the incoming data. + - **index** - This is the integer value for the desired array element after the incoming data has been split into a list. The array is a 0-based object, so the first array element would be index 0, the second element would be index 1, etc. + +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **throws** - This boolean (true/false) value indicates whether an exception is thrown and returned as an output when an index is out of bounds with the resulting array (i.e., the provided `index` value is larger than the size of the array). + - true - The transform returns "IndexOutOfBoundsException." + - false - The transform returns null. + - If no throws value is provided, the transform default to false and returns a null. + +## Examples + +This transform takes the incoming attribute configured in the Identity Profile attribute UI, splits it based on the colon `:` character, and returns the second array element (array index 1). + +```bash +Input: "abc:123" +Output: "123" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "delimiter": ":", + "index": 1 + }, + "type": "split", + "name": "Split Transform" +} +``` + +--- + +

     

    + +This transform takes the explicit string provided, splits it based on the space (" ") character, and returns the fourth word (array index 3). + +```bash +Input: "The quick brown fox jumped over 10 lazy dogs" +Output: "fox" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "input": "The quick brown fox jumped over 10 lazy dogs", + "delimiter": " ", + "index": 3, + "throws": true + }, + "type": "split", + "name": "Split Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/static.md b/docs/idn_docs/docs/transforms/transform_operations/operations/static.md new file mode 100644 index 000000000..f26dcddeb --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/static.md @@ -0,0 +1,89 @@ +# IdentityNow Transforms - Static + +## Overview + +Use the static transform to return a fixed string value, or more commonly, to evaluate [Velocity Template Language](https://velocity.apache.org/engine/1.7/user-guide.html). The latter implementation is often useful when you are using if/then/else logic or iterating through a for loop. The static transform can also take other dynamically provided variables as inputs into the `value` attribute. + +### Other Considerations + +> - When you are using static transforms within the create profile for a source, you can enter the value directly in the input field if the user selects Static as the attribute type. +> - Because IdentityNow supports the ability to order attributes in a create profile, you can use the Velocity template of an attribute higher in the list to generate a static value for an attribute that is lower in the list. For example, if you wanted to generate an email address based on a display name, you would need to do the follwing: + > - Move the "displayName" attribute higher in the list so that it is created before the email address. + > - In the "mail" attribute, select Static for the attribute type. In the Static Value field, enter `$displayName@yourdomain.com.` + +## Transform Structure + +In addition to the standard `type` and `name` attributes, the static transform requires a value attribute to be specified: + +```json +{ + "attributes": { + "value": "Employee" + }, + "type": "static", + "name": "Static Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `static.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **value** - This must evaluate to a JSON string either through a fixed value or through conditional logic using Velocity Template Language. + +- **Optional Attributes** + - The static transform can implement variables within the `value` expression. These variables can be defined as optional attributes within the transform and can themselves be the results of other transforms. + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + +## Examples + +This transform uses a dynamic variable called `workerType`, which is set to the value of the user's HR record's empType value. The static transform then returns that value through the use of Velocity variable notation (i.e., `$`). + +**Transform Request Body**: + +```json +{ + "attributes": { + "workerType": { + "attributes": { + "sourceName": "HR Source", + "attributeName": "empType" + }, + "type": "accountAttribute" + }, + "value": "$workerType" + }, + "type": "static", + "name": "Static Transform" +} +``` + +--- + +

     

    + +This transform extends the previous one to show how you can use if/else logic to return data based on contingent logic. + +**Transform Request Body**: + +```json +{ + "attributes": { + "workerType": { + "attributes": { + "sourceName": "HR Source", + "attributeName": "empType" + }, + "type": "accountAttribute" + }, + "value": "#if($workerType=='Employee')Full-Time#{else}Contingent#end" + }, + "type": "static", + "name": "Static Transform" +} +``` + +## References + +- [https://velocity.apache.org/engine/1.7/user-guide.html](https://velocity.apache.org/engine/1.7/user-guide.html) diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/substring.md b/docs/idn_docs/docs/transforms/transform_operations/operations/substring.md new file mode 100644 index 000000000..eb55ef911 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/substring.md @@ -0,0 +1,87 @@ +# IdentityNow Transforms - Substring + +## Overview + +Use the substring transform to get the inner portion of a string passed into the transform. You can use the substring transform to get the first n characters or get a set number of characters within the middle of a string. + +### Other Considerations + +> - The substring transform does not currently provide an easy way to get the last n characters of a string. To do so, use the [Get End of String](./get_end_of_string.md) transform. + +## Transform Structure + +In addition to the standard `type` and `name` attributes, the substring transform requires you to provide the beginning location of the input, which indicates the start of the desired substring output: + +```json +{ + "attributes": { + "begin": 4 + }, + "type": "substring", + "name": "Substring Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `substring.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + - **begin** - This is the integer value for the location within the input data that contains the first character of the substring you want to return. + - If `begin` is set to -1, the transform begins at character 0 of the input data. + +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **beginOffset** - This integer value is the number of characters to add to the `begin` attribute when the transform returns a substring. The transform only uses this attribute if `begin` is not -1. + - **end** - This is the integer value for the location within the input data that no longer contains the substring you want to return. + - If `end` is -1 or not provided at all, the substring transform returns everything up to the end of the input string. + - **endOffset** - This integer value is the number of characters to add to the `end` attribute when the transform returns a substring. The transform only uses this attribute if `end` is provided and is not -1. + - **input** - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. + +## Examples + +This transform uses a zero-based array to determine that the letter "c" is the begin index of the substring it will return because "c" is in index location 2. Index location 4 contains the letter "e," so the transform will return a substring consisting of anything between the letters "c" and "e," including "c" but excluding "e." + +```bash +Input: "abcdef" +Output: "cd" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "begin": 2, + "end": 4 + }, + "type": "substring", + "name": "Substring Transform" +} +``` + +--- + +

     

    + +This transform uses a zero-based array to determine that the substring transform must begin with the letter "c" because even though the letter "b' is in index location 1, the beginOffset value indicates one additional character must be skipped. Index location 3 contains the letter "d," so the transform would normally end at the character preceding "d." However, with the endOffset value set to 2, the transform must include an additional two characters, "d" and "e." Thus, the transform returns "cde." + +```bash +Input: "abcdef" +Output: "cde" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "begin": 1, + "end": 3, + "beginOffset": 1, + "endOffset": 2 + }, + "type": "substring", + "name": "Substring Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/trim.md b/docs/idn_docs/docs/transforms/transform_operations/operations/trim.md new file mode 100644 index 000000000..2e3ccfdb7 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/trim.md @@ -0,0 +1,81 @@ +# IdentityNow Transforms - Trim + +## Overview + +Use the trim transform to trim whitespaces from both the beginning and ending of input strings. + +## Transform Structure + +The trim transform only requires the transform's `type` and `name` attributes: + +```json +{ + "type": "trim", + "name": "Trim Transform" +} +``` + +## Attributes + +- **Required Attributes** + + - **type** - This must always be set to `trim.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **input** - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. + +## Examples + +This transform removes the whitespace before the " Vice President" input. + +```bash +Input: " Vice President" +Output: "Vice President" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "input": { + "attributes": { + "value": " Vice President" + }, + "type": "static" + } + }, + "type": "trim", + "name": "Trim Transform" +} +``` + +--- + +

     

    + +This transform removes the whitespace after the "Austin, Texas " input. + +```bash +Input: "Austin, Texas " +Output: "Austin, Texas" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "input": { + "attributes": { + "value": "Austin, Texas " + }, + "type": "static" + } + }, + "type": "trim", + "name": "Trim Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/upper.md b/docs/idn_docs/docs/transforms/transform_operations/operations/upper.md new file mode 100644 index 000000000..1e0692c93 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/upper.md @@ -0,0 +1,81 @@ +# IdentityNow Transforms - Upper + +## Overview + +Use the upper transform to convert an input string into all uppercase letters. + +## Transform Structure + +The upper transform only requires the transform's `type` and `name` attributes: + +```json +{ + "type": "upper", + "name": "Upper Transform" +} +``` + +## Attributes + +- **Required Attributes** + + - **type** - This must always be set to `upper.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + - **input** - This is an optional attribute that can explicitly define the input data passed into the transform logic. If no input is provided, the transform takes its input from the source and attribute combination configured with the UI. + +## Examples + +This transform takes the input "inactive" and produces the output "INACTIVE." + +```bash +Input: "inactive" +Output: "INACTIVE" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "input": { + "attributes": { + "value": "inactive" + }, + "type": "static" + } + }, + "type": "upper", + "name": "Upper Transform" +} +``` + +--- + +

     

    + +This transform takes the input "Everyone" and produces the output "EVERYONE." + +```bash +Input: "Everyone" +Output: "EVERYONE" +``` + +**Transform Request Body**: + +```json +{ + "attributes": { + "input": { + "attributes": { + "value": "Everyone" + }, + "type": "static" + } + }, + "type": "upper", + "name": "Upper Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/username_generator.md b/docs/idn_docs/docs/transforms/transform_operations/operations/username_generator.md new file mode 100644 index 000000000..753b46584 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/username_generator.md @@ -0,0 +1,188 @@ +# IdentityNow Transforms - Username Generator + +## Overview + +Use the username generator transform to specify logic to use when it derives a unique value for an attribute in an account create profile. The generator's logic can be as simple as a combination of parts of a user's name and/or HR data (e.g., firstName.lastName), but sometimes generator logic such as a uniqueness counter can be necessary to find a unique value in the target system (e.g., firstName.lastName1 if firstName.lastName is already taken). + +### Other Considerations + +> - The transform allows you to use "uniqueCounter" as a reserved variable for numerically trying the next iteration of the pattern. Once the generator is active on a pattern with the "uniqueCounter," it will keep incrementing until it either has found a unique username candidate, or it exhausts the "cloudMaxUniqueChecks" value. This means that the generator does not process any patterns after one containing "uniqueCounter." The "uniqueCounter" **must always be last** in the pattern list. +> - Within the account attribute definition structure, there is a field for "cloudMaxUniqueChecks" that identifies how many times the generator must invoke the uniqueness check logic before it stops executing. The maximum allowed value for this field is 50. + +## Transform Structure + +The username generator transform is intended for use as a configuration within the account create profile for a source. Thus, this transform's structure is more extensive than a typical Seaspray implementation -- it must be assigned to a create profile attribute (designated by `name`) and provide certain uniqueness check attributes such as `cloudMaxSize,` `cloudMaxUniqueChecks,` and `cloudRequired.` + +The `cloudMaxSize` attribute denotes the maximum length of generated data allowable as a result of the generator logic. The transform truncates any characters over the `cloudMaxSize.` The `cloudMaxUniqueChecks` attribute determines the maximum number of iterations the generator must attempt before failing to generate a value. The `cloudRequired` attribute is an internal flag required for the IdentityNow platform - leave it as `true.` + +Provide the username generator transform itself in the create profile attribute entry's `transform` parameter. + +```json +{ + "attributes": { + "cloudMaxSize": "100", + "cloudMaxUniqueChecks": "5", + "cloudRequired": "true" + }, + "isRequired": false, + "multi": false, + "name": "distinguishedName", + "transform": { + "type": "usernameGenerator", + "attributes": { + "sourceCheck": true, + "patterns": [ + "CN=$fi.$ln,OU=Users,DC=YourDomain,DC=com", + "CN=$fn.$ln,OU=Users,DC=YourDomain,DC=com", + "CN=$fn.$mi.$ln${uniqueCounter},OU=Users,DC=YourDomain,DC=com" + ], + "fn": { + "type": "identityAttribute", + "attributes": { + "name": "firstname" + } + }, + "ln": { + "type": "identityAttribute", + "attributes": { + "name": "lastname" + } + }, + "fi": { + "type": "substring", + "attributes": { + "input": { + "type": "identityAttribute", + "attributes": { + "name": "firstname" + } + }, + "begin": 0, + "end": 1 + } + }, + "mi": { + "type": "substring", + "attributes": { + "input": { + "type": "identityAttribute", + "attributes": { + "name": "middlename" + } + }, + "begin": 0, + "end": 1 + } + } + } + }, + "type": "" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `usernameGenerator.` + - **patterns** - This is a JSON array of patterns for the generator to evaluate for uniqueness, in sequential order. + > **Note** that you can leverage `$uniqueCounter` here to automatically increment a counter if the generated value is not available and you want to try appending numeric values (i.e., 1, 2, 3, etc.) instead of progressing beyond the current pattern. + +- **Optional Attributes** + - **sourceCheck** - This boolean value (true/false) indicates whether the generator must check only the IdentityNow database's representation of accounts for uniqueness, or whether it must query the target system directly. If no value is provided, the attribute defaults to `false`. + - `true` indicates the generator must check the target system directly. The generator only honors this setting if the system supports the "getObject" functionality. For systems that lack the ability to query for single account objects, the generator ignores this setting and defaults to `false`. The generator only checks the attribute identified in the account schema as the accountID. + - `false` indicates the generator must check only the IdentityNow database of accounts. The generator only checks the accountID. + +## Examples + +This generator takes the user's first initial, appends the user's full last name, and then leverages a uniqueness counter to generate a unique value for userId. For example, if the user's name were John Doe, the username generator would first try `jdoe.` If that were not unique, it would progress to `jdoe1,` then `jdoe2,` until `jdoe25.` + +If the generator does not find a unique value within the first 25 tries, it returns an IllegalStateException. + +**Transform Request Body**: + +```json +{ + "attributes": { + "cloudMaxSize": "100", + "cloudMaxUniqueChecks": "25", + "cloudRequired": "true" + }, + "isRequired": false, + "multi": false, + "name": "userId", + "transform": { + "type": "usernameGenerator", + "attributes": { + "sourceCheck": true, + "patterns": [ + "$fi$ln${uniqueCounter}" + ], + "ln": { + "type": "identityAttribute", + "attributes": { + "name": "lastname" + } + }, + "fi": { + "type": "substring", + "attributes": { + "input": { + "type": "identityAttribute", + "attributes": { + "name": "firstname" + } + }, + "begin": 0, + "end": 1 + } + } + } + }, + "type": "" +} +``` + +--- + +

     

    + +This generator takes the user's first name, appends a period and then the user's full last name, and then adds a uniqueness counter to generate a unique value for accountId. For example, if the user's name were Adam Smith, the username generator would first try `adam.smith.` If that were not unique, it would progress to `adam.smith1,` then `adam.smith2,` until `adam.smith10.` + +If the generator does not find a unique value within the first 10 tries, it returns an IllegalStateException. + +**Transform Request Body**: + +```json +{ + "attributes": { + "cloudMaxSize": "100", + "cloudMaxUniqueChecks": "10", + "cloudRequired": "true" + }, + "isRequired": false, + "multi": false, + "name": "accountId", + "transform": { + "type": "usernameGenerator", + "attributes": { + "sourceCheck": true, + "patterns": [ + "$fn.$ln${uniqueCounter}" + ], + "fn": { + "type": "identityAttribute", + "attributes": { + "name": "firstname" + } + }, + "ln": { + "type": "identityAttribute", + "attributes": { + "name": "lastname" + } + } + } + }, + "type": "" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/operations/uuid_generator.md b/docs/idn_docs/docs/transforms/transform_operations/operations/uuid_generator.md new file mode 100644 index 000000000..c70e607a1 --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/operations/uuid_generator.md @@ -0,0 +1,42 @@ +# IdentityNow Transforms - UUID Generator + +## Overview + +Use the UUID generator transform to create a universal unique ID (UUID) in the form of a 36-character string. + +### Other Considerations + +> There is no uniqueness checking in this transform - the underlying code is written to provide a 1 in 68,719,476,736 chance of creating a string that actually collides with another string within the tenant, so the generated UUID's uniqueness is very likely, but it is not guaranteed. + +## Transform Structure + +The UUID generator transform only requires the transform's `type` and `name` attributes: + +```json +{ + "type": "uuid", + "name": "UUID Generator Transform" +} +``` + +## Attributes + +- **Required Attributes** + - **type** - This must always be set to `uuid.` + - **name** - This is a required attribute for all transforms. It represents the name of the transform as it will appear in the UI's dropdown menus. + +- **Optional Attributes** + - **requiresPeriodicRefresh** - This `true` or `false` value indicates whether the transform logic should be reevaluated every evening as part of the identity refresh process. + +## Examples + +This transform produces a UUID such as `f7493c55-f3fc-491a-b352-4664d71f885b.` + +**Transform Request Body**: + +```json +{ + "type": "uuid", + "name": "UUID Generator Transform" +} +``` diff --git a/docs/idn_docs/docs/transforms/transform_operations/temporary_password_usecase.md b/docs/idn_docs/docs/transforms/transform_operations/temporary_password_usecase.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/idn_docs/docs/transforms/transform_operations/transform_operations.md b/docs/idn_docs/docs/transforms/transform_operations/transform_operations.md new file mode 100644 index 000000000..20c1e8f4b --- /dev/null +++ b/docs/idn_docs/docs/transforms/transform_operations/transform_operations.md @@ -0,0 +1,94 @@ +# Operations in IdentityNow Transforms + +Transforms allow you to manipulate attribute values while aggregating from or provisioning to a source. + +You can find more information about the use and construction of transforms in [Building Transforms in IdentityNow](../building_transforms/building_transforms.md#building-transforms-in-identitynow). + +This document lists each type of operation you can perform in a transform and examples of their uses. + +Sometimes you will hear these transforms referred to as **Seaspray**, which is the code-name for transforms. IdentityNow Transforms and Seaspray are essentially the same thing. + +The general form of a transform definition is the following form: + +```json +{ + "type": "", + "attributes": { + "transform-attribute-1": "attribute-1-value", + "transform-attribute-2": "attribute-2-value" + } +} +``` + +Attribute values can be any JSON value, including nested transforms and primitive operations. You can use a special attribute, "input," to seed the input value for a transform instead of deriving it from the transform context. + +## Transform Operations + +Seaspray ships out of the box with a number of primitive operations. The following sections describe the operations. + +**Operations:** + +* [Account Attribute](./operations/account_attribute.md) +* [Base64 Decode](./operations/base64_decode.md) +* [Base64 Encode](./operations/base64_encode.md) +* [Concatenation](./operations/concatenation.md) +* [Conditional](./operations/conditional.md) +* [Date Compare](./operations/date_compare.md) +* [Date Format](./operations/date_format.md) +* [Date Math](./operations/date_math.md) +* [Decompose Diacritial Marks](./operations/decompose_diacritical_marks.md) +* [E.164 Phone](./operations/e164_phone.md) +* [First Valid](./operations/first_valid.md) +* [Generate Random String](./operations/generate_random_string.md) +* [Get End of String](./operations/get_end_of_string.md) +* [Get Reference Identity Attribute](./operations/get_reference_identity_attribute.md) +* [Identity Attribute](./operations/identity_attribute.md) +* [Index Of](./operations/index_of.md) +* [ISO3166](./operations/iso_3166.md) +* [Last Index Of](./operations/last_index_of.md) +* [Left Pad](./operations/left_pad.md) +* [Lookup](./operations/lookup.md) +* [Lower](./operations/lower.md) +* [Name Normalizer](./operations/name_normalizer.md) +* [Random Alphanumeric](./operations/random_alphanumeric.md) +* [Random Numeric](./operations/random_numeric.md) +* [Reference](./operations/reference.md) +* [Replace All](./operations/replace_all.md) +* [Replace](./operations/replace.md) +* [Right Pad](./operations/right_pad.md) +* [Rule](./operations/rule.md) +* [Split](./operations/split.md) +* [Static](./operations/substring.md) +* [Substring](./operations/trim.md) +* [Trim](./operations/trim.md) +* [Upper](./operations/upper.md) +* [Username Generator](./operations/username_generator.md) +* [UUID Generator](./operations/uuid_generator.md) + +## Template Engine + +Seaspray ships with the Apache Velocity template engine that allows a transform to reference, transform, and render values passed into the transform context. Every string value in a Seaspray transform can contain templated text and will run through the template engine. + +### Example + +```javascript +// In the following string, the text "$firstName" is replaced by the value of firstName in the template context. The same goes for "$lastName". +// If $firstName=John and $lastName=Doe then the string "$firstName.$lastName" would render as "John.Doe" +``` + +### Identity Attribute Context + +The following variables are available to the Apache Velocity template engine when a transform is used to source an identity attribute. + +* **identity** - sailpoint.object.Identity - This is the identity the attribute promotion is performed on. +* **oldValue** - Object - This is the attribute's previous value. +* **attributeDefinition** - sailpoint.object.ObjectAttribute - This is the definition of the attribute being promoted. + +### Account Profile Context + +The following variables are available to the Apache Velocity template engine when a transform is used in an account profile. + +* **field** - sailpoint.object.Field - This is the field definition backing the account profile attribute. +* **identity** - sailpoint.object.Identity - This is the identity the account profile is generating for. +* **application** - sailpoint.object.Application - This is the application backing the source that owns the account profile. +* **current** - Object - This is the attribute's current value. diff --git a/docs/idn_docs/intro.md b/docs/idn_docs/intro.md new file mode 100644 index 000000000..8a2e69d95 --- /dev/null +++ b/docs/idn_docs/intro.md @@ -0,0 +1,47 @@ +--- +sidebar_position: 1 +--- + +# Tutorial Intro + +Let's discover **Docusaurus in less than 5 minutes**. + +## Getting Started + +Get started by **creating a new site**. + +Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new)**. + +### What you'll need + +- [Node.js](https://nodejs.org/en/download/) version 16.14 or above: + - When installing Node.js, you are recommended to check all checkboxes related to dependencies. + +## Generate a new site + +Generate a new Docusaurus site using the **classic template**. + +The classic template will automatically be added to your project after you run the command: + +```bash +npm init docusaurus@latest my-website classic +``` + +You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor. + +The command also installs all necessary dependencies you need to run Docusaurus. + +## Start your site + +Run the development server: + +```bash +cd my-website +npm run start +``` + +The `cd` command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there. + +The `npm run start` command builds your website locally and serves it through a development server, ready for you to view at http://localhost:3000/. + +Open `docs/intro.md` (this page) and edit some lines: the site **reloads automatically** and displays your changes. diff --git a/docs/idn_docs/specs/README.md b/docs/idn_docs/specs/README.md new file mode 100644 index 000000000..192efa19e --- /dev/null +++ b/docs/idn_docs/specs/README.md @@ -0,0 +1 @@ +Do not remove this folder. It is necessary for the theme to run smoothly. \ No newline at end of file diff --git a/docs/idn_docs/triggers/available-event-triggers/access-request-dynamic-approval-event-trigger.md b/docs/idn_docs/triggers/available-event-triggers/access-request-dynamic-approval-event-trigger.md new file mode 100644 index 000000000..1fc1a2ac9 --- /dev/null +++ b/docs/idn_docs/triggers/available-event-triggers/access-request-dynamic-approval-event-trigger.md @@ -0,0 +1,93 @@ +--- +id: access-request-dynamic-approval-event-trigger +title: Access Request Dynamic Approval Event Trigger +sidebar_label: Access Request Dynamic Approval Event Trigger +sidebar-position: 2 +--- + +# Access Request Dynamic Approval Event Trigger + +## Event context + +The Access Request Dynamic Approval event trigger provides a way to route a request to an additional approval step by an identity or a governance group. + +When an access request is submitted, the Access Request Dynamic Approval trigger: + +- Sends data about the access request and expects a response that includes the ID of an existing identity or workgroup (i.e. governance group) to add to the approval workflow +- Based on the ID received, an approval task will be assigned to the identity or governance group in IdentityNow for a decision as an additional step after other configured approval requirements +- If the new approver is also the target identity for this request, the manager is assigned instead. If the identity has no manager, a random org admin is assigned. +- If the ID of the additional approver is wrong, then a random org admin is assigned. +- You can choose to **NOT** add an additional approver by providing an empty object as the +response to the triggered REST request. + +This trigger can be used to develop logic outside of IdentityNow’s out-of-the-box offerings to route an approval step to users such as: + +- The recipient’s department head +- The recipient’s cost center +- A security officer +- A high-risk governance group for highly sensitive roles + +## Configuration + +This is a `REQUEST_RESPONSE` type trigger. For general information on how to respond to a `REQUEST_RESPONSE` type trigger, see [responding to a request response type trigger](../event-triggers-responding-to-a-request-response-trigger.md). This trigger intercepts newly submitted access requests and allows the subscribing service to add one additional identity or governance group as the last step in the approver list for the access request. + +The subscribing service will receive the following input from the trigger service. The input schema can be found in the [API specification](https://developer.sailpoint.com/apis/beta/#section/Access-Request-Dynamic-Approver-Event-Trigger-Input): + +```json +{ + "accessRequestId": "4b4d982dddff4267ab12f0f1e72b5a6d", + "requestedFor": { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1313", + "name": "William Wilson" + }, + "requestedItems": [ + { + "id": "2c91808b6ef1d43e016efba0ce470904", + "name": "Engineering Access", + "description": "Engineering Access", + "type": "ACCESS_PROFILE", + "operation": "Add", + "comment": "William needs this access for his day to day job activities." + } + ], + "requestedBy": { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1314", + "name": "Billy Bob" + } +} +``` + +The subscribing service can use this information to make a decision on whether to add additional approvers to the access request. The output schema can be found in the [API specification](https://developer.sailpoint.com/apis/beta/#section/Access-Request-Dynamic-Approver-Event-Trigger-Output). To add an identity to the approver list, the subscribing service should respond to the event trigger with the following payload: + +```json +{ + "id": "2c91808b6ef1d43e016efba0ce470906", + "name": "Adam Adams", + "type": "IDENTITY" +} +``` + +To add a governance group to the approver list, the subscribing service should respond to the event trigger with the following payload: + +```json +{ + "id": "2c91808b6ef1d43e016efba0ce470907", + "name": "Audit Committee", + "type": "GOVERNANCE_GROUP" +} +``` + +If no identity or group should be added to a particular access request, then the subscribing service should respond with an empty object: + +```json +{} +``` + +## Additional information and links + +- **Trigger Type**: [REQUEST_RESPONSE](../event-triggers-trigger-types.md#request-response) +- [Input Schema](https://developer.sailpoint.com/apis/beta/#section/Access-Request-Dynamic-Approver-Event-Trigger-Input) +- [Output Schema](https://developer.sailpoint.com/apis/beta/#section/Access-Request-Dynamic-Approver-Event-Trigger-Output) +- [How to respond to a REQUEST_RESPONSE trigger](../event-triggers-responding-to-a-request-response-trigger.md) diff --git a/docs/idn_docs/triggers/available-event-triggers/access-request-postapproval-trigger.md b/docs/idn_docs/triggers/available-event-triggers/access-request-postapproval-trigger.md new file mode 100644 index 000000000..90f932eb2 --- /dev/null +++ b/docs/idn_docs/triggers/available-event-triggers/access-request-postapproval-trigger.md @@ -0,0 +1,27 @@ +--- +id: access-request-postapproval-trigger +title: Access Request Postapproval Trigger +sidebar_label: Access Request Postapproval Trigger +sidebar-position: 3 +--- + +# Access Request Postapproval Trigger + +## Event context + +The SailPoint IdentityNow platform now includes event triggers within the Access Request Approval workflow. The Access Request Postapproval event trigger provides more proactive governance and ensure users can quickly obtain needed access. + +![Flow](./img/access-request-postapproval-path.png) + + When an access request is approved, this event trigger can: + +- Notify the requester that the access request has been approve or denied. +- Notify the administrator or system to take the appropriate provisioning actions for the requested access. +- Notify a third party system to trigger another action (e.g. customer feedback survey, initiate another business process), or simply for auditing once an access request decision has been made. + +The Access Request event trigger is a flexible way to extend the Access Request workflow after access is approved for the requester. + +## Additional information and links + +- **Trigger Type**: [FIRE_AND_FORGET](../event-triggers-trigger-types.md#fire-and-forget) +- [Input schema](https://developer.sailpoint.com/apis/beta/#section/Access-Request-Post-Approval-Event-Trigger-Input) \ No newline at end of file diff --git a/docs/idn_docs/triggers/available-event-triggers/access-request-preapproval-event-trigger.md b/docs/idn_docs/triggers/available-event-triggers/access-request-preapproval-event-trigger.md new file mode 100644 index 000000000..039e76927 --- /dev/null +++ b/docs/idn_docs/triggers/available-event-triggers/access-request-preapproval-event-trigger.md @@ -0,0 +1,90 @@ +--- +id: access-request-preapproval-event-trigger +title: Access Request Preapproval Event Trigger +sidebar_label: Access Request Preapproval Event Trigger +sidebar-position: 4 +--- + +# Access Request Preapproval Event Trigger + +## Event context + +The platform now includes event triggers within the Access Request approval workflow. The Access Request Submitted event trigger provides more proactive governance, ensures users can quickly obtain needed access, and helps with more preventative measures towards unintended access. + +![Flow](./img/access-request-preapproval-path.png) + +When an access request is submitted, this event trigger can: + +- Provide the approver with additional context about the access request, for instance, any Separation of Duties (SOD) policy violations +- Notify the approver through a different medium, such as Slack or Outlook Actionable Messages +- Send a Terms of Agreement form of the requested Application to be signed by the access requester +- On average you can expect about 1 access request for every 4 identities within your org per day. - On average you can expect about 1 to 2 access requests within a 10 second period. + +Additional use cases include: + +- Sending a Slack Notification to the approver or an approval channel and approve the request within Slack. +- Create an Outlook Actionable Message. +- Create a Google Doc for the requester to fill out and submit. + +## Configuration + +This is a `REQUEST_RESPONSE` type trigger. For general information on how to respond to a `REQUEST_RESPONSE` type trigger, see [responding to a request response type trigger](../event-triggers-responding-to-a-request-response-trigger.md). This trigger intercepts newly submitted access requests and allows the subscribing service to perform a preliminary approve/deny before the access request moves to the next approver in the chain. + +The subscribing service will receive the following input from the trigger service. The input schema can be found in the [API specification](https://developer.sailpoint.com/apis/beta/#section/Access-Request-Pre-Approval-Event-Trigger-Input): + +```json +{ + "accessRequestId": "2c91808b6ef1d43e016efba0ce470904", + "requestedFor": { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1313", + "name": "William Wilson" + }, + "requestedItems": [ + { + "id": "2c91808b6ef1d43e016efba0ce470904", + "name": "Engineering Access", + "description": "Access to engineering database", + "type": "ACCESS_PROFILE", + "operation": "Add", + "comment": "William needs this access to do his job." + } + ], + "requestedBy": { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1314", + "name": "Rob Robertson" + } +} +``` + +The subscribing service can use this information to make a decision on whether to approve or deny the request. The output schema can be found in the [API specification](https://developer.sailpoint.com/apis/beta/#section/Access-Request-Pre-Approval-Event-Trigger-Output). To approve an access request, the subscribing service should respond to the event trigger with the following payload: + +```json +{ + "approved": true, + "comment": "This access has passed preliminary approval.", + "approver": "AcmeCorpExternalIntegration" +} +``` + +To deny an access request, the subscribing service should respond to the event trigger with the following payload: + +```json +{ + "approved": false, + "comment": "This access should be denied, because this will cause an SOD violation.", + "approver": "AcmeCorpExternalIntegration" +} +``` + +This event trigger interrupts the normal workflow for access requests. Access requests can only proceed if the subscribing service responds within the alotted time by approving the request. If the subscribing service is non responsive, or responding with an incorrect payload, then access requests will fail after the **Separation of Duties** check. If you see numerous access requests failing at this stage, check to make sure your subscribing service is operating correctly. + +![AR failed](./img/access-request-preapproval-failure.png) + +## Additional information and links + +- **Trigger Type**: [REQUEST_RESPONSE](../event-triggers-trigger-types.md#request-response) +- [Input Schema](https://developer.sailpoint.com/apis/beta/#section/Access-Request-Pre-Approval-Event-Trigger-Input) +- [Output Schema](https://developer.sailpoint.com/apis/beta/#section/Access-Request-Pre-Approval-Event-Trigger-Output) +- [How to respond to a REQUEST_RESPONSE trigger](../event-triggers-responding-to-a-request-response-trigger.md) diff --git a/docs/idn_docs/triggers/available-event-triggers/account-aggregation-completed.md b/docs/idn_docs/triggers/available-event-triggers/account-aggregation-completed.md new file mode 100644 index 000000000..6b7f15694 --- /dev/null +++ b/docs/idn_docs/triggers/available-event-triggers/account-aggregation-completed.md @@ -0,0 +1,51 @@ +--- +id: account-aggregation-completed +title: Account Aggregation Completed +sidebar_label: Account Aggregation Completed +sidebar-position: 5 +--- + +# Account Aggregation Completed + +## Event context + +The platform has introduced an event trigger within the Source Aggregation workflow to provide additional monitoring capabilities. This helps to ensure account aggregations are performing as expected and that identity data always reflects current source account information for better identity governance. Aggregations connect to a source and collect account information from the source to discover the number of accounts that have been added, changed, or removed. For more information about account aggregation see [Account Aggregation Data flow](https://community.sailpoint.com/t5/Technical-White-Papers/Account-Aggregation-Data-Flow/ta-p/79914#toc-hId-1367430234) + +![Flow](./img/aggregation-diagram.png) + +After the initial collection of accounts in the source system during aggregation completes, this event trigger can: + +- Notify an administrator that IdentityNow was able to successfully connect to the source system and was able to collect source accounts. +- Notify an administrator when the aggregation is terminated manually during the account collection phase. +- Notify an administrator or system (e.g. PagerDuty) that IdentityNow failed to collect accounts during aggregation and indicate required remediation for the source system. + +> This event trigger does not include entitlement aggregations. + +The source account activity is summarized in `stats` e.g: + +```JSON +"stats": { + "scanned": 200, + "unchanged": 190, + "changed": 6, + "added": 4, + "removed": 3 + } +``` + +In this example, there are 10 changed accounts (`scanned` (200) - `unchanged` - (190)). Changed accounts include accounts that are `added` (6) and accounts that are `changed` (4), which equals 10 accounts. Removed accounts may or may not be included in the changed account total depending on the sources. For this example, `removed` (3) may be considered a changed account in some sources and would show a `scanned` count of 203 instead of 200. + +> This event trigger will fire even without changed accounts. The unchanged count will match the scanned accounts in the response. + +The status of the aggregation can be one of three possible values: + +- **Success**: Account collection successful and aggregation can move to the next step. +- **Error**: There is failure in account collection or issues with connecting to the source. `errors` vary by source. +- **Termination**: The aggregation was terminated during the account collection phase. Aggregation can be terminated when the account deletion threshold is exceeded. For example, an account delete threshold of 10% is set by default for the source and if the number of `removed` accounts for the above example is 21 (more than 10% of `scanned` accounts (200)), the aggregation is cancelled. + +![Account_Delete_Threshold](./img/aggregation-delete-threshold.png) + +## Additional information and links + +- **Trigger Type**: [FIRE_AND_FORGET](../event-triggers-trigger-types.md#fire-and-forget) +- [Input schema](https://developer.sailpoint.com/apis/beta/#section/Account-Aggregation-Completed-Event-Trigger-Input) \ No newline at end of file diff --git a/docs/idn_docs/triggers/available-event-triggers/identity-attribute-changed-event-trigger.md b/docs/idn_docs/triggers/available-event-triggers/identity-attribute-changed-event-trigger.md new file mode 100644 index 000000000..99fa9fd08 --- /dev/null +++ b/docs/idn_docs/triggers/available-event-triggers/identity-attribute-changed-event-trigger.md @@ -0,0 +1,24 @@ +--- +id: identity-attribute-changed-event-trigger +title: Identity Attribute Changed Event Trigger +sidebar_label: Identity Attribute Changed Event Trigger +sidebar-position: 6 +--- + +# Identity Attribute Changed Event Trigger + +## Event context + +![Flow](./img/trigger-path.png) + +Identity Attribute Changed events occur when any attributes that are aggegrated from an authoritative source differ from the current attributes for an identity during an identity refresh. See [Configuring Correlation](https://community.sailpoint.com/t5/Connectors/Configuring-Correlation/ta-p/74045) for more information about attributes that are updated for an Identity Profile. + +This event trigger provides a flexible way to extend Joiner-Mover-Leaver processes. This provides more proactive governance and ensures users can quickly obtain needed access when enter your organization. Some examples of how this trigger can be used include: + +- Notify an administrator or system to take the appropriate provisioning actions as part of the Mover workflow. +- Notify a system to trigger another action (e.g. trigger a certification campaign when an identity's manager had changed ). + +## Additional information and links + +- **Trigger Type**: [FIRE_AND_FORGET](../event-triggers-trigger-types.md#fire-and-forget) +- [Input schema](https://developer.sailpoint.com/apis/beta/#section/Identity-Attributes-Changed-Event-Trigger-Input) \ No newline at end of file diff --git a/docs/idn_docs/triggers/available-event-triggers/identity-created-event-trigger.md b/docs/idn_docs/triggers/available-event-triggers/identity-created-event-trigger.md new file mode 100644 index 000000000..bc7e86edb --- /dev/null +++ b/docs/idn_docs/triggers/available-event-triggers/identity-created-event-trigger.md @@ -0,0 +1,24 @@ +--- +id: identity-created-event-trigger +title: Identity Created Event Trigger +sidebar_label: Identity Created Event Trigger +sidebar-position: 7 +--- + +# Identity Created Event Trigger + +## Event context + +![Flow](./img/identity-created-path.png) + +Identity Created events occur when a new identity is detected during an aggregration and refresh from an authoritative source. New identities are detected when an account from the authoritative source is not correlated to an existing identity. For more information, see [Configuring Correlation](https://community.sailpoint.com/t5/Connectors/Configuring-Correlation/ta-p/74045). The Identity Created event will contain all attributes of the identity as configured in the identity profile. For more information, see [Mapping Identity Profiles](https://community.sailpoint.com/t5/Admin-Help/Mapping-Identity-Profiles/ta-p/77877). + +This event trigger provides a flexible way to extend Joiner-Mover-Leaver processes. This provides more proactive governance and ensure users can quickly obtain needed access when they enter your organization. Some examples of how this trigger can be used include: + +- Notify an administrator or system to take the appropriate birthright provisioning actions as part of the Joiner workflow. +- Notify a third party system to trigger another action (e.g. create an onboarding experience for a new hire). + +## Additional information and links + +- **Trigger Type**: [FIRE_AND_FORGET](../event-triggers-trigger-types.md#fire-and-forget) +- [Input schema](https://developer.sailpoint.com/apis/beta/#section/Identity-Created-Event-Trigger-Input) diff --git a/docs/idn_docs/triggers/available-event-triggers/img/access-request-postapproval-path.png b/docs/idn_docs/triggers/available-event-triggers/img/access-request-postapproval-path.png new file mode 100644 index 0000000000000000000000000000000000000000..3ec8bdbd47230ab98c9e01463569fef9f1647630 GIT binary patch literal 31801 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 PZ^KB6%86768TkJn)%^`l literal 0 HcmV?d00001 diff --git a/docs/idn_docs/triggers/available-event-triggers/img/access-request-preapproval-failure.png b/docs/idn_docs/triggers/available-event-triggers/img/access-request-preapproval-failure.png new file mode 100644 index 0000000000000000000000000000000000000000..78fa7a23b90a3bb321bce4847cc7f020f22c9281 GIT binary patch literal 38794 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 vyo)UI-Ge(};_mM5aLBvPZuhRW_Aj{Y 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�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 ^6F#f$`@E!-D|IoZYB5&2-+BkohM!@ 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 ieVZBc{!<%uU;WVym|#^h=TO;OHn$w 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

    +@VR!^bvzhxy05^! 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

    N21ZMgVGkb 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

    HCPfp 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

    OC?)aQvsCENAuk}aBo>Z@I#my&2Ltf&* z-F8**=NPKlq<@o;T)qi0I>Pf`d0eDV&$!l?UteZ{ilGX5y#$?SgLo3o4)T*d1q8&* z13WlnlUY}b1;yzo;CXux&&59ZCc-9d@crRWaJy$STZ@a3y#2n)n;6E> z{@QGoZ(KHQsPCMBC|elb#E!g^$ArfC^-+d&c4hWw&}bLE)uA_&;h&y#coP3%dM2T% z`pRN}#Ia8@O3UKRnaKM3_HYK(k9`#JFx(p78$HYNhiB3o0;7lvOOs=ta2}k}?qszI zeO;a+J6>=pujasL#NbQY9XztNSrY+7GEVF5pw3|TGkeevsv@S7)${#>?E~Cg?z)K^ z|LV-XA@RdvT@b?r+q2mWb^3)*DS86Pe%?vb)6VX@E(mLT9T2et_ditAg*NuwBAk;$eFY#YkaaLdY(lyNXEiPCG;;w%@sV0Zl{s~-D5JZPr z>vQwIrT$W;*6&Uv@V0imUdFN~`Ylf7yWrQKzn$T1NrsxmTS_gqLaMFPyI@qXrecyzX7JR?1+yi@?0uVY7ttG#mCiJE^ju7iGE7YLrv_ zN+Ds8(?WghxY_0Auo<@C^&#)z@_qcFo*iU9yoe7RpxJ+)dgHY_C5ky8@on$R!l16n zeE2)JGO}wk*}Bp%A;;OalNbG#EPCC1{3`ywX-)RMPO1hzf~C<7JZnF=e0)AHOi+cxY?k$x?jTq}exGh~}TB6i~dxJR-2S0-rYp_ z!I24^OnB->IeqU@E!V>HqD5c-mcO&UD<8~z`7-y-fFXqV{%y}*&8$)$+l5c6-*;}H zf)1c|kqh>XdhG*-T-E${zV2xZ>${X#W4wPGoQ^JkoAja+-#O~L1da6X)45d5KYhrI z;2GriWP0oXeHnJ-NZ*$!EO3IUs`2V!0y}VlA8AlXhLur8)x!QnoZ}UZF?zN zmG&PeVI#{mEKmMy4dbxS4@eC^MU9e!>D%kNxDDX-!^f75Beb1RrdC*wH?H9u@tbMW zJ5uZGFRX<8oE|dXeJI5vK>x-$ckl8`VA2s=t<-8Uz@15r$ zN5%EL_cWeFu{?GFl8Y6qux~ zd0l~c2fiF7(BHV8hEN$-{#B){S!s8DX+Xw_NhWvN&Q+#d@bl*TAI73-y@X5>3F0j0sYpEtX4qhq@u_3lxWKAg=G8 z*EwWBwW>LKN5K@8`N#Pv=XP%X2dCISlEeOtXeRphtR&D;E+U249DCO`xvop*CW?U9 z?R1x`BH1x=Vwy1Mo2GVdk*7Yf{6zX)U!d?r-n|nI=UKH4ODCBmLl;jZ)r&IJ7s}Ox zTl^}ouN`lzx#`+;Wl+$zoGPUet5}lXMZbwfcjifo12^tW+LKU!e%Bs%)J^(3K-jqC zA&f=k%U>Y)k`qr~D5Y#dR3VHw6Q{+6ps0IsOER*DpmfG`f#KIxZU1WLcj^2LoyxU& z$;pb0v;uJjXo@VB!-Ck7{ElrfWO3a8Se ztAA^xM9oQSL`s$!} z`IWn{z#H9SryE{!?l5i254ueP{T%3ozP{r=&10z~K5^vv?%!+xNCI!k$X;s^Pb?v8 zjJ+mj-{C4|@We!HBn`I4juBL#gIurw zd<8CfYRiSuxX7kNqui~IWdzd8HgfpAUlN*sIK(Xe2sc=&d1NrQO5uroe) zc0Y^i^*V%-{0{oG6Iy%exukSFZYXs+StF$_XMy8>didQ@$HhYcjO`qyFrNy2``jD*91N zPOX`s13&STi5UX+!Oim#{Z4x-Ts4tS_@t}rg{}|j*^;P2I6_T)vz`BZF9H@*Z7P0l z!(Q`FvJy;e(4uo3Yq}bsCf677@_L*AZc?`K4^f9bwbmAE*J96}zAQL(%IHqI-_Dmh z4OBUjyg9-NkwVZsegB&o*)yAC^4WJ^wUQtFVT0n0J8e(TlOY~#3HmL(v}(8&zuu2nK*$UpE@nDGTnQD?KtShT zFd`IjR}+pM|ks0tS&~gkH`@Sqg(sX2;MvW z;$-~>RFe|{29Svx1jES^{HP-tc@%M<9Ryvd9&Ccr+aB` z8C=8#@Duphrtiz|csEtny+jIKrP`4;O>=Ol!w#+!ql``_7JRO}wnu0)cq*YZu%~vF zK%~kHt>5!aNHXH;gH!OUGLxWuz>B^kOcdFAhA-5RX*{V2`ha`Gj7Ql622#K(;3Ro`YC!jXk%jV9-XVeA=UuvWTTlR$Ua5fVB_?@&33oJr4=4EjYsrepVv+e|l?Is% zRSUC_;P>F0*JLyz4)FnXE-{nUyW*20A3+gRU%7Pm9Q)`jutskFm}o%^+Ewr=8^5nJ z6`;q0#TFrrG%Ng~jXL=b&Xd7&ZqT&C_xSZS$ASXvLpuHf3AV4bE%V2ZQT3}H+#|(4 zIu=%%y&yZ}*}h5r0U`k`{#E#h(aTbWn;QRYh?WnEx=Va|#bX)f#e^gMlh)|$g|fbd z-u!uhE&p$;_yOz~`dW3N+x3khl)^sDo5jym0u_g|K781$hPnD@{vS`j$>T-8i>-#fKF^tLG$x1i5f9GEUWhgJ5L2^e z49E|4iu0TZiTD)%HP*FQWL0!T)cK9_LC>{;y%?9u_1|S96uh6r+yUAmN1zN3Q6wED ze&=;PFyO8Q^D`Y}z9E8lBikOV?b)I9c-eRquyH(%e{AGyZGy$hKHMQh!!ox26_efZ zkb%T3H*6cnDL_M|^MbkM?jHeEw|Q+-uZ_io`pxmp1K0y_LDwKSaoI7LSFUv^7v;?F zdX5~<1r+q6G<`0k6B@oQ3Av5D<_~^{rJYtPsNl0UyZxx%AJK!0&Eyl_cG>McR2i|( zmHO`nzsnuk$Pt?~5C5uQGWzJlI{zS#_|)%xpd-P2q)hQf<~^tBU+l!Zx=gEfD$d_j z$o2}#oO<$z$4*M%$Kp?zvb@}HQdyG#6A7N$+52R&mqdjh;IW(P|9FMcQ(28(KQ*J| zN~WNiLVg+#s^g8XlZ0OEl7^m^D1Bjqv0<%`=*h(Idn+G0o1MKn>@DN%nK(P(V#Ox2 z1N2&BQXEk{eVwy~VjK!t`Wj$Mz#_wYCQbC=1;akj8EfBxPRnBiT;hw~rhmwQLW2{p z<6CC-%hAY0tliUS)ohaDCrYFxvX^Q(o4_I==jM{ax|(|PE4QO>xV>!%xCl>3-}p;_ zleCaI(R%JQ>Me;n>qa)Ke<|y-n}KD@ow5iaYTgV5lP;%51b35Rn--Pp0=cda(~AB1jRG8hyauX1D!#XZV%WH!4N3T8_??&SVCW32 z<+zTXcAn=f;sXeu^cts~2#Nb~X>hEF-^hOW?C3SfARkOG^qYk1`-fxil)|4?*DvAP zELEhr=7MyCg#Qb}Ks>*Ggb-mn_&nYVE!UEx%pmzqY&TyGD!s!gePqjMl{0L ztP^p>f_5OTzWaR{J9@gT#@C&35D;8{?+1FW`NSi4mC86f$3+(HQn0RT0Q=WpIBPe1 zv06`Obt8at-;)DXU2P1E2Ym*&Zw$1+t{rqgn)lpW-^=?jM6?PU^>HvTbjyPutFYrJ z*q5k+FKb7`I493afAGafc?w3;Rzird66c;DeR`mJ!e|bp! zyztHsG8>v14RHjdHqR$gl*dZ^fVPP{cfm5b0RoJLit>yC^~NRq)>Fs%nqlzQ2bvM& z=Zhz5$A?t}{P=l(JcDl>3a>tYEZ5KT|rN?Z-^#CH_^OkI>g?*{3l(BXp81W(?)+Xd@GM#Z6I5QpZ4Rd&`&3VXPyt^ z$4eMrt45u)jX_R@)t3`ml%v4Gg4$C+BBmjNxU-t)Hr4s@nUe$`+1ey4_ad<<^Mi2n z*c{ns=mP2X<2?Bdwu&lp@r0mTeC+d1XjE0&K^QO*M=6f}b)h`**9y6I+)}v=8Wbqj zK<)DCkTRU#qK2k#WBH#;3A&!7d?L_t@C9Rj)HJ0L26lVQTa!Fb|W7?3UD|d zB_$J5C{vY816GSM%hK#1L$oWF&oV!5a4wI-z+!|9gOB6K9loCfMnVAbKCBV4q@tyg|Y$mCd$FBTOLL$&%!a#D3R-4 zNbeUz#;6fXJx_;v{un-V+-kvV;2;-u+OAn7g$kdXx9oF z4$KXh`5TUmkftmcCd!3S<&!UemrKsrPu+|j@cB+?W48S8>txuM_)P{ujaUygdHTmw zv2dOPp#=S0lTy00n5O)ybA;I!gT!o5A#EK#{B%E;_KuPUu~gM!MqjXC{dus3Ya$Hcx5ocqxrG2tpwlb zwSHNe9ZskJ249BwdOM8&MQFby@Y!rh1iu?(VVDk{A7sYo$F~~7N8vK~`u-^{|G;kJ z|7sdEMk1y%9e2M%ICqDNJO71a!P<|%^DdSA{+ArSwVO|vU!Uw%<4%6ld5c6!MA=Sx~9|rM0l2$!8cCe zYV#MOBJ&?vwkA-H2G z6h5B)P>g}$g+;1&|orwMm*2p?YzSpaUHy{H(Qfq(=-@9HFRv`UmuY!FE z7}tin0_{$`2bZ8%FRvjx<2c7g;5W}MFRh?)F>lRAd20@ATj7HQwI`NhFZ#-i6|zUY z(7W1RaA(bSrof&=^U7J$3R)4Qmo!X;_CrV1xflLkpN0M_?@$kHNPN0rEoenQXxl;Q zjOU*_4udkSEj9m~03zrtDq~GPK9W+|HKP45?oXKsB+U9Q9~SK%`GLTA5Y;r})_sdx zx#rtXkQok6Mc2CgI{mmpC_dZ3K)_j>!9PtiUor-C)^Zqz*?WE5wQfud1$P$DqI>F-E>Dp;fK;<)q$9`JnwC3Tv<;n zC^CM6ycKZKq@$B*4B#~|8c9Q;4IucS@kukhxgGk@92y_iHo<9ac`=N@(H)&u7(7jL zDNG>!%!Og0pMRYqePEN~M);ZTxmz1O62fC4SDbU8ybq(F7v1oNEM7<)ARzGE?hUoU>%wf;&qB)jm&4TNjchi7De-bQzH1*c2V2U;FEJM6y^RU;2&=_$D!Jh z2+Da$Fa&~zQHDYuIo0tS02&T~EN)lJvkEf!e;@wwp4(U|%KcAjbZD7VH~s>VtXp^bp_UOQ(@e4=URY8g$;1l zgRi;;sBb>@glap5En#99LtF&A9nB!TVCdPPihS9ivBsl6J3_d@Kw62o7_?G=qU*FE z-|^4Y>UK)@{&gv0lW*iD1rYK4cf6z!f+32}>}+=vw7j@KWhRiQ1Pi{gpxle4g08x> z>vq6kWD%764Smp)7=@eNapU^?tJd=D)E8lyZCewU9pU>CS+TPj1b zIfv*<+jlkN7k4>l86;)+nm>Q>a@qf+hh)hTc)375F2LGpb`?EJu>hO>hOiN#f%FHr z(pBhD8T3af^T|^X`~-RKI0c4F9@>J0j7K7Pyn$XeNYgwVfnd1fkpc453tvfjXk9R< zy#@#yDnV#Lf6dfpusYSQL(o29>0M;_AJe4IIZsLpxJ%ljOG_N{Xs@0yXmpacFP_H{ z55p%;ECh6hJ@Y$5sGuast_BxQf-#}@lifrP#Vp+^(#2m2iKCqM5{$nt1VVv*@z36l>tgP)%#5x$XUTM_>`S8T+KC3&#U z#6v(%38RRdi|n=G%8T;+*sx;_n;l(8`qWCUZC_aA|I92R;-BsR-1Gst%_2V;3bagp#jo^?oD;{gRW|LK%hitWdm4f@BX z{Qj%W7i3V7%6tnJSJ)ua^4KS?sg!n>ZASW)v=r?d|J68oK&tkM^jnWp;A{Op9^xg1 z&x&*psI=(x=_+TV0Zoh=naSoqh2alzVmB$48_O#-{D9Ux4C)HlxL3dj%Jtk!Az$CU z0a?ax>sq+Fu@d*LbixSNpLFqKby|eo_v1*?1IJqY#l~%nSp-G^{j0DiW2ntV7^1c+ zU^2F0M+IvGj}(xsiE2%kN5b}SMQUWBX?lx?JLJsXA<8FX=$8q~oB zFv>#wI9B=$OI?W%PvltIaU00N?ZKw;gU{je6XC9_`$&g2O=RGZv9gf<=<#qEo}yuK zIvYnX=D<}P?N029;~mT3GA;)j=p49lYu~!5eErT<@;dy;(=8|sT58btttOYHzu~ws zu&^*jr^`AD-YRHUfj-*>uH|~|+g|F`sV39lI&KNrV&*JdE;$fZ zEQ2e~2mf<|eD~fp@M6&oY7HCFa~G7NfGoaXp8MZvGUdCwr3VBlQ~sPGZ@u%QoCEt2 z&%uo+13i!E8zsh-NS~}?0^6I@&qKChbccJ$L{r@La?{YJOFQ zpfwMI1kNS4HzgkmL%%Z!nkOxq*Td1h7P1`-9ajjBsA)YxeKxdMf6`D${u8_+1mLw` z2dFaKpE>>q3obNX+U@7-M}%fSC4&L_%C<789TA<(l~DR0H!}P0o9a zW6rCAxsJlST)N4%^<^R=irIcD`nfja2QsH|o2c>p{U<}Xma2t*RII@7papQT6zMOZ zWqp5;|206X%}M?^C>&? zW`9gG1n@DmSR^b{ID;(+-+;j+6-ZF9jIl+YIsS!PXM$>efI}#^dF4jiHDu(Ziyu_w zE<_4~Mp2p7rwt?Fw;uz8W<}i}k zsv5j#;Tfh@0{2z>5!VYd1C5FKz`1XHj@&z8nfwob_l{d8zrx-GS9(jJeZgR~8jViG z;Bwt>C}1Fba{f8KmO~$09aeX8{F=V90V^*?C^HQSGnhzPV>cWTjU$gtvp8Y6pS6dY zX+J0&5ELdTaQG~7>`#Snb?KfNi@4Vs z-1jHB^Qu1b$Zh{nAM%5K7%#iDX)I6Nb*kEO7ztyQ%TZr>xc5vM;+u#Ejg(z_<^eDw zxlH=Pw#D9Xw|UpqM=AVMuYV_-=)x2pL9ROIAmP!I=N>py?tl6V)rh#{tOL~TCy$5x zF>aRjD^j&<7t+aPI2OXA9}oZMM7bOf&DcqEVSl12+;+mqB*Lh1v-9!AAsg2%g{w6Z z2o}5&eOT+)tuD{sd%9e6S3g;`W}V!6WgqF-u9^HfVUBzaeo}kFs_=0cw|sxhB)tDo z#2}q6J|~u{*yzM*_avz^n!O%Eqm2|{GPoh>;>mtVln%%M*e9|y@U=aUn8LQ7!H>VM zCCER%%+{=S){(tCRA7{vJoMh9FGSEok`e{Wch8K2aB=N~X83b!w2rdI=fb=74vpl4 zXD`r&Fptz(=lGgjzY+eum&2+wZ1TKm!dRKXN7EVnkVjDtZteU- zf2jLZ9``)aSWT2?Ebxbm#jVV)MaAdbUmkPUbN8Jg`@qmTkA3Q~QB=&~$)mzFlKu^j z8o&7V4>ApQxUv##2#VT%LG*JjZq%Tb41k@o^;k0={?Er`Io!jm8&E?gtzeALn_R4i zE>=X z=VkcFzv6goZI(v+){j*56Q)A0_bu5ch=qyLBsK_I%pc231W#DM+~UYC4gB&r{#^l@ z=ebzFl*7i4&9NP>pt&)2E9v;>l`z~k+r~KtpC&%gf$utI+|>5C@id+g2!Xa{XcMA> z0}pvaK>Yu3-Ws_OZaj~Hd(Jc9zO&!_HBudW%e&gvl%`ePdz>Ft=0Kxi@WQon6yWY` zTU#!GTh7HeVzF<7%JQ$4&e)~3{VlwDTn$0R(M_`DBzWd{cP@^!V|>zu=$l>Z$@cKz zap$-k83K`pB}YRGVG0a2{(?9c zv~;~$6<=-`%<6eL46?^x{94+;h~yc^?jdhIcCKu|#7sA#3_rpZ=rwou(-(;vr$in% zwK~r!1gb_I40M|rJP(?#7`#}tE~P(D_~nRUF0?ZK@8;v>{u_^rE!-Y``5Wo`$uKpF zISn2>F23b$dHl|k<;>&v)W1#mV#vk&>NV@-YHa+6Q}Y0HTAjK84EV%;-TTx)*{j=* z(j9gqzVCO9+K8Yuo}vHOqvh=ne}T$Cc_@y!yHvG`4Ih^#92fHJH`R+6Xy1ZCHxU}s zTc9)@u-8s9;I1JsXI%NR^y9opO@kD{Z$A$L+rxWzmdnpRK<)i}jRpT)2!NO5tj@RCwkmym#*4#0 zej%w{tEx0_T1SlnyA_3v25T|?T9WM-mwt!u=HYlMlc!?zLnVmo1AAX4$4FeVDhJ0X zA;6;mI96vqP@^zkL7Ewx6W@AO^!d+qGJ|h7n;hMU^BP&35aYQGgw#(P03t)c?usIp z5I$+(#$|iV11+|zCuq9=X)~;QRA8}W#r5e_&p+?y2)vgX^=U=O(#Ajt?z<+H9?KFpW+>ZD_$-M&SW({S~ zzTIcnVC2`@$2AM8{~NG@4=9TOCQ2G|qOx@IN)sQ?A%$8r@DH1KCSq_cx*nRqfPxwZ zvvpukEk~hy{}S8Qd+wb~_(b?F-&N>-IVRmdVj7M+wCQT428ZGWS8WOL?{n743-Fe4 zQLCEr+O7@cI=I`cRjC||Si)fdy1>0AX{2GxyC*M~-Re|=2aT#StX3mg01b#;V4RZA zJ%b7pfG`NhG~SuDN>1Oty1dr4zMRr@jVy!~$)OFgPROnx@U`)~pGDyd#UyW7+n}df=ka84oU{F5w>JYf?93!89`==bVcRT6c zxuq<^hW%T>^#2-P0x^2kU??{5AAz1f;exZzL7k*MG&U$qnKFHm^dB@zMu4_*<#D?K z|2PC01K?tG{L}?##|%p7Id`RPe7&b*df(MQ@Fhoh? zmlJ`rXHK7?XTi*F(xJ>(Nz6v8su&htl#IunAJ7fQ^mS=U=nH*X~E|Bx_fK zXC|G&7*GaK0t+5+3~C52VHU~=WBFP@NM;0OA#ey6t1^SXwenA2M!3z@YQ?MX={QN_ zr%o-*v#5kap`c*H%V6zFJU^bSp0dSv=Z`5M*ze?rU^@pwOU#d)fA}KbX~#zLFf`U^ zX!u%qKKc}Mqb}rw35s7D)s-;jdhHyK;|24P_7w~N?Xd`Dc=O|7a`vS!ID0$H08SoZ zXP_yOip9zUVIAXKIr zW6?Uxmj8}6|F@*tCqL@os7eL$xCo(2byyoewu57<;`5FgbuOkhIrv;Cvr(p>AOjc! zjiJRNS{sWuFTNY+d><8!{tP~EdyId|$1H3PHpzquV`O;_>~HZo)Vu9|{CF(e#z~N2 zNrSa3i~V?E@U2dr1Aut`jc>}wpAJ_~XdJSYG4D_q@z|ZGNM~r2UU$)9a@kF9V%|aj zFt_N;&&FxPidVqfyy4~_H&4apAM9ZGkL@ZxB3u)?afZww-(7 zh|l%%1bpCJfd07GpxYi(&(VYr%qNMCO#heN<`|?9f%vYBd8zSpWd(S-7=r928WNXmHb5kiaF(5A!U>G7d9_5YA%Je3v#@ zH#~ul2XzHJIXv~;mncFm27*eZFriT`Yxpmd+@u9z0s}37zukAJo2Uqj3C-naVY17W zPvD8;lL7F?!LRuoMEpaX!VCu5n|R>iPf;hP0kfgO2M@xH2mYL?+6q~L1_2kxKMk8G zKf!RM))5FQKK%68SiNIm*MTn>Z3hF8UjR*2PI-g2Cr_Ct5A$dRjoV@H!$*v3A9xA_ z9=!hv>f{T?>l2wuAqb6RJ_8L9Ju-oXwZ353FVJcIpE+l7&@W8zfd&Wr%SHdouMc4a zbwlEZ`jq~lEq&1hw~QcPLbdwK!J{d1#}kFe5Af8CP&!#50>PQKtL5>U&iFAryA}#x zzuZ-kY_E^RPbV~JUR$ny`Q&s!GcXwrxcYD`Pn2I4__W=@BYe?K5NS#$wCUDdZhZF)fJS?i4t56S@5%vg zSbv0u!Sq2(u)g6|#sz;AmBsis{#*N&=9S*amg55#zKXbP%zqz2Q?(W5st2JlyWbvd zq&(&sYM^$4%XfMzqxez|%WcjK!G8abFNv{fe5y{KlByHiY zy&LMN3!(U5GZ)Did>osBtIpF{i_#_hOst7l(!&~_Rq|N{9caG`=EY8MPft4&JhnRu zw5{P6bFO!>)@}|X>&-F${yt_lj*QfhebH}zC>lL+whSLNUDiXOtO91O87P>W>tH_S zoZlAi?&mLDq4V-|%;N%22ke_`A6n2jCa}-$?WIkNhC)~NKVvVzqcIv13;?@N{x~6Q zqWlEt3E>KZPdjjjoZMZmyZi_xahv$TxE?utkxatT2i-5}-EkXdZl-!F|vTu;uWd zNy}ib4^$v?PY4_igg1;qa1Z+E%+)xq0RxsOtBJ9FDl{B6AifF$j4FUVe}|f~8sqD1 z9M{0^jKfiuL-29Kjy1LQ90(N{fGW#D*G*HF%m2+-DXk%}sgBH9(5RSPr*%Axm;;h#kHoD7V`&Bd)b60 z4IQ)Dn(I#fb{%`%gB^wO(|+8qB@w>C#;%-*sD>2@dJYdl0NxP(8N9#YHWV#mJrG>z z4df4SsqNt7tL6gFbVq`2>=Wf<@}+dv4_Se5MDwt4#&a8+czrm=l`d}T3C9e=R^ek5 zAGFT=WI231iRBw2W;RMveCx%G0$S$TCi&D%6va=aF!opx)Ou6tHJqr z7AH(;;D>c0W{ucY8%I9+To)Q$6fo1xv3}tK3>V^EI<=H1aFneFZ0}g0D)e(WgMG_= zAL`eIfp1?WO(7^?;88sOU3AM^vUtfVdGoPz;C*Pi+S8$tx%H^C$MN^eZ&(Q51VhMI zpVtc>kHRB~qp_gA{PuU{+waHff;t!Qr{EYJZSzoQVSyWlSNaW=s{y;76MGQ$?6!jp z{p3b9uxxo;q@Q->OY#SV9VYO$GP}mHB*>*y7!6C@%;*$v;UqZ9bq%FSs*Ph2eD6=3``0C9ob)M~d_&sVo{f5g9mzyp6>e;P7(Q99xa~a| z3C&(=rCof+e)8{s^^%YA5$ga5BkI8jIs*m9pA8-(|GNG)SpXpmcW4y;9&tz)dGMCw zr9Fhn7N{Nlzo)*CN8p8yUyV60w}TMm#rw~Yy>Uv5hdsHoC+ej0qul->CKA4y%x3?ru<=$fw3V zIqBoC#d~)xv?KT&QHbH=Q#&RHWtyuS71H6_U(KC3yb;7U0{0rqfo+CZT+XPp&)#EN2v#C z3JrIbRLH+uEvcF#^>D(Zw9|Fi6*6vr22N(C8w}U4v#jxzRy1nu+BKa%6ovlaxzOrU z;gb#@HW5AP;HT;9rRvTD32Sh{+OezUr@9uUeZRhR@Ec&t2NI7zetlQ<)WpSc1R023Sy6~g*r-`Wy;4vR(fg>~ zcxo17Q27uS~|#KN=Ul<+3AmV`6H=#&^3Ce@ni9)<3(FZe2#=_)25% zgN2o+zWTjR4Vfv;a3C26R1n68CKyhe`}uKnhE%NOZUq_zx!zxG*kU*Z^Bu!jXxmcg z>P~=Vsco~iIKD`R5bojYz$VU}FuvXeS`(b#XnTTlsoGG(rkY2JpM((PA82p-?4>#{|LgkK z<@;YJ%Rb#(%Ue&JCyk*ML2X{cJ>jsfG94c6uDJa@xerHvDb(%LtD~HAat~XLpRX)8MI`* zOn^;?ju0&T+OvuLxMxEd*|V`+ha(u9FxKyb-H05VrC5t9UW5>W;o**TWkiog^5b3& zWpIzivI7JcKQ3A;Z$nFjb;tV8c0hx+hqf4J`=rYF#5jdAPQRR54axaO`W^p5;RUh~ zLjI+LPx$)K#IL_K+K}J^i)yqvR6he}$v_K!+;Nzbx*Lw8%XRcpUVV}RU#HS#$4%{h!*Y{feDo6nZ zXYA~%m8Ahx{uw4sTcDf$4LkydmCLy&?;~w-q~def;pqeWIGgZQkaigcLOAg~Tp?e0 zYEOCotsmr#mj??M`p06yOSi*MK8~+?STOIkM{BK@c7u*O?`awF`(Icb<0TB(>n}V+ z)~??mr(X7gd=5bbbu3?ltK_AyCv+LSB3*ti{;qjVxIw6oFR?tz!G-ZAe#yh!Le=Fn zj@wgeM+`nMf-vP+Eb4#$VVo|;Cqk|I6MUiUgfrt+p`o#A746c5_sze5B-X#jO1$^u zml>X24a|qJJiGd3hG*AAFqUW6C_WdLmH=XTwO;9hxL#czB* zT?TyJ@yVClARPT4H{dwtL4)i4U%FT~|Bt^iST2XwmkK}ee)tob0B^uW{nh6kByYU` zv%HBp>>3Cs4ub%rDUL|Yg-tQGdm;rC2ybF@zX@{|>E+zZzm51(+_l5@Dlqr~f`tEr z5S4D}`+YDJ-a@iu4;*o$mMMX)PkD3$0J?haxf2Y@cT%q*N1gkWjK$o_%IPug^Vcs| zA@F&p^pv|{kloGoBI9u+`3TJ8^Lg|FnM<&rxbKEzadf4v{IA02O4~Jxz3TNffe1o@gOGn|XJeqItR&MDioRvrO4c^Kv9fh; z3=d26If*_$$;z$2$;vI?t_E-QTRK^}<=fTZ6X9E#yW%SV)pD_L;TJYt?4p44%KguN zDQ{w7JrfJea10U zel)(>RT~U`d>%&2t<3W6S}OQxj2j7SlWkZ$)-EDEzrG#6gr*S;KMl|fNQMIia)9;} z?1-z4ExU5C7BqfiV#< z4b)B09%uv&F$xT*-NhqnocppckMNks`_KrxdQ2~!19!pEg|EIIB|~6GjRJ{-_h~P$ zzW%N3(6*WMLY#&y2Mqqx+4~{|K__Xuf`SbOda3*L?W<+rkTGhz;$~=ptwFnb>;zgB zF}@I(0*T$7u(uy-cR_4!!paihg zhWKwOy}cz~&eqa2)f8K%!#B0WHR1+-0V2X3xtPh$soFKGr1h`r%fmEpsIqhuDe z(6XSxM!3)5QEn78LC81qE7n;rX7}B$gt8FpCn6<1et2Aip0u_}4GFl%+zy^8W~|4y z9b-9{#}DxSL|>;nx^Qh>n(1suhtpMn|+XvjY&v`NfAkfj_W z4GhLViZ~rcYW!}{YQZ+C#6p<~Bq)q%0E25&AmL<4)(3xZ`EbedqxB?%OP0T_;VW~! zAM0Pb{r6BcTGIHGfYLyw1*_lE(W{kj7Wy%Z(8X3JWH_+3aDX0xxN%*vVhu>PrzifU z!@gLFT?^`8QJ+7nx48JMhv%r5E?Xme9DT1E-=zTIm_xhB!?*rJk8#j2;!Jq{p*#=yJ+9#(@{xJlX*wy7G|1B>6i-b?4ASAy zX^dZc4h<#lS`2(UDe%&JKgw^vPlvH@%xRc+*5OO+JlK!;4cb;S;U=9PF{lm4`Hu7B zatKRVP6OfCT}yQcR%y3pHVpjEg2sd91DZmDb?^Z87wVu;wrQi9dW_+17(Ayy;>07n z$*Zpok={5CQ44bzk9y36!ABJi1f68xE2908IKsx`W!GJJs2mBeY5b#|oe?+&@hk)j zulM~~=ga^N7to9U_RNpto(;B#!3iU{HFy8mUEXuD#otKB z*ragyV1RP+wJ`Xu4ksK)jE@QtlC`fiVeqg`dfw1=12aKLc|2=w1UP)wQvrGSj-kda zV{Idk{Q`PGKjYLEadZ(cRr?OBaQLi~!DwJS*1pEW_Q_MfeNH=_Va&56L%1_6Vy)~5 z2`wnldT-0-4diEfvhYF_KUrPM4B$n}|4#VEHown)+{zPOqkJ=%41WGGMc(A$WnLH3 z_9l37r3&ftFI63xvJ3}`%7N(k7RdHvzD<=^M^lDSxT|KF3JOCE$340;Y2*QWtT4@AC~3VuywIge7fuZ)U< zA96K5uq|CdK*549pET*1VoNa^w4M#|0GTFTi@sh)AZhU$vp%ASOK3Ehb zq)UHM>dxS7`yAkxX1X1pMc3^7G?^qMD@k|!rH#)D83Kflz8od}`~DPq+2BNjjSB?} zG@?#0Zgws37{?kMnXs?{UtQNgYm4je@}AL1ML~aQ(}6*4dZE5AU`JvOybJY&;IutF zUmOLk2Znd)?Tr%?w3{ukRT?grH4=6R)Z&zPBpn8D!EW>fdrY8 zZrG)5lQ>XHTY|f#`NnVqilqUE=g_;84q{8dr*t}xhKDFFiZX*~ya@E=!O4$l_9F;s z(+_x}(LkC`qNq#VaZ-#9Yew|;!9W?Z*v=d47n(_-Q|GIO*cY;DXL((SjT18~V7XoriZm_*vC|FFt)gH8T0r zh$%7@M%}0yIc3H|>4=R#k6b(li}QkG5XueA*T=&11&>|u9CDoAp~uubo%F(ag++O2 zcP2J479PT4TUM-fUk|Z3ZvK0@tLE*7_P>=c>zv z|J)yz?|aKphjfx#9)OWceaVGw#WorqJ+4j1%@|(-LR_v<6@Sm8WrT|6rAkN3ii^+s zG(aHH9_|9^!mlVHA8U$INe1U{%YhozD?8V^a8F6E5B_-a$GjgWvuyk(gEtr}PZ!_a z2&CsNL zD&GENxcv8jAISZ%8L=H~!rXFIZ#nm*9y<5E{OVwbgkKGqSEoWdgJJhBEwN6<`jPV= z=Udddd*>arj2=BGw6tJbEaQ;Pk(!2}CI^~<^I)K}4cwv*_-3>WkZ<}V<<8{ghCzK zGjU>0Zo|(K7ntKXZG5$H5#F`p;XAZ&vTo~%O0UQ}*YH1p0+VXK_h@}C*xFYe2 zkS@Lfmj*tC5InDa`sw>hJ$&WjS2GS=4mqllt$_O6IDA3-^^a+?1`F0KU38K1c=|O1 zKe7G>8A>x@fkLdavEbf+&o+>6lvg#goE59ppZz;fvm>&btOI0R44*j~cTFn*qsD*D zFc?cj(mp<498{M+`?P}~-L4?7ygyV{!04Nv6-)!4AjN6FOz?64T5eZg)!)4?Wuh4l zZ1EiE03&F+0P`sI=K^Ny^T$kYPKd(zX+OR>@JXlApg)diCo8~gi-qW&FyzK_&s>P! zf75Yt$f=KD&Rrv4{V-mRfeX0np-%iGjIND=`%cz$5RQ7h{rGvh;NS10|C7n1!bNY; z61xfhcnoqGswO>p{2cXuu``4}v?PD~|9zsC@Uvl5^vSzUmg6CS_~h$9D10?-?Wk72N^c```G{{RZ;L%>1f&J#%Fg( z6E`>=@S!4*`!G8bG8`x~4pf5ug;qGW@jX22M4u5q?Z=I{XkMyxw2XB`^O)9;RMr5m z!SoY_Ws#p}8!&&i;zy$8&=B|z_Gr#NVK2GilEdZ9iF0HLw8+Xqkb4!p1hvL|IRnDg z;m{H*R|(&Cp;7VH$HU}2c&#`eu0pBZ@ZP7xWhHD#(1kmhpix}hscFzA1F`XeTw8@?)?Hr zjt6`@8eT>q5Jvll;qME2S%MJfoPX>MPf5+NhKKTgn*1lNAyrI;A>I6f;FJ{n=sqf} zew&KzTBnlK!Pv;bdx7_s8`MpD6WlwG_n&;QofbP!TMg7oaJS0szbsyo_*@|rr~PdS zpUaZ2H7ZK25;SPZds(Ie3AzrdiE~@aF(FWmiop#Wjp|SIp|rHYxwIRs>EK(oaq{-9{^-@m=OQ{AQv3g0cBH!A>yL%^a?nF#rOASi&%16f zlKA{&*lwJZ6#WIYPns~pVdCF*CDF+_ohjMcIncg!V=0g46Vp@dq4%Q544yw^#^)#R zc|2U%<8$PvAhG}eKmbWZK~(bMJA)b^ey2!RR{07tADjG}?*ACp(a%$taaZ8@#=Q^s zmsk4@m6Q5(m!7+|mak!O?K6Beqxv#!Pw?yGt1yE3(=U_N?u4F0W_{sAgEn2le_v7X zx(M12w?W(CwTI4<|6G2A^w_PH+Jx8*YR)voMkAZ|!sr||c zwHoK4Lm;f}jpG!Ye|~@=$kr_zr~sF1*gGHnOcpO#h7V@2j{`OAVWa+nuylqBQhEI2 z!-2oYO^U89(6}i}k6X|~2L%|%Lh$>|yZ^=qxashkQ!{ql<2Bfypw@#5UO|`I5yLT! z;UlN$QM#)!S99L}7+PiYJaqU0yTC?5P5BWTWi(Pu4P(`cGhBUtxp$W>YTY?~mv{fu z1Ld%Nca{V8Y%4?hT?^Nz6Qm*RXizZCaNpBk%3K)6oCocTXWsfwJtFme`h2*3{#|Wu z9DRs8rouTtUH)suh4_iyzjRP3ysd)$2E9gYtDz+fTeiosjh~jT(?^o_9Qd~3d!ARu z`0E4``UZjKfy;MRmrOw6-ccoq&sNwz^{6N$VVu7OwNDrqwnlu{$0+?9aR&~p55wOj z9LiK6K^1r!0~-UWEoNNp3U8GgY_4bi!q?(fuD8{Gf=qXd4I*4%TaI79q3TdAA$$q~ z)ULu&?=B7)1Vs9;PE_N->1%(KIc3s!!XHm;!=<@bJ)`IwLYapALa^A)|--~HM6`o+My zIG5fFdlMUJ4+76S)teVAT7fTUFbK+t5`Qb9<;FbnG7M-H+HP-s^b71+te0CZJ6!ha zx}%<*<^q23(1~)#qo2yqVUr{aUn1vX;rowEpI3Vk`#>OGNe>@AU2l1S={`T{;1h;If`#xj z!MT9*9T$XbgCSA-%%`Ux+J0EQW`p8uCy-B@ITN9!d)Pl8lm9|vVE?_^>KAsp1Et{L zfoBIv-~PYqaSYZ&Ve4AVe{X*DtF&lZ4?=;-^2fMYuvYWpx4btsb>*AU0f#WqL9m-*HwP&rQ>rPnTi5EX7{owDI>R+jXPZW<9a1BkCFyFBz z6}E#jh|<4-bm|>saf(>#D>2kz9GU}I!I2TtL zFHxLI(%Z)&6bKf`AgY>SfnA;c?NM%ZW(6-5!V)ZRJ#12-?P_p$#Eey(>@n#X96+=i zJXev2%E;fR>B6fh&mTKx&)}ATPpyHf zI7iL-ZVhee7;)YmU>Uy>QW(rHjH@9W;6jvY$eeU)L!+!Y+`V!B;o0ORT*P7llm#5t zR{`@EU4HUhG#Bh_f^IgcNx?MpnP>Bt&EJ)vjnWtkMOw38xMZasquYRuL^%qc1NdBi zAw;?v-WOzjWmsEX6Kx9=C|)S;ZiSTM?(SA7PALV7J3$g$in}`$iWhfxmlk(-2@XlP zdB6Mb-hU_Od3LhT-e)E=Yt~*@Ft_6H{aXUwW`tD**?u+p(!OHyX7xE*0g=23I+)gqcjZV zP*?MUq25bx3uSw8$x5+av-AEEP~SzpCMH+>D|Rgac3R)@RzC=Tl_HQ;E$}kkVS_xb zdE?Nt(?7QrZ_N>mY-H=wa*S4`-ojcEmK$wUh`LwBF)p8MV=Rt4=tKL;9LvpxY8Pz? z_4Y^UrWx6>>6@*xa&g?TZH(iYU{~@30n~<`P{CHR`LYQ~;#i5f#6cu<5t7=x&M8#3 zua(NkSttH&Z+YTrW~DqMv&aRfGGCi-J3DMGH@@bn&E)^hZaZHcwl!N^8z|+y{24=N zyn)JIho`q)WvBH$$^?qhoBFYqG(LZqKk(aUYIDNOF=B+}niGf1cZP>8#vS~FDa z!lmWnpsC5^8y+S-@h}4Y6x!ZYBHcjs<|7(UFn&YsodIw*r{f{1>TJu!@_N*2s9Jv= z7!lv4`cIaHcr>i<_~{GtorbhqKMA)@%##_M44yI)V4M&4Innj|`olnd)j6T{hc{_T zDnQg0tV_^&_VQ#gyUM_C3@UO9HMmrM_~f-b(>CJpQK5h2S-m;cXLq1_?_ewOs@J`K z?=^f_x@|OFz)*qS%Qt-Kjyp~T7fyA+dIi}u{3%7O_K=zbt|=4bAN=aQ{r3^VR(x%QGdp^jXd4qzV-wg#F|o8>w7H!W2sPk5lvL zM8JHHY{x_h{3Z0by|rafd77TpL%ex-HF$u&fvjG{ztC1hO$R!ff*cS)R1kGtk2-0A zu6Ec>@Viv}P{97Ry-XWcMeY*HK{6`_C7)Tm2y)~FsT=hWUxUNFtY-P^4=V*8K|zLx zKe_|cdrd2`1dVj6AA^V#$T;e=kr_-1fO0nm9?b zy7!lCD@{AHLnHmoN`~8OEHTcs)ItJGUZAd_-k)u7^O64BXby*G`|B$AoiHD-E{;aW z>&^Gp%qsch>iF2NrS!pqgbo^cdDl$w;bATKky^J|JXCias|-Ve@9zUXN{Y{0aH|C% zJAdJid^k9CgZ>^?Yukmd^7(C8T>a36Z#Bz~%>IYX1e-*jC~4AOi`cm5Vs z#>g49X^i#V)KhwFJ9XZbed|Q1>-(QVBB;Q%7DsE+l*Fa8k&$x!Xl*zDa`L)9T^>eJ z9GQVU{58=<%Th^~E!D=Rniwwr346`R%i&{WzS1hT9Nn1ob6#K>;XU{YpQPrLH852R z`@#RbQ`vP`kR_hT22*)N=dqaQQ2_lt&iT?hZ*WsT$fsTt8k^IGcWmXOgnbE=C$SUy z&5woJ;l&U=3XPi7MHS}K-yy&vdlO=i$)b3(yn=pY^n?@5n|?>%l>zkI2~pwvJc zdtm!+$T?-;KF4vwb)$PqpK`&VMPwI)K|hR*=Q}x&7Jp*?9Gh%;$*?)& zHh;ho;(DnV_tt_u%uD^eLw;&8+5Q=J#}}1@CrmKrly@p1F;QgfY)5}5QFtUXRjv7L z=N}kUFN$*KrK!-ovJpj1x^oDpX+orb$r*G3L2;2#gS8;L-!k3B?=FAgvs%y zn!cS)w%f>4`O$g0rWpC-Z}86ycoT>?j>}hQKTRX;^ys^Oaef;Fsgf9uy`TkZ;<87j zyaMT`t1C&|140>ZgsEhLdn;s6>qv0 zC^$IG?2g*<35s-MGc9i(mX=p%4#XIJsJu(Om&{NZhlonohib6o*U??1?%SJ;}k+Ecr=8M$2>mK8uZY-8j1@xJYDm9O?Z zd&YqghyPvu%)OWucEaiCHIiV@A*{{vzc4Fqf0 zV?6%_j~T2zFdp?IUOC2m{*3H=@!jDRE^z40`}aFWrlh@hU42MxG$!9h`Nh$!4Fga= zYfq#)W2(iSPKlpN29)QbOEIMP0IW%5NQe|2=AdIMY0S|Xe+OqANz7p6!4{d{lyzGJ zvCrA~%b+`Q=>bSc#9kqn3IylKfpr&oxx^aVn?GYN49x3fZMzO1PQ#+F0+&6Vu3*d^ zj3JKDLZ*4D2KL@d>m!Ok--Ip6j-^DaY{SlOS5p!xLnab|eB)8^<~H!f{lSAXK5t5Q z+JEL)j0)4@pOB~auEv*VY9J<<2m4|a0!k*ndxl@o2>;v;gWIERgm7pR zQQ&KC7RBVITRgVK$T`Q2W#6qe>OEHyFT=2>!I%ur>P;^++><{DYL3@~sE!NAWjT9*5<4VjQdbBSum(is6>R!`ZijqNXAtEhrh|YkY zHACk_96Vtc4=eu8%b^eI7koOHud?QwV z*Nz`LRZ%?W1CoBg0)>J@$ixLYrK%0jHs3M*w}q<|ho~HX2lelF&5b@WWWCtAV1;ws zK+}701r9h#;e^|;^ftvKL_L>}N3J0Y!1KE1~$B@sz8nDSZ z!OzEz{^0)dIbBu~^EqHcC)5|GvaYumi&<&tm3o)F5_skF;PH!^s;pyAsuVKx@a2b1 z3r@wOVa@Yb8LLHPv)kwXS5ZCu$$GT&`myYCDvIum}fF2U+~0T`z-d$ zbARs|@xrBu@6l+V@F@Pd7&<{0Y3ztV{Rcs@FIiX{4LeQh8Ah4?bCm=jW$Ik}nipAn z@t+shf=c4{Lw2T&$}!gZLPNa6O%rr+dFClX*gs0EJ(@_FSkIXfXrY*4M9SN9GoR4n zNjA*R$STL2IK-C`d-8A7i?MJpU|aQg`Zay4RMu_C^gzRkm1?ku2|8 zc-(@dj;6UZPYR>_U&DLl0XnfaoSnXm^;{zPA)?&|80~}e9@%zTTe2%APWFHSDpVc8tmn~g4Vb6>+f@dl6buh|_J=k~pm zaO|%ljm{UQAC<~XOjb(|G_ieu5FP~m1afYOakk#4zD3Hq49GRK$4w#;ht^QUUhqBr z2OTscl=OI+9!P(}I5A*vum120wVOBcjB$$okv#f`CC7kSnXk6`+s~C0(x*RCF5|IO zqa^a1xqN8NSMNB~a%r3S7kiNs8VldKX#Trdk1)B`fZSIb?99+E;I0-z-!dkcl>&=%4)w7e%4sH6VKB&oxLMBGK63w_uSwvU4eY)}-p0 z11+S)=qZSAq$lx;lAd6v&p~S=ZYZ-4ftPH7GrCC)(Z^Y2v(UB0=);>guY5{W_$F$VaopOPax*B zs*#!HV79eM^dglX+^6*l&SC=cl_-u-=Y|^!b?Z8WO@yA&pVDYJu(qBNyXS^LCSrb9(Prizxgy_qcRQ{QEt)FLy}`0VQv}m zXJ-t1sw!jvcV%-kEY{0w01ur8V%GnO7|_t}PF{>zFGNe{{spBd7^;BQm65_xb8*LFzjR{ppW4 zcudf@vD8?8X4HZ6ae4<89`@2ZTj>a1dY7+n5VX+K^A>V-eF0`YjkrXS0?)S8nA0Ab zsw>!LZi%cgQCwfH#M-KH?SP>!eRb@#Fo>5*D&)V34-AwXB*r+6EmJvYVB&zv-$+~0 zAgU=}{@cnQeR9!dKyO!tn@98I>JfmtOtq<6yFIqJW-hEf@adwD>F3MZRWdV4tVq>N zP0k!X^yO|6St9aydB@5#U@c_L(%kciG6jcDwI+ZLgN+5fQQ^bPqB31ZKZ(z{PegBVY^~*MaJ|r=_LT+sBz{jqhzI%|Oc>pNGZ`uX$(TODE#+tN*HP<# zo`4dF`})OZJy)Mm{Dun|aMnGM{8F#wU0Q;O)e3Dng?m+OFX#Q0bpEYF2?%`x#!svi z#p2N}r3yZ&GWyy@vj-T_`#%$*sxQF_?h)$N@L?$Y&(MTB@J5P+mSUd)xaF2a$ZUxa z;!13HY8~!P{e&Jirf4ESX*r-s+TXXw0LbF3y)4G+-Ev7FR+InYtc8k(k;=V5OTKF! z9t({~2EX4cBRMGUEJn3haOu49K=^di4SYtW8im&l$Qw~UYshM?-Rt`gSu|6=X3css?IeO zAP*`ZVDbVzw6Y))#y@j-XeV@R2lvz5p`SxdZnexnLxO=FLaT#lZ&HfcF=0v5t&5H8U zi^<8$Z+eTORQJpU^l<~T|J1lVVDrUfjk}w=KE}KK4g9^I%Q4m#aLE!~2k1!50eTP; zx^}_)=!GVm4{;n0G~MQ%pVPoB&y&w5HYbf|IwOOaH=>h@YGu&AAsYZtMf#|Bju&Td zP5m!xfG=&$y#u}VX19>R?Vtgh%P;$3KSoe3{JZzdsI#uvlP5>@qfeJ|GwLpMr>B-! z{bfadAvVrX8uo#%#;Gg9ZRs9tix`7(Yn@}%HLKI&IFNedPwfm-?i`K)9KAN(6Q%g{ zYNLdHwg28VOC!+qe3T#J7CqBG+)CQA<5sB=DA09)RbJpT4^kornor4r7P@U33h7TB ze{AzyXVQ}q00aj+PVNB3qBPfIsi zj;!QXiH!CszPwZW>)5Lj7eKXIl66-WKl6^|A751;7QQ}@(-qYC=-vAFS@*m87FNC} zHwo8kj()R@%nPbwj$N)PJiz6F2^_Pm3@hiu2b`9e5_7Y6V+SS%(!v5JyI3u3`=&-RM$8H!>!r{2*7bZYA#q;t%1#xTIN8{#lqKjo)ztWtT;_3CP+KCxq{;D zpw(?)n?{Q(2cM`Gs6?ggTx#g!9`TAV8CLWw-;-6~0pGW~W3lfef&vwl6N#asF6>g|Yx+eejqy-CyBS51r$CO^ zI;Zy8^Zo)v-QV_-H%ErL(J{4CV!xb{l1=BJuCJsuLd5H1$I@F8DLC(z*+sT?Le~Dq ziUiN_4`1h-({LF^xd>9oWew9i^bX5(yRznrb8gH-%K#?d8>b4;G`_%x#I^Mu zsPdVP5!--K^QYG;1Z=rvU8q#aE|YOet=>{o9xYjBI>#UReKja2mR#MwzN3Ait5sF% ze;k$4H<^r&jKsc@A?@#QyNi-uZRSfFLI%BywPV@ef`|&p{V%d)ZHCx@od5JkeGd&apt}=_}e`TBn7mi5j<32|{X^2O?IaN^<3;m6J z6vKrS#<^c?tGZSi8%;A%y235Tu-mbdrz#*OrYSCh2Q*I!fgEe*5rhxw88h4;C`)VK>vPN)8O!s>`y3BI;beOPb- z7RnoFfK7(E&uA9(q4_Rwyj_)DT8mpRguQ>5Dtw6%`$neg!5)24y3Z1T!!%t|HTq%O zUM^6so-y%cLo{l%q#BG7oeQMi4ue=mmSn!0ad^Sx^@VOK3FTR_0&ZAQPUo=1HnwGn z3aQNe(#}8Z@)O59GwFP6!m=*W0+YHHOYWc+%K%Gm>bwDM#I~=fW0ug zw|axvO~vhhgM=8cHn5o?bjyG}d`popintGK)B-PNL1!wlqIOKCL@v4kMM8{ml_Z8Xfs+A=JZuF}{Ic?w>Ueqi(@!9pi409ZYSfbw&Dh)E1|!Hm&iO(j z(d1glLiwK!EZ+!gn2j4DF+PlRTD-G{b*oXXm(6jh0Zshgt*F;@wAlqerG0-gH|ZVe zLTbCe2!`E;+BNW`RTCOl`M(8Q^B|StF2Ulqwc0XB0qe72;X((u_HhIOLt-b+IV~?s zdcc>*O1y^=%lML7g*@-?st7x=&1%LW{ z5fg~48Z>2W#Wo8!OQ6xT%ck~7!53E5&idmfltkQ#qo?7Q$nwEG_3gDsuH6}_(Pt^W zm~*x44n`!Efe7)qALI*LsBhg)!h=dQ>^E{eu4JooXDxTGsrfmXe+e=;0MXm7V&YO8 z3n*FtT@ZdcOBt-I7;X9_p0m(yH{%dYsrFxZ$K(V}AZ>53C$8hOp9M8)yo4u=>41N? zi%S2#bOljC=Q0K#ZEb<={pPTOoz(NH!f7aXQT_*}>GXwRA%_ta&?d$@WjL_ubHQy7 zzDcdm3!{>pc-QZCWQ9P%$thSkn{i<7=xxxz2ljGyFQI3Ls?tzVq!O&k0>+NfM?qBL z2tUyBW;YYJk7q|fif0KE4VVao* zE)ku);Frr+%@xVIOaC4Dsqel3kkkD(Hqky%F;~1LX*BHj z<5l4P(31;1>n)FSJ?Hl$(|4fKq!I@s-YT@{)8&zhIS$hYXVb44Qpkq%WTKIH+a8|S zr!};p7|#yD&r_T_Han8QNuI|vlh;e*yXH(II#g%Mx>Nwj)}0l@6j1~>urfv#Cj9-I z8sd4Kw$%l_0cEE%$p;zRwdM<1jdEghLvQiIY8>gg-;Mmdt1}jB{RjF{d-u#(D9w?4 zP#D-E5R43EEF|qJ-20QZS3A(A`Le#2X;b{2H2_MZ(JQ>01z%eF&P*wMvv{G$x!y%t zDP9l1yxkdM{016)WWOf$T}!^=R6S0TsKPs(>0r-xdY}@?UYwM|6}fa`UVWzaQ@R@_ zBhq->OwNNokZn`%Ypsi3+*sBHI`I(E_#5+Ak#7W*EeZs*&8gYe{CfMW6&a88Fx8n% zgZ*N57#I}gez`V--$*fg3cl+MO#?V$zqjXz70WkS>D@nRTEn=bK2z1DV)TTx-3K%j z-!y1a-irnES%s{)uSy676PwtshN>EU82*Nh3~H&6k=wpQ;RT~41B^h6v*j@*Z?oNY zb0$m~GRjdP;oZ=s9qYmRcOv}WVKdnUfEn4xs|2T72kFmyeoCWLT~xdG3l%fm&L1gj z#j8yV)ZXrr1ni_t=1EHXTos%^jgHxb&*hh&)c26BOdsC>SjTaGthNT-?Sy=|-`ucv zpCCxRwqq$6oq z)s+))(#>GMN0i$>B|CP4NDS<3i?ixQRzVfy0UTo0+0%(^LWOQa%`xSI1zlFTAH&$n z+JNjmD@X->1M+1opW4+7S9@yth*Y$Jxk~xh$PseuJCDtMR`|a#e`_O!NWC)j&+(Zx zV%wg<*C^tc%Vpazfv%p+Eo}V0zCZ^)PQbP!plwx#eyt@EeS%VX>h^@$(DaVC7JYl( zlgZDx;l&f24)$GpNNd?;a0gtFK0$ucf|t;JKdh9&g-f!DkPJ0I8z>r4hpLMw_Hnt+ zW~wxbqr1Vubd+(ei+MMQ=a%Us}PK}9-y8y9bd2p4z zvnxZUjqXC1AB*T$I}xHb)@T*vuTi&aM`^g+dufEW8mdej=G&dWAg8NgYPEwK>daEIQ#C(ZbMC%q_MF(ZKKH+ z+D_8ML*TbQqglF1Tg6f zT{wZTMXGu|d(!(n3**nE4E|pq6`wUZrjCXJgGMOSI-$y+`PfXqZCP#C>Wck?_cw^= z?y2SiBbT^i*TPV*K8GU=H2+;U2E7Ls+&D++`R4SNls@d z&l>*WU>Eno^#W|EozWV3z2=d#A03T^{1VYa*OV`qUzvo_se0Lk!hh$P{Ags?JZ0Pi z7}Xkn(p68*D8!ZUvc*fEf^(WC`vKeGKz*K+K@Rsqx&(rx-!FY!NWsb4((NSK6A@dp zOG~l0>Kji$y|?C@?5NbehX59)-hxCtL8}ivZlhd2{AXFeSOSn}Yc8k?k3ODq*17vc z-Y_GSe$HR)64gDP`knx*pyZ~m{4`9z%T-0U=}rP91z*s)E&)ryJH|M7lo(+Mlvh)&dTFCM{BD4tkU_J8dEvG*rmU)r2nn@H93q1fP$EFIbFDcw5Z?0p+I+*p& zfqW|XX_!DcnUi^Htz1B8McsuPO(pD4_OQowx?A8vm}w{nVdOBvd34%x%lrY*XC=^8 zgXoxqzk%89$GU#jF;XGU^~2NEbI0ZrN!DLgRG0lc#uD&>PNUz{oKxt8=6I%D=pz|N z=7s5|tu5?iKEUZAMg4QvC^xrBCAqDnF*GFTH^JavA+-lVMKT?vFY0+&@`=Wy3$6#V zYTucIYfPMk_gz+UqGTXcGs=a0-Im?h7%a7US{VGE3_?);7;<&yIY59vM| ze3Ic6|8>FQl)DN}-i$b4?I$)%pJKBZYv9GK6TEzr5w=d3YpF+2~VH-G-RM;-Eex9vn-x_ps2tk)NwCou&I&+1A$uCIPknsFmr@QJ62~Cx4 zWi_Lg<{RHcVw`Q|7p=3d;fP#*$ZGr`$I9U}GV@#k@+YG!V>5ILggd|?AQ5fn&jv$` z;2*jRXL>Q{{#H9Ru3~J5{p61*^TmsBA`nkQbfjm8j^}xp2yc%Q+!c?syQUzba{$WS zhAkFlhu5#Ax02_ESM<+^tMzKr?+FF3bj1QCkjOf}pk@Cz{A2)MYKh&^U=($=I@_HF z`*4oFmOLX(C_vIKsoCcT<;2bzJNcteW0QF`mtvZ2$jfGJcO+oj1vXraG#7H}r8y3` z@YoLGwX0WICzI94H|)AmIhK!vJ{7~}i|}>9S?#}rUKTkt{eZsPfCKObwYIA1;9U-q z1kT?cP#8G_l;9o1A1`=S{kJWi&v1_|UMI{{S&=NFA%5!JpkTX=J{WFlyx03w7LbfbF|{`0SfG zZp1wRWa7@~Q!N|SHX-j=%fR$`)>@zOyGv`8Ck4|`v8oDD9RtR6s!jiitE$@^KMi%_ zg~rCQL+*11zK<(3vxFOxjEwCvn zocjVJVG>qaK+k17r#2s6BbV)Tt@AU^#%G9Dp*?04NvZJdlkEB(7fWoVsI4&J3`hI= z;89@t-sbNq23_BN2z1}yp*u_J|~L7m|@#4JqpbD&YV`g`4Hb6 zWKPX>Wz~LRgPfJQf;-~ocJra@QBDC@vFP#(a)E<}IVQWpEK^!7eF$NmS z*$M9p_3y&b_nV8MPR&uHR^sA_EmSzZ1jvENT;i@E)-*&|CsOYDlajUIJIZAlrY z<55Df4i!_cFC)JT-Nz=mSA!K3;k2BOnm`ujM|An*cxY*RV~S^Nt|AP`F~y8Z zJ>osDGxOs6sL|`OdTbCY;hy^SX{Ly*HO{nMc@YxSz^U9WjIuy?j`?VH@$H%To+s;e ztvqGHNMZM}_70vfd%3e~XaM$x90tIwUe0$l1uVR7hD8%?kHSBE>7Mn+fgL#o$&`u) zSi|B>+?If0Bn4@$J=%fzIFkL&k_xrta*{rO7Lm}c%0-qjh*v-Wz>H>08!YUDQ9&0U zS$L+%>w(7*2EgY-ZE@}~`obK14J0WuqS!crXNH{C9_cgVgJS~zs84cWr-ID$P|ZOE zFqM4&z-Yev$+hn-sFEhuA_8+^YjEx3Xy!E_(1Zf>OOEg9hYWF__QXO-#yC@y6pr=i z6sqw;&!*Fl_W?JYzOl{D{8>uCBxlQ2r>bFP;XZ`Sr&DgPGi&Mz5cN9ldF*i{lY+Of(WOP4 zKA=R^OAN!qG>NxszjUT$M(}16{Y{yp_BfICnRkcI=k#)nI#LG(gU<_=r|p*iL|RS9 zhpF*PXF~gALQc)0k*r?&3Nnh1HcNnu`(eihYKUv0RF4a299I@`^M4nQmjC~qH4S9L ze4qO>Nj>A{;88D0Hg_e7w>*rO$#Xb)>D+Q!$Xz;eYuY_LfI*Xw9Y@ZLjQW%0frf_= zEaqWZYu?+SJt*yX&&@BFgzXe*eGv1S8!P!<+g`@#br2bO9g`YaFJ>_n1!I+s5{)Ce z+0FS2q_kGD&-+Tx!STj{ti#s(rHFQ1R#(gqwugUi4YJ0J`f`205u#?ww_=|Wy5ip* zAJjT?QSxubWHBH}K494fuXH%Zie>Blhwop;#n$oc-nKQAbhHgHm{$uY4e=(GiNu6K zT-F*=MV^+^!G{2f&$6B>mBl@4wJ)#|KP-I6jfL7*Z?Mo6RozDG=0`GhqQS>EwI0OtI85jBY0 z_Cw3fY2tm!o_?L8aTp%S=b7{rNTfGMESZ<{4$f1WXJ~H>^P();!B`Hrm?4uH_PYd! z>$ngbDyMmh*B1V&(TSe1YpsydbTn470T&5X(zR~e?^&NJ64-!iQAVz^BCF%8%q`QG z9KPJt?(?xn3-@A@10n{!x~F_mV*?&TMrISYQP(P@)jMC9r_K^0#UZNnjfK zl~yKb!oQ7B$YOGFqZK1;Yrf9iv?;qMZY;%zM~rznpl z@0Y>`hm`_D>JN#kPwaZj8{OJ0C%}aQG{)-_k+mKfrn(eKtmwN!IaX{Y#deNz$kl08;&m3TP(ItQt1WbN#yfnue(P5g zy>T45G`)ESqH#?0s!VNQPZPU}Y)X@F^J#uE)=h<0phdlcgFFql0u#6Cc^hkem(Ubh1YZ7&} ze2u*@Hsx|86+#i4Ostu6A7gqqhVF7U^vtcVEZXf^ICt8hGt4}Vg{$xK4BPfX)yFi` z=I5$L3nkaxYxA~wl-|XGzL>nY+Dg``9l_>LKK(Yy*+)^d$@OX2?+672=;(YqUB8cp z^0e0$ME!yo9r#ciNoMlfo9|uVDqjKcSl8MCuHaM4eG{{ZF~zD;Lzgc-Q?@enxLvKA zr$L8V1b4}EMV*K+zy|+Ndm%gYDrm0bzIyXb!ovaY*BA;A{?@0i7hN&p$E|WKs`*aO zfth-*bp{{&+iH9kGo(Tk^2qY)0@w_x@zLj@PqL- zr!f{OyTco6cqJE4x<@);{$1t34K!5B-^7U$L``PMB>pz86u= zOMciVATsNDLE6{un)j#91-s6v1)M5l667_02jLJkH>iJ=+g|C9CnZ164E>4F@a7r) z#=xxSOjm6_qh7tW2byfpBjXC_W0H^D+g)k%MdbmGHJ(#8B7Xjby|qpr;+PY#>n8`3 zvMeJ~{#65r0FKAsMce8>ZX2p4n!JXE|Cz7^NnuF zxo~UPZ`kAj?L@FCa#W|XXGyN_v;Og{;PX9i>`5EK9W>I^JSJAw-`tQN;evfbe~vkU z`^6)^yS%j6e}3FQY%MD2v!B2nyXJ*lzF?*TipIK{XQ0(PhY|l;W*`zAeB*x0!flMUU*^7bttsxbi!P7 zz1Y#|r)QGU8-3SLtiea6mTa_*HGSKRvJNvt<`94zctd_KXc@fMzs>ctAqcfE?%I9W#`L@jI@;11x%FeE?aU3r ztETUMf&^RE9fj#psb;TH>Ic5zO_4?s+YbTgIV{S(JXo`fUd`|sv_yCwZL$iIdzC$W zwnMfNi|Ugv*;O1l%QNCQrME7S)%o{(`1I#YZWB}Xdm!}eVl|<&Gle}>63Wt+2qi8U#;86V=ajsBOEPGwiuCQVkt@SpQ&RQk4_F5s(-+S zhE(hwxD*=FUGS?T9^k4(6B{-=;=NHqnfGf?Cj!G!pH4P%VtJGlc+dP^<9+D;s{Ce4^elwVQdJND- zpzkYMLEh_3!Oo_7jD8TZ!r9pfHUO=7#%aHakP&_bD%HO z@p01mM^s#5aVNgDG!pXT*hBV0wnCxYJ-_L=X7XX!w}0Quz`MHzLOU$o^Y zF8ws>CDN=XbW?^`j%T2ZRf#60`)`Ew_#}pVgYMsM%$`;?1Q@f{F0}4WW^{-x$^C-$l>KNhSmJF~q+r_1NL{k3)jbJ`& z!bWu;QTgO_F7K+vztjKic~(RB)ZIa3Zbb?-6)y=9(G<&>=bi9tohe}_p39H$L6!l0 z=eW|ZEoI;$pT~80sJ(EhX;+S2lt9F_jEQmUle|%;W#MNesD*12s z^|*2B#Z%vz?bwYtpPb#X*1>`p#Oq?wau%=kq&3ltx%>DR_WXN9ESkX>ca8d1PxJQd zUpB}YHuAmcjXoOzuCmc^@LF#-{!ivnpJDu~n3RLN`cfE>0oOw2zO3pdu{`#`KFQ;D zGRYe;`EOD*MM&C0{lS{Bqg4JJslr9a)ot*j@}cqtOZeDTA5fDpWUSP8Ip9}|va(eYai5j@_!-5nsq-*V`h z@{t6m=!LxOAWvNyS(y;7|1&T#XW>zd!3>K%8Ql4{>el2dK%vLUDXRPE)Y9x#cKZ#{ zYC7S>TX%*-xX`FefHim6q? zwv)om5r!mBgPckTA+0x*G4R;`!1oACwD=ht51>DJo;ic!^IA&X45PD_{}<-`e&_X& z`%-LawV~qJ(GcSqa)LOStfDHUU&e9qVx~I7Rk_hA?k`PGPJg%R%Cj~}Z~n1TGaE55 z{oU~6JABQxs`B4?!Vl)hhkf^(e*R4ajcB|-=`~5XPM~qoL!w2NLGATRei*n-8vp{V zH)D@n;_p9D$Nb-m6!bwv?w>}Dk>Y8=5)`&;F6}b|0K1iu(HjYneMTZB2%q!#P3d%V zx$Z`N;lNF9dw=Pq`=OiYAn?mNo`D+HuOY>-vAqZp&n8*elm?aiXgcn~#wF`iK+dPE z^R_)VUb%kLn2bV{StkD@@_Ps;uf-77N5CH&>TUw-bGYhW8XI->%j}lbI{PBYpUXVf z@2{14<%*=#5va2l5@Tvj1kUybDb!(g{PHk7yp(6Gt~qBI?vS>TA@K%_z2;x&HET7?N%KqAtR%^rfX_OF4u1<|b^kDT+EbG28dE$9Yj=>_)1? z!=P0unmYaG5|ku~G4$O^NhE!tE3xY5>pNk0UfmmX+|-pp)2p8k0fMJ8&h%^8$}M#B zqF#71InUDZ!>O;H*)F;-1Jfb4c4o`%Lbuy*=8hU|#pINz9XFuwHUTx{GuE;(IclBy0oH#(U;Uuat`kgi|k8ce| zx)-ZSnCv{nG3fZgL3nM=EuhCg&`{d)X<~2WDuaE_$b@#(q62;VU{>^tx(RsC${IQh z3Y7FitcF2^gd{0Lx7{_f;n7dq7m1C|Ezt5L#;@i&@l`fL##IW>Wc9ByHaJuVygZlF z=IcbZ7ovmH4XM#` z7%Ol83lShqX`|!8$(U3Op757~ahemw#N48v)Gp~^E{J_%sCGO2_rU%Mt^m7s}9d60$u>9q{Fj!05B~hhSwm=xC$d1IZ$(Q}O`Mm!Y zUhb9YmLv4h!mWq@BH!J1!ADyFYBF5+M;QNuD9k3d7$W(L6IXl)-pC7iAFX6UzrF2> zQ&8t6**H07^Hwd->&BAUh%RmrRM<5>e%_C07(c)l`2J~$A}6D zN{iB)lt?d91f+LqBE1I0(2*ttX;LMKR0BwW@IKjn_uk!m_xFB$^DR@(oHM8VXU@zs zz-kE<#{w_6v~27S zcRr2LjOgaI7n5p!+mgMbXUOJv0Yfd$)UW=PV{~m*0m}OH+Y(abEg3?^1-8gH(OpTV zwfC{2Ig;t?8_s%MxrEE_b4M(+{pH3q#$P$@_KCa?X@Tt!e2^09OWM%8D~`}S_P*Q2I)(y-a(&(Qh(z2^PvgmP+U9@C1)u!< zpjuVP%AuHah02q_Jms0R{j#b`e^}2$f9t*`a^md*G)dcPZ>;!9h`4fQDRQ|+z2%#8v^1?;<!jC}=%c&J>b`G$!v zHyTbj8sA8a>cfw3Ff&Rpz`+_~2n=^O+Kv7k1WS^zJm7D#TL$j`TjA36PJW2rIQ%7V zeAj4xVVG?1o_hDhDr}s^oEV94=v_{SUrd9Eoze{T(c_sTp*p+nknS{WV2aC$@-x&% zkK1aVzzi@TMhL)KYlX9@!)QC#Wc{>c zXSOf;ZYIG;(<&;K@5Foo8=QwZifLsxp~VS4@4y{%zbG0?Ev`twJVev|zf&|miT94P zGX-7X3v~C$?%O_V-gamlnWTDC@#PRq&ttr_JzFfqJb2K9aj%YN>q z(_UNF*h@H*B8d%&H2GF@B!@K}BDeS4k5etGp$TMugEmYe;;YtqwQVA-d| zr%wz06k+9e7)pb;<{4;8tgBopb4?ZZ;n;X=@jcVo%3wQbEQWRFMbj6xG3HFR1lds9 z@no21`b(SS{;ccKGw4wIw^8i4-^lnHqSVfH+0Y=NqIFwwrVX(T?*G*yv-ZPM(McoP zcxmy|LAG#-cF5N|r7MCQ7xc z;Yb8z<6)itaMv1Sg64^nsD?4xaM*ufHQ6$`4tOlg@C+9}!?Nd~Ee}RY_v=H=3vVZ? zzy111XCF!q&3bcAF&Le%m;))o6ucr&f~#(#*lD75)@5MkYeV_Th&{X)a$h%no!)q~ zP=UL}?ne6aesNA%bBv015WoZKa^MSD&AihmHL{9XnMVt}o#0C1?!HG9h)4473oH2_ z1|NFi%o?q#bKd2{+R2$rSK_-@0+v#w<@J(!BbFO1_Mb}ofAYBD`^7O8=9Y)jAfs-A zk|E{b@&1#>`8~`wWrzNVd4I~IMJEH{*#p|}@v+R=I8_ayvCQn$<=gTCo2&i`E1opF z__1_`v^uf$Ua@w49=OP7g(zTAcAJ)pMEdN2IzEBv?8Dy0Lwvdg`oZ^K&^I7`@$Z>t z(A7Ewgy_yw-+5>6-ZZT5my5$O8p=N3hGy_?8b6eCLw6ZuZ;`j4C@_VL<^yNSS+l0V z4dToz)OG!3(}N?f355jS)b)1_-~6bi-!1@F*z}&Z&|FenczZm)>o;s?x})c#5CpD} zhWq(kdFj@EPBF_ag_&td1t27m%G&B!@%TrE|8N2DoI%%1fk zYU~kgHTnvNovRoaTeoDSN7^p6;EO^=@%4h&?fYquKO|GDOT4ApNg_kq*7a2z6wWC# z&%H7P#wB<@bozG1@`3)*?dKy!z!eT-K4Yb&kBkq6qkwb-lH$4+J28I7E~EANbo`8& ztzN$JF-kWbECzgo=6LD$Md~oQvat_U?_7SG5RWr6^DQ=r3NYeFvFd}xfo~2x+c+px zx`{zIpsM(}`Wq-CjrOGLJf>X|RSJFVG~EN_`W28-yhdMRqURFBViZv~#(s9ZC!=qI zk^{4c|BMiEEHk4Za|d57>^U{Gp1HO4ATqTL#V}r#g4ai|XcrxfhwfHro*7+?VHRKM zI=XFS_H|-P3HvbJexzQx`o}xqMs@|uaOMiU1lYbPfr3G$UJl$d+iAk9d)~Z-wg^j= zk86T+DHn+6bNemR7ehO`!XlckJ(Vl>k()_$>6mwQak(qR^eE&De*Lw9iJ9K@f^&t7 z44JpkKV;+HmNa&9>y46uz~t*SO!FNT6htpKS#(4ji>b@>19? z{|Zj0O#NIx_d+4(o}fh}TiD1BLE_9Wm+4et$FSPit~jnORKNFRnm<(E0qq#39>rr>S+~a*GKiG$#1|H>hgU~D@LX;H_{t_a7c<;V758Cm#!4yAv#qZ z7W7JT@5-?u8FHe@kYl1qV^RCGurR|nh{uPZM(hxf8q$V-_BcLlR^m#4x8k=kTllad zA*zJ>-0k#x38wsI*d3n$bse?sNT%C+9n`oH9>-^jcAuyweRrI{ABVlh*697a(ExzbB^Vt?WZ}a%a&6AzqjuU~;I8kyx zhtCb>9krLzs)v8XUGq)|Cb=t^=LjpK2Pj2ZTd8W=vVN@mxRRoMZMd7jGsFuTSbklNrAh&nCl2Cl-1k#m4;MZPH}2UZZ3b<2h(Hab|7 zZ=B4znbJKj##`10nKA?^9@zHWS40l0RI{4X7Gyx7QZQq<(ge2jXfI=5R6Bos{q%AJMQ~3#Pj{cYVB4dvuUa#Fg)7p(hO8-=fe1GH^*{I!^ zXn0~hCVk&dYVsADdT@?r5x7e>tmJ1(&KUqc%u2bYIH@y;IfB62L+3ECZBf`@XL#LL zi_NI40PE!pr7mEGNb~J!zF#ew%itZyw(BWi(+My`KMUS8Q;1MHT&MX+tuI8&Q_{_! z#|+Zg%D665lTo0%K=XLKs>MO91C6UE8&TE(sMK@Q#w(+c<790Ww`u?}Jle0>r?sD| zOe`9XnWh>}9D0?}irPig#|p6R0=h?nP>`E{QSAmJv{8Gcu;H5$!R0i>9G`++yKoH_6- zA74pjc%Eip9E(4dFNxgCo|}K*KP;JE^!Dwvh+8D8Exg0#`{Bsz`IcfoJ15SodC|lj z6W8^{yzH>fI{g~+2tbfCYNxy|cmKfIY$)$jskpjX?5 zl4nYK`w7+aLEgirJSh>w4FYnOgM;~r&}%ozJM05pV1a1n;Rk;Z^zjh-c)^#1^w78m%)jc0CBNqzsS{?$bq%`QWGgEs#P4X0W)^49|`U&V)qXz zDJjmghJD#IQ%?6h3;QEB-xLU7KF7PINeA^&8T^2Dp*-7;yv#-TAv9h$aSKFbJ5faD zo+&Ui_VTKIvFjiR*HIZ<2yEa&Bk>^_>sYVaPoq@^Mmuy-b$jHq`)R>`saAq3(+tR~#mkNVlJAWCrIs3OOL-R32euUX$%tRDhE z9NBJtd(tSE{&&p&FRn3EpZSK{S0FgsYwlph zGHY_j*sBy{7>-;cay0#uv1&RBE0vr(;P1+Rmi(PmAc_`G8-}v8H~UMczck6ZLtCW$ zfA=p^=I1syH~AOqf174IRzMCr)<`d=f2PmJ4b*F*lalWIlX8Hh5*ZcD&*bu`{xf|| zG*Ca1o&WF;_57!P15GZG@wL5(#^9gnkC5yCU&J3GQE_r{O<@en4E{?L;CvBKrxxEX zSSt$#`Y}-%bT2lb;`hDSzg0=ra0JjUF2YuK%5saU*73_t1^10Sz4RL#n7KfaQ~x=` zuF=5UxNaoa2PK|LiDO>FRTQQ@Z43*Kh$zm^R<8Vumj8F!T*Jv7zN74I5(5MSRyhR) z1yNYmyF&*nnHB1w7Vv+XP`5nUNE?g_=uIe-lne}*6O)ri@7%RgLmW=xA`K`<<;Ypu zzexZfS|E9ld2xHLM5S{S7X|0Qh70l9l2>zuP(<}};<~^d@^4z?D*-H!zeEoWQ3n!r yb0gYPGNGW-E7<~q*H((+|K3&!RLvN8LQ@*|(}49=@cJp>cS}uAwfyG27ykpq)O{KN literal 0 HcmV?d00001 diff --git a/docs/idn_docs/triggers/available-event-triggers/img/saved-search-path.png b/docs/idn_docs/triggers/available-event-triggers/img/saved-search-path.png new file mode 100644 index 0000000000000000000000000000000000000000..a72b2798386a983e8c473f56c64512c1b63615c7 GIT binary patch literal 83890 zcmbSzS6Gu>)2<*Q0s>0!qV%eObO?&{4g#U~COz~P1O%k_&yN}iRqX3g9)_spzBYN*LS#;3u*ckkX~MTK`-_wM2NVBSyS z;bLC@+7tw01}t|i`M38fN9lI%-IKnj`0mYnAFO@jhabs$Co083qj=BrHq3P2ll5lT zS&Z&vxQ~jqL2ZesG~bcEBO_%GVP*-nO2`(V+gT+#JiKksJ;+&ZUTR$$@_ygrbm^hz ziL@!QDQamE;~;n=$c`QL@p&HJe;rZ`aFUdr#=fur?_XiZ#>LV(-VXa;X247<%^@#M zE>Vca`EW^&B`f_z1BdLt3=iT>?*H$KU~_z22#FK zuPWp?&$}n&+_R!PSL<2qxRA?g*eI|ZDKa9y+@LMwvcj~p(^_coTS+V5z#6TSwEHE! z|99C7V(ae?I;psxWmz45pB-jOwE7Yz*VwTO34#%YWv%mu|Lt6Zfp{8`b!Iza`qe%; z!?_(wHY27y%DRpTsvM=Y_R8NJRpxk;8VL4XCsY6L%-638fHK&?vV;Vhd#J{!Y~T29|0yf7K3V#i&(YHHij6ZueW= zJ)Qsi#4sNwJOTc2jvfwvYP%1JwmSQS;`i?Qpx^Kzxxi`3ob08Xzf7SjKlnHer;zX# z|GCDDWyAj9Fj;VFf~XlT!LN4}eyw@P2UH(9snA4u9YwKFa^kTk5};bQ!24 zCH=O5P}|gG9Lh3y$$%n+nbZBP+3Yl0gut4e1&iNFYS3xEZyZr8O->v{K@OlUiF`!{ zNHv2`KGl_sVEARECR&t32R3uJU-_oVK&Iw=G%NEMV@T2%gUO!>{x1s2LKS>Y+c@L{ z+(wH9gvU?`tKS&c%S|+PzI_-)$LWy-d-H{~7FP3(xKHTQnMkfwgdct5ucu*ux;MtY zrp9aj)mVF>)%r$tXV%6=^q}bi1WLOAv2zD->b&QB9<2Q}B1(D@uOx)cxgR=sByXjDadaUo{HgvS_rwF-SF@L!OH zodE|@xyXDC&R{pae)*$8Q|D+vUk6LeUm}|))2yU} zAB3r&i~TMbdQt)Zs~iUrh+kn8_bDA?h;HtSl2*Ih9h(P!Gxr0N{Sl!s+G?G(@QPY{ z_iv8M=M9`^4IF0;TpQD2hBd}ajjzfzO53LXOn*X_Q7=}K^uPXsa=vG4bKY#s^aqzD z4nCB|wUKCd{vYJ)jl9>`4nMV$%w=;pk(g_H{d?iii#C_Tr_!;8L9H+ zHk>n+%g1m9RJLF@M(XIfkT90$=aV~CYVIW$Y1_~w;`XcIAFO2`!5c<G#;pXso+aQ@J-m1b+hbQjfTADcUb1kASNAp?8CJ3>3bcA#{PZ?qVLpB zPBUf|A9N}5-qDWmzLqn?k7>)L4;2PFg+kfszvUJ^j>Iri5V@L7f9MFG{Z<_;_^qmY zyhkJG-xW*ZIrhb|pVk~41e{9f^VFS4=vRA4HncDCa%k+jetkwdM#m>obhXC(bWN~i zc$#gvv#uu)@+mI4y22@E-Ul*O!s+=zCoyo1D%o&lg2`rR^KlKi^ZnB3tr*<@z-ily zmxs{aiTq1f)LLU{QY|=IAq?SK5o!&rY>U(ULB8acAXo9F;M8_aG_}{-zWQ*kvDXB2 z-YY+NPRYn~^}2%6QzEkzZ+{1)3B@Fp_YCHTGdq-uhJmavYIN47^oOiO8#otZ^mR`8 zRpE~tIjrcEvJUX?2S&2GX2@eXTh;=_id3l|FqzID=!OBOKg`RT_zq7A&6PFOhkx7$ z0SQERe^E@-cv{XCyV2J={KsLkzrl0-_{T=5p*=^$v&J`fIJ;E~Qnk!n%28^<$8ok~ zi=WF=Ut2TwfMUT6N-Jd3UT7(%FeD)*9wVc2neh}>rB#o)x+$(iuN2*XvEXn;|wbrq*_!#&41i?6V%FKRC zdSL8~?hD8reHAk9H9i`S^@`T(H|}1k@HPoUtu}0kGtYfFjsb8q`OT+Qy ztmVuCrBI6bys=#e%(Ifac z|EjOMUqbyDJ8sUN(_c-zA=K#e*5G)$M9HT%^e158sCo{p>@GHwmcV1?4AMIO@oRl3 z5z%KWW6e{}ZycQi^z4P%-Y)VBA6!W4g3V7JE)X#E?`9R&)f5siETHYK$No(4Naztu z`2c)(a|PfblSGlI1M&^;z2EiEH7H0h5K3q3=KrDP&hMV>UpB_j2&*@^*^n=g;d>S1 ze^?6b9sm?Y;kFYV?{PZpyS;2!szovAdEGqAQFl>xr27$Q_yOfO98gq;1gU+||B~%t z*V<_0r^eR&r%i1FKQ8n2e}Z`C@O$1Zf3a9mrUAmbtmrz03G*K^C?zg>-W^XUF?b|$ z$OW2K`e$nl220^KxLozsB2sQ95;rq#-tB$?|06)8$u&NZTqutL28}+FJkQPKTVV}W zH50RT`Xr7cnXY#4h1t!k8m^8y?KwKys{obqhW%aE>$$IE|}T7Abgo8I&B5+ zHW`V?Dm0Q4k2|l7-Ru6kMbiAlCL!W*Ww=6j@;_juNdo+wQ|Wj6Qq3<=SdC)X^bvlW z$Eokzhl6goT#Zh2Y=-H>h&d4>65DRfpw{p*11`|Mij)XG%H4cf*6|1ZVq-o!E~%mV z7_-W|GuMCf5&xQU`9@X>4f<5j^H!krIXdyp2Ad`oD^)qV-YsN*?Fb?nyt3c&-91gP zo7Zq`(Ys-hkWms&S7`8c);fQT>+>Av1fgu6D+#+her`z976spmnT=k@Hb9P|%P|*B zk_2;)Ef0D+OH^2xMG1>~b${>FpaqS{diZIQ&Cul;SMA!b#4Zkepk{6D32nd4uLQj^ zW7ScyoqNsKnUxdg1447#h@>a#SH7iszW@<#T6(kER&p8!hzl( zNNz_(5S%s)S(xRq6w_@ltb+?RpoHR58M)(SDY*b_U>Erm!qSK(`erhut_Vz`Nk)4p zNh90v>XA;-&woVB{83uthLBc3k0Id3FoWN^X3I8WPh)s--Zjf&i!g0ahWX6v5mgcl>(Y3DSkp+;?1i%;2B7|iRpo3YuNZ)b^l z(m&*q%a$%uV$%A}L;T9M`L-z8ItUpw`LFgX%A4IJd4etl0ZmD0FD`^Olw!7N1g*fH4Vx(*yPXb63r+&c@= zj;&)z=QPAKx zXeE|SvF^w3HYu9i%wml7_r`a|2dRXDwrKThT`QRN!mH>Xvk+m42fHF7uZH~jOui7M zD=$({5RsE%`7`Qxy!mIdcE*kQv7)GRLQ5B5&&E>9kl? zn=p`~dnK;s-ec}wkYP0f$}?vhvhV@N=`-u|vBXP%?2b8K0*bGymrm@&U1DdrB9~R+ z#!cweuj^YMl>YJRU!~22y&mr0j2|KP_W;WCaUP1{rvbQJ8IE*3@&4;HV-ifwxug{c z+kQblBsE=4Or@yTjNfe`*TyjEg{>|_sDB><7*@-H9rm%4p?GyojdiT;COIH>Nrm66 z(ssH}jBmK+3=x>#o2B2@2hu0C(*+$_-GCjm%FAL>;9 zS^X`~m(p4ZVA}l@?WAWZn^(_N-Oui`P13a07&J7gaai6-qaTban9CIkz6{_h;4tfE zdUJzkqFej$*w!Mvl};+4GC1R!fH<2=_2L_OxH{>-M{0QO8aH9Mqxe@MGG@ZUKjS0-*J;Z-4Yb()EJ=Ng#w|9)yo1Axv zHjU4C+#zG5dyL4paxv)~ipZjY9qNRSC2{kX@ObAF8uD`XjGAMCR&2|eEdRB%Eo&9J z_v3}0n!hH?Cq8#Fd|AEAT1foey_~S^1iHs1)xevJ_1)B{55bwEh7VLUsM7gu`tVtD z7_S>Fqs2Zg{)MW8$D*&D?H4K|(JRT6L!z#IPpXZB>MOXLMy|y+lcgLDfh<_UGv^NX@Nu_qy0bJDv#s|mDGi4{-S<^;}2%Nm_wDh zTN*sh5*hk@*SZiXCDT+u+EEpDA91|*;Cu!zn>nKSGD}$D1(M`92A^zjVC5lfRJ2{AJbFk$mOEp?tK&^*{r zb@(@@^x$Ks%M07V-DiNfMhc<*0;~%(WV^=^sx+Y zYHhi)^R>pb(=0xLnhWjO;_QVWiuPx|U_1tbe#tW~>9*e<>)Hc5Ffl*GzsR?pJGT?cH4Y12Z~OPbpkur7}t6- zmHR9Q?cmRq<>F5+zMKSM$Pc>$&htWDF|r3^KhC4uE|#AS4h+QXg)L8;t-tfPMLCwE zBbm(H){}UoI*!`b-uc242?}Uf{XoPJac`x9lU1Dyp(NaYd^=kX4~ zo27B2;~qPh#e~Yjf6bcVb#B!Xjg~{U>xoq6ASD0T7*z4T*V*2Apwu}{Z8A#Q?U}|d zxkOguVS+gHM$Ydt>{J=KpcvATW5+i*eX4dGUfhmRX_n&OYnT2L#lDp{oBO5;ItYXgL1(cgAMv^0@am7lI}SAT6Fa=< zyo|s`fBVL2tPT{?Uc@=_m|Ezi2wlBCi^%_%AA{bQk<)QN{d@fR-6pUd!%VOi?B&~U z4ZXO8og7cEo1VdKFLWK_Vz0fNU`_z>)RCGRIAVQb^eFZxt?7m4JciM&_X*%+=p%WX z>BVo`ulHHBDzgu#w*TbsBt=V?>K>Oz_{$zK=TtbK`)hE^YFE#J^5_ z(a+Go5Twi)Ly!zLEEO&{RhA0tL+_Ik;|W#t|Km@|M6lf{%M*tV(ZCy&ZH;fnSZQ!~ zN|5MxhoSoGZAJqMMp{y~_UuNdy2dl#OIA^jTbl+2%YW#<#q(;O*T%ff*Dt8g7RV%s z@uxvDaPI(w`1Byh2Xt*7d~iOMiLbkHfz&(uNtt106=tV!!K{(HB#i};S z`PT+e=5r>awSwl3pf&~!U<}y4KW>XhjG4BU&f3wT^mQWIv|O`)EhQ-(n-TKzoqx37 zBWrT3L=K_iE`>%u?!*})fr@8wVIZel5c9;_J9|#Xo4ta9XAXnb4B5S3`tGxPJNjx4 zRy`ZA{t_6+1VEBM1flz5$Q{h^$A0{AdwV%ZfhMI{5=y)nUnrmSCwdvf-D zmkVFwlbDxB-?@tKwj_nK*&WQvdj~pEALPEgLRfs&(wR)SzA2v?YK-%_!#HAAYG~ zb5ve!Wa;JnJS5~}S3Z|My7@fkI*!aL@tV&8{T?w@WoZ2Oyh%rGdojFc=3hS7P6BKJ zC1?AuU-5hHemz!kDlm#Q4*Z92S)A4~CyfFS+At_7c8zOP>d~~U{LR6_(F;JJS46$z zawpG3Jw|lUZ`~ud z6ukOumaKe9Beab+3)ft_j8QGOj`3e6gGUNYa&}FEgk6NQ;65yo*AzOp0yTBh)W!7A zuK`W6-^9XkBhPh9$%DIP^QPE+yowGWh75Z=reMi=x|vMN-f5u@Ea% zA4dLF4}4Dx|2RLq!#>#$ao+?+d@!3*ta+DyX2+K9Og%ios>OojQJOW6mWyyOdx>!>!F2X#J6pM$9;gE9Hf9LYnguysBd> zoLq}Snbx1qyhJ8}Qu3yVF`eD#Y`G4e8Zox@1@~EXpf{v^uGtWBG>{;RGz>qRK2w>) zh3YP7G&p$|IsROUQ%P)rCl#=wX@0XqnSYb$^_wm!4c3~bB5GYyK@&|NUwaKveORw~ zaM7x~d|trWep0G3@us>LBfBYhox}Sr=vQkqhn}S3lS9EFC)Y_x%$cs)v9&RZ$G~LY zVzVfkw1YX_nb)x0q_Sm88&$YvTx&Y%mzXpC0wbVVnJ2D=?+-}|EcW&d8Bkhsv6lrXHzUvmHNbwMQ7*1~;|)`Wo7Cd3%wt<(~; zlFmBWaFjHnvEewM%CV!d>l6HJ3m3POc%8Uc{ee2FPQBMkv`tr5wAR^r=Tno;IYNt< zSQ!a&_)!i?!+$VF3w_)hdzQuArTO*og`Z;gYpYK&JfEK=O9fm%Gd4o6dC6R>)ZhB^ zcf2oWue0S%b70u!09b5(R~z~EYP8`Fi!fDA`e2ndGQcP55v==c3Qtwa4&1w7zxU}( z)DlJ~%Fv@X=`awn~0y7aadm;nGo`tB$eVUI8@Zrk$|W}1W!L9nw8jI zfC!QZVSLZ7{9JNpHLDM2!`k|*6nHgaw{G3mmo)|3MmNXFl8|~ZqewDd^lufs@tU}Q zp8&Z3s(GotBG#8Tr_hb<%Ge;Q!A%ex=TF%eaO55cf0i9ep}J>?;HT$XZZMR4lOf=^ zL`3~VlwMbiI;qdyiN^_#;%2)e3SZnrd0Z{3cZy3$$hClCirLWh+BsNe4_@NGziEs( zoN&^rvJkb`{@#`itV+tB%8R1YZGBGm=1uCe^w*!Bu%F;FI455txmIYItg4`{M;V0GCl=Y7av>B;ud!vulH3|qcl7GM;8TK_vw4cNDZmt8D7gf2i3+0 zEMJS2;;?~e{>j^Zei(e{vlDo$-8LW-2lTbG)Z1*bpQe={YP5zjVr4!HJO-j<@W@_( zH{0~Su}gN)Jh06;-^lPE#fMU;Vv^OJxxt-pf$b8=KaDmK%!kV~JU>%bp2c0D@uoG| z(HgM*A9_xcWEI{NHw18^<%r~JvgkmAI#7PwRj=z@t2s|8VJ~^=EA;&6&;C=*9D_l{ z{`%xNrwa(~`G^()>nB4V}GxC2q?>i3_nBNcHe;bcO6&0)zmzvk#q|_ySD$judu|S_}1*N zVHQ9F*`b8*;sv+6^!&KfVh$z40*t?epsr;d_<$Js@7jo_2X7-U zx&#<#w%jZI^`_S*@^-(v(2DmEIQ~+Clw22mO8^ z|2OAX%3W+?kK@(#6kgjZm5K$330=vFdSY2fIHn1%`Gx-%PwgnL8nu&#_*qGBy{&f% zQ$vRO!mqm!=fvwHT0Dnm%++5xOur|&nG9PGE@(~0z(=lcMO97wwvE^WIR_{ljbz|T zJp1p5eqC-Uf_~>PDn4N648IH-;0Cm;t??Dw9<3eg=xJ{MYJNdCrB077DCizP#wwQL zD}%VC=s^!zFPD6hN-c+`b7oP~hKRp=$JC&MYv@q;x#751kx}5>tBLhOt{6*;i;O@s zvs+GSeb67c%fNO5ac+0tSoUIwNYMLCtTbhd;AR+j`uPP zlz!2Bl^QELe=sl}wKpQa3D`G|Mo3De_)~mgwy6GaV6)?O)n9A3HecOSvG{i|Ix@K9 zV$AAOoRgStIlAyZU{X2#%gt+W`+kJ622uBY`F}%(8j^H=_Y5QOR)6h-*64IhRh0x0 z7~CZ#E@8jDGcrPs58C2NNy){a^jf@}xvm5&N%u1uFaRx0 z{Vs2-(Q>2Xh$!Uhp@E5y77WHo>ptr&MnPDK#z&Ch10Z-6M&A_;_7^mWy82$QNqZUl zt|fw&IUXuH0LR}~>B~;L%=0>Y`S|KaBk$Ng6ph7r(+|vCymmBgK8=(@m{hIt2Mzj( zo}@QSe9?Jgkkzuu7J-W?@T_%WGOVkrQ=;(|bK1KDMhPIIw^Ck+Yi%HXT zKmS%A(QG&ghX)A{{ixHn`t>)b_R&^&y9-PlMjw~46^2jekRj6>e@UNXRqo?M;p=E` zZ`fC#2K5G8=7;zBIB6c#zkDszZkWs&RKCQK>bh8K;9ELS80GKta$1As@%;~8M*)9n zGhR7G>XXt|1hpwRn$4R?A98$0LE>uQbu}Z};3FF@9;DlnD=q`@vL~n;2T%9k7Ke8- zX4idAAku8ks=^H40UT3!M?6`L!WnAI-M_6c2RhT+_sg^PX|nPiO6NJgsCJ$6^SwBS zz70LwfAlBt)-#cV7p2(iK|{tXEV-!65KK#On65*qTqedi|CXWo{5|R>f5GaHdi-GM zWiGs#|6`%WYj!8x*!0Lk!ys7eu|vz#c7I(9@pA^#*aZ7Jy^ob4Q~h3WL3_0QHlhB* z3?IS0|H+PgI%IM0n z*Qg?eE8MAKEFQA;Xd|m*P!i%M43iR^cHoA0vg%r(+L)Cj-WjzO_Tm`*7uOJ{h-kK| zz{yC-lH7JZ!Bcad|rrFfI}4m|p2>}SD*_&0yx$;>W@}|`t}ezV z?!!_Ws(Mi2XfG%14~Qk>Ijrj4BfRFfFYndTwSvT~Jvc zLLR`jk7LcVHd3jJEHNeOkP5B-xtmE4pCk~sVrqlwVu)b)QB^~cDe96M!yv4_`?|y$ zo#rON#<*ZI-{6Q7#0_UAy$Sy2sz@nSz4w;mo#~s04ND7zSC@%(%%sW4L11p`qu#&e zL3)FLI>=DXF~LUoL`a9^t;etH7m(n~V8(n0J~0@*Qlz>|*z>J*mW2%`c29^Ihwf7q z0BnuscsZ!tqVKd~-5~7O3=uTRX7IgT%FiBybDwDm*?waB_>&b$im2S7BIkrjh)Z(6 z!A#Qn?omdo6-4C0n3-LgsqYn~kEuEu4hy6vUh!y}T}1zSP4ybIqeRnjpgt8B!EbpE zU}I=3e}pSHYmux!i$+G9$`6YybZ7~G%S3YHRvAYm|pw)v$#QL5RU3Ap23Wq3_m zJ&cy|Qu!OoA|WdH73Y`AwZ)E)g;-@r5p1kA*u=pQ0KtI=?T~{!f#_XrQ zA?^~OF~7J^1|=9a_#jT&;&Np*Q2@S&wcf@vE)!VudNzHIMd#);S(Mszt-^5s0i*bD zD_pO!`P$bytY*(GyPJYyW#Fv-Gl~62V%p9fEoF-V`jn{Svcy_4wb-L3_iZ;)rAQs`$UIPQtRqSl22gRQJuAX4Va#Sb`XsPfq`I4avGW22 zJB>T`l_^yrOFvk2&`YKH-4^f2OIyci{jx2A5Q&(pwl@?qu}OK4&iAJH(R;hKjFwdk z{jQad`#L{KcFd!yWt%K4Rh)1%8Jd~(Jg6u5Rn8uBm(jzkybO1%QDR(cN`1}do?Jh* zl#FhaOsURxLXzGS)Q(}Z2vWd}Xgi#Zlp*t>i$d}m$KD2n_4kG*yC037qEVF@uD()` zQc8&J1C_-lK?mCpezQk$-j90aW+3YUa*rD%J}~j?GeoCJScd_osn+R(+R$&>_T9c9 zEQ?m7UF2xBC$g#;fOpOm)9zuF_LB6KA!@_H>tWwM{2hBH+MRo-A6MZz4pwm$qXL!dh``QhA((E>671T6linRr4`fWaLrDf%wG6oG>_X z3Amg>XH7Y6rg|fp8^}Bkiwc1%C3F6+xxac_nJjbZf`1Ew4oI^bC*|dB@*2EvDhIY> z!NQ?mQbdP=$AaaCG8azs(#zmOErEopyf$hvzc`hw*0;Lliis{Ot)k3FBAhr=r<4$l zk)MY~4;x)L*}53VII1VU$ZQ06sJ~V!cn|#J*u$$||G8xqLToiS;i*C5!#KV?3Y5No zt0!IKfojghE-^Xyuoh8Z|43It=S6wR+XMd}1FZQnbF9y;Nn9GUckXIob>|!JNV%1} zffOUA9Jg0Kc<86bR%M^5uh7l0&uz$kd1te8IjV*+1@BG}8~Iih-H0inLHScDkKseT zTtxT}OViTXFZ>bxLSuE?Up_<#YDk1DMQ1XOWHHQMl$w9#=YK5Rv!L7nBSAjhU2bp4 zek4EauXH@B`iSblIeh|f2J^1H*Zq^c<>GB^<14;evua8jOI+H8dhh*fxplUjp!`%` zu=sS_MF;osI)l*G(W8LjkyYKqJC|q{FZZ!Ebn$#xIH}gnf1niPfnrPv>e{+LB$@eV zZA)=j{R##Z0iTIh(~Ea4o~xM7ebnF04)Jydef`CMXVi*#ziJSlB2Q)FQh(&mU2f%} zZS4n>JCL1y%12&~RMl8gpl_XG=eR14x?O5OeT{Zk`C{(7ZVvRZr^FGJ9#@_qO87EjIl=q~PYix}b?r;^(RQ#Q-iGX&yH(pJ$B zNErKbqMX_tlEpJ8?4*R z+i<@=hx!@$bHvjR@vqJ1wyp^|X%P=KW>R%Xg@5$76lW5@xzVppIYia@HsD{*u5(L( z8wLy8p=Z=Q+QDy}yABMU>mTS#JvPjNii0cK8eGfv@6nx^uYY;EpV-(I#YvydMY$BI8%46B%!S*TqSpLnAgvvpkflbI;UA=b1~JE-pT4SddBl zFypmXVKt9k!#yf^#fCVW3-A}kwKR+<jcT&d zp@kh|9bxc4{{%%U&#G}3JUebq7^f^gSz|r4Ir68qWpq?bf^M?_25Nf!iMd<QiGUOneyqZ4tcOQFqk%&y-s1zy}xQR%i+q$uAB6w z$v&38$?u0-j-WGeh%n2rAVR9qtT37T`pfEEoDO+E-Sh-Iq&>tP&dr`!LZ%RQ%g7lm zGWZuEvo$1Y*TE05c-=c{a@6i48gS{6GOggEqL^xWo6S@< zoHL=WnUC)slS+b~yJd@;kDN|~RDgDVdcKXAu$E-*iixx2tL}uo-I6#I+v*wDpK)Fq zfdmQi2|~=>TM`oQ_gm-7M#vT#y_|f!#{U^V9Ys5PN+kNjL4J!fDrfjHbT-@I zE5<#dWS=!&9ff)04o>o2MjX*|TSrX*ozX0%*(-ed$64-t0b!EfE23I;EnDlX^f1bq zH|X?10{FL9Kyny??%)@V3H0(6!x}%wA@5+vrs|$~S^=~Ecdux{mEy{_YB%-X|Qx=D#ZD9pC`@&_hAB2#0=j}*7K_F54Mya`Nh>mbNIuxhvjp7 z6KhnHr_}wwQCv!Fq^?Y7P<5=Ny+er-iQPI!R7?THsw?RX!|7k9`BMbn=Pg;yJ@(lx zn7$Y-zOrcWtlYvQwH=x^S2t?#lkVhyYGA;SN$_)M^NahdOqtu_6hy=c-Z>x(#Dx>y z%dEmk)9mj!0r>?<1A+ZtspPi5AMN&A3qSvW+>#i5e=kX-IYk9yn@ZT&i_Yh}{{FD1 zhjG|tQo>frLC#DQ+_u&HorSjT{`*DxeR*gGB2?EH!a%~3zP}ql5m?<0L>JU~x>Dm@ zd#LpA@}=blHf21r^;PRaY`)94zN>kP;B9!^Rv6XkJNy6PT0W?R6(91I=-Q!j@$ye&t||Rg^F6Q!tBT==-6F!_kKJ}WkZ*_Ky}xE=nLhk9b?+Y2 zZPmHL6jQ8U1>Ec}HV*+SxVtE}??C1c8Q4L1G?@e+57pmYT9{v*cI9~EOi;5z$_I)9OPf6)b?qoS{Cw$L{4R$-ut z>E6ddbq6nnIwiQ(twADJMAWGfxz)l0=dNVCt)}+V+6AdkAlx+IHmj@4zFFq^Rod4T z15DcWC+t%6$9rx}mvPwO(R5DQg)vz8U>d$DkfWVZI1Eu%?5E5o+MOs3e6+$% zj?L)Xz=!F?h?1U@S%qKX4w24MUYsYef+ah%N?PlJVm_6x?kZ$ z0rw-%Bd{6XES+5^+f_HsVQOiUe@poxt&b1KVuI#y%$-1sOLNDB{yYz0etV2eOVy6^3E;X$Nn!i zT=q|{1n2sX(o%VDn9D^OM0}zMsRVl&zZTswe3ch3X-DZ>gOIIr*Dp#I*E&NHD-U}N z_0(SND!=WRDuPJ>a5Jk;C`kcVj$^7Of1zAKa0KE4(+>_Cw!Y9BkcpYm1moPb5CuP% zH@gqHe~!Lz$#45yxHwp$t=osQV}yFb9lh1`44J$$A0n=~*420)elDXLYU#gZel zY|%U@>5GR#H>gCA-LIDaBT zHsD?&t+U4U2V=#t-xq48g}LECR~BknB66Yk+v%s#v#0%`IEak?bO~Shn9CJvs~`C4 zqafjCt|$irwm8BvVVe{z77vJAQT26Xr&%zRyiJ)CNR#uaYfQ^4yyPuV$goJW(5JzF zjbUYmx-=*!s3uS?JPGJwj!WgfY<4W(`%1+CK@;4P^sLnOdiJv9l!X?P`4a!@RfzN-$ zg62jQt<=#kj?ky;)?BRlxq+mHT<#Fj_%1aIc%tzf=6s)VVjt4erb@TdO6X%6#CaC` z=Cu|?xZz9^2o^w82BQVcJ$;Bp1i4;ApC21ZG)cz>Ph?AeTlioqXxiTUPwm0H$k)J0 zc}@cShHEp!2Gu^ohQ+?MY;2kiQ$Ctd#$0H1fRj+=k6EUW7ee|WEJIq}LoCTNL))r5 zeV~Y~Y@U-xHadbghVFRU)I6W!X*70oCMTBUdIr_YWiL zR$Iml!WC$LB5*cKdKmQ#!w>m)CUkxUchV&a2CPz=b&ipa3>R>nE_tY+7^QnKt@SX* zb<~s2G09;9a3rGDsi{q+)q3re^0@_dYTyllV@YQuH=wco8gNdPLBvPYqz)f~xJE<$rNcvvjgB!T3kf{pbHY}TNy`Rd*Cn+tY;1_poW74J4 zX8Rkm{6ukq$uDJ_tQO6iMTH^yfIsUr)==aY_*lT{O6hl;o}BEXBRtdKkWlRP#)F#CpYxZFo&gvY zxezJ7N$%6uN3C0P&VqfV*59CK7s*gIb3$G_@bt99Z3aq9TDHnk+!I=oJI#TW*4NYLXkEirnbJXuv<@cvwATa#tTnk>S4u&$du)$=;q4is&*Gf0CkyK zI7&j;KiX+uP}}d=3~JTq&R@b-1$qi&IXa{Z&ML;g z6eaZA6b>}b(nm>oyM88^(wk4WY#aHd$!}y6p*MC+W0T>Zv(Of@aaozzRv$n5#oKpn zjDI~o9y;{hD=$&p);Vc>&nv0)eT0SPaoeK^%pFT|6U_ea?NP^~eEir1Jm}n3CqH3Y z8w9}Sc^1r|9zI+{5%CUm348x3qcgkLb8$d@yAQ`L-RODKdH&sfKz2jCg075>Jt$!! zH&U)<@8$r{-QNl*Ml17476%^x@x@GNZ5))E(S!oi&Z05bmt*^nu%0|mD0xSrU&AU3 zM!Dl=b6vr1T_f&ebGcIeO()d0RmY*ij(G4B+LM0&F)k57$@P8@(H0I3A>D^7raU|2 zx3<%!L{xg)aTfq!o9wcF%VQY5(4n#TvhNz-t%Nca7#rL_B0 zjm(CRIIa+Ew<)G4r_RB^BSxdmSDy3Fsqy+V{-J{GPgadHfO(!5d{Cs=Ikp z)}#RGse4!MOviP`&Z4=Ik{Zx4mpy3*G_r zlkB=o3D^?I2wuDdpc{yEGtzD-DLTwDrnlWrtthyC@wo`YevhuZKFyYm;HQ$TqA1!1 z^v}1uMsUZCv*(ZqP|3!Ac?TYt4--s8hfnQS!%vVanbwINbSl0#VadDVUpD5#SzHQV zlQoA#FwPrlH@sQ>+bF@udi3>_SAl@_)Z#%S_Y*M2bxl{HPu5-B>f99j$IeJ|_x*za zCc2$l$^WPcEuO1<{$)EAZw57WA9~rp;-r5Q#-8PHdUqiURg7*11Q{=Wrk61}J{9?~ zGV#;JFNUb&3ht_?%(qnMe<=D3a|LXgWHy$#?k1Eq%Y3dXHi@@`e~qLCzd;CaS}(KF z)jFD#25nMcXg}g^-bTMDFu%_1MwqcHB9dVl-)1YX+vH*@ z*C>KFe*b`frM3LIsf6MVqRGAyVuyxI_jR=>JrAl@?~-b@d^F+LSPXTrccLpFDn5J3 zOMo8q87Tkx{qj7X6y9a1<`z+6e`j%pc<2X1IhvNYug8+@Wb$IT2oOW`S*Z&`HW^t& z6BN_P(1WIap&Zg1NVuEHU(<55PY^Z0{tH@k(-gyDA2xFRldyjp(zzJsU`2SS?X2S@ zBdAZx6MrVl)4}g;s}O;?r@t^}%*sZ;H0>oyhbcDeGWeeRQy&j8EB4_&7fMOFsRI~s zs>)8yxU4Ym2|Fdn6-%%gHXac2LF18dD^05NImmLyx&On~TL!iD zy(TqUb~E+KcuzjdFKC00@o2jw(041`qSO9m@QE*jIU%>q(9siLy3ovY2)UM* zBphEctDi>W*@@{UV3>%}ylB)>-43{yU^*8<**kjPVXc?&PH;9LyM6Xa@x<{`)qs}Cb_cOD-h0NgC&8}}m$JrJi2~quQd2Lhn zMf-U#3@oHgbWl*Yxcvz>ptQy2HD^Jg0>M{|`_PwO3h^zN^y z2bzhFf8nbS9stjh$1kta$Ktx>hMemYNIAKqX1Glv@PrElWr*57^i7_ps+YzWLd*PF zOG5br$Z0FEq%h4)2TlG7Kxd#E%Nn5kw{RiWSdf33=xffBMDkJ*k2Px)xL|(6(Y!0y z@zG>T`A^WOCz_^4iQjt-){6Rd6F8q71K>d6^RmBBX0IJ_Ii5HWf{)B70%h zEFyvKNW6Mf=lBli`#G+>rX$=JSH!%B_mcpnZqOD{jN~BnnjcoHU?x*XQw) z9QD0avvVcst8G&yMy1+BJU}a@HeO`9rn~-0D!7m23&4lV94f1?rPP@17 z(YFbJHwb&p9sHGWX@?p<>;PAObG-?XLq9{FSB3cNbjvGLK!w|TfUt7$BWP+> zfE_f_g<&ci?(FpGnkj?@9|3TKb<;~FnsEqtV%C~?8c@-D-^TW^y??7T;{9TBIg>UT zOVP4>xs>*2!RTLpfbt*DS(>MX^_bxG3DCfJ0*OPF9E&--2T`hf-Xl?~)UF;_M5-#C z=6=_LqF$ejE1D|vM*3BEKMD-#-fQ@`;%0mDH`Dvk8w(V~ByZSpXIGZ)y8Y}paimGk z^IwxOHn0Yq$gyAqe+hA(=g z1uPUZSi|RAhK|38KoC=#KD;3NYTfPPmho%GDTDuvsmhx&I0mmE?nnx4*AdOHFwDZq z^?lxv*XupbUjp{_3vcx`mwT(oOUV=2w9cDqvSU#*R^Pm^T=Ok7LRf~fVJI8QC)R`? zK0bqZu!-@+mT{N4XzwBo2`$n^~zI; z$YfV+KLBa)+N@%jDJQ1;?&T=){!QGF8jF2pbbMQG`0=@CU_6db0sBhV*qXfx8~Y;n>$6*bF9hEpx8}<;NOzrR*7Q=NYWr5 zNa0II1Ns_!6>Giq@wFhn=Sjk&TH^fP;v$T*o?C7|DT}nxpt^Jg>Ym9;;Ay92McJc} z&csMDe>&Xj*?Eh7RDDERDKme@Fs0dDKBaXw~~PwdghAg=|#Rf#6A-AMT)?oOt{FlF~iihO9GDd5jCa zB#}uu+qs?>G{FQRRFzemO;pN^xSQb+hK}B$fSUn=@Q0IS4#N4@<@!Z95xA6GMXZlREA`%ghgVyWuT6$vxVs zyoYIpo^j0utckdy~T&ggs*PgTRN^p!ki2mm=+pup_hQxugQF~?Jz>btjE^#oN6+P zVB79ZwFvD03OVm>{Gh*lf%YprCQC1;*tlS6`5ng_TiQ1t4UqC&W^^5<)U3ZQr}qQO zw?F#2?SSFBkQv{b6df|jW6kVOGnMp_5rJB&Bjv>@?r88!K@=D-vj-2`X@yb zX&gwVXY0W-meN=*=rv}qcz%@+T&I{{`v0cx5OTZWkr|8uT-UFf@vNX;H4R&+7G+QN zpYxK_P}l*`S+$ZeLGP&tCNNc(VGbd*|5e<+z0VE~zhC!j#U4iY_C>w2MYC-Z#_6wb z&Azv?;zA{4&$@Y(W&HRw>8p@XjSNUY2Z^wrw}bO_Jzw=^e;g^KwHnmjI%`mH@r$)u zN?PwnX(XGjtTsCSJpG#ZwgSzJUCBH!Nz`wH58l^+m@R59n13wP{{p^rHuaMp^h>qJ z-wc3QP8B^QD}q%*APkD2_B`@Q$NvZ;6cfxL!wDl|Q`~ZAo&}Y_J7Zr4-0--D%(hW_ z7m*NxsAA}y#m-;K4(Z6FgxwBBUFNwQUCx#!WP0r)X1yk9g*F(A)zrOX)9Fy98Br$Y zeimwJHm^5yh5qp>_!Ra?&4WEmJ?PD7ryx*~r+kLh$7d>Z{n)9R8E3+F#%euppTMQK zXdnn!@7Af1(AW4aW+?CibAE>PD3<1*E=qXK2B8RCbKZVBOZ~UpUA_liuAamj_-^ho zOc5TMe)3)W_HDdP|XLaoR0w?PMuAc@qH}!memF{;v(fqWFA&IbFvkmf9tF@n+QJ ztVPkM7>lG9r{G-GqTG)G4wlYSJ^1bE<4`uW94g$-ZLh5u6?`7tggHOhTO3}szJ8VP z4!1)V8nqK;E9vdxpQ$A| z%{WIUbBHB-<5R;w%l{%iiO|kvY#q~AKF)jmVH@FnmU#5S2KRZ#AWCcZVD<>pn5{s396Rwc?! z^a@}!ZPC<*W=YV;`#(EK6N*V_noKcTqO{XU;il0pfbN1Ffo&f5l4?+4d~Blwx}O}i zT0&QO37)5M!BYc$WDPsD+;koeeEH0Y3%PkHR zT#4fY=0(2$8S&U(odsjXu$f7#DT8$eHFA;<@f>GA1I#2LyKz}g*Rb&D*zbTgrPMBq zFYH(YiDwNWHwmMCI1FExNK1WE&)kJ$&F>aSUyK&kP(Wx2;0=`eNKJS>kXVYWBga2> zFGM!FYoO~g+3}QGcn>=`wx6rq{rG3UqD4kwPe+fpM^x*Ib>nI z%jG9_s|QZ4TAb%4(GBt`FZ|=@Lh>rAZzfkHXd`9tK`syphjOd+qk`v49%!ew-BBZOF)ZtG{kkA&cb7@7V`)QA;3u#<(Mr-m(46>>w3dUXS&5tvZ0IS zZu4V!S@{xa7lTE=vhfhvYT1cR0PyUrNpyVfV(1J7gpQ$^9erjT%65_I=VZ}#p+sQ% z81f#v*M)(yftG_lZF_K)-{8yKGRgX#`J}->jNT(Q=l3%0OqF%~CQ0XzEo0AugB7tT z3PgwBkV9IotxO4#b2#v9qGNwBM1BREFb?9Q@>-~6^!+jg^0>ny5#N39IYk5^3gK@9 zUZp+Jd7ORwD$?N-O-D*0o4ZTb&8Ac@-xH*$pGBgoI{jy1_%!p%>N>QZUv1jMVq*oi z3cz%3b5glDo_*Nt3{fL3VhTtr=Oprqy7pQ85PzSoqs zp?5)V9s0ySGsC#d?#KsVs>gKBLYD0kL!`FSaTr(~l2rp+{1e|+ucG?qS&s48`f z{p29v={A~0;w?z^{dJvxl3|ue>^OPOZ-uD?b;%0RzH9uXP<65hQSvZo3Wgx}{boE+Evp9X+4gU9t{|ccQ%acwcRBxW0(8{?rFAW`Nqd`-dm@#)!l*(OPfUu`4 z`};5Yop`n5q4n&;tcV>3c&g_U9MuDy7$w9J>t{VOu$Yk=YNPlx>?fX9Kf&CgRfoPbv?-LbS}5>ra}djOnRu zNGOw$N#rbmYtpST<}XVLeL@jY(+;(C-%7xq_hi=6Dd@g9+((3^$b8ILcMJF5RRqdw3fRk#c`0YJDJcHj&eBhSQ% z-I4m=mX4-+#_nVVYKdgyYnqmB4H@*#rQVnzG<<-i1a(_}B|~ zO8&frjY9Ioo7{Y1Qv-E5<_*pPtRTx;JVbDky|M(nT_9H7aPGmrQ6U1aB(W}&6>L|j z{{{=`UEaVS-HCP%K5Ke-sH}9H`-E9~=BTW;!lMRL=Gkr!VFQXO-%%8nK|ZHH1h7U- z*g78Z4?%|MpP_57nM2zodx@$e^Y*&4CLoQ&fA#93e`` zpP(8g$#DD-FV}2tC#2oG7^TK4gKO&E^LGHUciVnCZUZ<}KfZf}P^uKr(q}d5-l^G8 zD3<0yqkpi_QLZVB^Fw^W-W1F;968Te8s9E@R&csB%pQ$QZn_F=$;S~@mD7D8;bxm@ z*1*K^jOlzI8_nGKNiU1eWs0ix>fq;}zY;w0yFc<1iRUZOqxDi!42;(PAQ0irs#ZLe zpZx&xy&LU4=}=dcIQRW}q4TDVDeR8p&sN6Ksf5nX;zPoPz+r+X4b5?b5&`hTyN>O? zP&QveVw{b(Une64nBka7Y4xse?mbUXU%i1&O~7^`=O6Qbj4EwEXrNdTi9)o=M6QgM zoPUVw0l?cGWO=u_60p&LZBTd~IM`HR|60LZBWdN`e8AGKilytJNj6{5Bd;d19(Mk_ zh0^D@T)i8=sNYbW&oGz$5{AYjSFhb7vKyo`Z9D3zMJ4aR`&3E$Z0Sh(;Pr%PrzxF+93#|ovt(~8Rs zire$WWV(n&)2LtIDD`Dm{(sz&Fnq*Y*66ip`Q$mc$u;w`E!ih0f^fLs$6V%`Q(0R5 z(vPZ*r_4Pzqx{43YB8khksah+DyQfdee>3xns@S+baN5s9~Dy_(KTw#v3IoZ_zqr) zjr^r$pD+{4ct%ov{StBtUHRrjw_=$0p(rn(G=pIh?gE)aPmm1eC*Kqs{fRrQZ1Dco z?w<;ZU7#G0JV-CI-pI`rUe`B`A6A&}LHjw>+`9Oiz#G{4YXFugCdi%O%AWOtI6->m zg@@;Ro@A2@Qq=)ZtJuV%(UOnW1};XdxhF6^hb0yap1Zbgs9d#Tg0PY zG&$%sj8~=F7@4y){XJvrF(3SLCr14ne3*|{^dmvWX-qvMQjzRIpExvQy8o$mP%|lZ zTx{$(qYrcke|t-TKD}t@i4EZNfg}y9cvtJ-C1ja)hAQYSY*LpgTb4oxwXeUuE-MBu z;tOkjN3E7eC4Q>`*Bwp!i6P~=89tPb;dAY$Ak38aVL<@BwRRTu#I6Rcja&QXvT*qG zzT8qkwS$n$6_#IjJGNWWHmvOQ_dc0w{m5%OM-C9p?_jVLHMCt`%IkGqHQ02%UVAAg zFnqV>x%+}TTs+_v7WCTCNP1a)VmO$jPbY5($pUC6r&f!iwsg^BBE)y0!`AEF$>Ck< zeYGD6O7Vz`(jN}yn5zGI;S1cvp4FHxc}1g{wcA9Mt*~zoctb*mBmDll@P9EPr6qrz z;o)vNgt5Zj^iNezd`m$_(T}F=81YF4`aTVXM{cNI+4kJn^yMrH^Uj4@CYx*B+=xZw z6jj{`3<15i0|xuI`5!zE-Inlb)~liDk#CYJEvkFIR!4-9ulOpe?^CP@QPYANWkf*Z zdT-gH(xkR72j*Vjmlj))J6oSrxy5)^sRTm;I6D-qO&<`6;qOQ2Ed!E;ah`7-Da_ih>T`Ul})CA z)T>v-%OJzWr-_m1?l7)4f{WW{+3&-V7p|RENVMw&9MmIAYvB|8YOlpw=3C(Gh~@C1 zZsf6L=+-XD`6+4{Mly;IY@Dl_w;@>0k5Ka>MhQ18Ro`A0;C9o9@suk7Ro@4o%ezZ8 zp>qwdRGk{(i6H2MPmnxM>Sq?~Y&r$CrX6*}$KToq7&B;By{31#?`gt(e{Bu~MsW26 z=FF;~DAv`Mdxm`(5;I(l@2df$jP_qTeMqE6AAVssu=GIr)S*PgVpTAq#qeKcc-1+u z;j{b2MM@1G+i44j&OqpDAe#?e!pD}GY#YUXn7Bsql}_gkGKmAO%6aGVV4Lr#v#sGWld*t%Q8>)ki|IQ+_u|wB$JtmprS(6q~N<)TblJ9(d$JQAWgrQcG9?fgHY>(6>+EKjO zL@`12knH(bYg8jZL%`*i$$7{P=3n)ib96vxlj-kl9`?-RQ&(!5DR4EJ8K=6y?BcNN zW&H$pTZ_O=IeP`qO8H?DsH*!(Pn<1ua~v3jxIcy1zM^_%x#H3zh#1ez3@5;MKuLj@ z`cXB!2XySd4m%qN;)QB;Jz?#k$)@uG(q`fR%pID)fCG9pj#HqB;p)4q=TI=z`Y#jL zYF&9A`~8w&Qr69#Q)9aGG@=tJJo#z)(e8fdxFcIl%a-=HknuvXP^A!}!XuNR*0hUO zfPE>8$M>xJb4KX97wAGoj71A>Ji%`<3j>dAASMcKlA0qCGbGeu#5ts%g;a)1j=mC6 zj|^-9hHaGg$ksDDB9S=p|DgY_FWD7JUJk*rSrBg)tA-5=b;yurdgF>BI)9|a)8xe- zPI|~GU%-xncNx3`tw`RSgI3zNcqdR4fDPS2{mx1U%sqel)xfH}-KH|%=~IdCGKN9} zT@TJ3mkC?>7u)lP)*(B84Xqh0A*q{iOcV+N*VTEE%&Ip+7TB6l`HJ6}-}$Ft6$X!{ zJ4ppZMHhx0k+Ce?hLRpTDe&!0i&wZE?XvHP*}bqCp>td8YJb*u$gH&{GTdXYa69t} zd{~cHzWFOYK)eH?C;1oVSp974Wf>l=ONK<9G0YD@Ro5lY#YPKCe$Cj~dh6;u-v`(+ z)g93p(K=5ixsOC_WF8NPT>J-wL(S+b zH1&tDAacmfNJ!MNp3kM>L=e$qlDnx$S2U(?6-hIKcQWAqOu&7{bm;Gs_`Uy9mWQF% zm2Z8{f168&70I`|0ZBg1XM^XUGy(LjnX^aUSsaBGq{)E1QfSzN)+c2U9b0^nR)w2* z3i(-XTZjWu3Gs36Xbno*s#O3jwx-($BZZEo&vI*f zKc}qu%851KDDIwDaNV7!$)-l#e=Tr|Dhj(aRz(>_Ry4`%e~L8pj*YFi#L1PQaH1^= zCBu!kQt7K2^?D11J0>=HD_$L_(-b;O8r@Q&Jen9!xKAYph0Wk~--sORNESCxZwSJC zz(DIF@lH*|v_;`k!K&E&c3M<48fp}S4#N8cu}Z@heMWbPzv?KmB1A*b#YcO*X-inE z$-MRw-I11A_ui)Y4J52+RVz3j0nA$8S9^GEz0NW5CG)Ciq5#kFd5RBwfECPB{=Z(1 z$QxP(1LMR(?R!)2Zj-P>%dR~%Pu=D29Sb4dX2B13$Y);lm1Tj^X(pSRO%}J-JLibF zBj;`BF?^Y4v@B_JNuU8Z6E5(j-1ESu*UsoxWMKh}ri;-e;B!!0W3yU1y?;s;=@cqk z-5xSm)Y-k42B0Huk_jE-`pRd&6Ar`8RHVq>NolYwCpn5qKFBwtZQ!%my!FF&A*n_W zt3}g?YcvX7*eV^p2*FUaE*4}Lr=LDh=biiD2w8tM>dOC{u2w|4zB?^*#(Z^Rlu;-7 zSMlWIGrXcCWbUncwRj}{r>yN1Zeuu5&gIPJgiKUX_BNG%*g${zRk5wSQ~vTw4a8ny(`0QR*C|YzRVpF`b{H}7lbr-x zM%VT=rh06*%FZ#lM$3Ex*&|@=J%beD|9UXA?H9z2!HQ@-x;oynUBmN2(sZ_kgS3X5 zChMJV1h8c?MUd$XG5?`(dTe^!4f;z1-&nJ?T5d#^V;^tjw`iP}a1t#$Jg_&D);8@M zN)u94#GC;~@kr&LUwP>i^>0@(1G2c<(jC`R%p0LgEr``QbcMq=GoH%@cUwSt4_?7$cp#!2Fk7u8n;a z%ZpT0vqcqP+1=*fgqeV`VH6EuG{KX2g3L_>ud-k)K)4X7H7fcf=yI9D^3`W=Yk z>sfBPPxRHf!maKu;f=df>+EZxak8U7rXO}??tH9jzOxiZn5nM@JT-?4re%S(P8t*k@c8W(-EEHIXExCLY~a(V{~!79s9{D@TVH%#GoKf0{UcNv0xbQOC2( zCzIXM1Z;~zbVexy^)2yCmdDw2 z&G1WAwebH?=V3_xR<%@OIph|D|DN5?4JPTBK^VWY)M>un_`>@fNO(Y%_oeH4B^2y31Kj;jTa2fZG7He5d{stt7LQ1tVK7(b7-->wn@^k+TZ{{!jSA4o8Gcb# z7FT=s=CcK%=JeT%&s?Rs*Lr(OhL-sfib0P;VF}K^^kG0(DQL$x*y7MiI(BVJQTz{h>T38D^`--&l+n$(TL#=)c zF|Xb@qzfA8Cu1B^Y{n?0V;(H;jLo+aIT>^`UvwlzAl_i<|Xo5?B(LSv3 zv8EI`?CQvV@gR)Lmc3y4rk*i9r#G=MN_wqohLySW4*E=qg|QwvI=?hx#fE#i%9N;w zKIdOKOkJ({f)#jf(bNC!v3|^SBywRsSh(q8<;yCh148EiYf}5c=wl|YPdiqBHjsEB z(97`ByO%>~XqjEBkrh>Mz2kJUqL?{=KR;8&0{w;b=1{Ph$?0u&*DI>`B_N+Gho^?gC6i=>+J z?#Q=0!lvE$NZoMXL#1y1?D#M;Y|5Do+}FQs)pZ?MX+|h$N79#CM)aEU+Af*SUWs1l zyE-;>P&!EuKW588wk219VH_<$mC99MFKCjO3F?WW6Np3)E+A3+MR59Wm{Jaw_Je0e z=^Hw)fA99e%9wIwoWTbkr#F=8JE>~4k7~1nTHu4Irk`|qa(TH@QGv{H6~vf@s zv>vt$CN6VJ{69a>e82`Vvm9Q3K}`#H6>JD0{iUtF!L$D?_9(8T?Rhv|o&Ral)Sip{ zhfO1Eeu7NKXRN)?`nB|ZA^s1xgPYJ?O$sK(a@Lqpgj!}H?4s^a-!erlC>auFcQKEm ziKm2Vt-f_|codWa#TY}41BIXP8Ii(7cftJM)8hu)vbl0k{seb;l65=P8xlgEyWve| za>}O_1E+rzi$YX#u2^c_t?7c?TU_OdoRaVQU$lQl4-n*!yh;&@k}0o-!tgp_B?Q}U z>XH1QXQ1*kda(kdJuOtq!^FqCtX=%GcU@L^DVKZ^FXl@8*m#8n49+3Gb3N3WxWE7h*Ft4^-u{1igwpVBRv< zhMd+Rs`_DEPGS!H;yhNrBq#*MF#+Kmzf}Rq$BY4uv=oYw_fFG}N*Nv5Zx%*nR)19& z&>rH6&v7-UOo->HR$O!49d#~@`|-BkIQBwxEV-Y5F}zdFHdpb>y~T`g+9FKn`2p`* zTq7REm+39*Oy!|&CdC)@<|cd1p0(Ne$xNmT8lq(Y=tC3+s*|yzdqs(n zp-!yRO+T>-O@g2V3|I%mRZZ+})7)qASjzAIP<{xn59P+CAOWt}F0GkaV$Am>>kzVP z=Y}FO%|_%6wi>5nI8{eWa1WShTcqPm`3jm%f1K*KlE->_V^RAJThfti6g^aRfY)CH z^(c@ZM-rJFNR&Gn7~-{*iJII(>enWl6W-RCFg=e#9n9(n3 zfA}I0U3IuQo&SjPr-$wgZxUwBK5C2_tys-Zu4*`^WXRgT>WFV~n3~M9+_<@rdG<&% zIt+ff@BKbR7%{N3Pj5mN99Jz$G)K2);>h}ymW0m~ubM4rH|t+`1fKTpcBY@~3(|@= zLWoKN2HKl)OtYX%^nPxc(rrlfxWH=RWG;rzI?rl+u3~yQzr=wr3;kJLGvTuDvIuI!;8X#EQbDd0gb)2@Qipg0?be6O*7k@ zT@-)53Zkx$lYRNy(E4_2sE0~Y(~n6Jo~ILl@^D;<6L)*NCK?q)|0LLo@rU1McVpnR z4D<2$+*2_GA|wfNN!5OV2RrAp#A_Xm1UD2C)9zU@?1t6eOqFWMSH*1J-2;2!M9z*; zC>KaSnVcq}Ynn&Q**`z0@CH%O6ut}mhjFLc1=jv)A-aG%4HOK#nCtV~cpGlb`76Hq z&%0t5>{z@y1u0Nq-g%E^bACz|4y#`C*8lr4RY-dca47kjpIhJ_;87j^ziqC(S$f{j zK%M(#HQsE4L+3E`Nkb}MC-wfmv(Sz^tkn0d9=d6=P2K(+r_VCjUG!Hl7g2tmZ|X;P zpr9rRuvJB!49b$=KYdB6ks)a6aeya17Frn%^Pp$PO5`1c=RkppzlY}YQSp&Nag=d! zM*f&ia_j?X0blncQsdp@udlonjD2qR( zYY3Gi5qi(-CmCs@3{_Qg=HMe3v^j{&ek7kR4}H1%I=i_?Q;sWF^1vTS0}cD0wkM|j zE3vkS=m3}eUGbU7s19(};o;+IEEB!(mc(qCr}E)aLA9Ta5djY94}LjB`OxKqU2d1- z$AT|%{;jHpq!s?tcpn$qU6eNr>#cYYH_+ewspsb@Sd+U^<%)YZ^gB@YS{m&}Nt-kE zZGIo_N725|7tBiUA+-E^65G@qKuqzj{JsVm;g02t%gk6R={eH)9r=C2k6DCi{4Y*4 z@5ncp`12hHQ@L2!E7;@0`OT?Y$rwB&n%Y6Yu1flsUPTW}Jo$~a7JS_;G!fjK z27rHIZN6jhyvjH?1D;h@pkd$IcCJoM#3+VfcLh8q+_r!3AMJczd7Dst8Fb~kTCI*B z_IoqsjV#Mdj+j5~M2m|Z!%Y8#lKJ?DZy%HalOwp9jPClL$=nFv;bbyTou^VWr^#O} zcY{uMieJwnOpWKHCO@<*#eO#knn-zrJq{kh9bgeYAxpnc1Vrfw^6_>=W)!$5;#>Wn zr}HEG%W|b!%7Q`HXk(N+iMBaSvVHbeV}7VlAlC-0$5B@CjyQ0@B!?G(_uJNp_OZ9; zA+{E0%5@xNBtIhef_Q>qOH8Woo~g?6@v2g5cr_a(wxW?&BE~thGjS^#BhjGw{KFCf zUN((VnZf!}O6s^Ba1*B(_l*UZlVRoF3d7DjEP zJ9MPA6F2nN=wI_^rv#|ROFkiQDvso{TWj=-vARxvnRPY1$pcWAV+IobesSe@=^e|=E* z|MzO+KB8K*?}q+gH_A9aBtO_n;dR#k#K3qVTw(rH^DdFE+Mw1pXC=QWmV{QUuk8k< z1gr%@G8L+iF}Zu!3~X0z)#YekiIUt>9bdfA!iVl2SL%bU8}6ka1kC0jk9w3vhf@<5 zqqmm~(wE~Acv>O<)a0FQ?AIwOAK*yAv8Er@X3h320*2xTLiUkC_=ucyiuso3U$byh zXo0Ta)2^AFu<*x`3ZZ|o6pwZvk)xND^+lI8(p=PO;_R_Q`k0tw!;KunqY@>S-E0FT zTyst$j&-6}J+MA-&-d}nEF(Abt<4Nth^enN9;^ z>{t$9yM6>$y>CqS`jM4qZ@kUxu^vYG2*WjR42apx3}H=^5}_N3I~OP3wvF#?MI~= z`$F$!wkM-X74L$=;@=2f+xeBs*BCrsA?r(zvO4UiLdNTj_tRo^qpTS^Lmuot5I;!k zM2G)4|0tcB%PKO4;Olm0;CtRT93{%2NYNz1(8mbDAuw@jZN(sLuJ4?yWa;|swb`8a zhv?$qlNQ@=;sHJL86N@jtoZ@qj}sf4)Aycz19J!HzGH6ZKbkSb4u>9` ztz3(K^OL@w1R4LGTk1)ZkYg>cFNcNZv~t9;m%8n}#Gr(BBdCNYl{D~89=#_NT0EIUJdfR)DQt_1MQ-WX%wR&#KT=C$nY8h%K4$%# z5jzS+$4!JIbX!GLu?nXHLa_JavYEmsILmaeQY4d#A&f^Em?#MY8ISyOq&RA}2T57G zgn2kCPfmeOq-8phf&DHrk-!JI5|0&RQa?=^#2z3+$QI{jn@W#wiA1>L0d(1{gG#mfegku_aU8F4%8bp=Kwl$7B>Aq8 zuf^N@W_ER&?@{e{bza}Hk)LLNL9nH&_=d!#?i#Np8Hoes2PKN+R~e^gINs0oB>UGg z@6FoGZN~1S6=V_iofP1_=IY)SdHgqW_fG6#5P`mbKkGbE6mLJ|aXpF7a6R1%&ys2f z#Mg#{KEYcsk`=yKg?!^oW+O2l4=)* z?(#gTLNxG?j8*X6XpGO72Bg2K5+l?W@O_dLzc{;QE~ELId~d}>pT~cR!tO`K-@A&y zo~V0u^S^=RVtSYkBUCY7Z1E;4M%?+{?ViWR^7|86apuJ_2=2icf=CYhUkhy|^8Wj$ zV0wgnDg+r!Z11N}W(VBpdj$=K3A?`T9eD-d4TRd``A|@7ZP%t3Y#w_3F`zCvG7!Bv zL~XG+XD7OEMi?YYDu>5JQq$VHnOB8Jo(ae5OW_8kN7g>n`bQcWWAuLbmhboS1Q$rb zqO<`YKNOc|p-(f=y?A z{Woic>Gm^C`5sxI6l8S6(aZc++DKo8jz}Su;$SH)45TGz3&`}6j6Xv!7g)-DyG;MC zVl8TD_d!?r5xoymvwtm3F>pN$5OLL>=;A5QaZY^Ip`8v3GL|4#$Pfd44G{%!n-MHE zCVu|#`MWSN&GPEr*EgB%91`s=tL!gOEgS=DUBX`-Hy?jES$h70D8RR$VYfnRoe`~* z`z-2r>Q*tmE9Pi#=;PYpFWBgDkBhSWObEDVJ#=Ds%oV~ZCsbRRjOP3ERNqt zk7%LpX1ThM^@lndA|q?jcb)Y|mp{6`6D`9*_dBH{XO{E9EGs)^cvYc&#PFW+ABuHR2e{nk#&EqL$A5{}hWsDCfR+fRUWw3m`6 z2res}ciz`2`M2T3vIdsLeM~ekxuCjvp)OnOW&JOLOqKRG=$DHjXzW&HQj!_f&~SrS zQSOmtHCqw-Gl+5RO$3lA7NA$^@$@AWZcET`5;||op2HFH?>mgkQTx#=)~CY;&kglY z-L5Iv5m%%thj<767G75MN?0XQ8N3t>GfHg=&e}PMaj)(KA9PY0K`o_0Kx5>H=Rm;h&0nx;eR4qpFDb>K3i%8@j zCS6!o9vGG@G}Qe-q*&2wsH?04-F0ULZ6E(GmoV&=-j{4XTOAZZ|1tmFdwZy?jSF>c zMZQ^7bH$IO6jIL&?wt{7xel=tI7kh2!DIM+zQ13D(aiXl@%dL-R`>;tQsYkx(*GF= z4HlFFF*HSo%DV0_>J9_L^4Z%gG&lxX1;Wr+NtaH`Si`j?sNbMzKMVAr>_4a z-#N9p*9`|lmNw&x0Ah;M(t6n|^{4{$Yi@j}S4#!f=aBEL_vhg%OiH}zwo5}voU&Nn zdB_(>y$hxCvk87^^3H#CFW4;7n>`#Dhf&JTWl};>Y*{R`7udJHv3=VcQ~}3o5~uBf zx2^6q-ySdg3a*n`3VNt4@NzVkNnWN;@}hK*J2_hD^Q}QCp?*8HT;z=6Dt_@H*)>mI zx9GUo0S_qnp`=6bZ~|4M0CMzkx$#yTb|1c9LX)nPl>10g*#F@tgA&b$pAXNd&l^x! zZ}!9t<4Hq^>D7}|LKYtwD~CL2m_PBV1fgF;zaiiBv+MlDaE%s!wcz3L;y5_!{*EbF zywC)p>56DBuHTWuY>rV}ds2B$x<>#}VQk7cZ0dPSYQTL~wv+~A9Oju%v|F39r#6AT zhaPN_CSZ}BaRmJ>ii?6|m{EwJN*2q_#BP^s;wO{5SwW4`RJ_V0FL&-4M3ceHSs1*Jj* zMY+~F{Cp;MUSng!*w9DXo4UVXrMcIMyI32?f5bi$-qfgnI`LrmtUn7D+{cw^4bhc9 z0;ToepDvH!B!nxhP|vCm`M7P13K;h?>xMYW(GmUF&Iq z6D2ibyqzkrn`Y0UD_ld^8~+9#@*(er3SMN`;5(QdSR2;SlCHZWr_0~C-kQ#S`2LJJ zC^jPby!ZLjNml|Bo*GX*9(uZiEJ7n6 zhrUC${d^>D`F*Uqr7{U8YS97D=xLE3dr6M)rK{O{resW4y8uyR1B|)Xx2YtK+()7j z0uhu$1>rDw6|zHz2EfFK7<3lu0|t?YTtXp>160^jU$<@0d2NCZq$hqTGo+Y0e0larrfd8)GkFdC;Cw_U{EBK8^UQQ*UC;?k*sf(Haoox^y z52|dRhHbL_KH0x3bAE%t3ooiE*T2d${DC2||Bkbo^lP{4dmM%`y?M8X!{rH=W_FxN zd>5Mq(VHMfOqnvs^S^UD#hp%k{=*AlcI-WE-`xw$S(py-!glLT&(Lq5ziwRpAf5OA zu?pvM2!^9%#>5KG7g~aPX2)#N6R>M7^EpV5MHYp*$i>iy?&Bg>uBY7N{aXRYOQ(C2 zEvF?ctW5DV-I%$XGLoA-8aqhF9Y@P%BlH3Rk7f*}^d=9zv5f(%Tvi-JwqLh(g_Xqq5Iks>j z?q~a${$20RG;GX2IAw^PVwHe!(3t4I12~q0P+6%Eq|ceac$rEd0AY_omfq}UPgDS< z7eW;&FaN>~Z5q7V3i8W0K=_yqQ^P~WPx@rjbBga846m)}6{$!5;(rgH`TlT^{#NR5 zmetZ`t-J_}s6-Nz(8@!3y2A=Acw&sWTzfnOHj2|&Lh(PBP?Cw%S|9^ueJ-}RBfHgk zKVEyD)!xJ&kw1gGzZ-$wTSz~!ZGT8{w?t>d@2`Y@m;8Jx zmOxqhk-^eUu0On}6ZYO*hFg0J*ah;K$h@5<4PbH{E9MTu)}D=uc7L#qmjF zqr#Mo_e+#>eNE>qw4$bVlD{?08_Zl#g{R{`b)TX&GmBGE@3F;=r6w&948o5bJS{Fp zyGI0(AKY!ejuVZg1L|>?6sgnmrMB*>Q1_>aWkax%+M}VN)|~Ad<1SmK(Muzy%p}HM zC08Rd!Lt3aIcmE7^O|5e{thuIRC&yS{}Ygi`Ah$RmN$A>_)egY-(4Gk+0UBZSU%uJ|F+|3yLf6H3=}&42 zFHetJDeayBJG0AjW@f&wO@@S0wgWbzj5B5?2!>T$mjV2f$#Xi5t&y+;9ewSF??U8` zD7)`sdw32kH(TTWG*y2_0`g%d{a-cfK&QoLfp)Gj@{!xzFzCk=Wym@YaJvf9?C`|8 zWc#coD&y0L+IlZ(ZN0JXKhD<{OGtb@-+hsnpZm^MrwAJr3T9{1#h-lJiDuO1MIH~m zWg%FQ`F862L9T$?)`ZqC!jpX#dCf`L&T9xG1?$&4ya{wHeu*KQa+4xR$*uKj%fewc?bNQ$(7 zHQ}fHh_RBbqGDk(d5pnhFM?mJT?Jwq!}_2J2*+>`)VSfB&qN>Jy(@Ud)-Zh1fzJAE zzNQ64(liAu-~Sk2$(J4dATBy?g0n2+u;SmC0x<W+Ew$FaAX&E<7XI8g@A7Q? zPmF&^u<SXS_{lj(X@#G1Gzk)X`d2UgtoDeuMzucxPqsh#c9iRD zCGeNvw4G8sv5P4XQ()ClfEEdPwTYYI!*q|$xuYP6lVU=(< zD2@NWlXlZQM{`GggD@%*9(Z>}}>Tjbp!T&pDce(N6{_@Xbc7hR*duh+?AC&xb{kE{iRT{Uk2Shyhh7>4%%hQ5ek?jgsmIEE`c!sg9WO>5P|HJGS#0} zM~%cRTVARY+^Pm@9?e&|18j0-Q4HafAN0`p~roC|Sa` zQDp_L{jxf?#T;*Zu)k$!2-PL9@v3tUT$?($o=YjGrO-*I8fSP#7>H~J{Zh6Al2Ggy zR{%>P!NvE0jxfG69Hv=VeXsv4bd@}Rw88p8&Q0+`G6l-Jaf?^TM9{UiJ|yNlh8KUy z%yFf-lGuNj?m9uH7nwSa{bR6M;sc9MsQU4f&&nvqXXf|c_0N7u7e^1*{(RsY1zD~u zFMa(Y-xV)chNCBJr+C%%lXnIWO`6Vwc(SwT;U0?-#yT1Pi15TxoFk=6^1}w^irT6SV>#GC(X@?))SN7at zLs`FDJDDX%g)+Q4@4J3@6nO}*h=Q%8ucBI43-ZD z|0JDYIdZ^(Tg#?BJIT6hw^0VxPrpr;7vKI)-udV!WyclRks`` zk3Ro}422XEHzXTw*jbJ}cw5;V#!ni8dBeUv|K@NR{Mjg{c$)1+|2lMNE~g%~qv|iJ z1*?>UhyE(lLKdkwR{~s}JzhpF+3kNq01jM#tK#{m)Q?&g!}4O38;k2%*fGtiXyE;?h#ll`Qq_O@L@PICiBCgbojd1MP_y5 zTPOSh#qWc)-`bh**?&YV?&J7j=KFLq_+0y+zzYhG@k!SLH8bziI}XPbh$)aq3iyLp z4#m<8H&6WjZsT8=T&q+6ZI1CDb1v;)rTAF6h3DU#>JQ@+8Jo?iU`$rpg&%&U3yKkA z3j94Nz$-bl>_=gToW5U>C;YipB|fiawd>GAcGz-Vm3+B>&}XnlSeo1~p)tBuMMr2E z?AZT%OqM|+hBqS$AQi*CRll8j%Hy{jD;?W5li70@>6Or}H|Z+JAG)1faNWyt%YE;u z6~rB(xcTHG`pUt3Z6+<6HB=o%g^;S*YLhN<7??l%9(R{~{>86qov|Sl!rycKQ8KXq zHu}Qwz;na(+RMKEddq=(Y$^wzcE3y-KSP=|X(*>1wLNGIeK3@`3EW$-UN&Z(w(|bd zXG!<9TcfTeU=YofcCDK#6KVh$LHnP0x4Z{NP0#f@C{u>0?OHdH!}r@lKK|-A8T#=^ z*#qr*?B;=*&YK`hz(m?+Q}hkYtpEG(OLFH!AAr$ROFDLJA#Xf#1{g`5RiQog*lhRj zZZNiJOg=tUxZq*Z^PjUl<8Zo%!eGLM;qrygMlFqCOtRv!3!#4p`QbgK^@G%B*u|4< zAI9m7;jw1mTd$M-&8`1ck6)`+nal!nXXetkG%3rq1d|#E0?2gbT+Nmp^PgPA2BgU!)U7eb6Bn zH*3;7dE(M{WpVKmrv%Tdh(+@qQKv*=0{%3^^9f*S7Ph1qpA-pRGWgX&KYMm;M`h|y zhtKlNWqSUrF+N5^-S8f8_71XPpDxzhto^Ao+{vMly&NKFW90E+{4jCC@kBW_44)$I zY7!h{l3KUof)!y}wTe`nU(?#p`45{A&WE)E5&hMP{!#Bz&h5trWZEpOgDUBMA3jlD zy780pbBA9ZUufU4;g)8dV1Bw6-(anb7(b?;y%W{+{&4NwynPcn<+cNa5*fKTuCvtK zcw#n4#ZLDb5Xx%G1d}N*7kpaIqNS|XEsKP6+t0tjLZn$CWLr>}ZPg1vgGrPu=lD;D zPBw!C&8?RnqRgGU9{)tH#`Ug6&^^?DpUvftD-V+^&)!cyhH~NWzx)l1A&kRtjf?8b z`PaWJ4-NWU+O=vT5B~2M*>1~jGVqXX<#WJs4|CLj?UlJR9@e{#Klce4_T5-%2PN@$ zTz!N}{#^F&edJ^)L+0(OMYuBE1lF&H|1?2vfA~Xbg)(1$d$`@ly z$?Q1`r6m|kcU?O`^$Ahh=e>_c%H6nr_6H2{y!ybY@)4wN4mr<@PHMm8;L)U;8%l`*CtUbQ6)e!!}S!^PkY6dBDD#$=z2S zA$5x&J;4X&xqLl8ugF9&m*<~A@&am6%!^y_mqo#KGi;o#{f=qlDNRO(?VEM21!V5x zlu3v%(+V=+b5Bkfer{SD;(Q13n(AvutMf)o$57$hS-yTk5udckrT*F|Kl}E(UPaZ< zdeima7!O93s>0{9nT7S+Brth;NbVLi(S^Lb+;+2BR6iY@W^;TuNO-z*%pI3Y0RHze z+-p@+@l}Zz2HqX}ZUFJeb#zc#j)(gf?%ogiW{eCQF&?_Zs43rZxvRbZ2|_0WY#&bp zx`E^V=7&EzvGSn3gz}$;J%=QAC{)q&3xP*PGd}+)giuIjx80CDl$8!->RXX(Rue1wu*cX6(#cIk}Hl1 z#~&0FhOxR?M>sF4-Z0Fn#8+jRIH_F^r<=R>T^|;LRBdCYw4Xn=}dUUYtviAnk8`rbG z8#zJFzUp~d4*fLToj>vT$FfPU&T{tg{p8@iHwS|Uk~x8U7uU9K1ha%p_c>Un-iWJT zWbmwmIflFV!iI&o?zOE#Uwq?h^6~pWh%~A%V}G9_|Gey3`Tp%or2n3q$`!EYwVcwl zz@elJnMQ-(1#BHK^BdHc??+9baE)Ad_q#G_^j{*lI<^RN)-$hvqYR$bEzobYbt(Ie zYh83pG3U*li#Z;ggx%5Z4Z63NVLyzQbFX<3dVSD06!_>PAL(_iGoXv;fIT*m@e^mt z-q^RW4Hw<;s*J>5OK_Fz$)`S-tvBu}XAInlMW+ntHRk!dmbu@^M!769E2mMH5n$YF zYQSV8BwiV1ju69H*5d2zc0tBuA$Al#)A(12=i#O(VgeW3mgJP>z5u3^d9no0XhrbB z7(SUZgsO)PZaq9J=!I5BPp0|-u645v;^3LF)4jwvvZtzJC3o|{FbFXfa_=K&A_+=R6S~P7W*IslWL?9uq80sJg zo=2YhLe9q^HGfe_g2|Jq@2;<|ApTmBRn>o%%M%kSdfN+wR|cOUUNeL-K;zU^*BN$qUB# z*;2qGnitF#JLRGOt?}^<@HDolS%d6p7eI1@JbNDIlkfnWrljC=TZ!?@70l8?*M7j%54Drs=mUh8mR`~OV{nzhCoWykxLROn)~V0$C2eaJ zJl#(i%bI4@l*0=lSk&OF3g4I;^}wtzg5I5CGCSC9>?_sA+DJ5Jfeb zHEk#zq2q_{nEqSK?%Qvmd1M;YuUi)v5^6~!w6haTxzp$YB}wOEd>bteyEaYa z;TzdEq{FR%GUbh+hls8R=)?JO?M^MBZ)bu0Flr*W6m_*c_Kng*WblwFLGFQ8r<@JX2F zbqeJ9OQ1m1`RaZ3FWBelDjbdN>CI475!Lj-U+9^nR=<<|}TH@0aVRd+5n_Bhlck zofbEEOSd?EtJi!>qhDEkB2w&h39lC9=;{^Lkve?792L{JlpHqF8gChv7UM@!z{sST zMl17~=!YXp$QwTEp{wlk%K_i-QlkBe=ZAhFGc zPZ)Ddqw|W()|)MxHInXKTFX=( ztdbFqE3Hqy1m(xyjKw=zCd**a>i8r3>OO;#E=+3=<_8^_97jUh$IXqdS3FpzssS>M zSdX=z%;rSIqqP=zUn;KAoISg2~;s8GjqGG~g>{@L@K zbS)uiIcww1yXhQ89Y5w~K}Qf3AGbhXlZ~)k`T^BZPlupy)Z269{#z!p7@!^^_N@`5 zf(q-`Q^q;1rY*u8ndmE;JslFSbODb*!~T!!m7kJq)v9>@D;i6wB~g~6lAp~Lrh_eCfmd9ceVKKCsWGW%wF2tT+{Kf z0FqhI!BbOQC6*tVo4x=8fjN6Q+{3n1=UX0Q7Iv>dGVZ5a*h=x^7S0CWV9n39eoDQx zYu8Nn*`=3?2%d1>6Y|FE!*Gulq{NH<$djMR&%aKQTP{6Vjy-4_x$}|1di6=U=lDpd zU!fL6?+d}br`G>cN{!&7;3+rI6Hd(_qAtQxR9^>L+*2jT-OLRVp3+2yScrj|ObVJA ztOag1+lpgEsf+YFkS?JzuN4>+%g|O1(q46X+9=4c15rzI>=$$3WL?4iU~8Ds&HOO^ zqS6i5hmC?`d!o{-8lSb&B7jb!eq~vNYeVr}ZPJ7tE0E4e_73AI|XnYZ5*eF!dVbekXYa2DpWsPwYDYH7sa831nga zGw{C5jP!1J<`i`3g>f&KL3vt4_ z6k*Oi+{7dZ9w1bP{(fCG4j**q1}>d$1;6c4;d-E#ot~D<=Symi9cP?>J`sXw~5ws|23)z z)=1~WWrI&f&g3a`pu%Asm?=HvXec!vGIX>uSGXphf-6*0CeLxjWA5v-Rkxrjv>fBg zv>A?p@x&`%$+?$54~eJbxXUr4Axw)eQgiX_tM!&GGncyVXPG?QrSB28b_!Duq^HZjtFkhEvm`2C@+5<<)W+ zwmXiI#8OT&im{_< z*FIy2@L4k@3ZMF7%4El{r%Qd%9)|3x>s!w2QY07kXeRGZUn~P4v1800WXU`NpuAFeZ~ST=9PB;sS7vfQ$nl?>iltxokh*DTU*}4TZ%l zm#73L^OpT)3+Qug$TD=D5tK`KI`*DD=k_;I9}7Z0msG6J96_vpOCyrC-{?n%6XC3W zgH7VIq3j=|+XBfegQ-qGIXdL260+uBA1_u>QK1fc)VVVj_d(ThK;#RC zk8%+1obCth^L*Z9&ghE>Ntwot8_IEq^^u*nUQgD6Il*xgXQ+~~N1q>xjSQ6ZV(=$$ z89uz8>vxhP57Ij%+83DgyLdx)0|W*FD#&k-1@}p~CcMpNU8OxvK7ScA1!Me3dFHiYx>+LQhWg@~;RJO6<`cs8 zSf`y(*Vvfx(-rnfY!;T|gp`L0+o6u*5A7p^zZflBZrnw-hqafVe*H_XxaAEQ|Hm{n z&wIk*+esgs)^dUUJIZ(g3N~MW)R8XGv=@+?NBIMA<&63usOw?El-cs!8{f*HSJ5tg zC#)X)h^{Tde7%B)FIl@}E&NvWRF_Ho^Bu_+ zm2T((S*vaSU|Z3KO4nbN_(r2l^vhKLnuO1O`p){sv~l z#d4MStc`JzW132IxF)bA>inizS|&dXAC70jWnLKGk8`8C1Pqmjz{KEqejKDTe}cZ6 zd!R$7l!vO^1MuU)+}CEURv2fyYjr$y<%am@-zRIlFUH?m7$;^;1v97)wsBzUT!dQ% z$D_O_F~(lSn*;h0y7nlN{;)NkLz%n=O{-bkZnlnW4N1{qU^rm_*Td*eu#81z$jh+T z8F1Dk3B}FH64=&Kz2dcb@3kS>vjj?-AD2%w|EKDJDED&X>vM*qhM&`lF!R9glpZ^G>hzI;zCc(}O;j(gt|xu*ceW zm*9Gv7VqldFLJYXVfb*oqJqNk;dmIo0T}vWw**s13FulI?~B7XCXIWZoLP)j$1skV z!F*sZofMny*nr680xtS0ESVK5!~C@^{vKue%myy z1KmKSVDgCcXu8`qKPXb<%UZQG(y=0bpB=-j0;2kmsd zc6}v%jG@CC96eD8vWS)yZvkp|W8^3LE{5@>F>t~nA~th{ged~i|D z@}u&YX8FYDpT(I+7mmBsl?(CBd#@$;L*KwH4}2hBU_hfn&=pIT z$TSR=dk(x)D^aEa3T^{U^Mmd@QJF0qEGJE#rGwD{yKf?U?$}d~`u9UJm)F~nx62Ma z<=MMW6f$La1#A|y(XX?12VHO<3T^p29d@&f_;#$`i9G>}@uM;D)eAW8TW++r-2e2a z(h+x5-+26AvgwAMRWfBF+k|@d*|`_)#CDZa&VNFd@MJb1#obpPE)BtjpEG|kIOTO@ zvz}|I_WWJI(I15gsDJ})gv*tF;Ua1RK1T&!DX?n=;WlQ9lWVMtaRM1J?S*1m)Jw&5 za|TP?eB=9NTYX{QhY8p3=Y{bs?!(0Rjw(hI^NlV>GvD`N49?Qbw{#!R!afY)EY5rj zS2sQy;+s^prl)^$XWuAs^8*;_{{Vyj z>=XK_vm5Cu=mk9vWblv~ zWD4gu>DfuHg0+^-u>pAHq0^)@bTLp;mnXUhLGp-y>vwA>S8`JkQ2Y?gQ@mQn`nc)Z zXoHTJ?|Q5Cm3v@$MJ0Ix=uGtIGs@)r=ND)3n@B?-u&tjHznH!5IJX&WIX zS*Ow!ltfGI4B;&=Q!@;P@X5w77ULUjV*0uFA?nv?#JrV!e^?YH5|>hOuoD!Csxc+a zs;mo!Km#x(=3uQ%>r>e}!zVnk{CGBH`0&}{Q`+&lSHA{>XI(kz@V;^g!}{hh>K6( zQ?F-@1=C%{7XmUkk1cgBNY=iRX|x2_pdW_LG%|RuID0?60{rGjKS^608sCVU2xQ!R z`{SRgqq7~xe&1=Sn8Qji&Qt22`h0fTu7^zgYZjhIT{-2Lo#c$8cT|){o)oX?yQJQr z{@A~Kh5ge9AODQQgvrtyhuV*zZ&%*(x=e;u<^%WMOfEQePe_y2l`#`$$U;c^40`Pw zx$gXq^566Sfj!G2`F6yg(jRaq9Df^pNOkz*g6^W$vk4ra+Iqpr*>c191Noik1J*JOcm)){!vg)>Q+8M8&Nmo{PCD;#`TdWn(hVo64?&q2uX~+7aA&y| zTIwm5_}}yPSLV+B;7nh9-ODO+*|~iSdGe0ql{s@D7Stmk#iL^PXcL(`Z+$#co_g_1 zX$kSgAzzP?+pjuYnLD)Rbs{+GWB-^gTW#4LqLL>;OaC_V{F~p(+i!hm@1$~RPrC3a zJ&EnqwwXK!k;kj9B))X0gBla9K=^fUVS>6WJS;*aNiI3^pcpKfV>z7^ra`T2f& zW$=}jEF>S!D<^SP%gXigG$|ZsqL;Q(_$Y_8@QMpX!kMfb&Jbe!)sKGm?1JZ*^YhO) zK35EE1jfzExQaH(Rw|oqVZWZJw5a@Q#m8yW0~qV6?0zdq&D?s~A#&~c2f&2xWEl!Z zKCLo-f;nX-6kO6=I!RdJ@G1AnI4qJ2aaHP)Gxw2mPu@)q-**eS`>~IuBv1@Y`jENv@N+|T zLs5upT2!w2=*mv6+3Hx3Zx~X zhQK0$CdA=S5@uFfk(HBvN(Ij}Hoe%W>jfvJjFiSvvbv>S7H{T{4Nb zd-w+9B_)EE$1Ynqkr@Qir8C>|a>3^wf;vt9b?LM6*Oa;P@8fn><~JGOVK)jAnYTSO zSoM7Jy6ZgbGyZ+~b1-#&v`Xw#YM)GWW5(Z(as2t$zSVicuKqYh??Fq^P?b1GMJhRh zIQJ+|WACsz%#NQ1X3QhllTclO9U70td~wPpPfH0HL3O|oA|s9CJ6(ZZrxBTq!-z*- zfMFTTHFx5$_=>akQ-%z$chTZk?;ag-pwJ1*kz2{14Jmkm+m`7{&)ZT za^Zgl$-mgQ>yN_0!zTJ?eWNha%@2MkuVBwo0O{7d9~~^4_F7901ykp(NB@c2z-TWR zU}Sc6f(i}JZ`wZn4gVycR@C#eG{XwV-Am?DEiYMO@}0;ApHf!M8kcAA@aTOh3ay0+ zfMv5(GH;xO34fUmrVcWBP0GO#%39=b99$URwJ{Rk3JOZ}@hL&WvxoJ;oZ%Iz5s-#y zR=1XX4yhcbQL!>5j>v^-QwZy4o3xakNdFo6PfuPXoguYzeCHwvcDXhZls8^Z>RKch z;#wG)H;?^UETh3dI;ed^*&Ba!b+A5SiU~2kCeCEpi$-)O+vTQ#!V7t`aho zk|DETD6UA+jNx!B(A!~9I~=E~)I;#EE1r=Ny!M0v@~7|rkaMnnK|X%=961sT-#amA zQBm3p?|di2F(_UN?);odvte$quKYfBif|!M>6_Ng8yh*)p9RZhXI}A~jKwK1-@tY- zd(Jj-a6J3!7v(2v(FgbYlTSy=LJ2OAeAQ z9b4#2YZZp+A5OP?OAq^&Z_m&2E!})e5Brv%Z~SmQD;;M;(MYy4F=m7t%{&EQAmmmD z{B&(+SF&mU-xc59gUa^5GWb?k@LcTqB>d3pXX%P&INo!${Dhwt-zp9RWE)S#XUv*I z-<*ZbxAd@I6Y+UPiwoqvA@z9@m>`FO;X>;pTR<9 zd0^juy<{p*Gf%l>kW8Dz6W%)V379We-2Nt*E(2i^WgB_v^>1a=*r{^oX zw_`9D)R&UlOXXQynPS;Ib*+mw(b@2~lm9`^HvPbs6N&|h}t&9BL0V2tk$2_8zb zbZpxcS6x=f1W4TLVeyy0$vlj~swa(u0{Zzm823A2@6jJ7!+U{o(vs>Iz%Y65vr+QV zkY9ArAk*d*m@uCVojyDqFkPCQYyOxpOU;Y_2^^I`N3l!5&^aCR$Sc@m?6~#1s{EOX zlz)WP#uwfkE>oc1fea=dWS@J@OE3ViM5PqnIE7IkB){Z_*YuE^x`lZAfKo?a;=r5N zeGh^Wfp)E%s8k7W15AP{i33i$R}R4yUNVaa2hNdv`uQlmp}@ZNMBiFKx|G+)-u>if z`FJRSTF9-MRT;bHb*!0fl{Mta?gdgknT*>iMpyKrNv?ww#P zyXT)rd^D&$ zif-7PCGrp$G-ST8kBy*XH7N zn<{hXrr+nud4Sgjp&VNGx?`gja$)zT^45$JE!!G=-l#cp&z}pW0V-XB@@X{@UzHc*Mfm}Ynp3cl zr3gF+S}GXp2OT!M^j#mi3%bkmcb_cV9r!<(G;FLI^LYpL%Cq;Eg{Lmn4^m(7BB#{2 zU7M!T8qzm^K+nM~x4k9JAPTu#-wmYK@g2bRZlQV;DCSN_?xgP~VzA^wUwDFn$$`>7 zZCf^hj-Qz_dJOLDVp8B~X&Jcb_dNNj{%Ie0?J6jXiqQnzSRE8GfKGvEBpt5>M7dBC z5+G5}G?D2AYAU|h#GHbO{xCoy_@99v_DhXQU!Cy%zF0Vy_8X4x{~hqz$8;{6{^t`v z{0`p%F^}wpYqeyc z-1pxBkcL?z&kp(wdf8e+VxOnh_4JxB^}UcLJY3*Hnyw4xjfR+C-oXO>9f;i1g!y?F z_Lr{Ei9@|Oo8ZKjr@Okr4hU*%lV33p@g%(fi*G7X=2Zb+9U6h_x|7jP-7s)<4}xEM z(`!ze6cVf3ZN84y{WC=EOK|0whasG6X2Y7wQe0c&NxPjOD`4nnb$ot)7ubGt>E2Px zPwS%){amskhF@XY0yAXf0l!lHw0hy!D12*I29jx(!G+sz>1!&!_0RKDo}Z%ZlD zegYo>T8>&Y4@}`49W5(0!?n|tbytQm5_N`P*sOGUK4?0atnmp51_amJe}XyxAP#pa z9zn*8Zj!<1QinLNbS3HoUM-BNQz5Bx4kXg|KijP6vzjdCqDRa1aKe$Ln%ai zN~rIG+KZ^Zu{_d;WpF-u7LrHLqE0OX3^U@4(0LO|n0bwCDGr-_91CyL(n%$~h$~an&r=)EgHk^);o8-?^Oq{~hr+%cVR@@N z^z2Mqyg~*+@`m3)UDPofk~oh+aWfe_lv3h^*aq)MFG%Y!`WN7LM;;~0_?i|2ej(b@ z9aphB!ZH|j1d$Ol2kCE3FF{+&WC=K3+y^`7=*SrVw2Httx|vT%$I@~1CM>b&hw+(6 z=2cB`(YyDRXkFs|ILa^rSaFFs2%rlX%Lsg3ToTCQ@O@g9!)K-sAC6Z6J{#T*rfWCr z)meVU$>@(iPt?WhXW$%v_W93pD+Z>%SV#}L{RAjdZYBHdy0MIcs6DyVl$zNdX4I1} znOl(4j3K3a3c-NE^V@9rq*UKcnik3 zLVO5R{<~liUhH7tS3uGo9|5hKa3FNVbrdd9&HFCw>huU3G$KKN#5EkIcQ_8XaETVL zQTS*KCpb=0xjO0z(L*C5TK}yWcG6r_n&p|F3%-?Sxb$QE;KdAxl8OE?{roq_g{$cO z;qrhcqqA|Tj|JZ($F#t)1k3lse!hk2hhhAevjemF2N`pt*9{h0AHq*e1qi8Kua93JY|DZ>J~Rv|VV z=$KhjA)Z=?!dR(K1_hR)-8@)u6lV*l^AmFn5Or|~7`H@pdHNecz;IHgcsP$`hSM^| zqw>7gMK;mL@xxZPkFT4UO3WuLgG#aKQtGe=$Ha7wFg}tGThs8Zt$trDEvl{IG=p7} z@!2?}CG5zx_;SoRbjoHOw}Fd6a0s_0M48*8<~*PT}bj2QeKx0dM7m88uAj zpSA^bBA!-+{gc)gFtaQfxe3R7!%ws=NFz`<&5v7tUh%PcXdfKNuzYj%P;otowb3Ru z+mJecGKKT6>!GiAhxnwSJMKwhB|{D(J$}$*6ipn~kZ@=ZnI>~Fx6>3jmu8H^ZgT=e zp9NxV!DOKu9Z2r5G`x1Q0Q=8zP`2E&sb))ST-PE)WI7ZePh*){J!*yjQ-G^&z)w?1 z`|yt-w?bMcouldZxjgU!;B0Vp=3sq7rYGs51>=_?N=I>pk`4VF25Zy?X2dUYAOx;< zmv;t_-TP$E*v}+MU0*ehpD+z9olu5TAwB^Emo2`616b>?1b!J_#H0IfEtf-o!K)B? zKXBk(7+mqv=|EaXxtyPZ3r?}bqo6#Dr>H}rLxGGIO4;lT(aPBnxzs@njp6BSV+^*- zu>qPnYreGa+*0m@{v4jrz6|lhr(XI>Mvt2==PxHc6go_=-3E+L%g*f#kQW;+K?$Cekfac%1xw98&xBZbji>6GCo6a5TLVJs5zYZ5*` zbDoCN6l1QACOx?zH~J;;%Oxao$_H3&7(N^iWBK`i7kt0ZemL9y`#63$#?S8k^J(UX zGtv*4fL+cFe~ylmvg!e_RfC7mDt*W1=ziL3R~W{J59d`EJ}p;~Y5&Uor$RcXM0)Lh zHN@d(OD!%^@yB*efHciR&kR)tPdg~gy?$xVrfkDk-y$JAM#EW*r)_^2I0_#yY4KTM z$VC*X5aIN2+=|IIy&^b{@tot^!1`s_)x(_I01sg?K-`5eLO6xTv<*iY`=BsCO_g-_P9K6qFkoNI5 zT}oIR2(+4VKSq0Iq&}zg^z#d;src**ucFn(sYtGlcg882nldo5K)&II&{3xX8TDf) z%v7n*jiI=*3l0TrPMHf`K6~xdOFn(!T-BjgRMY@E71mSS3;*|uJPZlbZ-$MLIj{t| z)3)m>1I=BTB6V!JgP>0=Fu$o!p#<{>tuprL3Mo=7qR8AK+?D6-D-T>ZK(@wpGFp%F zUCQ&Yi1`V?m7PD5%`I1SqK+gClfrO*cRiGppbt|KK6OHEr<~s((zG)4BOV;LkhA`Rx`9eKN;=ZK zb~}e2~SOCeLPPn?)6;`@<8$wHkzjO1X^)13L0B30q zVC#bM^W0yH8B>;SwWWc%Y@H@ zX&Sz!xV*Qdv6_5Kz6r^Yd(j*jUHAD?s6@EE9f*5D1u}g4ewdjG%b&#VI(Rvl88{!u z4>P+m_|!e{!Kb6-Gc1y6YW4+Ko4V(wW93jt>-+=CG0%gU!MC6Iw`>ai22>9AHmqCC z2eaj|7r#((`P*^z>WBf`ODpKy*=d)JpfP@ctP2r(npmHYQ_@9HY{nBjDklr=`9DC1!c>QB9ex>!@28%3vLctmJ`$u-}?XzDx5)%0_ep>pGZlqIX>6Z?l&nz4IR|CE_i$B(H^Vt@2 z8QNdn_-r^Q_Qe@3qi8FwHwm8%o<DM4*5hQ4JvNnA5cNLzkUnzre-73|fx^-jhC)3-3QP77Ms!Rl5UFpHSZ zrOV~r8q3|dw)H=lPp9M$&BLo>z6)vl**<>n%;g_LF7Dt{>F1<pgi)} zb01T4epISV(}Mi-9hFp`e9=>|HZoK1$KL+XU|F|ITN!Y`Rx;?06VzIkGhZk&1d7J~ z@0u5-4B~ntVF_!{>))s;^QR!yGk4x$(in^C+Smwujw@AE-n{iDU8JGj+tg1^uVJ~K z1${?3cRw;%t(zPUeLn9z{;x!R)B|+!|6Y}^XiWvoDq1w5WBFDF<8=aQmioaxS*Fn$ z{f+3ArGHJrXQvv%vP?RK(yr&xze~WWUNpZ1R}*j(wG=cYfhz0xvc~w8rJjx0F@9w! zP*v|APH7g-$)r~yJW9I`)WVq5jPnTw8NX@Dj1Ew;9e-*pKDtV)BDdn|RC8RZJ#!$e zGJ;{kKi?HES|Zon`L?_O%U8S(tmF6%uS$Cy6ztNchrIjLzY}9T@t%ib<(uz&Po-?` zcxy0Z`kQ(JxRl52x z!_L9TXuTY#VpOKQHcrWR*lJz*^0f=K4V)*aLyqQcXF;mS%=MbDb2Un$=r)-i%OUM( z%O8Cv81I5d$!g)E=kM&FUut<)b_%|$$knFx8?;tCfF&$;ylW^=8>fy0>G%I{;%I$#1 z>M(q5geyFu{MjBmTSO)co#G+#8Lef(%GT-Kn#dEIx03T=ro0IlA8SDgGP<3B=Pj#i z$IO?lA+57#yM{8XS$&ySvRryKsZaR>b%bZhysq|Nz;4^TQ1)ooKt9>Ftqhq{B5OfU zAmem5|1n=Cmy`*)Df6eW}Ggu0Cdr`ziIJ-;T}y|RL#g6J}RRW&p7DB+3&c!)kI&PExJi( zT!*5E_}jb>KOV>B4)P&ALLYz7>=+FO+X!+VACezLy2a zr{0C7SOA}P$l+;Fg6 zEc?e_{?h*HbF$}V4-frHp{w>Z`lm+YV+1LJUJE|ITpbr7oA1>_7DLZbZAee?vyXHf zIsM(Jf;sBB_t!nW7(b?8b-h2X-pbQI9X==MhM2H(b^K(S!-ThfH|`^G^9Dbgz_~9d zIiFa1Ill(ub5%t%wHJWN|2!BtyKc9>TG48OzRzD!B0Ma3`;(FKH^rK#vqJqk&an1KHTnpZ}-$ptQ@CxsD zxc2)dbj8v1dC&FQ%N)!_RMa^XjDL>%-(jv{9X3(d!g1T5VBqX`{N2(Y5}~|m+!9yH zejh(wUV7&{`3dC}fPwQRETa(r`%!GG!>0m!_T%g;pNI75GF}Of6>I=H_UR7>pRMi{E1;AS%ug#9j;bcc*Og*SKP7{E zLmV;OtDQoah!-gR`;$Aq)m6TJO0G3&)lii!7dA>&@Eg&nl%#ghWkMZc)27eYaWW+{ z^!>7CI=>|@CCzV)uf+1{mJ9vDOdN-HH2 z4?mpQa;6y#9sS(?fgd;HbPhUz%L1R9@nY;hX~Bw$iOpF(%P=3!z!j;P)H{kyzYX({ zHVc2n5FlVWd8}u^Jo%V~%jK|+4P{+e%9;-4%GbfP`M&KNO7CVcI>bV-Huwh2pWVKi zE|PrHqHpTPFYbcDh^x37##%6xyJvlkyo? zyiD#Iw?OWiP^>xymtq{DB4}+Z&veCpI~P06Af;?Qrl zJb&))Cq9vXUig$Q7L9-`of13zNYgsxDNF$1h@OP596np%Dy<59HE(OmL%A5n3#e}` zJ`y!8s0@>2{roD*Xv&XCWc=V`&_9G#vptg8Vl9^@2DMBiuntPtFivY%d>N@_o{x?? z8o=tLxkDC9d^)WaKQwWx?E+Is%i-n#^%-=XRahKd)TM*FCAbq3T!U)|NFcboySoH! z+=9Ei26uOYTX1)GmxgYb&iBvE)yz#*UsTo8Rma!a>)oXHh?W_@ugUj6&4BLNvE0ju zC`>i8%c<_h+TIzkRc!hYqqjb2WYc^D^OC02GF<;YHPY7MdwN=Seoy-sXF@vT4;2+5 z;!NKkB6ft=N!-7n+I$$wfUj>|JAAFTuaAat)HSgL%qJ(-vwyvXN)xL@mJW z44EF&^ z3t@Y!u{R&SRmLyZqCf3kwY);b&zhZ9{&o3h;%>xa<>3?NR3*%s&2W~Kr*}FX>mRC_ zFKj<3kqhcsw>2>lPKb>r4{rh@Nt=TC1D29QhWFzA#tC=q<_oj$`nk%n4CH*C0!$g= z{uGHCpT&jRZ>sT&o|t8@7LN>r#`X#uiA7qS(ge{sjx~I8N!Q~2@5|8^Ek7>aTd~N? zG9?#CjL!&tsdGJ6BDk+akW8zhDeJyFEELpTO(txkX)X3PS3 z@hD%q=sFi4{BtyOJgWU{PgN9B11Y6 zYSGCzuMs^f>>M)1+i%iBxGRCS^-)+cqJQSQcO7y{n11$B@;r(Ry;a}`&1sl9)heLM zNy&F=8f71ikafzW@oG91OK(9zDb%ILfL|vlhoP3llQB?y`|AbnuxqW|ozfUxDksE# z^`@^2t6pj-CYK6Ss(%RgMVj|uCv=9DlP81lO)P7H5BU}@YsYWIxS{Du8l`M274I0@X}_*}f;4W~Q{> z>XK3_)b9HCow9p-gjXnW)K=)^$_B0_epS|t(6d_cCQ9LNLi5-Cc^yL+iP7h;P@yl^pg9 zPYwJ7w;8ZMjB6}H&rgOLXl{GIN)B{avs?ok z)i%;%2=J(CAU!8V3(u{MP^4e=14um)`YesM+Az-IO*N`xrIWVg7Zv0%hI2Z+X^^Lh z-yH`qC?DyE^l2GvuEklG5&yF*TEZ3eG&=ZhcAAao#Z%((JxaCe_dP?UL|wl5@F{}% z;|sH?tlL!`mNQ!TD=62M8wl5e>`+d#{qiKkNqV0EKzVYYBwBOHpUZhCSzsnkwZ zcR6@u{*P)Z9Ql4HCtOYVN$F*eL3jHVYkF%Qi#S>ZMN6*E<$f#jUQo-ll7FcJ+3#79tfDgAZl z!)7WzrO(irzK~G;(v-kHFjj;|NO6igKM)-E1w`R;JYMXMu}0mZ<|&3na>a-!|+z=PHBxg}{3y zT?HlW{Wz8K;65#Vfit8zw9cZ3O&>^FD-Nif3aNoufv#vJ& zH#bJwAET`?L5-PsEK>8f)_+fpb^d!4m!jpL=k`ebGixH(YD2QM8pXUXHu!y3)QP`K z^|(oLr9Ci^;=Y^^4)88wC&Nna?gW2s;ehkj!!k4U*S_DvA#1z*G@^h3*IHAi?I7bVvYDHXg~6!myNPLclA9K_fo_=zdJ zltDVyEHcC9gckk94pM@Pdx>|AQN`~aH<3smDrFT0T?d7}7p!FOi6-MvZP$4HEWhde z$fncfC0igIPY57Gn3-lJ^M*>iVbwl^pXSMaHXHwkI&)R@)6b839^wA`tWT}c!pIVm z=K3=-VH`cU0{%8lx9bmfJOP*BtuZ(ix`hT#g&Egu2<7|~y1QuCAEmVNJZz-u zze29BdOMEb(2^w&ja%oq4K7?P6(nfBE}~Zh;)F~h(U3$)hZ^$6fAj#Ac`H$zafldu z2D{7pOHQ(G?hBy$-HLUslqcT-{;Dd;DevM4lfXf=@_9lR zMCwd%F22*=}6>PY8icmJW`YQgD>c# z`=9f4hKHcJLQrs61W-3;(5Jw^u5{N&i2wW14}$XRd2_C7q!+R?Bm16&Wg>H=V1A`> z+izfhyq{3!*wOe0DlCtMeJxF@XtLZzw5zWu2_11k0~u!|83-GuUiK4agMiuFY4WM6 zQJ2lMWl_myU0C+#+yKAh7!U<1Yck$cq}NO4|=?X{$DymX^!rdYs2}+ zAnKp7Kgr)xNNYEfV}T6s8OkrZ4~uWkbZJL1-uQ-f2l}|un7Os2pD$~}1!L}<<<{_i z?UA5i8Kge!bka%#*u004wJM+Ov0%FzSG~t>a^i}h@nA&RAVoHrf<$xMzwYI-?S#l+ zHhfz$+~L9RiMLs^tM*TG}fJP`#0YMt-plF^(a?We7JN*pbnL2BV| zB5V^k{l|#*AbjYi2atDti+OX$koRCVcvjb{&IiB5sX{4?BUv;kE|6$q<;ytd{0Bon z|D4O`{_{vHfb23NxDno`QgeBWgvp07hXx{L7_U2VYAiam3EQq z_3ra1!lfCICKBI;5>X#)O|SW?m)G#W=g8bit9L&T-AWS4y7g$b9#|V))z_U*kqD!r zHcySp6&edKzq_=CcrG*Fp>JN=|2Ohb3ZQ=T0SMUEXNQ#>al!9m%dc!SbX0tGXXa?%PF$32!1e{pNNQAB+(OeiXak$>)%k?87qzmqC3o}t98?_z|BYLMN|6MqN3IU5Y>5LQ?+o_ zaGarHBtrKDEu(UGLb}Z-TJol>@t~?MD7l%Kfs|LhH8^E+%4Iw0clXSlagjf?f_$B+ zIP^R(c;E{me)*5TMupIH)Y;TvIsdJAs*s%Aeqm(iV8Luy-bcU*Z>rS#L|zy=nn3(ahxafr|!nLc^J)lNwWzR$2Aqd zDxw5X@*TQ7`szO}*j=t&Z0O0YJFNaL>*wKE=a`?Lzj>O?={b-~2Xoo~UVGeAAwoaT zN|rVJiM}buM?-7-Ef?5aNvx)?nGe3{iy0^**G(s)9#e!w;2f($Lxg)D_lP^*3PlJF zs|5}vBXApakRz;y*tpP@!$z%Y4Lq4ufU8UH_p97XYJ*h(02tRqF+W@GvJqt zAeb+1YXvtiIT4@n7|LsPI@}Ph4@Ye=ejHW{n+MHR>WXb--b7TGz9|`}knF{%^329p zb`OKt)6V;_hGV6hAX1k;F@6%cSJ+|q;Axhx#BwwF!Vz-kMP^`R7a_G5xKG;__(9h` zHCS)2r!k4Z_9m1P>n)>kdMv=pZymSWat)z@KL6WVB~r+tlrd|jl=EYw#OR;qt`sEl z7X_s<&56W-xf~3tAJj{uPnY|lBbUx8BcBo{<_(k6n1BesbDr=Kx;;Q4l;ake$KUU| zBzmY7Dv&vCVx!N$Rhr(k1Hx4zIwkYyvVGm^+y|>IwxiMPobI)Os4HHN7M4o@uubwb zsqDZ4RT~pB9+YNYjC17@z;4i3+24`l3(3fy-Wv&sHJ?w%*lr=x-1WCE4O8r0(O&?y zBC|F4He(ZqcP?--Nb=asJ{w^)=uUtsrbnimsrn{Pt9-#<3KXb6-qniY6kk8b%2mU9 z+z#2FGU@?e9?VzmU*c>adnz5j0&>DI|5zFpP2h$5m8jOsEXkHKTKn!R9^;6-^WR6< z#@a*VBQ0{wYoFQ+J{C*dZn;4^4s^U?m(&G4e zXGm8TmzT$oiC^frYo|fYX)NrF6p%^V+-wiH!%1n2J& z-|mvnzV{OU5-M~0n7!v`!IbpY1aSgc5mE_u>vz1i-RnxGUf=U#jYh!+yfP%CY|d)P z*meNnlUU$Px4oCg@i~P83|>;@Y@H4;B}GN5z|gsZ1?_8pS~JGJ{bA;NCl;ZE_XB|* zt#D}!t#~0?~W zi@60Cf)A}%YEfk~tzyb)?8Y!XJjDqzDfiojWr-U!zk)qd#U86ssHtTrKB5jK0lrPy z^ndu3;Xn#h#zmHaP(80b(QmarfCHl(4j)^k_hWs9D7&YEa0R0J%56Yf5PcKkovBT) zI#Ndidyk8I`~8V#U(OdlS-dTCxLJ;}G5n>v<>+(e-?852+ml-nK+~-Op^A)Vn}qX* z^FYB1XD-`6SjX_N_!o>-ng!`9gA)xNXz(m5X%eXoYkfU!Zbn5Z<(-3k)b{wR@A5vJ z=2KdHIHRx$%|a^EREkRK5D&%>Tsu%j82UW3w8EdMSC8OWLN}Z8?P+<`S7@n0ztz~X8&+bPNy8w$j9S+p6WXj>1m(tN>o5+UZf2$9sw1mpfv z>2>!Vnm3MgINYs%jjc5o{y2tTjf&z}XL{o`YjUwU_76{&aw|{%Y06kGZ8AwY`rZXQ zdd?5V3RRU`R5^K<*DJ0w>Gs>_`u)V!U>?Kh+^wwi%xz)n*eJdLSW>IKLSwltHDdu< zgI5?|4UK+D|LAe#x^wXaWMf*c*oG>yQfm%*{(>6%LN2S5{+KMUx1D3r??M{&v z0|VW?0HS9FhR$!-2HCAZOnW_$a{-jka>}C$2bY~aU)BnUo8H>?6@>j9)brP;ePn*g zO_~U>9<;)vSW}w)@wvH9eo94DptPfD|MC8*}xMD>Ueg~&n z>r&YuPICDN39fQQneFz-HzwitlS2#UdC^sgu#G@wXxsCnCGA9>?m!z9i21Yi^qRg7 zlX3SqwwkGkYpg^^_WfnA6CKkok7X*AuR+W?2?coED^=ckiJh>Od-_RYrhktQw#YvR zwp#9-cpIMijO<~OdJBgx30Z-z=Fra8bOq~HGyq)y_xoVl-={#4&z?Hrn^_iZMhBq= zravP=FAt{%K@0>NPjyWF?%7(MRxJ?Hh~Lxw9-$BRC%si##Dhm(c7)bJpSs7j=xC!i zW`lBo_tsDr4OZmVeoO7k@HVw4G^MTNVL1Jl^FvTPYA*)TdByqC$9X!j zNkKcnaYUt|Eu~<&QfvIUc8lmn7QgaE#uYn0irerLqr}*DzZVhqRL{a@=SxFMeRUSy z*tKG80Q2w=#kxKw#R8hKh1hb~K!9a8g!xhMH4ZFD=9(wSzo1&J$K1L#*Q+3X$smY# zez=K0DnaGt+JRXW(ZymX=feA==+6=vK&__o)d_WAzhH*3Z(u~ft-rf7h z!9!2@Q36;fJ2hT!U3-+kJ*OC(zxhz08NBwFJ^`$;ly!XwD7Fs8Jg094Ja<)SxAxj0 z^x;<)h(EA1YDSvenSaRZ{GFYl%H)MX5fGXDS z{DRn+RV>6BqTw_XFf=ssbemVl@~Jt^nG4t++l#o(-lkm4Vf|R;BiJjP9E_FD_!VrT zIF9Gox!9`!jpXhM;1c9&2H-Fi?et`cHRePZUJiqv(|w7njHtR|KCTr+;1Sp9*~sN9OBKXt zxn?Y0+TZzxdr>2_PWk!OYuc)QW;I_G&f`9AwwARusbaH56-q@l>#K;M#jL4H(jco2 z;s#vh6zmnUdl3b->iV(X_Zujrudp!I+*sjoEhCz$AcW?;1Jdw)n{Z$Pr>Vt*Risxc zwb3l(_aVV+4P@t!|1}3X*j9in*a3*GMdNNV;m}XqzZ<$tVzp|ZPxMi_CceDd`y}JK zL<2PaemtDCd-h87>U_$#x42hSGVcmOZdJZ=d?KTHEOz%IFxHp0iQ_!>1p8f7PdJTj z`XWce^Q&vsYItiCBPaL(F#;k;WY!OczzU z8DsnwZwicDAFOr*4ffJ}aUa%PrdDUjZ^d^J8)ZEvDB%xZ(1L9<^)HBg3p0KCdK7fu ze!wB;%JF-%)`vOX@x_cui?`^OEZm?>J3WK83Res@I1(iKy|C=i_A-Bjk zSJt3%5{F_O(dZlCa4e+ePV79{H@ug``{*J)Tl2hUtf8xUAP*z{_OeBg_WA;tfurRY z@;My2$?{vtpz!Rp5td?*bk`_w#aguzMT)eT|MF^ddT+am)&t>+c(GyDz>3cQtx;fEOA$iq|jmj@?e*H@aIa z%N?pL7`-J{xm?w&)~?zkFhCFXqA$hjiQr!~Nethv>hF~!O5BQYi4d8~XO7N%l;D|9 z*P3b@LYh#x433b|$$aLYF=;J|C6Qw&Xv_@JO?%L8G6-JjfL1-W3RlJC1R%4_-> z+d8%0WQaw`Hd+9E&t{udaz&Ky8E!lKNeM{JUuA>vp7SI&nI*CzsotP-o7SC2Eb8am)HW)pS84)$?)jxTXyudCFNNu02i?m5Or2kat zam-WVA>wuT6Me>u{6RlW$hUR*gzKoZeQytqCN*h+agy8)p1&cn`*iEN?&XTal;CL& zKi}^#Q~65KZ+-*r;go^aK-GQ!B+6+^@=z{z0QeOa_MD~5^+Jo=qXe^v( zU(4%P%_gT#bilUovg^@3@67{o>-NTond6QcX|Oh0A3nJ>@C*DC?giM7c}^%~jnXT+ zP1O^fm=ziEf*RfPls>T5rRMIrBd5}>ZFe*f9F$~>4N7kY+9hi`C#MQ$ zY~17r=@!1p%m`3V-zyU{_eELr{sO2}Npd{KD=oiYOAWzbuA6{-2+UzjRjsW|BUaq- zfER=fj`%u<9amuCBUQjb_oFIXuRjw#Y4z5cS1hTe$g)M}#u&$t>mY)o%3BUN;Lj9_ zzVW^5WfSjab!c}#^8?c8Nn^&|nl1$4pJ7M zZRTnd9kD-L-T}Lw+mqO%==g)Sf5f?7$18ylKu@B`UL5aON#Ifn*2YV*J*+T4)_Sx; zxxe(sj1h0vM&IC249Ox1m*NK<&oAxQ`3Kb)t1vFw29F_4SWi1-Zf}f}| zRp86h8{sDYPTpg*-+@?3)3MR^187&K%^ft(S9R@hF3#KfK8G0x!LMvKab+mynI34# zV^Qvo!au>foWeTxO2ln|BnL$}$hcM&wS0Y($ulM9B=3?LHVx6{nX$TP4-Mrsp`gd*@Y*cr>Cl`v zvxDrF#xm*89pmX(D=SC z(d|$*HEjz)N9)Z0*4o=2w*+q_3C7JGWAtomhS6a>Iu0p{@Qy&NyWq8^7X%qTQinTT zr<47u(asOT@hGf7`jqwOwmSgW&Eu?fDpHoq>ZRlA;L+*AHNgZG{})k-wEx1J%{V}& z8_yZ_Fjzy5;6AW5k~Yv+^N=TXOFN>NwStlfU+Q|+bGPMgW2tN)3-=d6t+F6!-V$)2 z+VLTmLq=^p0RVKu%ghmC`T@ZKzGRVAzn%H02u0Hb$jT=Jz7d4xBt=>(6{y%veN_A2 z^gSXNYq_~x<_{WO*7C2Su#CjvnARV|9GrP3@h1buO0Q3v0hOF@-~i)yhKA%-W>E|Z zMb$P9YHN-%tCFgo#^`AeNSrv{XekwgqbK~NwJ?mU?!y_quOhk{#U-D>(dC#aQP?XA zY=08UEppSXuA->cEN5z>!FTI6pyL!!-Oui5Cj@l6CRq22zrM)m(%nv4V}_1?hUdy_v(QOctxM+|j(w&Z^ZuIGnUg1H$6ipZ#NEUy z`{siKbx9I(0e7%nieFO~WB4#%MFthtnl_chLnEMs2=SliGoo63%FYpcfAI>a;Ajx5G6Sf0S~C5rszFvH9m*Cg`r-D~FCc%cFY{e5S~H4s z`v>kH+f!9)jxzWb%WPSU0K|lX<6s{kK$z`cn{0&wXqa@A-tfZG4{3 zr(J{8j-e_q4tcFK+_?TLFM)JN(l~c@MVV@(F29`s8f#eM95@cndDff5`nb{H*NdGI zy=XTTaFX`ra(;PrGaPnE0=g; zF6r%h0n|{(MY;P0(LWxdOY+SK zm~4_0kqMS-Ev0vZT!ZM{rrl~nI<7LrKaW(~1MFVVG5{nzuD4c}U-A`?*Rls*@qhc7 zS8v!B+Cf$n?)$Hs${>b{lc0!lJA0Xo0XF*thxAT!ryENt8K4&jQM~s}!q3-y)na7g z0-JZn17o7%G_poVv}mmE5J%44UWFuI0@i5?pGe8iDu?N=8RK1QU7wWui@E0(Egyr+ z^BXdZp9xRsJ~yBdRC7xVtM!Rx!6ZEnUGTEooW;*8y56W;Y^j7webSGO>K7wLCE5&< z)qUV(TKGP8esIl$C5WzV_}5UkA*!dq!}{xoFgu8N=Hx)rjbXr)Q0rQRw!T#wI2BN; zaB42x|I9X27!#+l28J^@9rphF$09=h=6|#jxW_ZfW`NFsMPyJzQUS5X+OCAke%L2n z06e*`VfhE$#fPY(_waAH0UGm`2{ynwgCqC5;q|Dj8uiT=NwdiS5g8THmCs8I;{=Wi znkW=sFbsxMt1JWgXW*S#IL7Y+DeO+QS}Yq?`U&OxZ)|ILukLhdw<&|%LPDM2H@i*z zQ9OqjoYFDPv$y8u{52W8u7lB2IZijo%apBn%Lt>ki*sfTzopgAKS zCMszD&~FDOr0t5*)5zDS4LXcWQN+=Nt{x-WP)`WTlSlH&rb0>z~X4 z?-byeoKxI7PK>i!?A#<|Y$n!%Mg{?6_6XvIb0r}^#VF=S{Y);9hcE#(?w(dRaBB_Dops=$SiT+NCSQ&6+nL5(J97e9Q4Ta%q zQ(m9a`Be*1Y$9pz zAPQ*(U#p#*b=%=Ug&x^ggGt``ca+cg9McYE{4gHMYiaB`o34xs-%WgF&eK(a6>p@3 z*CEaoav}yiowo&IR6Bxib&pk^uBMB2RY5{D-kqz=JZFk9AqzLKA`*DrPs(xe;NLW1 z$9ultZvPh4RESrT;by#6iCQqaI|caBCc-wweo7k&DHe0r=5UrPh2!jco2qkV`?aP3 z#r<&HEbQfc!U({dQDSW1ZVFWG^)|%Ux_a-+eAcbl!hxaPZ0EBjM7^|~IfK8t1@yx} zET}Yohn9l8a8=QP(W{(Z+xhN0^<0ww2a4Z{-!ML-2C9j^G_o8J zT7^&c<_GaDz&UH1iOc>b)*@RtRj_%o4u%0t-G>sk2({sG+C84wBAEFb`ON*(cc|dC zdKQ))2(^JHt@7*-OV?a$xISBAD8%!MQ<43{1=W^@dWeZsiKU7~%n4u%moz&-)ptwl z?pFD$^`C2oUQ4Z9F5P?c)|&P4k(MfA7uq%CzuJEr=0$Z*t?6&1tNrP%mU{VYKESN= zUdb>P)kjB;WHM_r`GW`dnmwy9QtQ0F3OMmgjXtOn@Ds==v)fqie|egqMWf(JsfZ%* zP%=zv--iR|_0E>;8M(vtgu~1pd4uVJ8znBtlB=qrs@gDF5f_|j!U{4k>bRMVsgSDb zzA`xOvSu6!P?N@or`5!sGclgO395zk!v@mo4>oaj-0izqd>-9RW+s-k^N+zJR@s2f z8>6vlTtP2L^0~&j-M3B|jljxeICf{>Kq}FgUgt3UB?$Jt9LB2AuR#RAoKN>=JHXng zhKKs$SV_$_i$SthdrR~B32u@VW-m9JeOjtyv02WS+nG<=zR^H7yNhV_#=E~RyGVS! z&$h}q%h`I;zTtxUoh$ylH|M|S8h2ORn!3>~xi6a%47pVTJeoL1Xg|t@~N+yd?id#KA_DdiE`erP#SO&Mn z#GHKgL)_~$ggNzwLo^xAs0SZb_FKUfhT<(^=Oc$3PYV_&4v|q-pFRq(Awf{jN!r9h zXPQ7?#o)8@6YXr|CE%By4b*M1o4H@x+wB~Smq8+ z>HE7TJ1aq_(PX=9h3>S{=9W~ctwF*0BSXP6!fn+(3xu>qI4H$rmX?=hcrwuy`o`yAqdF zmJQ0skz96fXwP7;*N&+iJQQDIb-T@~aP$ExZUomiD^=w$H4gduDGafOt!K?{Q*;Lg%y3W!mlDbGi5!TPBSYot_Sbf7?qx4~6mEOb&40I<1e|==$cQNl`## zdkhs>hddY`Ti^S#%`7rA;6uGuPtzoF;{DOY5UM)a!OmP{vz zWHG7p889SzX!)j^;nkfJ-Imy46&k0O<-9{lRO5@KiD~%PxB~6{UVF8Gs2sm#Y(vk< zsXx-ANQSMhv%;e1-0jUOV2kc9>frlZ_UVvRiJa^{r43HY+jGJAm_T*jgQO3)oMSYl zy;$u`l04-7cBtxKsv3YI9OK@93s_Smm~1)=m4Pe~p#|Q4@&TzuM+u0#%k{sD|D8sL z2x7>v`*fUNGT3^$MIM5;Oh*gR_WPVM6MF;O#uRxyPWB}xW38uzVh4KMKObakMvRwb zNjd-{9Vj#$A~%DK=VOFTezqPK7Zh2i9L#(OiOy*`=e0;~;7T}ZNb@DhS*<<7q?p#$ za-%4MxaKNHnAo8%!I@3^Uq0`FXG`i zz;N-gCm6-0H4vUTT8a&X3VF%)O*>GgeTi~M)gTLMUFcE>S@!Aq*O4M1pG7?$tUI=m zotq4J74H@yWl+Sh=(Qcjh*OfwUC$J>?oOc$^izOd9ajh1J}kt%*o}*H<~3^dn~tfs zNQkQvt(T^oT${l0TJ0*Nq}^gG2jr7Uo8B&om#-W7e7o(jH*Yop(Q6p^#63$V>&xSg z*}v!ltr(oeW?Cy}KQmY8if~HjNc*d->IHtZB58g@=X)SeL*3Q+&8Cn!+=}5yL0H^= z?QV+u*_S(rHjAG-L4p!@xjARP%yCtO3sj;Hkz#3kHPwumSN@@8($l58w;N6{%rkp1 zLQZYZ?iS__Fxf>&)y}?Xc|Zm|E_JRO$vnYjCcB=s#*EeZs*Pmx4ubbX<%XJmquyP!4;6*^)L^O5@Elap3tok^^9s!v>4m2x;EZVq;_7o z-ze!GbvzWJV$7Wu+s%>K;!H-mn$g2r5j(*bgLK;=MlYHAhz;(3sxpm7rFZ&^_xUy0 z72?sZTz@v3!Wt*!W=(b$5aR_ET0RH7lZaW%akAq(cioEmLb2MgR#|LQmz>+>MoqYQ zms{;}Vhv=gIu_ACo?8SP=*-sFtXp>b@Qe8gFGTL9SG~4jWb8wIOYzq~AyXFeYD1aV zFGGulFqF#t=q=)AQ<}dVQ>&HS75fFfZWLdJD^n*+PZ5y9}6RL;^~!Zuik}W zh5mh&TyiZ(5y3n(w;S0>eY%&wE#$)|u%Poex_%se;f;zwgRvKME5>`uRY-W<;N(L< zLl(sB)LS1G?BypgnB+h1E7_wSe-!*4ak~{mkR8f`CSd_Z7H5T#5c2>O6LYKlq;T^J=gpb?qrZZc}gMB zzWOkj>pY`lN}@1z@K?^hpIfYeevbcpCz4N*vi@zLqb%05R7uwX(r!BWU6P#71lAyz z&=F(Sb2>$&wdY@T=okk0e}31051Ilqjr%rQtEaH)cmA>1MfCXSn8FxO%y@U3ZdZV=>tf>29B{t|id zyI)(cl}7X7$2@p#c)po;^oUDwzt{MKw2P1<;W}FkbB^bYup7`-w{SV&t^J2SPfV72>YpB1#3cw84;;=V2B4+q zDVi4}xWuuO7lgF@PFrXtrDMyy2L+7F18B~=?{8|6r_nXwtb(1mR{S@ANThan;8M%Y zk}8O`ur^VN63VU@V2N7oj6ay_>l3j>HsR&IocW!`8R%!qF}S;26V9_iqETZu~_POnS%l;%f!g9}YRK88lA z^rFDgC-Tl!l2zP^T3L6TgOZ%w^;=<1`IqwrwYCQ9PdPvVZ8Pu#4?f0BuGWTZ3u+e` z8p4OoXT4XjbFF6K(Mpo5D@slmFB-SoMvu-l52tABK+5Dey*ti&yFL;T%y}W=(J4BU zTt^@%LVLhHV6XgAjsuqIT;fU#p*oJ9_wK_u+Mq1S)dwc!G2|Jf-PUV!!_^hZp)(}e z-@A=JF8_5B13_Oa4!P9k$JA|OfuU<3Z`rEaA`(Pi4Khs!q-Oa8JbGIWtCyY}+wT=6 z&OT3VI@fJ{Q3O`JeEvl#x0iX$xZl;yof=HQa$Q5pZ&kYVnIgpY7`IJ>n5&6&`iKfE zMRgPo@Y2%_egF^w8RUuz0!%dKZka8Ip^mGeR!mL8a{ zu_@9P?q62%=P@;OO(1z`!6;);BeIC)`zD{k-cVwEA||ZD;VrAKf2^D1(U9W8$XUX|=M$E(-~TT-he*WWWYKpR+A!nK3A$QTNguN@I^Uea!E{<{z;3gZ z#!Z-OVjQYS)G3|Dm;2ag*V=dE0ttDo55mAO# zVjg^h5eMo$+2QW;%zr;Ao!3RA_f1)But;*$tfttVMX#&4T>lf;g0SSPZO(7B#gj_f zp)}ix>yx|V|ALCB9Uz?v`zsmxQSE=n5BayBaNJ+l$?0>R?eusvC4kAMNTiH^4tsW^ z0ozWJA>A_zz-AvBo!*tHb=Y|}o~{^OQmaQ6BpQ&+lh-Wf@!P(VW{qhHd$-{QUgCh4 zUvw8&u}yxMSOSunppxTRQm49TI(OLBr;3|N`EPZiki(3yX$Mg)t9Xd|t4#-Y)@)ny z+AQ@ftoEqyd4?7aPy7n~OFuG|KKVW39Enspw1#jAk?VHcD{@*x@!Rj*4{s3He~oUMl(Hrv?pewT-}Dlz2Lz(O2#K!L!;7c5XH-kRC0 zU@m1Lw@qsDe1!ay>9eo%&lRj970$WEJ9l8$6B!L6y-a}{GnUlV{}%N#VP$_6*SL<@ za!eN35LZGoL9l!6u<`YZ9-6<@2zBH+$dAUwED*L%47wF0l^=OD|HC5+CH6P)dlYkjLS!@Pz8Dp>$&UG z+bqILIO}gzHMPbpGf$3oJWMa<7?D|>YfO+au5BYSyk1jWAcFT|HW%<>Hbt{aU%^-9 ze;FPhtRWS_5FVdDSUKLPKb=l}nSeG6aok)pd+)dO)G}51=>IIdPd&;Q#|N$%LiPrD zy8HbQ9IiiF+Eu-)MBqvXsA)3Qst6}#68|3-z*VSTU1Jn9TxJFw@>hv5=KJF7VA`>$hBfv=7hTG)uxg+`cdPqcO_3Tqx3N}wRU1r$kgmb^02lqN8O6av+&@ead zD7kza+O-FHWccQv{QRg@l7KtNs+KK1->foaqS2l z$|xz2|F|z1eF{diLtHf~>62S_ZSJsZIO!+K`>L1y77$Hw{X{=*xlorKDdhfhxltSK zchsyckImZ0?kQcG>TZB6Fs=5T?a&h*_EkMv?aI{m3G`H3-rdN&Is{X|(;00YMnI?u zD3EZO7ZB^rzaTG=4b3x~m_RA>0%{Jvxp@Qn-BEdtH@8vqf#}0VgU+WoVpiqVcHzZW zWQ|?|lLmHU=HD_Ku}h%&oO~*}TK7NoPr0f0i;f_?t!y&2wS$B4gkdCHy1PsgI@;qO zPAjkj2^}4< z;KESY*tNe@V(B6+YHFFf(TvcNztXUK7m4uL<7cWeEMj6`_s-Oh@5hH|Mqj^;wcm1a zhR+IGyn53h|Ipr#-A_p(z*+r@FBAaJsT%xv=klOHksp0T!dp-+43`gfMA$cUoA=7I z#&M8f)SX3eBNUl%@g~rtb`*KW{WX6`z8b4q0(dpW>RVH#b2^0P?PK#l4VLCe9fqsIxWJd@W!5SWgv)& zF>71%o5g44cde;q{ZJ@9e3>|96xbod$O5#wj0{?zd*!9#0I;a72JWj!OUGrj%_Ti2 zT@%RD(W zH-_nLFj!N0|BQ0rn3syIRE8Mtx zMwHu-)a-u{)EH=C%S9!yh>|dxNUM4_V}^{u`4-Awzfk0bV}9pNB@h2DI(^rx!KwQR z9|eIge|Op?PU91sTZC2e`rj)fs|j?r%~dLo-BF?0s%*zL z0VF_*!GqDUB?=%a837L)-(?K6(SdC_`wW)Q-6cCnRmgWiWAl*Jx|XybFGH2;52G3~ zTv;yoJioL`i4sTwFXC%-oTF%f&88nyfSdZRnNfM_aY6FqNfy^a*~+?lE;L#0Dh=&5 z#35%2;f@r+r>D@CvLFlsBK1@P%|=VYCW4ICxQwr}0iX~f01j}2NlMoZv@Fm6@aMdq zgxe$Je>L`&QEhcm*Jz+J3@@_Q~?R7PsB*x1!FSQ(3s=)%rrPuR~gw+UT4$TX?7#3;g)G~XN!A_I!Iu4O!6eb)W5|zC&#Ze+eZ>EvP z8e&`{g)$H&W<6VC_G1+VW-!5)h3%^?3}I)vijx9f5Z4ktopFOujQN%Z%pwIFqQZN<9iWIz!&viXA7p;F z`Spi72&W%>_(nbh?my3g_D~%~F zc`(l$ojo*o+Cb#_m~4M&L|BuCI9WbGKDN(wcM}S8qoSW1Bv2Qm;g85fg3`P8WH92> zb(4oBxZB>dQ!G?51y+C)meZ*oI^FgbY2N&@OG}pKBt~Je9#eWjhVMW#Cb0UlC$qJ{ z8BlQ-|Cz2x7;r&j7iOLxpV;q`@6;-;i`X%;VU=04q>tTqpex=IYRs|LO=<%)L)r-P ztzh7OoHW3HZ)=;bzTulCTcMsYj!!1*zSQ|uo`!h3V@bh$#WKinj%Jwm5!X7lD+flQ9N*{}~S z^-i%96P#oDp7}N}NuMZf9pnwrgGvTV>G;V7&a7D?q>%hQUd_XSVQ->YZIJc=lej}( zRS#MA!LVcXkUl5%P92UIiC9d1F@vxO+yNn<-n&B>;vZ)ld71C@~aEzb2QC+hj_yzw-e!n-_WzA}YEZmNu}>wNBjZ@?E< z>m#3fV(|(qCou_yUyiU&U?Os5c`U6F-Viw#&l5=8cStzMf zuK)tEP8c+5q_u*|u!FH|9S;V+ZJ)=F@_>J631X88$cBnFR1?r>%1U~UrkD;L_FpHy z1|2d`%6p0cQfdcYO_SEStpP4=kOGbdtKyGMfiawYdeD4uTLF)Z?+Qp2&BbY&R&X{ZApqx&j4pHn&P%z z_+@>TCz6F*H-kqjC)xZ@^HWBagi0uW@4W!MP zK9B~-)(O+^`pZLro%~17Jq*?CJJol9B3CY!e46WdChzrsNbQ4ybf4|dZw{DzA8Ig) zm-}}aHtzC+Tmb#!KYGZnKJLLhzu$Mad#ej{jp;hawM%XVXt4I6oR$e{4^z}U@BBsd zQDbFh8baU^p}Pg|d+j6}bte+PRMJ?kyQg%rr*{_PUxN^aZ*E&6R<$&pSic3 zoDR~T|O zRvIHLN%w%q`9S@3>wiAwg;_Q*{*2sus{{wOP0rgW?^UYIw&>j**Yq>Il7v&MWArQ) zW)(i~2Vo|!&QmH|O@4DFaHX2Myn>PdrYfVRhyxHeMq~qz$F)V$h|H3$PAuAv`}gOU z$FCB-ARZBEKdrhw8vv|eMQVg6YzGtLX0@BNDc^~gk${1uQmQrBvXdtwsI%_9Sl&e- zjKcTi0ch=aO7rWQA8~rOeA7)eRUGI1G?i`ZJs#IyU#ewYz90>cw-=mV6@qT{_L zx>w1i1&izzJrAVUP_ctRRz^Z!?R~aMBy@xLUNY2?G3vBvv1KVbcdVsFbgs$kwR}m3 z;eAm!m^jWNVsO@_4(D@mwWzUQrrS$$l1XOooW8pYvx{+LlIajadf`?HHh?(XdF6t~yG?v5y# zJQjOAB4bJAra~}Md#tEKNL#9Lx-#t`Rqe1s-Q-5gf|Cw)D(&P~@DKbvSUPKbf{QQ_ z_W7Wi77XzSbFJWYY9)u*H|=^$T|4H@P}D(Sguz4XZhog#`d3g7Q&L5x?QWgUKc5L6}qkPY0E#@yntR#AT%)U!R>1F@n+ zYj6t}Rg+xV{M`@tKz0(-o z#AWBRo6c^{4&2Jn2ei>#H0i<{ZZf5%Byq*hU>N)&GQ{-2s;Sh|YFfnKHEVZiPH07W zcd20>Y(u^7J72lP0($JcA^;Ws8WTil(-b6cb|Vb9uMjy!1RJ`P?uM_2Gk zKMOB#97UaKnywzYGJyaJwPi5j_L{>dbzW;mXRqyve}P2cPyWmq>gk+fMJmN6dY@|(Ju`&w?y()yg##s>uIz);X%lE5chRvwqEhI` z2$?t=Xm|gv;d@vcD~=C1IeD7H_loQ9Pc+K56Ztj$(-pbtGy#!}mJ1*b8wYt_v}Phg zWrqOfYSm)y!G6r^6}NK}0+$^UwzFiZ&lRjbBHWgU58OLBBrJBmOK*Y(Ia=Npl2N4Y z1>3$o`EmHBUf>W}Jyfp!EIJ}Pmk>^zU}7t)HU0C%#No`JXx^$;AOgj{)O1o5^8vgo(%-|;AIne22B(HugPtsVxRrDbD&K9S=h zK_3)=MYlOff7n3Tf(RvBPwMG{8z zoFDTB#08HBJ4TB3w3gVXN(_1kl_Op4myZoX$SFoirjb$XZAhDoA<~j>Q?z*?3?Vlc zWwq{hz*+fC^fmHbwS^VlYzcv!Aqx!xC#vjDai2T?bYx`Uowhz6A%2c?7)_t}I7X0R zKSwL_2_sI{6=d?8L_b3?4!kgF0Q9tJSc&~0)ZT#X0&2FSkOaKW>}0>s6uRt^(chBg zbP+QS*LoY}H~GesOqd?MeOb8|s_`*8?GiDq4hgahPc(yK8YwZ37!kX8ivJA&(M)Le z+IrCe=M&y2qO9+{(a5XxW5A!wUUp3;aVH4Pyvr0Eo?C-aR3Z6Rn?1CVKWnf#fD!h) zgcfrg1?n6=iD#c2VGq59_JF&$wmvk))HJ< zt0ncJ!@Qd~`Amrqh}Yb|~h9J1y}(4ISMpa6OeN_+7xZTJsl4kSMggH)Se%T%mmCjv&JVDklJl|(M)oAViimRu2kj4a011aj zDpbSre9iC-evlJmz+JV2aGuD9r*Hp~liS0>t-Ya6;ucf4wAzp6IR)Q+k>+gcTiiYo zvp1q;jjJb&c$S%KPDkuvhTLT{$z|NtQ%!B5!|d%_S-!5mXf#KDn%mq#EFbRYQ~AY? zj4-PI_10&9=3Rl-_t+ozd^+={f$OJ@ktS=#9V z?rPERp}8}Bx83};?hYE!Ki=tB{$m^IBZZSJO3L*II)l`_?@+z>Bcqp=JuLqME;L-; zdD--+6=s+*u$Y*4<%*<4%2E;KYnh6()1c-XBiDRF=ooPFwWuixVA;(uwKm1BGlNFm zyB4wtSdjwFYtmp5VaV#8R-yO_rxQc(4m;T$)Pb3DMV}d~U)nWu<%{IbSy|#}y-;

    xb572@=Uz*0YBNgP}R!6f~R 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 aA$%o9Xm*`~xc>_JBPAjCsZ7iu@c#kn@#07T literal 0 HcmV?d00001 diff --git a/docs/idn_docs/triggers/available-event-triggers/img/trigger-path.png b/docs/idn_docs/triggers/available-event-triggers/img/trigger-path.png new file mode 100644 index 0000000000000000000000000000000000000000..ad9ce588df4a95530efe0707db963cb5c9dbf75c GIT binary patch literal 117068 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

    lj( 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

    ~}ME%G%LVRQz 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 cOHsd*I-eQIptY)#f^jiFIRA9=l}o! literal 0 HcmV?d00001 diff --git a/docs/idn_docs/triggers/available-event-triggers/img/va-cluster-failed.png b/docs/idn_docs/triggers/available-event-triggers/img/va-cluster-failed.png new file mode 100644 index 0000000000000000000000000000000000000000..f561afbce0f516869ce7a5b56dd537d65873cae3 GIT binary patch literal 32303 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

    8J|?3 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 UhFDdv0Dq*#6<(H#zV`k90I40*PXGV_ literal 0 HcmV?d00001 diff --git a/docs/idn_docs/triggers/available-event-triggers/img/va-cluster-unhealthy-source.png b/docs/idn_docs/triggers/available-event-triggers/img/va-cluster-unhealthy-source.png new file mode 100644 index 0000000000000000000000000000000000000000..7db3290008f00582efba519cf84424e7bb57ca87 GIT binary patch literal 40895 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 literal 0 HcmV?d00001 diff --git a/docs/idn_docs/triggers/available-event-triggers/img/va-cluster-warning.png b/docs/idn_docs/triggers/available-event-triggers/img/va-cluster-warning.png new file mode 100644 index 0000000000000000000000000000000000000000..bbfa92811b1cac6deaa4b00db8653fce0e2b7a37 GIT binary patch literal 22433 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 wQ>9YXh?ipd#reR$ML **NOTE:** There is no indication to the approver in the IdentityNow UI that the approval is for a revoke action. This must be considered for all usage of these APIs. + +![Flow](./img/provisioning-access-request-2.png) + +### Certification + +To provision removal of accounts acquired through Access Request is through Certifications. +> **Note:** Certifications cannot revoke access acquired via Role Membership or Lifecycle Changes. + +![Flow](./img/provisioning-access-request-certification.png) + +### Role membership + +Access defined in access profiles can be grouped into Roles and Roles can be assigned to identities using `COMPLEX_CRITERION` or `IDENTITY_LIST`. For information on how to set `COMPLEX_CRITERION`, see [Admin UI](https://community.sailpoint.com/t5/Admin-Help/Standard-Role-Membership-Criteria-Options/ta-p/74392) +> **Note:** Using `CUSTOM` Role Membership through Rules is no longer supported. + +Additionally, roles can be mapped from an authoritative source. + +![Flow](./img/provisioning-role-membership.png) + +### Lifecycle Management + +This trigger will fire when an account has been provisioned, enabled, or disabled. + +![Flow](./img/provisioning-lifecycle-management.png) + +To provision access with lifecycle states, the following steps must be completed: + +- Source Connector configured for `ENABLE` to enable/disable accounts and/or `PROVISIONING` to create/update/delete accounts. +- Source Entitlements mapped from Authoritative Source +- Source Entitlements mapped to Access Profiles +- Identity Profile using authoritative source +- Lifecycle states configured. To set up, follow this [guide]. + +### Password Management + +Password changes can be provisioned to target applications through password reset or password interception. Also, unlocking of accounts can be provisioned via password change within SailPoint SaaS. + +For password management setup, you will need to configure: + +- Source Connector configured for `PASSWORD` for password changes and/or `UNLOCK` for unlocking changes. +- Password Sync Group + +## Additional information and links + +- **Trigger Type**: [FIRE_AND_FORGET](../event-triggers-trigger-types.md#fire-and-forget) +- [Input schema](https://developer.sailpoint.com/apis/beta/#section/Provisioning-Completed-Event-Trigger-Input) diff --git a/docs/idn_docs/triggers/available-event-triggers/saved-search-completed.md b/docs/idn_docs/triggers/available-event-triggers/saved-search-completed.md new file mode 100644 index 000000000..72e1d3097 --- /dev/null +++ b/docs/idn_docs/triggers/available-event-triggers/saved-search-completed.md @@ -0,0 +1,28 @@ +--- +id: saved-search-completed +title: Saved Search Completed +sidebar_label: Saved Search Completed +sidebar-position: 9 +--- + +# Saved Search Completed + +## Event context + +![Flow](./img/saved-search-path.png) + +Users can to subscribe to Saved Searches and receive an email of a report generated from the saved search. For example, a user can save a search query called "Identities with upcoming end dates" and create a subscription to receive a daily report showing identities with an end date within 10 days from the current date. This event trigger can also notify an external HTTP application that a report generated from a saved search subscription is available to be processed. + +Saved Search Completed events occur based on the schedules set for saved search subscriptions. For example, if you have a scheduled saved search for Monday, Tuesday, Wednesday, Thursday, Friday at 6:00 GMT, this is when your HTTP endpoint will also receive a notification. This can be set using the `schedule` object in the [create scheduled search endpoint](https://developer.sailpoint.com/apis/v3/#operation/scheduledSearchCreate). + +To receive this event when a saved search query does not have any results, set `emailEmptyResults` to `TRUE`. You can also set the expiration date in the `expiration` field within the `schedule` object. Your HTTP endpoint will stop receiving these events when the Scheduled Search expires. + +Some examples of how this trigger can be used include: + +- Perform Quality Control, such as continuously checking for Separation of Duties (SOD) violations +- Respond to upcoming Joiner-Mover-Leaver scenarios, such as deprovisioning access before an employee's separation date. + +## Additional information and links + +- **Trigger Type**: [FIRE_AND_FORGET](../event-triggers-trigger-types.md#fire-and-forget) +- [Input schema](https://developer.sailpoint.com/apis/beta/#section/Saved-Search-Complete-Event-Trigger-Input) diff --git a/docs/idn_docs/triggers/available-event-triggers/source-created-trigger.md b/docs/idn_docs/triggers/available-event-triggers/source-created-trigger.md new file mode 100644 index 000000000..2cf766b2e --- /dev/null +++ b/docs/idn_docs/triggers/available-event-triggers/source-created-trigger.md @@ -0,0 +1,21 @@ +--- +id: source-created-trigger +title: Source Created Trigger +sidebar_label: Source Created Trigger +--- + +# Source Created Trigger + +## Event context + +Source Created events occur when a new source is successfully created via the API or the Admin UI. + +Some uses cases for this trigger include: + +- Provide evidence to show auditors that connector logic and sources are not manipulated outside of proper change control processes. +- Auto-configure new sources with proper owners using external data sources. + +## Additional information and links + +- **Trigger Type**: [FIRE_AND_FORGET](../event-triggers-trigger-types.md#fire-and-forget) +- [Input schema](https://developer.sailpoint.com/apis/beta/#section/Source-Created-Event-Trigger-Input) diff --git a/docs/idn_docs/triggers/available-event-triggers/source-deleted-trigger.md b/docs/idn_docs/triggers/available-event-triggers/source-deleted-trigger.md new file mode 100644 index 000000000..6352b461e --- /dev/null +++ b/docs/idn_docs/triggers/available-event-triggers/source-deleted-trigger.md @@ -0,0 +1,21 @@ +--- +id: source-deleted-trigger +title: Source Deleted Trigger +sidebar_label: Source Deleted Trigger +--- + +# Source Deleted Trigger + +## Event context + +Source Deleted events occur when a source is successfully deleted via the API or the Admin UI. + +Some uses cases for this trigger include: + +- Provide evidence to show auditors that connector logic and sources are not manipulated outside of proper change control processes. +- Alert admins in the event that a source was wrongfully deleted. + +## Additional information and links + +- **Trigger Type**: [FIRE_AND_FORGET](../event-triggers-trigger-types.md#fire-and-forget) +- [Input schema](https://developer.sailpoint.com/apis/beta/#section/Source-Deleted-Event-Trigger-Input) diff --git a/docs/idn_docs/triggers/available-event-triggers/source-updated-trigger.md b/docs/idn_docs/triggers/available-event-triggers/source-updated-trigger.md new file mode 100644 index 000000000..c7abc39e9 --- /dev/null +++ b/docs/idn_docs/triggers/available-event-triggers/source-updated-trigger.md @@ -0,0 +1,21 @@ +--- +id: source-updated-trigger +title: Source Updated Trigger +sidebar_label: Source Updated Trigger +--- + +# Source Updated Trigger + +## Event context + +Source Updated events occur when configuration changes are made to a source. + +Some uses cases for this trigger include: + +- Provide evidence to show auditors that connector logic and sources are not manipulated outside of proper change control processes. +- Trigger review of an updated source. + +## Additional information and links + +- **Trigger Type**: [FIRE_AND_FORGET](../event-triggers-trigger-types.md#fire-and-forget) +- [Input schema](https://developer.sailpoint.com/apis/beta/#section/Source-Updated-Event-Trigger-Input) diff --git a/docs/idn_docs/triggers/available-event-triggers/va-cluster-status-change-event-trigger.md b/docs/idn_docs/triggers/available-event-triggers/va-cluster-status-change-event-trigger.md new file mode 100644 index 000000000..996136337 --- /dev/null +++ b/docs/idn_docs/triggers/available-event-triggers/va-cluster-status-change-event-trigger.md @@ -0,0 +1,44 @@ +--- +id: va-cluster-status-change-event-trigger +title: VA Cluster Status Change Event +sidebar_label: VA Cluster Status Change Event +sidebar-position: 10 +--- + +# VA Cluster Status Change Event + +## Event context + +VA Cluster Status Change Events occur when a health check is run on a VA cluster and the health status is different from the previous health check. This trigger can be used by customers for monitoring all the health status changes of their Virtual Appliance (VA) cluster + +Some examples of what you can do with this trigger: + +- Create real-time health dashboards for VA Clusters +- Notify an administrator or system to take the appropriate actions when a health status changes + +Additional notes about VA Cluster Status Changes: + +- VA cluster health checks run every 30 minutes. +- This trigger will invoke on any VA cluster health status change (i.e. healthy -> unhealthy, unhealthy -> healthy) +- More information on [troubleshooting virtual appliances](https://community.sailpoint.com/t5/IdentityNow-Connectors/Virtual-Appliance-Troubleshooting-Guide/ta-p/78735) + +Healthy Cluster Source + +![VA cluster source healthy](./img/va-cluster-healthy-source.png) + +Unhealthy Cluster Source + +![VA cluster source unhealthy](./img/va-cluster-unhealthy-source.png) + +Warning - Unhealthy Cluster + +![Warning unhealthy cluster](./img/va-cluster-warning.png) + +Failed - Unhealthy Cluster + +![Failed unhealthy cluster](./img/va-cluster-failed.png) + +## Additional information and links + +- **Trigger Type**: [FIRE_AND_FORGET](../event-triggers-trigger-types.md#fire-and-forget) +- [Input schema](https://developer.sailpoint.com/apis/beta/#section/VA-Cluster-Status-Change-Event-Event-Trigger-Input) diff --git a/docs/idn_docs/triggers/early-access-event-triggers/identity-deleted-event-trigger.md b/docs/idn_docs/triggers/early-access-event-triggers/identity-deleted-event-trigger.md new file mode 100644 index 000000000..59069d3d6 --- /dev/null +++ b/docs/idn_docs/triggers/early-access-event-triggers/identity-deleted-event-trigger.md @@ -0,0 +1,23 @@ +--- +id: identity-deleted-event-trigger +title: Identity Deleted Event Trigger +sidebar_label: Identity Deleted Event Trigger +--- + +# Identity Deleted Event Trigger + +## Event context + +![Flow](./img/identity-deleted-path.png) + +Identity deleted events occur when the associated account with an identity is deleted from the identity's authoritative source. After accounts are aggregated and the identity refresh process finds an identity that is not correlated to an account, the associated identity is deleted from IdentityNow. For more information, see [Configuring Correlation](https://community.sailpoint.com/t5/Connectors/Configuring-Correlation/ta-p/74045). The Identity deleted event will contain any attributes of the identity as configured in the identity profile. For more information, see [Mapping Identity Profiles](https://community.sailpoint.com/t5/Admin-Help/Mapping-Identity-Profiles/ta-p/77877). + +This event trigger provides a flexible way to extend Joiner-Mover-Leaver processes. This provides more proactive governance and ensure users can quickly obtain needed access when enter your organization. Some examples of how this trigger can be used include: + +- Notify an administrator or system to take the appropriate provisioning actions as part of the Leaver workflow. +- Notify a system to trigger another action (e.g. deactivate an employee’s badge upon termination). + +## Additional information and links + +- **Trigger Type**: [FIRE_AND_FORGET](../event-triggers-trigger-types.md#fire-and-forget) +- [Input schema](https://developer.sailpoint.com/apis/beta/#section/Identity-Deleted-Event-Trigger-Input) diff --git a/docs/idn_docs/triggers/early-access-event-triggers/img/identity-deleted-path.png b/docs/idn_docs/triggers/early-access-event-triggers/img/identity-deleted-path.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f379a887b104b7a50cf803949d39eee0502d9 GIT binary patch literal 96171 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 Z$PCXD#+C`q(L30emYSYwwX*ex{{uBq3d{fi literal 0 HcmV?d00001 diff --git a/docs/idn_docs/triggers/early-access-event-triggers/source-account-created-trigger.md b/docs/idn_docs/triggers/early-access-event-triggers/source-account-created-trigger.md new file mode 100644 index 000000000..59a3dd8a7 --- /dev/null +++ b/docs/idn_docs/triggers/early-access-event-triggers/source-account-created-trigger.md @@ -0,0 +1,18 @@ +--- +id: source-account-created-trigger +title: Source Account Created Trigger +sidebar_label: Source Account Created Trigger +--- + +# Source Account Created Trigger + +## Event context + +Source Account Created events occur after a new account is detected during an account aggregration and refresh from a source. This trigger cannot determine whether account creation happened on a source or in IdentityNow. It omits events related to IdentityNow accounts, such as the IdentityNow Admin. + +Use this event trigger to watch for new accounts with highly privileged access, such as an account created in Active Directory Domain Admins. + +## Additional information and links + +- **Trigger Type**: [FIRE_AND_FORGET](../event-triggers-trigger-types.md#fire-and-forget) +- [Input schema](https://developer.sailpoint.com/apis/beta/#section/Source-Account-Created-Event-Trigger-Input) diff --git a/docs/idn_docs/triggers/early-access-event-triggers/source-account-deleted-trigger.md b/docs/idn_docs/triggers/early-access-event-triggers/source-account-deleted-trigger.md new file mode 100644 index 000000000..aa7be067e --- /dev/null +++ b/docs/idn_docs/triggers/early-access-event-triggers/source-account-deleted-trigger.md @@ -0,0 +1,18 @@ +--- +id: source-account-deleted-trigger +title: Source Account Deleted Trigger +sidebar_label: Source Account Deleted Trigger +--- + +# Source Account Deleted Trigger + +## Event context + +This trigger executes whenever an account is deleted from its source during an account aggregation operation. The account may have been manually removed or deleted as the result of a provisioning event. The trigger cannot determine whether the account deletion happened on a source or in IdentityNow. It omits events related to IdentityNow accounts such as the IdentityNow Admin. + +Use this event trigger to watch for deletions of authoritative accounts, such as an account deleted on Workday. + +## Additional information and links + +- **Trigger Type**: [FIRE_AND_FORGET](../event-triggers-trigger-types.md#fire-and-forget) +- [Input schema](https://developer.sailpoint.com/apis/beta/#section/Source-Account-Deleted-Event-Trigger-Input) diff --git a/docs/idn_docs/triggers/early-access-event-triggers/source-account-updated-trigger.md b/docs/idn_docs/triggers/early-access-event-triggers/source-account-updated-trigger.md new file mode 100644 index 000000000..1b6add0fe --- /dev/null +++ b/docs/idn_docs/triggers/early-access-event-triggers/source-account-updated-trigger.md @@ -0,0 +1,23 @@ +--- +id: source-account-updated-trigger +title: Source Account Updated Trigger +sidebar_label: Source Account Updated Trigger +--- + +# Source Account Updated Trigger + +## Event context + +This trigger executes whenever one or more account attributes change on a single account during an account aggregation operation. The trigger cannot determine whether the account update happened on a source or in IdentityNow. It omits events related to IdentityNow accounts such as the IdentityNow Admin. The following actions are considered updates: + +- Update account attributes +- Enable or disable an account +- Lock or unlock source accounts +- Change source account password + +Use this event trigger to watch for updates to accounts that add highly privileged access, such as an account that is granted privileged access on a sensitive source. + +## Additional information and links + +- **Trigger Type**: [FIRE_AND_FORGET](../event-triggers-trigger-types.md#fire-and-forget) +- [Input schema](https://developer.sailpoint.com/apis/beta/#section/Source-Account-Updated-Event-Trigger-Input) diff --git a/docs/idn_docs/triggers/event-triggers-filtering-events.md b/docs/idn_docs/triggers/event-triggers-filtering-events.md new file mode 100644 index 000000000..3e53f1be4 --- /dev/null +++ b/docs/idn_docs/triggers/event-triggers-filtering-events.md @@ -0,0 +1,165 @@ +--- +id: event-triggers-filtering-events +title: Filtering Events +sidebar_label: Filtering Events +sidebar_position: 5 +--- + +# Filtering Events + +## What is a filter + +Many triggers can produce a staggering amount of events if left unfiltered, resulting in more network traffic and more processing time on a subscribing service. Most of the time, your subscribing service only needs to be notified of events that contain a key attribute or value that you are interested in processing. For example, the Identity Attributes Changed trigger will emit an event every time an identity has a change in attributes. This can occur during the mover process when an identity changes departments, or a manager is promoted resulting in several identities receiving a new manager. Rather than inundate your subscribing service with every identity change, you can use an event trigger filter to specify which events your service is interested in processing. + +## Benefits of using filters + +Network bandwidth and processing power come at a cost, especially when using managed solutions like AWS or no code providers like Zapier. Without filtering, a subscribing service would be sent every single event that the trigger receives. The first thing that any subscriber would need to do in this scenario is inspect each event to figure out which ones it needs to process and which ones it can ignore. Taking this approach with managed providers that charge per invocation, like AWS Lambda, can become expensive. Furthermore, some no-code providers might put a limit on the total number of invocations that a service can make in a given month, which would be quickly exhausted with this approach. Trigger filters take the filtering logic out of your subscribing service and place it on the event trigger within SailPoint, so you only receive the events that match your filter criteria. + +## Constructing a filter + +Filters are constructed using a [Goessner JSONpath expression](https://goessner.net/articles/JsonPath/). + +### Expressions + +JSONPath expressions specify a path to an element, or array of elements, in a JSON structure. Expressions are used to select data in a JSON structure to check for the existence of attributes or to narrow done the data where the filter logic will be applied. + +| Expression | Description | Example | +| --- | --- | --- | +| $ | **Root** - The root object / element. | $ | +| @ | **Current** - The current object / element of an array. | $.changes[?(@.attribute == "department")] | +| . | **Child operator** - selects a child element of an object. | $.identity | +| .. | **Recursive descent** - JSONPath borrows this syntax from E4X. | $..id | +| * | **Wildcard** - All objects / elements regardless of their names. | $.changes[*]| +| [] | **Subscript** - In Javascript and JSON it is the native array operator. | $.changes[1].attribute | +| [,] | **Union** - Select elements of an array. | $.changes[0,1,2] | +| [start:stop:step] | **Array slice** - Select elements of an array. | $.changes[0:2:1] | +| [:n] | **Array slice** - Select the first `n` elements of an array. | $.changes[:2] | +| [-n:] | **Array slice** - Select the last `n` elements of an array. | $.changes[-1:] | +| ?() | **Filter expression** - Applies a filter expression. | $[?($.identity.name == "john.doe")] | +| () | **Script expression** - Applies a script expression. | $.changes[(@.length-1)] | + +### Operators + +JSONPath operators provide more options to filter JSON structures. + +| Operator | Description | Example | +| --- | --- | --- | +| == | **Equals to** - Evaluates to `true` if operands match. | $[?($.identity.name == "john.doe")] | +| != | **Not equal to** - Evaluates to `true` if operands don't match. | $[?($.identity.name != "george.washington")] | +| > | **Greater than** - Evaluates to `true` if the left operand is greater than the right operand. Works on strings and numbers. | $[?($.attributes.created > '2020-04-27T16:48:33.200Z')] | +| >= | **Greater than or equal to** - Evaluates to `true` if the left operand is greater than or equal to the right operand. | $[?($.attributes.created >= '2020-04-27T16:48:33.597Z')] | +| < | **Less than** - Evaluates to `true` if the left operand is less than the right operand. | $[?($.attributes.created < '2020-04-27T16:48:33.200Z')] | +| <= | **Less than or equal to** - Evaluates to `true` if the left operand is less than or equal to the right operand. | $[?($.attributes.created <= '2020-04-27T16:48:33.200Z')] | +| && | Logical **AND** operator that evaluates `true` only if both conditions are `true`. | $.changes[?(@.attribute == "cloudLifecycleState" && @.newValue == "terminated")] | +| ! | **Not** - negate the boolean expression. | $.identity.attributes[?(!@.alternateEmail)] | +| \|\| | Logical **OR** operator that evaluates `true` if at least one condition is `true`. | $.changes[?(@.attribute == "cloudLifecycleState" \|\| @.attribute == "department")] | +| contains | **Contains** - Checks if a string contains the specified substring (case-sensitive). | $[?($.identity.name contains "john")] | + +### Developing Filters + +Development of a filter can go faster when using a tool like an online [JSONpath editor](https://jsonpath.herokuapp.com/). These tools can provide quick feedback on your filter, allowing you to hone in on the exact filter expression you want before testing it in IdentityNow. Be aware, however, that these online tools might have subtle differences compared with SailPoint's implementation of Goessner JSONpath. Always test your JSONpath filter in IdentityNow before using it in production. + +Start by opening a [JSONpath editor](https://jsonpath.herokuapp.com/) in your browser. Make sure that the correct implementation is selected, if there is more than one option. You can then paste in an example trigger input and start crafting your JSONpath expression. + +![JSONPath editor](./img/jsonpath-editor.png) + +Most of the examples provided in the operator tables above can be used against the Identity Attributes Changed event trigger input, as seen below. You can find all of the input/output schemas for the other available triggers in our [API specification](https://developer.sailpoint.com/apis/beta/#section/Available-Event-Triggers). + +```json +{ + "identity": { + "id": "ee769173319b41d19ccec6cea52f237b", + "name": "john.doe", + "type": "IDENTITY" + }, + "changes": [ + { + "attribute": "department", + "oldValue": "Sales", + "newValue": "Marketing" + }, + { + "attribute": "manager", + "oldValue": { + "id": "ee769173319b41d19ccec6c235423237b", + "name": "robert.brown", + "type": "IDENTITY" + }, + "newValue": { + "id": "ee769173319b41d19ccec6c235423236c", + "name": "mary.johnson", + "type": "IDENTITY" + } + }, + { + "attribute": "cloudLifecycleState", + "oldValue": "active", + "newValue": "terminated" + } + ] +} +``` + +## Validating filters + +When you are finished developing your JSONpath filter, you need to validate it with SailPoint's trigger service. There are two ways to do this: with the UI or the API. + +### Validating filters using the UI + +To validate a filter using the UI, subscribe to a new event trigger or edit an existing one. In the configuration options, paste your JSONpath expression in the `Filter` input box and then click `Update`. If you don't receive an error message, then your filter expression should be valid with SailPoint. + +![UI filter](./img/ui-filter.png) + +### Validating filters using the API + +You can validate a trigger filter using the [validate filter](https://developer.sailpoint.com/apis/beta/#operation/validateFilter) API endpoint. You will need to escape any double quotes, as seen in the example payload in the API description. Also, you will need to provide a sample input for the validation engine to run against. It is best to use the input example included in the input/output schemas for the event trigger you wish to apply your filter to. Please see [this table](https://developer.sailpoint.com/apis/beta/#section/Available-Event-Triggers) to find the schema of your event trigger. An example request is as follows: + +POST `https://{tenant}.api.identitynow.com/beta/trigger-subscriptions/validate-filter` + +```json +{ + "input": { + "identity": { + "id": "ee769173319b41d19ccec6cea52f237b", + "name": "john.doe", + "type": "IDENTITY" + }, + "changes": [ + { + "attribute": "department", + "oldValue": "Sales", + "newValue": "Marketing" + }, + { + "attribute": "manager", + "oldValue": { + "id": "ee769173319b41d19ccec6c235423237b", + "name": "robert.brown", + "type": "IDENTITY" + }, + "newValue": { + "id": "ee769173319b41d19ccec6c235423236c", + "name": "mary.johnson", + "type": "IDENTITY" + } + }, + { + "attribute": "cloudLifecycleState", + "oldValue": "active", + "newValue": "terminated" + } + ] +}, + "filter": "$[?($.identity.name == \"john.doe\")]" +} +``` + +## Testing filters + +If your trigger filter is accepted by SailPoint, then you will want to test that it actually works. You will need to configure your trigger subscription to point to the URL of your testing service. [webhook.site](https://webhook.site) is an easy to use testing service. Just copy the unique URL that it generates and paste it into integration URL field of your subscription. The easist way to test a trigger subscription is to use the UI to fire off a test event. + +![test subscription](./img/test-subscription.png) + +Once you fire off a test event, monitor your webhook.site webpage for an incoming event. If the filter matches the test input, you should see an event come in. If the filter doesn't match the input, then it won't fire. It's good to test both scenarios to make sure your filter isn't always evaluating to `true`, and that it will indeed evaluate to `false` under the correct circumstances. For example, the filter `$[?($.identity.name contains "john")]` will match the test event for Identity Attributes Changed and you will see an event in webhook.site, but you will also want to make sure that `$[?($.identity.name contains "archer")]` doesn't fire, since the test input is always the same. + +If you want to control the test input to validate your filter against a more robust set of data, then you can use the [test invocation](https://developer.sailpoint.com/apis/beta/#operation/startTestInvocation) API endpoint. \ No newline at end of file diff --git a/docs/idn_docs/triggers/event-triggers-overview.md b/docs/idn_docs/triggers/event-triggers-overview.md new file mode 100644 index 000000000..6a2163aad --- /dev/null +++ b/docs/idn_docs/triggers/event-triggers-overview.md @@ -0,0 +1,20 @@ +--- +id: event-triggers-overview +title: Overview +sidebar_label: Overview +sidebar_position: 1 +--- + +# Overview + +## What are triggers + +The result of any action performed in a service is called an **event**. Services, like IdentityNow, are constantly generating events, like an update to a setting or the completion of an account aggregation, to name a few. Most of the events that a service generates are of little value to clients, so services will create event triggers, also known as web hooks, that allow clients to subscribe to specific events that they are interested in. Similar to news letters or RSS feeds, each subscription tells the service what event a client is interested in and where to send them the notification. + +## How are triggers different from APIs + +The biggest difference between event triggers and APIs is how data is accessed. Requesting data via an API is an active process, while receiving data from an event trigger is a passive process. Clients that want to get the latest data via an API must initiate the request. Clients that subscribe to an event trigger don't need to initiate a request; they are notified as soon as the event occurs. This is similar to keeping up with the latest world news on the internet. You can initiate the request for data by opening a news website in your browser, or you can subscribe to a mail list to receive the latest news as it happens. + +## When to use triggers + +Event triggers are best used when you need to react to an event in real-time. Although you can set up a polling mechanism using APIs, polling uses more bandwidth and resources, and if you poll too quickly you can reach the rate limits of an API. Event triggers use less bandwidth, don't affect your API rate limit, and are as close as you can get to real-time. However, there are downsides to event triggers that should be taken into consideration. They must be reachable from the public internet so the trigger service knows where to send the notification, and they can be harder to configure and operate than APIs. \ No newline at end of file diff --git a/docs/idn_docs/triggers/event-triggers-preparing-a-subscriber-service.md b/docs/idn_docs/triggers/event-triggers-preparing-a-subscriber-service.md new file mode 100644 index 000000000..ef2a53080 --- /dev/null +++ b/docs/idn_docs/triggers/event-triggers-preparing-a-subscriber-service.md @@ -0,0 +1,34 @@ +--- +id: event-triggers-preparing-a-subscriber-service +title: Preparing a Subscriber Service +sidebar_label: Preparing a Subscriber Service +sidebar_position: 3 +--- + +# Preparing a Subscriber Service + +Before you can subscribe to an event trigger, you need to prepare a service that can accept incoming HTTP requests from the event trigger service. More specifically, your client service needs to accept a POST request to an endpoint of its choosing, with the ability to parse the JSON data sent by the trigger. There are many ways to accomplish this, but we will cover four of the most common types of client services you can build to handle event triggers. + +## Webhook testing service + +There are numerous webhook testing websites that will generate a unique URL that you can use to subscribe to an event trigger and explore the data that is sent by the trigger. One such site is https://webhook.site. This site will generate a unique URL each time you open it, which you can copy and paste into the subscription configuration in IdentityNow. Any events that the trigger generates will be sent to this website for you to analyze. + +![Webhook.site](./img/webhook-site.png) + +The purpose of webhook testing services is to make it easy to set up a trigger and see the data of the events that will eventually be sent to your production service. This can aid in the early development process as you explore the data the event trigger sends and how best to access the data that you need. + +## Native SaaS workflows + +Some SaaS vendors provide built-in workflow builders in their product so you don't have to use a no code provider. Slack, for example, has a premium [workflow builder](https://slack.com/help/articles/360035692513-Guide-to-Workflow-Builder) feature that will generate a unique URL that you can use to configure your subscription. Slack's workflow builder can then listen for events sent by your trigger and perform Slack specific actions on the data, like sending a user a message when their access request has been approved. + +![Slack workflow](./img/slack-workflow.png) + +## No code provider + +No code/low code providers, like Zapier and Microsoft Power Automate, make it very easy to consume event triggers and perform actions based on the event data. They are a popular solution for those looking to prototype or quickly create automated business processes, and cater to novices and advanced users alike. Each no code provider has documentation on how to create a new workflow and subscribe to an event trigger or webhook, so you will need to find the relevant documentation for your no code provider to learn how to set one up. Zapier has the ability to configure a webhook action that will generate a unique URL that you can configure in your event trigger subscription. + +![Zapier webhook](./img/zapier-webhook.png) + +## Custom application + +A custom application is one that you write in a language of your choosing and host in your own infrastructure, cloud or on-premise. This is the most advanced option for implementing an event trigger client service. Although it requires a great deal of skill and knowledge to build, deploy, and operate your own service that can consume requests over HTTP, it offers the most power and flexibility to implement your use cases. You can learn more about custom applications by checking out our [Event Trigger Example Application](https://github.com/sailpoint-oss/event-trigger-examples). diff --git a/docs/idn_docs/triggers/event-triggers-responding-to-a-request-response-trigger.md b/docs/idn_docs/triggers/event-triggers-responding-to-a-request-response-trigger.md new file mode 100644 index 000000000..0e1bab3b8 --- /dev/null +++ b/docs/idn_docs/triggers/event-triggers-responding-to-a-request-response-trigger.md @@ -0,0 +1,172 @@ +--- +id: event-triggers-responding-to-request-response +title: Responding to a Request Response Trigger +sidebar_label: Responding to a Request Response Trigger +sidebar_position: 8 +--- + +# Responding to a Request Response Trigger + +## Invocation response modes for REQUEST_RESPONSE type triggers + +You can specify how your application interacts with a `REQUEST_RESPONSE` type trigger service by selecting an invocation response mode in the **Response Type** dropdown when editing or creating a `REQUEST_RESPONSE` subscription. There are three response modes to choose from: `SYNC`, `ASYNC`, and `DYNAMIC`. These response modes are only available when the subscription type is set to `HTTP`. + +- `SYNC`: This type of response creates a *synchronous* flow between the trigger service and the custom application. Once a trigger has been invoked, the custom application is expected to respond within 10 seconds. If the application takes longer than 10 seconds to respond, the trigger invocation will terminate without making any decisions. +- `ASYNC`: This type of response creates an *asynchronous* flow between the trigger service and the custom application. When a trigger is invoked, the custom application does not need to respond immediately. The trigger service will provide a URL and a secret that the custom application can use to complete the invocation at a later time. The application must complete the invocation before the configured deadline on the subscription. +- `DYNAMIC`: This type of response gives the custom application the ability to choose whether it handles the invocation request synchronously or asynchronously on a per-event basis. In some cases, the application may choose `SYNC` mode because it is able to respond quickly to the invocation. In other cases, it may choose `ASYNC` because it needs to run a long running task before responding to the invocation. + +## Responding to a REQUEST_RESPONSE trigger invocation + +### SYNC response + +The custom application responds to the trigger invocation with an appropriate payload. For example, the application may receive a request from the [Access Request Dynamic Approver](https://developer.sailpoint.com/apis/beta/#tag/Event-Trigger-Models) trigger. The application will have **10 seconds** to analyze the event details and respond with a 200 (OK) status code and a [response payload](https://developer.sailpoint.com/apis/beta/#section/Access-Request-Dynamic-Approver-Event-Trigger-Input) that contains the identity to add to the approval chain. + +200 (OK) + +```json +{ + "id": "2c91808b6ef1d43e016efba0ce470906", + "name": "Adam Adams", + "type": "IDENTITY" +} +``` + +### ASYNC response + +The custom application only needs to acknowledge that it has received the trigger invocation request by returning an HTTP status of 200 (OK) with an empty JSON object (ex. `{}`) in the response body within **10 seconds** of receiving the event. It then has until the configured deadline on the subscription to provide a full response to the invocation. For example, the application may receive a request from the [Access Request Dynamic Approver](https://developer.sailpoint.com/apis/beta/#tag/Event-Trigger-Models) trigger. An example of the request payload that the application might receive is as follows: + +```json +{ + "_metadata": { + "callbackURL": "https://{tenant}.api.identitynow.com/beta/trigger-invocations/e9103ca9-02c4-bb0f-9441-94b3af012345/complete", + "responseMode": "async", + "secret": "c1c60493-3347-4550-9c00-123cdde", + "triggerId": "idn:access-request-dynamic-approver", + "triggerType": "requestResponse" + }, + "accessRequestId": "4b4d982dddff4267ab12f0f1e72b5a6d", + "requestedBy": { + "id": "2c91808b6ef1d43e016efba0ce470906", + "name": "Adam Admin", + "type": "IDENTITY" + }, + "requestedFor": { + "id": "2c91808b6ef1d43e016efba0ce470909", + "name": "Ed Engineer", + "type": "IDENTITY" + }, + "requestedItems": [ + { + "comment": "Ed needs this access for his day to day job activities", + "description": "Engineering Access", + "id": "2c91808b6ef1d43e016efba0ce470904", + "name": "Engineering Access", + "operation": "Add", + "type": "ACCESS_PROFILE" + } + ] +} +``` + +The application will immediately respond to the invocation with a 200 (OK) status code and an empty JSON object. + +200 (OK) + +```json +{} +``` + +Once the application has made a decision on how to respond, it will use the `callbackURL` and `secret` provided in the `_metadata` object from the original request to complete the invocation. An example response might look like the following: + +POST `https://{tenant}.api.identitynow.com/beta/trigger-invocations/e9103ca9-02c4-bb0f-9441-94b3af012345/complete` + +```json +{ + "secret": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "output": { + "id": "2c91808b6ef1d43e016efba0ce470906", + "name": "Adam Adams", + "type": "IDENTITY" + } +} +``` + +### DYNAMIC response + +The custom application determines arbitrarily whether to respond to the trigger invocation as `SYNC` or `ASYNC`. If the application wishes to respond as `SYNC`, it should follow the directions for a `SYNC` response type, responding within **10 seconds** of the invocation. In the case of `ASYNC`, the custom application only needs to acknowledge that it has received the trigger invocation request with a 202 (Accepted) within **10 seconds** of receiving the event and complete the invocation at a later time using the `callbackURL` and `secret` provided in the `_metadata` object. + +An example of the request payload that the application might receive is as follows: + +```json +{ + "_metadata": { + "callbackURL": "https://{tenant}.api.identitynow.com/beta/trigger-invocations/e9103ca9-02c4-bb0f-9441-94b3af012345/complete", + "responseMode": "async", + "secret": "c1c60493-3347-4550-9c00-123cdde", + "triggerId": "idn:access-request-dynamic-approver", + "triggerType": "requestResponse" + }, + "accessRequestId": "4b4d982dddff4267ab12f0f1e72b5a6d", + "requestedBy": { + "id": "2c91808b6ef1d43e016efba0ce470906", + "name": "Adam Admin", + "type": "IDENTITY" + }, + "requestedFor": { + "id": "2c91808b6ef1d43e016efba0ce470909", + "name": "Ed Engineer", + "type": "IDENTITY" + }, + "requestedItems": [ + { + "comment": "Ed needs this access for his day to day job activities", + "description": "Engineering Access", + "id": "2c91808b6ef1d43e016efba0ce470904", + "name": "Engineering Access", + "operation": "Add", + "type": "ACCESS_PROFILE" + } + ] +} +``` + +To respond as `SYNC`, simply respond to the invocation within 10 seconds. + +200 (OK) + +```json +{ + "id": "2c91808b6ef1d43e016efba0ce470906", + "name": "Adam Adams", + "type": "IDENTITY" +} +``` + +To respond as `ASYNC`, start by responding to the invocation with a 202 (Accepted). + +202 (Accepted) + +```json +{} +``` + +Then, use the `callbackURL` and `secret` to send a POST request to the invocation with the decision. + +POST `https://{tenant}.api.identitynow.com/beta/trigger-invocations/e9103ca9-02c4-bb0f-9441-94b3af012345/complete` + +```json +{ + "secret": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "output": { + "id": "2c91808b6ef1d43e016efba0ce470906", + "name": "Adam Adams", + "type": "IDENTITY" + } +} +``` + +--- + +## Trigger invocation status + +To check the status of a particular trigger invocation, you can use the [list invocation statuses](https://developer.sailpoint.com/apis/beta/#operation/listInvocationStatus) endpoint. The status endpoint works for both `REQUEST_RESPONSE` and `FIRE_AND_FORGET` triggers. However, the status of `FIRE_AND_FORGET` trigger invocations will contain null values in their `completeInvocationInput` since `FIRE_AND_FORGET` triggers don't need a response to complete. \ No newline at end of file diff --git a/docs/idn_docs/triggers/event-triggers-subscribing-to-a-trigger.md b/docs/idn_docs/triggers/event-triggers-subscribing-to-a-trigger.md new file mode 100644 index 000000000..d7d1d5341 --- /dev/null +++ b/docs/idn_docs/triggers/event-triggers-subscribing-to-a-trigger.md @@ -0,0 +1,27 @@ +--- +id: event-triggers-subscribing-to-a-trigger +title: Subscribing to a Trigger +sidebar_label: Subscribing to a Trigger +sidebar_position: 4 +--- + +# Subscribing to a Trigger + +## View the available triggers + +New event triggers are continually being developed by SailPoint to satisfy a variety of use cases. Some of these triggers are considered **early access** and are only available in an IDN tenant upon request. To see a list of available event triggers in your tenant, navigate to the **Event Triggers** tab in the **Admin** section of IdentityNow. The first page you will see is a list of available event triggers in your tenant. You can click on each trigger to learn more about what type it is, what causes it to fire, and what the payload will look like. + +![Available triggers](./img/available-triggers.png) + +## Subscribe to a trigger from the UI + +Most of the time, you will subscribe to event triggers using the user interface in IDN. +Please see [subscribing to event triggers](https://documentation.sailpoint.com/saas/help/common/event_triggers.html#subscribing-to-event-triggers) to learn how to subscribe to an event trigger through the IDN UI. + +## Subscribe to a trigger from the API + +Sometimes, you might have to use the API to subscribe to event triggers. This can occur when you want to programatically subscribe/unsubscribe from event triggers in a custom application or no code solution that doesn't have a native integration with SailPoint. + +If this is your first time calling a SailPoint API, please follow the [getting started guide](../getting_started.md) to learn how to generate a token and call the APIs. + +Start by reviewing the list of [available event triggers](https://developer.sailpoint.com/apis/beta/#section/Available-Event-Triggers), and take note of the **ID** of the trigger that you want to subscribe to (ex `idn:access-request-dynamic-approver`). Use the [create subscription](https://developer.sailpoint.com/apis/beta/#operation/createSubscription) endpoint to subscribe to an event trigger of your choosing. See the API docs for the latest details on how to craft a subscription request. diff --git a/docs/idn_docs/triggers/event-triggers-testing-triggers.md b/docs/idn_docs/triggers/event-triggers-testing-triggers.md new file mode 100644 index 000000000..8681e067f --- /dev/null +++ b/docs/idn_docs/triggers/event-triggers-testing-triggers.md @@ -0,0 +1,77 @@ +--- +id: event-triggers-testing-triggers +title: Testing Triggers +sidebar_label: Testing Triggers +sidebar_position: 6 +--- + +# Testing Triggers + +It is important to test your trigger subscription configuration with your actual subscribing service (i.e. not a test site like [webhook.site](https://webhook.site)) before enabling your subscription for production use. Testing subscriptions ensures that your subscribing service can successfully receive events and that you are receiving the correct events based on the filter you have provided. + +## Sending test invocations + +The easiest way to send a test event to your subscribing service is to use the **Test Subscription** command. Navigate to your subscription in the Event Trigger UI, click the options button to the right of it, and select **Test Subscription**. + +![test subscription](./img/test-subscription.png) + +This will send a test event to your subscribing service using the default example payload for the specific trigger you are subscribing to. This is an easy way to validate that your service can receive events, but it lacks the ability to modify the event payload to test your filter against different payloads. Fortunately, there is an API endpoint that allows you to modify the test payload. + +If you want to control the test input to validate your filter against a more robust set of data, then you can use the [test invocation](https://developer.sailpoint.com/apis/beta/#operation/startTestInvocation) API endpoint. This API allows you to send an input payload with any values that you want. An example invocation of this API is as follows: + +POST `https://{tenant}.api.identitynow.com/beta/trigger-invocations/test` + +```json +{ + "triggerId": "idn:access-request-pre-approval", + "input": { + "accessRequestId": "2c91808b6ef1d43e016efba0ce470904", + "requestedFor": { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1313", + "name": "William Wilson" + }, + "requestedItems": [ + { + "id": "2c91808b6ef1d43e016efba0ce470904", + "name": "Engineering Access", + "description": "Access to engineering database", + "type": "ACCESS_PROFILE", + "operation": "Add", + "comment": "William needs this access to do his job." + } + ], + "requestedBy": { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1314", + "name": "Rob Robertson" + } + }, + "contentJson": {} +} +``` + +## Troubleshooting + +### Trigger service issues + +If your subscribing service isn't receiving your test invocations, then you have a couple of options to debug the issue. Start by viewing the activity log for the subscription in the UI to make sure your test events are actually being sent. + +![activity log](./img/activity-log.png) + +Check the **Created** date with the time you sent the test events. If they are being sent, check the details of the event. Look for any errors being reported, and make sure your subscribing service's subscription ID is in the `subcriptionId` that the event was sent to. + +![debug connection](./img/debug-connection.png) + +You can also view the activity log using the [list latest invocation statuses](https://developer.sailpoint.com/apis/beta/#operation/listInvocationStatus) endpoint. + +### Filter issues + +If you don't see your events in the activity log, then it could be a filtering issue. If the filter you configured on the subscription isn't matching the test event data, then no event will be sent. Double check your filter expression with the test payload in a JSONpath editor to make sure the filter is valid and matching your data. See [Filtering Events](./event-triggers-filtering-events.md) for more information. + +### Misconfigured subscription + +Double check that your subscription configuration is correct. + +- Make sure the URL you provided is reachable from the public internet. If your subscribing service is hosted internally in your company's intranet, then you may be able to reach it from your computer but the trigger service might not be able to. +- Check that the authentication details are correct. Verify that the username/password or bearer token is valid. diff --git a/docs/idn_docs/triggers/event-triggers-trigger-types.md b/docs/idn_docs/triggers/event-triggers-trigger-types.md new file mode 100644 index 000000000..5781ac6c9 --- /dev/null +++ b/docs/idn_docs/triggers/event-triggers-trigger-types.md @@ -0,0 +1,20 @@ +--- +id: event-triggers-trigger-types +title: Trigger Types +sidebar_label: Trigger Types +sidebar_position: 2 +--- + +# Trigger Types + +## Fire and forget + +A fire and forget trigger only supports one-way communication with subscribers. Its only job is to forward each event it receives to each subscribing service. This type of trigger doesn't wait for a response from subscribers, it has no means of knowing if subscribers actually receive the event, and it doesn't have any mechanism for resending events. This type of trigger can best be thought of as live television, where you can only see what is happening in real time. There is no ability to rewind the live feed or interact with the broadcast in any way. This type of trigger is the simplest and most common trigger type among SailPoint's event triggers. + +> Fire and forget triggers can have a maximum of 50 subscribers per event type. + +## Request response + +A request response trigger allows two-way communication between the trigger service and the subscriber. The main difference with this trigger type is that it expects a response from the subscriber with directions on how to proceed with the event. For example, the access request dynamic approval event trigger will send the subscriber details about the access request, and the subscriber may respond to the trigger with the identity ID to include in the approval process for an access request. This type of trigger allows subscribers to not just receive events in real-time, but act on them as well. + +> Request response triggers can only have one subscriber per event type. diff --git a/docs/idn_docs/triggers/img/activity-log.png b/docs/idn_docs/triggers/img/activity-log.png new file mode 100644 index 0000000000000000000000000000000000000000..088658a0c20725152789b2ff355bae83cc25601d GIT binary patch literal 79457 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%0ABNAS+Z&;Au`14;Uy|qmTos}Ix%P`vRuoq1N{ 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 *qXNLfDIO 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�yXnt?85BL?v6>f*C(@lje1J?hlXGhHxHlC(QA7h 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%0A`HWKiKG#TZJ#^8L@LIGU(#q;#YQ<3=!&)%wna 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 W2J)WDyvqZKkCV1%YzmKgUHuO_kt|{W literal 0 HcmV?d00001 diff --git a/docs/idn_docs/triggers/img/debug-connection.png b/docs/idn_docs/triggers/img/debug-connection.png new file mode 100644 index 0000000000000000000000000000000000000000..6dc09fa149d5264acede5be19499f1a078905b8a GIT binary patch literal 419300 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%0DKMvpzJiHijQ62R3rX98ux#QY`pk| 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

    ZDCsz|icIZWf8{Un>o`A5oTqyz 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%0A0|P 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ⅈM?n&Ryk#8ofak!cu()($hp!m5+42&w2X#hXUtq;|;q? zL(wADP(7-vEv66GERUfcr=@BnWb7{)8yg!(8qF1eiVkIJUglQPO#6uSfe#Jl!MtHn zi3#j_0j{G&dbVA?@gI`onSX{rfkGm**(9F9PyjeEeTG=nC~yUB0P5B~IocTC;P#jX zmATA$7>!4%R*^>FU$O?Xs4;&olKvn>T~egq|C;;iWeqz_WNg5u5!Fej`dM!1rAnZu zxsU2mq-n`6t+qh1;;p6a_tS?1&e$l>Z}=VfXepYL7EezK6|1}PrDI?Fqp{)ng~mSU zE1j;+`ziI^C`hN&XanM&_bZ^{-ElkDgHzGFSoMSf%9&nVMtb$O%wNizG#DAfAbk>! zOTH~sKLqSc-n8_P71Dv(IY zXB(%$lUL4@2KM(Uk()_a$;rXo^!HlG-C5YV-o9BZ;lxN!RfE~NEpg7soJZ8HHU7E3 z?)N1f<)-XDn>2Db;CFAGY{IEzC&>llXb!trL=OizzQl-G!|<4K?P7K78Bk(Cq7HYrlzh-+r0VGV_{(MsXqD1rYe!>+xhJ@> z%)zioz3gpFC}``W9DtM7dKGZ&pes}5ahDb&9i~rkp{h8NGs- zv6Gd}em0}k_%hN-D|S}3^igeb;x4?G1`vx?OB7(`?S}tys#6hKr zP#W|GJ4b-gqID6aATGChM)lC?6>C6zubjW8O#4 z%SK}s0tyzPJG;yjfamp?k$!ow;i<6YGFogDhpXugq6$D#2lLQLVXQ-zLyK5Z;k_#> zVYIb*R!3EC^5J&jlYK!bXn2|4r;SD1qnzRdFHv6bmysLx#R01A(fqc7Nnf6!XiMc( zGA|kQhLnU1jt!d)je2{UBJDmzdZW|m0{|{4P@tT-%LD-CT4lsa0ab)zfOj{a!$hf? zF8%&=BhOPavz(tHpulo+NDgDalboe7wS*CiUzjXCAD=dm;aA(A#y4A_k4MEH#{f@f zV#$1)Gj!hj=7}3n{_XqdP}nwi_j!j;25VLS=cX59aOHS{Y%kzL+%Qr(2ii4tp0OuRC|f(*~YE8 zpbl@mU7ktfJZ|`qY0X#k3ByzR&c=r3inA^9r6&#?`PY`BtpicTM7K2U2M|Q&t8t1*kmAJ zHv+V73BN!$MN% zzUJ$>Jptp9sq`}o1&D$98eN_HyRnnO-BhOLPcM)6dV1uwLM}^+8hE2o_Dd`%4sYme z#3efH)mdQdea>t3?>*Lhg!i;d1pRv<>jiG<1fWdU?Vi~B^&K59>$O!Vfzvmi znDtM$L@~m()^^BHf<)*Da~7`WRhU9*K-;76dqV^JbRWLwi-RrHVBfl8mivQ2oN+sM zNm-gQ6HO4WpAY1rJh_*K?M_=RMsE1lum233pEkUAj6JT@K(s=RRJ=8t>$HkJUT>1_ zXT8$A=M!yL-m0M@a-x-K_7k*|Ar=)2nyu?$Wy#!jDJ#76#HRgz8}mwD{IF0Krj;mQ zBA3OV~8AA=ceix;{$QXd)n-qYez)7OkexucwaY277+9_=7>8;Z>VW$#kuV@_gU_- zpZN&*+~MNl+Rd?OLU!w$uMJ5Ed>vI4H)6dZ%zBP7)cdE7BO9Mz;j?)U*Iy*zr7WVe z*FCgMHzk11L^GwE65e97h3L)YOO~%ZKFE2qT1sZf_eP+3w$>i5(Yl ziSR9*R39EGb6PTPoxXSnTK*>BY*uBeD@WC)XowzVqhpv*M1SC75f-OgJC64xPO$sT&=tQb!C#Xj_XX{uI193)iPt}J#Z$Po3}ZICq1+=_2u9frKj29r1M}$ zC^jrd)cb;BKrFo zE65?Ae$Gr5#?&JJn3kk43$D#I4vQ-LgEDM0(=O|_7e^5EoSNQ@2X%(c zb=-%3M5I_=?X4syZp8a{+F}W9FsDc(*hJwD z=05*+Z@j&7@zc`$_v~!ZGmvCq-!9u{)A)EL6vG)l=O;al>sk;}N5iQBC)yUpdLg!k zcQ2gun_T9R;>gt@G7+!fq#yA|tK)8i6mu?{y^z&Jk%)(&h_GA6E}>Z0TT{^=>@*lz z3a$GV9QqPv<%@e&Je;OTVok50T#Tg5z<+Y@EQ3>2$Ngh;q~kHFgh(a z{jK4T)Xpze!bgvLB3I`O7x&^GgLQDpGT)96$e>-!Ed^N`Eg2-`nUxY~%bq7Teab8O zVo>NWKdX{c{$4dvknwo~Vy!9dE{Njw;y046kR~<_k1e|Qyy&%GP*(b@MaH$bOtkm( zlJo3+`Dv-XN$xpK%xT`H`YK2FnrGL!?YdT=5amhQiR~<_J&yW{@dd8Qz@59j9cM$7 zuZ`xbBdHDBDp9`8%Qqa|(uLA^P{*u+0HOD-rkmI8>UTGaX19*WYy)`cZou{nP~*DX zoy5TlYI>SF9|QO2CIad$GTs{5oT#W{Bl+p44v8?*U=&&ESz_Wmm7SRfwV+q(oZM~p zdy8$xbq=Z|4NT*O>Xn1nVevl*b9U0%go|=if=;%AcNwuw^`G@}*o-MkSQQ7Jre(7~ z2?>o%a6j2Z-*&LXLU&?@a+Yf*_DXY1-Cz0I=djSG`#MtSiqVEMD#zzeqgTCDIF`( z7lxSRZm5hjMF%xz=fA|a*bdURFVD9qH-05Cy!d+O(I!D$-Ap9Qw+T_1=3|O5&Krtn zx~7juzD!IY6dsD6?#!|PJPX|ObW@l~rqz|-t<|NwFKXRuZT5d6#8lFS-Kk(M&WBG~ zo*{OzG#>F!cr5s^%n8*aR+BqL9;elM7fys;<9>!?h$~z%sY@8|8{wXwuW&?Jv4J2d zoiG7jL_>vkz_sH#vH3LAqn`KM(7vPu({|53IIse9)tv56r(Q*R5}+(tkaVcUufw_O zWo*u{ooX#=0Z|qv&Cum>&%+g zv-C~3bn~@L=+;z@rQK+*tNr&&oa<^{FIF^PLXB(*!c)V;VONKAL5c6svi!)S=FZ+s zS_V@pQvLIAM7cWA#AwQ$x7GPca>%(Hc4`SOcDV$W^|x~Rg}mbY&uE3JTZt~R%WSr2 zK6Md|Sr)6N;8~gW`Q5G~>PaXGn8(vZy6V2WtWg8Ll%e`= zAfej$A$`rRTf>mVliIrL(HQ_G<@!*d#;(*e7vK3F=Lpv2P`r=f4eTDyZeS(h)@zW) zXF z94-2*i5A{!ajr#v`X5(O*w5yR-tX`scVaa)`}J%p_VAHhXNhZ0UCjFc`Kl*k(L3Jn z_TUGcpfvcXI%cx?#Tjw3kX;?Zb2MN1doJ;%d(^xL4%roh1N1Ud7(0Ur$~VuxX#_9< z>lLHSqhhv@Ze>H9=MdWz<6Kj*;x2XP!%!CYzL_RH>TzjWN~bo2s4IPL(*CIG;XHvv zh_VtUyhw?&b*dl@`8lQ5ZVgHxKE~TJ3r%ct-FQ4{= z`_X}MZ>dl<6!eqkm0R_CqNb?G>M*W|+jQjqQ|%bam3f3joKvQc{ppafi!Uyq)|*xk zp3nV$AB@@}2mCB!*F46ju>xby@{Wq2!_JRUBzJwJ&fdWGm-BZq_SzP6mH08_JoQ@v z6@Ci0+(fxPoQ5DQljm(TE_BJ0>7LByqL0LB!?wyS$QE^#$^kmAzXcMQf4t{&{7GOQ zKIe91aWIm%-sI7`{nps$+~WN7a!(gZb%F5*amJ79gWIme+aL{* zBm#uyGl*sN^h`eK?CAL+qv_Lx>i1%G<)adeEw75Vpl7v_;xxtJmEFD0%m+PV8>7&@ z=s~s*EeAncdG_hT+;T8K_;9{zcS_sp>1?h|?1LYz0s!;RX+_pcJi%@2bC-G4hJ8lN z3kknG(4zOk+ed7$bjNj<@#67|7M~wS-tAMIlP2EqC}1XL}#{*tKI0?qpS*-!t78{9&N)} zSE>WLPB5X^XDosZv*3~}kcYb;%2uZFcJu~YLZ40y$!1uYPS@*$OQ?hHE6jkGyVh_b z0+lh6PW$EM7Uk*udo%CO2>iA(7Ku~L5%ti^bYprwsq9NV2hyEs-=ieFhB?D?o1CZ2 z;qF}dl(f2E(kU+28jW3(a~uV$y_(CTDtw10NH_V_ko`~<#Q5}%uR#GWpeQsCKEvx! z%C%(&y&gSoNnnu8+?CWP6ldfw#xW7}8>^m(-_5>pdXWAm>k@9)Yb09}$(q!cd)ey8 zh9)QZCK$XH3CaLtK%PPZs*UCmq_vr4yCDuXVXuzAls;Fk#JX0!tC|`SA;eplM?ySOf2Xz@^1jGAi2eNQDb-vP9@&3$odv=dTys3W5Y=` z0a@oLvGcg+sW;V)uey{7d7&2<$Ou9r@^6z+53fZ~9Y_2lcgX0-$aAP;hYShCxW3%* z`8lvK|C&j4b2woRN#Ha#Er)fEMUyGeSg2ym-#jtR5tXp5(KQ+WWR9_F8BFB}>gdeu zhY}u1USZtvL$zZj(S0DYFeHwYZoM8Pvh#Oq<_A5ml^fu~_C&6tF---WRe-m2EX#)r zDq7DcFn83t<>m9OX!agmH70(PemVyy+b4xBOoWf+?fIO=G?M3}uWCIH2BQpb{zx>c z>q3jv{RkwIkRqkxZacBg&>+`zt2&vYj~CQB2NTNl*A|GFfc`Gk74;~@85-*73dfnh z?%k^BgJpW!0))S0ne#*=FJ+B!!@fJRAHQfnz5r(Bd&_ue0*aGi?M>c?(^mZe;qO!J zUI^zK>K77(NK;y1+6ce8KyxDK%~6RH+sJKQIG1VLoG5za1c>9L7)Ctz7YR~pLvL2k zJCl?%GrVGjGdCcP$1rYu;@aHY#e?@%%&``5S^F#(T&!w1l{rWzb_*QD~u^lP0 zY;O6g>L!4UOT5T3M&-?>utM6mdW(oTANMq(V~awb*)kvzOpEk7;sTu5lEq<-+2EFa zrOYxGL#!`k6R>Oz8BG*<|8~;_eBy$W$gyFhM4SGBsYuUq%1Y#WhUV7O)H~X1*XWVN zUnzF5WmQ%yY}x2I=ROYlZsZdz;@hpKN4B{#_f7D|C>N>NYVD!V`}I+D$`d|j06!Xu zXQb67=iXX(RVjGU_?c-}Mo%+hW0{BA=>sWV4u0-=Ak|WYMD=|!7FE4s92yO>*|_%n z6~@-jYXn8k4)-#xpNTo?+|E3%9lA-TeKt-%qd_%8qdyDza1Ukkmicb}=yWzrZWf%ip~@Vr`B zobE0wDr*ujYvC(qwN~{NxaXiDwW7o(Ygi?wV85ZS+s*zgF~SQ2%|4j?0ZDEU4g@;m zDm^VteNosXJ#zpRwyS?`lxj0V*mmU6lwSqz%%Mv*!Y*QO^t8+FQalqT1c` zJSFEa$US-d1Rj(Ii3Iq6T;SjMe~SUfA00|G@2!OOaga9DXM2Uz-5|PCQB7CSz}8J? zIXKD`mw3{7AdmXK0fBjX=vWM?ii@lVRinvh~ zv2h*ZH&ne|j(zV6Z3gEWM|1)scVARGW($cH?O_>Z>~7s$vQYc9B)`KMi`h>KKyxAJ z^rkCJrIXck{6-~eoh57M-U~#Mlz(m_05HNZBI~6o8i(T_46EXo2Hq*WFE6MUmF!y& zT^6E7O_-JUcqXubT_*ac2;(| zCPOgiK+P~rHUV%!#n=fC9vjv@zuN?keNQDo$%RuM<-Yq;`RNQwGwM$Op!>35~&FyrZ0&Oz&s zNfl1_$&hEGssrL^vGw!L)lL{K7h#XSe-5VO+KZR6!rK>TO41e0w5HnnK4YruF@Ki< zHPH94nzJ=pL0 zm`8oir~4TU=zLN{mVD7 zpDOvDdO@Qs6I=C)M6M^zFy~+aq+-x@&NzCVY*Mrdhv}+uH1^q4{$kgAAga$!XEZbQ zldqPmuroQ~L^_vlxI`9W2jef{fTVqI_?)}Jmm34UB4!!iQwJAQGBEU#lEe5QvZ{`o zm+efnonnMcV#k^Q>vQ>SDoYuMtT(^h4wrI?N0-k-0Ie0^&R@3mAj-~!k2H0zGzXUG ztrXui>-D_l~@?l)o~6`7zcqEn0Z&*v4VX5HWO%Ywp~aD(}6+nEFw6Xb-o{Y>=e$Za(zE zc&+jyP#TcicGG9+-1l# zTO|$&6CE`JQ2K@+6+Mnl(8PDLi&aR7`5U{1`|j~5HN$fMboKKKZGEB6aDK7JbFtE) z7bmOVozfG{n;{5pl<;cpB!6F&M;4RiYQ@+kxYXOx7ZfWJ0c*wv%=a$i6OGqN2^j|1 z(b6X5`XbvJ+@HB$A8~f4>Q}U^a95lWuxyT(u*m$R0Lq{jg+x4uAKmsUDchRAGjZ(8 zLk&Oxb;n#kg^4lTlb&;4#WVWZ5xY`N^OAn>!{1A`!N$g#!)`7Y{tm@}qejOz>y;7naEs7(SB264pJK>Y&8@ySQw z!aL#NNT+OE^_aK7M$f=Z(Eh|7S--?0`c@!%_CFNB>x7n)r6cq`am34KSYG+JlI>h1{|AZ)eX$MKAJ4FxIh%_^kdLY#$m%oLhat@swFF0HS-+JA8q z#2uVz&`l_&|DhUHi6{Lqw>mHy^On>%+{#1Vt^aojZ$_WgkrN+ zkKrAdgL6fchq_=o>e-2QxEbzQ@11e-4aPkn3~V({c3jfJ`W$m*BHExV4~91~Q@F41 znb)yEtC~IEXayvHi2}HQvajwfu3C*l$gvtSQ+6PrZTfGQDHQNl|0iqlr>xVx^Z zs_Uqkw505sDyl+I)yf zpvw6=(ClInTF#U^9Y|&6bfo*?ymED{h}))Uc?r`>+3;ljgEBg(ud#lWOlYNSW?0*^ zGj5lAu3`?Y&VGKKMp7aQWx#_mfCe+ywuruy=42H+V1t4UCEy{UUlpN3z+FH^V6+?s z=EYfS#q+tg2s;ri4|ckCStN#U01QAt&a@cvWNz{w3_$Cttn3XKZDRDWm+H%1mNz@L z0qTl$Si>aUzCXjC(;ZSh!kwQ3v5aqSEr+)Kz<4jVj)6r;nL(uWO5})FYj&u}th~8}^J|R=buFMaxi!!*6j!YUZoP zUIr163r;h1q`M%#N*ivieNv&f-}C6e0$%K1NboKPN_MG8zg0-9Im3h3Q3VrapNL~ErBW*+hIE_iq z06KaeDBAm?pv?r#bW(x`DK<&l${u`I@3}U1{XUWkSUZ{g7^a$;jd0xAGHq=uJu*7p zexV?ZIZs)fRU(?B{yMH`qRpp{{n25-TfBqy7T#4otBTp3tjJH!M(~uwK$ep|)-t<7 zV&hz0-^4Ah;#mm&P};jC66uCb+GUpRGn2LpXU}kJ&9x%7ly~j;Dq$}K?D$UJco?eg z^-spxP*vl$!7wJsONnbjoeArq{36=3q(X)?50t8ml!SE?WXwrD8Ncz%dJk(eJ=dEp zzz|x&(#MB8?PBMm>FBnjry|0Dt(LiS6a}gmvz&OL2w|a9-8?6FI+KiOzH$R} zXd%mk7&8mmtfj^i2(-=!zX^2|XyHy(=~L&7=8vms;2+TT^e;hw#PQ)00yw^l!uW^L zD&s-Q=QdIAKnw|zn;M-|n{xpbCby*M&_cTc!6v;3Ov~^`#wlBb;m3QEL%9)Yd>(bW zC=E+df%!ABD%)FSH|dDQ#AF^TkEoqU5oS;hw!(v}6Yl7xuDpm5z2P-5Nr6%&QepLii|N8|J*$YdQ*k zpp%7b^;Eu#>07p!$7k||NePuClXVj5c5@u>As2~|%(G)%h1f~@-JKL5kx z`{?EELjo-Hol<%QUc4ZhPu+Zd`h`v5A?EVj)6M+}eK{l6WQ?(miuN`1lNJey`H=V} zVT=Ph)C~x-gw=R?C0MJKbu-~Kz3Du?0NKL;c?jR^YuC=;)RO z`sOCJyaUKANW#@efdHn*0E4QN~fh_IS-c3uxt9 zqxse`&IdL998h&d&%quw>dJ;h;W!bu{JY1XgI>#nuwmLsBfL;*I%X+&;!n7T**>hWwA)22%MF0|Lqeo3N$G%(m)4n<|Jnq9|T1jN+SuOv?aa zLZi92eW1YIl0ud$7wUrfdqWMqA2aRAn`2crOE@~wJ3tT*u-Jy9Q@MV9`QaiwgJ-45 zX4Hot-`LpaGX44Gxs}`Z<(O_Lz76E|fVx*yYzFC~)Y(hgTTa|97BwtbG!4r}yH=#g@gtSd$k; zdlY@#8RD`03gG^1JHMJQx=l7Ta+<+Z=sd_V_t(+qvJTRxWug5b?#c+R{-h-4 zacN&_GkZuO|K6Zxy{tmJz$qh~d|;P5ds{%0iviWkzu7P=t~z^6Q!9C$t+SfT!@MqS z{PSdXU%rDJn|WuTFu@r%0P6p$t0|Y^hsx^2fRE;q8*l%ksKROIA=tWq`1l)ohmePa zY%V`LUqFcd$f<{>7E@QXNVLj1AU%sHBwyKD z(&QS?m6jtYBwu+xvgJZ!d|#E$P9i^R7Qo_0B@VPKsb7yI+mPlOBD70TXpbQPypxb!p!R}L6WGpyCx*z+hisn=(;WU#c@_sl zJ)|{ybM%hEW##G03U(TQj3rg+OfBf+WYBbuR6XH)h7bO^Z20a>oB+@cP{zg)h}oIK z@L^qib3&X?VE~cnaGHGeXC{5-t zGD#XW+Sc}K)&C4Ff!d-FxP~zF8XJW*Z}D-h(jjpI~j60*V3PzL?_p36!(%`GQ~u8xJ=k0>_XhBmPvej zA-5e|nrgSWnEb7+Jn~@tIksLJQqpkmii!0L(R01*EaZt=)I1_ee>;S19wDuzJL9XA z19ncU8g!bh2A9u$QZ2<Xf}3DVTL<`S6fEq z8%0Epw6bxp#3?78cdtLMMq0BSdcJdEWGt7rHj4mE@}z^E&`G*4NqVJi~2r&(|Y(H*C4uAkM(letSK%klIkyt0$6o|ouW#0==yHE_oF++qwiOeaLj{gjTXE8GYU+4w^!+nVr(epMcdM1byNxN~c^h*oXrAs=WIFlg?YKt9_ zPf{|lWs#r88wD6IurEsaE^Be4fb=eM&CPqA1M6c|Q$fv9XbsGYfb#w+59l3SjCA>e z={y1#mfTu;(eM7}Mw`|0Ge37B;N@?eJnB1W`K1FNKD8C}@MSWGk#3p3aBTO`ADShp z+cAjr6mZvAuq?@&+TV+P{xTfZ>=PiEw9!+Aleamt$VjH~Sj95k={$(Q^T5eNcAc-L zh!mj<6oyk?tVf2H@bD=YGnH;_u)zWJ7_N{1WA8o;qJB zBBav$`jJxWOQZe1Y+P_$^B(N}xyC3V6TOyfiYD3xdUo3Tdfw~DQ}ilgGn2|g30UCp zH$6as2+y+XPi9=ysygDCkJ+fQ1HkX~Q)`C$@iv1^b^sA!rJcr29i;4*OI1WGbKySs z0+We{`wU0LJ<_&!o}OV$t-d%WR_U2{HZd`+#5$Q`W4$J5*MHC$R%7O-l&cRA;RID1 z4Gb`N_YDhq-y~{PV3OG(%N@p-`#;KFTJ6o`KM*u*EwtM&R)u`M`0fw(uRQ}uflQvV zpEX6L6}JI3vTMX!qc%OAN_%q9K+HI;?f~t8v{D;MoXEs)EC9+u&#a0hs!nIHQ_U^i zevjkncZJo3Q!&dS7$BO@y{*|cokKo8C2p$dcQ2q7MW3B$So>~cu`^^qm!Kf$bC%F< z3hoyoqQ>HAdWG}_z}{p2p(+r%cinwskm_hQe{pg+lf<>I_tI0p!7*me8*a$G*+m{s z3YXFX1FOmWmknV+P2ag$bj;uk57Rir6qM)flBCPoq%oC6S|p1=z2sNy;4g~+4U1Y; z?%N5VZwKex9#|AY1q|gP%oix_ z@EHcT@&?WLUt`ZJr`{yUDJA?EdU9@w|3EdF&2b2uOzuWACo>uejSU#lt@u@&3Lyx1cb_0*yC`>Gyw2gB2t} z+qAyWzq%n=$pfH^N!K&uC5lbhkkW5={7ae*i#(bI$~e5ncI<$-aupY!t{mS_W*sVH zyv?%&m&Nt@%e5GuEhS^pN+?nxrD$t9Q!`iP4Jj#%0aVV^enfZFg;o1%B;~nO@3O9C zUN3-y%aa;-c+Qj89*VyK9@;Tjn)_}XEOuiw|81gZ3EQ}>XsJ@?L~%OZ@Jab+8gqaL zxcb@K$$1hXqU^))>gw$GC6SP^|HIt7$1~mjf8Zz`NIIbi z9qv+&6;e)9DwQ0HnbRC{HY4X8mxM~Fgb<>fHq2?8ZMKCFawzA`2rveu!uM3&@P!u|dz4maL+N7bFuUSxrIS9_br1$D(qB?dn^Qt;q%IG*4GUc(5je-DT(TUWa) zS-j6bt?ZP-$JzonsE;P~*E0+%?y?m(lw~nsvir{0In4m3MQP^^p4J>bIK$Eq zd)_hh_EbeL{B2K9s_N(079WK|1P))_6O4I2b}R@XE$y-H)#!PX6E=Nb@a#Z+mgrLs zS-r@$Z#_)-`wPoM#*ejh1hhW7>~-7QkeqvH*GWomk@mrZBI> z*&d6a8JuEO>|L3w6XQ0k&yUE>Xlr z^gjA8T$gBtWy`wQj?YOiy#KY@_ytu}7Ydq@j~HUk-7+hb3@*wyOlz~3(zr#rXuwIC z*SQwj>mmOrT0!~=rW(A@KUC2Rq_qRr@Vjgd8uJ3-=dybVTt@Y%M zz#!U&cf&0&MHwm^zFe^%S+`ksX5r@2WIMsbHYaS9bXvq0C$z(dxUj?HkSsH~l{HD( zIzs6Mw~n~Z)@2vxno{LUrvP*`Wg$&XdfY4b}N(y#={ z^L`T(iB%4tZa=>?SnMPx=CSF}w~^Jr{6<8lDb1+8eOvS4DZZZ6!vooM!(MC~)BRX_ z!=c?#*#_lREYLCji>4;|9e$1s`N;zbs&{rgjgxt8EUkIFeIO(D>@{aFKIl~#li1e7 z?>N)76!!(Ru6QhPo-{|aN%ZcuMtf0b0y9(v*BI~jO=Z74wtF{Nkon;2ZsIYE8D0_huoFgCw^U?3N^k(^oHuq#Yd z@Q|SSA;FzBJM(Jby`H_wm`e)s7LZby)<$t)PbrY@MK3vslFze1H(;kED?E}O}S6;X|O)>|JoyrFO>YAih` zVg?X>&-iqUu(b(;v@#e-hhivJZtuK#HR`#W3N4<2x+yJdwlnac8QR+>8)hwIgbx3) zo-6DfM|bJzIO)VWs^ckPcG!0Gdy?+fK#yw#n;KO04L^I-CRS_Lu}6FY|M8)xf9PqE z`i^b<+xO}5@ji--9B8^qjMN6a75A~L?#Dw{)o{H7^)ZO83%QVz4C`epRl$kKIWl1q zdoKC0x{&1Am-#C=tfzM_*o%$E1}z#hoG2Eb?nGS%lJV2!-diD1)eY+7$M;~qxz(nn zca$6efnr~;N|B{)SLb)Iaj6K1``$RbLuM-QrBR)ByNSOp1-K;)>>k5>7$>YeovXP0 z2) zeUQr~GciJ3RN$3%NK@b~+~q9Y_RHaoDu=R#3qniN5$+G^`>DLdtdn%r*FzSWQzc`F z?&+14BYyo4)*2=Cj}sux!3!yzL(em9Dx2cCe$*CD48CJ;;0{N3Wm*zrD%#cB0w}D% zYLde3kTP=!+fxKz%w73Tuxrr$js+UtkI|kec1ZUQEM;I_Ae<_#)N`yL$7=fC=^5lf zox;l!_+y#gs9N~7;fI#Ji`K3Y9nGk?fb-yBazV$4Kz|0ve`dU_lZ5j}(7L75-z6Ec z<__V#1B|A1_W5dQea@;fp(WbRTZfy+g> zi#Fpc_FJ<*EgkMTUWnoD5Rr5T*+r&{GCg93YT+*liAyiKjhCYK6AFU5DzkOM&@$_$ z{R_>~bS6DhJ20#09ysEKstKU?2IIna`{3gn1r8%W4NniUC{Peo0)8lP3wzMXUxbm^ zjDP-$mZe%ju3QlHtm;<}W2L(d>~5B&VGzg2J;mMOQ+FtDA50zZ`%vje%}-XYY&d;% zCe1A61~9LibG?71MK0UngX$%FeGIj)47d1v0GlxlkBk`y3EqkE?>^E})_q+0Qs_`p z(gK1`hII-aO;ZHlkHcf>nq4=;nX7VU;cW@#V3mdVBA~}%Aqn}z2o-`{LG8wKq!62e zi1gvrsb7p2k-XHk70}+RY>rD1l{-5i2T4~jy*&5cU97X*XfS8Bdwf$rCf)ht_+W4j z0s0-OvfN3Vu-H7ho9=7F6%e|dqv4xJ>cEujc|fp=XiRR63=hnQK0_jruXi7g0&>P$XR_$!{Xv%K8sGKl#xy$5aoNyL|-5945a`PFIh)& zj=PL>&Wf0jUq<;x)j+|Q3a`JePC{?yA`TSHl{Qc>z>O{XO}{Xf>eUM_=E8Sr)EHK2 zD#YZI3#^eHflKBo)iR9N+-?42xQwM2f(YuCy)0OCGJF zLCNpbNHD!v1TO#8VXpEG#~k@c-(s6p9Zv`=Py7@fn#s7eOE?XNRYg?36FDZD}b!5HS9p2#}jGNa%x7Z>7UQQx;AbHat*E_KW&)ESUgkBqXKxxH>Nt9dCoFJpz}_Mj|oyTfV>UF`O6rP0c5m zKjL#ZsZ()O{CBnA6aT3cGcu|m0Y5cXOj>s#cqJzsGaV7|sa-3ehV<(MecIwQ!bO^x z`utH>Q2<_m3SIFGYe(HQr`#72L>%6wW*#+>-?rH^39^W}Q&N9v zsoTVf;kXmaBK~&=zsZjG6}x{K)koX8gY-OB7k~w0&fZPvMbN&E=O17vICU z^Dk|-OTPP5?x@emHIP9~cLORFB7;*zs6jS#3MMH9e~#X)>PoK03@`fYvfh4(i2u1G znD5T6e-8W)nf03p8{p#y-U}AvYtwKzSn~XT*j0Q230K~ilzbJJP+`S=N7~y{+?WKf zS(z}kSpD(Ck`;Q$Y#m0w#5*@p?bVm<8R`^RqwL%x{!K>L!Z`HvUP?2dJ>tJ8_xr@} z?)v%jr)5VEW~9`zvijrQqx*J7{p0m|rv*-(%I`z@Upb9Xt8tMK7jxS@uXf4&^poFy zJ}A*;FFXS~d~V;Di&5C6Nh@F9ic)18C+HHzlGc$``d&ZIOKZ<${BNz34|FlJ9j78! zkba0W$a7+qXOQ7WY}D8N2bf1wEQ;zHR|H~x(osve^^+8VAETrzc*3iM~g7q9e=UC{({ENxxAgDsO@p*$bYQV z{}3Ag{jb0y+im~9eN(#L_3JU${Z2UZRn69(2mh@VKdt;SIoWBy|5?2qe~+}mo|IzZFq6xlzY}=z} zb)@G)5*rH0b1_@33ei#9`4F=;asM%hn|fR&v6hyWD}Tfl{%!vM?Cj6TR(Vrzkn~i_ zO3kI`#b!^zrE6w=c|Zks};QX4_Wg6x~%+qWq)sQ|6ji8&ilN)`V*J;UwC8{H2hZi zZ>{)2i7zcJ6;H8;j{R*hYIw}&e=1NlfhY}frm1c4!iR>BaT^O4bz}*&82w zm^8PO6rbfy^(N`sCeDe5yR5L9G5326s^ZsH* zq*L?Jc_l-Umbg^DAF+A`mKrHYq12p>F9J4b+>B_NtBREqZSL;N`-a-oF2U@u(d%LU zWHpK#lHi5ZX)aKwGKrZk8Y6xP`yd*gc?XhpN8(=j^sDAA$8GCuOmbxCXQD!uXoJ20-6mdHm^Wu{eX!B(y&O5WCIKbe_zc$g?mWO( zGF~zg%8|CXSNXL=i{>TpD8-_CII>v=Hg-!&H~b9$C(W{)^-yg6rk|-ajWN zn{+%62Pd~zq0_IQcvT(A>OqUx>Hi61x@QQ4tmhd1p>-T0w%c)B^L2Ec((PAP_cQLr z<~_Gv!Drp9Cncf^9Oa5VNDxr_QE{s04TThlte zG#j;3_I6k&%~-n)J>re8PV0286D+&uGB|UAK1|3|hx92X1Fil{(jODvzPQ|9 z^vA|IW)|h5{3))+pw=-51(u0M*ReYk$D|b?+O{3j8%ITHUYudLfc|fXvzsYNV*%2f!1vroe64R z_#AMF>!`bJL{|HAy&pblW!5x-m-Ja$QU?Z*z#KzJTG$+$i+XG=i#wKnV?I9Y@(291 zZS)c7108XT!}k~-bjg-s+2X$R)t^^6eK8774N#bcFBZJvm78?|9xbi?(P%dRP8mHP z(aLyDd+wDeywxZwIF-#Q>9Gr@tqjWsW5j)r>k$Z@q4yn8fs^>w6q8QH6~;sE!v|@r zM$k7LRq<;`3Bq-*pJl%%$I=ql(Geb=TWW0s6uep2lR2!2zTVca{)KIW+UEXPba|({ zfpka>fwgW<31$)`-#mivmp_&(Uao@+_A&K0R6i19m>s%)L~HHyL9fmVCxlWT$sR!Q zD3pfI4Ph_3Ch5Ql7L?Fl@uAP6hvqZG*TniNfx>vkWF};GvkghC1c1Y`638wevw~XB zs@oyy|JWe#2yjqsqMp9knJG&L1yI?1%2~j=d+aoQO~TF(07)$O-6`XcS#`m|&Mup) z9gnd=U04rG$nJInZ@BYv#~Tfy1Q_q`dUC%#%n4*4=wh*bh`#b;@bG^tvaansx8`D0 z^4H@h{$VtgpWj~g(D$z5Mw%ywn^je5y{gjdH@X%~GZ*E?(9Ec=mEo_1x5fB&^{FfD zLwj2Q*SwrZ#LKRN+g+-O)}LbehURRpae4RJLMa1Id7WkVVu35Pyn@p z5HTk3Ab2ylcv_OUl$9UU)d#f|tewh8x9x{}9jS-m@weacnoh`HvRIYR79uF~Qj;j8 z80A!0@Cze)Q*mQOU=to5O2)t=;hLjv!fms<{jKYTTBvv>()l?>tNkm$iMr3eElbyR zHwyWf)A*ore(9yz*kVIl2fqZJWyfcX@0fh(DBSFVWa_8mJ7vArJ>8w~qYXy(gKDWt z@fM>-7u{m)Iy5({omH%$^iyERgF4vz*H<2ejCmWT`3!Wv{8d!IBl6Uf_J7$C#jCMzu^9^ilti1OKLDqM8(5VlHzJpcg9roPV>5)x4u5bnQnGu<0{mwN`0)dGkp2 z?9{d!)^kIJ66^Et<_aY>WQKeDN)m{ntpHk~wIVD0bejYy_UWM}O=tk4)Nm*MK_>Ba zf^haT^nUOD?}7@pKW;j8D%s$X8HPyziSERRbD>AIu&KrC@bhrLI981Cmr^?$M}0i% zDN3WXB0R&SBnUWeo^Hx84Z|Y$9X3RV;u5LkNwT1mmUXVMKoiDShD`X7H4g79Ud({= z!#!=swgR5nE_}Z)d%!$%P~F44-SA@nye+QZ!O{-nZ>!$IOe;e{Z4IYcN+%aoP7#p% z(h~z8c8d26wO^hyZ%hRQab}b>8iXq!ZY|y8&a3s~K+vG>BR<%d**7AWY_-DJ0x%e6 ztF*)?&NZlMTzDhQs5B!kD9J8|x1Dx+^^(PFW+Jp|#BmKc5b)iR@y8_w!y5fL$(_P& z8@dgc;*smLsw#XCOkIAR_^tM55#JAC`w~kgpMxgRQ3ls;SW^`Fz~6Ez(O_J$KQfdV z^(~duFH3Gr^k-_Jwh>2A2T0*0%#?Zq90obZpOsKl&J@Qh5|MrhIQ!c@!~cZZ*XbI(ocZ>fuviU*H?Il^Gn|! zTMv0z^Fly{uG$w&SQ!La8Z?_#f7x7kqy^xiO>SAIAj%$%JfA@A+}=Q}FD?7P3qP-I zqTKKDu70#LsZHR1w6Coh*fg$eLS`NWox0?kbw}3iJ`&>Eo^gTxx?W*6jCX&Jg}J5k z8gz*lr(OtQ3&FQT?Z#>4t?fXHNgrA>68o96 zrBgjXh{N@5%E-YJSU zlmq{yY(tPINjVW6O|!&INLc1Zl39Ic#>PfCy^F}=>h3bA(Ph3W_b$Ms+h*eC(iE-k zXHh!~oB^EFlvHP2Sn8jJ1-_h!(%$S0{v#&#vP|z80<{)jkE+f`CBOIT%&GI}eTX39q^!{;`K8)`eSq)S>=3V1a%bj|?i40N6Ntc1y+z z1TRD(=fi8-Kl>)}x7Z{n%yzf#ac;x&u9f;p z)Og>PS|TMkG==oRc0ylzyt0>mCq;T^!LF~T58mzv@i)YS+r}Qq1niX?;zW=9M3wa} zC+A#?Hd*)DJqjQcy+q1$iv^tAHL|>9v@vVjWx`kYhcOcR8J{*q%Nyj5T0>6=UC^0l z?}W}|cHi%0&ki;OjX?Vc##gnNygPvL6rfPh^>&YnRGYBY9DiYlT(teW@LpV z8^9eC#%%ongwBk8A~fc09Ndf$COLln+SZGr{Ci zydi<5h2=dwlXT{>J$N=4WNUYFBmYPD=cP_Ih4?csJ{<4NeV^*1s=M~t?&0()&RCm@ zQ}c($<|M5ziI+Cc$sRVNkBn@vZrfCa zL;>qxNHQ>D{lf5K8fhTe1i)Y;pim6;ftJtMpatb}U(=zVp(_C7VDg;yPMa*6@6My{ zaWWT(8O`0D8wliC~38~DK90iTiTh5~Do(cGP~p##G_ zUrJ|LpYolv{4%;Z-8#KVbo2alyjejFWM*O@q! zhOqISNvjd=#tY;9bL&*Uc%=<9AN250YWttv1(=w6{xUN@V)!&K!F@bf6TJ5h_Qgcxv=sYGnaE zyq)|N#mUu8nDzDm84bdb$4R9#d$c`Zxxo2pJX#}W{Qo&`U}CfzCjfkn|;FEv%B(_K6-{Rx%*0grnayySOv`lD{PMGkg@Nr>nq@uqio@H9(=gXBCWapAq6KC z>)6vASPJd5u59wTmpgp!s=6K+{|p*{vR&bjc^_7)Ttbr`YZ6mLO zqhK3mAXq#6?qa*LKfh)S_t4lbeJHOO>SFPH*N85wvpM4MbO(NJ0Z6KkceD}ua4ONp zo6xSdlVKQ@r-T`*9|6rP_deWAC=Oathb=FGK6$uF98%y}_Nuz+yy9~vtlXkZ8K{a-vIj=yV4slq_Lrql1Brs}!1rA< zff^g9W{1s>%#!J4NrG>K1|qd27KfUcpi+}U(2if66ngwTf0A9|eGsq0H&S z%UdDb22n^!#JCb>U_>^2AdXufX52RNpu62-7XC6Ow`*!mS#iCmyK~hc`|&NF-d|Lq zfarD{JoM~kV=hUgPmw5OEX=>=s?9H zxDfp1Az~-p8DK5~Uv1a#u|0M7lwL|&+ti9cs{T+?@ z%c?rRw-|UKAY@*A`)$+pFtMIpq0pw{UM$Zc&Kp$%e$iTw3emkYkq7SUKt0~9fQ*Oo zJReVLtUv%fs9<3!i|)NYh#6-1Ay-x6m|6S}@(t2sSC$rtfz(I1Tl$P8$CNeBNSej> z99cq;34Lf00*h;x5UU!w!EN$Yg4XD(XYT?6^yX zMTx;)gwU|Nl+f@dtFbZCUudVNv1rXB>U!dxvbukSJl z)>-l>PDw4T(jbC8a^bo1gGQSdC5!IH)97*m=Ya+Rai0CeNw}H?(V~AyHc)K4I(qK= z2}U2uF>|MPZGj5`vjk7}))Vty# zvtZB!vn9PP;--1jT_8(X|M(3NLAm6FN$j`hPlRtH9zSnM74CGILBJoIWcRdngu%OD za{)e?ZW!5KC9e+Pn-|1FVO#a)&)+D(JA3r6+y*{yRtt}k%MR7FxaBow<(2_wdlcOt z0kgN-bq#m@{4D!Qe)jCA^V9XhP(AJzy87d1;DPWjprd9J6;815J0*E$W%wYclL^|3 z9471sdMVr9r9O8Y+*`jp(njcF@jd%p^hWgbT+!wfxa{8BCLWFw0v|5m@`2pxNDS3m z=(H|pLpX>B*;{w1*APsZEPLlxn6<7TH7&1kwub$^O@%X`n|QbGB@eSc=olw6MlxS8 zb|fU5XxFihYF+d?Jpt9E7w4s4HS!^BqD2C(G_NiUbC{esJX2G1@(7RHH+cx;vCg{D zvJ<1MhB!{(Ar`(9xMb#jTWq;WI^aDjz%h&BO&rvHt4l2-joy$Q`aZtuOL@AV)pat7 zyrfd={vqgyM`4!V?TxnHIr_UK8C3j|POB!4ewA}4c*=J33sAKC-A^QTi-zit;4=ZP z;BeyAbk*+_{R?q3X=!%huaLWnBc?;w8B8QPUHK>LTeB=>-mzg8&m=D8$`T?Ovb>Y4 z!CLgP;*5{=u#>^$7C;$2lbk-x7`Df;mSyhcf8ICOv%-qPTLc?dDk;IftooLbe_S#P zn=oCAO}`9eTz?wC2x# zH36U~Oq`a*`3o11&v^y$1Cx5Y+zQM5H@PNRZ4U?vQ=waz4?6W)u2_|^@o*AYK8yHGT9txCL#zyZc$Sz#D{RopiHD>(H!ZypT) z(}43KfmeQ;@u&aDUli%z_uMpT`#j&Z++Os$yDL0_&8Tar|=UD=3z5pSD0sw!jepkboG z8U>&n2~DUTBd=giT5+T9rQ&hy%qRCtjuGt4Y4tO0J7M3c%ER~%G4naB%{DOE#{1NK zbJ_R%hc)mQ8zn=hV_WBQWbpb`!feIzz7+neI%%Fo_kPs3>J7D={J{U!yzO)tF>vW9 zetOuNj4AmyV4w%IA_No zTUc6rNXay-{5G`ac_{Tpnj!kmhX2Z_6p0|F{JH2`UChISafxy-R&PHaz3eTO{m5E@ zI6r0>c^}}HTeEMg`=F4mbkI~T%Gg@0HZpk4=gue~fyE#Xu11S4vR8~KqT{@X&V{MgMTF|YNO3P2xKa{MyS+b}(RtFFK_#GYY;f+ct; zJEVEtAv(WKAcwfg{_I-ZIY%Oie)bs5%e&rUQQS{sk^M_XvdM1nP0zzZDzU6`_=S{? zsh;8w;OUOGy%eZ~>dVGD<>kU$zP`Lh6nDeO4e+e(%)p1fP9d(xcJAki1G4l1lhqdA zt)Urp)B)flRrC9MnsaLGB6K2`D`2ZeSr0aRdFz^e=FFM$leY8b<1poy@Vhu|Nz48r zGM28h2i(nJN{Nib&^+;*T`@YOpk9WWF<=73dq{>&r}X!DYYcXAmWxj2UAeUeZ>%m0 z7C~ht$~MdRR|oImxsC;V)PeJOP9yKq-h-rvv&8x$+PlEivm1rq@E{e6Pma5(DS!RB z0I2*f#QC7FG8KKFLb)%fCvi#BvJpqc+5G*#2LC;C4(M3G6v@bizUKDfJjeqHoGV_N9t6oyhwp_(8!^O>+y; z%!`nGqZ}Kt9q|BN)IMOj;rLU>wSUCE`beI5gzr@sG2%yIoScn1;z-%OT_upn>c>`& zE@BsBgnHrX3x+8}YPv5nIY;oj&b0DeU4o~)7RdQTE8#8>f2kzDWa>I5>6 zKPEZI(+5m8kEwiZWZ3-rVR&eXQ~$tAh$(DoahQ#;b?|)#US(eOw^^asmY2XosoMQl zt(;yWv?XMZEtwRoF>*!oj-LeX8^S?=h~e_kVnqGhhc7~v_kba31k;~MR=Ky2#EpaY zRn%N~Bav!9LdTUt8jixYc-p9*& z!#BPdUbtcvvwu=T#-DOdFmlz=+v|Q9Xh+w5laIaz#}m;|guJC^im^1JUN+yCUr$M^ z4%kKUXx<;_ZN*=+Pfgu3>Zm9Fm*qA+@^+-m4P zVpr+kvGF95;@l;;l6jJ7tf=%%^j#rZV_bpm=Bz470+=BrHfCNbzco<5=`6-}UgO=; zH1GywSF!J9&yHR+h8TC%)~_v~+LH=zlILMdtM*e2kSQ^{>(G+IKA#R&n&n>*0j>(C zj-m~c=C)ASrM$Kx5manPcS@P&d-&~{@Lv+mX=fC*D8RMu!{^?^P+hs%2=ooQjrnjmoWOm@J_b;g z{S5^BpN?(UGS8>|xirQ#@aR7IlsT9h@_ZeZ?1>2F5u-X!Vc2Rdc5nEDn%2xx!R^@L)Qj>5X=qfkc>XtTWR ze5v2s#w51Pb7lSq%Rp8|L(^Z-F!Wo2uH zOY5h~;MuX(y}B0(JzMHd>B8vJD&g$2)jJazqtOYZ%mbw}J%fVW8!ONWq-g2E#9Mb& z!Ky-6W**AvqPld-j>N7t)PXlvB;=2}`iUq%$R(0$t!Axxg^2{G)#A?eSxiv9@)1u8 z&pT`*H%8ip$e^bVi#&+kd_u|5zJzSjHcyyeNY0Cr1x}cqses1Y!tB7xbz7RyVxvv( zn4FOqu5u+MadvXp?VCf}x?O)T-V-J%w6)m|#F)DSkN5lM*iB)O{Z}E>eHVKD7o32n z>I7rOj!~2;@9@{J`~8zVgMQBV-i$T^UWgN{tKN4Kj^-)+L}=Ev^kkxmv4FOcrRqt_)0-`(-`Ra-5P zPm_2TmPiet+eh47iIwtMtZR>8k=t0jdi)To{5q$V!mM?|jD!RyFp6JO%RU&`?7CJ= z9*IqyY=>;^&45${&G)*|~8q zl1dlR5E?wUZ_x2;@gBaJj5~o~&%yjt-yV4GI)kYEw&O$MQL}xxT6vh&aBz;L+%M;y&CxDH{>NpXNYi z-({7jJ8Tbq?ly&t8(r?%!IHx|UrG6AEr63`@>HY}N{Qt-Ez5SOey7H6V0u}jhsc8s`Y6|eD0+bP6@;U8pqE-^8vb=tO{TqrM{tx@nP z6x~*}6L4mM|4z)UoxvX7Sql2G$EOM>#tn)}3cHXupfnStPZ1KmAF!B}Y5lM{ZnK`A zD^exH_Ujkp@xznb50$K|y-btA5};faUDLO7zwG3lgws(_z?`xv1iIW*7=&alU5?o} z#Agn?j56^aznadCV1fbpS;25mE(H(r;rSB0c$WOj{Dp=gY?&sN8Igih2IB^F!x$bs z(9G;M`NDURt_drWGY1hC1`69TaP6{$^PQ`Jjv-zMgWB0N@Sep2+UYEz)3$rly;Fuy|o z$qSX&*hPohT1m=Rs~Nqc&|<#9R+)oku6!!KRx$5VYfN7^mCLBxd^)Y1GqW%z_6-)W zCuKMkzpr~+^9=<0l#SezcZaT;om1GpGg%3LKAVzfrfSyM@VzpSwUVcPvC>2sGETlO zCnfZ$6mcioBfV=!$RhC@IzSt@dWdu$NG%{o}BHrOg?!~yQmYVd=<$AFW>iM>m~@!chHe4o@|8M(O6W5t>xoltG>?w7f z;dJSUPI*xZ@xsj`BxSZ#wjM3<8=E9>$FmMwQGYXCCd9oTu_BI5B}|*s&AOa^0e$ArwojMyA=19JXWLPfWU5@sYjbe_Qg$s8bee4 zX7A_S1l)9`#TQNasJ-DWPhPYR3JVG?ERM zo;iAS3ceNbL%;_^4T(#6qqrniXS~^~0-Zur){(1$V@&p3Z(ELAjJigX>2+ORAhsSq z^;p;|o`2hY{Ij3GaCMHO^>zfWFHesv9Ge-i=b>u`GT`Jw2-2zf@qoYQraa=xHcS9A z>rj|(uXId>nvhwwyfI3q(?^$IFfAuyE(8!&7rmqLbRHc{)2%IZQZXOi4b5384|91K z=0q|WqrIF)9qH?(HC8kqbuy5NtRXBfw&_}GEp>N#!4YFP+S~Jv=e_?7>n2(JXsi5< z_@{*BpMI9V?c$!oPdUv7+)>rRi%GRUWuivXczqi!PfLn(ycdgRd%DAJGc<;wTJCDo z5|dB&y5-V~t^>culnIM9g`yGo#dx%Yd=_+6zN55r^+#N9#Y~7z0XAV3jS`Kh`5K9H zs_wNK;686;utHA9`CH)q-+hLN@U{w8nf;CwmaBJ9(!4Eoa3Or>q zdHtSp@+Hy=b_We_fs_0Irc8dGx4&etz*!KRutgj?r^1 zRrsa$@Z*>8ytiJ}L3Mfw=h%0U5S0Gb7imglG=wNRX>K9Y!@^_bVN+pg_IgU-JvE3EdAno1m}p znRnlt(cpaLSKUtDm^Fo7g!EmbyaR>#9n}8P*_p(cAeC7U>h-&-MV2TV>Z+j3fPC}4 z+*(&Wa|VvZqH$7APg;$IbX+ccxANgZ0@ob|GJOcp=$(6)Gn0I{HvL;Y!Lzd{VA#3nXLL)p}v^DX2-$W+s&s8KSWK;Z#2~cP2HR1R5z7F+0W6C{%ADx13)-l zTnS#mLE0*i%}=HftXbkUFRd$tGl&-h;nMy+cZ)B+S`HC3F_?{^VOIN%e^ z9BJJ-vs{bTaEb(;nP^n8_zcINDobk_|21H}HCG=-T5T5K3yIj+dVnie62R*P z61#-yJ|#9W-D<8i&x0I`)_(|^NHhtgj)qVZDYyh!k!Kpu4Lua*5d$#{CzJ9@pE#ME z##X&o^E|-Hbbe)>Lw3?rds`^~WK?pOLO4wzl=;bWo3*2VTlvHHOp8yyQ2O%Krw+R3LHEaS*s37k>0{!gWd=$!;(KvusMK|%9BHM zp^LB?>kD#wtv08&LL!d{1|C_F>*^Qu+p%Ygsj>RwWYW4rEbIp{f@dKFEtO(o%)jqhEIFM1* zN21tqtEz$-w`lpJTWkW`E6~MeaCPMZLH4nsENt;sR`UT8BcM-8H=qbv#A=kVC%*yN zFCdbJe4AI>dqM%awd}?;`=(Sd4_*l)&aMBNzh_W@G5vwV2MsuTzx_z5_f)Vbxfvc3 zElXNqX|Yk6hrf*zj-wLu))P5!7#VID?i`wn>sq`ARI?BO5e5bXn1wUfNNd zXf&Q`F*np1ak1{HZ?S9=(+J9^zViYZAf86`$7x+>nb7T&|8U}u0k96u{h}tEfBmvDN z)giah3D8!@vR&V$bprznVXry0yqTeq$bM?Ud%wdzSiLEjT^JRxad#r@uINQp*e|mH z91^~k?+?}G6>SP)MzBE~?H>Cu*vd+OWRXjQKNnv$uW}_F(i?@eAed3UyK=w)f45FD%63 zbC^m#Vwps>y=3_jV`=HlX6~I-pL7Y4#}RieT>%jfvqf9a4psN?3V|$XKDtIuWk1xAzev9R9)ts;O^t?JH=I!Q1R6EJ0RGSuC}k}VN&f)OC-k*Q7R}Y3smz1-Gem0<#{yg=ZlH0hvsKZuAB#J!L#3b zX01Zq0g{?YbXD^@1~k!k9@|t7uK5w<}(IPAF`D?_nu^bZIo!P5A}oj%_cFJ zWxNZ1dAMh`trWF%r)Us=k)PSV+bOMw?%d5U5IN%6&Dq*1n{hRiX0O(=1B%T@x(2=D zU0r=LYsDP(Acw%d2(;*~@FA>Nc%bz5a-iSxV(bkZ2^^VKyeP7GJquoxFG&EeV1pRs z&>XSgYxh{%fDRsIUn?>QZ0fJart$TNFf0iiu-!q^1v znm-Rh5YQR0IQUL~o@gOPr=-&g3NeqZ|ZXIl!h z7ii1xmQ)`2OM8vrZ%6YGC`FLo7j~dbkTgC~e^eJ$+SjFC=s(B<1xx%G`o^nqG@Zj~ z>@-Fr%7{&*;M3sHVv#{l2qbx=DYGMei6A14D+NCs#zsmB70CDwZ0DqfsT4)b4$`vR zY?fsmM!56Q0A##8W z?2p#n9Q90~g^lq4Q`vO~Qr&)WZd6t(A!Jn)GBUFjl5vgf6=jc0cIG9kRD|rE%!_N? zYhIKYS=oEV#kFO-*YEbW)UUVR`b&Jj&-Xm%dCqyxInOzt6W3{bmJsL5-B89$oRk?-Z9;0NXjJm(XzgU7jh9%-K_+Cwf}Z5T<;xUpj~}|G^njwl zlYWxwh?DQ+Jwy{4DVMYj1Iw&#^wk6v+Q*d{I$hcCYiUL4AcxAFy2ZOty8#6H`ZQzC z1#+R~VpyW@RwX?(H@mc`hW5<&CvwD0jJNf^_m|z+B>1-pRcE-%jo(8(wWQhuH;c=m1qWVxgVL0V%TcQN3glVcH?>|r)t3o@)4KFCmM8Dg zJ+?ZPa~u8mf;!Q}7Zjl>Y+{yKmwtX~Ug(nBDm&PPR-gP)met2Y_{L6#Im$bkJV;{0mQW5j>M)9t@S^Sn!p_p=_2?6{)W&`fGpXwtl zE0m>k*V_}$##x!Wh>WT~6tQ?2P8z^cQsa3p&xmK-@AC|6|Fe7O;*x)Bg zT0j>Of#OJT45j6tP_B*#Bxg%yY&}^}6kElkNqD_;JAW;k4f-en5|iXbL4?grOn*~0 z_tdy=?j+?o(WS=5?H;GaY9t_7K9ZxLc4XLz*8F0X%YHaZ)%4Bmyr^yI%~7lNeo22K z@~1sfqhzXgyy}-K_vrQ()vHS)AR0T3aM_|Q%AM+d_lt{s9ZOf9tfdk+wtA9;-0uez6xExxRF zXi&O&w^LltGveUNdpFBtIqP{ThMQ7bbP9UVs?iIp>&MyKr;@tRj?mW4Jn{`EFeZGD zii_2mmB0s~$atB~9u8wOdel zbBvqq<>RqAlNrIXxjq{*x3fkAbqv6ge5LZmqH6)y@@*_}@yoltU=YY|Z?pPB_VQJi zQ4v%}if?_1w1OGEWvz~u+6T5Ee~rAk98Db^%O@0^{OV!z^8k~#4{y&|U+UqO*JH}W zUd8sl0U5jwaV#_NY5Ik!4)^*RKZ(LFlp(MNm_u{mtw*QCDiH z#JBEObGVnWJEydnq_yOLymXPu$`@Xofv5FmV4YcKj$|!xF;emEgFHLOZQ~XxZPee_e(Yf_mtp2CrIW$_*0t zacF}g_}XF~L@qu*Idg@LZ9PH;7Ce(aACVQ1SB6hSx$E2@s#ls_<#Bs41Syc`ows#< zD`xa%+1^OHJhFJSng%5rws5Np!SAF`K|!HCw{{z)r92L zUUW>l90Pg}PGIXw`=bH79)yxx5O7)0{*rjjN9_#4dN<&flY5=t>RmpY@Z&GalZC$} zIA9CI8!kRK*a@6^HWxj=uBC^wQq6%=nj=>77XJC5Ya+x2cx&6mMqm6=Lu1YCqib7T ztI45;YElJnw6yXPIX{tD{69z@Xo`2u05TEDmYT5JVqmOBd(}&L_^TiM>_T!<&nK`J zPJs7o<}O`;cT7-$$hRsT2}w!@oakNRInp#ea9Hdj*KOz73%|FF)f@}; z4DZuplZCPOD(46JV2g*e?vxKJfxJxAo9bAf@`$6m0}qNj82Uz|es$&cX((Q1T(r0f zB~H#RD!ak){yCy=lzjCfjG4K1*4V7`tiUu4*z1oHT=ZUG;PCm5al8N$8cR~qwM<|V zCRBg50%DB~+Ubl{dFBlJYl|md?Mg>%L?*3c180l67X?a>7~c55d3?FLIC?xY%jp_b1>|#4(&xYYLxThb(Tj+Pfyv2w%<BI?`xKPel*ZHoBT`#?)ucXPBDe&6iqEnJFfw)I}tjVH5|*iF=%Bt)j;^|34&7BIUhea76Hw!UZFrL{Ycs zs;KB z2-x#%>gJ((FI>Dy{57?s&%bJb0k)Hmr3ziv-ktjuGv5-{1@2@A9-P6!)+Tt0N;Il! z<0>n!qIk8ho%r#EM`ZV7aBm#3qZ|G!zDqE$;jL}UXXRW|QaJq&1wKOfSU1lI3ptnH z1JR6I;`!wYG*S3$6MDxwNK2QgzmOTijndS>$+_&(ZqkB#Rp|$o8M{IpN` z)4U78rv&(?#Rk4ymL0do^TF;aTff{w+5bd zi*vM}1p_E0@w$2x;VuxGI?eSf#a5^Ivha$F_A_U>$+gPdKF__u26(HdyiPZ7xccKOj{&Cu-j6Se{HS#fZRPKZ^UzPp6GT$YBL+%; z4Un^Di?(;< ze2>7S+ftFsV0p+cEYHqCj#yu%IYiA!O zrj~^r%?xcUXuS2iOxj$TKE-qiDr}0+nf~~a`=PDdALZS*-%>8rAe><*76(n+ak*6g zpcwgmaoD{DjtEtJCn(bZ7YnRxJJ7y4=1{z`&>OR2fL^l+%Vo*Wa>#JVbjWgO{u6V3 zx&f?(r#@LT3c$KU4g-n41PH9YV_VmeOS7vMV-O1viW15YD*07q_z#==7Dw`Vnx8S@ z23S|>1&Tnk&#w;%dCnx|h=Q|#PG6XB zMVlL;fbXd2WOEoU_0Y55M|-Zr@RHm6F!6=z$#2w)XIuuYMcuQIxenP5-z(z&WyfN9 zbxPoNb@L%M{YGzm|9A%j{&}??^XEu^*cq7kCDcIqVGGU&u=pnVq@+dS~+;Vl5u8pTEy7Aw%)z@$Py!d2du;Qe5PvHL@xzx#@KoiTb$Z#b0 zEfom|y`@$wU?ZQnwmCr3a1@7D4pUN>4GgrdgB_bWPHCQxD`r0&#Xsi&529<%;)I#Wk| zn(+vFB^++)q`go>K_1obWpuNi&f(Z^XK&a=G&{DizAdu{ByFerd^j}S^ijQZ=Y``S zyKZs5jebSHmwQM-sIbj)_I2qnj>hogyc9km2jEZL8Pq*7cKdIEfVw2b>8Z{53r zJY5o<7|JrHcu-a6Y$mw}&z&B|cqU|Im}K>Bzk%4wZt;{iXU65RgWrJTr5coZM5rXn zhJaRXcx~omF1I*K*{4s12iS4vE0H2CV%Ve7UzJT%_wPET`R}}QKYu=WuF!1RE9Rh< za3C_AZIAR^SZ3y}Ed8PY1V5rdSu)owhR|0RZWHdgcjA_sjis?gDWBS6%h5l9-x!?g$hiLT+mXEfS$i6`NTA`W#%KXD-s=IEc@QR47I7! z$VY$d!buK*4*vScmUv{nY|BFq*S;kYSw&ztqwj9ZhNi)(Vq1B)^ecMtXNuWZ-oEw? zRCLE#@vp9CIYv6&Qt2h3#`?#(?JVZ)65-jjwatYHZK81F+DPKEwMoY7d)#mn`LqCH~b1avSd+3;= zVutJ&^maoU^Q!O7hO||9OjE}cnP;7`j4d#qMa)DWfLH75=H8c>z5F;IIlfRRkKXrO z>p3$}0j{n<)WnB}!bZ+|vLQF;m>wq#mF;Q$AN2GOELJHUl)22|#m>jcnM!h=U9fS{ppKc3$#6IKui``T_qSXd zIB96Ot#rwHwD|2@72uSBLZk5aU>4E4YUo z>Z~wOyV`9dc(6#7=D}(z>A7o{haBu*DK6@~>~np2!KG1A&|^EF*QOiW6*D0`j%{a0 z=9TPJK$^|t9OSI{yGJ2U*n6yI5eq|L3Fn1=MqnH-KRZAAZmjZF7REA#-6}46@6pqz z#7@x_i#6Acq7p8s1D_z@R~q=6V&3IypH_th)zvqYudBU^fCP|+pIfJ@-k3qXb02C# zz=Xk`Plg>1YWas>_23>k;=KoCQ>D$-h2?`Dj)XUNHtUx>D`fZP;Vv132z8z`TwO8X zA;WZ))tbyEJ&uFYnR2>p?6wx(w`gWTd|cm6VmDAqV3Itx5n(!0@rG*9e%m0mnrktz zK46CT-0V}y^xKKSgD}gc!r%>WnV{C6D4GqbA>pcNT~S8q~`|{%Af$8b`&^r zPoIKbckC#}ORJ!Hw2!%~xzsa`VsrXEu*CpGm1Fcs@KTDTZbcrc{$NSyVwrH7irx_y znm?F1uK_ax^=df8%o9{!&X@Q{5-l^WAe{SFz3}9&b>L7VX@ducyqDGtyr-McQqYs6NIzAUPvR#V`sS zXYKPo&L*1YITgdY9O$-3Y||tw_}k`|-V2)LTks4O=o@Rca)yX)SDcQ5M!YL`TrwQOvE^fIswr?e z5ZmKjSwB}=jZFsWy-D(Rb#0?-kn2Q&3xkf@lgvwMeYGA3hCaFj7?v6)x?!Hvd zmWq?O!``V;J^c0R(9>qVhS2|`p zROm2`^@;kM{oM3M6Ft`&z>WQ?d3@K!5rLDEwSGv_S$&Tp$Hjg{UYtzHBeiYOu$sQ} z6#-di&z{9}q1}Lf2j^IREAA4qxQkpSUg1`5ir@TqpYSvN<)Dg$lsgjSS?FUYnj}NS zK|@EZwiP6mcT-V=tXf-hSA~j$5^VaCx{LXoMvMtkC5Ec> z4fa@kT9k-g+fG|?47#xzV^s^bq%vatIHy%%lPZGwIQA+zxkgZ0Od!`{YPah)^y3h3lst&CiR!`6my#ICMehEd#_Rg7w@2Uln`{C^uvK!Ch-)X z9tVrB_#@&$DUsw%`;_yeihcahzAe|F$E*0S5>VGXK0MOTwLAS<4#c)U;Fo2y4Gkj5 zcN004&Yh%Lyf(3yv{OwfG9&!9i~>om=os^2f#^W+x}+H$3HkiBRC#wZGWp+{%09OV zXO|tY`dseHiLZr-9RO7gq9&8(6h{D8w)nb-Yxm% z3l`di=FuzJEu3~k$3oCsc&r9!DRzWVpK;iP4)G z6lvtfu4U{kJG1dHXXJ(Tjk;;3w?;EjCb;Bvvr_~)T*_o%lL?`V;6n-YSFqec*x9OB zbuF8=MzGAZKlYmGfq)>9_N|XvtXq(4Z^r#_3?6K-tD*}X7rhA%BG46@hGI(YPjqAi zEN1sG_IH>L@;Pxzy&TdjcSbWd+aYj{JpH2bta2Clj^ZPy6C`CKmJhSLkXPWK2dVE| zHA#fW)K=GFGD#v1i8&+r^_81mF(t-jA5lH68rv1_-A-$7`&2Iu6;Jl8EVpVJP}?sl z)4*W1OL-%Oyn;Y@EX9h@Al!P!t9@=Ol#Ij1dWr7>o32LQ9Zq5AWw`oD;Swt*(7V;c zKKlQgtUeup-93sBF|MzF@_A3FkR;er3`OgW(xbBoToD(xL_eDC+#8m1ck|FYLiIqA zzM`tdPmF?N6Xskwx%Om4Iew{|Vf@iVRR0uKUV;-U7TijBPA}N^Sc35-Kn`(HB{Ie3 z@ka^zaiiLis_8CCK4u z@^uq}24h=x4yB1b-Fc%qXS1E3a(yd{-H4OkIYqRs;Jy;8PTAYy>tcI3bT1hbld$@m zWpHu}tMtbM4jhMee2+fT5b9nXS#WjEBDE_hSS!h(4 z`#dw%1-gX&D9UaBxr3)q3$M{~@lyAe3FamJ$CG7ya21gxhTVmdXy=_Sqt99~{EqrurSL8GDb(09Sxa z5^um6Gb6FQMtSJqt}81s1hl?)q-uSHir;5ow7Z)Ek3LvUEaR)Oa@8i`fxr9p1%CVHFT*4CA&Od4_;%7RF`Ex!2!v&ii%m3 zkWti*jY~k)OusCTF)T|tx`IcE-@5Jj<1S=V>06!zNv)qQx_*jEoFVHNL%N+0@_MXq zO|SGd2I=!0Kn;lFbMXN&##ys&Sd1(BDxrZUh(@}7#7+p20e(g6T+Gsr@3Gw@^lc5- zkL(IUY$`@=9#`Qcx6SzhR2BFHX|c$5VKc39gB^nbK-~p6NxDw*2~RXdtEc))At!UI z5{uHs&}xxOL<+}Mj&L^$XZxEMXs5}M&vmCHB(Mr!>f=~nCmoWA5}WIpBJM=`h_@W{28L&?WEeFnf|EH{qHCEw;BJdhNnFuQ@p`aIa3#?R;qMA{G$vO^7b>xi z*Y@UsxGm;gHroOWgw!m1KjLS`>mu%cI4+oKMd`Zja}X|I;Hr2BJO@qJnH1%3%4)3K zS>95dU7vdgW{pfEz&(v&V}atfOU@M0Z>J6gn;A!2ro_GX?4cAcwwOD*7B9G)XIC&FE>n8xPwAeOhuBtCn-K)giYaGZ^RgwyUD$&V`U& zwCngdquDwEJ0xaVfJE_Fu>o~_djJ*qfoj1sk#9GP!Ax8a48>JJdH$fsdns9Xnb%L{o^@#<={uSbcBlJ> z+L3$e!25aI9b5?-MP2y@Hybo`1%bY1Zu{5CL}c}0gBoOdp_4>7%#KT!WfXeYa<@y) zyQY~}jCb=Iq}8+~3|5dY70-{+R+npI&|{>a=^B@@gIk!b&J6D4u>m;1@Y#IN6N6?u zQK%*~PgJb2xVAgAfUkvPW1=7fGm}SYFi_-Ty9(UABd@vvt$WPK-_1_ga!&BJA)AM^ zwDdqKH+PZo!nSPTc@vXIMa4n)d@2x6vIe6PcnoIPwXRSS3-<9PR2V)MO|L3*$yLj& zbp>xA%J(pVi*RMq3LsNckkDp~Miyt)CLAG}>*bna;iBhZZrDxmOlWT~x_xPJhG#cS zP!r7!ta(eIAk-MYltu<1?m5xVb|@}#BxrU&zNeXtb!4 znq#DM-C%NKezK|{w*Dt=^wzAe`RvW?vX=ze9Y$ywHG=6j)FZm|2gNjo02z4-MYuKH z#XazHb*nCb7BZgKB;bm`T{s(1cjAnyPlt;lWrZW1o3ps2P_esSx~ITUab1Fyqy|q_ z5?c|H{lz6ZjBj1zjwDB$V46N%b9+f(L*4d6HhM%j)XpfInY)0vq`QK>NM}W4bwFA7Y5T(i_Lr0mUe1WnK-VG)ebmN%B2%vMAj#* z-f!h3^3MvGVa~fRsMiLTA+Ie%Z8`{D8mSY2_lwS-AknGXo{xj?8Wj^*p(jSi%9qm0 z#)20;BUm^39m%}eZE+jMRcv&O5y`)p*sK!FqeHZO#SXcb+8A2nc_mcb)S0Zg3@G=A{nrPfHCY-8fFe@S`@Ko zdQb-*eMgx#0>I!tP%m1_R*bb-Q+-vcT|5HmPlzi7mDz3&U17H^n<*S8N%PRqnvDpl zj6FI*r|JkNEGib}{Y$D!})*ptCQmobd*ZgE{x^XP<))o9(=?$F4C(`+i~ zZsr%rs(K@<+_!eB_FzIeUIwnMNm;GwIu`dX8PrQ4O(u;{12~3;w}uBAKc`pxn{3rw zy1y`Xg7I_5F>J7U-_JXs+UA_#8@jZ+1z5*vghz*WD{!|esixi$4@?!FPE5dak+ zlbU?tmOWT#Dhi-yUkgeZ!Sspa<>vVS2IPwSs=NN5Ay- z32~AkKWYac%7ElxV{t?kvx^M0&R<>)^x`~tFs-dBx)PtP8o#A*B=(7y7DX}iyf_wO zn#Q)84f4KsaHta98~4hyf}hdWb-BtDj=FE+rxP1ZbhM@^U(BORohVbjfQ|iDl$jJ61wNkwN{iA4u93#c`BZTg zxxdubj$N=S%gcRYm1tP;(Im@iVc%z62(?GL{SZ7j*-r%nURG%gim-|YF4?=QKsKl& zDiOs*Z@%>V`*kes zO_`trfJ?7X0ydFK)#q%JtV%h#YBUi#d@fZiUDYLxj*IW#ik9fUBI*!X{TR9U?>mV7$GOi3I}w5GpQ`wf?nIz3SjaQ){8Ds;#=vfHn25|dU_UX ziX{ny3*JQwHjd=6Q5$#nc8!ZO;owjV$Vy#Tt2N+#i0pXg>2`52D6w4Z?);U3 z1f)C2GjDx~)orw1Oun`cqJ%xO zx0uNBPdfRIYW8mGRX|Nt!S1dVKF5CRbmMB)VD<7y-M1Zr4WX6{U%Q>?I>ATd9LHsm zt!Fn-@BC2Lrt~JA>!cu!qWjXcfI`PxN`<#=tFV}EhJ=93pb(zZWY+HLxhom!N8@-m z1I161l{c9gUFx3)yCsrwJI-L;_JWs;f+TnNo`w|NeFJ0mD0NvDb8p)5-4hPP%-%lY zWQ*Ao?bLXqGi^KM42I>z7SG+D-NTO)=kSMZ4Mp zH{)4ENNNAk^a#8A?()d}DgEF$E^THn;noKYvd)UZAW)7&eAm_$i_T$9TrTGHY+lQ= zwov!s?YA?#VHXGeeBVDAWDax#<{D=#M#1h)VJ{V4$)?_9-bWU&3qi0k>rK#5(?ELc zJ>T7pg*l()Wg;-RMMuEAqef3P&r=^nyT7)s6cixD_U7z*y=LJRhVJc&#-x_LRB?7Y ztJ;7>PU^ZG3NoXuXBgw0S*0%Ks%C3Na@i5rWn1tR+?wO6ir`Q(V~zO1T$R1Ex`~S* zz1LM0=jByTrAONkW6YH3fxAb2$Lsewb{;X6v!!px%6xBasXx7uDZ~uGH!&e z@5&piKxRLvqolz1vUjU|i(`{`0%E4(DaPC2HE99v$Kpq71JEbp<`d|>1XYSjY_Gpo zVYy70HJ`L`-P8SOqQ*QHkSBYvudj?*Apz94Q8C+*BAMO_wWTIuv5Ye^Gq1mqs}K#! zMz`u$>V@6bh+EFSwTI4XRO8zc%)fkbHoo>x3P0KZq6iigspy+;K5mSsQ)101+NMyf zs<7`|ehoxt)tAlGj+s6stFWTJ(lwrhjcj8vS$6Wfv-BZ#@-95M5@r`2*I;YH71p7pu|M-$GiymDyVOov%n zx#wYrG<@gjGRBN>cOt!Z+q!8wWp6o@jf2+GKxSy!GU6KONsi=^hrlB@o?gF1k0c|x zm^f4&LV~t?5HZ6W zKA8JfnPvT(>jdX`uM44x!j>Bk$}ynbs@;;Lg~3tuG2it20Q>7Stz@mObI7?F2xkQL zuH}}R@hed&U$Ek~lBBcd9g(_X=7YI*)q6;1?){h7UxFTN@Hw5hwBOh4w|Z0Gz04Ca z*{2eV%xy*PHk^vOWsNTHm0LVP_c8EblDa$GK+i6eKw0J(P+)D1D9sZ^v3XAP&JZmM z)&tcYYTGhOX-Izj;NibrNPoKaSL4P-i^|o-<3B+Rz7PIV#9>0#Z^SBE-?+;fORMwAt`&>b~wr11;>`*C72tZ=r#z5@=vgRT7%Pt3Cra1r<$* z=W;z*^_P@WfE6-Zt?6@zUn`LjEBD7(Wah{G_b{)K)-U{G*9`ddy7 zxw-@!?ff-kR{W)r5@;Q0=EF>L>;}!kCSF&-i?35>Palmn3SF1j5AO3kRKXcH# zhTyoA%Ij&o?rYzC^UN9mR(_vgzJ+Z6&9T5PaC3=-+V$(#cdBmWeJaiQ%@)ALlVegY z(&@QP+j#vjRVOikJ5WuLQ>RW%fG-W>{x0+7#{{NNQ;E1GQ3R&rVeMphfE*t5|DXK% zuWH1&N_SIA?hO;T{D+NpXgmp~(<@RpZ{y~lMvM)!{tdYj_$OD~5cgPdC^WovCn&x% zixnavCFM5@?&oHW^sdU-9sPrwjqTZ7?2Qp?t>x^wF_r&4Rh2;m?;ffzB4>ei!mdEi zBn$teXwTN4v-TP(k`I;(K>gn<{!ShR&<++qf1z$wJ1$pNH+8CGOKnW|TVUo8H-0#3 z{3tq>s*7<>fNH-+0I=!DT&HG3`?Z~C7DHdXDCR1=$FZJ)_Yu+k9|v4{AaYuoXuRW^ z^|uJ&$>a1sDZYDeKP=D4+AML*4VEEzgKZi1U2L{1!ER}HpnY)r-exd0rfciZIz$}X z7k#DCv;TWjTkPDOtop)G0R|Uk-$IOgAJSiRLE6wo_>PIn@^=%od?=;pGdAM z{Xc2?fgRXvb{4#sghYt6YfmM=ulC8y2Y^BDNO-~Yf#)RQ@3iJW2ZuGDNbyZJnp>v7 zPipyD^2U*8Rvszit|0M{utVSe`LRPf`m6X})Aqrlj9ta8c@&-yxc(>lei~rh>&fS0ik1E)$`43bce#B?x)T2j_PAd7a{C%I{mD4N7$#H5? zv{ROUH&w1rsnACMCJMitpSQ$WLTrGnR^XZZ-(}Ey<1i$BU7o`e|IP2-d}`f!w#q_} z`)^bf4nXDP7t$pj5E)|)!DX89`Cl=HHO*VIa>>&jF%yFheQA<%D@Bu#h$yY&T*jW` z$d#W{C8YtoE@_#^Nu_aiq&|;-G7qp?u<>T&ec6v4kU#GyA32WX>P-6p&V8gGj+4b3 zFGZY=b4XI0-FCY+lgB?unVN>rqesVASCrCNQA6#X-;=t3y#znJ>sREBob61V@IdPc z{~enmZr7xm;QW`P{P4~{c?Uqp^9B`Ert^oR@@I)X8PbRH|GQqnxOi_Auv;J+aaZrJ zdYs|_SjQhfeJTa`&F1=kzj22`*1;p;?!Ym^mz^w=C3?f;lE_u8El|DMI>qE|_@yKlAq3dZXDk`|Z zYyaPi9oEX4>O8J5^NDN%E`x+y<)7 z6#d}@QFim0Oc4ij<$rXz|FwGi^U%tn_#c;LRWlS$DVdrESPzz7f0>%fwuZL1{r#Fx zYcZ(JDsc+r`$?}FHLot-xA@`t8WwV`V)Ibz(MoNR&KW2$M07tn3viZQCH?fFUbjD; zieHr48pF66hDa|m5H(5t!)p6IxB^-s;|&k#fpf~BVq01%uv-)*^1yIRc@7k%t@$*3E|IC>roJAa-j8}54TgD5Lm zHT9)??|rHdrX<6Xk~n38�MRTKatn;`kZDSIXJS zq@C)h78b-pI!{OH8o!(Eyxp^py$C&}a?cXudXeL0klMPN!toWhGP@5wg?ys=mc5xA zot-M_=aU6*gm8<0i(CDYk+^t@5#C2}kH|>*$($EC#m|trCsMz8jIKrK2PLi?iWgs# zG#ZZa#6ncaVw=capa);mxmS7WG|edx5e6+@t%0EHYJ AuK)l5 literal 0 HcmV?d00001 diff --git a/docs/idn_docs/triggers/img/jsonpath-editor.png b/docs/idn_docs/triggers/img/jsonpath-editor.png new file mode 100644 index 0000000000000000000000000000000000000000..96d3fa7b9a26f95d5ce5ade94b6edb692b9127ac GIT binary patch literal 117187 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 zଷ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 literal 0 HcmV?d00001 diff --git a/docs/idn_docs/triggers/img/slack-workflow.png b/docs/idn_docs/triggers/img/slack-workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..ffc151cb07f791cddf2abf7d773443c8947bcd78 GIT binary patch literal 84663 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

    OAch5&#UnfZ^QE>{C z{M1`pDfl5_++V@p^W~MIyW5JzB^REd+hs^+nv3&f$aiZCEY}g#ox(Xq%2-Pt%}Jp^ zgASg~Tws>r?cGhtinC!Gw={UNQ!gdLcNA)dJ*g@j!OeU(fF1ipr>w6;=zv>ICUO5H zN5og#7rND3)bo5E-sxsX5h6z%ckSD%wvqS!sFhqa94zw zG;|5pS{R~4VF@e7@;TG<-s228&j`Tnhg=_-ERjZj)AOl4+$F4Y<~#Mo7n}jv=`HeZ zwWU``?QM*iMslifk~jv%pFVf~EMk>-rLxQ89kdxnWz8raWXmjG|JfArR2)t5^amOW zJxk{h=FJ^p{77zvvMM4!dFIt?TXf@XfZR!K3XW79^Cu8gHnXWfj=MysUL!v&p3X`w zy-RM`-8>#{-fl)#N(;SEEKz=(@YDLI#~r>S^#mbVGg386tvM zqtL#M#pzn`N!#`T3_>!51o%1{Y+c0nU2)1zpBhSS7{y+TS|7{%h36wqdJN$tt$32R z>Ob#L79a+7&%V1Ji-`&uSVQVOhI7_^XD&E5i%W8Q8=4!G9J#zuc%J@BW%$t1N3F}y zY}+o0SY0CN`%#p$-!_Hj8rk8JTgbz0P)4cjW?^Y%c<6{6iFkt4UXpowH$OF>&@08a zSXUl$(LaWgB-yeuXBL}1St`zFC>qWI!#GA6<+Qa6Kb}}zjEOb5#l2-Rz*-h1y1{Qq zJX;HUx<6XWN%*CU@9$Bh_G&*1ZjJR5qL5*S+?4tClzRu;It63bTrT9LhqghsC{^!$ zvJq$A&13N?^3#N8&T*?r68Hu&(X=yj6DmGd!K}{|&1KSr*vd0XP{r{GF(bV>n5*XK-uQY*F-g@glJ-&T#zv^iHt~q5Ph|f@ca;5p7|oY zzW(bc;kSJcGrzW6HBw-x(^dDJLfNC>nRi;5t1t}nCvKm{r#SV$*@!1GEek6@go(!O zuTm2Dl92;VAci^V&q0iqk`@gUhu6Lhnv)Y`w@+0~sGes`#i|a#^qpH>{iX2QXzJz% z8|W%iddu;g*-VIT&?B458eu=l$6UFe{Jz{F;aQGTM1B9-j2HaFiIJdWg{XycxbGpA zG~Y1!WNS&ITZLBZ?E2%hCN)WgQri%E^?Bpa0` zm?ZOLf}mnK@or`}OuBRX{D}SP{DXzy0wD<&LxK!V=yS!fz*OQE%G{41F@Un3-twBe z^cxEW?4U!lBw}w|k~%Vs8*(Jqst@Gd$Zxyx136J%32u*gndox{+s+dC()tLVq=W1V z&f?kE>-QPPu`Dm$=<){NO_@MsQP>9)q&F6Ng?Ed$0&PE#eyO5q@*pxYqmr<>lJUUI zIvp0~@(M0Y1EgnYht zpgTuc?)i=G{>67gpGDkEv?wkF`OX=I1R;ab2P5EJ4V0uN^wWyAi6S^M8BgUKEhrzEX!nl$+2CbBRoX=r9 z00)z294@I3FVD6E=8BQo++(VvDPdCh4=#eM>+^j$C=b6K&UGnJ>fmyZEEt6bq81`q%SYD_^HHw7V%i5LZ8eVi>- z$H!OKRXb5?L4@JdW2a54t7S1HBMD9;Qeu0otE!yDjE}sOX4v3FyS{O7sNRF&=Wvf9 z+HK+qws7C>8J`MXKR*HTmol5JjXIXq`g|#kd|Aa;cY3Szoy${$n=YLnxNWtmEt&`t z-Ws9fgsZ$RW-t5Ex45zMxSxduADK&)qU9f0p2CD%Y)Ro-Bd{47v@V}99xUYyZ}`!{ zt<|mO!1S&ur+fpX?U+VNR5W6~$6LLh2xvtK!Fjqirz|m7bldZ(+pGT-GVDyYbKtPl#N}B z)E@@Lr#_VH*gk$w8yH${gYL4LyGNd-3j=V|g9ECvb&f>I!~hDBN}>_u{w>~j`xF!8 zfLT}ZWChKP)UEMNuF(M6`>93B;i;^wI6-V(o$9J%ZESnfPEu&QQ836sF0X7vFgo4# zQ$?;jonzij+)c=Hj(WRI4t}r3Pq$A?a#aTa=m_WfPB9s-dDpnXbaH5x0atLr%4a$D zgaGn;#iCgNwo@LYWt=c|GSJO3?hP3nDvPV?e5zKH@m2Sg6)G*}^J-9Y*(c7yL)yk3zy3b?|BqHt@ym zPRgfP!xSAD4ssIx=ZBPpMBSc&#-=Jb*ux`zE;cEsakDQBDx_KV6V1I~$f_}eUlxRt zQ9&FsV=M^eeHDy0Y^=d-6OBQKO_OW8cZs63g8pkZ&%l+^l%W6&wd=#45P>Ijj|%WR zo=}aSSnbyaoj{!C>k1;eI$LJAUnHI%2?OLg z^j=^HHAxILY-NUfv`JHI;~>X;>jO;49^}5Q zkiW1|4?7O|ZhC@M1l8~n2{LBVTegFAR({}l~2pr_7tc@||yfQij z4&|%dhDx=b#-7aEE-_+0N#VQ?7hQOm4uUR4=;^6KeP^=G``%v6~~oz4&}M$wvoIVqm{~~?H%_J@EGL7a&&`TI%s2R z(>#Tmng4?=Xfqr5R3+A|m$+Q8cj#_l@S+rZDE2WOa-FyTlOgRh-*;cjuxc5bxlz3k zSFFJrJl`=g-%K6w^-iL;yEqLSr^ls*+$e@jTAF_lB6Lg3=Gdhh%NfG#GGcyr^#=n; z3kNQ|>&y94-K2UtGip~|tCj)$f!uoc#6F@M)8kiwd}b2!54P4wzUj)a+38*_KJ+ga zS?_zXm)TiCX$3gfbzAPHF~)f4vgvOFiZ@g?R6ntCX1d7e8%{$`m%UIeAy$h@i*=n$ z;`c2{5z3S=n)>Z>e7aksXLAb8)|@Qa9i-PR8u}9Ds}^k~3FlW+U;7%XO+hYB2bj~~ zI-_xPDA1((*)~7L<$tZ7@(t^{76}2D%Rz8$H9Cu0WguWb7R6K>SrYpxzSg48*z6dZKvdN2hGYZ5=2F+p5QC$VB!@s(hTuzfgIx` zi7~6kU@m7GBLt2R+PvyXrd3&j_I3)(wqtw*N$!o=W-|;nnn2Pm;7vGjlx7M(KT9&V z6=}~W07L&)2pVCQ4DLoJW#{uS1e$>a(lG|Am6XUlJQaep4y9^@Ge>mvWr}b(BKw2z zdp;{W;aI*6VRi%B1eyDj{S}<4TmS=~603M-|ItZ+(8cpTxX7nCUf_$^V;x0eBg3Jm zE~6lRjilPR&f0Jn|BbRi&CTwNsP0Y_nuvhgU{%6tl-|HV567z6xj9W;2W&HUp2?4+ z2E$pmn-OOh?_PN%Ir4K`4$402E(j2qkM0aHfUUjH=1xi9asU zc2kxd&$Yw#^$)G$=r7M=FzT@@Wfsaz;m5g*Nv> z842FLS|wt%J2Z@+{TH28P9H43fTnm9TkGBI2jX5QXKl`9Dxu#Imf}SnuFkIWk=6G^Lktu>fP8)zP-0TykrgzZse~0g~B+ckA5g#tG3Qyt9?$vRP)q@ zJ)IWl*~9BvclvTOnkU90%j|T_8-Kw>Cd(m;4SKx8eZJch6qfWu&kg2vKKl1biDClx z5=ovT&F6<~#qUcWZd)=c_O{N&z-JJ8TkQ)?$*jQm!jGzC6Ft$N)xnyb*cjn25x9&t zd`ZV7WSB4CHXj#WEci&7;Tjhcs|>6s%*CQ$#yf>3bv3*Wf8TJ0Z3ONiOz)GZqB*eP z_qqSvSsL4Y2JNMqJgFn1XA-C=bWhV89+I@_Z&X<$!xbej#QB`MS*d+0+|)+^k+V6{ z#9CPaPoK+XYORjy##>S6EO{RSyv+}|3^v;FxL=7NW>hQa))fOeN+#muZeaWbxu)N^ zWsFW%^YdvircQ!D3;&|HYDB;O@ytZ95e*HAbA(3Z!0@@!{i^i6W(M;ShivS5nL-J^ zmnBoYhI#>e-8Y=(V+K`qq|yhavqbyjI`zs6m0A{Aa zu5<`r5iD~+Q&nqBzHQSd;ZGq1GdfmYXN_W;-abBt6B-y*J^VQ2<>SUvm79Cl1!^0g za%sw=^Wd`gD%*T6Dv2mkS=@O{`%lHrL`G8($%wCReU&K-E!oNkIg1l!tZsFxS$F0O zUMhdRET2A^nLT@#;xtn}xEp`umT^1O$}d*v=+At!yx?=+@-G5(F#{|CXlu+2?j<%# zal`svF=MmK%1nUxvN1CDqG!1d!E;Vydt0*@u${?lAM3LP4*E9t zIi@~TN^3oxB?9ybRdE)4fd5YTUo7g^w%8tQfqpaNjNM*#27n%=3JURQ&0=;XixHIN zCO0CkHru+4kM`5W6fi=ADyg@e^!+y3|lLp1^AgcKM|i92>A zD)=)ZSqq#P3=m(#{!dC!&r!^4L*R~UV#$svL!SEXQSCl(PX76^BP2!R;0!ebmR4Tz zrxU#Q4*1E&EFtJ!>_K`HE<|(Zu|Pn%)+TUHkbJJSQ*wrNMpQoDX?2 zZ8bJn4PI#A8k=d+#DAgx7pi%-qvD(Kr~L;#FSnc962u98+l}j#gU}WsaZs(&C(u{o zmAwnCaL~iIk2wdQ!B$0`kH0fNi_rs;ai6k`voczXM7SvyC=UgfZk|S@q#tnZNG9y} z7f6z0jxid(=%#wx*?>Mqu~ItM)Nwd7|A*>UqtJdqU!&W^`ZtaJGH~Y7K@Txl7Of)k{YE9u zH~n??;eVt31(^SZ72^1R$0$b2lF zBey7GDPb{ma(WdN(~9Y!E4wtYL>lkS$zT6vK#=9%Jo0~$rxg_pW)S^Y2|E|6(%+IP zh5cF`8uE&fI?nAJcJ8G^sJOX#gWEtSXA@MP4>#hKM}uQxV$Sc{Ks2_64>hf=qQ`4( zY!0h(fs_}$4GVX`tG$fUQdXOzRRX)UR<)`?zq`{F!$e8J(dcwPAe|t8VMv6**xuE| zr%n#VXvK~70Qie@^Re`vvsXD^)uhM-eE0#N%N==?-GP0N{ljB)EJ~3=m-)s8r6qp1 zYb_|boO##M&F!Ub8-S~s+422z_x|RNi3*wHvo$|#GZ(Vi(%ZR(1ssZzujy{{b901k zT^rStqrpk#kiQ=_aY4`!$xg?4&}7r^iF+z7(UWS|p)1FEoR3*0?>UL8r@8&~jEIzy z$xeTOFAS41Vh_AGryu4Ax;N(c+vt>g*>*Z9UX44#&cpLOl@$3tXMVNCo7Q7(dS!b$ zJB6mM3rdP7#D7eIm+2V!QP&9_46^3Umu}P2#)bGYNA_-PBspK)o{4#213)Kr4#3Oj zQrYMs7oRQ)D_0o%dZDcMZas>8fuohu%OcS)IC@Uj1~0%Lj_F?k{&uj!Lldq@v{U&R zr3iqm)@B7)YIKM&2Mk(jclD$}8FzS$bk}8TaK&`UpdaZHaA0O%9K=LA&6>{=63YLEm?OE|@gvcz-a4^8Yz#18n_to>Y z&;;=f2Jk$1Rqy8;ks#V)9F2#At8-r)EL`?sJcKc_N$ML&s^HIK^jIJ-&h778JVgra zQ{Ho^=T>B>F7-v&atNSX#FpoN43!CuJmDli)BIaoS)?z28A$2q`E<__eRzrt<+5wm z`zmFn31x+gBari#i$%D1zb66i5OrpV2{^xWxpR@>2<|72KL=hwnW@OjwXQn%_ro$9 zx9ukm522$7jP#XkSxpJg=~dX6Xe7-{l&HCF#+8zyVpvtW z4{jdXlN;Da_;`B&tJ5ud9(<%PHUK>5{UDcp+8pgT<5@+POx6@!hhn(ECMj#4k}q}@@{z3*S#yQ%^4{H0;ub!tK>? zObl7f&0VB)4+_NI(o%!FM|lG}cULX`GKxeWQ$!)NwJ)&ecfM{|?+*DWjA#U@pEWYr ze)L5JbD&(<4&qGVA`el1@z9_$rT`*A`OK2bQvgTtl_qyK;qeC?=mf}2CYFqm0#Dqq zI{mV(LKh!Y&6on8f|aq#xRG{CiH){<-}NwE5Ff|3Cpm8%4$|k=%PMOVlU6NXg;C}1 z(ni}FoGEgo{FB`FpNUwxCvx$pb(wOi>F;$>FN~@w0w1N>0TtbAJ0=D`k{W; z$BLZhFd7TLRFisxP2554jST*{laAwObCxEedW@H;T#ev5Rop|MZ|&Hq@7IJa3f}KJ z*P>YtzM${=@a1@5i+%&j?=zI2`^H~Jo`$^9gxmVTaTq*tkjX=$bO`D$Mbx> z1GJxFfFpD%4_M9P7)w+2B1-%GI$a~X(^uf-dH}ho4})O27GVIgzn+kL&+U`K=vV8x z(h%sei5_0i)!4(wK(a2w?$(6@TK-HqjF(XMuCq(KPqyHEmY4YXmTqRuD3tk>g%ZBF zPVz#8pkte)(=fCOVGm<2VB{~SCx2OjuW+<(1fEb1vKp{`yDyYbMi;&>oGYO1;%tuf zZ`+{|?B37uP0Pr@^!3D9o`lWQFB4zfUCtEoi}p7RvPU@S*Z#;d6c=Jhc4mBME3L)WF+65N@fI9qkg z;z_0I5wt|s9vr7ZHO)0_8iIUlDEZFaU+?VpBg<$VJvY-ASnI^DExqUiCg$tDWE2{w zWR4TqA8Fsc#a~mY7@Tqg_g#`FZp6L24m?9>U-Hi)&O?HnN z?;~PSa&AkE*N@q;M9L1cFjp1Kd@(p9pL2~fHGMUjDwK&A!hSoA`HH;CY)L(q-`;Mu z@j0vPlW_ucOm_f&wojpd!f9xq4(2FvEYJM5_~r0=VanVw8ZlP}O5%u0I+?ZrpY+G( zhcjuGbsw3nwYCKG`}=y|l~`z`B>ne_u)X(1xmiUkaxUWtqx3jc6!M<(tybhi1@6;F z6#Q-)BOK#|?}!`N*|Nfy_rkOD#tF$G53d%`P{yq_%fiH<98mbf}=luze_2e!KT|x6f59%Z1G)W(7tfDSwVGvwMt|(PATI^INHAe zg^Qo%TKMM9_P{ZWnYu6K>iX`j8m^W|y5|A&y>u(_h1j$ogEYg7M$cPe95{s#gATFV zoaXR;r_g={HAL*bvT7AwI#N>7*aLR*K$mzrdKAnwZbVw&JJF9v+eC(|;66%U{5ghs zC<|J5`EzqO^7H82F8n;KtbP8xq%Ob9Ags)(Fi@|$hD}onlcg;Ze@8|2lVjg2u;n`! zH0P_kvo*qp8ZEj^a61^DV>_Mx*){obq;7%OVN4AR^KB8#k>0QEr2lb0dw(^VFjD7A z4uY7W(9d}jdaXmDj#UPWJ!pxWKKl$0Ja?2FfSW@ex01oPu`@GR7CHBJD8p98$ydET zR+u~+paN#Hu#&Kby@QJYi3mvs!jCamh{h3!m}ms^ONBi6*!9eqP$tz711|9dzyZ=K zz4Alc&rct}hD>u5)ip7aS_>(0iO$YD|M{`!VuvA%MPk}uJ7Ls5O(>Ab_gb%~TjK&P z_lIs1K!o*U|1<^x-!LQU=0h~;MFCby@(rDX((z&qP0BcRJoIFt>S|b|?dHLi`Gp5H zB|k-mQoopTUic0ngzm>UuIp=|EnTicn$fXAaJF)FFA}{{aIEMPyOMQ7Dd+ruAo&9u zUdjMn9d8*^)7lu17bbHJ_ko zD@U?!=R@^Ubc}x{Ke664ude+?Ilp>)V;rq2fv2;G9p7-@%cs`S$I|9+-aY~q%GyzG zWz}CJR#uX&KYHM=U40du5z5m{o^wLcFzRc)>J}y4#(%L45a>-tf8=gir|s0=cu*KJ zh-lwo(u^2Tk6+sy1^hu;|IfIt5|6+;jO?d4>7KEQJ#OJ1OF_q18gl-TZ6nU#9(P{% zY;kF6EAuOc7fDZju6TLBVX}5*!`u4m|D^DTh3hM_*10D2*2&)<|N2=TfKq&r=}Vdv zUuE|X1`5&$=)Dc0g{QDk-Fa-Y!8-e`fmsL&R~F6}zD|>sreh<%*}_l8!jn z_$g}#g7nURDA+EZhdEE$(9Uk2)}^J-+3XjVA4kTI?NuY{28q7|VekRr68KaZQ{*x( zga-b$`%TWW@1%_IsrI%_H%j>g&jIE41L}oT?7X5HBX;U%@z&O7S|13-XYy`i{y{$m za79w>k+&rTAM&jK0p>I4bs`Y&;4`&foVdTab}O9nb$ymfrMZ77;wlaF9*jHWwLIS6 z>;~)sGt^MileS4}>2GQJqcqDvZBJ)7t;)9lAP!X4K);%PLB0Q8IsB1@M=bQ7k2M;f z^u>P=Me*>30ioGEJS=W-(R8&U5-$JDm04^lR4n(V|r?F%OU9i{M#&sdm110}~ zmH&;Dh*(x9t@r0NL@OM~qJJzXZB$3Jr$-k z>~mYRFhatY6THBGruet#zZwei_;8!|^#30iSt|ZZt@Hn*f&L+IomZMv)rN?>*I{$d zR^J{#wnWKnzi0J*GQOJpDw9Td(;nRe`BaxKg(d0^^q+1w z+5Zds-6nrM&f1opA!8H6uO3)W*^@hNo4$&<(^|f$v#!(s&(sUZ&{JFb%$!?Z<)qLf zFV1YWS&TSJ2t(JV;r|Xv{jW&sw!k_^c(a&sUiq&Ls1`+FVXTGFK5%ey2Di38a!zo9 zz9FZjq@c#fV;fpojqk8nLa%|`&i)Dx&-XmA|26vD2a&Y7jjyfO%7+UD6*U+P2H&OS zXz+OI>5(fj|D+osRhz?{A0mWvMt%pD!WI z6VD%sh)^M}mzwcPFYIDx2woe$^)Y4rm*`;-^J974+S-!5EzPKs){nI~6mvYm8Kz|Q zM}j;mz2Ak&e}QR<0gzlbg>Y|D`{*H`Gw~Ui)=+M<2LYy@&3|8)58z63G>-pL7x`B> z*}VI&_x&HlssuvrU|FrE_vyce{*TA^-1uSb9b}un#EJO4pLLn}-|;H+fQ19H>xO`_ zJ;-&%seaP;Wm0=YiUu!O*=gNZj+#>#r(+K~Eriy~wUpk74`DLCuJTxRd!0Y--uww9-=s6>yQAcX=&oVzP`;4Hx|QHb@P^Ot$clP6wrTN(L&ukY(kRhrHF zt@r&}jT*{@6%3HsQ9O&K?0u(_|wKUFfLbpJQw^YMvRrJ4Vf^qu$kV0w(PZ-rzTEnUdWd zXFk^^OsRs`=vxGVu2K&c=q>PzVm1dO&-ov9dXKjp?RC~U8$c=GpTJu7T~`v?)1)14 z7Yl}<=^QclLh4B1-W?(GL*>R#PY-3^rpVQo!WG~}gEN|Qy(>Zl<7J)s z1*)Nwo8s((>s~O%Ng0J$Q9P+a2!08+us@w7Wg10eAcUChS05Cw+D&5c-pm zCy3LwFMMaH5BU0e$08`$L2k~6iLJ%t&tb84Fuk)!er;c-usP-X>hR;V2W$KRwurJA zL@s1PC5|?|RybVLSTT+Gv+d@JF3BWr_h`PN+_raC*GIZ@jNqxp+NE%_+00DMy|F}K zRm^8~L&bFmo)>BmS$dA~mkXC(7qhql>ySt|8*_ZG8rR8s6F1>!V2PQdVOTtN{8p9k zla9TkN8qgG+pD*sl@o(NlJWUYtWX5(2jwgwR0wB`>hs;*P3T8%+wuoL@zFeeMT0zu zx(60>g1o9eKuhTj4h=3OEES!vuXd96;Mnhi%@TtWw@0=a~hCa&d4}(v;yV zR_D_4v0`fp`G4fLF|R*pN&iN$SD(_&M^XLjZu5BqTlE-3B_(#caYhyu+ds39G139Q zL-WQ*?=!y~{v*}#%Pv8h`0M5n84yw=wu&CK)>o!cv_k|8hC+jWNw`984`klF8`JD{ zj9#K1v$Qi}HO{( z6ibA>+S(Ls+xg%^3?;VMWCcdLBN0e$dWqHd!W8_Y`KfX2jc;<*`@PVvxV)w1rt1~N zJv?xI5r91ti%HxB@p#>LcH{|$3{99xyn=OU))N_ZINxWpbBvY=k=I;*w^ISX_X*?Y zG)->lizOCBf*1ydLoplYY*Hve)f&RB_**Vf=UrYmbP5OUs07R4c^~W1#bhChUMi}6 zDU)qXhlNN^Oqe?Mx~;9e(19ywC#MkW)y9w>>Oe!UQ+z2K-l5&y@A#iLXc$_Izd4?{ zWE6EUM#aR0P$TUrJ?wL&=e4!*tAuDP^1Hom7ZmcfV+KOL8Y8zc{AC_1MwwCMXH&); zE`lAb=LJ?jcMc)(D`28UDI71=P_ST$Hj{&Y`6e^s_M(886h}x=F9CsKvYZA*Y#0p} z5cFy(uX=iLj811?3D6_09k-02qmdl?Kw?i2v)&KMmYn`#C}ej-vu?D{|>^-mzx_+ z~1br@fF2^%Ny=9Rn=g8bM+Zc9i z6fD8Z8`!H-?XPo#xDGB1b2fFLz4Yg46X|~B9bM1cQ?yxicGfC$-^xI=3s5F&NpaCY zCGTa{k|Ww-tf#8Lw?$W8`b8@I8_$9#R4G2Y^3T3EYq1_pLyfGL9-qEx)&p62ZE1}y zs(2h{1>>9`sqWG}eGqb@Nca7(CURnJr@Yt@rL3|@vZplI(k$)3yhWUT>Rk;i@nrd7 zi_JWl)d63$Gi&+%x-g|^;(`;{php30y<@}jdE$=t=;HNNS@JyHYH)wLA_GnniOEYF zwxz?i#Bt}+Z+=>;6*s(7PAJR;@HK`0nWLf(5Cbm{&iS7TKH6~YeiKqNN-2REmF{ey z*yV^ORiJwovJ4)LxjQ=E-+r1)R_7f%QC|Lb!0if(!$@VfB*^!U41btN#gw@jKun@} zZP~AV`E8Y%mYTYA1~aQ?GRHhjusE~3`+2S3N3fOKNT<;z{B8&m27B*Izk~NW1W?HS z%Mlo1_B>!hDnk9-hc5h^WkVZhblG9HWOwLf;OgN@2^>Zu;6_?6lm1M_e7!P$GWEL6 zrtka7$;Bxs9%-w~{-uyFC-4fekRu-2s}!yhHA&~|f(*i4BA&+b|a54+s{YAz1cDcyjR|0_?g%whGAl#4U zvZnfGN9dlLH`%^B=PvBAYbRi8X(`|A(eTG!Qp7Pv2et_*z?Ufw5+H@cHJ6w2*o8Lk z1cs7iqUr37C#w$O^XKw)`s_&kt^a-YIzEV73QtxOqA$R99e2)YCTNxLXN@UN zv&y4;cru2^pETdA_2r=2^ zTL3=CeTCxqI=CD;LDIvnx7Q~v5Km_EJF%46J0}?5XK>NMAK5*tFR$vJW0pvYv4q_9 z?+a%>NdwHi^1aG9gG13tq(ErL=2^1mB#SM#r*T^0o_od}9lv3>Kv_QFL=r3SW2k4c zi8$zx-kG8*#Me<03*4b!$)O*47`=hPDF@>{h;ER=(B>f{uszf0rC62r20Z#HI&h+a zOyY{R0Y04wU)^axoWVNp#ryg~nzdrC(;OR*`CBUWurbVIsLKpczh%Af#jRkXH}3K6 zAxVE*Q_sPLSlC6NvuMM<(-5*&QD{Q zMW|_CRjcMNC3R!<0Z;w6c27Ika_-Zf<*S6mwr$h?PKLX~3$GgeQz%~2%cu8`!mbMT zNz-^_t{@|vdw(!Af<=(f*^OqssjK+uMfAO%g18YwgpbQl3WG1RNV|K8EqGUFumd}q z+tGwr(^MNaAL--TXWigomMg<5EB00rD;c+rTa>q7T-CZh-n2HEMgyb1yzD>kG5e|t zgMv<@gI~u}*hz-gUoVs1(icG^#7B1!i}VWeH9rN~QceqlBGTmxj%r?ScW2jayKQ7K zl0X+{_39ZB8?kWy!_lR8j;j0JS4d8?u_KcL;R4##yfpWXNmu+^p z6vVXq0_+lY3A3f0i}50(YNBJ5&?{jr9dgG%+0#XMCv}JU zHENBzXKI+8i>FvMKZ;dOt|((T(9u*lJfKC7qNi#;PKbdT&d3*HUa+v(=}7P8!9s!H z@_OkjD-GM!d8=LIth7j2X*=WM<62x0bgdb2d`|?Ax9DF5;$U(n;@ZLfZdy z^Afc$=Uah5N{Gt?1J0J>l9!2n{w4Jd2FX;J?&Bm9p>92GE`!g@O_Lk(ejPC{gDRJ4 zM#ODc3~czB{v5FxP?s8E%HfN3+ul+V0b^d2&S&m(%Bl{FNS65eNRW5&6Wk&Jd6G+? zkn}umSDoq5VBI_LZJSY&TP>dIy+89#y5<+v; z2!D=wrMY#a_&R)Mzm@)w5z4U*#O_7o^&{?hs2FQ-9e&bl&X*Rw@A2m69rR(U7B`;45?{!t_D7xmtrgBvOmvM^WmmZ(uW#- z5c5xED;;o!9}oKOb-IapCSEUMtF|YpovrO{ABHsb2RdP1!XRa}s$4nx*Q>oEa9zH> zPe;HV@3!NZ4Ko-jmBel@*RRWZ?b85@cqn19FnGR~y?&trs_`r|p`4up7d?umq)%Tw zJX&{T%)xhOw<-G5*P23<{nt&00<+=Y>(k>pA#v+a2qG9_F3IUI62h3o4#4SGp=9R= zewRCA2P@hAEQ7_G3mBlqPtOQ~#0dwALv>U2{m@ym!Y>OHyL>p#BCQEhH5f=*O-n-^H&X``y5V5?TX_yJ@hw~Tjs-=Snp3&b$V<@Ma7@CV$G1O?lOB_F9Ki5q8{1- z=s)P4eG0tYAjwJL&N4Jq?%gh@YnU0(LHF!*VFu}`sWG!c#XIE*jZHn&VWVIk4FG1u zNy^x2U<=bv+`Vcp_%rVKr-$}x;fP6^7gKm)wX~lXEl0B zKa-SKxtV-l`={HCd)GUgtyWM|XI-GVsB#1>EV7~^o$L$=#Cw`3lWiFO$Q>OU>lk^LNZFSON`D z>`zOnyn}4=B@BTJc(+%w3+%j%Fgyv^URFf!M$?L!_O@f8cIk3QCAXKYx~bei0NIF{ zW6AUuiE0q^5j+NBce^iuTnrwQK-w+=9q>a#D9>ZGo7S@BbPLAI;`eNHT1?*1 z`3U0rK3h_cp4Y#N8aMTbsD+iY7i0L{DdgN1QDWaa2?9Xa0A@K#Rc?J6=rY^JXk^+Rgn^;^e= zD~LmcvrbTjJZsH96fta!oE^V~ls+KLO1Iul%k;rNRyAm97r3UM=L`Iftmgl;viDEa25QA`TM_H6SW z{@zp0DY+|rCxzPP?yMCVrI;xN9Ts0=9+z#@MRA!`R;0B&G+Uvq1Qsp+uv?cnkl`C=0)Qo(g-Vb;(vY z$M_?Fox*!oAcg<9tUNh5JzJ((S<)w{(mIAEl=RHUv^9KO8J7Lzpo`HvHQJaEMY2+d z)jyu(n+vx+gFqHgN5T)+Yc@6h>2IcXTm_e7%#= zT~qJ;@F3B@<=4Z5j=V&vE-aGK{Q%liA5|uNKVL-4czHEd)uj~rULVtD$q0;tp6nU; zS=js0iEzuS1P;m^J$e-6BWOcY@IZxk6|3Z)*41!c!ZLLqZzRY?pU(#4C{VL{3JeGTl= z7+BPvVKeGkiO$#kj}89e$?uSLXD-rA2l!|;19~%gyxrQd4POL2V%yi+m@(N*gDIB3 z4pZL5isxlwY_Ww<0B-9S)rz{)9@BkEDXyHfMqpJrq6QtKF+KD(Jm{$3627i+4MBl0 zvM|fE$4>h^7d{x!LB(O0NB>!@0>5jGU2k!u_Dufd#ChVfK{lNefE^|SpB{d00L`}o zlXDa`h}}8mMA`{@mCeL$+aGn_wkNi;YPA7@f{uRM0!kY1~)JE1yL6TZ(UVGzy-Slo~u6 zfA2UUk5px)WzgmJK;%|TKT26L-Yw%ZU(uw!Liuji+=wDbQNM1Ki6RKEe)FT_K@A5% z(yeUO$SMiQr%ZkH*(2(Fy>haW=Z#3TC;i4E8na`OqUwF&dNJ=pDl7s2M<PObWVhiwr=d+Q&Z!z;1uD8Wl;Sf#c(0Z<*LN*z# zBEJ3)KP#{S`h?-Sq>7#7%zXsQCixzr0PcrgRgDpZrXe*1zOy)9iLV9{w+0>j9Kzm+ z)T$NvO-n_ENoob($iq?B? zTL3~7D?F!R#mR~1o;jQ_7J<^`3_s@bQqjvL9-H*FuudBa7+n{QgcSZNco76@6N=zmde~Dd$UD)sm$A>9?~!sMS!k z^O)STbptVQihc1L#j$<8?!a)9X(4L^-in5(6<(psz!f&?&nPFp{lbR+Feqf$FW}Kh`iF)RCNE4X>0+Jfse6end~VBv5bQfFLD<_b>~(`A?N| z+wI4*Zy8ribq}+cV+V{E@7@VNvoL#k`+wi}9w2l;QF2mBjs-3PhYDS5IZBmM!$yJ+ zxBPI~#r|NwCTITkQ>XkmIB`*aIeGo-TZPFu4fl4m}Owv8|OR*YWMhJK?KeVCP=Oy^ZcfLnY9>9uKxok=?JF}g6}HW;%~r(4-S zMpur>y-VV`tWcuN>oB(13CiQ<=7a<#o|yQo!o&{Fj$)4lqK0Jw{FRuvZl2jL@tow8 ze}f$DSnC(MPlxv3OCv#3$c`EIP>hrvRx8VQ=}FRUM0}9!MkkD9uStT3{LZl59!v<; zAlbOQb;}7Z>(tHq^mL^p>DkctJPHx#gk0Mh4+O84-5u4LD^X z+$V6Leu!^qq2pW?=Z5wStV@A~zDDwO_w$zd`zmK;Bhl`tjo94X+l*DYGG$c*Q{#J~ zMY1*XGYFxb9u6Hua?S`Qa}B>ldD@wOlz0DnuTgy}k6;=6>{XVoC@rKZP!ISiwVv`; ziOjq^xGUhE<0%|@N%Tj|+>BP$!EGBS?P&c8~&hMHx>t>u{YtdiZydlnC^zE)p!Vo{Nb-U2;Gf~{V4zHe(9!Sc=0s% zFuzm95fKunF9i-q3A3dBt};;;TCYcRuj43vh~P*-daAyC-XH8@dU z%fkL56I%6)RcsRJB|mhjSGG4yKwWfu>zO^tMuERzWdGN50f)Qy{idoDDNFAp-Lt@B zoQFt$e-LPf3^j;~KDCLC94Ztk@&yy~=dCfxA(Xw`E<8m{*x6sg+uM;$w^PAMs4qhM zi0{JmP+kRktMBngk@iyMbI-{Kqh`oAJ(T2m4)6=@b?32R)jD2pS08v<>*O;yM@L;o zovs!pj9w$k*`8DMu>NtU#Td*IxE*Cp_Dq zoV!VV8IW$rRGMS0+| zmvChuOFk{1@XNh=7`-+{eZ4Y)DkvQ0ccd4j{H^T#yMM9@`IoR`t@`!O<&JwaR^<=& z`28~JElw#h{#RC74*~YIrIoxth(X|rG}wy~DhXe^*lcgC4%HDXiqXt+f{if5g{Ev9 z^kO|UI=)a(E-MYpxV`eFj4nIY^qIq#-^kLF-4&}jmhz@f_ybqwnz#i0(;@2h5K(Be zpJ{isP_dMV+jdvOjBLHFV8Do!33EZJo|&BeDr^18q;mZ3IO$`&R_ANgPvA6lPaETI zTK%BNH)MG7=RLoOt+Ud$blg?sCg0h$C-GofC_?@m84^JYW^QuU3j$vKi64A zp}!M}yNZTh_lPIEYC)4uhe4U%71qKwmS8Xk-n$@Bn({p%A*wd1~=p5 z5jwy-QyILdMJ>k>Z{x*4I@CzVX4oe7l!em1oMeXl@*}#q@c3f+jO*D`@5u5;3Y{BB zoh>@DOK#AXcD7TCJ>(VnHp}V6M7AwoJV;2@k*nQRg_R{sNox7(80(Hs8y9POTTAG2Lab)Y5 zLdum#EWeFxducza8^tqB!fHxeZlHs(PT$=e)=$ZJnN)lutI+|lK zf)p#IoTDLRAxYMUzu9t?JWG=&*Muav87O_nCa@WrH|QFrqZewKpeQ;bBZBLhEkAxX zO1mwg>W~Y@%HwnP!yHa1U&1ZpQML!Zw`tnD9Bjeu*zc!tS<>8Y)eYj#yU>NJ=fr(K zfEaX7)kT{ndlP`AQz!m!gSmsSJ zL*FQkHY3RLHGFuo$vo2wNX<$|>Uxw!^O&HrT#s-yMQ`Mn@Zg9Js-yqZ+1*tNTL_D= z0>l4Mra?w}E#F}6VKK?hi1Ij?7&n|2i09ihI>MX@oyj!&agnaX1b8gO^WI);Nx^^u zBl(Pc9f8+{SkV9#p?Ya8mO#%K=Q@KCT&eMBD89z{>2~C;{rv*yQe6?=HK#Ty!uz&@ zrW{w!ETL0AuZ2G0S*|GQQX|IrvGTfspc5H!VCH%T1c?}&KqT18eD35=i`$ZYU5(Q^ z8szXQ$*c59jfu|r*@-+^#S?1o~?32VxH`Eb#3fzpmUvXYp=k&jkS19{MR|* zAvQ5?OqQpTR&B}Nui{PgF16XOtj=t0->;Ye2Dd2cwuC2`^?Sp4ft|}^)OT?H^-&`D zZMU0(Extg0P6xMG!`E0MykEgfKLStfkKvnPd9ux7yrFa0o=<0kc_xpt31lz109F;K zSl?SGg0aSrSHe^qLd%>gV1Mag$gCrT$@(5<>Sqz_$)#RX6YyM}>F0c%RTZ zvhWfB^z?brukhc7ZkRCPn@u&*+89Gj2)i#+TgGSPMQ4(vGMfK86Xd5m38Qcm;@HQTUNiLwHFfb|*9Fxup%JMDB=#)Oh5FF(OMdO|+!e8c7W|aqHD4fdq%Ig*#Pa_xb z1C!&ay7YR7k%FZ9$^R$m&lOCJ_}4k1K65)S+4EHck^u>>5E8=v?;#Sp|M`^ua{(gX zC2)RBriaTVj!QwP{~LuFio9+!M!$EVsw0ix=PY+UZB`y=D>M(AA4-ZqkjUS}R+}$H z8aM6(mDbi{N@DUX_McCd&jmQ$Xj7i<@prmA)k8v7E`MkTCBM#v)I~{S*ai6|U-OGe z&j6r35kCD|mTnO35v3E!3QIciXSjp=AJqKa>mp18O-TU7U@G;+uK$4MHa{6B0*p|o zAIq~4_m7z^0H#3}>$5zY!_(bht+KzrKMp2s;j=84vRchQYn0Ceqjh93vGc*f6LUXh zzW`UX8y>PMJ|yWJ;96tAbMkWRWn`g~DwxO42kV(d>+&Rq-#EV(Az-Ya&sTxx@#(3~ zLBDZ>o%9#>ztH?ID9Sh^7=UuFUwa+$Tf-BeA5dT}Zy&}#%SvZRLNRobys0brVx2!t z-uCfjncUiw=v*Ko{?Cs6YvX=?!8kW96lVM7`bmz%&>oa{OF7Lb4;SDE>350J#XOmM z%_|Bp@~A9HLTaO$$H>L-$1rU{-v> zf+7BXtD!+$K9ywfyA$c(Hx(g}^jj1n)_ZlUujSyQW;?F;gRG*tVd9UdjX=L=F83*2 z8RdVy+P{u1=>z7^29--=CdNW@K+u-*>@0JjD;hNV3!8f}0qBvT<)2GMFwWHg0*zFc zT9V(8emluy$Oypno>LQxmyl^tZ03+)p=-pK<|Ov~vj8G1qTR-p6tNn=U8q;YOkRzCn+h4uSK%t2XQR2O@Dnd^v`h;f$t0{c8}K#turAi8-MfC({BZhL&p*rPcSpL(Zb_X5F1{PDxc(%Gi4h_!xs^0XM210> zp++(%(U>N30r*8EN^bt2r{SIf2C>o~Yy9V*KiGPrVyMN}zjgBX<^@MSA!tF~stbVMP9GiZZ z06_k&-s&X8aS!k@9v_+h-g%kBDyR9MOJfHOeU(bxGp`)*LDy_)M>~&J{1GLHv-BtF zCOrZ|-x)o7!n>yr15^;ZeCv0naJi4q=HmtO&);1z;pP1P+lZfvdOjqQA^!uYuM(s^ zoT>pIu*4Xr-zO9JHIt{#TzutVA^q9g+lOHJnM|}>6GP^Vo+!bmP!T{*K|#w$7x6q> zROE*OU4G)Kziykz)D~2z19Tb_OVpGAFGFky@prA#WK7PIZ2#QHk95-#!C)d#IJqy4 z_O+DhmB`U24P=8ODhR&Ms>69tB&pg?jEahiX#&*#^C@fb@3Jf^1UvN;!~D#Z3J%47 zrKHt%+(Y|VH*V#=SDh`VaF&(n%OQq6NyGbJAhrio?;|227KF(xDs1i4?OvQM1rG+7 zyBz%lh?2f1HJ~+-hlBk^h5%zjwuv=lld^m{`mnIh2=YSyrT!lR-~YFC_d2KYvjb#2 zQ3kU1$pRT-fC!xkL}q?w31ysg%lo%7{d@3rFv7YPB7BEz^!0`E661;a9{;~JH^EyX{^OlfIoWD>&nE3mp=A9Y%N-!fH0 z)0<k*?#%*vGVzq2=PmN4?r z&lFRnjutA|EB7S+?zn$_n21-W;A=*GSY(toh77{rtrL@(QD=tfoNS;rGEqwB5uGQl zgp{sc9!HwFvQP*(e$r`_8>~IP#0m#5bN`W9j?W#4n9(ub$X{!5)N%U6 z!txWMAw(7kJ^33vYbuOxr>Df=kW|vRD!{YK!dJI8PgZZ2`y=wu{?JZ0E1XE~=iR15 zWJGv>)k8NK4EaYpgxF7oHh}(6Vdtr;C?-S<8B~XWuyecAn*l;(ryqZ6f80vO@PJHg2Du8tB^>Qn$tWfc(%da6QP zb6`kYA9FS{eTQ+9a`Dp7mA?rUWk3Gw4AKD9o)-~`syWExQ!oKD0Ekj73O7#_^+58+ zd8@gc6EQl1cD$KY9xJ{4rzt zk+^d)L9%#x`J6BFYYD4k=)MKQ#tHWKz;H6^G)A3nL`O;iJH0){2%-NJj3t@vMI;=y ztL904E>PZrs-@+6uv?M=$tm}1u4v5sW-1v6>>}*Cw$8$h;6}tZ$NT2rpYv0 zqF!VUs?>A38bqZaQF7QHl~oqH$Zv&IkV<}Suz0^`Ak{cx99^Q2!d4GyFBsX%h&1%A z8~yEKC`~<)L3=)9co<=&+8$d_t%*r++#Y}YbDIle>DLB2y$%nJh963GuBXRtNO-hj zs2@30=7Z|w5gu*O3PXK_Uan_$L`6FUa=G2YKx(^vb9b=rv<@jMj?Y zZchuU|FBT#WeN0yIZN}-`p?90tk>$}fDP(=+C;OCn?pre9>3U3Cvz+BNO(lrTn4o- zHmNRugIfPgMSWl|^}4T8?R)pR_PeZehxd~UpUZJ_T!qvdX1$;-y zMz(sX39k5!Mih0{2*dp|;y4%T2rmk;IkyV}mYgF72`ns#umMVm+`9lXg~8sJ6cFp| zufh0;15*+`5R3krI}ll79#8dK&=W=cf&A&RN~`4;(k`=z^U(q;Qn@MBm2eCxdT*m) z^*giG#%Mz#gYUcX5N@ZLs1GEwLMFu=WHJV0rdiWT^#LC|*!zHu6Uex6hn#&tzZ8BJ ziR^OiIxKvUW}7qT;X}&He8q=Xv0$VbcE(Ju%XA)}fXPh$vdW(Js1Jgp1}>Q%kF<}# zH@*+!Z~>dB1WQ1gr&oBA5=RzHNIr8>reK@;0s|{bLR`2qv0Zl^ul{5nBu{YlPc3LT zF=M4E5<8Vp(B=0AA!h`n$7or^hH1zmg96K9(G<{a2enlH4AWb-Zuv7w8&&(W8vIVC zP*1uagni^EY2VqQ8;j5JHSyo&4hD=d-w0 zIwF{G2w@_D`vkQ??Zk=5X6^@{VH3h$x51a{S!HoiDcQM#VT%U?ewG{ zWRaC^J{^zOkgg^(yW!YTARAESdc@Yy6(n?kHh1^{Lg3M!t?GJJas+w*K;R$^GFxwL zz)ABj+yDN8yjL|Qd+k5L|L@qt>V9!UusbtE|S8ptW(*}K(rld1BQLDQEakVXTyJ0E0CZ4SatWqq^ntpE2f%C zv_0$rQW5;#>|i`ti>J6|r~{HQs?GMypfGdBI|Er=&xl=$^Rv|^bi%yriw%%^!8VL4+8v3REC42g@WUg&+|N#-c`i3t z;*E}+^?aVaTQ>Cn97jX$_n9@CE$owcH}i-^Vgwwttz@?%@y3MFMnu4L6@2+iD!*-} zeYDwGw02p{Ks}Y26KFD}jJX78>Fs{;nyY9+l7fUgtc(r(po}hf{Zn-in;JEF>vS;k z1N(9Wb#*wNqzRpRW0bx2FV0|-2`VEz5uK_Mua?Wl&#dbFjb|#0241xOkHd()uT_yvNLcZF4BsKIK-w(c>9Bal9M&Z4 zAG#TI*qs}!CHf@LYo`V-mTL6nrVv<(<{&D3 zNpZu})e`t@WQEE$tm9B z120eZFmb(BFM(&+G>~liLgg%ro?{AI8JRG-p~hTqkGp&VPKGRv1e!NQm~SyqE<+Gq z(uhU6azvN>Qu{-0)|uXt-Sffwp>x%etqJ*&?d!~4eT<*k{p=$)=}xVlR>}Y60>A^{ z`_I3<$}?uVr;gTgp#v0kC(~Qzcwcqecj14u#yBR=rZxEgq4MRk#9eRp2~->>DfB5v z4SHZt_V=mklCnj?msxt>jSZ-?{9|qMHM=1;EULaGVadlNq-J;shUBxqE5SX4ihj=B zSzQ6fIq+$%CYT6PuydTIBm;N0IqcDA<%GHQ=&<6uhdqz`?f=Ri(^`ImS^4fX$`m%uFo_;-CozuQ6s>_Ds{ZDWoenZo>6Z$z>cX&H z-hd-m0DUS}t;L^*@uAxC_0S)Ig(GK5IjA4Gig_#5i(*zr&zKu4?Gn$uw%uXs-25hb zd&;v+lW?>ek~t^-6f$bpe%6j7wcZWeDh-EVsAx^efVVcvRie1>6sLPPX|Joc<&o;< zxyd*OUtv#FG6JVCm9vyS677D<)nm{1Q0NsFo8S8p-m0)G+@ac1A#0-}nKqgg$jx>! zQmdb+jo_EcX>HM*w>y>;OKgPvPEojKEQ+!BYOS+Rev}+`0WOtF(Ics`#uJ%_jr`ZT z5+8!BZLe?$de*;a?#E zAt=`?wNw^-2;%!{`N&!4dq1rDcsbUx!G{7)g4neAP%yb$$`H#+R$r9#B+P${{%P4X z>mxR7bpE%4z?`RxA(H6&#Ho6g$sVmS8xh?%5Dqgjl-#hKuW9F{! z`lss=i2Vz$Szdhd)U<;&+VO>h4G)0Sc_DB8BC>K!A}%k0^?K`kx>b7L)QdB2x*636 z9_2KljE30 z?t^{fCDnv|_~0tC@+YEz^^gtJ9mwq^@)ujM0p@Qazbx-Aa)8YvY# zN{(wN;}aLytZpI)-(7Z=M_*sU)}a+xiFfA%SP)`JNineiUWm}og8|^C0x+Hl344mm zf>r1Bnw)+IEW|18IV2#%4DiR1hT88sFSA`3|D~NVQTS|vy@^FBN8l~_QwRYt9t0lVGtG0UJ3DdliLZ#&raT?POmOpd+C&bLX7W)`&X%mvBjoSae%u<$`fZ7L88}j*Q^ZuU z4;6s`C_#kA?rEnEiNJ~eNPW1BS@yE%+{+0?aCccF7K`;9BLcNk`bTon^vo@2bvT|n zR!+()hPO@_)Onomt2GRJ(us!lwb+1+GHCh+XKOP68<>*KJkJ^dr1Z^H#|Vl;_)7N) z;T{Vn6)c_AP)Oo$U^vK}>aCwD3oax5*$#1IWwpD>TM9+^N$(A|A6$PCgJNRuLuYr8 zm|Xynm|G{tcye3aBW`qJgN~vEB$4oXdyH}R^WQFPOmYqADw+rxG-`hvb$8GCH`dt- z1;qPrg}M+RQ!%7-WbisBGC7=!{#+g+Su}7N2Nc5kFVw&H)AqESyz5rVcX1@XR@Twn z6sp7w8;}2;d|{>4)Dw25lH-L!q2Km}ab6GsHXH7Ae1G=9mGgE-zugT{qXNs6)8Fjz z6r)_`_3_BI!PuV(UD5go?`uiddwR{9f&o*+uiOW4(k<(8}v501JL9b?Pi{2@Z-(VzI-SMQr_M%I|X=N&AAzJL<#U4#?~<< zC+JE!uhfd?eFwMZ=5Xbe>}pdzc{X{|1e^rvv6d2?;bzh|^KYW_h~S58X1ibRHx>&C zTb^H-#s&mzGq@b@#X)>a+~fw4;5%9q5=&B_SV2)OMfXA~`#QV|VYLjnD z8{v1ywkL}i*^pu@A(3qOF46@P3R!4s#fzWD_*v4?KqM->=Cmk<_Rrm~9k>h+*5L8r77eCueH=!UudY}=z{VO?w((gYe+U41nX1HS^3WX?3c zZ%}M{Z7zKfPAWtf9ub31P?n{6Kb#+z=jyF>2vqMpU&R%*i9lMD6(|1d%nv!$i|qmT zvU>bzPL9eY3tN)34o#y9AIX>uD1FQ3FuzUs&PY(dUh2b0(Xp*>*oS949+!ZE#P$#D ztJPfo;Knw9XbkTytP$h$<&i_%JQyFPKt9RP`f?R_3JR&myN8feO%sQJ09!&yKTz8x z(I6L1K2G!Xu9gnwDEtedvdApNJ@)X>R>-_Aw9#w`7Q!+M6h%X;^;)ceGqmBhp+ksF zUVK8`Bn>}t(;0poY=YM&y>@fFmO0$0gI{Jx;;Eydel%}!4}jy#c9h)u10pq><~S@kUk(ycjR zk|mFQ>!j(kyV27|rn$> zUKgvUQ}5p8OxlHWTKKYmp}1!o_Vcf^6&=QBWHzdv9Kj6{=63PKh5tYbv(3361aRzG zfoL*5k;c846ahA0zWlI55c%8(X*zuriDx{%<7{+uIDb>J(up1bs~m44qI%Y6gK91lxiY}MM?A&fcs`d;5q4yGl-KaClk4m@C&jVZ1joof zfU#EzJ$Si81kUVx68`b{`KhNmW35#(Yt$BUQd&>)SJ(hVNELqMb?q#J3FZa8!(2nLOGcZYO?aA>5vyAGXq z^M1?UbMNI(p3UBShMCzjvp#DLR5bHs4r6_brc=&^Z$T&P*L%iM{aAG1%P-XiW7#Ko z{+XK<*t`B6(6&k^uRd`j>}f)D+w6V*PB*dLy^h)59%vnr*St5U3zrd*2Y1+%f|jGr zrTT&e2g7$-@|e!vunzL}b72WiyHGzcLPg@%+;$-ak7i6&C#t*tTM;l|uZ1o!f=aeOXktb8n>;ex%GBovq|jk7@z0kd;+?YH+8~LoiPjY{=2Vi-n{3LrV0+oq{1#Fjhyp*#CcoO zgfvp2XHfOc72y)ru`}f3>!a3Y^e{D(mk4a(Nqs% zrRmVKG*54Fn6r(3kB{%CnoaZFKUG2^3#&{u0JHMx$Anu9usfkxj}yo<92qT|oJ6YgqO=q2dx<6=_*g6T^tB&{^)T>`tqJnAx>L>SxdXjY@wBsH`Ro5G`X zcdE?(LrBCZaEj2xIYXL{43#65Fe*h~lW{o+e8T&^2P zk91j;tC-BEyQDftM7f%R$sHhv*lD(SORn%+7Hlp!=(5wWPZ3Qa@^){UK^NZyxB6`4 z!eTmfbm3%wp>bI9HsZmK%Pt6%>pU=N*D$vW^7G)dIaGaqF^8%aeubwjc20{$AskL^ zJErj*L{cA)h(sTU>+je|1L35H6`W9}+ad zi-Ky4P1oDM87MX5LBVJWVK~nv&-X+!tI87}iDl-d*>N2ysgXv4L63^b!seW}^?v8G zghWiaFwS+;X^g3o<3SaEh3!<2pL zFlCj>F9|L}i`?!AS<>cQ2c4nV711Nv&DDtwaceELdcsh!o(oEHkuc2U8Q#)n4UJn2 zjZ8tIMjUQe&%M8IR*2QlP$0C-2{?Bj&@X?~{X~kBuv#*=T1@NTJ89?0pQUUweMteC zNPo{MNkrTKA%wIqo22L6)q6b47cvu>2^hSD>O`v2mK@k5zi>j7%iJ-9jE3^g(`3XA~31`B? zMhWrY66P7Ktv!g_`i$fcsxxVq`!-BR%CnXybK0H{qc3WB8VS`m>?^POKl>!nUWFX*R5?KHrvgf3j$PY=Epa z822AWtd00y!e(19{jEI zfZC)hYeKrYKjZwhwUw$>jPK`-`SLY%Nagyz9%s5|L`7`yUREfesi>!9u1<@ZfT5go z>zgy6PrdO%3JgMsY2$v?LC_YzWTE`-PG@!L(^M3`_G;`mKthUsVnL#n^mKN4i4sBE zC`tpEY>^xm<&Dj%18#icZY`$gKKE$BI8i z?FuV&QC8nYQawg3+@Qw*2HGn=AkNY*Mefi#_97vL$YvC#wH-^{w{D z!fEYBthDnaafNo)m~8i4?vP-S-aj(F5k^2iIXQj+#8cr7$TET*6 zlE&y{#Y7x0a0sCueyUUm;SbRy&qj+KXWJWT_GhXX&aqTwX#c5^DQes* zgb-lqGM4TyzVV$g2~w6wz4Hd)32H-tlXL2S;cq#wa_9Kv1kGLgnN8U+yXC4Yq1)%K zg(#tMX>v-_s#{o`iYIJ6$9q+67nfb`FBoS@mKwj8|Ci53WilBgQp}vf(w)bWuN}|r zkl?chd#*#tt0T~AKA{{iGb9TLrpQ!l2pfYWNyBa4rJ7!hvqrvh_#a#JB=tvAe^t6Z zr74a12hZpm-~9*AK-($c`yL^9U;mIl45m+5mMTF20nXSK zo5?ys3bK{n-r+^lN|m7q*cJnMoqoC zUd=i1O6Grsd}D?5VK8FARO)w$`t|S zs?+`R5B*1L7LE2V{^A2cH-l>l0GdY&m-3iAhlDsJx#`2p?0+e-|6;D_0isDO>8Bg1 z%S&8<+QD0vQ!$hjhfw-h)n=FdO-<0UAyo1z==kKg*-MC%K0Ud2-~)NPTsJ9J^Ooa)~;w)g+!#|MbcP~X%?B#dH09!kN@{BdNOU*>rTIl32>2A zxqy4+t^QUlk^(3Af-MeS{x~pkyM0&m*~Hq^Ee*Evs0HtTuloI8@WuZrhj=C)F4e

    mXgA1@FJ0CWCnQ_4!J) zt$~)q`imFhso0~XSb_HT-x`{F@s-Yo2ptO}r?2l#mVIb4gXUU%W&|PmnWCYi@tO|AZ%>6ue#rn0w$iC(*Mu(vi|iLtUu`;@DW$7wVh$qoh**w(bbUTj@PZTAGdpG z^n^W08T!1F&Xg*@nf_nTX9|8AFOizK_k2M}NGPh;ryGp!hx5=iSv4T2NWT>#m11Gh zBSwsYfa~$NTT|q6y!-+k0|V9~@h19jH0s}dF&yANA)W-PVhBq66-f;Cl!fnFgmaYB zQUT0G&H_M3dq-%>Oi6HJ`+L6i5r4a^8M!U#fIvp%8OprL2k$9NA9ecMJp);gpP5jMXztko!q~ zj+&=9{mop#OHiW(*v?d{4Ur2l%3kdAzCi0IQ84R|$=$Em0Z#772t>x1g|a+##Wo%Q zIdaG1_?^;^`(`UXidmzuPxN}U+Ifn-p%Ze0HVRM?mcxf4{S&P|Ax^<<5CFCNPg8m7 z4YhcTY7GRjW$#k^%6ivK)QczwrwAX&0mo0$#TZ z=%Nq&tm~{;FX5K%QD5L}16UDz^uygXjFlFYAxyrm{5Sp!R0}V{i>67hw$FrjR{d=i z-<+y;L<8w`Z4RX*rM4fMZ<$$47>!ZsaNU#uXN=-AiFxWFWB^jHY_$A`CHKy5$8 zY$jP< z$bVKB@Gd}OIW-=ATW^pjEeje!HTykTGH1Eg^Tj%h)_ZNC(Vj}b$wQ8=%&;}! zLAzNe!Pnd9H!x13ApCyZGt0tv0_a#YBp2$0k&$g7|!6lzJW-%z(9lo`7I@G ziy`8(&arN8`$KZFS06YxhSP=%R%m(Eda)0zI)WX~9R4u#7I`&!Iww6I@SSyURmGsC z4J!EHuU&ccgfZLC@!IX1{kT05xnD4-2xsoJps4dXp*LIlDVz1?2{ z2u7^aR{ut zEd^I>7!oS7fDZ#XkjWJ`NhgVQ64Ibtv8FTIW+shYDjVJVik=FHcr}_Dlv2 zqhfO~iG?+T%Wl42r6Z(?KMWH3>cbmlV)mb!@LBz_-r=b>*Q|pHC*Ovx35^dMwr`KN zzcsj$XW|T`#FQ^OPBSs!`~Eso!X9O)yzUnk7XrfcVON(gJ&`6;Q-u?%^OTRuAYmf< zb$kGO?yJXY*Z?Vs+=xhI`HeatzfaBI8^ z>e=q!U|HlMA@+tZdBR0)KF{O++JSImS(C!S3B5CqB z%#y*f>g*XT7QxEvCF3(!Yc`r~bf*Gh02eY-5s=ZxvZ5z4_5~`({k$)9vIQFIovvSP z{7#NHfb7sE3EDMCPx6-Ns?qaeH9_a@)BPsb^N;!>L`4Ec9VeEamhm@O&v)AI6Z+Z! zS~auh3mFq}m^?tV@m}yuK!O={Yu=hICY`(>3|hWAG2Pd^D(f~WvHX^KX4%}(PqA|M z3!~b7$>4L;=Ui_+v04TM2_qFi>@mxL14y`JUKqGLfR+MRkKJ0mEaN8R!FI0YixGQ4 zfkY4rK^vLfS>DGKLF=Qn=Tl|lg?<|2z?QEoZ*ngKrJvq{VYLUB>){!CETh3sU$%h} zAj_2XbnRMpflfa59YPu6EzW4_;{}Q5@(y_A*<2)m?`u72HKF2(9t3N#+lQN@^4Z2YozAJONS!f+tU?mcTm1e zV3k^Q!ecWTQ(3Vw%zVMs4Cn#Ox-EJFg>ARWRH9xnX}6D&H}l=;0R3PIhI9**51+VW1UGiy0zHeT%G;s;o}4NreI*3#-|2@ko|R|+u_TE z=b9^9BCM=Gm-b3rZZ9Zeu|zj(Z2n{e+?D*4M=DRo7k_{8*DslucFM zZU-3{#HI>9Y_GZv>c`#d1*q9U)lFd@hs9es?@g&3K*C4P)yF`vP|?=-JcKj4K<7{4 z-QaI2S!^mEh8dACGllNYgauj^nY$Eo)mA@Fz68h0Q4nR@t=r3ELq1whl_~-YU-aiN z?}+{dtLJzFEE@UgEvR|QX}JeNZp<%m%1bXC-p^Jz^8x7*bD2jT^oWRvmQ#lb?nE6T z`;L^Pgas{gfcU|4I+uh>!*$W6;+aBB^1e|06S5sL$rO#t_ScQZ9M}$xgVe*z5R9Uu zjSC8)t80w$-$b$rr)$k{giNXlxLI37etTzNG#2E@EKd7w@B2-x*iFG3-tTn zKk`^xzSYj!O{a@e2sujn%IkT4wEeSTcX@n(iHWItWn_^(M=pk@@d4S>#?)dQkS$>`B=M%)VA5zC2N&786bEx-k%+CDL^49C9p$ z^Qju_-QS>U@3bL;U)0^Z>OPVVe+E+?*xs%%JxTIA{mqc?eW{5??*U9h-%Caj8`>%Y z<922dG=0-_6F*Xo#@y=^_EIRE*dU!)rzW$k^*Rm!L<>tRj>$!R_&K@)8GriCr`gPm znHXoknz_bN@Fc z5|)x*h45C0(-dqFG&xa2K3n~SR8SfC!s|I3TG2a75QrOJTDExOLEj@#A&_$rkgWMOG2Wi z{^2(5L&S<-g}xBF84K;;aqEMQp;wIWPF};+%y1^Ge{4Ab zal5FjHDk-O*kUM^uKtQ1GZ))k@L4~EuW1eUqsh9X~%uVP|~YZjQgC6ZbJ0{3^YnX^6n)&iA) z6>`pHEVrQiqD_XRG{C>#Fgj5%P8yvcx=i6=v!Be2%My$n&1cg?KN;0bB_G2o0f4@$ zP^h#y%0MiK@_~WvKt1MWOK`qX$eTxi#n)QCX2h^CafpmM1ZpsvYmv=;wudjzJuTJc zyq^bsV~fZUQ{%BQG*{WrP&@5>do&2yw}@Y9K+n`X1DOi!#?7XGLqlP)=_LO6aF@c^ z3!DiLJ&Vs)x=VR3a-+B=WFvwjBkh9_U?#coO$-MkltDSEZ|U~I!3>T-hBLCB2utcxiyZqJuy<|}_55W`{|uFN3Ax6NGQzW67%uPlxHYGnN3?yk4eXo>}nOQ*+H zO+^CScZ$kdG%&@2t%ij88tfM#!48CuoaHH8B#?SMjb(S_;rV;i%Re`WHeB9F0q79e zi-ZR6qtesIc*gsSk?#OPKnF|^bXQ+!T44sv)qP|s@OGRuAu{^(5CYpuk%2S6n^xwP z9m@WMdEg>D5B2!WBVqKcjg#AY`rUnsn0xAzA>rW)rd&hKq*@I+Uq_~a==DbW%Ck9@ zhqnjT%f}CKo9%LExw1md2XB7zzLG-iX;MBiKsvY`%MoKVF9-6SKhHe+T-e?mOf6|6 z#vA@oOBaV^VS6*+LAfCV9YMy>5ALhTY(&1)NcWvDAAr(+A|9PfY^k%m4>Y-`fSc=| z^|o|%;(~=rzlJd+vB;1s>nK`&uJEAXbHjXJWT0q8oUsG> zRDvg7*1V{!EiK%Osa992zkSrIIbsp1h6x)rtlffsKtsmezZ0%x`t^2&4^uqgyzTk#}wAqH{HWNreY z>YUAF@q4>sbBut;`y(?z&4u^IuE$cs%FpJ~raQZu;(JppI&H7nZ_J4ecW#P>8(-N#G&4J)FT_#Ww2Ju>)0@ zxFACWHS9|oV)TLys!U|~dQU<><~nZ;e`~gwmT|_mry~j)(r*}hV;)-g-aA3`$^ivK zg;#*iBltaz9`_=|yQ%$yl#ovZvhW3{gG}qC%K;Hg*rZ)#Eej_x!}puHkMOtwSMsGX z8>dm5IGsZvoNZUQF{{G<5ZQLiNvi7}`p+GqguA-lXwA`<7ye{In~FqAE}SF}#0DM) zR#V=Wo?np3iPiCkh35iqnjgqqk4ELusJ+iUV(ZXgSyKky`r2InXq~rO;Wb|`7}w!b zv(l~?3<`SSC1x7b*r zytE;81dIg^AWGBMVu09Kp{Io>DypiS2m#dx!_cP!tHfNMgv|w92h&*+-K|v1W8ZBI z@+9H41))+M#$$j!8Cd1<~q zDyIx%aV5HcOo&AXwLs^G3u@=(fRo{FZ8xvFdFTF)u+!smh@zomGnI3I2OqkkS*({s zBbdT^!uAlMqiV< zt@|{pcEmuN5m9&Em=h}B1jT-83BJ%?D0d%)TbZC3#_upp5APcd#FUL z)L2B=xOYY>KPOq@rGI)pmk+Svv0=4nYx@Jdf@UBztk@vI+{4h1>excH= z2+!x)WfGrVe_(UT+jkfTVh^?Ua|OX_(lh5sQ@FD$`jhM!qx;wa9z;=~rB}j_WHcZ( z<3ht2QXlY2^Vqq`(DE~c6`a0>+IG&w1$s_%Ts9D}+VcFN}c=#;%0aSU}N8|d(9pQZY zvH)8*8~&2e)(kFyvj?|tiL@T@i?te-e$CqIiS=sYDKo!FIY@iB5J)xztowm*-z={- znBKrZz@|1+nsh=fa9YG0z*c59{$~z4y=Z10s!7~5-PZy6H8X+Z!7W|IG~>GQ=$=BF z*a7v}G)gAI6*~8XG^ZCGyZ~K`zl%Jl4YYT@}y0c)X%&l6ASv4t)qjF zn;^Hi9h#o2iAjCh9!SlFG`{NI)2c`z=whVUPFG`e=hp5X+S8`T2Q`(5x@qwkeaWjr znNgiO;zMa9E@5SrC(S(7WJzsYVz)7Jw>wZ0?LL#oMRU9A~_*ww1cnrWpmiS?x3#>{DLpZrB zF1FblG5ud<*EL7LCy2AYH6Ds`zDwM3to88ckpeJ)7+lapeC;Z{W!e?kVmKk<`Igtb z91n+#lm+xV6Y-Ydq#h=3WKkhs-Ab}yi=|0z|g%)UAYuDG6^jfIm;qY(w!I6T` zBH(u&!l>I4!CUfXHKW;bra2p7HL{W|6O(rO&2F){)Psw+_9;t?JV?3e^PWyj@afGy z^+!reN5_2R!S=YU%0~SM!@Yp*Q|HbD6@I-fwb zUpd;6%pE0_KJTc6V@G|fFn5eETRw=u3LVGW#p^^wdO?r$LRok*60pz7cSjJabpW%5 zYnhxiG0qXroKon+se@|(=d%O>`NJ65rf0YcdnITc0wZe5qH^VLUX9a5UBeZp;5lTF z2TxPit0bU(G`_q_&L1DN8cHoQbN5fWV+%kA>7@a^Aa9qMP>9%XQ}0+a6B;D z15Ig>Q;biE=$kFDQ~k9E&*32=wI|^FO5R7LbdlLsU`NutMB&#dc~ibiK|Op`C~B~j z$7}xUlT~1+oCFN9ONyhBRZ26vIv2;wKh!l3*Acyq93zs-3iOAh&s4Q$FF_vlE#Av= zp6g_peKT5n$<3;_5Hcymg>)cvCy)`sqL#~jE0vn-_jo^L9y@eK0bk^Gv8y=kb;vcT zV>)^}IbAUkJGhe(5G)`H<$Yf6_FN~EZ*f~T-jmBc0Gas5G!JCXNU!L)lIaXRzbnK{6>f~{U z)EHQ13AlK!i^qi9e})w^QWumaOAKXEwT;l^Un0eU$EjK$B^-7F=KicH3zxEfzo^{6W+b+0TOtSRAmi%~ zV6p^~m=C1J_Q$-sM@eF-5_GR?;=1IWm&27pLZZ6$CD-HNBIt-Sr;c3EBd)%c2x#9G zaI1p|KaS@%mqGaUDnf7}LU>e}e2v)i>lS27J$yI4SFpyp(3pQ@<~DrLw8pS!rg;JI zjh8?wHE8Zoy*aNozL&vXt&>d*OEs#3EkG?h3_TBKUHk3HTFmOBr8!vc2&=YiI@tyz z=Guc$NM>cuT6Jo|2&-_MeUSPDe6I4zG@50pR4^Hd2CstLo|Azsc7##4;bT{&X#b0dNr8FcVrXg#~HQg_b7!izPv`hAo9IL z9#;>i5#G|4i?^ACcPb1jN(C0 zp~|8v+6IEMVlG9QY2el?t7+6?zxu(zITA?Z=eM;a zwSWo|TZVvLrX2|V;PK8==!ETo0ht$Cbu|A4Pm(aIMs)N%JNl2_o{etrXDA~L^=7v` zu^ru9Q+z@T4Wre$bzA`N;FmUZr217Mv)ssvKs1;L%+nBiJ#;Ay4WFL5osl(Ha=PO; zp;Mk+SM<(g35zdu7zRyDW0n|Vcf&8wRV4SoUJ}saYVX)^CxWxI?rlE=lotVqHQbHM z)&Rx(GQD4!Kk$VcbSZ_%{B5loS3-js_oqK~iF^iM_j+R$qYC z2vy&m-r9_EJo`f>>EZM6M9xp9Tx}t6CzR#hsL=bO(~mg+lH9Vn5lYJlR2zE7TByHH zfQ|!kR8mh+4P9+I0&$bX?@~VGF2%)-H$?Io)R~BFqG0V-p){s`j!I4?4O7i|TUh$i z=~aRl(svtxpsgu+{*v`*zD6z4=wZyJ3J!64K)Bm<3HNEU6)WIu9AzV=N( znJQM1LK7Le+$}yp{j=%~I@2mtxAKb1`kuUV^Mzy&WI4&blBhl0kv-$QnJ=y)#&N5C zV9uGMkD>uq!+Ifun2N(GUoJeNOSOCYSSbX@?L{}U^cbO?c1i?Ep7uM#tD$&ttltaU zz~-@=e2s={bmHG#%Tr?X#X-u=(4VeL)6h?G32G>ghG92yXu%H+P)-LP~~iucWzFuFkQM=yWJ)$<9zHgU6E z(a@l#7fE~x##(CXW$kgacTj+5)sw!gJ;&^PJ*&`$EBRB?;5zN|q@lk)e7RkG;5{#2vYpWrY0GxUC?jZFPFpcRFt4!r7^@8;GCJLmz zwcg+qq3!>y2u?hiWS#fkujsMn3-#F#Jb#Aj{FnGRoH9pXO)>GDCY$?hYjEKYJ)LfiFHn6+$bAt8~*Z<<|=ET zczw-bkjdZ9yqQSEHUU|}7bv`1mOylkdu{6fnG+TC6SZ}(W1qw4?1~HHhglZaI9lon zLX%L>7AtF@l`2W&tkL`}4nJ=)%9@aCf8*!TUOoi=wp}^=V$D!&(msSXNAl`@UNPC$ zafDik1SeQA;gXKL9w?(?FWp*&ZwCjUb zrAq-iZJ01PQJ{0uGD{}vozCW$eJ9vZ*Y7iS`&RSl&7qV$Bw372zoP2j1M!c!fn8?9 zAFXDL%bHq_tmiyLTOT16vpI+#`A6PnaZC?(COzEPgxvHL-)vEBEM|_MV3l?ZkMJ1| zt1bNmR5~W&QcVL-ISWS*m)g5iz&%Qx0gtuL2A7p3@DUr_Nd>e2Dk9l7{LZb!a;mfh z{bj@!D!k&BBRR2m@DdnwT3!XJ)$0<%&V}Ha67)CXxtP2lNAd|5Lu3&FVZSS5>u`RU zv8akcmR=yOK_emwKYC`|Pt|eGz0BphJ0bT4Z3$uDHr*Wz80XY?I~w~jDY@Th+qI7w z!Q$+yZMN8T75hd0Ayd9%2Dp%d&1zlR6e@GGfnZu5q;y9tGnw}H9VQ)tXzn*?Pq^i# z^Q+;i^3px3xM=pj8=nAZo^ju_d==XDwH&YnE)c5g`#9GNo(|HEGqY z?ebhq4YeJjmG_lPZ(5KL!Mi3_bhm5?Qq%Oe$tD<*Cf6tIO{}?~B2FN><2ET@kPtiT z-jGWY)-!L1uimtrR~X!TaYu%@hAku?R*@fq-Y>DBXJO8@$t0W#*zgDXTfxQ-u;wrYpf+vRCVRuuWPW zyL6Mvvaxc3=ws`PQ@rmSJeB{azjhW2WG}rU4tsM$* zyXeSU6k%JW8tZn@=(-A!=d!%@hK2zoB?j5P^11I)&c zCSAMh2fB!lcYG!fxo=vUX>O3eG&1!4sXZwcxNVx*O#=@nmN-4tREpWG>jM9*Y4)He zbPLyihDLLV7+RFI1XumzD<{I$G(P3*Uf#SiB~lFMCpNiY09gBP%+Avya39om+@=nN!si)fv?GB#-ctWkOfE*(!m5xXv7?2cse%(h<7!BS zx!6$ih`Ewl##Nrl7!?)%ueD}?^I7uVlJSb$#dWwxrTZg6jrf!`@-KuefIF;>BI*-@ z=1Yp!cB3<%XG$F3R$uj`JZr|e_)iwV&f6)w+5pTtv{? z{a23x+_i|p<{XPLoWH5Ge;)A0>>x-VbXKb~6OB@@;m%94q`r{jKw$EC~ zbErMMAG^aA^JzDczIi!rs?S{2{HFMS-3S*+PZGf8;+MZeTm0cjti>Mk5+L#QHbGKb zWD3aVcD;4B;-=cJ=Vc&9a zqt|ueR6`-<#JPJz(_&Ndqf2KY@2|gLeb+Rk>BXzGOa}jlOT4#?mvDW?2A+CIDUg-L-Cw6TprCQu(5LcvxBF5m2~X zri;P%PFex9f3c+0xDf!yc*+Q1TqN+E)WgE#fw@Ya@huNtl+BliAFRi7d2*Dg@Q15R zx<8-oFn|-~nAY)P3a9c*cL$Oglrwj|>t{Q;A$R;Y){F6HD`7`!M~fn8k%>hyxN95M zzAXuU`w3hVzJna(9ZZ+YF*&RW z{BiV$1vc^Q zE@#tRI`zv!f==sPNs@W!1gJveOoTsGcqkzkBIr*ge1J!VK_d84=W1>m$l3HzqAX&4lakd0$n$@OXH8w9|M*M5@TD-Js4j-h;&`q*}%ABV(MSw|*x)nS_tIRCD47_Ouu)7qWnVA`h2gD7u@hk6t zY8)oM8Q-dzViFYeygZq&@D;jmG%w-WUu^ao1%zt}LKcnmX75YV%YQ|+{i|8~U_7Pd z*|cQW1^V~m_5oY|uV$Lv&Ksmt_&&~;*VndyKp-Rf^q0UN#{jl7xny2D6L^Vy=~`Cp zN>w^@g46Pyhr}uitINX$qR3bQXYQ#FW`w>|g8yf?> z*82$WaG`evs&ve%^_=>@oI-%)Gl@RbK!I>4?*83`0(kw%gz|xY>z@_qOpwV)lK{w1R!ZY)$}k} zK0Y8e)H?=WG<@zT0O_}S23+vAP!bRtepPdDZvY?CQF!YoVi0F3@lwww?M8YzATx@HjZtz$^h&83J zT!^r?V|Nc%&lea*TW5Y=RsT7S=m}lIz?RzM@X;2buj1Re89JR>>PG8%f|Y-8tQ0 z;kKQA7kK1kWCZtxoJ&16O#n9TL9#v+o7~Im-=pl&8@S^4ZzckzbLp2FgZWpSC+B)1 zd{j2(4*1=ZbbNb6Jbs6av3icf_p@D2mG%T1i5?|^0`a;UfD@Tnu z=mc^xLv-c=+pIP}5R5Hz-6P)Kh&RX_w@?}f!WDtA9nJ0DG>E$I`1zKxx%+AMr^2Ia zQZQ#R1~Eh#hy_!!PziW08%_2bAs~=|6i-4rf+)vzk8i~LsQWre>{3tOYa{k?)GGB- z2+H4j+WI&uLB!c4WLDUoy#+vcGT2lyp4T3Lv7~=c@&)G{*nBAad~fpkL89_!M_qh| z7Ae1nYvPgz_b&o++FA8MillBkZS&Yj z$wFpF*MdXluyh?Bn-O^q*K`cl56t?71U4|C@%&NK>732*xBtK@8v>}EROAG&f6yyu zL!obu#2muO_^i8NGv98Sx!Mw(-}iMs?$lENh>Byw=12X;F@PNUJ-p!{=yaApzVY{0 zla>O278odMRja6%|A557LihJLR>$e^+);^#5yTu7pI~G+2bW6+*1A%Z!N5^ZkI=}i zx81h>c*$IAQr5FgOl*%Enh1zu{)zb_#dv9gu1WofB~%GgHj13w{aFHVBqTuGsDg`* zDS&9&GIs@RKFPQot@GcW1baYnYdn>h^lzQy>%nQn2Y2AU_7|W8^kCpq^Mzh92_RLz zXkebvkT385Ic#>RcuiqbfpSq&*E3qN*85&$p~3Y%Jno~xN!_zoTAHc2ahrE-A7OE9 z!Mxm^k0VlMv27h`zN0J}g_f2uMf4QO~+>rki^VBccPSG$SlMt}qE3DrIaj!dszYgO^~>^J(}5*L_;VONKTkdFjs ziRlZ_cNJ?J=39Wws6DQagK)NUq9}GSQu*Gc8HmgXzV!DxKO9I}p4+9|tn_Q0+8GH5 zdJ464RelT;1hV`FIzn8}&iR(M=Xyrq7@wilMxXGH>59haOX(fIG8a`M+CG1; z;-x$fWc{XZOlsyex>B3a#2DmZmPc>xW?fY6@=aF#79Tm0J@=V0>A!gSCd7bxOX3r$0tWrr8ffT3cXkoS}QR4JS9>2FNl-;h3Y4t72MVV%iVEc3OAo$-Ex zUzRHg;mfYpQ4)B2&O-SJ7=UOmq>&ap! zU3)##pKdJV{>XaxLuq2Y_l3o$%VKBx;Kz)NjB1bHs)XFw{MLcDp+Kg!edmoLbHST$ z3BP1@r%Ltn#2)U{h*c!Bn{O{voQXj2Pu5dati=N3nMy-UAXZJYbom!LW_BpKz>>m9 zeXGdFpUNP{exefk_BfVD!c_wE`)o0EGmrvb9*c`#GNr*E`J_2NI%Um%zo8|iiD z5e1C88SqJA!e6mU6-Bqc%8{>{xlNwPaki*53yfCkX!->NysBruMl<`IA|OxS52*g< zt>OWJw$CUE?p7$Uw%4M?)PLh^RpC5ZX)?Wf^_|ytKK~*8zz0a@n0)J=1I!l4RJzi< zPUXx!lC{-+KPl#q`W+0|f7@Qc;GBI@9_LDC@Zu&z+zw~Ep(}_v8-^DH9A}JRe?#cC z>h*@ZNqitjOG3#iR-58l>om0uvZrVu80DlC#a>%I%)bM1R>&Zg7verq>U#7*nby0Eb z_gn^0bbVe{R`nFgeDjFo(p8F@REGL$+jS3e2W6}2a!LyGON2e)+T9=Ce@*@tKwZTX zO^wlGjog5fT23(chp-@H?S(swOCzn#P19!M3Xi28bkDYzO&NiG5*r-3{7{#ik+cWYnz ze+mcGI$xKyj<&(y&u|FiEJXf+bTG`5Lx+Cv3dfZ=WJngWgVb$RB(-$n19IKxYVCyi zc-}8JL&-_-+UM>__aL^|hDjkjoLfsBahOReh(vg@omLacro~0h9$(sQs5QBNhj+d! z_NeeUw+3I_?(5)n0IHn{OTre)?0tHh5r#YtNZ|&DAyI|m@H2NGS*{9p`XNwsQu6%>8`7ex-%o~#7##C)9eiT@k>4&ffTKr-+sXL{sNan@&WdxX*K~+ z6ncIyS*#yb!CIeR?s#NQ((AV%dv_Qhfn|YWlhh_uiv;Aq~e6`kV;&W3{ zMH`&s3emIwP!#%^kXf};25TDCFXCCDu+fiWAofQM@C69;L!@WhxUjeZuUO>U3Tn7U z`g+Of5curDyA&qxyDPN*0r)GU4dYxO{NR1={q`2n6(*bwV-bat(C$OiL9PjCnA<=I zg}Q$?J2_Pw-mlMJnj4;Z(eKArxi0;1eewAbNPOvozgv7?iYJ(#>e`q$Gl zd``q2&oBu=uXdetgV{wmYqhq;h%p?!^tVv|*M~xx+Mfq!Qq*fOnCIKg_#SQXfV!6+ zWr`++UGW_CS>$zuZk;g}@uh{SzGX9ISIw6O$6+Tnk|~r!3^at6C*L06w;t1!XbS=f zpIiYsPrC%W54%O5KlKoq-QP6lk_6K2ciR0(2ny&S3b>*!u>Z5`c_G4X{UJnIq}F+F z@S)9U6?eM?m_~4K4vsRXr+xdTeB2og=QVP1u|K0vm$B#$tc+JWOS^=`)l9cG2Sm{Fv6+3tiASHbIw(b!1lPV7>qHLR+jML zHpgNjBWLa$#dx2ukABQ~?;u9n{qc*;7eXZ=+9p*;#y_l2>M#&a&c&3yR4RQMEa-Az zw-E?EC-b(6PsUHzUSqRnEy1=^FZKR^osU*Os{DXhf9H)8@`CRJ zor^Cvi5$W|p|aW(zb}4$XfGx?vvgHn>FZq?n|ssl)>{!450#gfE~ocBCnndvPx)_t zt8(XcfT?;nqOnrsbj}_6r}1L8F`-Pm><_5`&@fkGXGwN+pu*t;C&Z8Ce^wd*VWWg2-{pH*+)NbEpOOsd84& zlOK3xACFSF-!p$@HhT?QFT+d$sgY-@5oe8lO}UqG?gQKOUjuybdyz+*b2{u?ym_JL zNdQVOQQU?b>u=Sr=C9sgn-?Sbg0A%uM!4k>r_$(nAQd*%VZHn@MB>Fa87WUJ%9p{U z)H;(n%TD6wZS@bldfmUQr*cm`!}*S6^?p5gCmZ#{A27f-%q7#-z;aR;uk|@Sqpx+2BOpQ7p*) z!sQ=(YZ);hs>yA6$ZNjCkD09nY;(sgOhjbWJuDGRqx%ya&}+{kUalB^S}?A7qVFOD z$ax(^`uuh>ilBD#Dg58(1?%0$>-t``aF zAeLsA*L|3#?T5YL%Po{=@i=!)u7KgeldhJsE8%B(3n~f)Ub~ED-FKe~a&m6%7FoXZ z-_cGw;(v58Pz_Oy*){_#D*Q5UVF8LSq!xBB@h05g5V^1u{L{fGhuGZCLtSM1>o@Vb zyWve!v9M73yF4`S@C(857k*7$sGZ~u3)iMl009G=M3JmA`G;4&UeC64An;r`3=#eA zQ|TS(|Iog-xROeu-@DGkrGHxZ+J(wF=-BsZBc(@Dpw7h|YqwvBdq<~5zMhwjvi)mM zCYCqM*e;E2!bX{ARE%v@o_Tr6#ccFC9X*pe1Izif{+VT2F9W5*fz4;5QH?WB$-PQe zXNIF{Thfuo-x};^@%PN%wSUyLTFY%+5EL-$oPqtVCk<2tRQAw4g>lWN!pc^7h;*Pk zT>+x#?&C5U=mTJ?w2u@lYA%?ce{uux?9v}KYhr+!9oJ8+7gR7To&{50pFWG8vRBM( zSoCoSO1-`-aNUk?@8);@TVF~jzt>Ds)7mWrg;H%QwP^)Xc! zUy}4j%&w~1r=JO&lb$9USbXJ%E;4z4y4J1KcJ{^B>fSE-{E)KmQYZLiFfB`j$GwdF2yy|Km_+9vqDA5~pMQ-#?#M z=BLp!{C~beAzqx8H~&^S;mkGj+72G`#4(%oy5f)5uKe@JNXwZYc^ex)@_5y(w3*+Y zpkHA;y+24P#uj`e}aR>j!k3BPX1Se z{L?f)#Fd+^j&N@;{&U%Xwb)0@2|C2ctF`~!?Z18wR^DQ{7mnRWU%2%sLzP}!!m$2w zQXu3GoA2ZQv`okVhfL1PM){obOdp+(4^=bX125UN|J!?Y;d+KO4Z(dF*WTe3|4$=- zYz$Uoh>#IH?&1BQc>WHYu5R}-O)~5CzkTrUb6<%nH>XQpmH($V|NWU?_Xud`ABgBX z*Z=Q_nX&-YgS6Vt{ogyWV}bA5vJ%h)+V6k;Pk98m)&E~jWN;aA;V$q_?3x+nFK?V;Vwf%V~*8(^HKjiIaQ>8w0{|ZuMq*c>4l`EB)Nm-Yv(FS$y1u9vdcYETkd4K3h$5(DX_{LHqZN_4HPZP?qa}T*3gykD0Ikc7}b3 zP<_5$5o&!FOSmjETMQRfKLvr!nJFU>CmKt02<;*FQsuo<%}R>QDgKUQO*0jn@NrPyidTS^ZWZ@FtIe zH+k70^rdi+QBXT&ISlq@S6HMuy}qeMbYgOC4fjYGerK}UR#eU9z|;{%F%v0Z!<}Kc zojG-ao4dMZ%sHWsO&aBy%vB{b+(33HVwGC?oW9zIO%bPwl`UobrzL#io5vx9Nq{2F zLx-?`=Y5SK@+r_IH6={BD>p&{2yN*2;|0#yK69J{it?)^Q0#}@QeL$ue@W|Bx zD-jJFQW$6O%e$8r{;>=pM=bYrbf{V#7eZ=IpWkd>(A4VZ zX6oJo->O_&@)BDM`+Ha_n=`Vn>0AL#xsF!;YTVhV2e?t5;uwQLRC2|yH*T9BTd3yw zTIo|l%i@@wg&@Gxd53g%OWQtW&@{G=RXgYsnK7=0W4f0F3e^xl;vrI9w2`1!>b(Ds zv9Mq;iDOMCU8?bB80?b^=JxusqdW_!^!jV0@xjztS=}-g`qN)BfJu7B(m?xeAYIg+ zs}wcp&EdocY;IW#YNDyKGmLI3H}?@v z&|MmJ5M(5I z1#FFu)^;R1_*4_*-b&A_RtAlKO$A__3j#rB0E>K@;q?B=Gw^tfa|_WJ+(7Z)7V1K7IVT@tE)rce^^lE%V&J}zprFn^fqB&=I_T(oq;)f#dM2~KpT;$ z0sf)y(~aewdqo=?LaJTNy1QZ>&uvapfSMGy+I#mhl5+h4!rVJN5{bOD)L##Em-d)x z{$BSNZNL;Rw{%^~#@jW9*IzbQGcZ#a3y}PlZee?SbL?GFaf%?$v3SJ^+}D!ShA2r$ zu5DS8&*R$9pmw>ruh&lgSzY+2=z-N|3Kui5q>)iif7SW7Re9mBu_GAiPIC7{BLypG z3R@*}m3lVoW~fJJK27>A-b9 zJC+MjI6&-m;c6rJ{D&0DM=U%&y?bk8T}$M4Cf;2)p5D?+4|Q|fvBwj}cyYLY7{F52 zzs>7Ek@)}?yNZsH>C=R^|AL{ke_^ zxh(1>-n9SOtkS{rWqpAaY1~-{I`m1s=62dXGFi#S4yh$pw|R*qd#`5rfnxPh)dcaG z$e{huC*L(ZG=2Gyv`zpKsML9Vx7lxM?_5Kz4DRl{=|l839xR$|6z0<|i1@1WL2@Pn ziH#Q#OxVfYXIsN-F(jD=@-$-l__!kCPdUjV{w(4PVu0VVfj-eY&2mSV?-d=blvm4bCC?7`F*7O@<~#~jEskmqPU>{E z**6nn87c?ms9SZpM^6lu{*WBI315g8Yg+z`JTl>4&3ukL7U*70qf%<8k4Vtew#?+w zn4o!nC=O5Fx7jFd^^ktq&NC@mUDY(UUPX<1m3LjT_6AM$stl=+BiN%Cf)c$aM3*SBRr)v>V`XlQcr1rNIUE6 zy5}7++j`u@{3j{!Sr@h@a2dAsv#&T~5O-}KVJ`c6)0Prp|o z2}nwss?Cd5<2QhU62F8%$DfX5IbHf21ErzM*O}@8*MhHKo$-iiVrhCMKXuizin+H# z-_jG3tzN4$>VK|s3jCt0qE~Kk{RIb4p8};ANRGbIFNL@GFCC^ip&Jgt9#8)GCX=#D zDGS0rkm$ULhtq+kw|d-+JnQ1ZSQGr>naWIA z^;*$p_|+Z)imV)qRS}YHV85Nixi>H2u-QDX#z-@hPUV(%sZ8FkrJ6AD_yq^9@8PZRWyW$oO z`{wd(xN$SL+Zml=hXb`%Hzog;1GkVp{yIuppqZgyL3^iTe%f#C{rxTK6(A0Z8s2ca zZ+yPdr{g&}9|Rh5N~P+)QH@^MN@(YUB1M}&XhI;__^A=qnGfG_xsGo5_aEq$jvpLl}~DtX&c>CrTFBWdrn`Q#qIZGMHcq6!aa%dxOE4PPZ6fM z8V1ejK=;pAR~u#tjT#bzvr+BA0qTH{rDU=mQ5H1WJ@gzsrKAZI3kWw(`_`LWUJ)Wo9Io#Y4;u&1U5*Y09}J_g<<;IqvzV?Q$w`w&aV57x-QO);S}I{WVh}y2&;}6@(_?8~a`XNzcGJJXq2l^E*~GS)npTXH3q&M8_4Z4cdt+6lJhA@zVDq!^ac5Ln^Z#xoaBwl z6%_dU(6`(XES)bsICoc}b8j2X$DzUgkK zC{aAn?zRuDd{87zkdTLa!R2suzp{_FhJN^MOp+(&v$uNWiRQ$^iRi6z+pbAK9P{FW zOND0_J&*A@;xibIuOc6^WvJZWx($BSuE$&WTxvqdfy>5LpCvgow0hb;SVVEbw85#e(K{P+}KDMME)XfNPO#ZIqpcP6I;%J-otHagR7Z{2?- zNxU?^GA~b1`o)o$8~$+5EgUjDg1IW`m4mf&QZ(#x_1k}<8-7?Pm(NXtg6U;UyRJ_{ z!00GE>gAJ`1h8G0gm3p1#CoWab>k_5+0oF0LT;)D3xHjcKd_LTx9#q=ne-rNWr?lp zX{by;5yo2D2Vj?zmcd9S%`nIuE>OVmxpV*o>h9pONmPU|84pmDTlMY60|l<_u1K1_ zz`je0;X_eb)LL* zH9vh7pj55Ep*y1RiTMYGPirlqg`qH4#LpI{`UTPyj&kn_m*#!Pft`)dQQ|(?>d{Vv z0{o+5`-M1fpd{R6)(_W+6ATju#<+beW3(xc$Tnzrhktlyur=LgHuYS&wK-9bbwai? z{9?i7M>WH6Vk2pL$M0Fd#=)lB1|v6b<_W2W;^VCM$~{v5_1KI@W>Nq09S1YH~D@H8c{mX`#)`Jz}Y64J~ExYIxO< zbkKm5p9pv~WZ)^xli;i&d*O~Tol5gd8VT2?x_>HAyN??!)D47Vv@fYTU-P(OPCOa`%@vZ(AY(k)7H; zi@<2cvE<`deo0@}G9&o5q(3nm=*TX-LVRGF`1%V*#^3gQJgzOcx`E!En8yE>AZ=f| zoMMks)u|CU2bydv7u%Zq3q&fL3#!(ME;Cg2?Xg!{Fhfe5GEhDF0YsG{1Ien|^dKVA z>Y$v>%MCkM^1W;~s#A76ln3(3Xkg!xakgX5ljDS?*Or>wTgDgBoF+mtesew2FyZX! zUsUfJ2%3b7ib|-7=9b={9(LW^2!yAfzR1CEX}y$nLQ}d^ee4RZ$4sieext6PK6tsT zol6`k)(xG4RI|Mt7Tp_6ZyHbV24wy0yuK12P-fD3nIk{%Ck|I}KCyHV&5*P!ELq>% zgKUi2eDI=?qqr}s&_>H_f`ki8kZqcLFD>3kj*xKDQ(t84_7fiV%Je|zj)&3NIAK4% zjG<{E_@Zg9t~kq2_TuAhW9dW9xMvO83bS)lFKcQGM7Wr!+g-88vJNTLmVC_L4Q6+d zR@0+)#S|4Lo*B!s`@dCegN4p$mnzT**rwzHzkW#>!uvtIK#bC2X!8?vZI??^q`GS& zJ>1aJ;uYEq<5$F}zce&W&(-6&xtQ$k&x!e1wCyw&!FQ;v8OPp%`Z}(Q7Ppu~jLA3| zK5_`Er-#Ss5m^~2)sq3qeGiZL4AUG^%G(li<$Qe}H z?4Gr!vY=C{v#rCUuAzFKR6gRyxK(5hc1o950lTC#CMC=WF!9Xu9u1}+Z|#Dg+iDrG zy`AqXA-NZYP77WdyE zv)k|ah?Z#&WXlw49(Nqvk~)2yg88{j&}A;^3d@GyHI@Y1I7NpKpk)YwfOr2*XudRaeO6$fvlZYU!0{o`;qZ~ZXj>R1oT$2%Ju*)l*q zKAbQaoCwk_2>u<}B@SWkA9l(qDXmzyTb`Ic3MYn-M&f4GkjdPbu`6B zmG|5U#6zqqgLfUESVn`u_1Xxwx8GEfgxH3%Du0At!#4>3)YM*uAAP{TaxLYC-8x2f z6n)l5F`htUw;pFfR!41Od;zB<1s?>O^YJd>-+DzD_~QzZE`4-FU`U7+mh_7IBkczz z<%$8jn;e%Pt}jyA$oQqMyo@b3MY0RwT#)K-J24sfJzE zW_!CUsF?=z@pogRJEMapHjK|yo;H0zH@iWFvxUM#bG8<4n>EYyf~&)nE#~4mg0)g) z?qAp>K5#2WS2EZ6roZ5zm*kWnd~GpV8`P2iVLVcBQOH4dL(BJ8O*9HUK+jfufI%uNsUL zj>t78W0Z>MwKULpuH-v|WbFcU_5H00L5Tjn%oC3my5=G5wpYIh52gq7r8&kun%yN$ z=)>H37#jlkii|bt*o%#=QE99JJcabu6?@&fwr?#9SJiS3RH=TnlkYlfl2*Bg8GO^VO)L8g6@3VSP?l~uD)ltB#3xTo;#eRtp z$``9$zCm`kqC^r8vZi#HNrwKhDL@1vbg$^1Zp>v1?_02u)r#keXoHT7oGF2p6h^qp zG6-D4Ts)tH>%LDKGjnfzVc?&E&`h+<=Enj%`)&*Pm^Dq-qd`k#f5gmv0{T6Q8YnQD zH;Ul3PLI)KQ`om2&$5J%*>3m{Y_s}IS<7@626PZ4L{o$gAM*9#A_9(QOYc`;I<)MU zN^<_4JbhR-c;Dc{VYEAZqR}y(MbkbN5>9hD=$6FgDT)bSP(BetVi@pw+`RIPPcRBG7FbzfakM>7dS)-dCyr|SF&b>LE@$E*LcbE8> z3(^RNxx>^_-v&lf%I#hokM{`vUbR`EA+;j&Y=j)m4E=82j_w(L^j3P>%Q-7f(w|$a zGEZ#3=+)_xxGKFqx?GnAiG##YSgtH*N+BbZlrr`%?TmiD_MR>81HaN~!Tp#LEcj|` z>|UX*R|^vh%KjSzHqo-$W({0$%PKZ;g-fVo4n~N}z=hX25X{+28C#mFeywfe*B34D zd0{zyrwq@ow1GU%j@-4bTkY&hodR(o(_Nnv)+acBh6fhhaWMAqY^Gz{Ut?chO*$1a z$s4$_5%|{OboYi)X6Agv_*!WgqxFR4Qewl0ED@NU>5;k=2BT2IF(Jht(6(b`UZV-7Df4nd|gK?l~MlPmDuxpb45FA2xjPB;}B z4{VVtItYhm_kfZKXZcb9B6YLQd6@yB_uuXwc#D|iGt2czXZX_(?Wj2B8ICY2GKH?s zPmEqsbS$<^cQV!1KAimAv&|vw`i#o^u1{?5qMj3xi}7HkkyMd>JV{pWzjtYmbogzl zWG|NG)C4<4hxNK1vr_dDp9bw$piWCu_;d4sgSd?(XAn_11H1b}yao=V+^XVz(dyB( zyMV5#=#%YJbo7oaXipTB4eAbmz6>sSZmNMh0wQip=^rv?Rc-=tzYGC-SI~m|XKu<3 z-Iw%rjAyAUJr|FrJ`E1Nf+w|D(KPQe(m8tUq{VofVVp2*l|J6Z8+%C(#B1CS52Deu z2uyg&Z?oh99{a554kIYuda@kc@gTL>Jq$8tJaE%WbCnaxJu`no8+G7>(o>dswQNn3 zIMw6Eqg`R=?ySdijrlPdliUDoXupY;WtiayTUR>r)4Y&IC0^;6#1`z~g1D^W@24mg zy}QY-7_8gP;UrYzwB&o`7Pot8ew#C{tye#Hr3aZ?oK!sZY++>d(BQ6&l~xvKT=^C= z5k2#mt|MM_V$r={4q|Jp9Dj5;xNoO;QB3x(1Ft)WM3KVtr`084V5%WqInt0}pZOYh zQr7yHQ14$JA3YA6h0d|NFcC1?#5V=)+CrnW7#i8V>A9LsZmiYQ*`RE=aiYYQd5v>T zm45E~fT3l{A_<$eXVbYR4-170FSh})kM*#?#@k1M-DeW*ppU9NzZZKfZ%0*WC z8DQ?<7ydbPp$T?aHD<1=XE0l^HzsJor&X{NXkrpoJHQa=3Y!dggn!v8C1Id`NptlR zj7vM?y2|VqVB=prF%d2asZKkq#o5j0(M+YLrv=|oUmvW8ien3@8}{isdWAYfr4bZ% zUAFLnZmXGuMrL?|!`HW;x5u3<`olE86)40etRyWr=4xC)Y)*rAFFhz~S1szRoIkEV zB+k^M>U&~733XVll(q9hol!6SLJS`$xuZq*OvWJ9t{hQd8ervXe;CaclHvD!R8>K{ z2Rq^vg<%EOBK84=hX6HtFRo=g<~0!3_jv?lTLc2u%;e}v3(mhn57+al`JC*uzN$fz z?Co`T|AP*SS8tAp?~qomTPMUj2Z61A*FdF2fPDMFPt)ogttey8L8Yn8sxesuT3-EGH(v$ny6k1ow+`06q|kE>H_;{u$3W3;i^W>$fpcR z9xag?_N^v2g{6DiLRM?n(n}M&vVlFg(~TDQpkvxWvIYi>v^BwpgjJ%BI9x*)tznxx zR3_TIS?O@OTvIO7<5IDshkjFyb+PJzY0VY#7U; z*~qYo#wFTa<&l&VNssQEl-#e?3^M~e9P^RV-F)5fBFoGpOkLUVB3vi5gqB8ZLZty~ z{I3ES<{2>rWz_M>{1i$*VK(Ee6Kwc(0<+LC@==`JAd16(+$Yc{DK$2}@UyB|r+#50 zP7elidb*w-lT$8IYUF14-C?`MKm(N}XKd(or!W_^yhyxUd8B?RP>5gqvWXOUb5%bo zOsGC9)U;72?u)(5-m)HnHk1>$@;N~F4&zjjhu(sU*PFxu^8)&pqy4UmQI$IT-p>$B z8XWfmXhpX_E`B&oE&O50(V6sKMDiLKCDUD^4@B7V@xw)fzjDs#Bsvr=#ExLrTh+}y4zW4BX^^oQZ#{ZSAn|IL90LGPvD(U2QGuw|s7Q2cne;jW)As~jNr$Q1x6Osqv#>XeJOvXFzj8l`9 zrd=Hmsv%R)ah1Md&Qng(?sw~+ zz#sy^yZ8MEoEAPZugf^XNw$5Q~F^N)20RUV0O#T0gPbZH;2;!ClVRRZBCU2i91pF@;( zCOqb+u?7dHT;F`>Tk3H&gmzBI9dI?lxI}2y|9{ifT>12!R z&-QpOF2MT2Z(-Oq{Zmrd!b7P~IYRW`9KXN4Fm=zbyv>Ri@y$3sHU2l(%8sh{hviW{ zA}lqwGrO-xCI>sNdp@^I3_HYH$tyKmnY@>y`zBUN_{+B?B(wA_MSlSy#}c;OnF`g` z&j9V4uzOlhwx$5?iC2cY{qVgmX)jpTpOoK85y^D4i%4}8%cFo ze-N#~J1DBDu8;R+>^sK?qKaJ4=u|8$EPj8A;7WiE#~JSj2M**c4Y+YbN`NdH2|p@a zd^^<6ahi0e#?@vOk}7esR&adqW@r?rn3sU-<0Dlz+3$i|6j<__gf^_k;!@8yL|9K9 znvfOz0%bv#C)Twyomm|bl7^TXA}cJJ_!LQ3KqHcu(Nb@olqsVUR~fT3DxTlMOcBnU zUd`iszh&Gn63D2oqqOJq(wH&2Z*+fBV10bU`4WS6`u#zj@Vu$3NirLf$ty~OIbsLo zDY80r>rHy)0VC&ru*e{cMk3z^bR(NO*$VwSgj@l{1B~rL^e-d8O)s>63qF)&q4BMm zs61B-4t2CZl3ippKMpi5J}5i8?MTdDl-K>3nlj`irjGFw&KS~X_bqKUBeF3L9v_Ye zoxdcw@6T?aw-wW0t0eFEnezLx5_a8@krYs2=L3R9v{e%lw>68d4N)HB%vDdbzc2c& zszOvGQ?Kh?(+VhMg6`}09P6e&KK*&obP;muz(LmxBkUV5G z#JM*L8irhsvrJR?0UOvpCrBK8JY*kQXqRL6xS4>y>26zVChu`kw%R7 z8D^&O2hcjrmP&H2KMz1T7JOQi(c|q}8;4Z)y)blHv-SV!gkkL%2;z`SPeA3zg=?&A zr3A38R0t3HpZK`%*@xxh*dXpc?ix^$T zsY^y%UPY|>H3OD5$HfD7KWDB_sT(oRW1eYD!y-nP993J5XcFfdl`Kn-zRV+Md6J$O zawySC&s_VHx>r^LlJz^8Pk6U3mnJXR)yqyzIZX?7lb0@wI972lv@t%lnA;xa+-38Y zw0S(*4PTkk9N}qnjB+-2z7&nBw#NRdgBcr*CDikvU&p#xrd4rsVz>&Ub_r6Rcpz>+ z`K1GGBE4xbnSiEbVL!1|2MCWEO2ZfrS2v21_cGM9q^l_=!p9m?g`dD(k}P$0xDhYL zPpgm7C8e5mSB*cS_A~>Sn?GI;6Sz&-;eNHr7d>~B3n>E)f;+JLKl&)~_c6M6J@i?? zA2(`tw4G}eJ1l%xZo%_BAhp9iCG;2rjS47|e*QPWqs>4}2y9EV8KRa}(~w5#l#Tjn zV#)o?B#8X-Uqyf*tn2m`Z-wbZUq$2_Vh|x2{+BGirs#%h+zHJ(yQJ%u6$MtF2exo3 zz2W$>os}x5)0*e=*&J@)tAwOf*N2+ZKn6Yt>J7<0_c`>cg*g6fI&?#p`q(J;ec^*g zcQ2#)i9R5R0JW(H%*XIhZ^G$GtLF%eG;D0;i~(P|Q-pgn5)s=r*-80+N!w#-;u4({ zpcm(%6_UADuCc0(_MGqaE5hExY){tTvXeoetIPvC3rrDTw?D)Iv#9RGSZZolC+s zoZzD@tHXZ0-!@>QZ}erKKc#W$h10jEjGwG39}r+A{5mZ=RdNeqeG++t3(u5$oEzKuh6HAD*@s~p(+b!5MnEhUR|i_dVsMzX5kuw6cVpY z4IR_ya}}@O#xcAN5MBKQX*av|CS~_(A?~*p_5fAefbKc6F$S={GUN`O@i}EA^7#Dg z{Nfv0u@eiQcMtW{9?Lko=-O5Os|BDPGBf@&~H;)qaoUaEaaSxe~jz)5gDG6Ee2=&ATi4G+a%G zWU+srB)D|i1%Ke0$+k~9du5eM1@rdy0o4x>B}mKlrso*B%I~#&(f|#2q7)WCV{HqA zS+uD{pv4pC*TOE@)AV73r1 zntXgkAJRT-GcG}C{0weo_tCC0LI>T%pC+7=2I`Uv>Fg;y5wkCH&5n0QFv_Xm7Oc5N zr(d{B2Uz9R!^2xjz+eGc15E~StlK=8O%xDGMLunS`i z+Sdz=Ys{IQhUJQ1Tzd0F50`PiT_Yi%9wd9)EPo=u5u%6A{>!Y&Sg_GeY782p1QxH~ zeVLqto}x#Y9aZ3C$-@Mlbm^6;WUjsvvcb0fb1%z@sU`dkP?Uk-I+}CGKqFm)d43|0 zt+1i!Ckv?KFMj|$k}IcO)%DOn-O$XV1ZNy*iz^EwSA`>UG{+w=ebs;$ZZH4bK6bg- zuw+#_#pnN|ye!t2Rg}!qVd_g5!B54G+_NV3@H^gVcCDUVOAq!6GrUH?T-f7M99F8{ z{n_iRM3DuhtCb?eK*JA(uasmS@5u~V(@zu}mDeKPj$<2bF^Wz>3+9_?g>T1O%;l57 zOZ|uFFaGv5rhc>re0KQ51tCUu2-@Eu{;M;;QQObj}516oPhg_{Fa+J6=&%ilraf z+Lq&NNb0 z7X+r%mE?SNoW;buLwdD=*>%iPwiT_)%2B%=*;O33`yAw^c<|{{p%UM>b_XKlic9@E zjMrl8ikN;WY`gE7l0apQk^q4I5Y?ex8!QjXDR53nL5G&}-+OAAa0C@3y1K@`GxeJK zu@4OtEAn#_S8J3iLY1#}KkVI9Y?JW6^#_0UGXcOvG~MjTS72Nd%DNz+j59%*%~3-2}I>NY;)XklvbA^HUUtvlyGXlrin%G_d* zQ&AQ@mRhlz>x7g9yoIDzmr#`)vzmI4#V@Szq%)*Ji!;&p)071E=ABkZwmbl=FCjQU zYQ7$)?SICrDpfS&;A$Eszboe{(irUoP4=Nw0N~g2Pi{5a96awRy%r+EkW?*Ivj~xr z8VjX8dfx0_u~q*V186G$PqcMNFOXs(n!A56DyDaBo3c0VU(9<9N&`)Pc3-DX2(Dy9 zK=RM3{sAZdfx4XtX#fD2OK(0s`z@yX;^AFq&e?OhQuRm-Xz2HJX7||Dzfb!2@KZZD z7$h%VC1yyM%v1f1w=BWAsI*QF)OOW8;snd#1=EJ2Sy@o5IpDg;VUQ}!wlU7!Q zC}z!8EoPCI+5dxT{&BN(CX8(|7=CPF0khDk-bLCXj$Ut-*vEkXz2DD9wukW3Up@yz zI&cDeToGq|Si6iyyAPwUrly7-NAlt=dJ0}lL@?ZQ0SU-U{n=Cl@xq4;Ny*9h%9TO< z9~A1l`i)g5mn&9x1tD|BT}{1){|9_o>KTSyw;(vRz4y>EtEy`ob{1LIdAO1Wp)b&N zZenFzmh!!AEL-5dc8!~xD;0cl_nGs>|Ga;$NX7|2YA7Ss>TbIIP_3b9c6iec;L7Qy z(eHx9`Ut(Ix6gDZQko1AroyxjCoRYp>h-HFC&6{(+pYzm;kjwSrNOT>xBB;9!;seM z>J4=l%i^d%Q0st^5l-i=JD2|ff6uFAAZS$W=>x#7+|i)}?|1Fgd5>t&6B~9uaLc`V z%dOz|5y>mnY&hf#HS98~ZL<|dVGya#Q{&b;qZOP8BzwWC?c5$p4eM0kibLlkOFe0N zJWIuz%|fS&TtZJ!E_bt>cX8+v5~?GuS33<0{lRD9uvQ?#Z0VS>m?b2oY7q)M?~`jL+)7H^Dv|5%C^F31V(@KC ziQ}Bz5*L?wEMyD4Y_v|R-N2ixLGJX&a0%O6P=y0Oc*NnEY8UfdEmo4uicSd$30pwY zse<=&yCeYo@Z|3wPmg+nL#aZ@ZvH=`?2ohTc)EZa`v;{c61>Z`k=~#B;>_ z|0l5a&x`k~0e7-s=z9TVdj6fhfB$tS2e6daAsyWR>sP=Kh+Uj13;O$tJDed+FiPDg z0jL)sXX3>dRN7Ayc{B#pr~7?QZdsYUoE^h)gYqct?p^P`rtCFU9o(_Gh92 ziUE=nT@^xMeIIH6QfN8=yP43P3zUQZX*mPLdm#Dg0g;T1!sdX|i-nd}bUh_)y1r0< zx<{$PmvlwOI#{0cHJgQZ6KB>R`0Gu&PoE;Kfl(XbWLR{PZFHK)^ZV?^Mm^D!AnoFj zU>>CRr_tiYtu_D!=cUInygZhZtK?}K)l%B^@cqvqKuqZOM(vU%pI-!&x%0AR-ZW5g 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 QKmq=g71S?f${YLs59k6j00000 literal 0 HcmV?d00001 diff --git a/docs/idn_docs/triggers/img/test-subscription.png b/docs/idn_docs/triggers/img/test-subscription.png new file mode 100644 index 0000000000000000000000000000000000000000..864f7fd92731b0b49375a73dc0fb7d4ca90bcb60 GIT binary patch literal 76461 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 literal 0 HcmV?d00001 diff --git a/docs/idn_docs/triggers/img/ui-filter.png b/docs/idn_docs/triggers/img/ui-filter.png new file mode 100644 index 0000000000000000000000000000000000000000..37846a8b875c01748986902ff761e5f940ba93b8 GIT binary patch literal 88033 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 literal 0 HcmV?d00001 diff --git a/docs/idn_docs/triggers/img/webhook-site.png b/docs/idn_docs/triggers/img/webhook-site.png new file mode 100644 index 0000000000000000000000000000000000000000..523eeeabbdb5bd849b758b5a442eae531004e0b8 GIT binary patch literal 196192 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 z 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

    Query Parameters
    + +List of access request recommendations for the identityId + +
    Schema array
      access object
      messages object[]
      translationMessages undefined[]
      + +The list of translation messages + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/access-requests.tag.mdx b/docs/sailpoint-api-beta/access-requests.tag.mdx new file mode 100644 index 000000000..a6e8d13aa --- /dev/null +++ b/docs/sailpoint-api-beta/access-requests.tag.mdx @@ -0,0 +1,32 @@ +--- +id: access-requests +title: Access Requests +description: Access Requests +--- + + + +Use this API to implement and customize access request functionality. +With this functionality in place, users can request access to applications, entitlements, or roles, and managers can request that team members' access be revoked. +This allows users to get access to the tools they need quickly and securely, and it allows managers to take away access to those tools. + +In the Request Center in IdentityNow, users can view available applications, roles, and entitlements and request access to them. +If the requested tools requires approval, the requests appear as 'Pending' under the My Requests tab until the required approver approves, rejects, or cancels them. + +Users can use My Requests to track and/or cancel the requests. + +In My Team on the IdentityNow Home, managers can submit requests to revoke their team members' access. +They can use the My Requests tab under Request Center to track and/or cancel the requests. + +Refer to the following link for more information about access requests. + + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/account-activities.tag.mdx b/docs/sailpoint-api-beta/account-activities.tag.mdx new file mode 100644 index 000000000..0f31a6165 --- /dev/null +++ b/docs/sailpoint-api-beta/account-activities.tag.mdx @@ -0,0 +1,15 @@ +--- +id: account-activities +title: Account Activities +description: Account Activities +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/account-aggregations.tag.mdx b/docs/sailpoint-api-beta/account-aggregations.tag.mdx new file mode 100644 index 000000000..3d85d8f24 --- /dev/null +++ b/docs/sailpoint-api-beta/account-aggregations.tag.mdx @@ -0,0 +1,15 @@ +--- +id: account-aggregations +title: Account Aggregations +description: Account Aggregations +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/accounts.tag.mdx b/docs/sailpoint-api-beta/accounts.tag.mdx new file mode 100644 index 000000000..2931ec9ff --- /dev/null +++ b/docs/sailpoint-api-beta/accounts.tag.mdx @@ -0,0 +1,15 @@ +--- +id: accounts +title: Accounts +description: Accounts +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/activate-campaign.api.mdx b/docs/sailpoint-api-beta/activate-campaign.api.mdx new file mode 100644 index 000000000..33493e07d --- /dev/null +++ b/docs/sailpoint-api-beta/activate-campaign.api.mdx @@ -0,0 +1,92 @@ +--- +id: activate-campaign +sidebar_label: Activate a Campaign +hide_title: true +hide_table_of_contents: true +api: {"operationId":"activateCampaign","tags":["Certification Campaigns"],"description":"Submits a job to activate the campaign with the given Id. The campaign must be staged.\nRequires roles of CERT_ADMIN and ORG_ADMIN","requestBody":{"description":"Optional. If no timezone is specified, the standard UTC timezone is used (i.e. UTC+00:00). Although this can take any timezone, the intended value is the caller's timezone. The activation time calculated from the given timezone may cause the campaign deadline time to be modified, but it will remain within the original date. The timezone must be in a valid ISO 8601 format.","required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"timeZone":{"type":"string","description":"The timezone must be in a valid ISO 8601 format. Timezones in ISO 8601 are represented as UTC (represented as 'Z') or as an offset from UTC. The offset format can be +/-hh:mm, +/-hhmm, or +/-hh.","default":"Z","example":"-05:00"}}}}}},"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The campaign id","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/campaigns/{id}/activate","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"timeZone":"-05:00"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Activate a Campaign","description":{"content":"Submits a job to activate the campaign with the given Id. The campaign must be staged.\nRequires roles of CERT_ADMIN and ORG_ADMIN","type":"text/plain"},"url":{"path":["campaigns",":id","activate"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The campaign id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Activate a Campaign + + + +Submits a job to activate the campaign with the given Id. The campaign must be staged. +Requires roles of CERT_ADMIN and ORG_ADMIN + +
    Path Parameters
    Request Body
    + +Optional. If no timezone is specified, the standard UTC timezone is used (i.e. UTC+00:00). Although this can take any timezone, the intended value is the caller's timezone. The activation time calculated from the given timezone may cause the campaign deadline time to be modified, but it will remain within the original date. The timezone must be in a valid ISO 8601 format. + +
    + +Accepted - Returned if the request was successfully accepted into the system. + +
    Schema
    • object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/add-access-request-recommendations-ignored-item.api.mdx b/docs/sailpoint-api-beta/add-access-request-recommendations-ignored-item.api.mdx new file mode 100644 index 000000000..93a3ac1cd --- /dev/null +++ b/docs/sailpoint-api-beta/add-access-request-recommendations-ignored-item.api.mdx @@ -0,0 +1,79 @@ +--- +id: add-access-request-recommendations-ignored-item +sidebar_label: Notification of Ignored Access Request Recommendations +hide_title: true +hide_table_of_contents: true +api: {"operationId":"addAccessRequestRecommendationsIgnoredItem","tags":["IAI Access Request Recommendations"],"description":"This API ignores a recommended access request item. Once an item is ignored, it will be marked as ignored=true if it is still a recommended item. The consumer can decide to hide ignored recommendations.","requestBody":{"description":"The recommended access item to ignore for an identity.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"identityId":{"type":"string","format":"UUID","description":"The identity ID taking the action.","example":"2c91808570313110017040b06f344ec9"},"access":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"ID of access item being recommended.","example":"2c9180835d2e5168015d32f890ca1581"},"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE"],"description":"The type of access item.","example":"ACCESS_PROFILE"}}}},"required":["identityId","access"]}}}},"responses":{"201":{"description":"Recommendation successfully stored as ignored.","content":{"application/json":{"schema":{"type":"object","properties":{"identityId":{"type":"string","format":"UUID","description":"The identity ID taking the action.","example":"2c91808570313110017040b06f344ec9"},"access":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"ID of access item being recommended.","example":"2c9180835d2e5168015d32f890ca1581"},"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE"],"description":"The type of access item.","example":"ACCESS_PROFILE"}}},"timestamp":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/ai-access-request-recommendations/ignored-items","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"identityId":"2c91808570313110017040b06f344ec9","access":{"id":"2c9180835d2e5168015d32f890ca1581","type":"ACCESS_PROFILE"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Notification of Ignored Access Request Recommendations","description":{"content":"This API ignores a recommended access request item. Once an item is ignored, it will be marked as ignored=true if it is still a recommended item. The consumer can decide to hide ignored recommendations.","type":"text/plain"},"url":{"path":["ai-access-request-recommendations","ignored-items"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Notification of Ignored Access Request Recommendations + + + +This API ignores a recommended access request item. Once an item is ignored, it will be marked as ignored=true if it is still a recommended item. The consumer can decide to hide ignored recommendations. + +
    Request Body required
    + +The recommended access item to ignore for an identity. + +
      access object
    + +Recommendation successfully stored as ignored. + +
    Schema
      access object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/add-access-request-recommendations-requested-item.api.mdx b/docs/sailpoint-api-beta/add-access-request-recommendations-requested-item.api.mdx new file mode 100644 index 000000000..2523a7016 --- /dev/null +++ b/docs/sailpoint-api-beta/add-access-request-recommendations-requested-item.api.mdx @@ -0,0 +1,79 @@ +--- +id: add-access-request-recommendations-requested-item +sidebar_label: Notification of Requested Access Request Recommendations +hide_title: true +hide_table_of_contents: true +api: {"operationId":"addAccessRequestRecommendationsRequestedItem","tags":["IAI Access Request Recommendations"],"description":"This API consumes a notification that a recommended access request item was requested. This API does not actually make the request, it is just a notification. This will help provide feedback in order to improve our recommendations.","requestBody":{"description":"The recommended access item that was requested for an identity.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"identityId":{"type":"string","format":"UUID","description":"The identity ID taking the action.","example":"2c91808570313110017040b06f344ec9"},"access":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"ID of access item being recommended.","example":"2c9180835d2e5168015d32f890ca1581"},"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE"],"description":"The type of access item.","example":"ACCESS_PROFILE"}}}},"required":["identityId","access"]}}}},"responses":{"201":{"description":"Notification successfully acknowledged.","content":{"application/json":{"schema":{"type":"object","properties":{"identityId":{"type":"string","format":"UUID","description":"The identity ID taking the action.","example":"2c91808570313110017040b06f344ec9"},"access":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"ID of access item being recommended.","example":"2c9180835d2e5168015d32f890ca1581"},"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE"],"description":"The type of access item.","example":"ACCESS_PROFILE"}}},"timestamp":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/ai-access-request-recommendations/requested-items","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"identityId":"2c91808570313110017040b06f344ec9","access":{"id":"2c9180835d2e5168015d32f890ca1581","type":"ACCESS_PROFILE"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Notification of Requested Access Request Recommendations","description":{"content":"This API consumes a notification that a recommended access request item was requested. This API does not actually make the request, it is just a notification. This will help provide feedback in order to improve our recommendations.","type":"text/plain"},"url":{"path":["ai-access-request-recommendations","requested-items"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Notification of Requested Access Request Recommendations + + + +This API consumes a notification that a recommended access request item was requested. This API does not actually make the request, it is just a notification. This will help provide feedback in order to improve our recommendations. + +
    Request Body required
    + +The recommended access item that was requested for an identity. + +
      access object
    + +Notification successfully acknowledged. + +
    Schema
      access object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/add-access-request-recommendations-viewed-item.api.mdx b/docs/sailpoint-api-beta/add-access-request-recommendations-viewed-item.api.mdx new file mode 100644 index 000000000..0763da90f --- /dev/null +++ b/docs/sailpoint-api-beta/add-access-request-recommendations-viewed-item.api.mdx @@ -0,0 +1,79 @@ +--- +id: add-access-request-recommendations-viewed-item +sidebar_label: Notification of Viewed Access Request Recommendations +hide_title: true +hide_table_of_contents: true +api: {"operationId":"addAccessRequestRecommendationsViewedItem","tags":["IAI Access Request Recommendations"],"description":"This API consumes a notification that a recommended access request item was viewed. Future recommendations with this item will be marked with viewed=true. This can be useful for the consumer to determine if there are any new/unviewed recommendations.","requestBody":{"description":"The recommended access that was viewed for an identity.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"identityId":{"type":"string","format":"UUID","description":"The identity ID taking the action.","example":"2c91808570313110017040b06f344ec9"},"access":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"ID of access item being recommended.","example":"2c9180835d2e5168015d32f890ca1581"},"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE"],"description":"The type of access item.","example":"ACCESS_PROFILE"}}}},"required":["identityId","access"]}}}},"responses":{"201":{"description":"Recommendation successfully stored as viewed.","content":{"application/json":{"schema":{"type":"object","properties":{"identityId":{"type":"string","format":"UUID","description":"The identity ID taking the action.","example":"2c91808570313110017040b06f344ec9"},"access":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"ID of access item being recommended.","example":"2c9180835d2e5168015d32f890ca1581"},"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE"],"description":"The type of access item.","example":"ACCESS_PROFILE"}}},"timestamp":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/ai-access-request-recommendations/viewed-items","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"identityId":"2c91808570313110017040b06f344ec9","access":{"id":"2c9180835d2e5168015d32f890ca1581","type":"ACCESS_PROFILE"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Notification of Viewed Access Request Recommendations","description":{"content":"This API consumes a notification that a recommended access request item was viewed. Future recommendations with this item will be marked with viewed=true. This can be useful for the consumer to determine if there are any new/unviewed recommendations.","type":"text/plain"},"url":{"path":["ai-access-request-recommendations","viewed-items"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Notification of Viewed Access Request Recommendations + + + +This API consumes a notification that a recommended access request item was viewed. Future recommendations with this item will be marked with viewed=true. This can be useful for the consumer to determine if there are any new/unviewed recommendations. + +
    Request Body required
    + +The recommended access that was viewed for an identity. + +
      access object
    + +Recommendation successfully stored as viewed. + +
    Schema
      access object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/add-access-request-recommendations-viewed-items.api.mdx b/docs/sailpoint-api-beta/add-access-request-recommendations-viewed-items.api.mdx new file mode 100644 index 000000000..cd8704265 --- /dev/null +++ b/docs/sailpoint-api-beta/add-access-request-recommendations-viewed-items.api.mdx @@ -0,0 +1,79 @@ +--- +id: add-access-request-recommendations-viewed-items +sidebar_label: Notification of Viewed Access Request Recommendations in Bulk +hide_title: true +hide_table_of_contents: true +api: {"operationId":"addAccessRequestRecommendationsViewedItems","tags":["IAI Access Request Recommendations"],"description":"This API consumes a notification that a set of recommended access request item were viewed. Future recommendations with these items will be marked with viewed=true. This can be useful for the consumer to determine if there are any new/unviewed recommendations.","requestBody":{"description":"The recommended access items that were viewed for an identity.","required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"identityId":{"type":"string","format":"UUID","description":"The identity ID taking the action.","example":"2c91808570313110017040b06f344ec9"},"access":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"ID of access item being recommended.","example":"2c9180835d2e5168015d32f890ca1581"},"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE"],"description":"The type of access item.","example":"ACCESS_PROFILE"}}}},"required":["identityId","access"]}}}}},"responses":{"201":{"description":"Recommendations successfully stored as viewed.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"identityId":{"type":"string","format":"UUID","description":"The identity ID taking the action.","example":"2c91808570313110017040b06f344ec9"},"access":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"ID of access item being recommended.","example":"2c9180835d2e5168015d32f890ca1581"},"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE"],"description":"The type of access item.","example":"ACCESS_PROFILE"}}},"timestamp":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/ai-access-request-recommendations/viewed-items/bulk-create","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"identityId":"2c91808570313110017040b06f344ec9","access":{"id":"2c9180835d2e5168015d32f890ca1581","type":"ACCESS_PROFILE"}}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Notification of Viewed Access Request Recommendations in Bulk","description":{"content":"This API consumes a notification that a set of recommended access request item were viewed. Future recommendations with these items will be marked with viewed=true. This can be useful for the consumer to determine if there are any new/unviewed recommendations.","type":"text/plain"},"url":{"path":["ai-access-request-recommendations","viewed-items","bulk-create"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Notification of Viewed Access Request Recommendations in Bulk + + + +This API consumes a notification that a set of recommended access request item were viewed. Future recommendations with these items will be marked with viewed=true. This can be useful for the consumer to determine if there are any new/unviewed recommendations. + +
    Request Body array required
    + +The recommended access items that were viewed for an identity. + +
      access object
    + +Recommendations successfully stored as viewed. + +
    Schema array
      access object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/add-tag-to-object.api.mdx b/docs/sailpoint-api-beta/add-tag-to-object.api.mdx new file mode 100644 index 000000000..20b2fe867 --- /dev/null +++ b/docs/sailpoint-api-beta/add-tag-to-object.api.mdx @@ -0,0 +1,81 @@ +--- +id: add-tag-to-object +sidebar_label: Add Tag to Object +hide_title: true +hide_table_of_contents: true +api: {"operationId":"addTagToObject","tags":["Tagged Objects"],"description":"This adds a tag to an object.\n\nAny authenticated token may be used to call this API.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"objectRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"tags":{"type":"array","items":{"type":"string"},"description":"Labels to be applied to an Object","example":["BU_FINANCE","PCI"]}}}}}},"responses":{"200":{"description":"Request succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"objectRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"tags":{"type":"array","items":{"type":"string"},"description":"Labels to be applied to an Object","example":["BU_FINANCE","PCI"]}}}}}},"201":{"description":"Created."},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/tagged-objects","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"objectRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"tags":["BU_FINANCE","PCI"]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Add Tag to Object","description":{"content":"This adds a tag to an object.\n\nAny authenticated token may be used to call this API.","type":"text/plain"},"url":{"path":["tagged-objects"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Add Tag to Object + + + +This adds a tag to an object. + +Any authenticated token may be used to call this API. + +
    Request Body required
      objectRef object
    + +Request succeeded. + +
    Schema
      objectRef object
    + +Created. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/add-tags-to-many-objects.api.mdx b/docs/sailpoint-api-beta/add-tags-to-many-objects.api.mdx new file mode 100644 index 000000000..258be1721 --- /dev/null +++ b/docs/sailpoint-api-beta/add-tags-to-many-objects.api.mdx @@ -0,0 +1,81 @@ +--- +id: add-tags-to-many-objects +sidebar_label: Tag Multiple Objects +hide_title: true +hide_table_of_contents: true +api: {"operationId":"addTagsToManyObjects","tags":["Tagged Objects"],"description":"This API adds tags to multiple objects.\n\nA token with API, CERT_ADMIN, ORG_ADMIN, REPORT_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","requestBody":{"required":true,"description":"Supported object types are ROLE, IDENTITY and SOD_POLICY.","content":{"application/json":{"schema":{"type":"object","properties":{"objectRefs":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}},"tags":{"type":"array","items":{"type":"string"},"description":"Label to be applied to an Object","example":["BU_FINANCE","PCI"]},"operation":{"type":"string","enum":["APPEND","MERGE"],"default":"APPEND","description":"If APPEND, tags are appended to the list of tags for the object. A 400 error is returned if this would add duplicate tags to the object.\n\nIf MERGE, tags are merged with the existing tags. Duplicate tags are silently ignored.","example":"MERGE"}}}}}},"responses":{"200":{"description":"Request succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"objectRefs":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}},"tags":{"type":"array","items":{"type":"string"},"description":"Label to be applied to an Object","example":["BU_FINANCE","PCI"]},"operation":{"type":"string","enum":["APPEND","MERGE"],"default":"APPEND","description":"If APPEND, tags are appended to the list of tags for the object. A 400 error is returned if this would add duplicate tags to the object.\n\nIf MERGE, tags are merged with the existing tags. Duplicate tags are silently ignored.","example":"MERGE"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/tagged-objects/bulk-add","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"objectRefs":[{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}],"tags":["BU_FINANCE","PCI"],"operation":"MERGE"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Tag Multiple Objects","description":{"content":"This API adds tags to multiple objects.\n\nA token with API, CERT_ADMIN, ORG_ADMIN, REPORT_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["tagged-objects","bulk-add"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Tag Multiple Objects + + + +This API adds tags to multiple objects. + +A token with API, CERT_ADMIN, ORG_ADMIN, REPORT_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + +
    Request Body required
    + +Supported object types are ROLE, IDENTITY and SOD_POLICY. + +
      objectRefs object[]
    + +Request succeeded. + +
    Schema
      objectRefs object[]
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/admin-reassign.api.mdx b/docs/sailpoint-api-beta/admin-reassign.api.mdx new file mode 100644 index 000000000..a83643c11 --- /dev/null +++ b/docs/sailpoint-api-beta/admin-reassign.api.mdx @@ -0,0 +1,91 @@ +--- +id: admin-reassign +sidebar_label: Reassign Certifications +hide_title: true +hide_table_of_contents: true +api: {"operationId":"adminReassign","tags":["Certification Campaigns"],"description":"This API reassigns the specified certifications from one identity to another. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The certification campaign ID","example":"ef38f94347e94562b5bb8424a56397d8"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"certificationIds":{"description":"List of certification IDs to reassign","type":"array","items":{"type":"string"},"minItems":1,"maxItems":250,"example":["af3859464779471211bb8424a563abc1","af3859464779471211bb8424a563abc2","af3859464779471211bb8424a563abc3"]},"reassignTo":{"type":"object","properties":{"id":{"type":"string","description":"The identity ID to which the review is being assigned.","example":"ef38f94347e94562b5bb8424a56397d8"},"type":{"type":"string","description":"The type of the ID provided.","enum":["IDENTITY"],"example":"IDENTITY"}}},"reason":{"type":"string","description":"Comment to explain why the certification was reassigned","example":"reassigned for some reason"}}}}}},"responses":{"202":{"description":"The reassign task that has been submitted.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the certification task.","example":"2c918086719eec070171a7e3355a360a"},"type":{"type":"string","description":"The type of the certification task. More values may be added in the future.","enum":["REASSIGN","ADMIN_REASSIGN","COMPLETE_CERTIFICATION","FINISH_CERTIFICATION","COMPLETE_CAMPAIGN","ACTIVATE_CAMPAIGN","CAMPAIGN_CREATE","CAMPAIGN_DELETE"],"example":"ADMIN_REASSIGN"},"targetType":{"type":"string","description":"The type of item that is being operated on by this task whose ID is stored in the targetId field.","enum":["CERTIFICATION","CAMPAIGN"],"example":"CAMPAIGN"},"targetId":{"type":"string","description":"The ID of the item being operated on by this task.","example":"2c918086719eec070171a7e3355a834c"},"status":{"type":"string","description":"The status of the task.","enum":["QUEUED","IN_PROGRESS","SUCCESS","ERROR"]},"errors":{"type":"array","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}},"description":"A list of errors that have been encountered by the task."},"created":{"type":"string","description":"The date and time on which this task was created.","format":"date-time","example":"2020-09-24T18:10:47.693Z"}}},"example":{"id":"2c918086719eec070171a7e3355a360a","type":"ADMIN_REASSIGN","targetType":"CAMPAIGN","targetId":"2c918086719eec070171a7e3355a834c","status":"QUEUED","errors":[],"created":"2020-09-24T18:10:47.693Z"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/campaigns/{id}/reassign","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"certificationIds":["af3859464779471211bb8424a563abc1","af3859464779471211bb8424a563abc2","af3859464779471211bb8424a563abc3"],"reassignTo":{"id":"ef38f94347e94562b5bb8424a56397d8","type":"IDENTITY"},"reason":"reassigned for some reason"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Reassign Certifications","description":{"content":"This API reassigns the specified certifications from one identity to another. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["campaigns",":id","reassign"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The certification campaign ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Reassign Certifications + + + +This API reassigns the specified certifications from one identity to another. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. + +
    Path Parameters
    Request Body required
      = 1`, `<= 250`"} defaultValue={undefined}>
      reassignTo object
    + +The reassign task that has been submitted. + +
    Schema
      errors object[]
      + +A list of errors that have been encountered by the task. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/approval-summary.api.mdx b/docs/sailpoint-api-beta/approval-summary.api.mdx new file mode 100644 index 000000000..12c0391f8 --- /dev/null +++ b/docs/sailpoint-api-beta/approval-summary.api.mdx @@ -0,0 +1,75 @@ +--- +id: approval-summary +sidebar_label: Get the number of pending, approved and rejected access requests approvals +hide_title: true +hide_table_of_contents: true +api: {"operationId":"approvalSummary","tags":["Access Request Approvals"],"description":"This endpoint returns the number of pending, approved and rejected access requests approvals. See \"owner-id\" query parameter below for authorization info.","parameters":[{"in":"query","name":"owner-id","schema":{"type":"string"},"description":"The id of the owner or approver identity of the approvals. If present, the value returns approval summary for the specified identity.\n * ORG_ADMIN users can call this with any identity ID value.\n * ORG_ADMIN user can also fetch all the approvals in the org, when owner-id is not used.\n * Non ORG_ADMIN users can only specify *me* or pass their own identity ID value."},{"in":"query","name":"from-date","schema":{"type":"string"},"description":"From date is the date and time from which the results will be shown. It should be in a valid ISO-8601 format\n\nexample: from-date=2020-03-19T19:59:11Z"}],"responses":{"200":{"description":"Number of pending, approved, rejected access request approvals.","content":{"application/json":{"schema":{"type":"object","properties":{"pending":{"type":"integer","description":"The number of pending access requests approvals."},"approved":{"type":"integer","description":"The number of approved access requests approvals."},"rejected":{"type":"integer","description":"The number of rejected access requests approvals."}}}}}},"400":{"description":"Client Error - Returned if the query parameter is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/access-request-approvals/approval-summary","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get the number of pending, approved and rejected access requests approvals","description":{"content":"This endpoint returns the number of pending, approved and rejected access requests approvals. See \"owner-id\" query parameter below for authorization info.","type":"text/plain"},"url":{"path":["access-request-approvals","approval-summary"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The id of the owner or approver identity of the approvals. If present, the value returns approval summary for the specified identity.\n * ORG_ADMIN users can call this with any identity ID value.\n * ORG_ADMIN user can also fetch all the approvals in the org, when owner-id is not used.\n * Non ORG_ADMIN users can only specify *me* or pass their own identity ID value.","type":"text/plain"},"key":"owner-id","value":""},{"disabled":false,"description":{"content":"From date is the date and time from which the results will be shown. It should be in a valid ISO-8601 format\n\nexample: from-date=2020-03-19T19:59:11Z","type":"text/plain"},"key":"from-date","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get the number of pending, approved and rejected access requests approvals + + + +This endpoint returns the number of pending, approved and rejected access requests approvals. See "owner-id" query parameter below for authorization info. + +
    Query Parameters
    + +Number of pending, approved, rejected access request approvals. + +
    Schema
    + +Client Error - Returned if the query parameter is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/approve-approval-item.api.mdx b/docs/sailpoint-api-beta/approve-approval-item.api.mdx new file mode 100644 index 000000000..6a154b0ab --- /dev/null +++ b/docs/sailpoint-api-beta/approve-approval-item.api.mdx @@ -0,0 +1,67 @@ +--- +id: approve-approval-item +sidebar_label: Approve an Approval Item +hide_title: true +hide_table_of_contents: true +api: {"operationId":"approveApprovalItem","tags":["Work Items"],"description":"This API approves an Approval Item. Either an admin, or the owning/current user must make this request.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the work item","example":"ef38f94347e94562b5bb8424a56397d8"},{"in":"path","name":"approvalItemId","schema":{"type":"string"},"required":true,"description":"The ID of the approval item.","example":"1211bcaa32112bcef6122adb21cef1ac"}],"responses":{"200":{"description":"A work items details object.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the work item","example":"2c9180835d2e5168015d32f890ca1581"},"requesterId":{"type":"string","description":"ID of the requester","example":"2c9180835d2e5168015d32f890ca1581"},"requesterDisplayName":{"type":"string","description":"The displayname of the requester","example":"John Smith"},"ownerId":{"type":"string","description":"The ID of the owner","example":"2c9180835d2e5168015d32f890ca1581"},"ownerName":{"type":"string","description":"The name of the owner","example":"Jason Smith"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"description":{"type":"string","description":"The description of the work item","example":"Create account on source 'AD'"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"type":{"type":"string","enum":["UNKNOWN","GENERIC","CERTIFICATION","REMEDIATION","DELEGATION","APPROVAL","VIOLATIONREVIEW","FORM","POLICYVIOLATION","CHALLENGE","IMPACTANALYSIS","SIGNOFF","EVENT","MANUALACTION","TEST"]},"remediationItems":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the certification","example":"2c9180835d2e5168015d32f890ca1581"},"targetId":{"type":"string","description":"The ID of the certification target","example":"2c9180835d2e5168015d32f890ca1581"},"targetName":{"type":"string","description":"The name of the certification target","example":"john.smith"},"targetDisplayName":{"type":"string","description":"The display name of the certification target","example":"emailAddress"},"applicationName":{"type":"string","description":"The name of the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute being certified","example":"phoneNumber"},"attributeOperation":{"type":"string","description":"The operation of the certification on the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute being certified","example":"512-555-1212"},"nativeIdentity":{"type":"string","description":"The native identity of the target","example":"jason.smith2"}}},"approvalItems":{"type":"object","properties":{"id":{"type":"string","description":"ID of the approval item","example":"2c9180835d2e5168015d32f890ca1581"},"account":{"type":"string","description":"The account referenced by the approval item","example":"john.smith"},"application":{"type":"string","description":"The name the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute","example":"emailAddress"},"attributeOperation":{"type":"string","description":"The operation of the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute","example":"a@b.com"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]}}},"name":{"type":"string","description":"The work item name","example":"Account Create"},"completed":{"type":"string","format":"date-time","example":"2018-10-19T13:49:37.385Z"},"numItems":{"type":"integer","description":"The number of items in the work item","example":19},"errors":{"type":"array","items":{"type":"string"},"example":["The work item ID that was specified was not found."]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"method":"post","path":"/work-items/{id}/approve/{approvalItemId}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Approve an Approval Item","description":{"content":"This API approves an Approval Item. Either an admin, or the owning/current user must make this request.","type":"text/plain"},"url":{"path":["work-items",":id","approve",":approvalItemId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the work item","type":"text/plain"},"type":"any","value":"","key":"id"},{"disabled":false,"description":{"content":"(Required) The ID of the approval item.","type":"text/plain"},"type":"any","value":"","key":"approvalItemId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Approve an Approval Item + + + +This API approves an Approval Item. Either an admin, or the owning/current user must make this request. + +
    Path Parameters
    + +A work items details object. + +
    Schema
      remediationItems object
      approvalItems object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/approve-request.api.mdx b/docs/sailpoint-api-beta/approve-request.api.mdx new file mode 100644 index 000000000..2cc90ce64 --- /dev/null +++ b/docs/sailpoint-api-beta/approve-request.api.mdx @@ -0,0 +1,79 @@ +--- +id: approve-request +sidebar_label: Approves an access request approval. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"approveRequest","tags":["Access Request Approvals"],"description":"This endpoint approves an access request approval. Only the owner of the approval and ORG_ADMIN users are allowed to perform this action.","parameters":[{"in":"path","name":"approvalId","schema":{"type":"string"},"required":true,"description":"The id of the approval.","example":"2c91808b7294bea301729568c68c002e"}],"requestBody":{"description":"Reviewer's comment.","required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"comment":{"type":"string"}}}}}},"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/access-request-approvals/{approvalId}/approve","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"comment":"string"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Approves an access request approval.","description":{"content":"This endpoint approves an access request approval. Only the owner of the approval and ORG_ADMIN users are allowed to perform this action.","type":"text/plain"},"url":{"path":["access-request-approvals",":approvalId","approve"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The id of the approval.","type":"text/plain"},"type":"any","value":"","key":"approvalId"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Approves an access request approval. + + + +This endpoint approves an access request approval. Only the owner of the approval and ORG_ADMIN users are allowed to perform this action. + +
    Path Parameters
    Request Body
    + +Reviewer's comment. + +
    + +Accepted - Returned if the request was successfully accepted into the system. + +
    Schema
    • object
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/bulk-approve-approval-item.api.mdx b/docs/sailpoint-api-beta/bulk-approve-approval-item.api.mdx new file mode 100644 index 000000000..c5145df22 --- /dev/null +++ b/docs/sailpoint-api-beta/bulk-approve-approval-item.api.mdx @@ -0,0 +1,67 @@ +--- +id: bulk-approve-approval-item +sidebar_label: Bulk approve Approval Items +hide_title: true +hide_table_of_contents: true +api: {"operationId":"bulkApproveApprovalItem","tags":["Work Items"],"description":"This API bulk approves Approval Items. Either an admin, or the owning/current user must make this request.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the work item","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"A work items details object.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the work item","example":"2c9180835d2e5168015d32f890ca1581"},"requesterId":{"type":"string","description":"ID of the requester","example":"2c9180835d2e5168015d32f890ca1581"},"requesterDisplayName":{"type":"string","description":"The displayname of the requester","example":"John Smith"},"ownerId":{"type":"string","description":"The ID of the owner","example":"2c9180835d2e5168015d32f890ca1581"},"ownerName":{"type":"string","description":"The name of the owner","example":"Jason Smith"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"description":{"type":"string","description":"The description of the work item","example":"Create account on source 'AD'"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"type":{"type":"string","enum":["UNKNOWN","GENERIC","CERTIFICATION","REMEDIATION","DELEGATION","APPROVAL","VIOLATIONREVIEW","FORM","POLICYVIOLATION","CHALLENGE","IMPACTANALYSIS","SIGNOFF","EVENT","MANUALACTION","TEST"]},"remediationItems":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the certification","example":"2c9180835d2e5168015d32f890ca1581"},"targetId":{"type":"string","description":"The ID of the certification target","example":"2c9180835d2e5168015d32f890ca1581"},"targetName":{"type":"string","description":"The name of the certification target","example":"john.smith"},"targetDisplayName":{"type":"string","description":"The display name of the certification target","example":"emailAddress"},"applicationName":{"type":"string","description":"The name of the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute being certified","example":"phoneNumber"},"attributeOperation":{"type":"string","description":"The operation of the certification on the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute being certified","example":"512-555-1212"},"nativeIdentity":{"type":"string","description":"The native identity of the target","example":"jason.smith2"}}},"approvalItems":{"type":"object","properties":{"id":{"type":"string","description":"ID of the approval item","example":"2c9180835d2e5168015d32f890ca1581"},"account":{"type":"string","description":"The account referenced by the approval item","example":"john.smith"},"application":{"type":"string","description":"The name the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute","example":"emailAddress"},"attributeOperation":{"type":"string","description":"The operation of the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute","example":"a@b.com"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]}}},"name":{"type":"string","description":"The work item name","example":"Account Create"},"completed":{"type":"string","format":"date-time","example":"2018-10-19T13:49:37.385Z"},"numItems":{"type":"integer","description":"The number of items in the work item","example":19},"errors":{"type":"array","items":{"type":"string"},"example":["The work item ID that was specified was not found."]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"method":"post","path":"/work-items/bulk-approve/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Bulk approve Approval Items","description":{"content":"This API bulk approves Approval Items. Either an admin, or the owning/current user must make this request.","type":"text/plain"},"url":{"path":["work-items","bulk-approve",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the work item","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Bulk approve Approval Items + + + +This API bulk approves Approval Items. Either an admin, or the owning/current user must make this request. + +
    Path Parameters
    + +A work items details object. + +
    Schema
      remediationItems object
      approvalItems object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/bulk-delete-access-profiles.api.mdx b/docs/sailpoint-api-beta/bulk-delete-access-profiles.api.mdx new file mode 100644 index 000000000..172c48cb5 --- /dev/null +++ b/docs/sailpoint-api-beta/bulk-delete-access-profiles.api.mdx @@ -0,0 +1,99 @@ +--- +id: bulk-delete-access-profiles +sidebar_label: Delete Access Profile(s) +hide_title: true +hide_table_of_contents: true +api: {"operationId":"bulkDeleteAccessProfiles","tags":["Access Profiles"],"description":"This API initiates a bulk deletion of one or more Access Profiles.\n\nBy default, if any of the indicated Access Profiles are in use, no deletions will be performed and the **inUse** field of the response indicates the usages that must be removed first. If the request field **bestEffortOnly** is **true**, however, usages are reported in the **inUse** response field but all other indicated Access Profiles will be deleted.\n\nA token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. In addition, a SOURCE_SUBADMIN may only use this API to delete Access Profiles which are associated with Sources they are able to administer.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accessProfileIds":{"description":"List of IDs of Access Profiles to be deleted.","type":"array","items":{"type":"string"},"example":["2c9180847812e0b1017817051919ecca","2c9180887812e0b201781e129f151816"]},"bestEffortOnly":{"description":"If **true**, silently skip over any of the specified Access Profiles if they cannot be deleted because they are in use. If **false**, no deletions will be attempted if any of the Access Profiles are in use.","type":"boolean","example":true}}},"example":{"bestEffortOnly":true,"accessProfileIds":["2c91808876438bb2017668b91919ecca","2c91808876438ba801766e129f151816"]}}}},"responses":{"200":{"description":"Returned only if **bestEffortOnly** is **false**, and one or more Access Profiles are in use.","content":{"application/json":{"schema":{"type":"object","properties":{"taskId":{"type":"string","description":"ID of the task which is executing the bulk deletion. This can be passed to the **/task-status** API to track status.","example":"2c9180867817ac4d017817c491119a20"},"pending":{"type":"array","description":"List of IDs of Access Profiles which are pending deletion.","items":{"type":"string"},"example":["2c91808876438bbb017668c21919ecca","2c91808876438bb201766e129f151816"]},"inUse":{"type":"array","description":"List of usages of Access Profiles targeted for deletion.","items":{"type":"object","properties":{"accessProfileId":{"type":"string","description":"ID of the Access Profile that is in use","example":"2c91808876438bbb017668c21919ecca"},"usedBy":{"type":"array","description":"List of references to objects which are using the indicated Access Profile","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}}}}}}},"example":{"pending":[],"inUse":[{"accessProfileId":"2c91808876438ba801766e129f151816","usages":[{"type":"Role","id":"2c9180887643764201766e9f6e121518"}]}]}}}},"202":{"description":"Returned if at least one deletion will be performed.","content":{"application/json":{"schema":{"type":"object","properties":{"taskId":{"type":"string","description":"ID of the task which is executing the bulk deletion. This can be passed to the **/task-status** API to track status.","example":"2c9180867817ac4d017817c491119a20"},"pending":{"type":"array","description":"List of IDs of Access Profiles which are pending deletion.","items":{"type":"string"},"example":["2c91808876438bbb017668c21919ecca","2c91808876438bb201766e129f151816"]},"inUse":{"type":"array","description":"List of usages of Access Profiles targeted for deletion.","items":{"type":"object","properties":{"accessProfileId":{"type":"string","description":"ID of the Access Profile that is in use","example":"2c91808876438bbb017668c21919ecca"},"usedBy":{"type":"array","description":"List of references to objects which are using the indicated Access Profile","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}}}}}}},"example":{"taskId":"2c91808a7813090a01781412a1119a20","pending":["2c91808a7813090a017813fe1919ecca"],"inUse":[{"accessProfileId":"2c91808876438ba801766e129f151816","usages":[{"type":"Role","id":"2c9180887643764201766e9f6e121518"}]}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:access-profile:manage"]}],"method":"post","path":"/access-profiles/bulk-delete","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"accessProfileIds":["2c9180847812e0b1017817051919ecca","2c9180887812e0b201781e129f151816"],"bestEffortOnly":true},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete Access Profile(s)","description":{"content":"This API initiates a bulk deletion of one or more Access Profiles.\n\nBy default, if any of the indicated Access Profiles are in use, no deletions will be performed and the **inUse** field of the response indicates the usages that must be removed first. If the request field **bestEffortOnly** is **true**, however, usages are reported in the **inUse** response field but all other indicated Access Profiles will be deleted.\n\nA token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. In addition, a SOURCE_SUBADMIN may only use this API to delete Access Profiles which are associated with Sources they are able to administer.","type":"text/plain"},"url":{"path":["access-profiles","bulk-delete"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Access Profile(s) + + + +This API initiates a bulk deletion of one or more Access Profiles. + +By default, if any of the indicated Access Profiles are in use, no deletions will be performed and the **inUse** field of the response indicates the usages that must be removed first. If the request field **bestEffortOnly** is **true**, however, usages are reported in the **inUse** response field but all other indicated Access Profiles will be deleted. + +A token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. In addition, a SOURCE_SUBADMIN may only use this API to delete Access Profiles which are associated with Sources they are able to administer. + +
    Request Body required
    + +Returned only if **bestEffortOnly** is **false**, and one or more Access Profiles are in use. + +
    Schema
      inUse object[]
      + +List of usages of Access Profiles targeted for deletion. + +
      usedBy object[]
      + +List of references to objects which are using the indicated Access Profile + +
    + +Returned if at least one deletion will be performed. + +
    Schema
      inUse object[]
      + +List of usages of Access Profiles targeted for deletion. + +
      usedBy object[]
      + +List of references to objects which are using the indicated Access Profile + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/bulk-delete-notification-templates.api.mdx b/docs/sailpoint-api-beta/bulk-delete-notification-templates.api.mdx new file mode 100644 index 000000000..bf927386d --- /dev/null +++ b/docs/sailpoint-api-beta/bulk-delete-notification-templates.api.mdx @@ -0,0 +1,75 @@ +--- +id: bulk-delete-notification-templates +sidebar_label: Bulk Delete Notification Templates +hide_title: true +hide_table_of_contents: true +api: {"operationId":"bulkDeleteNotificationTemplates","tags":["Notifications"],"description":"This lets you bulk delete templates that you previously created for your site. Since this is a beta feature, you can only delete a subset of your notifications, i.e. ones that show up in the list call.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","example":"cloud_manual_work_item_summary"},"medium":{"type":"string","enum":["EMAIL","PHONE","SMS"],"example":"EMAIL"},"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en"}},"required":["key"]}}}}},"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/notification-templates/bulk-delete","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"key":"cloud_manual_work_item_summary","medium":"EMAIL","locale":"en"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Bulk Delete Notification Templates","description":{"content":"This lets you bulk delete templates that you previously created for your site. Since this is a beta feature, you can only delete a subset of your notifications, i.e. ones that show up in the list call.","type":"text/plain"},"url":{"path":["notification-templates","bulk-delete"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Bulk Delete Notification Templates + + + +This lets you bulk delete templates that you previously created for your site. Since this is a beta feature, you can only delete a subset of your notifications, i.e. ones that show up in the list call. + +
    Request Body array required
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/bulk-reject-approval-item.api.mdx b/docs/sailpoint-api-beta/bulk-reject-approval-item.api.mdx new file mode 100644 index 000000000..f894ad819 --- /dev/null +++ b/docs/sailpoint-api-beta/bulk-reject-approval-item.api.mdx @@ -0,0 +1,67 @@ +--- +id: bulk-reject-approval-item +sidebar_label: Bulk reject Approval Items +hide_title: true +hide_table_of_contents: true +api: {"operationId":"bulkRejectApprovalItem","tags":["Work Items"],"description":"This API bulk rejects Approval Items. Either an admin, or the owning/current user must make this request.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the work item","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"A work items details object.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the work item","example":"2c9180835d2e5168015d32f890ca1581"},"requesterId":{"type":"string","description":"ID of the requester","example":"2c9180835d2e5168015d32f890ca1581"},"requesterDisplayName":{"type":"string","description":"The displayname of the requester","example":"John Smith"},"ownerId":{"type":"string","description":"The ID of the owner","example":"2c9180835d2e5168015d32f890ca1581"},"ownerName":{"type":"string","description":"The name of the owner","example":"Jason Smith"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"description":{"type":"string","description":"The description of the work item","example":"Create account on source 'AD'"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"type":{"type":"string","enum":["UNKNOWN","GENERIC","CERTIFICATION","REMEDIATION","DELEGATION","APPROVAL","VIOLATIONREVIEW","FORM","POLICYVIOLATION","CHALLENGE","IMPACTANALYSIS","SIGNOFF","EVENT","MANUALACTION","TEST"]},"remediationItems":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the certification","example":"2c9180835d2e5168015d32f890ca1581"},"targetId":{"type":"string","description":"The ID of the certification target","example":"2c9180835d2e5168015d32f890ca1581"},"targetName":{"type":"string","description":"The name of the certification target","example":"john.smith"},"targetDisplayName":{"type":"string","description":"The display name of the certification target","example":"emailAddress"},"applicationName":{"type":"string","description":"The name of the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute being certified","example":"phoneNumber"},"attributeOperation":{"type":"string","description":"The operation of the certification on the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute being certified","example":"512-555-1212"},"nativeIdentity":{"type":"string","description":"The native identity of the target","example":"jason.smith2"}}},"approvalItems":{"type":"object","properties":{"id":{"type":"string","description":"ID of the approval item","example":"2c9180835d2e5168015d32f890ca1581"},"account":{"type":"string","description":"The account referenced by the approval item","example":"john.smith"},"application":{"type":"string","description":"The name the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute","example":"emailAddress"},"attributeOperation":{"type":"string","description":"The operation of the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute","example":"a@b.com"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]}}},"name":{"type":"string","description":"The work item name","example":"Account Create"},"completed":{"type":"string","format":"date-time","example":"2018-10-19T13:49:37.385Z"},"numItems":{"type":"integer","description":"The number of items in the work item","example":19},"errors":{"type":"array","items":{"type":"string"},"example":["The work item ID that was specified was not found."]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"method":"post","path":"/work-items/bulk-reject/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Bulk reject Approval Items","description":{"content":"This API bulk rejects Approval Items. Either an admin, or the owning/current user must make this request.","type":"text/plain"},"url":{"path":["work-items","bulk-reject",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the work item","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Bulk reject Approval Items + + + +This API bulk rejects Approval Items. Either an admin, or the owning/current user must make this request. + +
    Path Parameters
    + +A work items details object. + +
    Schema
      remediationItems object
      approvalItems object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/bulk-update-provisioning-policies.api.mdx b/docs/sailpoint-api-beta/bulk-update-provisioning-policies.api.mdx new file mode 100644 index 000000000..e3947d72b --- /dev/null +++ b/docs/sailpoint-api-beta/bulk-update-provisioning-policies.api.mdx @@ -0,0 +1,88 @@ +--- +id: bulk-update-provisioning-policies +sidebar_label: Bulk Update Provisioning Policies +hide_title: true +hide_table_of_contents: true +api: {"operationId":"bulkUpdateProvisioningPolicies","tags":["Sources"],"description":"This end-point updates a list of provisioning policies on the specified source in IdentityNow.\nA token with API, or ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:provisioning-policy-bulk:update"]}],"parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source id.","example":"2c9180835d191a86015d28455b4a2329"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"usageType":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"userName"},"transform":{"type":"object","description":"The transform to apply to the field","example":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"default":{}},"attributes":{"type":"object","description":"Attributes required for the transform","example":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"}},"type":{"type":"string","description":"The type of the attribute.","example":"string"},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","default":false,"example":false}}}}}}}}}},"responses":{"200":{"description":"A list of the ProvisioningPolicyDto was successfully replaced.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"usageType":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"userName"},"transform":{"type":"object","description":"The transform to apply to the field","example":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"default":{}},"attributes":{"type":"object","description":"Attributes required for the transform","example":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"}},"isRequired":{"type":"boolean","readOnly":true,"description":"Flag indicating whether or not the attribute is required.","default":false,"example":false},"type":{"type":"string","description":"The type of the attribute.","example":"string"},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","default":false,"example":false}}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/sources/{sourceId}/provisioning-policies/bulk-update","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"name":"string","description":"string","usageType":"CREATE","fields":[{"name":"userName","transform":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"attributes":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"},"type":"string","isMultiValued":false}]}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Bulk Update Provisioning Policies","description":{"content":"This end-point updates a list of provisioning policies on the specified source in IdentityNow.\nA token with API, or ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":sourceId","provisioning-policies","bulk-update"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id.","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Bulk Update Provisioning Policies + + + +This end-point updates a list of provisioning policies on the specified source in IdentityNow. +A token with API, or ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    Request Body array required
      fields object[]
    + +A list of the ProvisioningPolicyDto was successfully replaced. + +
    Schema array
      fields object[]
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/cancel-access-request.api.mdx b/docs/sailpoint-api-beta/cancel-access-request.api.mdx new file mode 100644 index 000000000..f9886f119 --- /dev/null +++ b/docs/sailpoint-api-beta/cancel-access-request.api.mdx @@ -0,0 +1,88 @@ +--- +id: cancel-access-request +sidebar_label: Cancel Access Request +hide_title: true +hide_table_of_contents: true +api: {"operationId":"cancelAccessRequest","tags":["Access Requests"],"description":"This API endpoint cancels a pending access request. An access request can be cancelled only if it has not passed the approval step.\nAny token with ORG_ADMIN authority or token of the user who originally requested the access request is required to cancel it.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body payload for cancel access request endpoint.","required":["accountActivityId","comment"],"properties":{"accountActivityId":{"type":"string","description":"ID of the account activity object corresponding to the access request.","example":"2c9180835d2e5168015d32f890ca1581"},"comment":{"type":"string","description":"Reason for cancelling the pending access request.","example":"I requested this role by mistake."}}},"example":{"accountActivityId":"2c91808568c529c60168cca6f90c1313","comment":"I requested this role by mistake."}}}},"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/access-requests/cancel","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"accountActivityId":"2c9180835d2e5168015d32f890ca1581","comment":"I requested this role by mistake."},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Cancel Access Request","description":{"content":"This API endpoint cancels a pending access request. An access request can be cancelled only if it has not passed the approval step.\nAny token with ORG_ADMIN authority or token of the user who originally requested the access request is required to cancel it.","type":"text/plain"},"url":{"path":["access-requests","cancel"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Cancel Access Request + + + +This API endpoint cancels a pending access request. An access request can be cancelled only if it has not passed the approval step. +Any token with ORG_ADMIN authority or token of the user who originally requested the access request is required to cancel it. + +
    Request Body required
    + +Accepted - Returned if the request was successfully accepted into the system. + +
    Schema
    • object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/cancel-workflow-execution.api.mdx b/docs/sailpoint-api-beta/cancel-workflow-execution.api.mdx new file mode 100644 index 000000000..a90019f7b --- /dev/null +++ b/docs/sailpoint-api-beta/cancel-workflow-execution.api.mdx @@ -0,0 +1,87 @@ +--- +id: cancel-workflow-execution +sidebar_label: Cancel Workflow Execution by ID +hide_title: true +hide_table_of_contents: true +api: {"operationId":"cancelWorkflowExecution","tags":["Workflows"],"description":"Use this API to cancel a running workflow execution.","security":[{"bearerAuth":["sp:workflow:execute"]}],"parameters":[{"name":"id","in":"path","description":"The workflow execution ID","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"c17bea3a-574d-453c-9e04-4365fbf5af0b"}}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/workflow-executions/{id}/cancel","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Cancel Workflow Execution by ID","description":{"content":"Use this API to cancel a running workflow execution.","type":"text/plain"},"url":{"path":["workflow-executions",":id","cancel"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The workflow execution ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Cancel Workflow Execution by ID + + + +Use this API to cancel a running workflow execution. + +
    Path Parameters
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/certification-campaigns.tag.mdx b/docs/sailpoint-api-beta/certification-campaigns.tag.mdx new file mode 100644 index 000000000..87e70c4ef --- /dev/null +++ b/docs/sailpoint-api-beta/certification-campaigns.tag.mdx @@ -0,0 +1,15 @@ +--- +id: certification-campaigns +title: Certification Campaigns +description: Certification Campaigns +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/certifications.tag.mdx b/docs/sailpoint-api-beta/certifications.tag.mdx new file mode 100644 index 000000000..f69195d90 --- /dev/null +++ b/docs/sailpoint-api-beta/certifications.tag.mdx @@ -0,0 +1,15 @@ +--- +id: certifications +title: Certifications +description: Certifications +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/check-connection.api.mdx b/docs/sailpoint-api-beta/check-connection.api.mdx new file mode 100644 index 000000000..933053c7e --- /dev/null +++ b/docs/sailpoint-api-beta/check-connection.api.mdx @@ -0,0 +1,76 @@ +--- +id: check-connection +sidebar_label: Check connection for the source connector. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"checkConnection","tags":["Sources"],"description":"This endpoint validates that the configured credentials are valid and will properly authenticate with the source identified by the sourceId path parameter.\nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:source-connector:write"]}],"parameters":[{"in":"path","name":"sourceId","schema":{"type":"string"},"required":true,"description":"The ID of the Source.","example":"cef3ee201db947c5912551015ba0c679"}],"responses":{"200":{"description":"The result of checking connection to the source connector with response from it.","content":{"application/json":{"schema":{"type":"object","title":"Status Response","description":"Response model for connection check, configuration test and ping of source connectors.","properties":{"id":{"type":"string","description":"ID of the source","example":"2c91808568c529c60168cca6f90c1313","readOnly":true},"name":{"type":"string","description":"Name of the source","example":"ODS-AD-Test [source-999999]","readOnly":true},"status":{"type":"string","enum":["SUCCESS","FAILURE"],"description":"The status of the health check.","example":"SUCCESS","readOnly":true},"elapsedMillis":{"type":"integer","description":"The number of milliseconds spent on the entire request.","example":1000,"readOnly":true},"details":{"type":"object","description":"The document contains the results of the health check.\nThe schema of this document depends on the type of source used.\n","readOnly":true,"example":{"useTLSForIQService":false,"IQService":{"TLS Port":0,".NET CLR Version":"4.0.30319.42000","SecondaryServiceStatus":"Running","Port":5050,"Host":"AUTOMATION-AD","Name":"IQService","IQServiceStatus":"Running","SecondaryService":"IQService-Instance1-Secondary","Version":"IQService Sep-2020","secondaryPort":5051,"OS Architecture":"AMD64","Operating System":"Microsoft Windows Server 2012 R2 Standard","highestDotNetVersion":"4.8 or later","Build Time":"09/22/2020 06:34 AM -0500"},"IQServiceClientAuthEnabled":false,"requestProcessedOn":"1/19/2021 1:47:14 PM"}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/sources/{sourceId}/connector/check-connection","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Check connection for the source connector.","description":{"content":"This endpoint validates that the configured credentials are valid and will properly authenticate with the source identified by the sourceId path parameter.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":sourceId","connector","check-connection"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the Source.","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Check connection for the source connector. + + + +This endpoint validates that the configured credentials are valid and will properly authenticate with the source identified by the sourceId path parameter. +A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    + +The result of checking connection to the source connector with response from it. + +
    Schema
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/common-access-bulk-update-status.api.mdx b/docs/sailpoint-api-beta/common-access-bulk-update-status.api.mdx new file mode 100644 index 000000000..9760cf3a7 --- /dev/null +++ b/docs/sailpoint-api-beta/common-access-bulk-update-status.api.mdx @@ -0,0 +1,79 @@ +--- +id: common-access-bulk-update-status +sidebar_label: Bulk update common access status +hide_title: true +hide_table_of_contents: true +api: {"operationId":"commonAccessBulkUpdateStatus","tags":["IAI Common Access"],"description":"This submits an update request to the common access application. At this time there are no parameters. Requires authorization scope of iai:access-modeling:update","requestBody":{"description":"Confirm or deny in bulk the common access ids that are (or aren't) common access","required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"confirmedIds":{"description":"List of confirmed common access ids.","type":"array","items":{"type":"string","format":"uuid"}},"deniedIds":{"description":"List of denied common access ids.","type":"array","items":{"type":"string","format":"uuid"}}}}}}}},"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/common-access/update-status","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"confirmedIds":["3fa85f64-5717-4562-b3fc-2c963f66afa6"],"deniedIds":["3fa85f64-5717-4562-b3fc-2c963f66afa6"]}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Bulk update common access status","description":{"content":"This submits an update request to the common access application. At this time there are no parameters. Requires authorization scope of iai:access-modeling:update","type":"text/plain"},"url":{"path":["common-access","update-status"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Bulk update common access status + + + +This submits an update request to the common access application. At this time there are no parameters. Requires authorization scope of iai:access-modeling:update + +
    Request Body array required
    + +Confirm or deny in bulk the common access ids that are (or aren't) common access + +
    + +Accepted - Returned if the request was successfully accepted into the system. + +
    Schema
    • object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/compare-identity-snapshots-access-type.api.mdx b/docs/sailpoint-api-beta/compare-identity-snapshots-access-type.api.mdx new file mode 100644 index 000000000..05bc6f10c --- /dev/null +++ b/docs/sailpoint-api-beta/compare-identity-snapshots-access-type.api.mdx @@ -0,0 +1,83 @@ +--- +id: compare-identity-snapshots-access-type +sidebar_label: Gets a list of differences of specific accessType for the given identity between 2 snapshots +hide_title: true +hide_table_of_contents: true +api: {"operationId":"compareIdentitySnapshotsAccessType","tags":["Identity History"],"description":"This method gets a list of differences of specific accessType for the given identity between 2 snapshots Requires authorization scope of 'idn:identity-history:read' ","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The identity id","example":"8c190e6787aa4ed9a90bd9d5344523fb"},{"in":"path","name":"accessType","schema":{"type":"string"},"required":true,"description":"The specific type which needs to be compared","example":"role"},{"in":"query","name":"access-associated","schema":{"type":"boolean"},"description":"Indicates if added or removed access needs to be returned. true - added, false - removed, null - both added & removed","example":"2007-03-01T13:00:00Z"},{"in":"query","name":"snapshot1","schema":{"type":"string"},"description":"The snapshot 1 of identity","example":"2008-03-01T13:00:00Z"},{"in":"query","name":"snapshot2","schema":{"type":"string"},"description":"The snapshot 2 of identity","example":"2009-03-01T13:00:00Z"},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"A list of events for the identity","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"the id of the access item"},"eventType":{"type":"string","enum":["ADD","REMOVE"]},"displayName":{"type":"string","description":"the display name of the access item"},"sourceName":{"type":"string","description":"the source name of the access item"}},"example":{"id":"2c91808c7726345b017726a0a2fb013b","eventType":"ADD","displayName":"Test","sourceName":"Source"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/historical-identities/{id}/compare/{access-type}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Gets a list of differences of specific accessType for the given identity between 2 snapshots","description":{"content":"This method gets a list of differences of specific accessType for the given identity between 2 snapshots Requires authorization scope of 'idn:identity-history:read' ","type":"text/plain"},"url":{"path":["historical-identities",":id","compare",":access-type"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Indicates if added or removed access needs to be returned. true - added, false - removed, null - both added & removed","type":"text/plain"},"key":"access-associated","value":""},{"disabled":false,"description":{"content":"The snapshot 1 of identity","type":"text/plain"},"key":"snapshot1","value":""},{"disabled":false,"description":{"content":"The snapshot 2 of identity","type":"text/plain"},"key":"snapshot2","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The identity id","type":"text/plain"},"type":"any","value":"","key":"id"},{"disabled":false,"description":{"content":"(Required) The specific type which needs to be compared","type":"text/plain"},"type":"any","value":"","key":"accessType"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Gets a list of differences of specific accessType for the given identity between 2 snapshots + + + +This method gets a list of differences of specific accessType for the given identity between 2 snapshots Requires authorization scope of 'idn:identity-history:read' + +
    Path Parameters
    Query Parameters
    + +A list of events for the identity + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/compare-identity-snapshots.api.mdx b/docs/sailpoint-api-beta/compare-identity-snapshots.api.mdx new file mode 100644 index 000000000..238317192 --- /dev/null +++ b/docs/sailpoint-api-beta/compare-identity-snapshots.api.mdx @@ -0,0 +1,87 @@ +--- +id: compare-identity-snapshots +sidebar_label: Gets a difference of count for each access item types for the given identity between 2 snapshots +hide_title: true +hide_table_of_contents: true +api: {"operationId":"compareIdentitySnapshots","tags":["Identity History"],"description":"This method gets a difference of count for each access item types for the given identity between 2 snapshots Requires authorization scope of 'idn:identity-history:read' ","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The identity id","example":"8c190e6787aa4ed9a90bd9d5344523fb"},{"in":"query","name":"snapshot1","schema":{"type":"string"},"description":"The snapshot 1 of identity","example":"2007-03-01T13:00:00Z"},{"in":"query","name":"snapshot2","schema":{"type":"string"},"description":"The snapshot 2 of identity","example":"2008-03-01T13:00:00Z"},{"in":"query","name":"accessItemTypes","schema":{"type":"array","items":{"type":"string"}},"description":"An optional list of access item types (app, account, entitlement, etc...) to return. If null or empty, all access items types are returned "},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"A IdentityCompare object with difference details for each access item type","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"accessItemDiff":{"type":"object","description":"Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on completion of the violation check.","additionalProperties":{"type":"object"}}},"example":{"accessItemDiff":{"role":{"accessAdded":2,"accessRemoved":3},"entitlement":{"accessAdded":4,"accessRemoved":0},"accessProfile":{"accessAdded":0,"accessRemoved":1}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/historical-identities/{id}/compare","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Gets a difference of count for each access item types for the given identity between 2 snapshots","description":{"content":"This method gets a difference of count for each access item types for the given identity between 2 snapshots Requires authorization scope of 'idn:identity-history:read' ","type":"text/plain"},"url":{"path":["historical-identities",":id","compare"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The snapshot 1 of identity","type":"text/plain"},"key":"snapshot1","value":""},{"disabled":false,"description":{"content":"The snapshot 2 of identity","type":"text/plain"},"key":"snapshot2","value":""},{"disabled":false,"description":{"content":"An optional list of access item types (app, account, entitlement, etc...) to return. If null or empty, all access items types are returned ","type":"text/plain"},"key":"accessItemTypes","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The identity id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Gets a difference of count for each access item types for the given identity between 2 snapshots + + + +This method gets a difference of count for each access item types for the given identity between 2 snapshots Requires authorization scope of 'idn:identity-history:read' + +
    Path Parameters
    Query Parameters
    + +A IdentityCompare object with difference details for each access item type + +
    Schema array
      accessItemDiff object
      + +Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on completion of the violation check. + +
    • property name* object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/complete-campaign.api.mdx b/docs/sailpoint-api-beta/complete-campaign.api.mdx new file mode 100644 index 000000000..a1950f0a5 --- /dev/null +++ b/docs/sailpoint-api-beta/complete-campaign.api.mdx @@ -0,0 +1,92 @@ +--- +id: complete-campaign +sidebar_label: Complete a Campaign +hide_title: true +hide_table_of_contents: true +api: {"operationId":"completeCampaign","tags":["Certification Campaigns"],"description":"Completes a certification campaign only if it is past the due date. This is provided to admins so that they can complete a certification even if all items have not been completed.\nRequires roles of CERT_ADMIN and ORG_ADMIN","requestBody":{"description":"Optional. Default behavior is for the campaign to auto-approve upon completion, unless autoCompleteAction=REVOKE","required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"autoCompleteAction":{"description":"Determines whether to auto-approve(APPROVE) or auto-revoke(REVOKE) upon campaign completion.","type":"string","enum":["APPROVE","REVOKE"],"default":"APPROVE","example":"REVOKE"}}}}}},"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The campaign id","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/campaigns/{id}/complete","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"autoCompleteAction":"REVOKE"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Complete a Campaign","description":{"content":"Completes a certification campaign only if it is past the due date. This is provided to admins so that they can complete a certification even if all items have not been completed.\nRequires roles of CERT_ADMIN and ORG_ADMIN","type":"text/plain"},"url":{"path":["campaigns",":id","complete"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The campaign id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Complete a Campaign + + + +Completes a certification campaign only if it is past the due date. This is provided to admins so that they can complete a certification even if all items have not been completed. +Requires roles of CERT_ADMIN and ORG_ADMIN + +
    Path Parameters
    Request Body
    + +Optional. Default behavior is for the campaign to auto-approve upon completion, unless autoCompleteAction=REVOKE + +
    + +Accepted - Returned if the request was successfully accepted into the system. + +
    Schema
    • object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/complete-invocation.api.mdx b/docs/sailpoint-api-beta/complete-invocation.api.mdx new file mode 100644 index 000000000..24e63a17c --- /dev/null +++ b/docs/sailpoint-api-beta/complete-invocation.api.mdx @@ -0,0 +1,75 @@ +--- +id: complete-invocation +sidebar_label: Complete Trigger Invocation +hide_title: true +hide_table_of_contents: true +api: {"operationId":"completeInvocation","tags":["Triggers"],"description":"Completes an invocation to a REQUEST_RESPONSE type trigger.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the invocation to complete.","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"secret":{"type":"string","description":"Unique invocation secret that was generated when the invocation was created. Required to authenticate to the endpoint.","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"error":{"type":"string","description":"The error message to indicate a failed invocation or error if any.","example":"Access request is denied."},"output":{"type":"object","example":{"approved":false},"description":"Trigger output to complete the invocation. Its schema is defined in the trigger definition."}},"required":["secret","output"]},"example":{"secret":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","output":{"approved":false}}}}},"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/trigger-invocations/{id}/complete","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"secret":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","error":"Access request is denied.","output":{"approved":false}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Complete Trigger Invocation","description":{"content":"Completes an invocation to a REQUEST_RESPONSE type trigger.","type":"text/plain"},"url":{"path":["trigger-invocations",":id","complete"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the invocation to complete.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Complete Trigger Invocation + + + +Completes an invocation to a REQUEST_RESPONSE type trigger. + +
    Path Parameters
    Request Body required
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/complete-work-item.api.mdx b/docs/sailpoint-api-beta/complete-work-item.api.mdx new file mode 100644 index 000000000..c0e75a4b4 --- /dev/null +++ b/docs/sailpoint-api-beta/complete-work-item.api.mdx @@ -0,0 +1,67 @@ +--- +id: complete-work-item +sidebar_label: Complete a Work Item +hide_title: true +hide_table_of_contents: true +api: {"operationId":"completeWorkItem","tags":["Work Items"],"description":"This API completes a work item. Either an admin, or the owning/current user must make this request.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the work item","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"A WorkItems object","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the work item","example":"2c9180835d2e5168015d32f890ca1581"},"requesterId":{"type":"string","description":"ID of the requester","example":"2c9180835d2e5168015d32f890ca1581"},"requesterDisplayName":{"type":"string","description":"The displayname of the requester","example":"John Smith"},"ownerId":{"type":"string","description":"The ID of the owner","example":"2c9180835d2e5168015d32f890ca1581"},"ownerName":{"type":"string","description":"The name of the owner","example":"Jason Smith"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"description":{"type":"string","description":"The description of the work item","example":"Create account on source 'AD'"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"type":{"type":"string","enum":["UNKNOWN","GENERIC","CERTIFICATION","REMEDIATION","DELEGATION","APPROVAL","VIOLATIONREVIEW","FORM","POLICYVIOLATION","CHALLENGE","IMPACTANALYSIS","SIGNOFF","EVENT","MANUALACTION","TEST"]},"remediationItems":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the certification","example":"2c9180835d2e5168015d32f890ca1581"},"targetId":{"type":"string","description":"The ID of the certification target","example":"2c9180835d2e5168015d32f890ca1581"},"targetName":{"type":"string","description":"The name of the certification target","example":"john.smith"},"targetDisplayName":{"type":"string","description":"The display name of the certification target","example":"emailAddress"},"applicationName":{"type":"string","description":"The name of the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute being certified","example":"phoneNumber"},"attributeOperation":{"type":"string","description":"The operation of the certification on the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute being certified","example":"512-555-1212"},"nativeIdentity":{"type":"string","description":"The native identity of the target","example":"jason.smith2"}}},"approvalItems":{"type":"object","properties":{"id":{"type":"string","description":"ID of the approval item","example":"2c9180835d2e5168015d32f890ca1581"},"account":{"type":"string","description":"The account referenced by the approval item","example":"john.smith"},"application":{"type":"string","description":"The name the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute","example":"emailAddress"},"attributeOperation":{"type":"string","description":"The operation of the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute","example":"a@b.com"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]}}},"name":{"type":"string","description":"The work item name","example":"Account Create"},"completed":{"type":"string","format":"date-time","example":"2018-10-19T13:49:37.385Z"},"numItems":{"type":"integer","description":"The number of items in the work item","example":19},"errors":{"type":"array","items":{"type":"string"},"example":["The work item ID that was specified was not found."]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"method":"post","path":"/work-items/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Complete a Work Item","description":{"content":"This API completes a work item. Either an admin, or the owning/current user must make this request.","type":"text/plain"},"url":{"path":["work-items",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the work item","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Complete a Work Item + + + +This API completes a work item. Either an admin, or the owning/current user must make this request. + +
    Path Parameters
    + +A WorkItems object + +
    Schema
      remediationItems object
      approvalItems object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/completed-work-items.api.mdx b/docs/sailpoint-api-beta/completed-work-items.api.mdx new file mode 100644 index 000000000..a4710973c --- /dev/null +++ b/docs/sailpoint-api-beta/completed-work-items.api.mdx @@ -0,0 +1,67 @@ +--- +id: completed-work-items +sidebar_label: Completed Work Items +hide_title: true +hide_table_of_contents: true +api: {"operationId":"completedWorkItems","tags":["Work Items"],"description":"This gets a collection of completed work items belonging to either the specified user(admin required), or the current user.","parameters":[{"in":"query","name":"ownerId","schema":{"type":"string"},"description":"The id of the owner of the work item list being requested. Either an admin, or the owning/current user must make this request.","required":false},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"List of completed work items.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the work item","example":"2c9180835d2e5168015d32f890ca1581"},"requesterId":{"type":"string","description":"ID of the requester","example":"2c9180835d2e5168015d32f890ca1581"},"requesterDisplayName":{"type":"string","description":"The displayname of the requester","example":"John Smith"},"ownerId":{"type":"string","description":"The ID of the owner","example":"2c9180835d2e5168015d32f890ca1581"},"ownerName":{"type":"string","description":"The name of the owner","example":"Jason Smith"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"description":{"type":"string","description":"The description of the work item","example":"Create account on source 'AD'"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"type":{"type":"string","enum":["UNKNOWN","GENERIC","CERTIFICATION","REMEDIATION","DELEGATION","APPROVAL","VIOLATIONREVIEW","FORM","POLICYVIOLATION","CHALLENGE","IMPACTANALYSIS","SIGNOFF","EVENT","MANUALACTION","TEST"]},"remediationItems":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the certification","example":"2c9180835d2e5168015d32f890ca1581"},"targetId":{"type":"string","description":"The ID of the certification target","example":"2c9180835d2e5168015d32f890ca1581"},"targetName":{"type":"string","description":"The name of the certification target","example":"john.smith"},"targetDisplayName":{"type":"string","description":"The display name of the certification target","example":"emailAddress"},"applicationName":{"type":"string","description":"The name of the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute being certified","example":"phoneNumber"},"attributeOperation":{"type":"string","description":"The operation of the certification on the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute being certified","example":"512-555-1212"},"nativeIdentity":{"type":"string","description":"The native identity of the target","example":"jason.smith2"}}},"approvalItems":{"type":"object","properties":{"id":{"type":"string","description":"ID of the approval item","example":"2c9180835d2e5168015d32f890ca1581"},"account":{"type":"string","description":"The account referenced by the approval item","example":"john.smith"},"application":{"type":"string","description":"The name the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute","example":"emailAddress"},"attributeOperation":{"type":"string","description":"The operation of the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute","example":"a@b.com"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]}}},"name":{"type":"string","description":"The work item name","example":"Account Create"},"completed":{"type":"string","format":"date-time","example":"2018-10-19T13:49:37.385Z"},"numItems":{"type":"integer","description":"The number of items in the work item","example":19},"errors":{"type":"array","items":{"type":"string"},"example":["The work item ID that was specified was not found."]}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"method":"get","path":"/work-items/completed","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Completed Work Items","description":{"content":"This gets a collection of completed work items belonging to either the specified user(admin required), or the current user.","type":"text/plain"},"url":{"path":["work-items","completed"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The id of the owner of the work item list being requested. Either an admin, or the owning/current user must make this request.","type":"text/plain"},"key":"ownerId","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Completed Work Items + + + +This gets a collection of completed work items belonging to either the specified user(admin required), or the current user. + +
    Query Parameters
    + +List of completed work items. + +
    Schema array
      remediationItems object
      approvalItems object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/connector-rule-management.tag.mdx b/docs/sailpoint-api-beta/connector-rule-management.tag.mdx new file mode 100644 index 000000000..0b87d66d0 --- /dev/null +++ b/docs/sailpoint-api-beta/connector-rule-management.tag.mdx @@ -0,0 +1,15 @@ +--- +id: connector-rule-management +title: Connector Rule Management +description: Connector Rule Management +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/connectors.tag.mdx b/docs/sailpoint-api-beta/connectors.tag.mdx new file mode 100644 index 000000000..de7cc523f --- /dev/null +++ b/docs/sailpoint-api-beta/connectors.tag.mdx @@ -0,0 +1,15 @@ +--- +id: connectors +title: Connectors +description: Connectors +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/count-completed-work-items.api.mdx b/docs/sailpoint-api-beta/count-completed-work-items.api.mdx new file mode 100644 index 000000000..97d44b208 --- /dev/null +++ b/docs/sailpoint-api-beta/count-completed-work-items.api.mdx @@ -0,0 +1,67 @@ +--- +id: count-completed-work-items +sidebar_label: Count Completed Work Items +hide_title: true +hide_table_of_contents: true +api: {"operationId":"countCompletedWorkItems","tags":["Work Items"],"description":"This gets a count of completed work items belonging to either the specified user(admin required), or the current user.","parameters":[{"in":"query","name":"ownerId","schema":{"type":"string"},"description":"ID of the work item owner.","required":false}],"responses":{"200":{"description":"List of work items","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","description":"The count of work items","example":29}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"method":"get","path":"/work-items/count/completed","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Count Completed Work Items","description":{"content":"This gets a count of completed work items belonging to either the specified user(admin required), or the current user.","type":"text/plain"},"url":{"path":["work-items","count","completed"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"ID of the work item owner.","type":"text/plain"},"key":"ownerId","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Count Completed Work Items + + + +This gets a count of completed work items belonging to either the specified user(admin required), or the current user. + +
    Query Parameters
    + +List of work items + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/count-work-items.api.mdx b/docs/sailpoint-api-beta/count-work-items.api.mdx new file mode 100644 index 000000000..1d84398b3 --- /dev/null +++ b/docs/sailpoint-api-beta/count-work-items.api.mdx @@ -0,0 +1,67 @@ +--- +id: count-work-items +sidebar_label: Count Work Items +hide_title: true +hide_table_of_contents: true +api: {"operationId":"countWorkItems","tags":["Work Items"],"description":"This gets a count of work items belonging to either the specified user(admin required), or the current user.","parameters":[{"in":"query","name":"ownerId","schema":{"type":"string"},"description":"ID of the work item owner.","required":false}],"responses":{"200":{"description":"List of work items","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","description":"The count of work items","example":29}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"method":"get","path":"/work-items/count","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Count Work Items","description":{"content":"This gets a count of work items belonging to either the specified user(admin required), or the current user.","type":"text/plain"},"url":{"path":["work-items","count"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"ID of the work item owner.","type":"text/plain"},"key":"ownerId","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Count Work Items + + + +This gets a count of work items belonging to either the specified user(admin required), or the current user. + +
    Query Parameters
    + +List of work items + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-access-profile.api.mdx b/docs/sailpoint-api-beta/create-access-profile.api.mdx new file mode 100644 index 000000000..4ca35ee01 --- /dev/null +++ b/docs/sailpoint-api-beta/create-access-profile.api.mdx @@ -0,0 +1,149 @@ +--- +id: create-access-profile +sidebar_label: Create an Access Profile +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createAccessProfile","tags":["Access Profiles"],"description":"This API creates an Access Profile.\n\nA token with API, ORG_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. In addition, a token with only ROLE_SUBADMIN or SOURCE_SUBADMIN authority must be associated with the Access Profile's Source.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the Access Profile","example":"2c91808a7190d06e01719938fcd20792","readOnly":true},"name":{"type":"string","description":"Name of the Access Profile","example":"Employee-database-read-write"},"description":{"type":"string","description":"Information about the Access Profile","example":"Collection of entitlements to read/write the employee database"},"created":{"type":"string","description":"Date the Access Profile was created","format":"date-time","example":"2021-03-01T22:32:58.104Z","readOnly":true},"modified":{"type":"string","description":"Date the Access Profile was last modified.","format":"date-time","example":"2021-03-02T20:22:28.104Z","readOnly":true},"enabled":{"type":"boolean","description":"Whether the Access Profile is enabled. If the Access Profile is enabled then you must include at least one Entitlement.","example":true},"owner":{"description":"Owner of the Access Profile","type":"object","properties":{"type":{"description":"Owner type. This field must be either left null or set to 'IDENTITY' on input, otherwise a 400 Bad Request error will result.","example":"IDENTITY","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"]},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of the owner. It may be left null or omitted in a POST or PATCH. If set, it must match the current value of the owner's display name, otherwise a 400 Bad Request error will result.","example":"support"}}},"source":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the Source with with which the Access Profile is associated","example":"2c91809773dee3610173fdb0b6061ef4"},"type":{"type":"string","enum":["SOURCE"],"description":"The type of the Source, will always be SOURCE","example":"SOURCE"},"name":{"type":"string","description":"The display name of the associated Source","example":"ODS-AD-SOURCE"}}},"entitlements":{"type":"array","description":"A list of entitlements associated with the Access Profile. If enabled is false this is allowed to be empty otherwise it needs to contain at least one Entitlement.","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the Entitlement","example":"2c91809773dee32014e13e122092014e"},"type":{"type":"string","enum":["ENTITLEMENT"],"description":"The type of the Entitlement, will always be ENTITLEMENT","example":"ENTITLEMENT"},"name":{"type":"string","description":"The display name of the Entitlement","example":"CN=entitlement.490efde5,OU=OrgCo,OU=ServiceDept,DC=HQAD,DC=local"}}}},"requestable":{"type":"boolean","description":"Whether the Access Profile is requestable via access request. Currently, making an Access Profile non-requestable is only supported for customers enabled with the new Request Center. Otherwise, attempting to create an Access Profile with a value **false** in this field results in a 400 error.","example":true},"accessRequestConfig":{"description":"Access request configuration for this object","type":"object","properties":{"commentsRequired":{"type":"boolean","description":"Whether the requester of the containing object must provide comments justifying the request","example":true},"denialCommentsRequired":{"type":"boolean","description":"Whether an approver must provide comments when denying the request","example":true},"approvalSchemes":{"type":"array","description":"List describing the steps in approving the request","items":{"type":"object","properties":{"approverType":{"type":"string","enum":["OWNER","SOURCE_OWNER","MANAGER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step. Values are as follows.\n\n**OWNER**: Owner of the associated Access Profile or Role\n\n**SOURCE_OWNER**: Owner of the Source associated with an Access Profile\n\n**MANAGER**: Manager of the Identity making the request\n\n**GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field","example":"GOVERNANCE_GROUP"},"approverId":{"type":"string","description":"Id of the specific approver, used only when approverType is GOVERNANCE_GROUP","example":"46c79819-a69f-49a2-becb-12c971ae66c6"}}}}}},"revocationRequestConfig":{"description":"Revocation request configuration for this object.","type":"object","properties":{"approvalSchemes":{"type":"array","description":"List describing the steps in approving the revocation request","items":{"type":"object","properties":{"approverType":{"type":"string","enum":["OWNER","SOURCE_OWNER","MANAGER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step. Values are as follows.\n\n**OWNER**: Owner of the associated Access Profile or Role\n\n**SOURCE_OWNER**: Owner of the Source associated with an Access Profile\n\n**MANAGER**: Manager of the Identity making the request\n\n**GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field","example":"GOVERNANCE_GROUP"},"approverId":{"type":"string","description":"Id of the specific approver, used only when approverType is GOVERNANCE_GROUP","example":"46c79819-a69f-49a2-becb-12c971ae66c6"}}}}}},"segments":{"type":"array","items":{"type":"string"},"description":"List of IDs of segments, if any, to which this Access Profile is assigned.","example":["f7b1b8a3-5fed-4fd4-ad29-82014e137e19","29cb6c06-1da8-43ea-8be4-b3125f248f2a"]},"provisioningCriteria":{"description":"When an Identity has multiple Accounts on the Source with which an Access Profile is associated, this expression is evaluated against those Accounts to choose one to provision with the Access Profile.","nullable":true,"example":{"operation":"OR","children":[{"operation":"AND","children":[{"attribute":"dn","operation":"CONTAINS","value":"useast"},{"attribute":"manager","operation":"CONTAINS","value":"Scott.Clark"}]},{"operation":"AND","children":[{"attribute":"dn","operation":"EQUALS","value":"Gibson"},{"attribute":"telephoneNumber","operation":"CONTAINS","value":"512"}]}]},"type":"object","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","HAS","AND","OR"],"description":"Supported operations on ProvisioningCriteria","example":"EQUALS"},"attribute":{"type":"string","description":"Name of the Account attribute to be tested. If **operation** is one of EQUALS, NOT_EQUALS, CONTAINS, or HAS, this field is required. Otherwise, specifying it is an error.","example":"email","nullable":true},"value":{"type":"string","description":"String value to test the Account attribute w/r/t the specified operation. If the operation is one of EQUALS, NOT_EQUALS, or CONTAINS, this field is required. Otherwise, specifying it is an error. If the Attribute is not String-typed, it will be converted to the appropriate type.","example":"carlee.cert1c9f9b6fd@mailinator.com"},"children":{"type":"array","items":{"type":"object","description":"Defines matching criteria for an Account to be provisioned with a specific Access Profile","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","HAS","AND","OR"],"description":"Supported operations on ProvisioningCriteria","example":"EQUALS"},"attribute":{"type":"string","description":"Name of the Account attribute to be tested. If **operation** is one of EQUALS, NOT_EQUALS, CONTAINS, or HAS, this field is required. Otherwise, specifying it is an error.","example":"email","nullable":true},"value":{"type":"string","description":"String value to test the Account attribute w/r/t the specified operation. If the operation is one of EQUALS, NOT_EQUALS, or CONTAINS, this field is required. Otherwise, specifying it is an error. If the Attribute is not String-typed, it will be converted to the appropriate type.","example":"carlee.cert1c9f9b6fd@mailinator.com"},"children":{"type":"array","items":{"type":"object","description":"Defines matching criteria for an Account to be provisioned with a specific Access Profile","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","HAS","AND","OR"],"description":"Supported operations on ProvisioningCriteria","example":"EQUALS"},"attribute":{"type":"string","description":"Name of the Account attribute to be tested. If **operation** is one of EQUALS, NOT_EQUALS, CONTAINS, or HAS, this field is required. Otherwise, specifying it is an error.","example":"email","nullable":true},"value":{"type":"string","description":"String value to test the Account attribute w/r/t the specified operation. If the operation is one of EQUALS, NOT_EQUALS, or CONTAINS, this field is required. Otherwise, specifying it is an error. If the Attribute is not String-typed, it will be converted to the appropriate type.","example":"carlee.cert1c9f9b6fd@mailinator.com"}}},"nullable":true,"description":"Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes.","example":null}}},"nullable":true,"description":"Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes.","example":null}}}},"required":["owner","name","source"]}}}},"responses":{"201":{"description":"Access Profile created","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the Access Profile","example":"2c91808a7190d06e01719938fcd20792","readOnly":true},"name":{"type":"string","description":"Name of the Access Profile","example":"Employee-database-read-write"},"description":{"type":"string","description":"Information about the Access Profile","example":"Collection of entitlements to read/write the employee database"},"created":{"type":"string","description":"Date the Access Profile was created","format":"date-time","example":"2021-03-01T22:32:58.104Z","readOnly":true},"modified":{"type":"string","description":"Date the Access Profile was last modified.","format":"date-time","example":"2021-03-02T20:22:28.104Z","readOnly":true},"enabled":{"type":"boolean","description":"Whether the Access Profile is enabled. If the Access Profile is enabled then you must include at least one Entitlement.","example":true},"owner":{"description":"Owner of the Access Profile","type":"object","properties":{"type":{"description":"Owner type. This field must be either left null or set to 'IDENTITY' on input, otherwise a 400 Bad Request error will result.","example":"IDENTITY","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"]},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of the owner. It may be left null or omitted in a POST or PATCH. If set, it must match the current value of the owner's display name, otherwise a 400 Bad Request error will result.","example":"support"}}},"source":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the Source with with which the Access Profile is associated","example":"2c91809773dee3610173fdb0b6061ef4"},"type":{"type":"string","enum":["SOURCE"],"description":"The type of the Source, will always be SOURCE","example":"SOURCE"},"name":{"type":"string","description":"The display name of the associated Source","example":"ODS-AD-SOURCE"}}},"entitlements":{"type":"array","description":"A list of entitlements associated with the Access Profile. If enabled is false this is allowed to be empty otherwise it needs to contain at least one Entitlement.","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the Entitlement","example":"2c91809773dee32014e13e122092014e"},"type":{"type":"string","enum":["ENTITLEMENT"],"description":"The type of the Entitlement, will always be ENTITLEMENT","example":"ENTITLEMENT"},"name":{"type":"string","description":"The display name of the Entitlement","example":"CN=entitlement.490efde5,OU=OrgCo,OU=ServiceDept,DC=HQAD,DC=local"}}}},"requestable":{"type":"boolean","description":"Whether the Access Profile is requestable via access request. Currently, making an Access Profile non-requestable is only supported for customers enabled with the new Request Center. Otherwise, attempting to create an Access Profile with a value **false** in this field results in a 400 error.","example":true},"accessRequestConfig":{"description":"Access request configuration for this object","type":"object","properties":{"commentsRequired":{"type":"boolean","description":"Whether the requester of the containing object must provide comments justifying the request","example":true},"denialCommentsRequired":{"type":"boolean","description":"Whether an approver must provide comments when denying the request","example":true},"approvalSchemes":{"type":"array","description":"List describing the steps in approving the request","items":{"type":"object","properties":{"approverType":{"type":"string","enum":["OWNER","SOURCE_OWNER","MANAGER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step. Values are as follows.\n\n**OWNER**: Owner of the associated Access Profile or Role\n\n**SOURCE_OWNER**: Owner of the Source associated with an Access Profile\n\n**MANAGER**: Manager of the Identity making the request\n\n**GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field","example":"GOVERNANCE_GROUP"},"approverId":{"type":"string","description":"Id of the specific approver, used only when approverType is GOVERNANCE_GROUP","example":"46c79819-a69f-49a2-becb-12c971ae66c6"}}}}}},"revocationRequestConfig":{"description":"Revocation request configuration for this object.","type":"object","properties":{"approvalSchemes":{"type":"array","description":"List describing the steps in approving the revocation request","items":{"type":"object","properties":{"approverType":{"type":"string","enum":["OWNER","SOURCE_OWNER","MANAGER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step. Values are as follows.\n\n**OWNER**: Owner of the associated Access Profile or Role\n\n**SOURCE_OWNER**: Owner of the Source associated with an Access Profile\n\n**MANAGER**: Manager of the Identity making the request\n\n**GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field","example":"GOVERNANCE_GROUP"},"approverId":{"type":"string","description":"Id of the specific approver, used only when approverType is GOVERNANCE_GROUP","example":"46c79819-a69f-49a2-becb-12c971ae66c6"}}}}}},"segments":{"type":"array","items":{"type":"string"},"description":"List of IDs of segments, if any, to which this Access Profile is assigned.","example":["f7b1b8a3-5fed-4fd4-ad29-82014e137e19","29cb6c06-1da8-43ea-8be4-b3125f248f2a"]},"provisioningCriteria":{"description":"When an Identity has multiple Accounts on the Source with which an Access Profile is associated, this expression is evaluated against those Accounts to choose one to provision with the Access Profile.","nullable":true,"example":{"operation":"OR","children":[{"operation":"AND","children":[{"attribute":"dn","operation":"CONTAINS","value":"useast"},{"attribute":"manager","operation":"CONTAINS","value":"Scott.Clark"}]},{"operation":"AND","children":[{"attribute":"dn","operation":"EQUALS","value":"Gibson"},{"attribute":"telephoneNumber","operation":"CONTAINS","value":"512"}]}]},"type":"object","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","HAS","AND","OR"],"description":"Supported operations on ProvisioningCriteria","example":"EQUALS"},"attribute":{"type":"string","description":"Name of the Account attribute to be tested. If **operation** is one of EQUALS, NOT_EQUALS, CONTAINS, or HAS, this field is required. Otherwise, specifying it is an error.","example":"email","nullable":true},"value":{"type":"string","description":"String value to test the Account attribute w/r/t the specified operation. If the operation is one of EQUALS, NOT_EQUALS, or CONTAINS, this field is required. Otherwise, specifying it is an error. If the Attribute is not String-typed, it will be converted to the appropriate type.","example":"carlee.cert1c9f9b6fd@mailinator.com"},"children":{"type":"array","items":{"type":"object","description":"Defines matching criteria for an Account to be provisioned with a specific Access Profile","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","HAS","AND","OR"],"description":"Supported operations on ProvisioningCriteria","example":"EQUALS"},"attribute":{"type":"string","description":"Name of the Account attribute to be tested. If **operation** is one of EQUALS, NOT_EQUALS, CONTAINS, or HAS, this field is required. Otherwise, specifying it is an error.","example":"email","nullable":true},"value":{"type":"string","description":"String value to test the Account attribute w/r/t the specified operation. If the operation is one of EQUALS, NOT_EQUALS, or CONTAINS, this field is required. Otherwise, specifying it is an error. If the Attribute is not String-typed, it will be converted to the appropriate type.","example":"carlee.cert1c9f9b6fd@mailinator.com"},"children":{"type":"array","items":{"type":"object","description":"Defines matching criteria for an Account to be provisioned with a specific Access Profile","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","HAS","AND","OR"],"description":"Supported operations on ProvisioningCriteria","example":"EQUALS"},"attribute":{"type":"string","description":"Name of the Account attribute to be tested. If **operation** is one of EQUALS, NOT_EQUALS, CONTAINS, or HAS, this field is required. Otherwise, specifying it is an error.","example":"email","nullable":true},"value":{"type":"string","description":"String value to test the Account attribute w/r/t the specified operation. If the operation is one of EQUALS, NOT_EQUALS, or CONTAINS, this field is required. Otherwise, specifying it is an error. If the Attribute is not String-typed, it will be converted to the appropriate type.","example":"carlee.cert1c9f9b6fd@mailinator.com"}}},"nullable":true,"description":"Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes.","example":null}}},"nullable":true,"description":"Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes.","example":null}}}},"required":["owner","name","source"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:access-profile:manage"]}],"method":"post","path":"/access-profiles","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"2c91808a7190d06e01719938fcd20792","name":"Employee-database-read-write","description":"Collection of entitlements to read/write the employee database","created":"2021-03-01T22:32:58.104Z","modified":"2021-03-02T20:22:28.104Z","enabled":true,"owner":{"type":"IDENTITY","id":"2c9180a46faadee4016fb4e018c20639","name":"support"},"source":{"id":"2c91809773dee3610173fdb0b6061ef4","type":"SOURCE","name":"ODS-AD-SOURCE"},"entitlements":[{"id":"2c91809773dee32014e13e122092014e","type":"ENTITLEMENT","name":"CN=entitlement.490efde5,OU=OrgCo,OU=ServiceDept,DC=HQAD,DC=local"}],"requestable":true,"accessRequestConfig":{"commentsRequired":true,"denialCommentsRequired":true,"approvalSchemes":[{"approverType":"GOVERNANCE_GROUP","approverId":"46c79819-a69f-49a2-becb-12c971ae66c6"}]},"revocationRequestConfig":{"approvalSchemes":[{"approverType":"GOVERNANCE_GROUP","approverId":"46c79819-a69f-49a2-becb-12c971ae66c6"}]},"segments":["f7b1b8a3-5fed-4fd4-ad29-82014e137e19","29cb6c06-1da8-43ea-8be4-b3125f248f2a"],"provisioningCriteria":{"operation":"OR","children":[{"operation":"AND","children":[{"attribute":"dn","operation":"CONTAINS","value":"useast"},{"attribute":"manager","operation":"CONTAINS","value":"Scott.Clark"}]},{"operation":"AND","children":[{"attribute":"dn","operation":"EQUALS","value":"Gibson"},{"attribute":"telephoneNumber","operation":"CONTAINS","value":"512"}]}]}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create an Access Profile","description":{"content":"This API creates an Access Profile.\n\nA token with API, ORG_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. In addition, a token with only ROLE_SUBADMIN or SOURCE_SUBADMIN authority must be associated with the Access Profile's Source.","type":"text/plain"},"url":{"path":["access-profiles"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create an Access Profile + + + +This API creates an Access Profile. + +A token with API, ORG_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. In addition, a token with only ROLE_SUBADMIN or SOURCE_SUBADMIN authority must be associated with the Access Profile's Source. + +
    Request Body required
      owner object
      + +Owner of the Access Profile + +
      source object
      entitlements object[]
      + +A list of entitlements associated with the Access Profile. If enabled is false this is allowed to be empty otherwise it needs to contain at least one Entitlement. + +
      accessRequestConfig object
      + +Access request configuration for this object + +
      approvalSchemes object[]
      + +List describing the steps in approving the request + +
      revocationRequestConfig object
      + +Revocation request configuration for this object. + +
      approvalSchemes object[]
      + +List describing the steps in approving the revocation request + +
      provisioningCriteria object
      + +When an Identity has multiple Accounts on the Source with which an Access Profile is associated, this expression is evaluated against those Accounts to choose one to provision with the Access Profile. + +
      children object[]
      + +Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. + +
      children object[]
      + +Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. + +
    + +Access Profile created + +
    Schema
      owner object
      + +Owner of the Access Profile + +
      source object
      entitlements object[]
      + +A list of entitlements associated with the Access Profile. If enabled is false this is allowed to be empty otherwise it needs to contain at least one Entitlement. + +
      accessRequestConfig object
      + +Access request configuration for this object + +
      approvalSchemes object[]
      + +List describing the steps in approving the request + +
      revocationRequestConfig object
      + +Revocation request configuration for this object. + +
      approvalSchemes object[]
      + +List describing the steps in approving the revocation request + +
      provisioningCriteria object
      + +When an Identity has multiple Accounts on the Source with which an Access Profile is associated, this expression is evaluated against those Accounts to choose one to provision with the Access Profile. + +
      children object[]
      + +Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. + +
      children object[]
      + +Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-access-request.api.mdx b/docs/sailpoint-api-beta/create-access-request.api.mdx new file mode 100644 index 000000000..f1cbd7331 --- /dev/null +++ b/docs/sailpoint-api-beta/create-access-request.api.mdx @@ -0,0 +1,112 @@ +--- +id: create-access-request +sidebar_label: Submit an Access Request +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createAccessRequest","tags":["Access Requests"],"description":"This submits the access request into IdentityNow, where it will follow any IdentityNow approval processes.\n\nAccess requests are processed asynchronously by IdentityNow. A success response from this endpoint means the request\nhas been submitted to IDN and is queued for processing. Because this endpoint is asynchronous, it will not return an error\nif you submit duplicate access requests in quick succession, or you submit an access request for access that is already in progress, approved, or rejected.\nIt is best practice to check for any existing access requests that reference the same access items before submitting a new access request. This can\nbe accomplished by using the [access request status](https://developer.sailpoint.com/apis/v3/#operation/listAccessRequestStatus) endpoint. You can also\nuse the [search API](https://developer.sailpoint.com/apis/v3/#operation/search) to check the existing access items that an identity has before submitting\nan access request to ensure you are not requesting access that is already granted.\n\nThere are two types of access request:\n\n__GRANT_ACCESS__\n* Can be requested for multiple identities in a single request.\n* Supports self request and request on behalf of other users, see '/beta/access-request-config' endpoint for request configuration options. \n* Allows any authenticated token (except API) to call this endpoint to request to grant access to themselves. Depending on the configuration, a user can request access for others.\n* Roles, Access Profiles and Entitlements can be requested.\n* While requesting entitlements, maximum of 5 entitlements and 10 recipients are allowed in a request.\n \n__REVOKE_ACCESS__\n* Can only be requested for a single identity at a time.\n* Does not support self request. Only manager can request to revoke access for their directly managed employees.\n* If removeDate is specified, then the access will be removed on that date and time.\n* Allows a manager to request to revoke access for direct employees. A token with ORG_ADMIN authority can also request to revoke access from anyone.\n* Roles and Access Profiles can be requested for revocation. Revoke request for entitlements are not supported currently.\n\nNOTE: There is no indication to the approver in the IdentityNow UI that the approval request is for a revoke action. Take this into consideration when calling this API.\n\nA token with API authority cannot be used to call this endpoint. \n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"requestedFor":{"description":"A list of Identity IDs for whom the Access is requested. If it's a Revoke request, there can only be one Identity ID.","type":"array","items":{"type":"string","example":"2c918084660f45d6016617daa9210584"}},"requestType":{"type":"string","enum":["GRANT_ACCESS","REVOKE_ACCESS"],"description":"Access request type. Defaults to GRANT_ACCESS. REVOKE_ACCESS type can only have a single Identity ID in the requestedFor field. Currently REVOKE_ACCESS is not supported for entitlements.","example":"GRANT_ACCESS"},"requestedItems":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE","ENTITLEMENT"],"description":"The type of the item being requested.","example":"ACCESS_PROFILE"},"id":{"type":"string","description":"ID of Role, Access Profile or Entitlement being requested.","example":"2c9180835d2e5168015d32f890ca1581"},"comment":{"type":"string","description":"Comment provided by requester.\n* Comment is required when the request is of type Revoke Access.\n","example":"Requesting access profile for John Doe"},"clientMetadata":{"type":"object","additionalProperties":{"type":"string","example":{"requestedAppId":"2c91808f7892918f0178b78da4a305a1","requestedAppName":"test-app"}},"example":{"requestedAppName":"test-app","requestedAppId":"2c91808f7892918f0178b78da4a305a1"},"description":"Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on associated APIs such as /account-activities."},"removeDate":{"type":"string","description":"The date the role or access profile is no longer assigned to the specified identity.\n* Specify a date in the future.\n* The current SLA for the deprovisioning is 24 hours.\n* This date can be modified to either extend or decrease the duration of access item assignments for the specified identity.\n* Currently it is not supported for entitlements.\n","format":"date-time","example":"2020-07-11T21:23:15.000Z"}},"required":["id","type"]}},"clientMetadata":{"type":"object","additionalProperties":{"type":"string","example":{"requestedAppId":"2c91808f7892918f0178b78da4a305a1","requestedAppName":"test-app"}},"example":{"requestedAppId":"2c91808f7892918f0178b78da4a305a1","requestedAppName":"test-app"},"description":"Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on associated APIs such as /account-activities."}},"required":["requestedFor","requestedItems"]}}}},"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/access-requests","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"requestedFor":["2c918084660f45d6016617daa9210584"],"requestType":"GRANT_ACCESS","requestedItems":[{"type":"ACCESS_PROFILE","id":"2c9180835d2e5168015d32f890ca1581","comment":"Requesting access profile for John Doe","clientMetadata":{"requestedAppName":"test-app","requestedAppId":"2c91808f7892918f0178b78da4a305a1"},"removeDate":"2020-07-11T21:23:15.000Z"}],"clientMetadata":{"requestedAppId":"2c91808f7892918f0178b78da4a305a1","requestedAppName":"test-app"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Submit an Access Request","description":{"content":"This submits the access request into IdentityNow, where it will follow any IdentityNow approval processes.\n\nAccess requests are processed asynchronously by IdentityNow. A success response from this endpoint means the request\nhas been submitted to IDN and is queued for processing. Because this endpoint is asynchronous, it will not return an error\nif you submit duplicate access requests in quick succession, or you submit an access request for access that is already in progress, approved, or rejected.\nIt is best practice to check for any existing access requests that reference the same access items before submitting a new access request. This can\nbe accomplished by using the [access request status](https://developer.sailpoint.com/apis/v3/#operation/listAccessRequestStatus) endpoint. You can also\nuse the [search API](https://developer.sailpoint.com/apis/v3/#operation/search) to check the existing access items that an identity has before submitting\nan access request to ensure you are not requesting access that is already granted.\n\nThere are two types of access request:\n\n__GRANT_ACCESS__\n* Can be requested for multiple identities in a single request.\n* Supports self request and request on behalf of other users, see '/beta/access-request-config' endpoint for request configuration options. \n* Allows any authenticated token (except API) to call this endpoint to request to grant access to themselves. Depending on the configuration, a user can request access for others.\n* Roles, Access Profiles and Entitlements can be requested.\n* While requesting entitlements, maximum of 5 entitlements and 10 recipients are allowed in a request.\n \n__REVOKE_ACCESS__\n* Can only be requested for a single identity at a time.\n* Does not support self request. Only manager can request to revoke access for their directly managed employees.\n* If removeDate is specified, then the access will be removed on that date and time.\n* Allows a manager to request to revoke access for direct employees. A token with ORG_ADMIN authority can also request to revoke access from anyone.\n* Roles and Access Profiles can be requested for revocation. Revoke request for entitlements are not supported currently.\n\nNOTE: There is no indication to the approver in the IdentityNow UI that the approval request is for a revoke action. Take this into consideration when calling this API.\n\nA token with API authority cannot be used to call this endpoint. \n","type":"text/plain"},"url":{"path":["access-requests"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Submit an Access Request + + + +This submits the access request into IdentityNow, where it will follow any IdentityNow approval processes. + +Access requests are processed asynchronously by IdentityNow. A success response from this endpoint means the request +has been submitted to IDN and is queued for processing. Because this endpoint is asynchronous, it will not return an error +if you submit duplicate access requests in quick succession, or you submit an access request for access that is already in progress, approved, or rejected. +It is best practice to check for any existing access requests that reference the same access items before submitting a new access request. This can +be accomplished by using the [access request status](https://developer.sailpoint.com/apis/v3/#operation/listAccessRequestStatus) endpoint. You can also +use the [search API](https://developer.sailpoint.com/apis/v3/#operation/search) to check the existing access items that an identity has before submitting +an access request to ensure you are not requesting access that is already granted. + +There are two types of access request: + +__GRANT_ACCESS__ +* Can be requested for multiple identities in a single request. +* Supports self request and request on behalf of other users, see '/beta/access-request-config' endpoint for request configuration options. +* Allows any authenticated token (except API) to call this endpoint to request to grant access to themselves. Depending on the configuration, a user can request access for others. +* Roles, Access Profiles and Entitlements can be requested. +* While requesting entitlements, maximum of 5 entitlements and 10 recipients are allowed in a request. + +__REVOKE_ACCESS__ +* Can only be requested for a single identity at a time. +* Does not support self request. Only manager can request to revoke access for their directly managed employees. +* If removeDate is specified, then the access will be removed on that date and time. +* Allows a manager to request to revoke access for direct employees. A token with ORG_ADMIN authority can also request to revoke access from anyone. +* Roles and Access Profiles can be requested for revocation. Revoke request for entitlements are not supported currently. + +NOTE: There is no indication to the approver in the IdentityNow UI that the approval request is for a revoke action. Take this into consideration when calling this API. + +A token with API authority cannot be used to call this endpoint. + + +
    Request Body required
      requestedItems object[]
      clientMetadata object
      + +Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on associated APIs such as /account-activities. + +
    • property name* string
    • clientMetadata object
      + +Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on associated APIs such as /account-activities. + +
    • property name* string
    + +Accepted - Returned if the request was successfully accepted into the system. + +
    Schema
    • object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-account.api.mdx b/docs/sailpoint-api-beta/create-account.api.mdx new file mode 100644 index 000000000..e1840396f --- /dev/null +++ b/docs/sailpoint-api-beta/create-account.api.mdx @@ -0,0 +1,76 @@ +--- +id: create-account +sidebar_label: Create Account +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createAccount","tags":["Accounts"],"description":"This API submits an account creation task and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:account:create"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["attributes"],"properties":{"attributes":{"description":"The schema attribute values for the account","type":"object","example":{"city":"Austin","displayName":"John Doe","userName":"jdoe","sAMAccountName":"jDoe","mail":"john.doe@sailpoint.com"}}}}}}},"responses":{"202":{"description":"Async task details","content":{"application/json":{"schema":{"description":"Accounts async response containing details on started async process","required":["id"],"type":"object","properties":{"id":{"description":"id of the task","type":"string","example":"2c91808474683da6017468693c260195"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/accounts","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"attributes":{"city":"Austin","displayName":"John Doe","userName":"jdoe","sAMAccountName":"jDoe","mail":"john.doe@sailpoint.com"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create Account","description":{"content":"This API submits an account creation task and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Account + + + +This API submits an account creation task and returns the task ID. +A token with ORG_ADMIN authority is required to call this API. + +
    Request Body required
    + +Async task details + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-campaign-template.api.mdx b/docs/sailpoint-api-beta/create-campaign-template.api.mdx new file mode 100644 index 000000000..326e66bc1 --- /dev/null +++ b/docs/sailpoint-api-beta/create-campaign-template.api.mdx @@ -0,0 +1,171 @@ +--- +id: create-campaign-template +sidebar_label: Create a Campaign Template +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createCampaignTemplate","tags":["Certification Campaigns"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","description":"This template's name. Has no bearing on generated campaigns' names."},"description":{"type":"string","description":"This template's description. Has no bearing on generated campaigns' descriptions."},"created":{"type":"string","readOnly":true,"format":"date-time"},"modified":{"type":"string","readOnly":true,"format":"date-time"},"scheduled":{"type":"boolean","readOnly":true,"description":"Indicates if this campaign template has been scheduled."},"ownerRef":{"type":"object","description":"The owner of this template, and the owner of campaigns generated from this template via a schedule. This field is automatically populated at creation time with the current user.","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["IDENTITY"]},"name":{"type":"string"},"email":{"type":"string"}}},"deadlineDuration":{"type":"string","description":"The time period during which the campaign should be completed, formatted as an ISO-8601 Duration. When this template generates a campaign, the campaign's deadline will be the current date plus this duration. For example, if generation occurred on 2020-01-01 and this field was \"P2W\" (two weeks), the resulting campaign's deadline would be 2020-01-15 (the current date plus 14 days)."},"campaign":{"type":"object","title":"Campaign","allOf":[{"type":"object","title":"Slim Campaign","required":["name","description","type"],"properties":{"id":{"type":"string","readOnly":true},"name":{"description":"The campaign name. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details.","type":"string"},"description":{"type":"string","description":"The campaign description. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details."},"deadline":{"type":"string","format":"date-time","description":"The campaign's completion deadline."},"type":{"type":"string","description":"The type of campaign. Could be extended in the future.","enum":["MANAGER","SOURCE_OWNER","SEARCH","ROLE_COMPOSITION"]},"emailNotificationEnabled":{"type":"boolean"},"autoRevokeAllowed":{"type":"boolean"},"recommendationsEnabled":{"type":"boolean","description":"Enables IAI for this campaign. Accepts true even if the IAI product feature is off. If IAI is turned off then campaigns generated from this template will indicate false. The real value will then be returned if IAI is ever enabled for the org in the future."},"status":{"type":"string","description":"The campaign's current status.","readOnly":true,"enum":["PENDING","STAGED","CANCELING","ACTIVATING","ACTIVE","COMPLETING","COMPLETED","ERROR","ARCHIVED"]}},"example":{"id":"2c9079b270a266a60170a2779fcb0007","name":"Manager Campaign","description":"Everyone needs to be reviewed by their manager.","deadline":"2020-03-15T10:00:01.456Z","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"status":"ACTIVE"}},{"type":"object","properties":{"created":{"type":"string","readOnly":true,"format":"date-time"},"modified":{"type":"string","readOnly":true,"format":"date-time"},"filter":{"type":"object","description":"Determines which items will be included in this campaign. The default campaign filter is used if this field is left blank.","properties":{"id":{"type":"string","description":"The ID of whatever type of filter is being used."},"type":{"type":"string","enum":["CAMPAIGN_FILTER"]}}},"sunsetCommentsRequired":{"type":"boolean","description":"Determines if comments on sunset date changes are required.","default":true},"sourceOwnerCampaignInfo":{"type":"object","description":"Must be set only if the campaign type is SOURCE_OWNER.","properties":{"sourceIds":{"type":"array","description":"The list of sources to be included in the campaign.","items":{"type":"string"}}}},"searchCampaignInfo":{"type":"object","description":"Must be set only if the campaign type is SEARCH.","properties":{"type":{"type":"string","description":"The type of search campaign represented.","enum":["IDENTITY","ACCESS"]},"description":{"type":"string","description":"Describes this search campaign. Intended for storing the query used, and possibly the number of identities selected/available."},"reviewer":{"description":"If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP","allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object"}]},"query":{"type":"string","description":"The scope for the campaign. The campaign will cover identities returned by the query and identities that have access items returned by the query. One of `query` or `identityIds` must be set."},"identityIds":{"type":"array","description":"A direct list of identities to include in this campaign. One of `identityIds` or `query` must be set.","items":{"type":"string"},"maxItems":1000},"accessConstraints":{"type":"array","description":"Further reduces the scope of the campaign by excluding identities (from `query` or `identityIds`) that do not have this access.","items":{"type":"object","properties":{"type":{"type":"string","enum":["ENTITLEMENT","ACCESS_PROFILE","ROLE"]},"ids":{"description":"Must be set only if operator is SELECTED.","type":"array","items":{"type":"string"}},"operator":{"type":"string","enum":["ALL","SELECTED"]}},"required":["type","operator"],"example":{"type":"ENTITLEMENT","ids":["2c90ad2a70ace7d50170acf22ca90010"],"operator":"SELECTED"}},"maxItems":1000}},"required":["type"]},"roleCompositionCampaignInfo":{"type":"object","description":"Optional configuration options for role composition campaigns.","properties":{"reviewer":{"description":"If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP","allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object"}]},"roleIds":{"type":"array","description":"Optional list of roles to include in this campaign. Only one of `roleIds` and `query` may be set; if neither are set, all roles are included.","items":{"type":"string"}},"remediatorRef":{"type":"object","description":"This determines who remediation tasks will be assigned to. Remediation tasks are created for each revoke decision on items in the campaign. The only legal remediator type is 'IDENTITY', and the chosen identity must be a Role Admin or Org Admin.","properties":{"type":{"type":"string","enum":["IDENTITY"]},"id":{"type":"string","description":"The ID of the remediator."},"name":{"type":"string","description":"The name of the remediator.","readOnly":true}},"required":["type","id"]},"query":{"type":"string","description":"Optional search query to scope this campaign to a set of roles. Only one of `roleIds` and `query` may be set; if neither are set, all roles are included."},"description":{"type":"string","description":"Describes this role composition campaign. Intended for storing the query used, and possibly the number of roles selected/available."}},"required":["remediatorRef"]},"alerts":{"type":"array","description":"A list of errors and warnings that have accumulated.","readOnly":true,"items":{"type":"object","properties":{"level":{"type":"string","enum":["ERROR","WARN","INFO"]},"localizations":{"type":"array","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}},"totalCertifications":{"type":"integer","description":"The total number of certifications in this campaign.","readOnly":true},"completedCertifications":{"type":"integer","description":"The number of completed certifications in this campaign.","readOnly":true},"sourcesWithOrphanEntitlements":{"type":"array","description":"A list of sources in the campaign that contain \\\"orphan entitlements\\\" (entitlements without a corresponding Managed Attribute). An empty list indicates the campaign has no orphan entitlements. Null indicates there may be unknown orphan entitlements in the campaign (the campaign was created before this feature was implemented).","readOnly":true,"items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["SOURCE"]},"name":{"type":"string"}}}}}}],"example":{"id":"2c9079b270a266a60170a2779fcb0007","name":"Manager Campaign","description":"Everyone needs to be reviewed by their manager.","created":"2020-03-03T22:15:13.611Z","modified":"2020-03-03T22:20:12.674Z","deadline":"2020-03-15T00:00:00.456Z","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"status":"ACTIVE","filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"}}}},"required":["name","description","created","modified","campaign"],"example":{"id":"2c9079b270a266a60170a277bb960008","name":"Manager Campaign Template","description":"Template for the annual manager campaign.","created":"2020-03-05T22:44:00.364Z","modified":"2020-03-05T22:52:09.969Z","ownerRef":{"type":"IDENTITY","id":"2c918086676d3e0601677611dbde220f","email":"mr.manager@example.com","name":"Mister Manager"},"deadlineDuration":"P2W","campaign":{"name":"%Y Manager Campaign","description":"Everyone needs to be reviewed by their manager.","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"}}}},"examples":{"Manager":{"description":"This creates a template that can be used to generate manager campaigns. The campaigns will have a due date that is two weeks after their creation date, and will be named \"{current date} Manager Review\" (e.g. \"2020-03-16 Manager Review\").","value":{"name":"Manager Review","description":"A review of everyone's access by their manager.","deadlineDuration":"P2W","campaign":{"name":"Manager Review","description":"Review everyone's access.","type":"MANAGER","filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"},"emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false}}},"Search":{"description":"This creates a template that can be used to generate search access campaigns. The campaigns will cover the \"reporter\" access item for across all identities.","value":{"name":"Reporting Access Review","description":"A review of everyone's access to the reporting system.","deadlineDuration":"P2W","campaign":{"name":"Search Review","description":"Review everyone's access to the reporting system.","type":"SEARCH","filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"},"searchCampaignInfo":{"type":"ACCESS","query":"@access(name: (\"reporter\"))","description":"Identities with reporting abilities"},"emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false}}},"Source Owner":{"description":"This creates a template that can be used to generate source owner campaigns. The campaigns will have a due date that is one month after their creation date, and will review one source.","value":{"name":"AD Source Review","description":"A review of our AD source.","deadlineDuration":"P1M","campaign":{"name":"Source Review","description":"Review everyone's access.","type":"SOURCE_OWNER","filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"},"sourceOwnerCampaignInfo":{"sourceIds":["2c918084707deba501709d45ce4e5569"]},"emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false}}},"RoleComposition":{"description":"This creates a template that can be used to generate role composition campaigns. The campaigns will have a due date that is two weeks after their creation date, and will be named \"{current date} Role Composition Review\" (e.g. \"2020-03-16 Role Composition Review\").","value":{"name":"Role Composition Review","description":"A review of every role's access items, by the specified reviewer.","deadlineDuration":"P2W","campaign":{"name":"Role Composition Review","description":"Review all our roles.","type":"ROLE_COMPOSITION","roleCompositionCampaignInfo":{"remediatorRef":{"type":"IDENTITY","id":"2c9180876ab2c053016ab6f65dfd5aaa"}},"emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false}}}}}}},"responses":{"200":{"description":"Created successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","description":"This template's name. Has no bearing on generated campaigns' names."},"description":{"type":"string","description":"This template's description. Has no bearing on generated campaigns' descriptions."},"created":{"type":"string","readOnly":true,"format":"date-time"},"modified":{"type":"string","readOnly":true,"format":"date-time"},"scheduled":{"type":"boolean","readOnly":true,"description":"Indicates if this campaign template has been scheduled."},"ownerRef":{"type":"object","description":"The owner of this template, and the owner of campaigns generated from this template via a schedule. This field is automatically populated at creation time with the current user.","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["IDENTITY"]},"name":{"type":"string"},"email":{"type":"string"}}},"deadlineDuration":{"type":"string","description":"The time period during which the campaign should be completed, formatted as an ISO-8601 Duration. When this template generates a campaign, the campaign's deadline will be the current date plus this duration. For example, if generation occurred on 2020-01-01 and this field was \"P2W\" (two weeks), the resulting campaign's deadline would be 2020-01-15 (the current date plus 14 days)."},"campaign":{"type":"object","title":"Campaign","allOf":[{"type":"object","title":"Slim Campaign","required":["name","description","type"],"properties":{"id":{"type":"string","readOnly":true},"name":{"description":"The campaign name. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details.","type":"string"},"description":{"type":"string","description":"The campaign description. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details."},"deadline":{"type":"string","format":"date-time","description":"The campaign's completion deadline."},"type":{"type":"string","description":"The type of campaign. Could be extended in the future.","enum":["MANAGER","SOURCE_OWNER","SEARCH","ROLE_COMPOSITION"]},"emailNotificationEnabled":{"type":"boolean"},"autoRevokeAllowed":{"type":"boolean"},"recommendationsEnabled":{"type":"boolean","description":"Enables IAI for this campaign. Accepts true even if the IAI product feature is off. If IAI is turned off then campaigns generated from this template will indicate false. The real value will then be returned if IAI is ever enabled for the org in the future."},"status":{"type":"string","description":"The campaign's current status.","readOnly":true,"enum":["PENDING","STAGED","CANCELING","ACTIVATING","ACTIVE","COMPLETING","COMPLETED","ERROR","ARCHIVED"]}},"example":{"id":"2c9079b270a266a60170a2779fcb0007","name":"Manager Campaign","description":"Everyone needs to be reviewed by their manager.","deadline":"2020-03-15T10:00:01.456Z","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"status":"ACTIVE"}},{"type":"object","properties":{"created":{"type":"string","readOnly":true,"format":"date-time"},"modified":{"type":"string","readOnly":true,"format":"date-time"},"filter":{"type":"object","description":"Determines which items will be included in this campaign. The default campaign filter is used if this field is left blank.","properties":{"id":{"type":"string","description":"The ID of whatever type of filter is being used."},"type":{"type":"string","enum":["CAMPAIGN_FILTER"]}}},"sunsetCommentsRequired":{"type":"boolean","description":"Determines if comments on sunset date changes are required.","default":true},"sourceOwnerCampaignInfo":{"type":"object","description":"Must be set only if the campaign type is SOURCE_OWNER.","properties":{"sourceIds":{"type":"array","description":"The list of sources to be included in the campaign.","items":{"type":"string"}}}},"searchCampaignInfo":{"type":"object","description":"Must be set only if the campaign type is SEARCH.","properties":{"type":{"type":"string","description":"The type of search campaign represented.","enum":["IDENTITY","ACCESS"]},"description":{"type":"string","description":"Describes this search campaign. Intended for storing the query used, and possibly the number of identities selected/available."},"reviewer":{"description":"If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP","allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object"}]},"query":{"type":"string","description":"The scope for the campaign. The campaign will cover identities returned by the query and identities that have access items returned by the query. One of `query` or `identityIds` must be set."},"identityIds":{"type":"array","description":"A direct list of identities to include in this campaign. One of `identityIds` or `query` must be set.","items":{"type":"string"},"maxItems":1000},"accessConstraints":{"type":"array","description":"Further reduces the scope of the campaign by excluding identities (from `query` or `identityIds`) that do not have this access.","items":{"type":"object","properties":{"type":{"type":"string","enum":["ENTITLEMENT","ACCESS_PROFILE","ROLE"]},"ids":{"description":"Must be set only if operator is SELECTED.","type":"array","items":{"type":"string"}},"operator":{"type":"string","enum":["ALL","SELECTED"]}},"required":["type","operator"],"example":{"type":"ENTITLEMENT","ids":["2c90ad2a70ace7d50170acf22ca90010"],"operator":"SELECTED"}},"maxItems":1000}},"required":["type"]},"roleCompositionCampaignInfo":{"type":"object","description":"Optional configuration options for role composition campaigns.","properties":{"reviewer":{"description":"If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP","allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object"}]},"roleIds":{"type":"array","description":"Optional list of roles to include in this campaign. Only one of `roleIds` and `query` may be set; if neither are set, all roles are included.","items":{"type":"string"}},"remediatorRef":{"type":"object","description":"This determines who remediation tasks will be assigned to. Remediation tasks are created for each revoke decision on items in the campaign. The only legal remediator type is 'IDENTITY', and the chosen identity must be a Role Admin or Org Admin.","properties":{"type":{"type":"string","enum":["IDENTITY"]},"id":{"type":"string","description":"The ID of the remediator."},"name":{"type":"string","description":"The name of the remediator.","readOnly":true}},"required":["type","id"]},"query":{"type":"string","description":"Optional search query to scope this campaign to a set of roles. Only one of `roleIds` and `query` may be set; if neither are set, all roles are included."},"description":{"type":"string","description":"Describes this role composition campaign. Intended for storing the query used, and possibly the number of roles selected/available."}},"required":["remediatorRef"]},"alerts":{"type":"array","description":"A list of errors and warnings that have accumulated.","readOnly":true,"items":{"type":"object","properties":{"level":{"type":"string","enum":["ERROR","WARN","INFO"]},"localizations":{"type":"array","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}},"totalCertifications":{"type":"integer","description":"The total number of certifications in this campaign.","readOnly":true},"completedCertifications":{"type":"integer","description":"The number of completed certifications in this campaign.","readOnly":true},"sourcesWithOrphanEntitlements":{"type":"array","description":"A list of sources in the campaign that contain \\\"orphan entitlements\\\" (entitlements without a corresponding Managed Attribute). An empty list indicates the campaign has no orphan entitlements. Null indicates there may be unknown orphan entitlements in the campaign (the campaign was created before this feature was implemented).","readOnly":true,"items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["SOURCE"]},"name":{"type":"string"}}}}}}],"example":{"id":"2c9079b270a266a60170a2779fcb0007","name":"Manager Campaign","description":"Everyone needs to be reviewed by their manager.","created":"2020-03-03T22:15:13.611Z","modified":"2020-03-03T22:20:12.674Z","deadline":"2020-03-15T00:00:00.456Z","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"status":"ACTIVE","filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"}}}},"required":["name","description","created","modified","campaign"],"example":{"id":"2c9079b270a266a60170a277bb960008","name":"Manager Campaign Template","description":"Template for the annual manager campaign.","created":"2020-03-05T22:44:00.364Z","modified":"2020-03-05T22:52:09.969Z","ownerRef":{"type":"IDENTITY","id":"2c918086676d3e0601677611dbde220f","email":"mr.manager@example.com","name":"Mister Manager"},"deadlineDuration":"P2W","campaign":{"name":"%Y Manager Campaign","description":"Everyone needs to be reviewed by their manager.","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"}}}},"examples":{"Manager":{"value":{"id":"e7dbec99d49349c8951bd84f58a05120","name":"Manager Review","created":"2022-08-02T19:16:42.632Z","modified":null,"description":"A review of everyone's access by their manager.","deadlineDuration":"P14D","ownerRef":{"email":"support@testmail.identitysoon.com","type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"scheduled":false,"campaign":{"created":null,"modified":null,"filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"},"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":null,"searchCampaignInfo":null,"roleCompositionCampaignInfo":null,"alerts":null,"totalCertifications":null,"completedCertifications":null,"sourcesWithOrphanEntitlements":null,"id":null,"name":"Manager Review","description":"Review everyone's access.","deadline":null,"type":"MANAGER","status":null,"emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false}}},"Search":{"value":{"id":"b7e6459eed5247ac8b98a5fed81fe27f","name":"Reporting Access Review","created":"2022-07-28T19:19:40.035Z","modified":null,"description":"A review of everyone's access to the reporting system.","deadlineDuration":"P14D","ownerRef":{"email":"support@testmail.identitysoon.com","type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"scheduled":false,"campaign":{"created":null,"modified":null,"filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"},"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":null,"searchCampaignInfo":{"type":"ACCESS","description":"Identities with reporting abilities","reviewerId":null,"reviewer":null,"query":"@access(name: (\"reporter\"))","identityIds":null,"accessConstraints":[]},"roleCompositionCampaignInfo":null,"alerts":null,"totalCertifications":null,"completedCertifications":null,"sourcesWithOrphanEntitlements":null,"id":null,"name":"Search Campaign Review","description":"Review everyone's access to the reporting system.","deadline":null,"type":"SEARCH","status":null,"emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false}}},"Source Owner":{"value":{"id":"b9f41bc69e7a4291b9de0630396d030d","name":"AD Source Review","created":"2022-08-02T13:40:36.857Z","modified":null,"description":"A review of our AD source.","deadlineDuration":"P1M","ownerRef":{"email":"support@testmail.identitysoon.com","type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"scheduled":false,"campaign":{"created":null,"modified":null,"filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"},"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":{"sourceIds":["2c918084707deba501709d45ce4e5569"]},"searchCampaignInfo":null,"roleCompositionCampaignInfo":null,"alerts":null,"totalCertifications":null,"completedCertifications":null,"sourcesWithOrphanEntitlements":null,"id":null,"name":"AD Source Review","description":"Review everyone's access.","deadline":null,"type":"SOURCE_OWNER","status":null,"emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false}}},"RoleComposition":{"value":{"id":"b9f41bc69e7a4291b9de0630396d030d","name":"Campaign With Admin Role","created":"2022-08-02T13:40:36.857Z","modified":null,"description":"Campaign With Admin Role","deadlineDuration":null,"ownerRef":{"email":"support@testmail.identitysoon.com","type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"scheduled":false,"campaign":{"created":null,"modified":null,"filter":null,"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":null,"searchCampaignInfo":null,"roleCompositionCampaignInfo":{"remediatorRef":{"type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"reviewerId":null,"reviewer":null,"roleIds":["b15d609fc5c8434b865fe552315fda8f"],"query":null,"description":null},"alerts":null,"totalCertifications":null,"completedCertifications":null,"sourcesWithOrphanEntitlements":null,"id":null,"name":"Campaign With Admin Role","description":"Campaign With Admin Role","deadline":null,"type":"ROLE_COMPOSITION","status":null,"emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"description":"Create a Campaign Template","method":"post","path":"/campaign-templates","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"2c9079b270a266a60170a277bb960008","name":"Manager Campaign Template","description":"Template for the annual manager campaign.","created":"2020-03-05T22:44:00.364Z","modified":"2020-03-05T22:52:09.969Z","ownerRef":{"type":"IDENTITY","id":"2c918086676d3e0601677611dbde220f","email":"mr.manager@example.com","name":"Mister Manager"},"deadlineDuration":"P2W","campaign":{"name":"%Y Manager Campaign","description":"Everyone needs to be reviewed by their manager.","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create a Campaign Template","description":{"type":"text/plain"},"url":{"path":["campaign-templates"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create a Campaign Template + + + +Create a Campaign Template + +
    Request Body required
      ownerRef object
      + +The owner of this template, and the owner of campaigns generated from this template via a schedule. This field is automatically populated at creation time with the current user. + +
      campaign object
      filter object
      + +Determines which items will be included in this campaign. The default campaign filter is used if this field is left blank. + +
      sourceOwnerCampaignInfo object
      + +Must be set only if the campaign type is SOURCE_OWNER. + +
      searchCampaignInfo object
      + +Must be set only if the campaign type is SEARCH. + +
      reviewer object
      + +If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP + +
      accessConstraints object[]
      + +**Possible values:** `<= 1000` + +
      + +Further reduces the scope of the campaign by excluding identities (from `query` or `identityIds`) that do not have this access. + +
      roleCompositionCampaignInfo object
      + +Optional configuration options for role composition campaigns. + +
      reviewer object
      + +If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP + +
      remediatorRef object
      + +This determines who remediation tasks will be assigned to. Remediation tasks are created for each revoke decision on items in the campaign. The only legal remediator type is 'IDENTITY', and the chosen identity must be a Role Admin or Org Admin. + +
      alerts object[]
      + +A list of errors and warnings that have accumulated. + +
      localizations object[]
      sourcesWithOrphanEntitlements object[]
      + +A list of sources in the campaign that contain \"orphan entitlements\" (entitlements without a corresponding Managed Attribute). An empty list indicates the campaign has no orphan entitlements. Null indicates there may be unknown orphan entitlements in the campaign (the campaign was created before this feature was implemented). + +
    + +Created successfully. + +
    Schema
      ownerRef object
      + +The owner of this template, and the owner of campaigns generated from this template via a schedule. This field is automatically populated at creation time with the current user. + +
      campaign object
      filter object
      + +Determines which items will be included in this campaign. The default campaign filter is used if this field is left blank. + +
      sourceOwnerCampaignInfo object
      + +Must be set only if the campaign type is SOURCE_OWNER. + +
      searchCampaignInfo object
      + +Must be set only if the campaign type is SEARCH. + +
      reviewer object
      + +If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP + +
      accessConstraints object[]
      + +**Possible values:** `<= 1000` + +
      + +Further reduces the scope of the campaign by excluding identities (from `query` or `identityIds`) that do not have this access. + +
      roleCompositionCampaignInfo object
      + +Optional configuration options for role composition campaigns. + +
      reviewer object
      + +If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP + +
      remediatorRef object
      + +This determines who remediation tasks will be assigned to. Remediation tasks are created for each revoke decision on items in the campaign. The only legal remediator type is 'IDENTITY', and the chosen identity must be a Role Admin or Org Admin. + +
      alerts object[]
      + +A list of errors and warnings that have accumulated. + +
      localizations object[]
      sourcesWithOrphanEntitlements object[]
      + +A list of sources in the campaign that contain \"orphan entitlements\" (entitlements without a corresponding Managed Attribute). An empty list indicates the campaign has no orphan entitlements. Null indicates there may be unknown orphan entitlements in the campaign (the campaign was created before this feature was implemented). + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-campaign.api.mdx b/docs/sailpoint-api-beta/create-campaign.api.mdx new file mode 100644 index 000000000..557f2c226 --- /dev/null +++ b/docs/sailpoint-api-beta/create-campaign.api.mdx @@ -0,0 +1,163 @@ +--- +id: create-campaign +sidebar_label: Create a campaign +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createCampaign","tags":["Certification Campaigns"],"description":"Creates a new Certification Campaign with the information provided in the request body.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"Campaign","allOf":[{"type":"object","title":"Slim Campaign","required":["name","description","type"],"properties":{"id":{"type":"string","readOnly":true},"name":{"description":"The campaign name. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details.","type":"string"},"description":{"type":"string","description":"The campaign description. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details."},"deadline":{"type":"string","format":"date-time","description":"The campaign's completion deadline."},"type":{"type":"string","description":"The type of campaign. Could be extended in the future.","enum":["MANAGER","SOURCE_OWNER","SEARCH","ROLE_COMPOSITION"]},"emailNotificationEnabled":{"type":"boolean"},"autoRevokeAllowed":{"type":"boolean"},"recommendationsEnabled":{"type":"boolean","description":"Enables IAI for this campaign. Accepts true even if the IAI product feature is off. If IAI is turned off then campaigns generated from this template will indicate false. The real value will then be returned if IAI is ever enabled for the org in the future."},"status":{"type":"string","description":"The campaign's current status.","readOnly":true,"enum":["PENDING","STAGED","CANCELING","ACTIVATING","ACTIVE","COMPLETING","COMPLETED","ERROR","ARCHIVED"]}},"example":{"id":"2c9079b270a266a60170a2779fcb0007","name":"Manager Campaign","description":"Everyone needs to be reviewed by their manager.","deadline":"2020-03-15T10:00:01.456Z","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"status":"ACTIVE"}},{"type":"object","properties":{"created":{"type":"string","readOnly":true,"format":"date-time"},"modified":{"type":"string","readOnly":true,"format":"date-time"},"filter":{"type":"object","description":"Determines which items will be included in this campaign. The default campaign filter is used if this field is left blank.","properties":{"id":{"type":"string","description":"The ID of whatever type of filter is being used."},"type":{"type":"string","enum":["CAMPAIGN_FILTER"]}}},"sunsetCommentsRequired":{"type":"boolean","description":"Determines if comments on sunset date changes are required.","default":true},"sourceOwnerCampaignInfo":{"type":"object","description":"Must be set only if the campaign type is SOURCE_OWNER.","properties":{"sourceIds":{"type":"array","description":"The list of sources to be included in the campaign.","items":{"type":"string"}}}},"searchCampaignInfo":{"type":"object","description":"Must be set only if the campaign type is SEARCH.","properties":{"type":{"type":"string","description":"The type of search campaign represented.","enum":["IDENTITY","ACCESS"]},"description":{"type":"string","description":"Describes this search campaign. Intended for storing the query used, and possibly the number of identities selected/available."},"reviewer":{"description":"If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP","allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object"}]},"query":{"type":"string","description":"The scope for the campaign. The campaign will cover identities returned by the query and identities that have access items returned by the query. One of `query` or `identityIds` must be set."},"identityIds":{"type":"array","description":"A direct list of identities to include in this campaign. One of `identityIds` or `query` must be set.","items":{"type":"string"},"maxItems":1000},"accessConstraints":{"type":"array","description":"Further reduces the scope of the campaign by excluding identities (from `query` or `identityIds`) that do not have this access.","items":{"type":"object","properties":{"type":{"type":"string","enum":["ENTITLEMENT","ACCESS_PROFILE","ROLE"]},"ids":{"description":"Must be set only if operator is SELECTED.","type":"array","items":{"type":"string"}},"operator":{"type":"string","enum":["ALL","SELECTED"]}},"required":["type","operator"],"example":{"type":"ENTITLEMENT","ids":["2c90ad2a70ace7d50170acf22ca90010"],"operator":"SELECTED"}},"maxItems":1000}},"required":["type"]},"roleCompositionCampaignInfo":{"type":"object","description":"Optional configuration options for role composition campaigns.","properties":{"reviewer":{"description":"If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP","allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object"}]},"roleIds":{"type":"array","description":"Optional list of roles to include in this campaign. Only one of `roleIds` and `query` may be set; if neither are set, all roles are included.","items":{"type":"string"}},"remediatorRef":{"type":"object","description":"This determines who remediation tasks will be assigned to. Remediation tasks are created for each revoke decision on items in the campaign. The only legal remediator type is 'IDENTITY', and the chosen identity must be a Role Admin or Org Admin.","properties":{"type":{"type":"string","enum":["IDENTITY"]},"id":{"type":"string","description":"The ID of the remediator."},"name":{"type":"string","description":"The name of the remediator.","readOnly":true}},"required":["type","id"]},"query":{"type":"string","description":"Optional search query to scope this campaign to a set of roles. Only one of `roleIds` and `query` may be set; if neither are set, all roles are included."},"description":{"type":"string","description":"Describes this role composition campaign. Intended for storing the query used, and possibly the number of roles selected/available."}},"required":["remediatorRef"]},"alerts":{"type":"array","description":"A list of errors and warnings that have accumulated.","readOnly":true,"items":{"type":"object","properties":{"level":{"type":"string","enum":["ERROR","WARN","INFO"]},"localizations":{"type":"array","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}},"totalCertifications":{"type":"integer","description":"The total number of certifications in this campaign.","readOnly":true},"completedCertifications":{"type":"integer","description":"The number of completed certifications in this campaign.","readOnly":true},"sourcesWithOrphanEntitlements":{"type":"array","description":"A list of sources in the campaign that contain \\\"orphan entitlements\\\" (entitlements without a corresponding Managed Attribute). An empty list indicates the campaign has no orphan entitlements. Null indicates there may be unknown orphan entitlements in the campaign (the campaign was created before this feature was implemented).","readOnly":true,"items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["SOURCE"]},"name":{"type":"string"}}}}}}],"example":{"id":"2c9079b270a266a60170a2779fcb0007","name":"Manager Campaign","description":"Everyone needs to be reviewed by their manager.","created":"2020-03-03T22:15:13.611Z","modified":"2020-03-03T22:20:12.674Z","deadline":"2020-03-15T00:00:00.456Z","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"status":"ACTIVE","filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"}}},"examples":{"Manager":{"value":{"name":"Manager Review","description":"A review of everyone's access by their manager.","deadline":"2020-12-25T06:00:00.468Z","type":"MANAGER","emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false,"filter":{"type":"CAMPAIGN_FILTER","id":"0c46fb26c6b20967a55517ee90d15b93"}}},"Search":{"value":{"name":"Search Campaign","description":"Search Campaign","deadline":"2020-12-25T06:00:00.468Z","type":"SEARCH","emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false,"filter":{"type":"CAMPAIGN_FILTER","id":"0c46fb26c6b20967a55517ee90d15b93"},"searchCampaignInfo":{"type":"ACCESS","query":"user"}}},"Source Owner":{"value":{"name":"Source Owner","description":"Source Owner Info","deadline":"2020-12-25T06:00:00.468Z","type":"SOURCE_OWNER","emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false,"filter":{"type":"CAMPAIGN_FILTER","id":"0c46fb26c6b20967a55517ee90d15b93"},"sourceOwnerCampaignInfo":{"sourceIds":["612b31b1a0f04aaf83123bdb80e70db6"]}}},"Role Composition":{"value":{"name":"Role Composition Campaign","description":"A review done by a role owner.","deadline":"2020-12-25T06:00:00.468Z","type":"ROLE_COMPOSITION","emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false,"filter":{"type":"CAMPAIGN_FILTER","id":"0c46fb26c6b20967a55517ee90d15b93"},"roleCompositionCampaignInfo":{"remediatorRef":{"type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"roleIds":["b15d609fc5c8434b865fe552315fda8f"]}}}}}}},"responses":{"200":{"description":"Indicates that the campaign requested was successfully created and returns its representation.","content":{"application/json":{"schema":{"type":"object","title":"Campaign","allOf":[{"type":"object","title":"Slim Campaign","required":["name","description","type"],"properties":{"id":{"type":"string","readOnly":true},"name":{"description":"The campaign name. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details.","type":"string"},"description":{"type":"string","description":"The campaign description. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details."},"deadline":{"type":"string","format":"date-time","description":"The campaign's completion deadline."},"type":{"type":"string","description":"The type of campaign. Could be extended in the future.","enum":["MANAGER","SOURCE_OWNER","SEARCH","ROLE_COMPOSITION"]},"emailNotificationEnabled":{"type":"boolean"},"autoRevokeAllowed":{"type":"boolean"},"recommendationsEnabled":{"type":"boolean","description":"Enables IAI for this campaign. Accepts true even if the IAI product feature is off. If IAI is turned off then campaigns generated from this template will indicate false. The real value will then be returned if IAI is ever enabled for the org in the future."},"status":{"type":"string","description":"The campaign's current status.","readOnly":true,"enum":["PENDING","STAGED","CANCELING","ACTIVATING","ACTIVE","COMPLETING","COMPLETED","ERROR","ARCHIVED"]}},"example":{"id":"2c9079b270a266a60170a2779fcb0007","name":"Manager Campaign","description":"Everyone needs to be reviewed by their manager.","deadline":"2020-03-15T10:00:01.456Z","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"status":"ACTIVE"}},{"type":"object","properties":{"created":{"type":"string","readOnly":true,"format":"date-time"},"modified":{"type":"string","readOnly":true,"format":"date-time"},"filter":{"type":"object","description":"Determines which items will be included in this campaign. The default campaign filter is used if this field is left blank.","properties":{"id":{"type":"string","description":"The ID of whatever type of filter is being used."},"type":{"type":"string","enum":["CAMPAIGN_FILTER"]}}},"sunsetCommentsRequired":{"type":"boolean","description":"Determines if comments on sunset date changes are required.","default":true},"sourceOwnerCampaignInfo":{"type":"object","description":"Must be set only if the campaign type is SOURCE_OWNER.","properties":{"sourceIds":{"type":"array","description":"The list of sources to be included in the campaign.","items":{"type":"string"}}}},"searchCampaignInfo":{"type":"object","description":"Must be set only if the campaign type is SEARCH.","properties":{"type":{"type":"string","description":"The type of search campaign represented.","enum":["IDENTITY","ACCESS"]},"description":{"type":"string","description":"Describes this search campaign. Intended for storing the query used, and possibly the number of identities selected/available."},"reviewer":{"description":"If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP","allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object"}]},"query":{"type":"string","description":"The scope for the campaign. The campaign will cover identities returned by the query and identities that have access items returned by the query. One of `query` or `identityIds` must be set."},"identityIds":{"type":"array","description":"A direct list of identities to include in this campaign. One of `identityIds` or `query` must be set.","items":{"type":"string"},"maxItems":1000},"accessConstraints":{"type":"array","description":"Further reduces the scope of the campaign by excluding identities (from `query` or `identityIds`) that do not have this access.","items":{"type":"object","properties":{"type":{"type":"string","enum":["ENTITLEMENT","ACCESS_PROFILE","ROLE"]},"ids":{"description":"Must be set only if operator is SELECTED.","type":"array","items":{"type":"string"}},"operator":{"type":"string","enum":["ALL","SELECTED"]}},"required":["type","operator"],"example":{"type":"ENTITLEMENT","ids":["2c90ad2a70ace7d50170acf22ca90010"],"operator":"SELECTED"}},"maxItems":1000}},"required":["type"]},"roleCompositionCampaignInfo":{"type":"object","description":"Optional configuration options for role composition campaigns.","properties":{"reviewer":{"description":"If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP","allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object"}]},"roleIds":{"type":"array","description":"Optional list of roles to include in this campaign. Only one of `roleIds` and `query` may be set; if neither are set, all roles are included.","items":{"type":"string"}},"remediatorRef":{"type":"object","description":"This determines who remediation tasks will be assigned to. Remediation tasks are created for each revoke decision on items in the campaign. The only legal remediator type is 'IDENTITY', and the chosen identity must be a Role Admin or Org Admin.","properties":{"type":{"type":"string","enum":["IDENTITY"]},"id":{"type":"string","description":"The ID of the remediator."},"name":{"type":"string","description":"The name of the remediator.","readOnly":true}},"required":["type","id"]},"query":{"type":"string","description":"Optional search query to scope this campaign to a set of roles. Only one of `roleIds` and `query` may be set; if neither are set, all roles are included."},"description":{"type":"string","description":"Describes this role composition campaign. Intended for storing the query used, and possibly the number of roles selected/available."}},"required":["remediatorRef"]},"alerts":{"type":"array","description":"A list of errors and warnings that have accumulated.","readOnly":true,"items":{"type":"object","properties":{"level":{"type":"string","enum":["ERROR","WARN","INFO"]},"localizations":{"type":"array","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}},"totalCertifications":{"type":"integer","description":"The total number of certifications in this campaign.","readOnly":true},"completedCertifications":{"type":"integer","description":"The number of completed certifications in this campaign.","readOnly":true},"sourcesWithOrphanEntitlements":{"type":"array","description":"A list of sources in the campaign that contain \\\"orphan entitlements\\\" (entitlements without a corresponding Managed Attribute). An empty list indicates the campaign has no orphan entitlements. Null indicates there may be unknown orphan entitlements in the campaign (the campaign was created before this feature was implemented).","readOnly":true,"items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["SOURCE"]},"name":{"type":"string"}}}}}}],"example":{"id":"2c9079b270a266a60170a2779fcb0007","name":"Manager Campaign","description":"Everyone needs to be reviewed by their manager.","created":"2020-03-03T22:15:13.611Z","modified":"2020-03-03T22:20:12.674Z","deadline":"2020-03-15T00:00:00.456Z","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"status":"ACTIVE","filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"}}},"examples":{"Manager":{"value":{"id":"5594f43b76804a6980ece5fdccf74be7","name":"Manager Review","description":"A review of everyone's access by their manager.","deadline":"2020-12-25T06:00:00.468Z","type":"MANAGER","status":"PENDING","emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false,"created":"2022-08-02T20:21:18.421Z","modified":null,"filter":{"type":"CAMPAIGN_FILTER","id":"0fbe863c063c4c88a35fd7f17e8a3df5","sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":null,"searchCampaignInfo":null,"roleCompositionCampaignInfo":null,"alerts":null,"totalCertifications":0,"completedCertifications":0,"sourcesWithOrphanEntitlements":null}}},"Search":{"value":{"id":"ec041831cb2147778b594feb9d8db44a","name":"Search Campaign","description":"Search Campaign","deadline":"2020-12-25T06:00:00.468Z","type":"SEARCH","status":"PENDING","emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false,"created":"2022-08-03T13:54:34.344Z","modified":null,"filter":{"type":"CAMPAIGN_FILTER","id":"0fbe863c063c4c88a35fd7f17e8a3df5"},"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":null,"searchCampaignInfo":{"type":"ACCESS","description":"user","reviewer":{"type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":null},"query":"user","identityIds":null,"accessConstraints":[]},"roleCompositionCampaignInfo":null,"alerts":null,"totalCertifications":0,"completedCertifications":0,"sourcesWithOrphanEntitlements":null}},"Source Owner":{"value":{"id":"fd7b76ba4ea042de8a9414aa12fc977a","name":"Source Owner","description":"Source Owner Info","deadline":"2020-12-25T06:00:00.468Z","type":"SOURCE_OWNER","status":"PENDING","emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false,"created":"2022-08-03T13:34:19.541Z","modified":null,"filter":{"type":"CAMPAIGN_FILTER","id":"0fbe863c063c4c88a35fd7f17e8a3df5"},"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":null,"sourceIds":["612b31b1a0f04aaf83123bdb80e70db6"],"searchCampaignInfo":null,"roleCompositionCampaignInfo":null,"alerts":null,"totalCertifications":0,"completedCertifications":0,"sourcesWithOrphanEntitlements":null}},"Role Composition":{"value":{"id":"3b2e2e5821e84127b6d693d41c40623b","name":"Role Composition Campaign","description":"A review done by a role owner.","deadline":"2020-12-25T06:00:00.468Z","type":"ROLE_COMPOSITION","status":"PENDING","emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false,"created":"2022-08-02T20:30:46.083Z","modified":null,"filter":{"type":"CAMPAIGN_FILTER","id":"0fbe863c063c4c88a35fd7f17e8a3df5"},"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":null,"searchCampaignInfo":null,"roleCompositionCampaignInfo":{"remediatorRef":{"type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"reviewerId":null,"reviewer":null,"roleIds":["b15d609fc5c8434b865fe552315fda8f"],"query":null,"description":null},"alerts":null,"totalCertifications":0,"completedCertifications":0,"sourcesWithOrphanEntitlements":null}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/campaigns","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"2c9079b270a266a60170a2779fcb0007","name":"Manager Campaign","description":"Everyone needs to be reviewed by their manager.","created":"2020-03-03T22:15:13.611Z","modified":"2020-03-03T22:20:12.674Z","deadline":"2020-03-15T00:00:00.456Z","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"status":"ACTIVE","filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create a campaign","description":{"content":"Creates a new Certification Campaign with the information provided in the request body.","type":"text/plain"},"url":{"path":["campaigns"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create a campaign + + + +Creates a new Certification Campaign with the information provided in the request body. + +
    Request Body required
      filter object
      + +Determines which items will be included in this campaign. The default campaign filter is used if this field is left blank. + +
      sourceOwnerCampaignInfo object
      + +Must be set only if the campaign type is SOURCE_OWNER. + +
      searchCampaignInfo object
      + +Must be set only if the campaign type is SEARCH. + +
      reviewer object
      + +If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP + +
      accessConstraints object[]
      + +**Possible values:** `<= 1000` + +
      + +Further reduces the scope of the campaign by excluding identities (from `query` or `identityIds`) that do not have this access. + +
      roleCompositionCampaignInfo object
      + +Optional configuration options for role composition campaigns. + +
      reviewer object
      + +If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP + +
      remediatorRef object
      + +This determines who remediation tasks will be assigned to. Remediation tasks are created for each revoke decision on items in the campaign. The only legal remediator type is 'IDENTITY', and the chosen identity must be a Role Admin or Org Admin. + +
      alerts object[]
      + +A list of errors and warnings that have accumulated. + +
      localizations object[]
      sourcesWithOrphanEntitlements object[]
      + +A list of sources in the campaign that contain \"orphan entitlements\" (entitlements without a corresponding Managed Attribute). An empty list indicates the campaign has no orphan entitlements. Null indicates there may be unknown orphan entitlements in the campaign (the campaign was created before this feature was implemented). + +
    + +Indicates that the campaign requested was successfully created and returns its representation. + +
    Schema
      filter object
      + +Determines which items will be included in this campaign. The default campaign filter is used if this field is left blank. + +
      sourceOwnerCampaignInfo object
      + +Must be set only if the campaign type is SOURCE_OWNER. + +
      searchCampaignInfo object
      + +Must be set only if the campaign type is SEARCH. + +
      reviewer object
      + +If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP + +
      accessConstraints object[]
      + +**Possible values:** `<= 1000` + +
      + +Further reduces the scope of the campaign by excluding identities (from `query` or `identityIds`) that do not have this access. + +
      roleCompositionCampaignInfo object
      + +Optional configuration options for role composition campaigns. + +
      reviewer object
      + +If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP + +
      remediatorRef object
      + +This determines who remediation tasks will be assigned to. Remediation tasks are created for each revoke decision on items in the campaign. The only legal remediator type is 'IDENTITY', and the chosen identity must be a Role Admin or Org Admin. + +
      alerts object[]
      + +A list of errors and warnings that have accumulated. + +
      localizations object[]
      sourcesWithOrphanEntitlements object[]
      + +A list of sources in the campaign that contain \"orphan entitlements\" (entitlements without a corresponding Managed Attribute). An empty list indicates the campaign has no orphan entitlements. Null indicates there may be unknown orphan entitlements in the campaign (the campaign was created before this feature was implemented). + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-common-access.api.mdx b/docs/sailpoint-api-beta/create-common-access.api.mdx new file mode 100644 index 000000000..682c1ef87 --- /dev/null +++ b/docs/sailpoint-api-beta/create-common-access.api.mdx @@ -0,0 +1,75 @@ +--- +id: create-common-access +sidebar_label: Create common access items +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createCommonAccess","tags":["IAI Common Access"],"description":"This API is used to add roles/access profiles to the list of common access for a customer. Requires authorization scope of iai:access-modeling:create","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"access":{"type":"object","properties":{"id":{"type":"string","description":"Common access ID"},"type":{"description":"Common access type (ROLE or ACCESS_PROFILE)","type":"string","enum":["ACCESS_PROFILE","ROLE"]},"name":{"type":"string","description":"Common access name"},"description":{"type":"string","description":"Common access description"},"ownerName":{"type":"string","description":"Common access owner name"},"ownerId":{"type":"string","description":"Common access owner ID"}}},"status":{"type":"string","enum":["CONFIRMED","DENIED"],"description":"State of common access item."}}}}}},"responses":{"202":{"description":"Returns details of the common access classification request.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Common Access Item ID"},"access":{"type":"object","properties":{"id":{"type":"string","description":"Common access ID"},"type":{"description":"Common access type (ROLE or ACCESS_PROFILE)","type":"string","enum":["ACCESS_PROFILE","ROLE"]},"name":{"type":"string","description":"Common access name"},"description":{"type":"string","description":"Common access description"},"ownerName":{"type":"string","description":"Common access owner name"},"ownerId":{"type":"string","description":"Common access owner ID"}}},"status":{"type":"string","enum":["CONFIRMED","DENIED"],"description":"State of common access item."},"lastUpdated":{"type":"string"},"reviewedByUser":{"type":"boolean"},"lastReviewed":{"type":"string"},"createdByUser":{"type":"string"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/common-access","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"access":{"id":"string","type":"ACCESS_PROFILE","name":"string","description":"string","ownerName":"string","ownerId":"string"},"status":"CONFIRMED"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create common access items","description":{"content":"This API is used to add roles/access profiles to the list of common access for a customer. Requires authorization scope of iai:access-modeling:create","type":"text/plain"},"url":{"path":["common-access"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create common access items + + + +This API is used to add roles/access profiles to the list of common access for a customer. Requires authorization scope of iai:access-modeling:create + +
    Request Body required
      access object
    + +Returns details of the common access classification request. + +
    Schema
      access object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-connector-rule.api.mdx b/docs/sailpoint-api-beta/create-connector-rule.api.mdx new file mode 100644 index 000000000..caca9913c --- /dev/null +++ b/docs/sailpoint-api-beta/create-connector-rule.api.mdx @@ -0,0 +1,96 @@ +--- +id: create-connector-rule +sidebar_label: Create Connector Rule +hide_title: true +hide_table_of_contents: true +api: {"tags":["Connector Rule Management"],"operationId":"createConnectorRule","description":"Creates a new connector rule.\nA token with ORG_ADMIN authority is required to call this API.","requestBody":{"required":true,"description":"The connector rule to create","content":{"application/json":{"schema":{"description":"ConnectorRuleCreateRequest","type":"object","required":["name","type","sourceCode"],"properties":{"name":{"type":"string","description":"the name of the rule","example":"WebServiceBeforeOperationRule"},"description":{"type":"string","description":"a description of the rule's purpose","example":"This rule does that"},"type":{"type":"string","enum":["BuildMap","ConnectorAfterCreate","ConnectorAfterDelete","ConnectorAfterModify","ConnectorBeforeCreate","ConnectorBeforeDelete","ConnectorBeforeModify","JDBCBuildMap","JDBCOperationProvisioning","JDBCProvision","PeopleSoftHRMSBuildMap","PeopleSoftHRMSOperationProvisioning","PeopleSoftHRMSProvision","RACFPermissionCustomization","SAPBuildMap","SapHrManagerRule","SapHrOperationProvisioning","SapHrProvision","SuccessFactorsOperationProvisioning","WebServiceAfterOperationRule","WebServiceBeforeOperationRule"],"description":"the type of rule","example":"BuildMap"},"signature":{"description":"The rule's function signature. Describes the rule's input arguments and output (if any)","type":"object","required":["input"],"properties":{"input":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"the name of the argument","example":"firstName"},"description":{"type":"string","description":"the description of the argument","example":"the first name of the identity"},"type":{"type":"string","description":"the programmatic type of the argument","example":"String"}},"required":["name"]}},"output":{"type":"object","properties":{"name":{"type":"string","description":"the name of the argument","example":"firstName"},"description":{"type":"string","description":"the description of the argument","example":"the first name of the identity"},"type":{"type":"string","description":"the programmatic type of the argument","example":"String"}},"required":["name"]}}},"sourceCode":{"description":"SourceCode","type":"object","required":["version","script"],"properties":{"version":{"type":"string","description":"the version of the code","example":"1.0"},"script":{"type":"string","description":"The code","example":"return \"Mr. \" + firstName;"}}},"attributes":{"type":"object","description":"a map of string to objects"}}}}}},"responses":{"201":{"description":"The created connector rule","content":{"application/json":{"schema":{"description":"ConnectorRuleResponse","allOf":[{"description":"ConnectorRuleCreateRequest","type":"object","required":["name","type","sourceCode"],"properties":{"name":{"type":"string","description":"the name of the rule","example":"WebServiceBeforeOperationRule"},"description":{"type":"string","description":"a description of the rule's purpose","example":"This rule does that"},"type":{"type":"string","enum":["BuildMap","ConnectorAfterCreate","ConnectorAfterDelete","ConnectorAfterModify","ConnectorBeforeCreate","ConnectorBeforeDelete","ConnectorBeforeModify","JDBCBuildMap","JDBCOperationProvisioning","JDBCProvision","PeopleSoftHRMSBuildMap","PeopleSoftHRMSOperationProvisioning","PeopleSoftHRMSProvision","RACFPermissionCustomization","SAPBuildMap","SapHrManagerRule","SapHrOperationProvisioning","SapHrProvision","SuccessFactorsOperationProvisioning","WebServiceAfterOperationRule","WebServiceBeforeOperationRule"],"description":"the type of rule","example":"BuildMap"},"signature":{"description":"The rule's function signature. Describes the rule's input arguments and output (if any)","type":"object","required":["input"],"properties":{"input":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"the name of the argument","example":"firstName"},"description":{"type":"string","description":"the description of the argument","example":"the first name of the identity"},"type":{"type":"string","description":"the programmatic type of the argument","example":"String"}},"required":["name"]}},"output":{"type":"object","properties":{"name":{"type":"string","description":"the name of the argument","example":"firstName"},"description":{"type":"string","description":"the description of the argument","example":"the first name of the identity"},"type":{"type":"string","description":"the programmatic type of the argument","example":"String"}},"required":["name"]}}},"sourceCode":{"description":"SourceCode","type":"object","required":["version","script"],"properties":{"version":{"type":"string","description":"the version of the code","example":"1.0"},"script":{"type":"string","description":"The code","example":"return \"Mr. \" + firstName;"}}},"attributes":{"type":"object","description":"a map of string to objects"}}},{"type":"object","required":["id","created"],"properties":{"id":{"type":"string","description":"the ID of the rule","example":"8113d48c0b914f17b4c6072d4dcb9dfe"},"created":{"type":"string","description":"an ISO 8601 UTC timestamp when this rule was created","example":"021-07-22T15:59:23Z"},"modified":{"type":"string","description":"an ISO 8601 UTC timestamp when this rule was last modified","example":"021-07-22T15:59:23Z"}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:connector-rule:write"]}],"method":"post","path":"/connector-rules","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"WebServiceBeforeOperationRule","description":"This rule does that","type":"BuildMap","signature":{"input":[{"name":"firstName","description":"the first name of the identity","type":"String"}],"output":{"name":"firstName","description":"the first name of the identity","type":"String"}},"sourceCode":{"version":"1.0","script":"return \"Mr. \" + firstName;"},"attributes":{}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create Connector Rule","description":{"content":"Creates a new connector rule.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["connector-rules"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Connector Rule + + + +Creates a new connector rule. +A token with ORG_ADMIN authority is required to call this API. + +
    Request Body required
    + +The connector rule to create + +
      signature object
      + +The rule's function signature. Describes the rule's input arguments and output (if any) + +
      input object[]
      output object
      sourceCode object
      + +SourceCode + +
    + +The created connector rule + +
    Schema
      signature object
      + +The rule's function signature. Describes the rule's input arguments and output (if any) + +
      input object[]
      output object
      sourceCode object
      + +SourceCode + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-custom-password-instructions.api.mdx b/docs/sailpoint-api-beta/create-custom-password-instructions.api.mdx new file mode 100644 index 000000000..469f825c7 --- /dev/null +++ b/docs/sailpoint-api-beta/create-custom-password-instructions.api.mdx @@ -0,0 +1,67 @@ +--- +id: create-custom-password-instructions +sidebar_label: Create Custom Password Instructions +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createCustomPasswordInstructions","tags":["Custom Password Instructions"],"description":"This API creates the custom password instructions for the specified page ID. A token with ORG_ADMIN authority is required to call this API.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"pageId":{"type":"string","description":"The page ID that represents the page for forget user name, reset password and unlock account flow.","enum":["change-password:enter-password","change-password:finish","flow-selection:select","forget-username:user-email","mfa:enter-code","mfa:enter-kba","mfa:select","reset-password:enter-password","reset-password:enter-username","reset-password:finish","unlock-account:enter-username","unlock-account:finish"]},"pageContent":{"type":"string","description":"The custom instructions for the specified page. Allow basic HTML format and maximum length is 1000 characters. The custom instructions will be sanitized to avoid attacks. If the customization text includes a link, like
    ... clicking on this will open the link on the current browser page. If you want your link to be redirected to a different page, please redirect it to \"_blank\" like this: link. This will open a new tab when the link is clicked. Notice we're only supporting _blank as the redirection target."},"locale":{"type":"string","example":"en","description":"The locale for the custom instructions, a BCP47 language tag. The default value is \\\"default\\\"."}}},"example":{"pageId":"reset-password:enter-password","pageContent":"See company password policies for details by clicking here"}}}},"responses":{"200":{"description":"Reference to the custom password instructions.","content":{"application/json":{"schema":{"type":"object","properties":{"pageId":{"type":"string","description":"The page ID that represents the page for forget user name, reset password and unlock account flow.","enum":["change-password:enter-password","change-password:finish","flow-selection:select","forget-username:user-email","mfa:enter-code","mfa:enter-kba","mfa:select","reset-password:enter-password","reset-password:enter-username","reset-password:finish","unlock-account:enter-username","unlock-account:finish"]},"pageContent":{"type":"string","description":"The custom instructions for the specified page. Allow basic HTML format and maximum length is 1000 characters. The custom instructions will be sanitized to avoid attacks. If the customization text includes a link, like ... clicking on this will open the link on the current browser page. If you want your link to be redirected to a different page, please redirect it to \"_blank\" like this: link. This will open a new tab when the link is clicked. Notice we're only supporting _blank as the redirection target."},"locale":{"type":"string","example":"en","description":"The locale for the custom instructions, a BCP47 language tag. The default value is \\\"default\\\"."}}},"example":{"pageId":"reset-password:enter-password","locale":"default","pageContent":"See company password policies for details by clicking here"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/custom-password-instructions","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"pageId":"change-password:enter-password","pageContent":"string","locale":"en"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create Custom Password Instructions","description":{"content":"This API creates the custom password instructions for the specified page ID. A token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["custom-password-instructions"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Custom Password Instructions + + + +This API creates the custom password instructions for the specified page ID. A token with ORG_ADMIN authority is required to call this API. + +
    Request Body required
      ... clicking on this will open the link on the current browser page. If you want your link to be redirected to a different page, please redirect it to \"_blank\" like this: link. This will open a new tab when the link is clicked. Notice we're only supporting _blank as the redirection target."} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}>
    + +Reference to the custom password instructions. + +
    Schema
      ... clicking on this will open the link on the current browser page. If you want your link to be redirected to a different page, please redirect it to \"_blank\" like this: link. This will open a new tab when the link is clicked. Notice we're only supporting _blank as the redirection target."} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}>
    here\"\n}"}>
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-identity-profile.api.mdx b/docs/sailpoint-api-beta/create-identity-profile.api.mdx new file mode 100644 index 000000000..03153dc4a --- /dev/null +++ b/docs/sailpoint-api-beta/create-identity-profile.api.mdx @@ -0,0 +1,108 @@ +--- +id: create-identity-profile +sidebar_label: Create an Identity Profile +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createIdentityProfile","description":"This creates an Identity Profile\nA token with ORG_ADMIN authority is required to call this API to create an Identity Profile.","tags":["Identity Profiles"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","format":"date-time","readOnly":true,"example":true},"modified":{"description":"Last modification date of the Object","type":"string","format":"date-time","readOnly":true,"example":true}}},{"type":"object","properties":{"description":{"type":"string","description":"The description of the Identity Profile.","example":"My custom flat file profile"},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The owner of the Identity Profile."},"priority":{"type":"integer","format":"int64","description":"The priority for an Identity Profile.","example":10},"authoritativeSource":{"type":"object","properties":{"type":{"type":"string","enum":["SOURCE"],"description":"Type of the object to which this reference applies","example":"SOURCE"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c9180835d191a86015d28455b4b232a"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"HR Active Directory"}},"description":"The authoritative source for this Identity Profile."},"identityRefreshRequired":{"type":"boolean","description":"True if a identity refresh is needed. Typically triggered when a change on the source has been made","example":true},"identityCount":{"type":"integer","description":"The number of identities that belong to the Identity Profile.","format":"int32","example":8},"identityAttributeConfig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"If the profile or mapping is enabled","example":true},"attributeTransforms":{"type":"array","items":{"type":"object","properties":{"identityAttributeName":{"type":"string","description":"Name of the identity attribute","example":"email"},"transformDefinition":{"description":"The seaspray transformation definition","type":"object","properties":{"type":{"type":"string","description":"The type of the transform definition.","example":"accountAttribute"},"attributes":{"type":"object","additionalProperties":{"type":"object"},"description":"Arbitrary key-value pairs to store any metadata for the object","example":{"attributeName":"e-mail","sourceName":"MySource","sourceId":"2c9180877a826e68017a8c0b03da1a53"}}}}}}}}},"identityExceptionReportReference":{"type":"object","properties":{"taskResultId":{"type":"string","format":"uuid","description":"The id of the task result","example":"2c918086795cd09201795d5f7d7533df"},"reportName":{"type":"string","example":"My annual report","description":"The name of the report"}}},"hasTimeBasedAttr":{"description":"Indicates the value of requiresPeriodicRefresh attribute for the Identity Profile.","type":"boolean","example":true}}}]}}}},"responses":{"201":{"description":"The created Identity Profile","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","format":"date-time","readOnly":true,"example":true},"modified":{"description":"Last modification date of the Object","type":"string","format":"date-time","readOnly":true,"example":true}}},{"type":"object","properties":{"description":{"type":"string","description":"The description of the Identity Profile.","example":"My custom flat file profile"},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The owner of the Identity Profile."},"priority":{"type":"integer","format":"int64","description":"The priority for an Identity Profile.","example":10},"authoritativeSource":{"type":"object","properties":{"type":{"type":"string","enum":["SOURCE"],"description":"Type of the object to which this reference applies","example":"SOURCE"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c9180835d191a86015d28455b4b232a"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"HR Active Directory"}},"description":"The authoritative source for this Identity Profile."},"identityRefreshRequired":{"type":"boolean","description":"True if a identity refresh is needed. Typically triggered when a change on the source has been made","example":true},"identityCount":{"type":"integer","description":"The number of identities that belong to the Identity Profile.","format":"int32","example":8},"identityAttributeConfig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"If the profile or mapping is enabled","example":true},"attributeTransforms":{"type":"array","items":{"type":"object","properties":{"identityAttributeName":{"type":"string","description":"Name of the identity attribute","example":"email"},"transformDefinition":{"description":"The seaspray transformation definition","type":"object","properties":{"type":{"type":"string","description":"The type of the transform definition.","example":"accountAttribute"},"attributes":{"type":"object","additionalProperties":{"type":"object"},"description":"Arbitrary key-value pairs to store any metadata for the object","example":{"attributeName":"e-mail","sourceName":"MySource","sourceId":"2c9180877a826e68017a8c0b03da1a53"}}}}}}}}},"identityExceptionReportReference":{"type":"object","properties":{"taskResultId":{"type":"string","format":"uuid","description":"The id of the task result","example":"2c918086795cd09201795d5f7d7533df"},"reportName":{"type":"string","example":"My annual report","description":"The name of the report"}}},"hasTimeBasedAttr":{"description":"Indicates the value of requiresPeriodicRefresh attribute for the Identity Profile.","type":"boolean","example":true}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:identity-profile:create"]}],"method":"post","path":"/identity-profiles","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"aName","description":"My custom flat file profile","owner":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"priority":10,"authoritativeSource":{"type":"SOURCE","id":"2c9180835d191a86015d28455b4b232a","name":"HR Active Directory"},"identityRefreshRequired":true,"identityCount":8,"identityAttributeConfig":{"enabled":true,"attributeTransforms":[{"identityAttributeName":"email","transformDefinition":{"type":"accountAttribute","attributes":{"attributeName":"e-mail","sourceName":"MySource","sourceId":"2c9180877a826e68017a8c0b03da1a53"}}}]},"identityExceptionReportReference":{"taskResultId":"2c918086795cd09201795d5f7d7533df","reportName":"My annual report"},"hasTimeBasedAttr":true},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create an Identity Profile","description":{"content":"This creates an Identity Profile\nA token with ORG_ADMIN authority is required to call this API to create an Identity Profile.","type":"text/plain"},"url":{"path":["identity-profiles"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create an Identity Profile + + + +This creates an Identity Profile +A token with ORG_ADMIN authority is required to call this API to create an Identity Profile. + +
    Request Body required
      owner object
      + +The owner of the Identity Profile. + +
      authoritativeSource object
      + +The authoritative source for this Identity Profile. + +
      identityAttributeConfig object
      attributeTransforms object[]
      transformDefinition object
      + +The seaspray transformation definition + +
      attributes object
      + +Arbitrary key-value pairs to store any metadata for the object + +
    • property name* object
    • identityExceptionReportReference object
    + +The created Identity Profile + +
    Schema
      owner object
      + +The owner of the Identity Profile. + +
      authoritativeSource object
      + +The authoritative source for this Identity Profile. + +
      identityAttributeConfig object
      attributeTransforms object[]
      transformDefinition object
      + +The seaspray transformation definition + +
      attributes object
      + +Arbitrary key-value pairs to store any metadata for the object + +
    • property name* object
    • identityExceptionReportReference object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-notification-template.api.mdx b/docs/sailpoint-api-beta/create-notification-template.api.mdx new file mode 100644 index 000000000..1be643418 --- /dev/null +++ b/docs/sailpoint-api-beta/create-notification-template.api.mdx @@ -0,0 +1,75 @@ +--- +id: create-notification-template +sidebar_label: Create Notification Template +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createNotificationTemplate","tags":["Notifications"],"description":"This creates a template for your site","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","example":"cloud_manual_work_item_summary"},"name":{"type":"string","example":"Task Manager Subscription"},"medium":{"type":"string","description":"The message medium. More mediums may be added in the future.","enum":["EMAIL","PHONE","SMS","SLACK","TEAMS"],"example":"EMAIL"},"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en"},"subject":{"type":"string","example":"You have $numberOfPendingTasks $taskTasks to complete in ${__global.productName}."},"header":{"type":"string","example":"Dear $__recipient.name,
    "},"body":{"type":"string","example":"Please go to the task manager"},"footer":{"type":"string","example":"
    Thanks,
    The $__global.productName Team
    "},"from":{"type":"string","example":"$__global.emailFromAddress"},"replyTo":{"type":"string","example":"$__global.emailFromAddress"},"description":{"type":"string","example":"Daily digest - sent if number of outstanding tasks for task owner > 0"},"id":{"type":"string","example":"c17bea3a-574d-453c-9e04-4365fbf5af0b","description":"This is auto-generated."},"created":{"type":"string","format":"date-time","description":"The time when this template is created. This is auto-generated.","example":"2020-01-01T00:00:00.000000Z"},"modified":{"type":"string","format":"date-time","description":"The time when this template was last modified. This is auto-generated.","example":"2020-01-01T00:00:00.000000Z"}},"required":["key","medium","locale"]}}}},"responses":{"200":{"description":"A template object for your site","content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","example":"cloud_manual_work_item_summary"},"name":{"type":"string","example":"Task Manager Subscription"},"medium":{"type":"string","description":"The message medium. More mediums may be added in the future.","enum":["EMAIL","PHONE","SMS","SLACK","TEAMS"],"example":"EMAIL"},"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en"},"subject":{"type":"string","example":"You have $numberOfPendingTasks $taskTasks to complete in ${__global.productName}."},"header":{"type":"string","example":"Dear $__recipient.name,
    "},"body":{"type":"string","example":"Please go to the task manager"},"footer":{"type":"string","example":"
    Thanks,
    The $__global.productName Team
    "},"from":{"type":"string","example":"$__global.emailFromAddress"},"replyTo":{"type":"string","example":"$__global.emailFromAddress"},"description":{"type":"string","example":"Daily digest - sent if number of outstanding tasks for task owner > 0"},"id":{"type":"string","example":"c17bea3a-574d-453c-9e04-4365fbf5af0b","description":"This is auto-generated."},"created":{"type":"string","format":"date-time","description":"The time when this template is created. This is auto-generated.","example":"2020-01-01T00:00:00.000000Z"},"modified":{"type":"string","format":"date-time","description":"The time when this template was last modified. This is auto-generated.","example":"2020-01-01T00:00:00.000000Z"}},"required":["key","medium","locale"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/notification-templates","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"key":"cloud_manual_work_item_summary","name":"Task Manager Subscription","medium":"EMAIL","locale":"en","subject":"You have $numberOfPendingTasks $taskTasks to complete in ${__global.productName}.","header":"Dear $__recipient.name,
    ","body":"Please go to the task manager","footer":"
    Thanks,
    The $__global.productName Team
    ","from":"$__global.emailFromAddress","replyTo":"$__global.emailFromAddress","description":"Daily digest - sent if number of outstanding tasks for task owner > 0","id":"c17bea3a-574d-453c-9e04-4365fbf5af0b","created":"2020-01-01T00:00:00.000000Z","modified":"2020-01-01T00:00:00.000000Z"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create Notification Template","description":{"content":"This creates a template for your site","type":"text/plain"},"url":{"path":["notification-templates"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Notification Template + + + +This creates a template for your site + +
    Request Body required
    + +A template object for your site + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-oauth-client.api.mdx b/docs/sailpoint-api-beta/create-oauth-client.api.mdx new file mode 100644 index 000000000..7599dfec0 --- /dev/null +++ b/docs/sailpoint-api-beta/create-oauth-client.api.mdx @@ -0,0 +1,77 @@ +--- +id: create-oauth-client +sidebar_label: Create OAuth Client +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createOauthClient","tags":["OAuth Clients"],"description":"This creates an OAuth client.\nRequest will require the following security scope:\n- 'idn:oathkeeper-client:create' - 'idn:oathkeeper-internal-client:create'","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"businessName":{"type":"string","description":"The name of the business the API Client should belong to","example":"Acme-Solar"},"homepageUrl":{"type":"string","description":"The homepage URL associated with the owner of the API Client","example":"http://localhost:12345"},"name":{"type":"string","description":"A human-readable name for the API Client","example":"Demo API Client"},"description":{"type":"string","description":"A description of the API Client","example":"An API client used for the authorization_code, refresh_token, and client_credentials flows"},"accessTokenValiditySeconds":{"type":"string","description":"The number of seconds an access token generated for this API Client is valid for","example":750},"refreshTokenValiditySeconds":{"type":"string","description":"The number of seconds a refresh token generated for this API Client is valid for","example":86400},"redirectUris":{"type":"array","items":{"type":"string"},"description":"A list of the approved redirect URIs. Provide one or more URIs when assigning the AUTHORIZATION_CODE grant type to a new OAuth Client.","example":["http://localhost:12345"]},"grantTypes":{"type":"array","items":{"description":"OAuth2 Grant Type","type":"string","example":"CLIENT_CREDENTIALS","enum":["CLIENT_CREDENTIALS","AUTHORIZATION_CODE","REFRESH_TOKEN"]},"description":"A list of OAuth 2.0 grant types this API Client can be used with","example":["AUTHORIZATION_CODE","CLIENT_CREDENTIALS","REFRESH_TOKEN"]},"accessType":{"description":"The access type (online or offline) of this API Client","example":"OFFLINE","type":"string","enum":["ONLINE","OFFLINE"]},"type":{"description":"The type of the API Client (public or confidential)","example":"CONFIDENTIAL","type":"string","enum":["CONFIDENTIAL","PUBLIC"]},"internal":{"type":"boolean","description":"An indicator of whether the API Client can be used for requests internal within the product.","example":false},"enabled":{"type":"boolean","description":"An indicator of whether the API Client is enabled for use","example":true},"strongAuthSupported":{"type":"boolean","description":"An indicator of whether the API Client supports strong authentication","example":false},"claimsSupported":{"type":"boolean","description":"An indicator of whether the API Client supports the serialization of SAML claims when used with the authorization_code flow","example":false}},"required":["name","description","accessTokenValiditySeconds","grantTypes","accessType","enabled"]}}}},"responses":{"200":{"description":"Request succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the OAuth client","example":"2c9180835d2e5168015d32f890ca1581"},"secret":{"type":"string","description":"Secret of the OAuth client (This field is only returned on the intial create call.)","example":"5c32dd9b21adb51c77794d46e71de117a1d0ddb36a7ff941fa28014ab7de2cf3"},"businessName":{"type":"string","description":"The name of the business the API Client should belong to","example":"Acme-Solar"},"homepageUrl":{"type":"string","description":"The homepage URL associated with the owner of the API Client","example":"http://localhost:12345"},"name":{"type":"string","description":"A human-readable name for the API Client","example":"Demo API Client"},"description":{"type":"string","description":"A description of the API Client","example":"An API client used for the authorization_code, refresh_token, and client_credentials flows"},"accessTokenValiditySeconds":{"type":"string","description":"The number of seconds an access token generated for this API Client is valid for","example":750},"refreshTokenValiditySeconds":{"type":"string","description":"The number of seconds a refresh token generated for this API Client is valid for","example":86400},"redirectUris":{"type":"array","items":{"type":"string"},"description":"A list of the approved redirect URIs used with the authorization_code flow","example":["http://localhost:12345"]},"grantTypes":{"type":"array","items":{"description":"OAuth2 Grant Type","type":"string","example":"CLIENT_CREDENTIALS","enum":["CLIENT_CREDENTIALS","AUTHORIZATION_CODE","REFRESH_TOKEN"]},"description":"A list of OAuth 2.0 grant types this API Client can be used with","example":["AUTHORIZATION_CODE","CLIENT_CREDENTIALS","REFRESH_TOKEN"]},"accessType":{"description":"The access type (online or offline) of this API Client","example":"OFFLINE","type":"string","enum":["ONLINE","OFFLINE"]},"type":{"description":"The type of the API Client (public or confidential)","example":"CONFIDENTIAL","type":"string","enum":["CONFIDENTIAL","PUBLIC"]},"internal":{"type":"boolean","description":"An indicator of whether the API Client can be used for requests internal to IDN","example":false},"enabled":{"type":"boolean","description":"An indicator of whether the API Client is enabled for use","example":true},"strongAuthSupported":{"type":"boolean","description":"An indicator of whether the API Client supports strong authentication","example":false},"claimsSupported":{"type":"boolean","description":"An indicator of whether the API Client supports the serialization of SAML claims when used with the authorization_code flow","example":false},"created":{"type":"string","format":"date-time","description":"The date and time, down to the millisecond, when the API Client was created","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","description":"The date and time, down to the millisecond, when the API Client was last updated","example":"2018-06-25T20:22:28.104Z"}},"required":["id","secret","businessName","homepageUrl","name","description","accessTokenValiditySeconds","refreshTokenValiditySeconds","redirectUris","grantTypes","accessType","type","internal","enabled","strongAuthSupported","claimsSupported","created","modified"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/oauth-clients","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"businessName":"Acme-Solar","homepageUrl":"http://localhost:12345","name":"Demo API Client","description":"An API client used for the authorization_code, refresh_token, and client_credentials flows","accessTokenValiditySeconds":750,"refreshTokenValiditySeconds":86400,"redirectUris":["http://localhost:12345"],"grantTypes":["AUTHORIZATION_CODE","CLIENT_CREDENTIALS","REFRESH_TOKEN"],"accessType":"OFFLINE","type":"CONFIDENTIAL","internal":false,"enabled":true,"strongAuthSupported":false,"claimsSupported":false},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create OAuth Client","description":{"content":"This creates an OAuth client.\nRequest will require the following security scope:\n- 'idn:oathkeeper-client:create' - 'idn:oathkeeper-internal-client:create'","type":"text/plain"},"url":{"path":["oauth-clients"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create OAuth Client + + + +This creates an OAuth client. +Request will require the following security scope: +- 'idn:oathkeeper-client:create' - 'idn:oathkeeper-internal-client:create' + +
    Request Body required
    + +Request succeeded. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-password-org-config.api.mdx b/docs/sailpoint-api-beta/create-password-org-config.api.mdx new file mode 100644 index 000000000..3e082fe0b --- /dev/null +++ b/docs/sailpoint-api-beta/create-password-org-config.api.mdx @@ -0,0 +1,55 @@ +--- +id: create-password-org-config +sidebar_label: Create Password Org Config +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createPasswordOrgConfig","tags":["Password Configuration"],"description":"This API creates the password org config. Unspecified fields will use default value. Requires ORG_ADMIN, API role or authorization scope of 'idn:password-org-config:write'","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"customInstructionsEnabled":{"type":"boolean","description":"Indicator whether custom password instructions feature is enabled. The default value is false."},"digitTokenEnabled":{"type":"boolean","description":"Indicator whether \"digit token\" feature is enabled. The default value is false.","example":true},"digitTokenDurationMinutes":{"type":"integer","description":"The duration of \"digit token\" in minutes. The default value is 5.","example":10},"digitTokenLength":{"type":"integer","description":"The length of \"digit token\". The default value is 6.","example":9}}},"example":{"customInstructionsEnabled":true,"digitTokenEnabled":true,"digitTokenDurationMinutes":12,"digitTokenLength":9}}}},"responses":{"200":{"description":"Reference to the password org config.","content":{"application/json":{"schema":{"type":"object","properties":{"customInstructionsEnabled":{"type":"boolean","description":"Indicator whether custom password instructions feature is enabled. The default value is false."},"digitTokenEnabled":{"type":"boolean","description":"Indicator whether \"digit token\" feature is enabled. The default value is false.","example":true},"digitTokenDurationMinutes":{"type":"integer","description":"The duration of \"digit token\" in minutes. The default value is 5.","example":10},"digitTokenLength":{"type":"integer","description":"The length of \"digit token\". The default value is 6.","example":9}}},"example":{"customInstructionsEnabled":true,"digitTokenDurationMinutes":9,"digitTokenEnabled":true,"digitTokenLength":12}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/password-org-config","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"customInstructionsEnabled":true,"digitTokenEnabled":true,"digitTokenDurationMinutes":10,"digitTokenLength":9},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create Password Org Config","description":{"content":"This API creates the password org config. Unspecified fields will use default value. Requires ORG_ADMIN, API role or authorization scope of 'idn:password-org-config:write'","type":"text/plain"},"url":{"path":["password-org-config"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Password Org Config + + + +This API creates the password org config. Unspecified fields will use default value. Requires ORG_ADMIN, API role or authorization scope of 'idn:password-org-config:write' + +
    Request Body required
    + +Reference to the password org config. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-password-sync-group.api.mdx b/docs/sailpoint-api-beta/create-password-sync-group.api.mdx new file mode 100644 index 000000000..b4b55dddb --- /dev/null +++ b/docs/sailpoint-api-beta/create-password-sync-group.api.mdx @@ -0,0 +1,67 @@ +--- +id: create-password-sync-group +sidebar_label: Create Password Sync Group +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createPasswordSyncGroup","tags":["Password Sync Groups"],"description":"This API creates a password sync group based on the specifications provided. A token with ORG_ADMIN authority is required to call this API.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the sync group","example":"6881f631-3bd5-4213-9c75-8e05cc3e35dd"},"name":{"description":"Name of the sync group","type":"string","example":"Password Sync Group 1"},"passwordPolicyId":{"type":"string","example":"2c91808d744ba0ce01746f93b6204501"},"sourceIds":{"type":"array","description":"List of password managed sources IDs","items":{"type":"string"},"example":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"]}}},"example":{"name":"Password Sync Group 2","passwordPolicyId":"2c91808d744ba0ce01746f93b6204501","sourceIds":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"]}}}},"responses":{"200":{"description":"Reference to the password sync group.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the sync group","example":"6881f631-3bd5-4213-9c75-8e05cc3e35dd"},"name":{"description":"Name of the sync group","type":"string","example":"Password Sync Group 1"},"passwordPolicyId":{"type":"string","example":"2c91808d744ba0ce01746f93b6204501"},"sourceIds":{"type":"array","description":"List of password managed sources IDs","items":{"type":"string"},"example":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"]}}},"example":{"id":"6881f631-3bd5-4213-9c75-8e05cc3e35dd","name":"Password Sync Group 2","passwordPolicyId":"2c91808d744ba0ce01746f93b6204501","sourceIds":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/password-sync-groups","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"6881f631-3bd5-4213-9c75-8e05cc3e35dd","name":"Password Sync Group 1","passwordPolicyId":"2c91808d744ba0ce01746f93b6204501","sourceIds":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create Password Sync Group","description":{"content":"This API creates a password sync group based on the specifications provided. A token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["password-sync-groups"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Password Sync Group + + + +This API creates a password sync group based on the specifications provided. A token with ORG_ADMIN authority is required to call this API. + +
    Request Body required
    + +Reference to the password sync group. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-personal-access-token.api.mdx b/docs/sailpoint-api-beta/create-personal-access-token.api.mdx new file mode 100644 index 000000000..f97b2d789 --- /dev/null +++ b/docs/sailpoint-api-beta/create-personal-access-token.api.mdx @@ -0,0 +1,87 @@ +--- +id: create-personal-access-token +sidebar_label: Create Personal Access Token +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createPersonalAccessToken","tags":["Personal Access Tokens"],"description":"This creates a personal access token.

    Any of the following rights are required to access this resource:
      \n
    • idn:my-personal-access-tokens:create
    • \n
    • idn:all-personal-access-tokens:create
    • \n
    • idn:managed-personal-access-tokens:create
    • \n
    ","requestBody":{"description":"Name and scope of personal access token.","required":true,"content":{"application/json":{"schema":{"type":"object","description":"Object for specifying the name of a personal access token to create","properties":{"name":{"type":"string","description":"The name of the personal access token (PAT) to be created. Cannot be the same as another PAT owned by the user for whom this PAT is being created.","example":"NodeJS Integration"}},"required":["name"]}}}},"responses":{"200":{"description":"Created. Note - this is the only time Personal Access Tokens' secret attribute will be displayed.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the personal access token (to be used as the username for Basic Auth).","example":"86f1dc6fe8f54414950454cbb11278fa"},"secret":{"type":"string","description":"The secret of the personal access token (to be used as the password for Basic Auth).","example":"1d1bef2b9f426383447f64f69349fc7cac176042578d205c256ba3f37c59adb9"},"name":{"type":"string","description":"The name of the personal access token. Cannot be the same as other personal access tokens owned by a user.","example":"NodeJS Integration"},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Details about the owner of the personal access token."},"created":{"type":"string","format":"date-time","description":"The date and time, down to the millisecond, when this personal access token was created.","example":"2017-07-11T18:45:37.098Z"}},"required":["id","secret","name","owner","created"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/personal-access-tokens","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"NodeJS Integration"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create Personal Access Token","description":{"content":"This creates a personal access token.

    Any of the following rights are required to access this resource:
      \n
    • idn:my-personal-access-tokens:create
    • \n
    • idn:all-personal-access-tokens:create
    • \n
    • idn:managed-personal-access-tokens:create
    • \n
    ","type":"text/plain"},"url":{"path":["personal-access-tokens"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Personal Access Token + + + +This creates a personal access token. </br> </br> Any of the following rights are required to access this resource: <ul> + <li>idn:my-personal-access-tokens:create</li> + <li>idn:all-personal-access-tokens:create</li> + <li>idn:managed-personal-access-tokens:create</li> +</ul> + +
    Request Body required
    + +Name and scope of personal access token. + +
    + +Created. Note - this is the only time Personal Access Tokens' secret attribute will be displayed. + +
    Schema
      owner object
      + +Details about the owner of the personal access token. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-potential-role-provision-request.api.mdx b/docs/sailpoint-api-beta/create-potential-role-provision-request.api.mdx new file mode 100644 index 000000000..04827ca08 --- /dev/null +++ b/docs/sailpoint-api-beta/create-potential-role-provision-request.api.mdx @@ -0,0 +1,91 @@ +--- +id: create-potential-role-provision-request +sidebar_label: Create request to provision a potential role into an actual role. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createPotentialRoleProvisionRequest","tags":["IAI Role Mining"],"description":"This method starts a job to provision a potential role","parameters":[{"in":"path","name":"sessionId","schema":{"type":"string"},"required":true,"description":"The role mining session id","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"path","name":"potentialRoleId","schema":{"type":"string"},"required":true,"description":"A potential role id in a role mining session","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"query","name":"min-entitlement-popularity","description":"Minimum popularity required for an entitlement to be included in the provisioned role.","required":false,"style":"form","explode":true,"schema":{"type":"integer","default":0,"minimum":0,"maximum":100}},{"in":"query","name":"include-common-access","description":"Boolean determining whether common access entitlements will be included in the provisioned role.","required":false,"style":"form","explode":true,"schema":{"type":"boolean","default":true}}],"requestBody":{"description":"Required information to create a new role","content":{"application/json":{"schema":{"type":"object","properties":{"roleName":{"type":"string","description":"Name of the new role being created","example":"Finance - Accounting"},"roleDescription":{"type":"string","description":"Short description of the new role being created","example":"General access for accounting department"},"ownerId":{"type":"string","description":"ID of the identity that will own this role","example":"2b568c65bc3c4c57a43bd97e3a8e41"}},"example":{"roleName":"Finance - Accounting","roleDescription":"General access for accounting department","ownerId":"2b568c65bc3c4c57a43bd97e3a8e41"}}}}},"responses":{"202":{"description":"Accepted. Returns a potential role summary including the status of the provison request","content":{"application/json":{"schema":{"type":"object","properties":{"potentialRoleRef":{"description":"Details about the potential role","type":"object","properties":{"id":{"type":"string","description":"Id of the potential role"},"name":{"type":"string","description":"Name of the potential role"}}},"identityCount":{"type":"integer","description":"The number of identities in a potential role.","example":25},"entitlementCount":{"type":"integer","description":"The number of entitlements in a potential role.","example":15},"identityGroupStatus":{"type":"string","description":"The status for this identity group which can be \"REQUESTED\" or \"OBTAINED\"","example":"OBTAINED"},"provisionState":{"description":"The status of provisioning for this potential role. Can be \"POTENTIAL\", \"PENDING\", \"FAILED\", or \"COMPLETE\".","example":"PENDING","type":"string","enum":["POTENTIAL","PENDING","COMPLETE","FAILED"]},"roleId":{"type":"string","description":"ID of the provisioned role in IIQ or IDN. Null if this potential role has not been provisioned.","example":"2a4be6fbcf3c4e66b95a0c15ffd591"},"density":{"type":"integer","description":"The density metric (0-100) of this potential role. Higher density values indicate higher similarity amongst the identities.","example":90},"freshness":{"type":"integer","description":"The freshness metric (0-100) of this potential role. Higher freshness values indicate this potential role is more distinctive compared to existing roles.","example":70},"quality":{"type":"integer","description":"The quality metric (0-100) of this potential role. Higher quality values indicate this potential role has high density and freshness.","example":80}},"example":{"potentialRoleRef":{"id":"dd4c13c6-8237-4753-bfb7-f627e489f9ec","name":"Potential Role - dd4c13"},"identityCount":"25","entitlementCount":"15","identityGroupStatus":"OBTAINED","provisionState":"PENDING","roleId":"2a4be6fbcf3c4e66b95a0c15ffd591"}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/provision","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"roleName":"Finance - Accounting","roleDescription":"General access for accounting department","ownerId":"2b568c65bc3c4c57a43bd97e3a8e41"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create request to provision a potential role into an actual role.","description":{"content":"This method starts a job to provision a potential role","type":"text/plain"},"url":{"path":["role-mining-sessions",":sessionId","potential-roles",":potentialRoleId","provision"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Minimum popularity required for an entitlement to be included in the provisioned role.","type":"text/plain"},"key":"min-entitlement-popularity","value":""},{"disabled":false,"description":{"content":"Boolean determining whether common access entitlements will be included in the provisioned role.","type":"text/plain"},"key":"include-common-access","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The role mining session id","type":"text/plain"},"type":"any","value":"","key":"sessionId"},{"disabled":false,"description":{"content":"(Required) A potential role id in a role mining session","type":"text/plain"},"type":"any","value":"","key":"potentialRoleId"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create request to provision a potential role into an actual role. + + + +This method starts a job to provision a potential role + +
    Path Parameters
    Query Parameters
    Request Body
    + +Required information to create a new role + +
    + +Accepted. Returns a potential role summary including the status of the provison request + +
    Schema
      potentialRoleRef object
      + +Details about the potential role + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-provisioning-policy.api.mdx b/docs/sailpoint-api-beta/create-provisioning-policy.api.mdx new file mode 100644 index 000000000..245bb5937 --- /dev/null +++ b/docs/sailpoint-api-beta/create-provisioning-policy.api.mdx @@ -0,0 +1,88 @@ +--- +id: create-provisioning-policy +sidebar_label: Create Provisioning Policy +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createProvisioningPolicy","tags":["Sources"],"description":"This API generates a create policy/template based on field value transforms. This API is intended for use when setting up JDBC Provisioning type sources, but it will also work on other source types.\nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:provisioning-policy:create"]}],"parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source id","example":"2c9180835d191a86015d28455b4a2329"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"usageType":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"userName"},"transform":{"type":"object","description":"The transform to apply to the field","example":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"default":{}},"attributes":{"type":"object","description":"Attributes required for the transform","example":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"}},"type":{"type":"string","description":"The type of the attribute.","example":"string"},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","default":false,"example":false}}}}}},"examples":{"Create Account Provisioning Policy":{"value":{"name":"Account","description":"Account Provisioning Policy","usageType":"CREATE","fields":[{"name":"displayName","transform":{"type":"identityAttribute","attributes":{"name":"displayName"}},"attributes":{},"isRequired":false,"type":"string","isMultiValued":false},{"name":"distinguishedName","transform":{"type":"usernameGenerator","attributes":{"sourceCheck":true,"patterns":["CN=$fi $ln,OU=zzUsers,OU=Demo,DC=seri,DC=sailpointdemo,DC=com","CN=$fti $ln,OU=zzUsers,OU=Demo,DC=seri,DC=sailpointdemo,DC=com","CN=$fn $ln,OU=zzUsers,OU=Demo,DC=seri,DC=sailpointdemo,DC=com","CN=$fn$ln${uniqueCounter},OU=zzUsers,OU=Demo,DC=seri,DC=sailpointdemo,DC=com"],"fn":{"type":"identityAttribute","attributes":{"name":"firstname"}},"ln":{"type":"identityAttribute","attributes":{"name":"lastname"}},"fi":{"type":"substring","attributes":{"input":{"type":"identityAttribute","attributes":{"name":"firstname"}},"begin":0,"end":1}},"fti":{"type":"substring","attributes":{"input":{"type":"identityAttribute","attributes":{"name":"firstname"}},"begin":0,"end":2}}}},"attributes":{"cloudMaxUniqueChecks":"5","cloudMaxSize":"100","cloudRequired":"true"},"isRequired":false,"type":"","isMultiValued":false},{"name":"description","transform":{"type":"static","attributes":{"value":""}},"attributes":{},"isRequired":false,"type":"string","isMultiValued":false}]}}}}}},"responses":{"201":{"description":"Created ProvisioningPolicyDto object","content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"usageType":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"userName"},"transform":{"type":"object","description":"The transform to apply to the field","example":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"default":{}},"attributes":{"type":"object","description":"Attributes required for the transform","example":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"}},"isRequired":{"type":"boolean","readOnly":true,"description":"Flag indicating whether or not the attribute is required.","default":false,"example":false},"type":{"type":"string","description":"The type of the attribute.","example":"string"},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","default":false,"example":false}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/sources/{sourceId}/provisioning-policies","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"string","description":"string","usageType":"CREATE","fields":[{"name":"userName","transform":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"attributes":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"},"type":"string","isMultiValued":false}]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create Provisioning Policy","description":{"content":"This API generates a create policy/template based on field value transforms. This API is intended for use when setting up JDBC Provisioning type sources, but it will also work on other source types.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":sourceId","provisioning-policies"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Provisioning Policy + + + +This API generates a create policy/template based on field value transforms. This API is intended for use when setting up JDBC Provisioning type sources, but it will also work on other source types. +A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    Request Body required
      fields object[]
    + +Created ProvisioningPolicyDto object + +
    Schema
      fields object[]
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-role.api.mdx b/docs/sailpoint-api-beta/create-role.api.mdx new file mode 100644 index 000000000..8e4b9b291 --- /dev/null +++ b/docs/sailpoint-api-beta/create-role.api.mdx @@ -0,0 +1,189 @@ +--- +id: create-role +sidebar_label: Create a Role +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createRole","tags":["Roles"],"description":"This API creates a Role.\nThere is a soft limit of 800 roles per org in IdentityNow. You will receive an error if you attempt to add more than 800 roles via the API or the UI. If you need to add roles above this limit, please create a support ticket.\nA token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to call this API. In addition, a ROLE_SUBADMIN may not create a Role including an Access Profile if that Access Profile is associated with a Source with which the ROLE_SUBADMIN is not themselves associated.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"A Role","properties":{"id":{"type":"string","description":"The id of the Role. This field must be left null when creating an Role, otherwise a 400 Bad Request error will result.","example":"2c918086749d78830174a1a40e121518"},"name":{"type":"string","description":"The human-readable display name of the Role","maxLength":128,"example":"Role 2567"},"created":{"type":"string","description":"Date the Role was created","format":"date-time","example":"2021-03-01T22:32:58.104Z","readOnly":true},"modified":{"type":"string","description":"Date the Role was last modified.","format":"date-time","example":"2021-03-02T20:22:28.104Z","readOnly":true},"description":{"type":"string","nullable":true,"description":"A human-readable description of the Role","example":"Urna amet cursus pellentesque nisl orci maximus lorem nisl euismod fusce morbi placerat adipiscing maecenas nisi tristique et metus et lacus sed morbi nunc nisl maximus magna arcu varius sollicitudin elementum enim maecenas nisi id ipsum tempus fusce diam ipsum tortor."},"owner":{"type":"object","description":"The owner of this object.","properties":{"type":{"description":"Owner type. This field must be either left null or set to 'IDENTITY' on input, otherwise a 400 Bad Request error will result.","example":"IDENTITY","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"]},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of the owner. It may be left null or omitted in a POST or PATCH. If set, it must match the current value of the owner's display name, otherwise a 400 Bad Request error will result.","example":"support"}}},"accessProfiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the Access Profile","example":"ff808081751e6e129f1518161919ecca"},"type":{"type":"string","description":"Type of requested object. This field must be either left null or set to 'ACCESS_PROFILE' when creating an Access Profile, otherwise a 400 Bad Request error will result.","enum":["ACCESS_PROFILE"],"example":"ACCESS_PROFILE"},"name":{"type":"string","description":"Human-readable display name of the Access Profile. This field is ignored on input.","example":"Access Profile 2567"}}},"nullable":true},"membership":{"nullable":true,"type":"object","description":"When present, specifies that the Role is to be granted to Identities which either satisfy specific criteria or which are members of a given list of Identities.","properties":{"type":{"type":"string","enum":["STANDARD","IDENTITY_LIST"],"description":"This enum characterizes the type of a Role's membership selector. Only the following two are fully supported:\n\nSTANDARD: Indicates that Role membership is defined in terms of a criteria expression\n\nIDENTITY_LIST: Indicates that Role membership is conferred on the specific identities listed","example":"IDENTITY_LIST"},"criteria":{"nullable":true,"type":"object","description":"Defines STANDARD type Role membership","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","STARTS_WITH","ENDS_WITH","AND","OR"],"description":"An operation","example":"EQUALS"},"key":{"type":"object","description":"Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria","properties":{"type":{"type":"string","enum":["IDENTITY","ACCOUNT","ENTITLEMENT"],"description":"Indicates whether the associated criteria represents an expression on identity attributes, account attributes, or entitlements, respectively.","example":"ACCOUNT"},"property":{"type":"string","description":"The name of the attribute or entitlement to which the associated criteria applies.","example":"attribute.email"},"sourceId":{"type":"string","nullable":true,"description":"ID of the Source from which an account attribute or entitlement is drawn. Required if type is ACCOUNT or ENTITLEMENT","example":"2c9180867427f3a301745aec18211519"}},"required":["type","property"]},"stringValue":{"type":"string","description":"String value to test the Identity attribute, Account attribute, or Entitlement specified in the key w/r/t the specified operation. If this criteria is a leaf node, that is, if the operation is one of EQUALS, NOT_EQUALS, CONTAINS, STARTS_WITH, or ENDS_WITH, this field is required. Otherwise, specifying it is an error.","example":"carlee.cert1c9f9b6fd@mailinator.com"},"children":{"type":"array","items":{"type":"object","description":"Defines STANDARD type Role membership","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","STARTS_WITH","ENDS_WITH","AND","OR"],"description":"An operation","example":"EQUALS"},"key":{"type":"object","description":"Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria","properties":{"type":{"type":"string","enum":["IDENTITY","ACCOUNT","ENTITLEMENT"],"description":"Indicates whether the associated criteria represents an expression on identity attributes, account attributes, or entitlements, respectively.","example":"ACCOUNT"},"property":{"type":"string","description":"The name of the attribute or entitlement to which the associated criteria applies.","example":"attribute.email"},"sourceId":{"type":"string","nullable":true,"description":"ID of the Source from which an account attribute or entitlement is drawn. Required if type is ACCOUNT or ENTITLEMENT","example":"2c9180867427f3a301745aec18211519"}},"required":["type","property"]},"stringValue":{"type":"string","description":"String value to test the Identity attribute, Account attribute, or Entitlement specified in the key w/r/t the specified operation. If this criteria is a leaf node, that is, if the operation is one of EQUALS, NOT_EQUALS, CONTAINS, STARTS_WITH, or ENDS_WITH, this field is required. Otherwise, specifying it is an error.","example":"carlee.cert1c9f9b6fd@mailinator.com"},"children":{"type":"array","items":{"type":"object","description":"Defines STANDARD type Role membership","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","STARTS_WITH","ENDS_WITH","AND","OR"],"description":"An operation","example":"EQUALS"},"key":{"type":"object","description":"Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria","properties":{"type":{"type":"string","enum":["IDENTITY","ACCOUNT","ENTITLEMENT"],"description":"Indicates whether the associated criteria represents an expression on identity attributes, account attributes, or entitlements, respectively.","example":"ACCOUNT"},"property":{"type":"string","description":"The name of the attribute or entitlement to which the associated criteria applies.","example":"attribute.email"},"sourceId":{"type":"string","nullable":true,"description":"ID of the Source from which an account attribute or entitlement is drawn. Required if type is ACCOUNT or ENTITLEMENT","example":"2c9180867427f3a301745aec18211519"}},"required":["type","property"]},"stringValue":{"type":"string","description":"String value to test the Identity attribute, Account attribute, or Entitlement specified in the key w/r/t the specified operation. If this criteria is a leaf node, that is, if the operation is one of EQUALS, NOT_EQUALS, CONTAINS, STARTS_WITH, or ENDS_WITH, this field is required. Otherwise, specifying it is an error.","example":"carlee.cert1c9f9b6fd@mailinator.com"}}},"nullable":true,"description":"Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be children or OR nodes and vice-versa."}}},"nullable":true,"description":"Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be children or OR nodes and vice-versa."}}},"identities":{"type":"array","items":{"type":"object","description":"A reference to an Identity in an IDENTITY_LIST role membership criteria.","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY","nullable":true},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","nullable":true,"description":"Human-readable display name of the Identity.","example":"Thomas Edison"},"aliasName":{"type":"string","nullable":true,"description":"User name of the Identity","example":"t.edison"}}},"nullable":true,"description":"Defines role membership as being exclusive to the specified Identities, when type is IDENTITY_LIST."}}},"legacyMembershipInfo":{"type":"object","nullable":true,"description":"This field is not directly modifiable and is generally expected to be *null*. In very rare instances, some Roles may have been created using membership selection criteria that are no longer fully supported. While these Roles will still work, they should be migrated to STANDARD or IDENTITY_LIST selection criteria. This field exists for informational purposes as an aid to such migration.","example":{"type":"IDENTITY_LIST"},"additionalProperties":true},"enabled":{"type":"boolean","description":"Whether the Role is enabled or not. This field is false by default.","example":true},"requestable":{"type":"boolean","description":"Whether the Role can be the target of Access Requests. This field is false by default.","example":true},"accessRequestConfig":{"nullable":true,"description":"Access request configuration for this object","type":"object","properties":{"commentsRequired":{"type":"boolean","description":"Whether the requester of the containing object must provide comments justifying the request","example":true},"denialCommentsRequired":{"type":"boolean","description":"Whether an approver must provide comments when denying the request","example":true},"approvalSchemes":{"type":"array","description":"List describing the steps in approving the request","items":{"type":"object","properties":{"approverType":{"type":"string","enum":["OWNER","MANAGER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step. Values are as follows.\n\n**OWNER**: Owner of the associated Role\n\n**MANAGER**: Manager of the Identity making the request\n\n**GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field","example":"GOVERNANCE_GROUP"},"approverId":{"type":"string","description":"Id of the specific approver, used only when approverType is GOVERNANCE_GROUP","example":"46c79819-a69f-49a2-becb-12c971ae66c6"}}}}}},"revocationRequestConfig":{"nullable":true,"description":"Revocation request configuration for this object.","type":"object","properties":{"approvalSchemes":{"type":"array","description":"List describing the steps in approving the revocation request","items":{"type":"object","properties":{"approverType":{"type":"string","enum":["OWNER","SOURCE_OWNER","MANAGER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step. Values are as follows.\n\n**OWNER**: Owner of the associated Access Profile or Role\n\n**SOURCE_OWNER**: Owner of the Source associated with an Access Profile\n\n**MANAGER**: Manager of the Identity making the request\n\n**GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field","example":"GOVERNANCE_GROUP"},"approverId":{"type":"string","description":"Id of the specific approver, used only when approverType is GOVERNANCE_GROUP","example":"46c79819-a69f-49a2-becb-12c971ae66c6"}}}}}},"segments":{"type":"array","items":{"type":"string"},"nullable":true,"description":"List of IDs of segments, if any, to which this Role is assigned.","example":["f7b1b8a3-5fed-4fd4-ad29-82014e137e19","29cb6c06-1da8-43ea-8be4-b3125f248f2a"]}},"required":["name"]}}}},"responses":{"201":{"description":"Role created","content":{"application/json":{"schema":{"type":"object","description":"A Role","properties":{"id":{"type":"string","description":"The id of the Role. This field must be left null when creating an Role, otherwise a 400 Bad Request error will result.","example":"2c918086749d78830174a1a40e121518"},"name":{"type":"string","description":"The human-readable display name of the Role","maxLength":128,"example":"Role 2567"},"created":{"type":"string","description":"Date the Role was created","format":"date-time","example":"2021-03-01T22:32:58.104Z","readOnly":true},"modified":{"type":"string","description":"Date the Role was last modified.","format":"date-time","example":"2021-03-02T20:22:28.104Z","readOnly":true},"description":{"type":"string","nullable":true,"description":"A human-readable description of the Role","example":"Urna amet cursus pellentesque nisl orci maximus lorem nisl euismod fusce morbi placerat adipiscing maecenas nisi tristique et metus et lacus sed morbi nunc nisl maximus magna arcu varius sollicitudin elementum enim maecenas nisi id ipsum tempus fusce diam ipsum tortor."},"owner":{"type":"object","description":"The owner of this object.","properties":{"type":{"description":"Owner type. This field must be either left null or set to 'IDENTITY' on input, otherwise a 400 Bad Request error will result.","example":"IDENTITY","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"]},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of the owner. It may be left null or omitted in a POST or PATCH. If set, it must match the current value of the owner's display name, otherwise a 400 Bad Request error will result.","example":"support"}}},"accessProfiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the Access Profile","example":"ff808081751e6e129f1518161919ecca"},"type":{"type":"string","description":"Type of requested object. This field must be either left null or set to 'ACCESS_PROFILE' when creating an Access Profile, otherwise a 400 Bad Request error will result.","enum":["ACCESS_PROFILE"],"example":"ACCESS_PROFILE"},"name":{"type":"string","description":"Human-readable display name of the Access Profile. This field is ignored on input.","example":"Access Profile 2567"}}},"nullable":true},"membership":{"nullable":true,"type":"object","description":"When present, specifies that the Role is to be granted to Identities which either satisfy specific criteria or which are members of a given list of Identities.","properties":{"type":{"type":"string","enum":["STANDARD","IDENTITY_LIST"],"description":"This enum characterizes the type of a Role's membership selector. Only the following two are fully supported:\n\nSTANDARD: Indicates that Role membership is defined in terms of a criteria expression\n\nIDENTITY_LIST: Indicates that Role membership is conferred on the specific identities listed","example":"IDENTITY_LIST"},"criteria":{"nullable":true,"type":"object","description":"Defines STANDARD type Role membership","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","STARTS_WITH","ENDS_WITH","AND","OR"],"description":"An operation","example":"EQUALS"},"key":{"type":"object","description":"Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria","properties":{"type":{"type":"string","enum":["IDENTITY","ACCOUNT","ENTITLEMENT"],"description":"Indicates whether the associated criteria represents an expression on identity attributes, account attributes, or entitlements, respectively.","example":"ACCOUNT"},"property":{"type":"string","description":"The name of the attribute or entitlement to which the associated criteria applies.","example":"attribute.email"},"sourceId":{"type":"string","nullable":true,"description":"ID of the Source from which an account attribute or entitlement is drawn. Required if type is ACCOUNT or ENTITLEMENT","example":"2c9180867427f3a301745aec18211519"}},"required":["type","property"]},"stringValue":{"type":"string","description":"String value to test the Identity attribute, Account attribute, or Entitlement specified in the key w/r/t the specified operation. If this criteria is a leaf node, that is, if the operation is one of EQUALS, NOT_EQUALS, CONTAINS, STARTS_WITH, or ENDS_WITH, this field is required. Otherwise, specifying it is an error.","example":"carlee.cert1c9f9b6fd@mailinator.com"},"children":{"type":"array","items":{"type":"object","description":"Defines STANDARD type Role membership","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","STARTS_WITH","ENDS_WITH","AND","OR"],"description":"An operation","example":"EQUALS"},"key":{"type":"object","description":"Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria","properties":{"type":{"type":"string","enum":["IDENTITY","ACCOUNT","ENTITLEMENT"],"description":"Indicates whether the associated criteria represents an expression on identity attributes, account attributes, or entitlements, respectively.","example":"ACCOUNT"},"property":{"type":"string","description":"The name of the attribute or entitlement to which the associated criteria applies.","example":"attribute.email"},"sourceId":{"type":"string","nullable":true,"description":"ID of the Source from which an account attribute or entitlement is drawn. Required if type is ACCOUNT or ENTITLEMENT","example":"2c9180867427f3a301745aec18211519"}},"required":["type","property"]},"stringValue":{"type":"string","description":"String value to test the Identity attribute, Account attribute, or Entitlement specified in the key w/r/t the specified operation. If this criteria is a leaf node, that is, if the operation is one of EQUALS, NOT_EQUALS, CONTAINS, STARTS_WITH, or ENDS_WITH, this field is required. Otherwise, specifying it is an error.","example":"carlee.cert1c9f9b6fd@mailinator.com"},"children":{"type":"array","items":{"type":"object","description":"Defines STANDARD type Role membership","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","STARTS_WITH","ENDS_WITH","AND","OR"],"description":"An operation","example":"EQUALS"},"key":{"type":"object","description":"Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria","properties":{"type":{"type":"string","enum":["IDENTITY","ACCOUNT","ENTITLEMENT"],"description":"Indicates whether the associated criteria represents an expression on identity attributes, account attributes, or entitlements, respectively.","example":"ACCOUNT"},"property":{"type":"string","description":"The name of the attribute or entitlement to which the associated criteria applies.","example":"attribute.email"},"sourceId":{"type":"string","nullable":true,"description":"ID of the Source from which an account attribute or entitlement is drawn. Required if type is ACCOUNT or ENTITLEMENT","example":"2c9180867427f3a301745aec18211519"}},"required":["type","property"]},"stringValue":{"type":"string","description":"String value to test the Identity attribute, Account attribute, or Entitlement specified in the key w/r/t the specified operation. If this criteria is a leaf node, that is, if the operation is one of EQUALS, NOT_EQUALS, CONTAINS, STARTS_WITH, or ENDS_WITH, this field is required. Otherwise, specifying it is an error.","example":"carlee.cert1c9f9b6fd@mailinator.com"}}},"nullable":true,"description":"Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be children or OR nodes and vice-versa."}}},"nullable":true,"description":"Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be children or OR nodes and vice-versa."}}},"identities":{"type":"array","items":{"type":"object","description":"A reference to an Identity in an IDENTITY_LIST role membership criteria.","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY","nullable":true},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","nullable":true,"description":"Human-readable display name of the Identity.","example":"Thomas Edison"},"aliasName":{"type":"string","nullable":true,"description":"User name of the Identity","example":"t.edison"}}},"nullable":true,"description":"Defines role membership as being exclusive to the specified Identities, when type is IDENTITY_LIST."}}},"legacyMembershipInfo":{"type":"object","nullable":true,"description":"This field is not directly modifiable and is generally expected to be *null*. In very rare instances, some Roles may have been created using membership selection criteria that are no longer fully supported. While these Roles will still work, they should be migrated to STANDARD or IDENTITY_LIST selection criteria. This field exists for informational purposes as an aid to such migration.","example":{"type":"IDENTITY_LIST"},"additionalProperties":true},"enabled":{"type":"boolean","description":"Whether the Role is enabled or not. This field is false by default.","example":true},"requestable":{"type":"boolean","description":"Whether the Role can be the target of Access Requests. This field is false by default.","example":true},"accessRequestConfig":{"nullable":true,"description":"Access request configuration for this object","type":"object","properties":{"commentsRequired":{"type":"boolean","description":"Whether the requester of the containing object must provide comments justifying the request","example":true},"denialCommentsRequired":{"type":"boolean","description":"Whether an approver must provide comments when denying the request","example":true},"approvalSchemes":{"type":"array","description":"List describing the steps in approving the request","items":{"type":"object","properties":{"approverType":{"type":"string","enum":["OWNER","MANAGER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step. Values are as follows.\n\n**OWNER**: Owner of the associated Role\n\n**MANAGER**: Manager of the Identity making the request\n\n**GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field","example":"GOVERNANCE_GROUP"},"approverId":{"type":"string","description":"Id of the specific approver, used only when approverType is GOVERNANCE_GROUP","example":"46c79819-a69f-49a2-becb-12c971ae66c6"}}}}}},"revocationRequestConfig":{"nullable":true,"description":"Revocation request configuration for this object.","type":"object","properties":{"approvalSchemes":{"type":"array","description":"List describing the steps in approving the revocation request","items":{"type":"object","properties":{"approverType":{"type":"string","enum":["OWNER","SOURCE_OWNER","MANAGER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step. Values are as follows.\n\n**OWNER**: Owner of the associated Access Profile or Role\n\n**SOURCE_OWNER**: Owner of the Source associated with an Access Profile\n\n**MANAGER**: Manager of the Identity making the request\n\n**GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field","example":"GOVERNANCE_GROUP"},"approverId":{"type":"string","description":"Id of the specific approver, used only when approverType is GOVERNANCE_GROUP","example":"46c79819-a69f-49a2-becb-12c971ae66c6"}}}}}},"segments":{"type":"array","items":{"type":"string"},"nullable":true,"description":"List of IDs of segments, if any, to which this Role is assigned.","example":["f7b1b8a3-5fed-4fd4-ad29-82014e137e19","29cb6c06-1da8-43ea-8be4-b3125f248f2a"]}},"required":["name"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:role:create","idn:role-checked:create"]}],"method":"post","path":"/roles","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"2c918086749d78830174a1a40e121518","name":"Role 2567","created":"2021-03-01T22:32:58.104Z","modified":"2021-03-02T20:22:28.104Z","description":"Urna amet cursus pellentesque nisl orci maximus lorem nisl euismod fusce morbi placerat adipiscing maecenas nisi tristique et metus et lacus sed morbi nunc nisl maximus magna arcu varius sollicitudin elementum enim maecenas nisi id ipsum tempus fusce diam ipsum tortor.","owner":{"type":"IDENTITY","id":"2c9180a46faadee4016fb4e018c20639","name":"support"},"accessProfiles":[{"id":"ff808081751e6e129f1518161919ecca","type":"ACCESS_PROFILE","name":"Access Profile 2567"}],"membership":{"type":"IDENTITY_LIST","criteria":{"operation":"EQUALS","key":{"type":"ACCOUNT","property":"attribute.email","sourceId":"2c9180867427f3a301745aec18211519"},"stringValue":"carlee.cert1c9f9b6fd@mailinator.com","children":[{"operation":"EQUALS","key":{"type":"ACCOUNT","property":"attribute.email","sourceId":"2c9180867427f3a301745aec18211519"},"stringValue":"carlee.cert1c9f9b6fd@mailinator.com","children":[{"operation":"EQUALS","key":{"type":"ACCOUNT","property":"attribute.email","sourceId":"2c9180867427f3a301745aec18211519"},"stringValue":"carlee.cert1c9f9b6fd@mailinator.com"}]}]},"identities":[{"type":"IDENTITY","id":"2c9180a46faadee4016fb4e018c20639","name":"Thomas Edison","aliasName":"t.edison"}]},"legacyMembershipInfo":{"type":"IDENTITY_LIST"},"enabled":true,"requestable":true,"accessRequestConfig":{"commentsRequired":true,"denialCommentsRequired":true,"approvalSchemes":[{"approverType":"GOVERNANCE_GROUP","approverId":"46c79819-a69f-49a2-becb-12c971ae66c6"}]},"revocationRequestConfig":{"approvalSchemes":[{"approverType":"GOVERNANCE_GROUP","approverId":"46c79819-a69f-49a2-becb-12c971ae66c6"}]},"segments":["f7b1b8a3-5fed-4fd4-ad29-82014e137e19","29cb6c06-1da8-43ea-8be4-b3125f248f2a"]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create a Role","description":{"content":"This API creates a Role.\nThere is a soft limit of 800 roles per org in IdentityNow. You will receive an error if you attempt to add more than 800 roles via the API or the UI. If you need to add roles above this limit, please create a support ticket.\nA token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to call this API. In addition, a ROLE_SUBADMIN may not create a Role including an Access Profile if that Access Profile is associated with a Source with which the ROLE_SUBADMIN is not themselves associated.","type":"text/plain"},"url":{"path":["roles"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create a Role + + + +This API creates a Role. +There is a soft limit of 800 roles per org in IdentityNow. You will receive an error if you attempt to add more than 800 roles via the API or the UI. If you need to add roles above this limit, please create a support ticket. +A token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to call this API. In addition, a ROLE_SUBADMIN may not create a Role including an Access Profile if that Access Profile is associated with a Source with which the ROLE_SUBADMIN is not themselves associated. + +
    Request Body required
      owner object
      + +The owner of this object. + +
      accessProfiles object[]
      membership object
      + +When present, specifies that the Role is to be granted to Identities which either satisfy specific criteria or which are members of a given list of Identities. + +
      criteria object
      + +Defines STANDARD type Role membership + +
      key object
      + +Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria + +
      children object[]
      + +Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be children or OR nodes and vice-versa. + +
      key object
      + +Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria + +
      children object[]
      + +Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be children or OR nodes and vice-versa. + +
      key object
      + +Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria + +
      identities object[]
      + +Defines role membership as being exclusive to the specified Identities, when type is IDENTITY_LIST. + +
      legacyMembershipInfo object
      + +This field is not directly modifiable and is generally expected to be *null*. In very rare instances, some Roles may have been created using membership selection criteria that are no longer fully supported. While these Roles will still work, they should be migrated to STANDARD or IDENTITY_LIST selection criteria. This field exists for informational purposes as an aid to such migration. + +
      accessRequestConfig object
      + +Access request configuration for this object + +
      approvalSchemes object[]
      + +List describing the steps in approving the request + +
      revocationRequestConfig object
      + +Revocation request configuration for this object. + +
      approvalSchemes object[]
      + +List describing the steps in approving the revocation request + +
    + +Role created + +
    Schema
      owner object
      + +The owner of this object. + +
      accessProfiles object[]
      membership object
      + +When present, specifies that the Role is to be granted to Identities which either satisfy specific criteria or which are members of a given list of Identities. + +
      criteria object
      + +Defines STANDARD type Role membership + +
      key object
      + +Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria + +
      children object[]
      + +Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be children or OR nodes and vice-versa. + +
      key object
      + +Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria + +
      children object[]
      + +Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be children or OR nodes and vice-versa. + +
      key object
      + +Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria + +
      identities object[]
      + +Defines role membership as being exclusive to the specified Identities, when type is IDENTITY_LIST. + +
      legacyMembershipInfo object
      + +This field is not directly modifiable and is generally expected to be *null*. In very rare instances, some Roles may have been created using membership selection criteria that are no longer fully supported. While these Roles will still work, they should be migrated to STANDARD or IDENTITY_LIST selection criteria. This field exists for informational purposes as an aid to such migration. + +
      accessRequestConfig object
      + +Access request configuration for this object + +
      approvalSchemes object[]
      + +List describing the steps in approving the request + +
      revocationRequestConfig object
      + +Revocation request configuration for this object. + +
      approvalSchemes object[]
      + +List describing the steps in approving the revocation request + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-schema-attribute.api.mdx b/docs/sailpoint-api-beta/create-schema-attribute.api.mdx new file mode 100644 index 000000000..bf911f47d --- /dev/null +++ b/docs/sailpoint-api-beta/create-schema-attribute.api.mdx @@ -0,0 +1,77 @@ +--- +id: create-schema-attribute +sidebar_label: Create a new Schema Attribute for Non-Employee Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createSchemaAttribute","tags":["Non-Employee Lifecycle Management"],"description":"This API creates a new schema attribute for Non-Employee Source. The schema technical name must be unique in the source. Attempts to create a schema attribute with an existing name will result in a \"400.1.409 Reference conflict\" response. At most, 10 custom attributes can be created per schema. Attempts to create more than 10 will result in a \"400.1.4 Limit violation\" response.\nRequest requires a security scope of:\n'idn:nesr:create'","parameters":[{"in":"path","name":"sourceId","schema":{"type":"string"},"required":true,"description":"The Source id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Type of the attribute. Only type 'TEXT' is supported for custom attributes.","example":"TEXT"},"label":{"type":"string","description":"Label displayed on the UI for this schema attribute.","example":"Account Name"},"technicalName":{"type":"string","description":"The technical name of the attribute. Must be unique per source.","example":"account.name"},"helpText":{"type":"string","description":"help text displayed by UI.","example":"The unique identifier for the account"},"placeholder":{"type":"string","description":"Hint text that fills UI box.","example":"Enter a unique user name for this account."},"required":{"type":"boolean","description":"If true, the schema attribute is required for all non-employees in the source","example":true}},"required":["type","technicalName","label"]}}}},"responses":{"200":{"description":"Schema Attribute created.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"UUID","example":"ac110005-7156-1150-8171-5b292e3e0084","description":"Schema Attribute Id"},"system":{"type":"boolean","description":"True if this schema attribute is mandatory on all non-employees sources.","example":true},"modified":{"type":"string","format":"date-time","description":"When the schema attribute was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the schema attribute was created.","example":"2019-08-23T18:40:35.772Z"},"type":{"type":"string","enum":["TEXT","DATE","IDENTITY"],"description":"Enum representing the type of data a schema attribute accepts."},"label":{"type":"string","description":"Label displayed on the UI for this schema attribute.","example":"Account Name"},"technicalName":{"type":"string","description":"The technical name of the attribute. Must be unique per source.","example":"account.name"},"helpText":{"type":"string","description":"help text displayed by UI.","example":"The unique identifier for the account"},"placeholder":{"type":"string","description":"Hint text that fills UI box.","example":"Enter a unique user name for this account."},"required":{"type":"boolean","description":"If true, the schema attribute is required for all non-employees in the source","example":true}},"required":["type","technicalName","label"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/non-employee-sources/{sourceId}/schema-attributes","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"type":"TEXT","label":"Account Name","technicalName":"account.name","helpText":"The unique identifier for the account","placeholder":"Enter a unique user name for this account.","required":true},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create a new Schema Attribute for Non-Employee Source","description":{"content":"This API creates a new schema attribute for Non-Employee Source. The schema technical name must be unique in the source. Attempts to create a schema attribute with an existing name will result in a \"400.1.409 Reference conflict\" response. At most, 10 custom attributes can be created per schema. Attempts to create more than 10 will result in a \"400.1.4 Limit violation\" response.\nRequest requires a security scope of:\n'idn:nesr:create'","type":"text/plain"},"url":{"path":["non-employee-sources",":sourceId","schema-attributes"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create a new Schema Attribute for Non-Employee Source + + + +This API creates a new schema attribute for Non-Employee Source. The schema technical name must be unique in the source. Attempts to create a schema attribute with an existing name will result in a "400.1.409 Reference conflict" response. At most, 10 custom attributes can be created per schema. Attempts to create more than 10 will result in a "400.1.4 Limit violation" response. +Request requires a security scope of: +'idn:nesr:create' + +
    Path Parameters
    Request Body required
    + +Schema Attribute created. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-schema.api.mdx b/docs/sailpoint-api-beta/create-schema.api.mdx new file mode 100644 index 000000000..0c7519410 --- /dev/null +++ b/docs/sailpoint-api-beta/create-schema.api.mdx @@ -0,0 +1,91 @@ +--- +id: create-schema +sidebar_label: Creates a new Schema on the specified Source in IdentityNow. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createSchema","tags":["Sources"],"parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source id.","example":"2c9180835d191a86015d28455b4a2329"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Schema.","example":"2c9180835d191a86015d28455b4a2329"},"name":{"type":"string","description":"The name of the Schema.","example":"account"},"nativeObjectType":{"type":"string","description":"The name of the object type on the native system that the schema represents.","example":"User"},"identityAttribute":{"type":"string","description":"The name of the attribute used to calculate the unique identifier for an object in the schema.","example":"sAMAccountName"},"displayAttribute":{"type":"string","description":"The name of the attribute used to calculate the display value for an object in the schema.","example":"distinguishedName"},"hierarchyAttribute":{"type":"string","description":"The name of the attribute whose values represent other objects in a hierarchy. Only relevant to group schemas.","example":"memberOf"},"includePermissions":{"type":"boolean","description":"Flag indicating whether or not the include permissions with the object data when aggregating the schema.","example":false},"features":{"type":"array","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"description":"The features that the schema supports.","example":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"]},"configuration":{"type":"object","description":"Holds any extra configuration data that the schema may require.","example":{"groupMemberAttribute":"member"}},"attributes":{"type":"array","description":"The attribute definitions which form the schema.","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"sAMAccountName"},"type":{"description":"The type of the attribute.","example":"string","type":"string","enum":["STRING","LONG","INT","BOOLEAN"]},"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"A reference to the schema on the source to which the values of the attribute map.","example":{"type":"CONNECTOR_SCHEMA","id":"2c9180866166b5b0016167c32ef31a66","name":"group"}},"description":{"type":"string","description":"A human-readable description of the attribute."},"isMulti":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","example":false},"isEntitlement":{"type":"boolean","description":"Flag indicating whether or not the attribute is an entitlement.","example":false}}},"example":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}]},"created":{"type":"string","description":"The date the Schema was created.","format":"date-time","example":"2019-12-24T22:32:58.104Z"},"modified":{"type":"string","description":"The date the Schema was last modified.","format":"date-time","example":"2019-12-31T20:22:28.104Z"}}}}}},"responses":{"201":{"description":"The Schema was successfully created on the specified Source.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Schema.","example":"2c9180835d191a86015d28455b4a2329"},"name":{"type":"string","description":"The name of the Schema.","example":"account"},"nativeObjectType":{"type":"string","description":"The name of the object type on the native system that the schema represents.","example":"User"},"identityAttribute":{"type":"string","description":"The name of the attribute used to calculate the unique identifier for an object in the schema.","example":"sAMAccountName"},"displayAttribute":{"type":"string","description":"The name of the attribute used to calculate the display value for an object in the schema.","example":"distinguishedName"},"hierarchyAttribute":{"type":"string","description":"The name of the attribute whose values represent other objects in a hierarchy. Only relevant to group schemas.","example":"memberOf"},"includePermissions":{"type":"boolean","description":"Flag indicating whether or not the include permissions with the object data when aggregating the schema.","example":false},"features":{"type":"array","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"description":"The features that the schema supports.","example":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"]},"configuration":{"type":"object","description":"Holds any extra configuration data that the schema may require.","example":{"groupMemberAttribute":"member"}},"attributes":{"type":"array","description":"The attribute definitions which form the schema.","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"sAMAccountName"},"type":{"description":"The type of the attribute.","example":"string","type":"string","enum":["STRING","LONG","INT","BOOLEAN"]},"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"A reference to the schema on the source to which the values of the attribute map.","example":{"type":"CONNECTOR_SCHEMA","id":"2c9180866166b5b0016167c32ef31a66","name":"group"}},"description":{"type":"string","description":"A human-readable description of the attribute."},"isMulti":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","example":false},"isEntitlement":{"type":"boolean","description":"Flag indicating whether or not the attribute is an entitlement.","example":false},"isGroup":{"type":"boolean","description":"Unmodifiable flag indicating whether or not the attribute represents a group.","example":false,"readOnly":true}}},"example":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}]},"created":{"type":"string","description":"The date the Schema was created.","format":"date-time","example":"2019-12-24T22:32:58.104Z"},"modified":{"type":"string","description":"The date the Schema was last modified.","format":"date-time","example":"2019-12-31T20:22:28.104Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"description":"Creates a new Schema on the specified Source in IdentityNow.","method":"post","path":"/sources/{sourceId}/schemas","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"2c9180835d191a86015d28455b4a2329","name":"account","nativeObjectType":"User","identityAttribute":"sAMAccountName","displayAttribute":"distinguishedName","hierarchyAttribute":"memberOf","includePermissions":false,"features":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"],"configuration":{"groupMemberAttribute":"member"},"attributes":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}],"created":"2019-12-24T22:32:58.104Z","modified":"2019-12-31T20:22:28.104Z"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Creates a new Schema on the specified Source in IdentityNow.","description":{"type":"text/plain"},"url":{"path":["sources",":sourceId","schemas"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id.","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Creates a new Schema on the specified Source in IdentityNow. + + + +Creates a new Schema on the specified Source in IdentityNow. + +
    Path Parameters
    Request Body required
      attributes object[]
      + +The attribute definitions which form the schema. + +
      schema object
      + +A reference to the schema on the source to which the values of the attribute map. + +
    + +The Schema was successfully created on the specified Source. + +
    Schema
      attributes object[]
      + +The attribute definitions which form the schema. + +
      schema object
      + +A reference to the schema on the source to which the values of the attribute map. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-search-attribute-config.api.mdx b/docs/sailpoint-api-beta/create-search-attribute-config.api.mdx new file mode 100644 index 000000000..0b7706909 --- /dev/null +++ b/docs/sailpoint-api-beta/create-search-attribute-config.api.mdx @@ -0,0 +1,88 @@ +--- +id: create-search-attribute-config +sidebar_label: Configure/create extended search attributes in IdentityNow. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createSearchAttributeConfig","tags":["Search Attribute Configuration"],"description":"This API accepts an attribute name, an attribute display name and a list of name/value pair associates of application IDs to attribute names. It will then validate the inputs and configure/create and attribute promotion configuration in the Link ObjectConfig.\nA token with ORG_ADMIN authority is required to call this API.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Name of the new attribute","example":"newMailAttribute"},"displayName":{"type":"string","description":"The display name of the new attribute","example":"New Mail Attribute"},"applicationAttributes":{"type":"object","description":"Map of application id and their associated attribute.","example":{"2c91808b79fd2422017a0b35d30f3968":"employeeNumber","2c91808b79fd2422017a0b36008f396b":"employeeNumber"}}}},"example":{"name":"newMailAttribute","displayName":"New Mail Attribute","applicationAttributes":{"2c9180866166b5b0016167c32ef31a66":"mail","2c9180866166b5b0016167c32ef31a67":"mail"}}}}},"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/accounts/search-attribute-config","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"newMailAttribute","displayName":"New Mail Attribute","applicationAttributes":{"2c91808b79fd2422017a0b35d30f3968":"employeeNumber","2c91808b79fd2422017a0b36008f396b":"employeeNumber"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Configure/create extended search attributes in IdentityNow.","description":{"content":"This API accepts an attribute name, an attribute display name and a list of name/value pair associates of application IDs to attribute names. It will then validate the inputs and configure/create and attribute promotion configuration in the Link ObjectConfig.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts","search-attribute-config"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Configure/create extended search attributes in IdentityNow. + + + +This API accepts an attribute name, an attribute display name and a list of name/value pair associates of application IDs to attribute names. It will then validate the inputs and configure/create and attribute promotion configuration in the Link ObjectConfig. +A token with ORG_ADMIN authority is required to call this API. + +
    Request Body required
    + +Accepted - Returned if the request was successfully accepted into the system. + +
    Schema
    • object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-segment.api.mdx b/docs/sailpoint-api-beta/create-segment.api.mdx new file mode 100644 index 000000000..d6237fce6 --- /dev/null +++ b/docs/sailpoint-api-beta/create-segment.api.mdx @@ -0,0 +1,95 @@ +--- +id: create-segment +sidebar_label: Create Segment +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createSegment","tags":["Segments"],"description":"This API creates a segment.\n\nNote that segment definitions may take time to propagate to all identities.\n\nA token with ORG_ADMIN or API authority is required to call this API.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"name":{"type":"string","description":"Segment Business Name","example":"segment-xyz"},"created":{"type":"string","format":"date-time","description":"The time when this Segment is created","example":"2020-01-01T00:00:00.000000Z"},"modified":{"type":"string","format":"date-time","description":"The time when this Segment is modified","example":"2020-01-01T00:00:00.000000Z"},"description":{"type":"string","description":"Optional description of the Segment","example":"This segment represents xyz"},"owner":{"type":"object","description":"The owner of this object.","properties":{"type":{"description":"Owner type. This field must be either left null or set to 'IDENTITY' on input, otherwise a 400 Bad Request error will result.","example":"IDENTITY","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"]},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of the owner. It may be left null or omitted in a POST or PATCH. If set, it must match the current value of the owner's display name, otherwise a 400 Bad Request error will result.","example":"support"}}},"visibilityCriteria":{"type":"object","properties":{"expression":{"type":"object","properties":{"operator":{"type":"string","description":"Operator for the expression","enum":["AND","EQUALS"],"example":"EQUALS"},"attribute":{"type":"string","description":"Name for the attribute","example":"location"},"value":{"type":"object","properties":{"type":{"type":"string","description":"The type of attribute value","example":"STRING"},"value":{"type":"string","description":"The attribute value","example":"Austin"}}},"children":{"type":"array","description":"List of expressions","items":{"type":"object","properties":{"type":{"type":"string","description":"The type of attribute value","example":"STRING"},"value":{"type":"string","description":"The attribute value","example":"Austin"}}},"example":[]}}}}},"active":{"type":"boolean","description":"Whether the Segment is currently active. Inactive segments have no effect."}}}}}},"responses":{"201":{"description":"Segment created","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"name":{"type":"string","description":"Segment Business Name","example":"segment-xyz"},"created":{"type":"string","format":"date-time","description":"The time when this Segment is created","example":"2020-01-01T00:00:00.000000Z"},"modified":{"type":"string","format":"date-time","description":"The time when this Segment is modified","example":"2020-01-01T00:00:00.000000Z"},"description":{"type":"string","description":"Optional description of the Segment","example":"This segment represents xyz"},"owner":{"type":"object","description":"The owner of this object.","properties":{"type":{"description":"Owner type. This field must be either left null or set to 'IDENTITY' on input, otherwise a 400 Bad Request error will result.","example":"IDENTITY","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"]},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of the owner. It may be left null or omitted in a POST or PATCH. If set, it must match the current value of the owner's display name, otherwise a 400 Bad Request error will result.","example":"support"}}},"visibilityCriteria":{"type":"object","properties":{"expression":{"type":"object","properties":{"operator":{"type":"string","description":"Operator for the expression","enum":["AND","EQUALS"],"example":"EQUALS"},"attribute":{"type":"string","description":"Name for the attribute","example":"location"},"value":{"type":"object","properties":{"type":{"type":"string","description":"The type of attribute value","example":"STRING"},"value":{"type":"string","description":"The attribute value","example":"Austin"}}},"children":{"type":"array","description":"List of expressions","items":{"type":"object","properties":{"type":{"type":"string","description":"The type of attribute value","example":"STRING"},"value":{"type":"string","description":"The attribute value","example":"Austin"}}},"example":[]}}}}},"active":{"type":"boolean","description":"Whether the Segment is currently active. Inactive segments have no effect."}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/segments","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","name":"segment-xyz","created":"2020-01-01T00:00:00.000000Z","modified":"2020-01-01T00:00:00.000000Z","description":"This segment represents xyz","owner":{"type":"IDENTITY","id":"2c9180a46faadee4016fb4e018c20639","name":"support"},"visibilityCriteria":{"expression":{"operator":"EQUALS","attribute":"location","value":{"type":"STRING","value":"Austin"},"children":[]}},"active":true},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create Segment","description":{"content":"This API creates a segment.\n\nNote that segment definitions may take time to propagate to all identities.\n\nA token with ORG_ADMIN or API authority is required to call this API.","type":"text/plain"},"url":{"path":["segments"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Segment + + + +This API creates a segment. + +Note that segment definitions may take time to propagate to all identities. + +A token with ORG_ADMIN or API authority is required to call this API. + +
    Request Body required
      owner object
      + +The owner of this object. + +
      visibilityCriteria object
      expression object
      value object
      children object[]
      + +List of expressions + +
    + +Segment created + +
    Schema
      owner object
      + +The owner of this object. + +
      visibilityCriteria object
      expression object
      value object
      children object[]
      + +List of expressions + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-service-desk-integration.api.mdx b/docs/sailpoint-api-beta/create-service-desk-integration.api.mdx new file mode 100644 index 000000000..6100fe50c --- /dev/null +++ b/docs/sailpoint-api-beta/create-service-desk-integration.api.mdx @@ -0,0 +1,147 @@ +--- +id: create-service-desk-integration +sidebar_label: Create a new Service Desk integration +hide_title: true +hide_table_of_contents: true +api: {"tags":["Service Desk Integration"],"description":"Create a new Service Desk Integrations. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","operationId":"createServiceDeskIntegration","requestBody":{"description":"The specifics of a new integration to create","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","format":"date-time","readOnly":true,"example":true},"modified":{"description":"Last modification date of the Object","type":"string","format":"date-time","readOnly":true,"example":true}}},{"type":"object","description":"Specification of a Service Desk integration","required":["description","type","attributes"],"properties":{"description":{"description":"Description of the Service Desk integration","type":"string","example":"A very nice Service Desk integration"},"type":{"description":"Type of the Service Desk integration","type":"string","default":"ServiceNowSDIM"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the identity that is the owner of this Service Desk integration","default":{"type":"IDENTITY"}},"clusterRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the source cluster for this Service Desk integration","default":{"type":"CLUSTER"}},"cluster":{"description":"ID of the cluster for the Service Desk integration (replaced by clusterRef, retained for backward compatibility)","type":"string","example":"xyzzy999","deprecated":true},"managedSources":{"description":"Source IDs for the Service Desk integration (replaced by provisioningConfig.managedSResourceRefs, but retained here for backward compatibility)","type":"array","items":{"type":"string"},"deprecated":true},"provisioningConfig":{"description":"The 'provisioningConfig' property specifies the configuration used to provision integrations.","type":"object","properties":{"universalManager":{"description":"Specifies whether this configuration is used to manage provisioning requests for all sources from the org. If true, no managedResourceRefs are allowed.","type":"boolean","readOnly":true},"managedResourceRefs":{"description":"References to sources for the Service Desk integration template. May only be specified if universalManager is false.","type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"default":{"type":"SOURCE"}}},"planInitializerScript":{"description":"This is a reference to a plan initializer script.","type":"object","properties":{"source":{"description":"This is a Rule that allows provisioning instruction changes.","type":"string"}}}}},"attributes":{"description":"Attributes of the Service Desk integration. Validation constraints enforced by the implementation.","type":"object","additionalProperties":true},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to beforeProvisioningRule for this Service Desk integration","default":{"type":"RULE"}}}}]}}},"required":true},"responses":{"200":{"description":"details of the created integration","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","format":"date-time","readOnly":true,"example":true},"modified":{"description":"Last modification date of the Object","type":"string","format":"date-time","readOnly":true,"example":true}}},{"type":"object","description":"Specification of a Service Desk integration","required":["description","type","attributes"],"properties":{"description":{"description":"Description of the Service Desk integration","type":"string","example":"A very nice Service Desk integration"},"type":{"description":"Type of the Service Desk integration","type":"string","default":"ServiceNowSDIM"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the identity that is the owner of this Service Desk integration","default":{"type":"IDENTITY"}},"clusterRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the source cluster for this Service Desk integration","default":{"type":"CLUSTER"}},"cluster":{"description":"ID of the cluster for the Service Desk integration (replaced by clusterRef, retained for backward compatibility)","type":"string","example":"xyzzy999","deprecated":true},"managedSources":{"description":"Source IDs for the Service Desk integration (replaced by provisioningConfig.managedSResourceRefs, but retained here for backward compatibility)","type":"array","items":{"type":"string"},"deprecated":true},"provisioningConfig":{"description":"The 'provisioningConfig' property specifies the configuration used to provision integrations.","type":"object","properties":{"universalManager":{"description":"Specifies whether this configuration is used to manage provisioning requests for all sources from the org. If true, no managedResourceRefs are allowed.","type":"boolean","readOnly":true},"managedResourceRefs":{"description":"References to sources for the Service Desk integration template. May only be specified if universalManager is false.","type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"default":{"type":"SOURCE"}}},"planInitializerScript":{"description":"This is a reference to a plan initializer script.","type":"object","properties":{"source":{"description":"This is a Rule that allows provisioning instruction changes.","type":"string"}}}}},"attributes":{"description":"Attributes of the Service Desk integration. Validation constraints enforced by the implementation.","type":"object","additionalProperties":true},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to beforeProvisioningRule for this Service Desk integration","default":{"type":"RULE"}}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:service-desk-admin:write","idn:service-desk-integration:write"]}],"method":"post","path":"/service-desk-integrations","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"aName","description":"A very nice Service Desk integration","type":"ServiceNowSDIM","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"clusterRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"provisioningConfig":{"managedResourceRefs":[{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}],"planInitializerScript":{"source":"string"}},"attributes":{},"beforeProvisioningRule":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create a new Service Desk integration","description":{"content":"Create a new Service Desk Integrations. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","type":"text/plain"},"url":{"path":["service-desk-integrations"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create a new Service Desk integration + + + +Create a new Service Desk Integrations. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + +
    Request Body required
    + +The specifics of a new integration to create + +
      ownerRef object
      + +Reference to the identity that is the owner of this Service Desk integration + +
      clusterRef object
      + +Reference to the source cluster for this Service Desk integration + +
      provisioningConfig object
      + +The 'provisioningConfig' property specifies the configuration used to provision integrations. + +
      managedResourceRefs object[]
      + +References to sources for the Service Desk integration template. May only be specified if universalManager is false. + +
      planInitializerScript object
      + +This is a reference to a plan initializer script. + +
      attributes object
      + +Attributes of the Service Desk integration. Validation constraints enforced by the implementation. + +
      beforeProvisioningRule object
      + +Reference to beforeProvisioningRule for this Service Desk integration + +
    + +details of the created integration + +
    Schema
      ownerRef object
      + +Reference to the identity that is the owner of this Service Desk integration + +
      clusterRef object
      + +Reference to the source cluster for this Service Desk integration + +
      provisioningConfig object
      + +The 'provisioningConfig' property specifies the configuration used to provision integrations. + +
      managedResourceRefs object[]
      + +References to sources for the Service Desk integration template. May only be specified if universalManager is false. + +
      planInitializerScript object
      + +This is a reference to a plan initializer script. + +
      attributes object
      + +Attributes of the Service Desk integration. Validation constraints enforced by the implementation. + +
      beforeProvisioningRule object
      + +Reference to beforeProvisioningRule for this Service Desk integration + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-sod-policy.api.mdx b/docs/sailpoint-api-beta/create-sod-policy.api.mdx new file mode 100644 index 000000000..c6f592179 --- /dev/null +++ b/docs/sailpoint-api-beta/create-sod-policy.api.mdx @@ -0,0 +1,92 @@ +--- +id: create-sod-policy +sidebar_label: Create SOD Policy +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createSodPolicy","tags":["SOD Policy"],"description":"This creates both General and Conflicting Access Based policy, with a limit of 50 entitlements for each (left & right) criteria for Conflicting Access Based SOD policy\nRequires role of ORG_ADMIN","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Policy id","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"name":{"type":"string","description":"Policy Business Name","example":"policy-xyz"},"created":{"type":"string","format":"date-time","description":"The time when this SOD policy is created.","example":"2020-01-01T00:00:00.000000Z"},"modified":{"type":"string","format":"date-time","description":"The time when this SOD policy is modified.","example":"2020-01-01T00:00:00.000000Z"},"description":{"type":"string","description":"Optional description of the SOD policy","example":"This policy ensures compliance of xyz"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"externalPolicyReference":{"type":"string","description":"Optional External Policy Reference","example":"XYZ policy"},"policyQuery":{"type":"string","description":"Search query of the SOD policy","example":"@access(id:0f11f2a4-7c94-4bf3-a2bd-742580fe3bdg) AND @access(id:0f11f2a4-7c94-4bf3-a2bd-742580fe3bdf)"},"compensatingControls":{"type":"string","description":"Optional compensating controls(Mitigating Controls)","example":"Have a manager review the transaction decisions for their \"out of compliance\" employee"},"correctionAdvice":{"type":"string","description":"Optional correction advice","example":"Based on the role of the employee, managers should remove access that is not required for their job function."},"state":{"type":"string","description":"whether the policy is enforced or not","enum":["ENFORCED","NOT_ENFORCED"],"example":"ENFORCED"},"tags":{"type":"array","description":"tags for this policy object","example":["TAG1","TAG2"],"items":{"type":"string"}},"creatorId":{"type":"string","description":"Policy's creator ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"modifierId":{"type":"string","description":"Policy's modifier ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","nullable":true},"violationOwnerAssignmentConfig":{"nullable":true,"type":"object","properties":{"assignmentRule":{"type":"string","enum":["MANAGER","STATIC"],"description":"Details about the violations owner.\nMANAGER - identity's manager\nSTATIC - Governance Group or Identity","example":"MANAGER"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}}},"scheduled":{"type":"boolean","description":"defines whether a policy has been scheduled or not","example":true},"type":{"type":"string","description":"whether a policy is query based or conflicting access based","default":"GENERAL","enum":["GENERAL","CONFLICTING_ACCESS_BASED"],"example":"GENERAL"},"conflictingAccessCriteria":{"nullable":true,"type":"object","properties":{"leftCriteria":{"type":"object","properties":{"name":{"type":"string","description":"Business name for the access construct list","example":"money-in"},"criteriaList":{"type":"array","description":"List of criteria. There is a min of 1 and max of 50 items in the list.","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"example":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66","name":"Administrator"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67","name":"Administrator"}]}}},"rightCriteria":{"type":"object","properties":{"name":{"type":"string","description":"Business name for the access construct list","example":"money-in"},"criteriaList":{"type":"array","description":"List of criteria. There is a min of 1 and max of 50 items in the list.","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"example":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66","name":"Administrator"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67","name":"Administrator"}]}}}}}}},"examples":{"Conflicting Access Based Policy":{"value":{"name":"Conflicting-Policy-Name","description":"This policy ensures compliance of xyz","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"Owner Name"},"externalPolicyReference":"XYZ policy","compensatingControls":"Have a manager review the transaction decisions for their \"out of compliance\" employee","correctionAdvice":"Based on the role of the employee, managers should remove access that is not required for their job function.","state":"ENFORCED","tags":["string"],"creatorId":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","modifierId":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","violationOwnerAssignmentConfig":{"assignmentRule":"MANAGER","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"Violation Owner Name"}},"scheduled":true,"type":"CONFLICTING_ACCESS_BASED","conflictingAccessCriteria":{"leftCriteria":{"name":"money-in","criteriaList":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67"}]},"rightCriteria":{"name":"money-out","criteriaList":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a68"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a69"}]}}}},"General Policy":{"value":{"description":"Description","ownerRef":{"type":"IDENTITY","id":"2c918087682f9a86016839c05e8f1aff","name":"Owner Name"},"externalPolicyReference":"New policy","policyQuery":"policy query implementation","compensatingControls":"Compensating controls","correctionAdvice":"Correction advice","tags":[],"state":"ENFORCED","scheduled":false,"creatorId":"2c918087682f9a86016839c05e8f1aff","modifierId":null,"violationOwnerAssignmentConfig":null,"name":"General-Policy-Name"}}}}}},"responses":{"201":{"description":"SOD policy created","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Policy id","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"name":{"type":"string","description":"Policy Business Name","example":"policy-xyz"},"created":{"type":"string","format":"date-time","description":"The time when this SOD policy is created.","example":"2020-01-01T00:00:00.000000Z"},"modified":{"type":"string","format":"date-time","description":"The time when this SOD policy is modified.","example":"2020-01-01T00:00:00.000000Z"},"description":{"type":"string","description":"Optional description of the SOD policy","example":"This policy ensures compliance of xyz"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"externalPolicyReference":{"type":"string","description":"Optional External Policy Reference","example":"XYZ policy"},"policyQuery":{"type":"string","description":"Search query of the SOD policy","example":"@access(id:0f11f2a4-7c94-4bf3-a2bd-742580fe3bdg) AND @access(id:0f11f2a4-7c94-4bf3-a2bd-742580fe3bdf)"},"compensatingControls":{"type":"string","description":"Optional compensating controls(Mitigating Controls)","example":"Have a manager review the transaction decisions for their \"out of compliance\" employee"},"correctionAdvice":{"type":"string","description":"Optional correction advice","example":"Based on the role of the employee, managers should remove access that is not required for their job function."},"state":{"type":"string","description":"whether the policy is enforced or not","enum":["ENFORCED","NOT_ENFORCED"],"example":"ENFORCED"},"tags":{"type":"array","description":"tags for this policy object","example":["TAG1","TAG2"],"items":{"type":"string"}},"creatorId":{"type":"string","description":"Policy's creator ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"modifierId":{"type":"string","description":"Policy's modifier ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","nullable":true},"violationOwnerAssignmentConfig":{"nullable":true,"type":"object","properties":{"assignmentRule":{"type":"string","enum":["MANAGER","STATIC"],"description":"Details about the violations owner.\nMANAGER - identity's manager\nSTATIC - Governance Group or Identity","example":"MANAGER"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}}},"scheduled":{"type":"boolean","description":"defines whether a policy has been scheduled or not","example":true},"type":{"type":"string","description":"whether a policy is query based or conflicting access based","default":"GENERAL","enum":["GENERAL","CONFLICTING_ACCESS_BASED"],"example":"GENERAL"},"conflictingAccessCriteria":{"nullable":true,"type":"object","properties":{"leftCriteria":{"type":"object","properties":{"name":{"type":"string","description":"Business name for the access construct list","example":"money-in"},"criteriaList":{"type":"array","description":"List of criteria. There is a min of 1 and max of 50 items in the list.","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"example":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66","name":"Administrator"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67","name":"Administrator"}]}}},"rightCriteria":{"type":"object","properties":{"name":{"type":"string","description":"Business name for the access construct list","example":"money-in"},"criteriaList":{"type":"array","description":"List of criteria. There is a min of 1 and max of 50 items in the list.","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"example":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66","name":"Administrator"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67","name":"Administrator"}]}}}}}}},"examples":{"Conflicting Access Based Policy":{"value":{"id":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","name":"Conflicting-Policy-Name","created":"2020-01-01T00:00:00.000000Z","modified":"2020-01-01T00:00:00.000000Z","description":"This policy ensures compliance of xyz","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"Owner Name"},"externalPolicyReference":"XYZ policy","policyQuery":"@access(id:2c9180866166b5b0016167c32ef31a66 OR id:2c9180866166b5b0016167c32ef31a67) AND @access(id:2c9180866166b5b0016167c32ef31a68 OR id:2c9180866166b5b0016167c32ef31a69)","compensatingControls":"Have a manager review the transaction decisions for their \"out of compliance\" employee","correctionAdvice":"Based on the role of the employee, managers should remove access that is not required for their job function.","state":"ENFORCED","tags":["string"],"creatorId":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","modifierId":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","violationOwnerAssignmentConfig":{"assignmentRule":"MANAGER","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"Violation Owner Name"}},"scheduled":true,"type":"CONFLICTING_ACCESS_BASED","conflictingAccessCriteria":{"leftCriteria":{"name":"money-in","criteriaList":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67"}]},"rightCriteria":{"name":"money-out","criteriaList":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a68"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a69"}]}}}},"General Policy":{"value":{"description":"Description","ownerRef":{"type":"IDENTITY","id":"2c918087682f9a86016839c05e8f1aff","name":"Owner Name"},"externalPolicyReference":"New policy","policyQuery":"policy query implementation","compensatingControls":"Compensating controls","correctionAdvice":"Correction advice","tags":[],"state":"ENFORCED","scheduled":false,"creatorId":"2c918087682f9a86016839c05e8f1aff","modifierId":null,"violationOwnerAssignmentConfig":null,"type":"GENERAL","conflictingAccessCriteria":null,"id":"52c11db4-733e-4c31-949a-766c95ec95f1","name":"General-Policy-Name","created":"2020-05-12T19:47:38Z","modified":"2020-05-12T19:47:38Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/sod-policies","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","name":"policy-xyz","created":"2020-01-01T00:00:00.000000Z","modified":"2020-01-01T00:00:00.000000Z","description":"This policy ensures compliance of xyz","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"externalPolicyReference":"XYZ policy","policyQuery":"@access(id:0f11f2a4-7c94-4bf3-a2bd-742580fe3bdg) AND @access(id:0f11f2a4-7c94-4bf3-a2bd-742580fe3bdf)","compensatingControls":"Have a manager review the transaction decisions for their \"out of compliance\" employee","correctionAdvice":"Based on the role of the employee, managers should remove access that is not required for their job function.","state":"ENFORCED","tags":["TAG1","TAG2"],"creatorId":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","modifierId":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","violationOwnerAssignmentConfig":{"assignmentRule":"MANAGER","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}},"scheduled":true,"type":"GENERAL","conflictingAccessCriteria":{"leftCriteria":{"name":"money-in","criteriaList":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66","name":"Administrator"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67","name":"Administrator"}]},"rightCriteria":{"name":"money-in","criteriaList":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66","name":"Administrator"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67","name":"Administrator"}]}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create SOD Policy","description":{"content":"This creates both General and Conflicting Access Based policy, with a limit of 50 entitlements for each (left & right) criteria for Conflicting Access Based SOD policy\nRequires role of ORG_ADMIN","type":"text/plain"},"url":{"path":["sod-policies"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create SOD Policy + + + +This creates both General and Conflicting Access Based policy, with a limit of 50 entitlements for each (left & right) criteria for Conflicting Access Based SOD policy +Requires role of ORG_ADMIN + +
    Request Body required
      ownerRef object
      violationOwnerAssignmentConfig object
      ownerRef object
      conflictingAccessCriteria object
      leftCriteria object
      criteriaList object[]
      + +List of criteria. There is a min of 1 and max of 50 items in the list. + +
      rightCriteria object
      criteriaList object[]
      + +List of criteria. There is a min of 1 and max of 50 items in the list. + +
    + +SOD policy created + +
    Schema
      ownerRef object
      violationOwnerAssignmentConfig object
      ownerRef object
      conflictingAccessCriteria object
      leftCriteria object
      criteriaList object[]
      + +List of criteria. There is a min of 1 and max of 50 items in the list. + +
      rightCriteria object
      criteriaList object[]
      + +List of criteria. There is a min of 1 and max of 50 items in the list. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-source.api.mdx b/docs/sailpoint-api-beta/create-source.api.mdx new file mode 100644 index 000000000..903e18809 --- /dev/null +++ b/docs/sailpoint-api-beta/create-source.api.mdx @@ -0,0 +1,156 @@ +--- +id: create-source +sidebar_label: Creates a source in IdentityNow. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createSource","tags":["Sources"],"description":"This creates a specific source with a full source JSON representation. Any passwords are submitted as plain-text and encrypted upon receipt in IdentityNow.\nA token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","parameters":[{"in":"query","name":"provisionAsCsv","description":"Configures the source as a DelimitedFile type of source.","schema":{"type":"boolean"},"required":false}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"the id of the Source","example":"2c91808568c529c60168cca6f90c1324"},"description":{"type":"string","description":"Human-readable description of the source","example":"This is the corporate directory."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to an owning Identity Object"},"cluster":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the associated Cluster","example":{"type":"CLUSTER","id":"2c9180866166b5b0016167c32ef31a66","name":"Corporate Cluster"}},"accountCorrelationConfig":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Correlation Config object","example":{"type":"ACCOUNT_CORRELATION_CONFIG","id":"2c9180855d191c59015d28583727245a","name":"Directory [source-62867] Account Correlation"}},"accountCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used."},"managerCorrelationMapping":{"description":"Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity","type":"object","properties":{"accountAttribute":{"type":"string","description":"Name of the attribute to use for manager correlation. The value found on the account attribute will be used to lookup the manager's identity.","example":"manager"},"identityAttribute":{"type":"string","description":"Name of the identity attribute to search when trying to find a manager using the value from the accountAttribute.","example":"manager"}}},"managerCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient."},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called."},"schemas":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to Schema objects","example":[{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232a","name":"account"},{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232b","name":"group"}]},"passwordPolicies":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to the associated PasswordPolicy objects.","example":[{"type":"PASSWORD_POLICY","id":"2c9180855d191c59015d291ceb053980","name":"Corporate Password Policy"}]},"features":{"type":"array","description":"Optional features that can be supported by a source.","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"example":["SYNC_PROVISIONING","MANAGER_LOOKUP","SEARCH","PROVISIONING","AUTHENTICATE","GROUP_PROVISIONING","PASSWORD"]},"type":{"type":"string","description":"Specifies the type of system being managed e.g. Active Directory, Workday, etc..","example":"OpenLDAP - Direct"},"connector":{"type":"string","description":"Connector script name.","example":"active-directory"},"connectorClass":{"type":"string","description":"The fully qualified name of the Java class that implements the connector interface.","example":"sailpoint.connector.LDAPConnector"},"connectorAttributes":{"type":"object","description":"Connector specific configuration; will differ from type to type.","example":{"healthCheckTimeout":30,"authSearchAttributes":["cn","uid","mail"]}},"deleteThreshold":{"type":"integer","format":"int32","description":"Number from 0 to 100 that specifies when to skip the delete phase.","example":10},"authoritative":{"type":"boolean","description":"When true indicates the source is referenced by an IdentityProfile.","example":false},"managementWorkgroup":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to Management Workgroup for this Source"},"healthy":{"type":"boolean","description":"When true indicates a healthy source","example":true},"status":{"type":"string","description":"A status identifier, giving specific information on why a source is healthy or not","example":"SOURCE_STATE_HEALTHY"},"since":{"type":"string","description":"Timestamp showing when a source health check was last performed","example":"2021-09-28T15:48:29.3801666300Z"},"connectorId":{"type":"string","description":"The id of connector","example":"active-directory"},"connectorName":{"type":"string","description":"The name of the connector that was chosen on source creation","example":"Active Directory"},"connectionType":{"type":"string","description":"The type of connection (direct or file)","example":"file"},"connectorImplementstionId":{"type":"string","description":"The connector implementstion id","example":"delimited-file"}}}}}},"responses":{"201":{"description":"Created Source object. Any passwords will only show the the encrypted cipher-text, as they are not decrypt-able in IdentityNow cloud-based services, per IdentityNow security design.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"the id of the Source","example":"2c91808568c529c60168cca6f90c1324"},"description":{"type":"string","description":"Human-readable description of the source","example":"This is the corporate directory."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to an owning Identity Object"},"cluster":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the associated Cluster","example":{"type":"CLUSTER","id":"2c9180866166b5b0016167c32ef31a66","name":"Corporate Cluster"}},"accountCorrelationConfig":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Correlation Config object","example":{"type":"ACCOUNT_CORRELATION_CONFIG","id":"2c9180855d191c59015d28583727245a","name":"Directory [source-62867] Account Correlation"}},"accountCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used."},"managerCorrelationMapping":{"description":"Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity","type":"object","properties":{"accountAttribute":{"type":"string","description":"Name of the attribute to use for manager correlation. The value found on the account attribute will be used to lookup the manager's identity.","example":"manager"},"identityAttribute":{"type":"string","description":"Name of the identity attribute to search when trying to find a manager using the value from the accountAttribute.","example":"manager"}}},"managerCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient."},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called."},"schemas":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to Schema objects","example":[{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232a","name":"account"},{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232b","name":"group"}]},"passwordPolicies":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to the associated PasswordPolicy objects.","example":[{"type":"PASSWORD_POLICY","id":"2c9180855d191c59015d291ceb053980","name":"Corporate Password Policy"}]},"features":{"type":"array","description":"Optional features that can be supported by a source.","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"example":["SYNC_PROVISIONING","MANAGER_LOOKUP","SEARCH","PROVISIONING","AUTHENTICATE","GROUP_PROVISIONING","PASSWORD"]},"type":{"type":"string","description":"Specifies the type of system being managed e.g. Active Directory, Workday, etc..","example":"OpenLDAP - Direct"},"connector":{"type":"string","description":"Connector script name.","example":"active-directory"},"connectorClass":{"type":"string","description":"The fully qualified name of the Java class that implements the connector interface.","example":"sailpoint.connector.LDAPConnector"},"connectorAttributes":{"type":"object","description":"Connector specific configuration; will differ from type to type.","example":{"healthCheckTimeout":30,"authSearchAttributes":["cn","uid","mail"]}},"deleteThreshold":{"type":"integer","format":"int32","description":"Number from 0 to 100 that specifies when to skip the delete phase.","example":10},"authoritative":{"type":"boolean","description":"When true indicates the source is referenced by an IdentityProfile.","example":false},"managementWorkgroup":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to Management Workgroup for this Source"},"healthy":{"type":"boolean","description":"When true indicates a healthy source","example":true},"status":{"type":"string","description":"A status identifier, giving specific information on why a source is healthy or not","example":"SOURCE_STATE_HEALTHY"},"since":{"type":"string","description":"Timestamp showing when a source health check was last performed","example":"2021-09-28T15:48:29.3801666300Z"},"connectorId":{"type":"string","description":"The id of connector","example":"active-directory"},"connectorName":{"type":"string","description":"The name of the connector that was chosen on source creation","example":"Active Directory"},"connectionType":{"type":"string","description":"The type of connection (direct or file)","example":"file"},"connectorImplementstionId":{"type":"string","description":"The connector implementstion id","example":"delimited-file"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/sources","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"2c91808568c529c60168cca6f90c1324","description":"This is the corporate directory.","owner":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"cluster":{"type":"CLUSTER","id":"2c9180866166b5b0016167c32ef31a66","name":"Corporate Cluster"},"accountCorrelationConfig":{"type":"ACCOUNT_CORRELATION_CONFIG","id":"2c9180855d191c59015d28583727245a","name":"Directory [source-62867] Account Correlation"},"accountCorrelationRule":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"managerCorrelationMapping":{"accountAttribute":"manager","identityAttribute":"manager"},"managerCorrelationRule":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"beforeProvisioningRule":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"schemas":[{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232a","name":"account"},{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232b","name":"group"}],"passwordPolicies":[{"type":"PASSWORD_POLICY","id":"2c9180855d191c59015d291ceb053980","name":"Corporate Password Policy"}],"features":["SYNC_PROVISIONING","MANAGER_LOOKUP","SEARCH","PROVISIONING","AUTHENTICATE","GROUP_PROVISIONING","PASSWORD"],"type":"OpenLDAP - Direct","connector":"active-directory","connectorClass":"sailpoint.connector.LDAPConnector","connectorAttributes":{"healthCheckTimeout":30,"authSearchAttributes":["cn","uid","mail"]},"deleteThreshold":10,"authoritative":false,"managementWorkgroup":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"healthy":true,"status":"SOURCE_STATE_HEALTHY","since":"2021-09-28T15:48:29.3801666300Z","connectorId":"active-directory","connectorName":"Active Directory","connectionType":"file","connectorImplementstionId":"delimited-file"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Creates a source in IdentityNow.","description":{"content":"This creates a specific source with a full source JSON representation. Any passwords are submitted as plain-text and encrypted upon receipt in IdentityNow.\nA token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Configures the source as a DelimitedFile type of source.","type":"text/plain"},"key":"provisionAsCsv","value":""}],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Creates a source in IdentityNow. + + + +This creates a specific source with a full source JSON representation. Any passwords are submitted as plain-text and encrypted upon receipt in IdentityNow. +A token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + +
    Query Parameters
    Request Body required
      owner object
      + +Reference to an owning Identity Object + +
      cluster object
      + +Reference to the associated Cluster + +
      accountCorrelationConfig object
      + +Reference to a Correlation Config object + +
      accountCorrelationRule object
      + +Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used. + +
      managerCorrelationMapping object
      + +Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity + +
      managerCorrelationRule object
      + +Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient. + +
      beforeProvisioningRule object
      + +Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called. + +
      schemas object[]
      + +List of references to Schema objects + +
      passwordPolicies object[]
      + +List of references to the associated PasswordPolicy objects. + +
      managementWorkgroup object
      + +Reference to Management Workgroup for this Source + +
    + +Created Source object. Any passwords will only show the the encrypted cipher-text, as they are not decrypt-able in IdentityNow cloud-based services, per IdentityNow security design. + +
    Schema
      owner object
      + +Reference to an owning Identity Object + +
      cluster object
      + +Reference to the associated Cluster + +
      accountCorrelationConfig object
      + +Reference to a Correlation Config object + +
      accountCorrelationRule object
      + +Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used. + +
      managerCorrelationMapping object
      + +Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity + +
      managerCorrelationRule object
      + +Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient. + +
      beforeProvisioningRule object
      + +Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called. + +
      schemas object[]
      + +List of references to Schema objects + +
      passwordPolicies object[]
      + +List of references to the associated PasswordPolicy objects. + +
      managementWorkgroup object
      + +Reference to Management Workgroup for this Source + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-subscription.api.mdx b/docs/sailpoint-api-beta/create-subscription.api.mdx new file mode 100644 index 000000000..5cb72bedc --- /dev/null +++ b/docs/sailpoint-api-beta/create-subscription.api.mdx @@ -0,0 +1,109 @@ +--- +id: create-subscription +sidebar_label: Create a Subscription +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createSubscription","tags":["Triggers"],"description":"This API creates a new subscription to a trigger and defines trigger invocation details. The type of subscription determines which config object is required:\n* HTTP subscriptions require httpConfig\n* EventBridge subscriptions require eventBridgeConfig","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["triggerId","type","name"],"properties":{"name":{"type":"string","description":"Subscription name.","example":"Access request subscription"},"description":{"type":"string","description":"Subscription description.","example":"Access requested to site xyz"},"triggerId":{"type":"string","description":"ID of trigger subscribed to.","example":"idn:access-requested"},"type":{"type":"string","description":"Subscription type. **NOTE** If type is EVENTBRIDGE, then eventBridgeConfig is required. If type is HTTP, then httpConfig is required.","enum":["HTTP","EVENTBRIDGE"],"example":"HTTP"},"responseDeadline":{"type":"string","description":"Deadline for completing REQUEST_RESPONSE trigger invocation, represented in ISO-8601 duration format.","example":"PT1H","default":"PT1H"},"httpConfig":{"description":"Config required if HTTP subscription type is used.","type":"object","properties":{"url":{"type":"string","description":"URL of the external/custom integration.","example":"https://www.example.com"},"httpDispatchMode":{"type":"string","description":"HTTP response modes, i.e. SYNC, ASYNC, or DYNAMIC.","enum":["SYNC","ASYNC","DYNAMIC"],"example":"SYNC"},"httpAuthenticationType":{"type":"string","description":"Defines the HTTP Authentication type. Additional values may be added in the future.\n\nIf *NO_AUTH* is selected, no extra information will be in HttpConfig.\n\nIf *BASIC_AUTH* is selected, HttpConfig will include BasicAuthConfig with Username and Password as strings.\n\nIf *BEARER_TOKEN* is selected, HttpConfig will include BearerTokenAuthConfig with Token as string.","enum":["NO_AUTH","BASIC_AUTH","BEARER_TOKEN"],"default":"NO_AUTH","example":"BASIC_AUTH"},"basicAuthConfig":{"type":"object","properties":{"userName":{"type":"string","description":"The username to authenticate.","example":"user@example.com"},"password":{"type":"string","nullable":true,"description":"The password to authenticate. On response, this field is set to null as to not return secrets.","example":null}},"description":"Config required if BASIC_AUTH is used."},"bearerTokenAuthConfig":{"type":"object","properties":{"bearerToken":{"type":"string","nullable":true,"description":"Bearer token","example":null}},"description":"Config required if BEARER_TOKEN authentication is used. On response, this field is set to null as to not return secrets."}},"required":["url","httpDispatchMode"]},"eventBridgeConfig":{"description":"Config required if EVENTBRIDGE subscription type is used.","type":"object","properties":{"awsAccount":{"type":"string","description":"AWS Account Number (12-digit number) that has the EventBridge Partner Event Source Resource.","example":"123456789012"},"awsRegion":{"type":"string","description":"AWS Region that has the EventBridge Partner Event Source Resource. See https://docs.aws.amazon.com/general/latest/gr/rande.html for a full list of available values.","example":"us-west-1"}},"required":["awsAccount","awsRegion"]},"enabled":{"type":"boolean","description":"Whether subscription should receive real-time trigger invocations or not.\n\nTest trigger invocations are always enabled regardless of this option.","default":true,"example":true},"filter":{"type":"string","description":"JSONPath filter to conditionally invoke trigger when expression evaluates to true.","example":"$[?($.identityId == \"201327fda1c44704ac01181e963d463c\")]","externalDocs":{"description":"JSONPath filter documentation","url":"https://developer.sailpoint.com/triggers/filtering_event_triggers.html#filtering-event-triggers"}}}},"examples":{"HTTP Subscription":{"value":{"name":"Access request subscription","description":"Access requested to site xyz","triggerId":"idn:access-requested","type":"HTTP","httpConfig":{"url":"https://www.example.com","httpDispatchMode":"SYNC","httpAuthenticationType":"BASIC_AUTH","basicAuthConfig":{"userName":"user@example.com","password":"eRtg4%6yuI!"}},"enabled":true,"filter":"$[?($.identityId == \"201327fda1c44704ac01181e963d463c\")]"}},"HTTP Async Subscription":{"value":{"name":"Access request subscription","description":"Access requested to site xyz","triggerId":"idn:access-requested","type":"HTTP","responseDeadline":"PT1H","httpConfig":{"url":"https://www.example.com","httpDispatchMode":"ASYNC","httpAuthenticationType":"BASIC_AUTH","basicAuthConfig":{"userName":"user@example.com","password":"eRtg4%6yuI!"}},"enabled":true,"filter":"$[?($.identityId == \"201327fda1c44704ac01181e963d463c\")]"}},"EventBridge Subscription":{"value":{"name":"Access request subscription","description":"Access requested to site xyz","triggerId":"idn:access-requested","type":"EVENTBRIDGE","eventBridgeConfig":{"awsAccount":"123456789012","awsRegion":"us-west-1"},"enabled":true,"filter":"$[?($.identityId == \"201327fda1c44704ac01181e963d463c\")]"}}}}}},"responses":{"201":{"description":"New subscription to a trigger. The trigger can now be invoked by the method defined in the subscription.","content":{"application/json":{"schema":{"type":"object","required":["id","triggerId","type","name","triggerName","enabled","responseDeadline"],"properties":{"id":{"type":"string","description":"Subscription ID.","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"name":{"type":"string","description":"Subscription name.","example":"Access request subscription"},"description":{"type":"string","description":"Subscription description.","example":"Access requested to site xyz"},"triggerId":{"type":"string","description":"ID of trigger subscribed to.","example":"idn:access-requested"},"triggerName":{"type":"string","description":"Trigger name of trigger subscribed to.","example":"Access Requested"},"type":{"type":"string","description":"Subscription type. **NOTE** If type is EVENTBRIDGE, then eventBridgeConfig is required. If type is HTTP, then httpConfig is required.","enum":["HTTP","EVENTBRIDGE"],"example":"HTTP"},"responseDeadline":{"type":"string","description":"Deadline for completing REQUEST_RESPONSE trigger invocation, represented in ISO-8601 duration format.","example":"PT1H","default":"PT1H"},"httpConfig":{"description":"Config required if HTTP subscription type is used.","type":"object","properties":{"url":{"type":"string","description":"URL of the external/custom integration.","example":"https://www.example.com"},"httpDispatchMode":{"type":"string","description":"HTTP response modes, i.e. SYNC, ASYNC, or DYNAMIC.","enum":["SYNC","ASYNC","DYNAMIC"],"example":"SYNC"},"httpAuthenticationType":{"type":"string","description":"Defines the HTTP Authentication type. Additional values may be added in the future.\n\nIf *NO_AUTH* is selected, no extra information will be in HttpConfig.\n\nIf *BASIC_AUTH* is selected, HttpConfig will include BasicAuthConfig with Username and Password as strings.\n\nIf *BEARER_TOKEN* is selected, HttpConfig will include BearerTokenAuthConfig with Token as string.","enum":["NO_AUTH","BASIC_AUTH","BEARER_TOKEN"],"default":"NO_AUTH","example":"BASIC_AUTH"},"basicAuthConfig":{"type":"object","properties":{"userName":{"type":"string","description":"The username to authenticate.","example":"user@example.com"},"password":{"type":"string","nullable":true,"description":"The password to authenticate. On response, this field is set to null as to not return secrets.","example":null}},"description":"Config required if BASIC_AUTH is used."},"bearerTokenAuthConfig":{"type":"object","properties":{"bearerToken":{"type":"string","nullable":true,"description":"Bearer token","example":null}},"description":"Config required if BEARER_TOKEN authentication is used. On response, this field is set to null as to not return secrets."}},"required":["url","httpDispatchMode"]},"eventBridgeConfig":{"description":"Config required if EVENTBRIDGE subscription type is used.","type":"object","properties":{"awsAccount":{"type":"string","description":"AWS Account Number (12-digit number) that has the EventBridge Partner Event Source Resource.","example":"123456789012"},"awsRegion":{"type":"string","description":"AWS Region that has the EventBridge Partner Event Source Resource. See https://docs.aws.amazon.com/general/latest/gr/rande.html for a full list of available values.","example":"us-west-1"}},"required":["awsAccount","awsRegion"]},"enabled":{"type":"boolean","description":"Whether subscription should receive real-time trigger invocations or not.\nTest trigger invocations are always enabled regardless of this option.","default":true,"example":true},"filter":{"type":"string","description":"JSONPath filter to conditionally invoke trigger when expression evaluates to true.","example":"$[?($.identityId == \"201327fda1c44704ac01181e963d463c\")]","externalDocs":{"description":"JSONPath filter documentation","url":"https://developer.sailpoint.com/triggers/filtering_event_triggers.html#filtering-event-triggers"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"oauth2":["idn:trigger-service-subscriptions:create"]}],"method":"post","path":"/trigger-subscriptions","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"Access request subscription","description":"Access requested to site xyz","triggerId":"idn:access-requested","type":"HTTP","responseDeadline":"PT1H","httpConfig":{"url":"https://www.example.com","httpDispatchMode":"SYNC","httpAuthenticationType":"BASIC_AUTH","basicAuthConfig":{"userName":"user@example.com","password":null},"bearerTokenAuthConfig":{"bearerToken":null}},"eventBridgeConfig":{"awsAccount":"123456789012","awsRegion":"us-west-1"},"enabled":true,"filter":"$[?($.identityId == \"201327fda1c44704ac01181e963d463c\")]"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create a Subscription","description":{"content":"This API creates a new subscription to a trigger and defines trigger invocation details. The type of subscription determines which config object is required:\n* HTTP subscriptions require httpConfig\n* EventBridge subscriptions require eventBridgeConfig","type":"text/plain"},"url":{"path":["trigger-subscriptions"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}},"auth":{"type":"oauth2","oauth2":[]}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create a Subscription + + + +This API creates a new subscription to a trigger and defines trigger invocation details. The type of subscription determines which config object is required: +* HTTP subscriptions require httpConfig +* EventBridge subscriptions require eventBridgeConfig + +
    Request Body required
      httpConfig object
      + +Config required if HTTP subscription type is used. + +
      basicAuthConfig object
      + +Config required if BASIC_AUTH is used. + +
      bearerTokenAuthConfig object
      + +Config required if BEARER_TOKEN authentication is used. On response, this field is set to null as to not return secrets. + +
      eventBridgeConfig object
      + +Config required if EVENTBRIDGE subscription type is used. + +
    + +New subscription to a trigger. The trigger can now be invoked by the method defined in the subscription. + +
    Schema
      httpConfig object
      + +Config required if HTTP subscription type is used. + +
      basicAuthConfig object
      + +Config required if BASIC_AUTH is used. + +
      bearerTokenAuthConfig object
      + +Config required if BEARER_TOKEN authentication is used. On response, this field is set to null as to not return secrets. + +
      eventBridgeConfig object
      + +Config required if EVENTBRIDGE subscription type is used. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-transform.api.mdx b/docs/sailpoint-api-beta/create-transform.api.mdx new file mode 100644 index 000000000..eab4d2dca --- /dev/null +++ b/docs/sailpoint-api-beta/create-transform.api.mdx @@ -0,0 +1,68 @@ +--- +id: create-transform +sidebar_label: Create transform +hide_title: true +hide_table_of_contents: true +api: {"tags":["Transforms"],"description":"Creates a new transform object. Request body must include name, type, and attributes.\nA token with transform write authority is required to call this API.","operationId":"createTransform","requestBody":{"required":true,"description":"The transform to be created.","content":{"application/json":{"schema":{"type":"object","description":"DTO for representing an internally- or customer-defined transform.","required":["name","type","attributes"],"properties":{"id":{"type":"string","readOnly":true,"description":"Unique ID of this transform","example":"2cd78adghjkja34jh2b1hkjhasuecd"},"name":{"type":"string","readOnly":true,"description":"Unique name of this transform","example":"Timestamp To Date"},"type":{"type":"string","readOnly":true,"description":"The transform type (see [Transformations in IdentityNow Using Seaspray](https://community.sailpoint.com/docs/DOC-4629)).","example":"concat"},"attributes":{"type":"object","description":"Meta-data about the transform. Values in this list are specific to the type of transform to be executed.","additionalProperties":true,"example":{"inputFormat":"MMM dd yyyy, HH:mm:ss.SSS","outputFormat":"yyyy/dd/MM"}},"internal":{"type":"boolean","readOnly":true,"description":"Indicates whether this is an internal SailPoint-created transform or a customer-created transform","example":false}}},"example":{"name":"Timestamp To Date","type":"dateFormat","attributes":{"inputFormat":"MMM dd yyyy, HH:mm:ss.SSS","outputFormat":"yyyy/dd/MM"}}}}},"responses":{"201":{"description":"Indicates the transform was successfully created and returns its representation.","content":{"application/json":{"schema":{"type":"object","description":"DTO for representing an internally- or customer-defined transform.","required":["name","type","attributes"],"properties":{"id":{"type":"string","readOnly":true,"description":"Unique ID of this transform","example":"2cd78adghjkja34jh2b1hkjhasuecd"},"name":{"type":"string","readOnly":true,"description":"Unique name of this transform","example":"Timestamp To Date"},"type":{"type":"string","readOnly":true,"description":"The transform type (see [Transformations in IdentityNow Using Seaspray](https://community.sailpoint.com/docs/DOC-4629)).","example":"concat"},"attributes":{"type":"object","description":"Meta-data about the transform. Values in this list are specific to the type of transform to be executed.","additionalProperties":true,"example":{"inputFormat":"MMM dd yyyy, HH:mm:ss.SSS","outputFormat":"yyyy/dd/MM"}},"internal":{"type":"boolean","readOnly":true,"description":"Indicates whether this is an internal SailPoint-created transform or a customer-created transform","example":false}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}}},"security":[{"bearerAuth":["idn:transforms:write"]}],"method":"post","path":"/transforms","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"2cd78adghjkja34jh2b1hkjhasuecd","name":"Timestamp To Date","type":"concat","attributes":{"inputFormat":"MMM dd yyyy, HH:mm:ss.SSS","outputFormat":"yyyy/dd/MM"},"internal":false},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create transform","description":{"content":"Creates a new transform object. Request body must include name, type, and attributes.\nA token with transform write authority is required to call this API.","type":"text/plain"},"url":{"path":["transforms"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create transform + + + +Creates a new transform object. Request body must include name, type, and attributes. +A token with transform write authority is required to call this API. + +
    Request Body required
    + +The transform to be created. + +
      attributes object
      + +Meta-data about the transform. Values in this list are specific to the type of transform to be executed. + +
    + +Indicates the transform was successfully created and returns its representation. + +
    Schema
      attributes object
      + +Meta-data about the transform. Values in this list are specific to the type of transform to be executed. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-verified-from-address.api.mdx b/docs/sailpoint-api-beta/create-verified-from-address.api.mdx new file mode 100644 index 000000000..d1da4f780 --- /dev/null +++ b/docs/sailpoint-api-beta/create-verified-from-address.api.mdx @@ -0,0 +1,75 @@ +--- +id: create-verified-from-address +sidebar_label: Create Verified From Address +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createVerifiedFromAddress","tags":["Notifications"],"description":"Create a new sender email address and initiate verification process.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string","example":"sender@example.com"},"verificationStatus":{"type":"string","enum":["PENDING","SUCCESS","FAILED"]}}},"example":{"email":"sender@example.com"}}}},"responses":{"201":{"description":"New Verified Email Status","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string","example":"sender@example.com"},"verificationStatus":{"type":"string","enum":["PENDING","SUCCESS","FAILED"]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/verified-from-addresses","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"string","email":"sender@example.com","verificationStatus":"PENDING"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create Verified From Address","description":{"content":"Create a new sender email address and initiate verification process.","type":"text/plain"},"url":{"path":["verified-from-addresses"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Verified From Address + + + +Create a new sender email address and initiate verification process. + +
    Request Body required
    + +New Verified Email Status + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/create-workflow.api.mdx b/docs/sailpoint-api-beta/create-workflow.api.mdx new file mode 100644 index 000000000..a9dafb116 --- /dev/null +++ b/docs/sailpoint-api-beta/create-workflow.api.mdx @@ -0,0 +1,119 @@ +--- +id: create-workflow +sidebar_label: Create Workflow +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createWorkflow","tags":["Workflows"],"description":"Create a new workflow with the desired trigger and steps specified in the request body.","security":[{"bearerAuth":["sp:workflow:create"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"required":["name","owner"]},{"type":"object","properties":{"name":{"type":"string","description":"The name of the workflow","example":"Send Email"},"owner":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity that owns the workflow. The owner's permissions in IDN will determine what actions the workflow is allowed to perform. Ownership can be changed by updating the owner in a PUT or PATCH request.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}},"example":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}},"description":{"type":"string","description":"Description of what the workflow accomplishes","example":"Send an email to the identity who's attributes changed."},"definition":{"type":"object","description":"The map of steps that the workflow will execute.","properties":{"start":{"type":"string","description":"The name of the starting step.","example":"Send Email Test"},"steps":{"type":"object","description":"One or more step objects that comprise this workflow. Please see the Workflow documentation to see the JSON schema for each step type.","additionalProperties":true,"example":{"Send Email":{"actionId":"sp:send-email","attributes":{"body":"This is a test","from":"sailpoint@sailpoint.com","recipientId.$":"$.identity.id","subject":"test"},"nextStep":"success","selectResult":null,"type":"action"},"success":{"type":"success"}}}}},"enabled":{"type":"boolean","description":"Enable or disable the workflow. Workflows cannot be created in an enabled state.","default":false,"example":false},"trigger":{"type":"object","description":"The trigger that starts the workflow","required":["type","attributes"],"properties":{"type":{"enum":["EVENT","EXTERNAL","SCHEDULED"],"example":"EVENT","description":"The trigger type"},"attributes":{"description":"Workflow Trigger Attributes.","oneOf":[{"title":"Event Trigger Attributes","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The unique ID of the trigger","example":"idn:identity-attributes-changed"},"filter":{"type":"string","description":"JSON path expression that will limit which events the trigger will fire on","example":"$.changes[?(@.attribute == 'manager')]"}}},{"title":"Scheduled Trigger Attributes","type":"object","required":["cronString"],"properties":{"cronString":{"type":"string","description":"A valid CRON expression","externalDocs":{"description":"CRON expression editor","url":"https://crontab.guru/"},"example":"0 * */3 */5 *"}}}]}}}}}]},"examples":{"Event Trigger":{"description":"Workflow initiated by an event trigger","value":{"name":"Send Email","owner":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"description":"Send an email to the identity who's attributes changed.","definition":{"start":"Send Email Test","steps":{"Send Email":{"actionId":"sp:send-email","attributes":{"body":"This is a test","from":"sailpoint@sailpoint.com","recipientId.$":"$.identity.id","subject":"test"},"nextStep":"success","selectResult":null,"type":"action"},"success":{"type":"success"}}},"enabled":false,"trigger":{"type":"EVENT","attributes":{"id":"idn:identity-attributes-changed","filter":"$.changes[?(@.attribute == 'manager')]"}}}},"Scheduled Trigger":{"description":"Workflow initiated by a scheduled trigger","value":{"name":"Send Email","owner":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"description":"Send an email to the identity who's attributes changed.","definition":{"start":"Send Email Test","steps":{"Send Email":{"actionId":"sp:send-email","attributes":{"body":"This is a test","from":"sailpoint@sailpoint.com","recipientId.$":"$.identity.id","subject":"test"},"nextStep":"success","selectResult":null,"type":"action"},"success":{"type":"success"}}},"enabled":false,"trigger":{"type":"SCHEDULED","attributes":{"cronString":"0 * */3 */5 *"}}}}}}}},"responses":{"200":{"description":"The Workflow object","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"id":{"type":"string","description":"Workflow ID. This is a UUID generated upon creation.","example":"d201c5e9-d37b-4aff-af14-66414f39d569"},"executionCount":{"type":"integer","format":"int32","description":"The number of times this workflow has been executed","example":2},"failureCount":{"type":"integer","format":"int32","description":"The number of times this workflow has failed during execution","example":0},"created":{"type":"string","format":"date-time","description":"The date and time the workflow was created","example":"2022-01-10T16:06:16.636381447Z"},"creator":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity that created the workflow.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}},"example":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}}}},{"type":"object","properties":{"name":{"type":"string","description":"The name of the workflow","example":"Send Email"},"owner":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity that owns the workflow. The owner's permissions in IDN will determine what actions the workflow is allowed to perform. Ownership can be changed by updating the owner in a PUT or PATCH request.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}},"example":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}},"description":{"type":"string","description":"Description of what the workflow accomplishes","example":"Send an email to the identity who's attributes changed."},"definition":{"type":"object","description":"The map of steps that the workflow will execute.","properties":{"start":{"type":"string","description":"The name of the starting step.","example":"Send Email Test"},"steps":{"type":"object","description":"One or more step objects that comprise this workflow. Please see the Workflow documentation to see the JSON schema for each step type.","additionalProperties":true,"example":{"Send Email":{"actionId":"sp:send-email","attributes":{"body":"This is a test","from":"sailpoint@sailpoint.com","recipientId.$":"$.identity.id","subject":"test"},"nextStep":"success","selectResult":null,"type":"action"},"success":{"type":"success"}}}}},"enabled":{"type":"boolean","description":"Enable or disable the workflow. Workflows cannot be created in an enabled state.","default":false,"example":false},"trigger":{"type":"object","description":"The trigger that starts the workflow","required":["type","attributes"],"properties":{"type":{"enum":["EVENT","EXTERNAL","SCHEDULED"],"example":"EVENT","description":"The trigger type"},"attributes":{"description":"Workflow Trigger Attributes.","oneOf":[{"title":"Event Trigger Attributes","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The unique ID of the trigger","example":"idn:identity-attributes-changed"},"filter":{"type":"string","description":"JSON path expression that will limit which events the trigger will fire on","example":"$.changes[?(@.attribute == 'manager')]"}}},{"title":"Scheduled Trigger Attributes","type":"object","required":["cronString"],"properties":{"cronString":{"type":"string","description":"A valid CRON expression","externalDocs":{"description":"CRON expression editor","url":"https://crontab.guru/"},"example":"0 * */3 */5 *"}}}]}}}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/workflows","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"Send Email","owner":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"description":"Send an email to the identity who's attributes changed.","definition":{"start":"Send Email Test","steps":{"Send Email":{"actionId":"sp:send-email","attributes":{"body":"This is a test","from":"sailpoint@sailpoint.com","recipientId.$":"$.identity.id","subject":"test"},"nextStep":"success","selectResult":null,"type":"action"},"success":{"type":"success"}}},"enabled":false,"trigger":{"type":"EVENT"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create Workflow","description":{"content":"Create a new workflow with the desired trigger and steps specified in the request body.","type":"text/plain"},"url":{"path":["workflows"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Workflow + + + +Create a new workflow with the desired trigger and steps specified in the request body. + +
    Request Body required
      owner object
      + +The identity that owns the workflow. The owner's permissions in IDN will determine what actions the workflow is allowed to perform. Ownership can be changed by updating the owner in a PUT or PATCH request. + +
      definition object
      + +The map of steps that the workflow will execute. + +
      steps object
      + +One or more step objects that comprise this workflow. Please see the Workflow documentation to see the JSON schema for each step type. + +
      trigger object
      + +The trigger that starts the workflow + +
      attributes object
      + +Workflow Trigger Attributes. + +
    • oneOf
    + +The Workflow object + +
    Schema
      creator object
      + +The identity that created the workflow. + +
      owner object
      + +The identity that owns the workflow. The owner's permissions in IDN will determine what actions the workflow is allowed to perform. Ownership can be changed by updating the owner in a PUT or PATCH request. + +
      definition object
      + +The map of steps that the workflow will execute. + +
      steps object
      + +One or more step objects that comprise this workflow. Please see the Workflow documentation to see the JSON schema for each step type. + +
      trigger object
      + +The trigger that starts the workflow + +
      attributes object
      + +Workflow Trigger Attributes. + +
    • oneOf
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/custom-password-instructions.tag.mdx b/docs/sailpoint-api-beta/custom-password-instructions.tag.mdx new file mode 100644 index 000000000..e4889e175 --- /dev/null +++ b/docs/sailpoint-api-beta/custom-password-instructions.tag.mdx @@ -0,0 +1,19 @@ +--- +id: custom-password-instructions +title: Custom Password Instructions +description: Custom Password Instructions +--- + + + +Operations for managing custom password instructions + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-access-profile.api.mdx b/docs/sailpoint-api-beta/delete-access-profile.api.mdx new file mode 100644 index 000000000..0dede4aa8 --- /dev/null +++ b/docs/sailpoint-api-beta/delete-access-profile.api.mdx @@ -0,0 +1,79 @@ +--- +id: delete-access-profile +sidebar_label: Delete the specified Access Profile +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteAccessProfile","tags":["Access Profiles"],"description":"This API deletes an existing Access Profile.\n\nThe Access Profile must not be in use. If it is, a 400 error is returned.\n\nA token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to invoke this API. In addition, a SOURCE_SUBADMIN token must be able to administer the Source associated with the Access Profile.","parameters":[{"name":"id","in":"path","description":"ID of the Access Profile to delete","required":true,"schema":{"type":"string","example":"2c91808a7813090a017814121919ecca"}}],"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"A DTO with a TaskResult reference of the delete job"},"example":{"type":"TASK_RESULT","id":"ff8080817e8cc815017e8ce4b6910003","name":null}}}},"400":{"description":"Returned when an access profile cannot be deleted as it's being used.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"400.2.1.0 Object in use by another":{"description":"Returned when an access profile cannot be deleted as it's being used","value":{"detailCode":"400.2.1.0 Object in use by another","trackingId":"c9c1033c55b84ebc9e93e926dcf8b8b3","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The \"testAccessProfile\" access profile can't be deleted because it's in use."}]}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:access-profile:manage"]}],"method":"delete","path":"/access-profiles/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete the specified Access Profile","description":{"content":"This API deletes an existing Access Profile.\n\nThe Access Profile must not be in use. If it is, a 400 error is returned.\n\nA token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to invoke this API. In addition, a SOURCE_SUBADMIN token must be able to administer the Source associated with the Access Profile.","type":"text/plain"},"url":{"path":["access-profiles",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the Access Profile to delete","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete the specified Access Profile + + + +This API deletes an existing Access Profile. + +The Access Profile must not be in use. If it is, a 400 error is returned. + +A token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to invoke this API. In addition, a SOURCE_SUBADMIN token must be able to administer the Source associated with the Access Profile. + +
    Path Parameters
    + +Accepted - Returned if the request was successfully accepted into the system. + +
    Schema
    + +Returned when an access profile cannot be deleted as it's being used. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-account.api.mdx b/docs/sailpoint-api-beta/delete-account.api.mdx new file mode 100644 index 000000000..3cc7625be --- /dev/null +++ b/docs/sailpoint-api-beta/delete-account.api.mdx @@ -0,0 +1,88 @@ +--- +id: delete-account +sidebar_label: Delete Account +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteAccount","tags":["Accounts"],"description":"This API submits an account delete task and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:account:delete"]}],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The account ID","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"202":{"description":"Async task details","content":{"application/json":{"schema":{"description":"Accounts async response containing details on started async process","required":["id"],"type":"object","properties":{"id":{"description":"id of the task","type":"string","example":"2c91808474683da6017468693c260195"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/accounts/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete Account","description":{"content":"This API submits an account delete task and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The account ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Account + + + +This API submits an account delete task and returns the task ID. +A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    + +Async task details + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-campaign-template-schedule.api.mdx b/docs/sailpoint-api-beta/delete-campaign-template-schedule.api.mdx new file mode 100644 index 000000000..800f1cd71 --- /dev/null +++ b/docs/sailpoint-api-beta/delete-campaign-template-schedule.api.mdx @@ -0,0 +1,75 @@ +--- +id: delete-campaign-template-schedule +sidebar_label: Deletes a Campaign Template's Schedule +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteCampaignTemplateSchedule","tags":["Certification Campaigns"],"description":"Deletes the schedule for a campaign template. Returns a 404 if there is no schedule set.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the campaign template whose schedule is being deleted."}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/campaign-templates/{id}/schedule","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Deletes a Campaign Template's Schedule","description":{"content":"Deletes the schedule for a campaign template. Returns a 404 if there is no schedule set.","type":"text/plain"},"url":{"path":["campaign-templates",":id","schedule"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the campaign template whose schedule is being deleted.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Deletes a Campaign Template's Schedule + + + +Deletes the schedule for a campaign template. Returns a 404 if there is no schedule set. + +
    Path Parameters
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-campaign-template.api.mdx b/docs/sailpoint-api-beta/delete-campaign-template.api.mdx new file mode 100644 index 000000000..efa46179d --- /dev/null +++ b/docs/sailpoint-api-beta/delete-campaign-template.api.mdx @@ -0,0 +1,75 @@ +--- +id: delete-campaign-template +sidebar_label: Delete a Campaign Template +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteCampaignTemplate","tags":["Certification Campaigns"],"description":"Deletes a campaign template by ID.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the campaign template being deleted.","example":"2c9180835d191a86015d28455b4a2329"}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/campaign-templates/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete a Campaign Template","description":{"content":"Deletes a campaign template by ID.","type":"text/plain"},"url":{"path":["campaign-templates",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the campaign template being deleted.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete a Campaign Template + + + +Deletes a campaign template by ID. + +
    Path Parameters
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-campaigns.api.mdx b/docs/sailpoint-api-beta/delete-campaigns.api.mdx new file mode 100644 index 000000000..7ff48b165 --- /dev/null +++ b/docs/sailpoint-api-beta/delete-campaigns.api.mdx @@ -0,0 +1,91 @@ +--- +id: delete-campaigns +sidebar_label: Deletes Campaigns +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteCampaigns","tags":["Certification Campaigns"],"description":"Deletes campaigns whose Ids are specified in the provided list of campaign Ids. Authorized callers must be an ORG_ADMIN or a CERT_ADMIN.","requestBody":{"description":"The ids of the campaigns to delete.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"description":"The ids of the campaigns to delete","type":"array","items":{"type":"string"},"example":["2c9180887335cee10173490db1776c26","2c9180836a712436016a7125a90c0021"]}}}}}},"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/campaigns/delete","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"ids":["2c9180887335cee10173490db1776c26","2c9180836a712436016a7125a90c0021"]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Deletes Campaigns","description":{"content":"Deletes campaigns whose Ids are specified in the provided list of campaign Ids. Authorized callers must be an ORG_ADMIN or a CERT_ADMIN.","type":"text/plain"},"url":{"path":["campaigns","delete"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Deletes Campaigns + + + +Deletes campaigns whose Ids are specified in the provided list of campaign Ids. Authorized callers must be an ORG_ADMIN or a CERT_ADMIN. + +
    Request Body required
    + +The ids of the campaigns to delete. + +
    + +Accepted - Returned if the request was successfully accepted into the system. + +
    Schema
    • object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-connector-rule.api.mdx b/docs/sailpoint-api-beta/delete-connector-rule.api.mdx new file mode 100644 index 000000000..a8d328116 --- /dev/null +++ b/docs/sailpoint-api-beta/delete-connector-rule.api.mdx @@ -0,0 +1,72 @@ +--- +id: delete-connector-rule +sidebar_label: Delete a Connector-Rule +hide_title: true +hide_table_of_contents: true +api: {"tags":["Connector Rule Management"],"description":"Deletes the connector rule specified by the given ID.\nA token with ORG_ADMIN authority is required to call this API.","operationId":"deleteConnectorRule","parameters":[{"name":"id","in":"path","description":"ID of the connector rule to delete","required":true,"style":"simple","explode":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:connector-rule:write"]}],"method":"delete","path":"/connector-rules/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete a Connector-Rule","description":{"content":"Deletes the connector rule specified by the given ID.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["connector-rules",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the connector rule to delete","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete a Connector-Rule + + + +Deletes the connector rule specified by the given ID. +A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-custom-password-instructions.api.mdx b/docs/sailpoint-api-beta/delete-custom-password-instructions.api.mdx new file mode 100644 index 000000000..c5ef328cb --- /dev/null +++ b/docs/sailpoint-api-beta/delete-custom-password-instructions.api.mdx @@ -0,0 +1,79 @@ +--- +id: delete-custom-password-instructions +sidebar_label: Delete Custom Password Instructions by page ID +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteCustomPasswordInstructions","tags":["Custom Password Instructions"],"description":"This API delete the custom password instructions for the specified page ID. A token with ORG_ADMIN authority is required to call this API.","parameters":[{"in":"path","name":"pageId","schema":{"type":"string","enum":["change-password:enter-password","change-password:finish","flow-selection:select","forget-username:user-email","mfa:enter-code","mfa:enter-kba","mfa:select","reset-password:enter-password","reset-password:enter-username","reset-password:finish","unlock-account:enter-username","unlock-account:finish"]},"required":true,"description":"The page ID of custom password instructions to delete.","example":"mfa:select"},{"in":"query","name":"locale","schema":{"type":"string"},"description":"The locale for the custom instructions, a BCP47 language tag. The default value is \\\"default\\\"."}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/custom-password-instructions/{pageId}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete Custom Password Instructions by page ID","description":{"content":"This API delete the custom password instructions for the specified page ID. A token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["custom-password-instructions",":pageId"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The locale for the custom instructions, a BCP47 language tag. The default value is \\\"default\\\".","type":"text/plain"},"key":"locale","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The page ID of custom password instructions to delete.","type":"text/plain"},"type":"any","value":"","key":"pageId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Custom Password Instructions by page ID + + + +This API delete the custom password instructions for the specified page ID. A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    Query Parameters
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-identity-profile.api.mdx b/docs/sailpoint-api-beta/delete-identity-profile.api.mdx new file mode 100644 index 000000000..d99dc0c45 --- /dev/null +++ b/docs/sailpoint-api-beta/delete-identity-profile.api.mdx @@ -0,0 +1,88 @@ +--- +id: delete-identity-profile +sidebar_label: Delete an Identity Profile +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteIdentityProfile","tags":["Identity Profiles"],"description":"This deletes an Identity Profile based on ID.\nA token with ORG_ADMIN authority is required to call this API to delete an Identity Profile.","parameters":[{"in":"path","name":"identity-profile-id","schema":{"type":"string","format":"uuid"},"required":true,"description":"The Identity Profile ID.","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"description":"An object with a TaskResult reference of the delete job.","type":"object","properties":{"id":{"type":"string","description":"the application ID","example":"ff8081814d977c21014da056804a0af3"},"name":{"type":"string","description":"the application name","example":"Github"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:identity-profile:delete"]}],"method":"delete","path":"/identity-profiles/{identity-profile-id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete an Identity Profile","description":{"content":"This deletes an Identity Profile based on ID.\nA token with ORG_ADMIN authority is required to call this API to delete an Identity Profile.","type":"text/plain"},"url":{"path":["identity-profiles",":identity-profile-id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Identity Profile ID.","type":"text/plain"},"type":"any","value":"","key":"identity-profile-id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete an Identity Profile + + + +This deletes an Identity Profile based on ID. +A token with ORG_ADMIN authority is required to call this API to delete an Identity Profile. + +
    Path Parameters
    + +Accepted - Returned if the request was successfully accepted into the system. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-identity-profiles.api.mdx b/docs/sailpoint-api-beta/delete-identity-profiles.api.mdx new file mode 100644 index 000000000..e090bd5d3 --- /dev/null +++ b/docs/sailpoint-api-beta/delete-identity-profiles.api.mdx @@ -0,0 +1,81 @@ +--- +id: delete-identity-profiles +sidebar_label: Delete Identity Profiles +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteIdentityProfiles","tags":["Identity Profiles"],"description":"This deletes multiple Identity Profiles via a list of supplied IDs.\nOn success, this endpoint will return a reference to the bulk delete task result.\nA token with ORG_ADMIN authority is required to call this API to delete a list of Identity Profiles.","requestBody":{"description":"Identity Profile bulk delete request body.","required":true,"content":{"application/json":{"schema":{"description":"List of Identity Profile IDs to delete.","type":"array","items":{"type":"string"},"example":["2c9180867b2a34e0017b3078d60b0699","2c9180867b2a34e0017b3078d60b0698"]}}}},"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"An object with a TaskResult reference of the bulk delete job"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:identity-profile:delete"]}],"method":"post","path":"/identity-profiles/bulk-delete","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":["2c9180867b2a34e0017b3078d60b0699","2c9180867b2a34e0017b3078d60b0698"],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete Identity Profiles","description":{"content":"This deletes multiple Identity Profiles via a list of supplied IDs.\nOn success, this endpoint will return a reference to the bulk delete task result.\nA token with ORG_ADMIN authority is required to call this API to delete a list of Identity Profiles.","type":"text/plain"},"url":{"path":["identity-profiles","bulk-delete"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Identity Profiles + + + +This deletes multiple Identity Profiles via a list of supplied IDs. +On success, this endpoint will return a reference to the bulk delete task result. +A token with ORG_ADMIN authority is required to call this API to delete a list of Identity Profiles. + +
    Request Body array required
    + +Identity Profile bulk delete request body. + +
    • string
    + +Accepted - Returned if the request was successfully accepted into the system. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-oauth-client.api.mdx b/docs/sailpoint-api-beta/delete-oauth-client.api.mdx new file mode 100644 index 000000000..1dc229ad1 --- /dev/null +++ b/docs/sailpoint-api-beta/delete-oauth-client.api.mdx @@ -0,0 +1,89 @@ +--- +id: delete-oauth-client +sidebar_label: Delete OAuth Client +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteOauthClient","tags":["OAuth Clients"],"description":"This deletes an OAuth client.\nRequest will require the following security scopes:\n- 'idn:oathkeeper-client:delete' - 'idn:oathkeeper-internal-client:delete'","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The OAuth client id","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"204":{"description":"No content."},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/oauth-clients/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete OAuth Client","description":{"content":"This deletes an OAuth client.\nRequest will require the following security scopes:\n- 'idn:oathkeeper-client:delete' - 'idn:oathkeeper-internal-client:delete'","type":"text/plain"},"url":{"path":["oauth-clients",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The OAuth client id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete OAuth Client + + + +This deletes an OAuth client. +Request will require the following security scopes: +- 'idn:oathkeeper-client:delete' - 'idn:oathkeeper-internal-client:delete' + +
    Path Parameters
    + +No content. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-password-sync-group.api.mdx b/docs/sailpoint-api-beta/delete-password-sync-group.api.mdx new file mode 100644 index 000000000..a6ca7b46a --- /dev/null +++ b/docs/sailpoint-api-beta/delete-password-sync-group.api.mdx @@ -0,0 +1,67 @@ +--- +id: delete-password-sync-group +sidebar_label: Delete Password Sync Group by ID +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deletePasswordSyncGroup","tags":["Password Sync Groups"],"description":"This API deletes the specified password sync group. A token with ORG_ADMIN authority is required to call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of password sync group to delete.","example":"6881f631-3bd5-4213-9c75-8e05cc3e35dd"}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/password-sync-groups/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete Password Sync Group by ID","description":{"content":"This API deletes the specified password sync group. A token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["password-sync-groups",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of password sync group to delete.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Password Sync Group by ID + + + +This API deletes the specified password sync group. A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-personal-access-token.api.mdx b/docs/sailpoint-api-beta/delete-personal-access-token.api.mdx new file mode 100644 index 000000000..b611f6b0e --- /dev/null +++ b/docs/sailpoint-api-beta/delete-personal-access-token.api.mdx @@ -0,0 +1,91 @@ +--- +id: delete-personal-access-token +sidebar_label: Delete Personal Access Token +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deletePersonalAccessToken","tags":["Personal Access Tokens"],"description":"This deletes a personal access token

    Any of the following rights are required to access this resource:
      \n
    • idn:my-personal-access-tokens:delete
    • \n
    • idn:all-personal-access-tokens:delete
    • \n
    • idn:managed-personal-access-tokens:delete
    • \n
    ","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The personal access token id","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"204":{"description":"No content."},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/personal-access-tokens/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete Personal Access Token","description":{"content":"This deletes a personal access token

    Any of the following rights are required to access this resource:
      \n
    • idn:my-personal-access-tokens:delete
    • \n
    • idn:all-personal-access-tokens:delete
    • \n
    • idn:managed-personal-access-tokens:delete
    • \n
    ","type":"text/plain"},"url":{"path":["personal-access-tokens",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The personal access token id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Personal Access Token + + + +This deletes a personal access token </br> </br> Any of the following rights are required to access this resource: <ul> + <li>idn:my-personal-access-tokens:delete</li> + <li>idn:all-personal-access-tokens:delete</li> + <li>idn:managed-personal-access-tokens:delete</li> +</ul> + +
    Path Parameters
    + +No content. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-provisioning-policy.api.mdx b/docs/sailpoint-api-beta/delete-provisioning-policy.api.mdx new file mode 100644 index 000000000..c319ecdd9 --- /dev/null +++ b/docs/sailpoint-api-beta/delete-provisioning-policy.api.mdx @@ -0,0 +1,88 @@ +--- +id: delete-provisioning-policy +sidebar_label: Delete Provisioning Policy by UsageType +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteProvisioningPolicy","tags":["Sources"],"description":"Deletes the provisioning policy with the specified usage on an application.\nA token with API, or ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:provisioning-policy:delete"]}],"parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source ID.","example":"2c9180835d191a86015d28455b4a2329"},{"in":"path","name":"usageType","required":true,"schema":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"description":"The type of ProvisioningPolicy usage."}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/sources/{sourceId}/provisioning-policies/{usageType}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete Provisioning Policy by UsageType","description":{"content":"Deletes the provisioning policy with the specified usage on an application.\nA token with API, or ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":sourceId","provisioning-policies",":usageType"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source ID.","type":"text/plain"},"type":"any","value":"","key":"sourceId"},{"disabled":false,"description":{"content":"(Required) The type of ProvisioningPolicy usage.","type":"text/plain"},"type":"any","value":"","key":"usageType"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Provisioning Policy by UsageType + + + +Deletes the provisioning policy with the specified usage on an application. +A token with API, or ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-role.api.mdx b/docs/sailpoint-api-beta/delete-role.api.mdx new file mode 100644 index 000000000..dda812241 --- /dev/null +++ b/docs/sailpoint-api-beta/delete-role.api.mdx @@ -0,0 +1,76 @@ +--- +id: delete-role +sidebar_label: Delete a Role +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteRole","tags":["Roles"],"description":"This API deletes a Role by its ID.\nA token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to call this API. In addition, a token with ROLE_SUBADMIN authority may only call this API if all Access Profiles included in the Role are associated to Sources with management workgroups of which the ROLE_SUBADMIN is a member.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"ID of the Role","example":"2c91808a7813090a017814121e121518"}],"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"A DTO with a TaskResult reference of the delete job"},"example":{"type":"TASK_RESULT","id":"402881fc7e73d5df017e73d93f1b0002","name":null}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:role:delete","idn:role-checked:delete"]}],"method":"delete","path":"/roles/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete a Role","description":{"content":"This API deletes a Role by its ID.\nA token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to call this API. In addition, a token with ROLE_SUBADMIN authority may only call this API if all Access Profiles included in the Role are associated to Sources with management workgroups of which the ROLE_SUBADMIN is a member.","type":"text/plain"},"url":{"path":["roles",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the Role","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete a Role + + + +This API deletes a Role by its ID. +A token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to call this API. In addition, a token with ROLE_SUBADMIN authority may only call this API if all Access Profiles included in the Role are associated to Sources with management workgroups of which the ROLE_SUBADMIN is a member. + +
    Path Parameters
    + +Accepted - Returned if the request was successfully accepted into the system. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-schema-attribute.api.mdx b/docs/sailpoint-api-beta/delete-schema-attribute.api.mdx new file mode 100644 index 000000000..53c5898e2 --- /dev/null +++ b/docs/sailpoint-api-beta/delete-schema-attribute.api.mdx @@ -0,0 +1,80 @@ +--- +id: delete-schema-attribute +sidebar_label: Delete a Schema Attribute for Non-Employee Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteSchemaAttribute","tags":["Non-Employee Lifecycle Management"],"description":"This end-point deletes a specific schema attribute for a non-employee source.\n\nRequest will require a security scope of:\n\n'idn:nesr:delete'\n","parameters":[{"in":"path","name":"attributeId","schema":{"type":"string"},"required":true,"description":"The Schema Attribute Id (UUID)"},{"in":"path","name":"sourceId","schema":{"type":"string"},"required":true,"description":"The Source id"}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/non-employee-sources/{sourceId}/schema-attributes/{attributeId}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete a Schema Attribute for Non-Employee Source","description":{"content":"This end-point deletes a specific schema attribute for a non-employee source.\n\nRequest will require a security scope of:\n\n'idn:nesr:delete'\n","type":"text/plain"},"url":{"path":["non-employee-sources",":sourceId","schema-attributes",":attributeId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Schema Attribute Id (UUID)","type":"text/plain"},"type":"any","value":"","key":"attributeId"},{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete a Schema Attribute for Non-Employee Source + + + +This end-point deletes a specific schema attribute for a non-employee source. + +Request will require a security scope of: + +'idn:nesr:delete' + + +
    Path Parameters
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-schema-attributes.api.mdx b/docs/sailpoint-api-beta/delete-schema-attributes.api.mdx new file mode 100644 index 000000000..9fa0e5425 --- /dev/null +++ b/docs/sailpoint-api-beta/delete-schema-attributes.api.mdx @@ -0,0 +1,77 @@ +--- +id: delete-schema-attributes +sidebar_label: Delete all custom schema attributes for Non-Employee Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteSchemaAttributes","tags":["Non-Employee Lifecycle Management"],"description":"This end-point deletes all custom schema attributes for a non-employee source.\nRequest requires a security scope of:\n'idn:nesr:delete'","parameters":[{"in":"path","name":"sourceId","schema":{"type":"string"},"required":true,"description":"The Source id"}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/non-employee-sources/{sourceId}/schema-attributes","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete all custom schema attributes for Non-Employee Source","description":{"content":"This end-point deletes all custom schema attributes for a non-employee source.\nRequest requires a security scope of:\n'idn:nesr:delete'","type":"text/plain"},"url":{"path":["non-employee-sources",":sourceId","schema-attributes"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete all custom schema attributes for Non-Employee Source + + + +This end-point deletes all custom schema attributes for a non-employee source. +Request requires a security scope of: +'idn:nesr:delete' + +
    Path Parameters
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-schema.api.mdx b/docs/sailpoint-api-beta/delete-schema.api.mdx new file mode 100644 index 000000000..93ca48231 --- /dev/null +++ b/docs/sailpoint-api-beta/delete-schema.api.mdx @@ -0,0 +1,87 @@ +--- +id: delete-schema +sidebar_label: Delete Source Schema by ID +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteSchema","tags":["Sources"],"parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source ID.","example":"2c9180835d191a86015d28455b4a2329"},{"in":"path","name":"schemaId","schema":{"type":"string"},"required":true,"description":"The Schema ID.","example":"2c9180835d191a86015d28455b4a2329"}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"description":"Delete Source Schema by ID","method":"delete","path":"/sources/{sourceId}/schemas/{schemaId}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete Source Schema by ID","description":{"type":"text/plain"},"url":{"path":["sources",":sourceId","schemas",":schemaId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source ID.","type":"text/plain"},"type":"any","value":"","key":"sourceId"},{"disabled":false,"description":{"content":"(Required) The Schema ID.","type":"text/plain"},"type":"any","value":"","key":"schemaId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Source Schema by ID + + + +Delete Source Schema by ID + +
    Path Parameters
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-search-attribute-config.api.mdx b/docs/sailpoint-api-beta/delete-search-attribute-config.api.mdx new file mode 100644 index 000000000..d2c9701a8 --- /dev/null +++ b/docs/sailpoint-api-beta/delete-search-attribute-config.api.mdx @@ -0,0 +1,76 @@ +--- +id: delete-search-attribute-config +sidebar_label: Delete an extended search attribute in IdentityNow. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteSearchAttributeConfig","tags":["Search Attribute Configuration"],"description":"This API accepts an extended attribute name and deletes the corresponding extended attribute configuration.\nA token with ORG_ADMIN authority is required to call this API.","parameters":[{"name":"name","in":"path","description":"Name of the extended search attribute configuration to delete.","required":true,"schema":{"type":"string","example":"newMailAttribute"}}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/accounts/search-attribute-config/{name}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete an extended search attribute in IdentityNow.","description":{"content":"This API accepts an extended attribute name and deletes the corresponding extended attribute configuration.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts","search-attribute-config",":name"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Name of the extended search attribute configuration to delete.","type":"text/plain"},"type":"any","value":"","key":"name"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete an extended search attribute in IdentityNow. + + + +This API accepts an extended attribute name and deletes the corresponding extended attribute configuration. +A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-segment-by-id.api.mdx b/docs/sailpoint-api-beta/delete-segment-by-id.api.mdx new file mode 100644 index 000000000..814c81924 --- /dev/null +++ b/docs/sailpoint-api-beta/delete-segment-by-id.api.mdx @@ -0,0 +1,79 @@ +--- +id: delete-segment-by-id +sidebar_label: Delete Segment by ID +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteSegmentById","tags":["Segments"],"description":"This API deletes the segment specified by the given ID.\n\nNote that segment deletion may take some time to become effective.\n\nA token with ORG_ADMIN or API authority is required to call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the Segment to delete.","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"204":{"description":"No content."},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/segments/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete Segment by ID","description":{"content":"This API deletes the segment specified by the given ID.\n\nNote that segment deletion may take some time to become effective.\n\nA token with ORG_ADMIN or API authority is required to call this API.","type":"text/plain"},"url":{"path":["segments",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the Segment to delete.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Segment by ID + + + +This API deletes the segment specified by the given ID. + +Note that segment deletion may take some time to become effective. + +A token with ORG_ADMIN or API authority is required to call this API. + +
    Path Parameters
    + +No content. + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-service-desk-integration.api.mdx b/docs/sailpoint-api-beta/delete-service-desk-integration.api.mdx new file mode 100644 index 000000000..9193b3df9 --- /dev/null +++ b/docs/sailpoint-api-beta/delete-service-desk-integration.api.mdx @@ -0,0 +1,87 @@ +--- +id: delete-service-desk-integration +sidebar_label: Delete a Service Desk integration by ID +hide_title: true +hide_table_of_contents: true +api: {"tags":["Service Desk Integration"],"description":"Delete an existing Service Desk integration by ID. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","operationId":"deleteServiceDeskIntegration","parameters":[{"name":"id","in":"path","description":"ID of Service Desk integration to delete","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"anId"}}],"responses":{"204":{"description":"Service Desk integration with the given ID successfully deleted"},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:service-desk-admin:write","idn:service-desk-integration:write"]}],"method":"delete","path":"/service-desk-integrations/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete a Service Desk integration by ID","description":{"content":"Delete an existing Service Desk integration by ID. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","type":"text/plain"},"url":{"path":["service-desk-integrations",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of Service Desk integration to delete","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete a Service Desk integration by ID + + + +Delete an existing Service Desk integration by ID. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + +
    Path Parameters
    + +Service Desk integration with the given ID successfully deleted + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-sod-policy-by-id.api.mdx b/docs/sailpoint-api-beta/delete-sod-policy-by-id.api.mdx new file mode 100644 index 000000000..1119e51ae --- /dev/null +++ b/docs/sailpoint-api-beta/delete-sod-policy-by-id.api.mdx @@ -0,0 +1,88 @@ +--- +id: delete-sod-policy-by-id +sidebar_label: Delete SOD Policy by ID +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteSodPolicyById","tags":["SOD Policy"],"description":"This deletes a specified SOD policy.\nRequires role of ORG_ADMIN.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the SOD Policy to delete.","example":"ef38f94347e94562b5bb8424a56397d8"},{"in":"query","name":"logical","schema":{"type":"boolean","default":true},"description":"whether this is soft delete i.e. logical true or hard delete","required":false}],"responses":{"204":{"description":"No content."},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/sod-policies/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete SOD Policy by ID","description":{"content":"This deletes a specified SOD policy.\nRequires role of ORG_ADMIN.","type":"text/plain"},"url":{"path":["sod-policies",":id"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"whether this is soft delete i.e. logical true or hard delete","type":"text/plain"},"key":"logical","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the SOD Policy to delete.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete SOD Policy by ID + + + +This deletes a specified SOD policy. +Requires role of ORG_ADMIN. + +
    Path Parameters
    Query Parameters
    + +No content. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-sod-policy-schedule-by-id.api.mdx b/docs/sailpoint-api-beta/delete-sod-policy-schedule-by-id.api.mdx new file mode 100644 index 000000000..73390168b --- /dev/null +++ b/docs/sailpoint-api-beta/delete-sod-policy-schedule-by-id.api.mdx @@ -0,0 +1,88 @@ +--- +id: delete-sod-policy-schedule-by-id +sidebar_label: Delete SOD Policy Schedule +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteSodPolicyScheduleById","tags":["SOD Policy"],"description":"This deletes schedule for a specified SOD policy.\nRequires role of ORG_ADMIN.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the SOD Policy for which the schedule needs to be deleted.","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"204":{"description":"No content."},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/sod-policies/{id}/schedule","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete SOD Policy Schedule","description":{"content":"This deletes schedule for a specified SOD policy.\nRequires role of ORG_ADMIN.","type":"text/plain"},"url":{"path":["sod-policies",":id","schedule"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the SOD Policy for which the schedule needs to be deleted.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete SOD Policy Schedule + + + +This deletes schedule for a specified SOD policy. +Requires role of ORG_ADMIN. + +
    Path Parameters
    + +No content. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-source.api.mdx b/docs/sailpoint-api-beta/delete-source.api.mdx new file mode 100644 index 000000000..a69df4d8b --- /dev/null +++ b/docs/sailpoint-api-beta/delete-source.api.mdx @@ -0,0 +1,89 @@ +--- +id: delete-source +sidebar_label: Delete Source by ID +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteSource","tags":["Sources"],"description":"This end-point deletes a specific source in IdentityNow.\nA token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.\nAll of accounts on the source will be removed first, then the source will be deleted. Actual status of task execution can be retrieved via method GET `/task-status/{id}`","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The Source ID","example":"2c9180835d191a86015d28455b4a2329"}],"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"examples":{"deleteSource":{"summary":"Response returned when deleting a source","value":{"type":"TASK_RESULT","id":"2c91808779ecf55b0179f720942f181a","name":null}}}}},"links":{"GetTaskStatusById":{"operationId":"getTaskStatus","parameters":{"id":"$response.body#/id"},"description":"The `id` value returned in the response can be used as the `id` parameter in `GET /task-status/{id}`.\n"}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/sources/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete Source by ID","description":{"content":"This end-point deletes a specific source in IdentityNow.\nA token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.\nAll of accounts on the source will be removed first, then the source will be deleted. Actual status of task execution can be retrieved via method GET `/task-status/{id}`","type":"text/plain"},"url":{"path":["sources",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Source by ID + + + +This end-point deletes a specific source in IdentityNow. +A token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. +All of accounts on the source will be removed first, then the source will be deleted. Actual status of task execution can be retrieved via method GET `/task-status/{id}` + +
    Path Parameters
    + +Accepted - Returned if the request was successfully accepted into the system. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-subscription.api.mdx b/docs/sailpoint-api-beta/delete-subscription.api.mdx new file mode 100644 index 000000000..5e29f3c34 --- /dev/null +++ b/docs/sailpoint-api-beta/delete-subscription.api.mdx @@ -0,0 +1,87 @@ +--- +id: delete-subscription +sidebar_label: Delete a Subscription +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteSubscription","tags":["Triggers"],"description":"Deletes an existing subscription to a trigger.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"Subscription ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"oauth2":["idn:trigger-service-subscriptions:delete"]}],"method":"delete","path":"/trigger-subscriptions/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete a Subscription","description":{"content":"Deletes an existing subscription to a trigger.","type":"text/plain"},"url":{"path":["trigger-subscriptions",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Subscription ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE","auth":{"type":"oauth2","oauth2":[]}}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete a Subscription + + + +Deletes an existing subscription to a trigger. + +
    Path Parameters
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-tagged-object-by-type-and-id.api.mdx b/docs/sailpoint-api-beta/delete-tagged-object-by-type-and-id.api.mdx new file mode 100644 index 000000000..8cd87f6e8 --- /dev/null +++ b/docs/sailpoint-api-beta/delete-tagged-object-by-type-and-id.api.mdx @@ -0,0 +1,75 @@ +--- +id: delete-tagged-object-by-type-and-id +sidebar_label: Delete Tagged Object +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteTaggedObjectByTypeAndId","tags":["Tagged Objects"],"description":"This deletes a tagged object for the specified type.","parameters":[{"in":"path","name":"type","schema":{"type":"string","enum":["ROLE","IDENTITY","SOD_POLICY"]},"required":true,"description":"The type of tagged object to delete."},{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the object reference to delete.","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"204":{"description":"No content."},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/tagged-objects/{type}/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete Tagged Object","description":{"content":"This deletes a tagged object for the specified type.","type":"text/plain"},"url":{"path":["tagged-objects",":type",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The type of tagged object to delete.","type":"text/plain"},"type":"any","value":"","key":"type"},{"disabled":false,"description":{"content":"(Required) The ID of the object reference to delete.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Tagged Object + + + +This deletes a tagged object for the specified type. + +
    Path Parameters
    + +No content. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-transform.api.mdx b/docs/sailpoint-api-beta/delete-transform.api.mdx new file mode 100644 index 000000000..4c62c3af6 --- /dev/null +++ b/docs/sailpoint-api-beta/delete-transform.api.mdx @@ -0,0 +1,56 @@ +--- +id: delete-transform +sidebar_label: Delete a transform +hide_title: true +hide_table_of_contents: true +api: {"tags":["Transforms"],"description":"Deletes the transform specified by the given ID.\nA token with transform delete authority is required to call this API.","operationId":"deleteTransform","parameters":[{"name":"id","in":"path","description":"ID of the transform to delete","required":true,"style":"simple","explode":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"security":[{"bearerAuth":["idn:transforms:delete"]}],"method":"delete","path":"/transforms/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete a transform","description":{"content":"Deletes the transform specified by the given ID.\nA token with transform delete authority is required to call this API.","type":"text/plain"},"url":{"path":["transforms",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the transform to delete","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete a transform + + + +Deletes the transform specified by the given ID. +A token with transform delete authority is required to call this API. + +
    Path Parameters
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-verified-from-address.api.mdx b/docs/sailpoint-api-beta/delete-verified-from-address.api.mdx new file mode 100644 index 000000000..9e61ba1fb --- /dev/null +++ b/docs/sailpoint-api-beta/delete-verified-from-address.api.mdx @@ -0,0 +1,87 @@ +--- +id: delete-verified-from-address +sidebar_label: Delete Verified From Address +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteVerifiedFromAddress","tags":["Notifications"],"description":"Delete a verified sender email address","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/verified-from-addresses/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete Verified From Address","description":{"content":"Delete a verified sender email address","type":"text/plain"},"url":{"path":["verified-from-addresses",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Verified From Address + + + +Delete a verified sender email address + +
    Path Parameters
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/delete-workflow.api.mdx b/docs/sailpoint-api-beta/delete-workflow.api.mdx new file mode 100644 index 000000000..bc5ef3f4c --- /dev/null +++ b/docs/sailpoint-api-beta/delete-workflow.api.mdx @@ -0,0 +1,75 @@ +--- +id: delete-workflow +sidebar_label: Delete Workflow By Id +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteWorkflow","tags":["Workflows"],"description":"Delete a workflow. **Enabled workflows cannot be deleted**. They must first be disabled.","security":[{"bearerAuth":["sp:workflow:delete"]}],"parameters":[{"name":"id","in":"path","description":"Id of the Workflow","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"c17bea3a-574d-453c-9e04-4365fbf5af0b"}}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/workflows/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete Workflow By Id","description":{"content":"Delete a workflow. **Enabled workflows cannot be deleted**. They must first be disabled.","type":"text/plain"},"url":{"path":["workflows",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Id of the Workflow","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Workflow By Id + + + +Delete a workflow. **Enabled workflows cannot be deleted**. They must first be disabled. + +
    Path Parameters
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/disable-account.api.mdx b/docs/sailpoint-api-beta/disable-account.api.mdx new file mode 100644 index 000000000..9a1e0d943 --- /dev/null +++ b/docs/sailpoint-api-beta/disable-account.api.mdx @@ -0,0 +1,88 @@ +--- +id: disable-account +sidebar_label: Disable Account +hide_title: true +hide_table_of_contents: true +api: {"operationId":"disableAccount","tags":["Accounts"],"description":"This API submits a task to disable the account and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:account:disable"]}],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The account id","example":"ef38f94347e94562b5bb8424a56397d8"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"description":"Request used for account enable/disable","type":"object","properties":{"externalVerificationId":{"description":"If set, an external process validates that the user wants to proceed with this request.","type":"string","example":"3f9180835d2e5168015d32f890ca1581"},"forceProvisioning":{"description":"If set, provisioning updates the account attribute at the source. This option is used when the account is not synced to ensure the attribute is updated.","type":"boolean","example":false}}}}}},"responses":{"202":{"description":"Async task details","content":{"application/json":{"schema":{"description":"Accounts async response containing details on started async process","required":["id"],"type":"object","properties":{"id":{"description":"id of the task","type":"string","example":"2c91808474683da6017468693c260195"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/accounts/{id}/disable","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"externalVerificationId":"3f9180835d2e5168015d32f890ca1581","forceProvisioning":false},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Disable Account","description":{"content":"This API submits a task to disable the account and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts",":id","disable"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The account id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Disable Account + + + +This API submits a task to disable the account and returns the task ID. +A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    Request Body required
    + +Async task details + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/download-custom-violation-report.api.mdx b/docs/sailpoint-api-beta/download-custom-violation-report.api.mdx new file mode 100644 index 000000000..6aa15563a --- /dev/null +++ b/docs/sailpoint-api-beta/download-custom-violation-report.api.mdx @@ -0,0 +1,88 @@ +--- +id: download-custom-violation-report +sidebar_label: Download custom violation report +hide_title: true +hide_table_of_contents: true +api: {"operationId":"downloadCustomViolationReport","tags":["SOD Policy"],"description":"This allows to download a specified named violation report for given report reference.\nRequires role of ORG_ADMIN.","parameters":[{"in":"path","name":"reportResultId","schema":{"type":"string"},"required":true,"description":"The ID of the report reference to download.","example":"ef38f94347e94562b5bb8424a56397d8"},{"in":"path","name":"fileName","schema":{"type":"string"},"required":true,"description":"Custom Name for the file.","example":"custom-name"}],"responses":{"200":{"description":"Returns zip file with given custom name that contains the violation report file","content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sod-violation-report/{reportResultId}/download/{fileName}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Download custom violation report","description":{"content":"This allows to download a specified named violation report for given report reference.\nRequires role of ORG_ADMIN.","type":"text/plain"},"url":{"path":["sod-violation-report",":reportResultId","download",":fileName"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the report reference to download.","type":"text/plain"},"type":"any","value":"","key":"reportResultId"},{"disabled":false,"description":{"content":"(Required) Custom Name for the file.","type":"text/plain"},"type":"any","value":"","key":"fileName"}]},"header":[{"key":"Accept","value":"application/zip"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Download custom violation report + + + +This allows to download a specified named violation report for given report reference. +Requires role of ORG_ADMIN. + +
    Path Parameters
    + +Returns zip file with given custom name that contains the violation report file + +
    Schema
    • string binary
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/download-default-violation-report.api.mdx b/docs/sailpoint-api-beta/download-default-violation-report.api.mdx new file mode 100644 index 000000000..4b1eaff3d --- /dev/null +++ b/docs/sailpoint-api-beta/download-default-violation-report.api.mdx @@ -0,0 +1,88 @@ +--- +id: download-default-violation-report +sidebar_label: Download violation report +hide_title: true +hide_table_of_contents: true +api: {"operationId":"downloadDefaultViolationReport","tags":["SOD Policy"],"description":"This allows to download a violation report for given report reference.\nRequires role of ORG_ADMIN.","parameters":[{"in":"path","name":"reportResultId","schema":{"type":"string"},"required":true,"description":"The ID of the report reference to download.","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"Returns PolicyReport.zip that contains the violation report file","content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sod-violation-report/{reportResultId}/download","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Download violation report","description":{"content":"This allows to download a violation report for given report reference.\nRequires role of ORG_ADMIN.","type":"text/plain"},"url":{"path":["sod-violation-report",":reportResultId","download"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the report reference to download.","type":"text/plain"},"type":"any","value":"","key":"reportResultId"}]},"header":[{"key":"Accept","value":"application/zip"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Download violation report + + + +This allows to download a violation report for given report reference. +Requires role of ORG_ADMIN. + +
    Path Parameters
    + +Returns PolicyReport.zip that contains the violation report file + +
    Schema
    • string binary
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/download-role-insights-entitlements-changes.api.mdx b/docs/sailpoint-api-beta/download-role-insights-entitlements-changes.api.mdx new file mode 100644 index 000000000..f8e1e292d --- /dev/null +++ b/docs/sailpoint-api-beta/download-role-insights-entitlements-changes.api.mdx @@ -0,0 +1,71 @@ +--- +id: download-role-insights-entitlements-changes +sidebar_label: Download entitlement insights for a role +hide_title: true +hide_table_of_contents: true +api: {"operationId":"downloadRoleInsightsEntitlementsChanges","tags":["Role Insights"],"description":"This endpoint returns the entitlement insights for a role.","parameters":[{"in":"path","name":"insightId","schema":{"type":"string"},"required":true,"description":"The role insight id","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"query","name":"sorters","description":"sort by identitiesWithAccess, default order descending","required":false,"style":"form","explode":true,"schema":{"type":"string"}},{"in":"query","name":"filters","description":"Filter parameter(s) by \"starts with\" for the name and description.","required":false,"style":"form","explode":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succeeded. Returns a csv file containing a list of entitlements to be added for a role.","content":{"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/role-insights/{insightId}/entitlement-changes/download","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Download entitlement insights for a role","description":{"content":"This endpoint returns the entitlement insights for a role.","type":"text/plain"},"url":{"path":["role-insights",":insightId","entitlement-changes","download"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"sort by identitiesWithAccess, default order descending","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"Filter parameter(s) by \"starts with\" for the name and description.","type":"text/plain"},"key":"filters","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The role insight id","type":"text/plain"},"type":"any","value":"","key":"insightId"}]},"header":[{"key":"Accept","value":"text/csv"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Download entitlement insights for a role + + + +This endpoint returns the entitlement insights for a role. + +
    Path Parameters
    Query Parameters
    + +Succeeded. Returns a csv file containing a list of entitlements to be added for a role. + +
    Schema
    • string
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/download-role-mining-potential-role-zip.api.mdx b/docs/sailpoint-api-beta/download-role-mining-potential-role-zip.api.mdx new file mode 100644 index 000000000..b01c8a451 --- /dev/null +++ b/docs/sailpoint-api-beta/download-role-mining-potential-role-zip.api.mdx @@ -0,0 +1,71 @@ +--- +id: download-role-mining-potential-role-zip +sidebar_label: Export (download) details for a potential role in a role mining session +hide_title: true +hide_table_of_contents: true +api: {"operationId":"downloadRoleMiningPotentialRoleZip","tags":["IAI Role Mining"],"description":"This endpoint downloads a completed export of information for a potential role in a role mining session.","parameters":[{"in":"path","name":"sessionId","schema":{"type":"string","format":"uuid"},"required":true,"description":"The role mining session id","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"path","name":"potentialRoleId","schema":{"type":"string","format":"uuid"},"required":true,"description":"A potential role id in a role mining session","example":"278359a6-04b7-4669-9468-924cf580964a"},{"in":"path","name":"exportId","schema":{"type":"string","format":"uuid"},"required":true,"description":"The id of a previously run export job for this potential role","example":"4940ffd4-836f-48a3-b2b0-6d498c3fdf40"}],"responses":{"200":{"description":"Succeeded. Returns a zip file containing csv files for identities and entitlements for the potential role.","content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export-async/{exportId}/download","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Export (download) details for a potential role in a role mining session","description":{"content":"This endpoint downloads a completed export of information for a potential role in a role mining session.","type":"text/plain"},"url":{"path":["role-mining-sessions",":sessionId","potential-roles",":potentialRoleId","export-async",":exportId","download"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The role mining session id","type":"text/plain"},"type":"any","value":"","key":"sessionId"},{"disabled":false,"description":{"content":"(Required) A potential role id in a role mining session","type":"text/plain"},"type":"any","value":"","key":"potentialRoleId"},{"disabled":false,"description":{"content":"(Required) The id of a previously run export job for this potential role","type":"text/plain"},"type":"any","value":"","key":"exportId"}]},"header":[{"key":"Accept","value":"application/zip"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Export (download) details for a potential role in a role mining session + + + +This endpoint downloads a completed export of information for a potential role in a role mining session. + +
    Path Parameters
    + +Succeeded. Returns a zip file containing csv files for identities and entitlements for the potential role. + +
    Schema
    • string binary
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/download-source-accounts-schema.api.mdx b/docs/sailpoint-api-beta/download-source-accounts-schema.api.mdx new file mode 100644 index 000000000..5cadc3ae1 --- /dev/null +++ b/docs/sailpoint-api-beta/download-source-accounts-schema.api.mdx @@ -0,0 +1,87 @@ +--- +id: download-source-accounts-schema +sidebar_label: Downloads source accounts schema template +hide_title: true +hide_table_of_contents: true +api: {"tags":["Sources"],"operationId":"downloadSourceAccountsSchema","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The Source id","example":"8c190e6787aa4ed9a90bd9d5344523fb"}],"responses":{"200":{"description":"Successfully downloaded the file","content":{"text/csv":{"example":"id,name,givenName,familyName,e-mail,location,manager,groups,startDate,endDate"}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:source-schema:read"]}],"description":"Downloads source accounts schema template","method":"get","path":"/sources/{id}/schemas/accounts","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Downloads source accounts schema template","description":{"type":"text/plain"},"url":{"path":["sources",":id","schemas","accounts"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"text/csv"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Downloads source accounts schema template + + + +Downloads source accounts schema template + +
    Path Parameters
    + +Successfully downloaded the file + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/download-source-entitlements-schema.api.mdx b/docs/sailpoint-api-beta/download-source-entitlements-schema.api.mdx new file mode 100644 index 000000000..f1f5ec95d --- /dev/null +++ b/docs/sailpoint-api-beta/download-source-entitlements-schema.api.mdx @@ -0,0 +1,87 @@ +--- +id: download-source-entitlements-schema +sidebar_label: Downloads source entitlements schema template +hide_title: true +hide_table_of_contents: true +api: {"tags":["Sources"],"operationId":"downloadSourceEntitlementsSchema","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The Source id","example":"8c190e6787aa4ed9a90bd9d5344523fb"},{"in":"query","name":"schemaName","schema":{"type":"string"},"description":"Name of entitlement schema","example":"?schemaName=group"}],"responses":{"200":{"description":"Successfully downloaded the file","content":{"text/csv":{"example":"id,name,displayName,created,description,modified,entitlements,groups,permissions"}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:source-schema:read"]}],"description":"Downloads source entitlements schema template","method":"get","path":"/sources/{id}/schemas/entitlements","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Downloads source entitlements schema template","description":{"type":"text/plain"},"url":{"path":["sources",":id","schemas","entitlements"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Name of entitlement schema","type":"text/plain"},"key":"schemaName","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"text/csv"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Downloads source entitlements schema template + + + +Downloads source entitlements schema template + +
    Path Parameters
    Query Parameters
    + +Successfully downloaded the file + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/edit-entitlements-potential-role.api.mdx b/docs/sailpoint-api-beta/edit-entitlements-potential-role.api.mdx new file mode 100644 index 000000000..57dbd908c --- /dev/null +++ b/docs/sailpoint-api-beta/edit-entitlements-potential-role.api.mdx @@ -0,0 +1,79 @@ +--- +id: edit-entitlements-potential-role +sidebar_label: Edit entitlements for a potential role to exclude some entitlements +hide_title: true +hide_table_of_contents: true +api: {"operationId":"editEntitlementsPotentialRole","tags":["IAI Role Mining"],"description":"This endpoint adds or removes entitlements from an exclusion list for a potential role.","parameters":[{"in":"path","name":"sessionId","schema":{"type":"string"},"required":true,"description":"The role mining session id","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"path","name":"potentialRoleId","schema":{"type":"string"},"required":true,"description":"A potential role id in a role mining session","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"}],"requestBody":{"description":"Role mining session parameters","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"description":"The list of entitlement ids to be edited","type":"array","items":{"type":"string"}},"exclude":{"type":"boolean","description":"If true, add ids to be exclusion list. If false, remove ids from the exclusion list."}},"example":{"ids":["entId1","entId2"],"exclude":true}}}}},"responses":{"201":{"description":"Adds or removes entitlements from a potential role's entitlement exclusion list.","content":{"application/json":{"schema":{"type":"object","properties":{"createDate":{"description":"The creation date for a potential role","type":"array","items":{"type":"string"}},"entitlementCount":{"type":"integer","description":"The number of entitlements in a potential role.","example":25},"excludedEntitlements":{"description":"The list of entitlement ids to be excluded.","type":"array","items":{"type":"string"}},"id":{"type":"string","description":"Id of the potential role"},"identityCount":{"type":"integer","description":"The number of identities in a potential role.","example":25},"identityDistribution":{"description":"Identity attribute distribution","type":"array","items":{"type":"object","properties":{"attributeName":{"type":"string","description":"Id of the potential role"},"distribution":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}}}}}},"identityIds":{"description":"The list of ids in a potential role.","type":"array","items":{"type":"string"}},"modifiedDate":{"description":"The modified date for a potential role","type":"array","items":{"type":"string"}},"name":{"type":"string","description":"Name of the potential role"},"type":{"description":"Role mining potential type","type":"string","enum":["SPECIALIZED","COMMON"],"example":"SPECIALIZED"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/edit-entitlements","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"ids":["entId1","entId2"],"exclude":true},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Edit entitlements for a potential role to exclude some entitlements","description":{"content":"This endpoint adds or removes entitlements from an exclusion list for a potential role.","type":"text/plain"},"url":{"path":["role-mining-sessions",":sessionId","potential-roles",":potentialRoleId","edit-entitlements"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The role mining session id","type":"text/plain"},"type":"any","value":"","key":"sessionId"},{"disabled":false,"description":{"content":"(Required) A potential role id in a role mining session","type":"text/plain"},"type":"any","value":"","key":"potentialRoleId"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Edit entitlements for a potential role to exclude some entitlements + + + +This endpoint adds or removes entitlements from an exclusion list for a potential role. + +
    Path Parameters
    Request Body required
    + +Role mining session parameters + +
    + +Adds or removes entitlements from a potential role's entitlement exclusion list. + +
    Schema
      identityDistribution object[]
      + +Identity attribute distribution + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/enable-account.api.mdx b/docs/sailpoint-api-beta/enable-account.api.mdx new file mode 100644 index 000000000..6c8fd15cb --- /dev/null +++ b/docs/sailpoint-api-beta/enable-account.api.mdx @@ -0,0 +1,88 @@ +--- +id: enable-account +sidebar_label: Enable Account +hide_title: true +hide_table_of_contents: true +api: {"operationId":"enableAccount","tags":["Accounts"],"description":"This API submits a task to enable account and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:account:enable"]}],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The account id","example":"ef38f94347e94562b5bb8424a56397d8"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"description":"Request used for account enable/disable","type":"object","properties":{"externalVerificationId":{"description":"If set, an external process validates that the user wants to proceed with this request.","type":"string","example":"3f9180835d2e5168015d32f890ca1581"},"forceProvisioning":{"description":"If set, provisioning updates the account attribute at the source. This option is used when the account is not synced to ensure the attribute is updated.","type":"boolean","example":false}}}}}},"responses":{"202":{"description":"Async task details","content":{"application/json":{"schema":{"description":"Accounts async response containing details on started async process","required":["id"],"type":"object","properties":{"id":{"description":"id of the task","type":"string","example":"2c91808474683da6017468693c260195"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/accounts/{id}/enable","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"externalVerificationId":"3f9180835d2e5168015d32f890ca1581","forceProvisioning":false},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Enable Account","description":{"content":"This API submits a task to enable account and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts",":id","enable"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The account id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Enable Account + + + +This API submits a task to enable account and returns the task ID. +A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    Request Body required
    + +Async task details + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/entitlements-bulk-update.api.mdx b/docs/sailpoint-api-beta/entitlements-bulk-update.api.mdx new file mode 100644 index 000000000..f875a5184 --- /dev/null +++ b/docs/sailpoint-api-beta/entitlements-bulk-update.api.mdx @@ -0,0 +1,85 @@ +--- +id: entitlements-bulk-update +sidebar_label: Bulk update an entitlement list +hide_title: true +hide_table_of_contents: true +api: {"operationId":"entitlementsBulkUpdate","tags":["Entitlements"],"description":"This API applies an update to every entitlement of the list.\n\nThe number of entitlements to update is limited to 50 items maximum.\n\nThe JsonPatch update follows the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.
    allowed operations :
    **{ \"op\": \"replace\", \"path\": \"/privileged\", \"value\": boolean }**
    **{ \"op\": \"replace\", \"path\": \"/requestable\",\"value\": boolean }**
    \n\nA token with ORG_ADMIN or API authority is required to call this API.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"entitlementIds":{"type":"array","description":"List of entitlement ids to update","maxItems":50,"items":{"type":"string"},"example":["2c91808a7624751a01762f19d665220d","2c91808a7624751a01762f19d67c220e","2c91808a7624751a01762f19d692220f"]},"jsonPatch":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}},"example":[{"op":"replace","path":"/privileged","value":false},{"op":"replace","path":"/requestable","value":false}]}},"example":{"entitlementIds":["2c91808a7624751a01762f19d665220d","2c91808a7624751a01762f19d67c220e","2c91808a7624751a01762f19d692220f"],"jsonPatch":[{"op":"replace","path":"/privileged","value":false},{"op":"replace","path":"/requestable","value":false}]},"required":["entitlementIds","jsonPatch"]}}}},"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/entitlements/bulk-update","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"entitlementIds":["2c91808a7624751a01762f19d665220d","2c91808a7624751a01762f19d67c220e","2c91808a7624751a01762f19d692220f"],"jsonPatch":[{"op":"replace","path":"/privileged","value":false},{"op":"replace","path":"/requestable","value":false}]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Bulk update an entitlement list","description":{"content":"This API applies an update to every entitlement of the list.\n\nThe number of entitlements to update is limited to 50 items maximum.\n\nThe JsonPatch update follows the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.
    allowed operations :
    **{ \"op\": \"replace\", \"path\": \"/privileged\", \"value\": boolean }**
    **{ \"op\": \"replace\", \"path\": \"/requestable\",\"value\": boolean }**
    \n\nA token with ORG_ADMIN or API authority is required to call this API.","type":"text/plain"},"url":{"path":["entitlements","bulk-update"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Bulk update an entitlement list + + + +This API applies an update to every entitlement of the list. + +The number of entitlements to update is limited to 50 items maximum. + +The JsonPatch update follows the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.<br/> allowed operations :<br/> **{ "op": "replace", "path": "/privileged", "value": boolean }** <br/> **{ "op": "replace", "path": "/requestable","value": boolean }** <br/> + +A token with ORG_ADMIN or API authority is required to call this API. + +
    Request Body required
      jsonPatch object[]
      value object
      + +The value to be used for the operation, required for "add" and "replace" operations + +
    • anyOf
    • string
    • integer
    • anyOf
    • string
    • integer
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/entitlements.tag.mdx b/docs/sailpoint-api-beta/entitlements.tag.mdx new file mode 100644 index 000000000..b4fd4e376 --- /dev/null +++ b/docs/sailpoint-api-beta/entitlements.tag.mdx @@ -0,0 +1,68 @@ +--- +id: entitlements +title: Entitlements +description: Entitlements +--- + + + +Use this API to implement and customize entitlement functionality. +With this functionality in place, administrators can view entitlements and configure them for use throughout IdentityNow in certifications, access profiles, and roles. +Administrators in IdentityNow can then grant users access to the entitlements or configure them so users themselves can request access to the entitlements whenever they need them. +With a good approval process, this entitlement functionality allows users to gain the specific access they need on sources quickly and securely. + +Entitlements represent access rights on sources. +Entitlements are the most granular form of access in IdentityNow. +Entitlements are often grouped into access profiles, and access profiles themselves are often grouped into roles, the broadest form of access in IdentityNow. + +For example, an Active Directory source in IdentityNow can have multiple entitlements: the first, 'Employees,' may represent the access all employees have at the organization, and a second, 'Developers,' may represent the access all developers have at the organization. + +An administrator can then create a broader set of access in the form of an access profile, 'AD Developers' grouping the 'Employees' entitlement with the 'Developers' entitlement. + +An administrator can then create an even broader set of access in the form of a role grouping the 'AD Developers' access profile with another profile, 'GitHub Developers,' grouping entitlements for the GitHub source. + +When users only need Active Directory employee access, they can request access to the 'Employees' entitlement. + +When users need both Active Directory employee and developer access, they can request access to the 'AD Developers' access profile. + +When users need both the 'AD Developers' access profile and the 'GitHub Developers' access profile, they can request access to the role grouping both. + +Administrators often use roles and access profiles within those roles to manage access so that users can gain access more quickly, but the hierarchy of access all starts with entitlements. + +Anywhere entitlements appear, you can select them to find more information about the following: + +- Cloud Access Details: These provide details about the cloud access entitlements on cloud-enabled sources. + +- Permissions: Permissions represent individual units of read/write/admin access to a system. + +- Relationships: These list each entitlement's parent and child relationships. + +- Type: This is the entitlement's type. Some sources support multiple types, each with a different attribute schema. + +IdentityNow uses entitlements in many features, including the following: + +- Certifications: Entitlements can be revoked from an identity that no longer needs them. + +- Roles: Roles can group access profiles which themselves group entitlements. You can grant and revoke access on a broad level with roles. Role membership criteria can grant roles to identities based on whether they have certain entitlements or attributes. + +- Access Profiles: Access profiles group entitlements. +They are the most important units of access in IdentityNow. +IdentityNow uses them in provisioning, certifications, and access requests, and administrators can configure them to grant very broad or very granular access. + +You cannot delete entitlements directly from IdentityNow. +Entitlements are deleted based on their inclusion in aggregations. + +Refer to https://documentation.sailpoint.com/saas/help/access/entitlements.html#deleting-entitlements more information about deleting entitlements. + +Refer to the following link for more information about entitlements. + + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/export-identity-profiles.api.mdx b/docs/sailpoint-api-beta/export-identity-profiles.api.mdx new file mode 100644 index 000000000..279e7c1c0 --- /dev/null +++ b/docs/sailpoint-api-beta/export-identity-profiles.api.mdx @@ -0,0 +1,103 @@ +--- +id: export-identity-profiles +sidebar_label: Export Identity Profiles +hide_title: true +hide_table_of_contents: true +api: {"operationId":"exportIdentityProfiles","tags":["Identity Profiles"],"description":"This exports existing identity profiles in the format specified by the sp-config service.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, ne*\n\n**name**: *eq, ne*\n\n**priority**: *eq, ne*"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **id**, **name**, **priority**"}],"responses":{"200":{"description":"List of export objects with identity profiles.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","description":"Identity Profile exported object","properties":{"version":{"type":"integer","example":1,"description":"Version or object from the target service."},"self":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"object":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object","properties":{"description":{"type":"string","description":"The description of the Identity Profile.","example":"My custom flat file profile"},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The owner of the Identity Profile."},"priority":{"type":"integer","format":"int64","description":"The priority for an Identity Profile.","example":10},"authoritativeSource":{"type":"object","properties":{"type":{"type":"string","enum":["SOURCE"],"description":"Type of the object to which this reference applies","example":"SOURCE"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c9180835d191a86015d28455b4b232a"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"HR Active Directory"}}},"identityRefreshRequired":{"type":"boolean","description":"True if a identity refresh is needed. Typically triggered when a change on the source has been made.","example":true},"identityCount":{"type":"integer","description":"The number of identities that belong to the Identity Profile.","format":"int32","example":8},"identityAttributeConfig":{"type":"object","description":"Defines all the identity attribute mapping configurations. This defines how to generate or collect data for each identity attributes in identity refresh process.","properties":{"enabled":{"description":"The backend will only promote values if the profile/mapping is enabled.","type":"boolean","example":true},"attributeTransforms":{"type":"array","items":{"type":"object","description":"Defines a transformation definition for an identity attribute.","properties":{"identityAttributeName":{"type":"string","description":"Name of the identity attribute.","example":"email"},"transformDefinition":{"description":"The seaspray transformation definition.","type":"object","properties":{"type":{"type":"string","description":"The type of the transform definition.","example":"accountAttribute"},"attributes":{"type":"object","additionalProperties":{"type":"object"},"description":"Arbitrary key-value pairs to store any metadata for the object","example":{"attributeName":"e-mail","sourceName":"MySource","sourceId":"2c9180877a826e68017a8c0b03da1a53"}}}}}}}}},"identityExceptionReportReference":{"type":"object","properties":{"taskResultId":{"type":"string","format":"uuid","description":"The id of the task result.","example":"2c918086795cd09201795d5f7d7533df"},"reportName":{"type":"string","example":"My annual report","description":"The name of the report."}}},"hasTimeBasedAttr":{"description":"Indicates the value of requiresPeriodicRefresh attribute for the Identity Profile.","type":"boolean","example":true}}}]}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:identity-profile:read"]}],"method":"get","path":"/identity-profiles/export","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Export Identity Profiles","description":{"content":"This exports existing identity profiles in the format specified by the sp-config service.","type":"text/plain"},"url":{"path":["identity-profiles","export"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, ne*\n\n**name**: *eq, ne*\n\n**priority**: *eq, ne*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **id**, **name**, **priority**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Export Identity Profiles + + + +This exports existing identity profiles in the format specified by the sp-config service. + +
    Query Parameters
    + +List of export objects with identity profiles. + +
    Schema array
      self object
      object object
      owner object
      + +The owner of the Identity Profile. + +
      authoritativeSource object
      identityAttributeConfig object
      + +Defines all the identity attribute mapping configurations. This defines how to generate or collect data for each identity attributes in identity refresh process. + +
      attributeTransforms object[]
      transformDefinition object
      + +The seaspray transformation definition. + +
      attributes object
      + +Arbitrary key-value pairs to store any metadata for the object + +
    • property name* object
    • identityExceptionReportReference object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/export-outliers-zip.api.mdx b/docs/sailpoint-api-beta/export-outliers-zip.api.mdx new file mode 100644 index 000000000..17be2020e --- /dev/null +++ b/docs/sailpoint-api-beta/export-outliers-zip.api.mdx @@ -0,0 +1,76 @@ +--- +id: export-outliers-zip +sidebar_label: IAI Identity Outliers Export +hide_title: true +hide_table_of_contents: true +api: {"operationId":"exportOutliersZip","tags":["IAI Outliers"],"description":"This API exports a list of ignored outliers to a CSV as well as list of non-ignored outliers to a CSV. These two CSVs will be zipped and exported Columns will include: identityID, type, firstDetectionDate, latestDetectionDate, ignored, & attributes (defined set of identity attributes)\nRequires authorization scope of 'iai:outliers-management:read'","parameters":[{"name":"type","in":"query","description":"Type of the identity outliers snapshot to filter on","required":false,"schema":{"type":"string","enum":["LOW_SIMILARITY","STRUCTURAL"]}}],"responses":{"200":{"description":"Succeeded. Returns zip of 2 CSVs to download. 1 CSV for ignored outliers and 1 for non-ignored outliers","content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/outliers/export","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"IAI Identity Outliers Export","description":{"content":"This API exports a list of ignored outliers to a CSV as well as list of non-ignored outliers to a CSV. These two CSVs will be zipped and exported Columns will include: identityID, type, firstDetectionDate, latestDetectionDate, ignored, & attributes (defined set of identity attributes)\nRequires authorization scope of 'iai:outliers-management:read'","type":"text/plain"},"url":{"path":["outliers","export"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Type of the identity outliers snapshot to filter on","type":"text/plain"},"key":"type","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/zip"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## IAI Identity Outliers Export + + + +This API exports a list of ignored outliers to a CSV as well as list of non-ignored outliers to a CSV. These two CSVs will be zipped and exported Columns will include: identityID, type, firstDetectionDate, latestDetectionDate, ignored, & attributes (defined set of identity attributes) +Requires authorization scope of 'iai:outliers-management:read' + +
    Query Parameters
    + +Succeeded. Returns zip of 2 CSVs to download. 1 CSV for ignored outliers and 1 for non-ignored outliers + +
    Schema
    • string binary
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/export-role-mining-potential-role-async.api.mdx b/docs/sailpoint-api-beta/export-role-mining-potential-role-async.api.mdx new file mode 100644 index 000000000..4d69e92c0 --- /dev/null +++ b/docs/sailpoint-api-beta/export-role-mining-potential-role-async.api.mdx @@ -0,0 +1,71 @@ +--- +id: export-role-mining-potential-role-async +sidebar_label: Asynchronously export details for a potential role in a role mining session and upload to S3 +hide_title: true +hide_table_of_contents: true +api: {"operationId":"exportRoleMiningPotentialRoleAsync","tags":["IAI Role Mining"],"description":"This endpoint uploads all the information for a potential role in a role mining session to S3 as a downloadable zip archive. Includes identities and entitlements in the potential role.","parameters":[{"in":"path","name":"sessionId","schema":{"type":"string"},"required":true,"description":"The role mining session id","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"path","name":"potentialRoleId","schema":{"type":"string"},"required":true,"description":"A potential role id in a role mining session","example":"278359a6-04b7-4669-9468-924cf580964a"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"minEntitlementPopularity":{"type":"integer","description":"The minimum popularity among identities in the role which an entitlement must have to be included in the report","example":0},"includeCommonAccess":{"type":"boolean","description":"If false, do not include entitlements that are highly popular among the entire orginization","example":true}},"example":{"minEntitlementPopularity":0,"includeCommonAccess":true}}}}},"responses":{"202":{"description":"Job Submitted. Returns a reportId that can be used to download the zip once complete","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"minEntitlementPopularity":{"type":"integer","description":"The minimum popularity among identities in the role which an entitlement must have to be included in the report","example":0},"includeCommonAccess":{"type":"boolean","description":"If false, do not include entitlements that are highly popular among the entire orginization","example":true}},"example":{"minEntitlementPopularity":0,"includeCommonAccess":true}},{"type":"object","properties":{"exportId":{"type":"string","format":"uuid","description":"ID used to reference this export","example":"0c6cdb76-1227-4aaf-af21-192dbdfbfa04"},"status":{"description":"The status of this export","example":"QUEUED","type":"string","enum":["QUEUED","IN_PROGRESS","SUCCESS","ERROR"]}}}],"example":{"exportId":"0c6cdb76-1227-4aaf-af21-192dbdfbfa04","status":"QUEUED","minEntitlementPopularity":0,"includeCommonAccess":true}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export-async","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"minEntitlementPopularity":0,"includeCommonAccess":true},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Asynchronously export details for a potential role in a role mining session and upload to S3","description":{"content":"This endpoint uploads all the information for a potential role in a role mining session to S3 as a downloadable zip archive. Includes identities and entitlements in the potential role.","type":"text/plain"},"url":{"path":["role-mining-sessions",":sessionId","potential-roles",":potentialRoleId","export-async"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The role mining session id","type":"text/plain"},"type":"any","value":"","key":"sessionId"},{"disabled":false,"description":{"content":"(Required) A potential role id in a role mining session","type":"text/plain"},"type":"any","value":"","key":"potentialRoleId"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Asynchronously export details for a potential role in a role mining session and upload to S3 + + + +This endpoint uploads all the information for a potential role in a role mining session to S3 as a downloadable zip archive. Includes identities and entitlements in the potential role. + +
    Path Parameters
    Request Body
    + +Job Submitted. Returns a reportId that can be used to download the zip once complete + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/export-role-mining-potential-role-status.api.mdx b/docs/sailpoint-api-beta/export-role-mining-potential-role-status.api.mdx new file mode 100644 index 000000000..d3c080924 --- /dev/null +++ b/docs/sailpoint-api-beta/export-role-mining-potential-role-status.api.mdx @@ -0,0 +1,71 @@ +--- +id: export-role-mining-potential-role-status +sidebar_label: Retrieve status of a potential role export job +hide_title: true +hide_table_of_contents: true +api: {"operationId":"exportRoleMiningPotentialRoleStatus","tags":["IAI Role Mining"],"description":"This endpoint retrieves information about the current status of a potential role export.","parameters":[{"in":"path","name":"sessionId","schema":{"type":"string","format":"uuid"},"required":true,"description":"The role mining session id","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"path","name":"potentialRoleId","schema":{"type":"string","format":"uuid"},"required":true,"description":"A potential role id in a role mining session","example":"278359a6-04b7-4669-9468-924cf580964a"},{"in":"path","name":"exportId","schema":{"type":"string","format":"uuid"},"required":true,"description":"The id of a previously run export job for this potential role","example":"4940ffd4-836f-48a3-b2b0-6d498c3fdf40"}],"responses":{"200":{"description":"Success. Returns the current status of this export","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"minEntitlementPopularity":{"type":"integer","description":"The minimum popularity among identities in the role which an entitlement must have to be included in the report","example":0},"includeCommonAccess":{"type":"boolean","description":"If false, do not include entitlements that are highly popular among the entire orginization","example":true}},"example":{"minEntitlementPopularity":0,"includeCommonAccess":true}},{"type":"object","properties":{"exportId":{"type":"string","format":"uuid","description":"ID used to reference this export","example":"0c6cdb76-1227-4aaf-af21-192dbdfbfa04"},"status":{"description":"The status of this export","example":"QUEUED","type":"string","enum":["QUEUED","IN_PROGRESS","SUCCESS","ERROR"]}}}],"example":{"exportId":"0c6cdb76-1227-4aaf-af21-192dbdfbfa04","status":"QUEUED","minEntitlementPopularity":0,"includeCommonAccess":true}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export-async/{exportId}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Retrieve status of a potential role export job","description":{"content":"This endpoint retrieves information about the current status of a potential role export.","type":"text/plain"},"url":{"path":["role-mining-sessions",":sessionId","potential-roles",":potentialRoleId","export-async",":exportId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The role mining session id","type":"text/plain"},"type":"any","value":"","key":"sessionId"},{"disabled":false,"description":{"content":"(Required) A potential role id in a role mining session","type":"text/plain"},"type":"any","value":"","key":"potentialRoleId"},{"disabled":false,"description":{"content":"(Required) The id of a previously run export job for this potential role","type":"text/plain"},"type":"any","value":"","key":"exportId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Retrieve status of a potential role export job + + + +This endpoint retrieves information about the current status of a potential role export. + +
    Path Parameters
    + +Success. Returns the current status of this export + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/export-role-mining-potential-role.api.mdx b/docs/sailpoint-api-beta/export-role-mining-potential-role.api.mdx new file mode 100644 index 000000000..21540c73d --- /dev/null +++ b/docs/sailpoint-api-beta/export-role-mining-potential-role.api.mdx @@ -0,0 +1,71 @@ +--- +id: export-role-mining-potential-role +sidebar_label: Export (download) details for a potential role in a role mining session +hide_title: true +hide_table_of_contents: true +api: {"operationId":"exportRoleMiningPotentialRole","tags":["IAI Role Mining"],"description":"This endpoint downloads all the information for a potential role in a role mining session. Includes identities and entitlements in the potential role.","parameters":[{"in":"path","name":"sessionId","schema":{"type":"string"},"required":true,"description":"The role mining session id","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"path","name":"potentialRoleId","schema":{"type":"string"},"required":true,"description":"A potential role id in a role mining session","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"}],"responses":{"200":{"description":"Succeeded. Returns a zip file containing csv files for identities and entitlements for the potential role.","content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Export (download) details for a potential role in a role mining session","description":{"content":"This endpoint downloads all the information for a potential role in a role mining session. Includes identities and entitlements in the potential role.","type":"text/plain"},"url":{"path":["role-mining-sessions",":sessionId","potential-roles",":potentialRoleId","export"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The role mining session id","type":"text/plain"},"type":"any","value":"","key":"sessionId"},{"disabled":false,"description":{"content":"(Required) A potential role id in a role mining session","type":"text/plain"},"type":"any","value":"","key":"potentialRoleId"}]},"header":[{"key":"Accept","value":"application/zip"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Export (download) details for a potential role in a role mining session + + + +This endpoint downloads all the information for a potential role in a role mining session. Includes identities and entitlements in the potential role. + +
    Path Parameters
    + +Succeeded. Returns a zip file containing csv files for identities and entitlements for the potential role. + +
    Schema
    • string binary
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/forward-request.api.mdx b/docs/sailpoint-api-beta/forward-request.api.mdx new file mode 100644 index 000000000..2dc1a1cc9 --- /dev/null +++ b/docs/sailpoint-api-beta/forward-request.api.mdx @@ -0,0 +1,91 @@ +--- +id: forward-request +sidebar_label: Forwards an access request approval to a new owner. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"forwardRequest","tags":["Access Request Approvals"],"description":"This endpoint forwards an access request approval. Only the owner of the approval and ORG_ADMIN users are allowed to perform this action.","parameters":[{"in":"path","name":"approvalId","schema":{"type":"string"},"required":true,"description":"The id of the approval.","example":"2c91808b7294bea301729568c68c002e"}],"requestBody":{"description":"Information about the forwarded approval.","required":true,"content":{"application/json":{"schema":{"type":"object","required":["newOwnerId","comment"],"properties":{"newOwnerId":{"type":"string","description":"The Id of the new owner","minLength":1,"maxLength":255},"comment":{"type":"string","description":"The comment provided by the forwarder","minLength":1,"maxLength":255}}}}}},"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/access-request-approvals/{approvalId}/forward","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"newOwnerId":"string","comment":"string"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Forwards an access request approval to a new owner.","description":{"content":"This endpoint forwards an access request approval. Only the owner of the approval and ORG_ADMIN users are allowed to perform this action.","type":"text/plain"},"url":{"path":["access-request-approvals",":approvalId","forward"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The id of the approval.","type":"text/plain"},"type":"any","value":"","key":"approvalId"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Forwards an access request approval to a new owner. + + + +This endpoint forwards an access request approval. Only the owner of the approval and ORG_ADMIN users are allowed to perform this action. + +
    Path Parameters
    Request Body required
    + +Information about the forwarded approval. + +
    + +Accepted - Returned if the request was successfully accepted into the system. + +
    Schema
    • object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/generate-campaign-template.api.mdx b/docs/sailpoint-api-beta/generate-campaign-template.api.mdx new file mode 100644 index 000000000..51b7676ec --- /dev/null +++ b/docs/sailpoint-api-beta/generate-campaign-template.api.mdx @@ -0,0 +1,79 @@ +--- +id: generate-campaign-template +sidebar_label: Generate a Campaign from Template +hide_title: true +hide_table_of_contents: true +api: {"operationId":"generateCampaignTemplate","tags":["Certification Campaigns"],"description":"Generates a new campaign from a campaign template.\nThe campaign object contained in the template has special formatting applied to its name and description fields in order to determine the generated campaign's name/description. Placeholders in those fields are formatted with the current date and time upon generation.\nPlaceholders consist of a percent sign followed by a letter indicating what should be inserted; for example, \"%Y\" will insert the current year; a campaign template named \"Campaign for %y\" would generate a campaign called \"Campaign for 2020\" (assuming the year at generation time is 2020).\nValid placeholders are the date/time conversion suffix characters supported by [java.util.Formatter](https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html).\nRequires roles ORG_ADMIN.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the campaign template to use for generation."}],"responses":{"200":{"description":"Indicates a campaign was successfully generated from this template, and returns a reference to the new campaign.","content":{"application/json":{"schema":{"type":"object","required":["id","name","type","campaignType","description"],"properties":{"id":{"type":"string","description":"The unique ID of the campaign.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the campaign.","example":"Campaign Name"},"type":{"type":"string","enum":["CAMPAIGN"],"description":"The type of object that is being referenced.","example":"CAMPAIGN"},"campaignType":{"type":"string","enum":["MANAGER","SOURCE_OWNER","SEARCH"],"description":"The type of the campaign.","example":"MANAGER"},"description":{"type":"string","description":"The description of the campaign set by the admin who created it.","nullable":true,"example":"A description of the campaign"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/campaign-templates/{id}/generate","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Generate a Campaign from Template","description":{"content":"Generates a new campaign from a campaign template.\nThe campaign object contained in the template has special formatting applied to its name and description fields in order to determine the generated campaign's name/description. Placeholders in those fields are formatted with the current date and time upon generation.\nPlaceholders consist of a percent sign followed by a letter indicating what should be inserted; for example, \"%Y\" will insert the current year; a campaign template named \"Campaign for %y\" would generate a campaign called \"Campaign for 2020\" (assuming the year at generation time is 2020).\nValid placeholders are the date/time conversion suffix characters supported by [java.util.Formatter](https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html).\nRequires roles ORG_ADMIN.","type":"text/plain"},"url":{"path":["campaign-templates",":id","generate"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the campaign template to use for generation.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Generate a Campaign from Template + + + +Generates a new campaign from a campaign template. +The campaign object contained in the template has special formatting applied to its name and description fields in order to determine the generated campaign's name/description. Placeholders in those fields are formatted with the current date and time upon generation. +Placeholders consist of a percent sign followed by a letter indicating what should be inserted; for example, "%Y" will insert the current year; a campaign template named "Campaign for %y" would generate a campaign called "Campaign for 2020" (assuming the year at generation time is 2020). +Valid placeholders are the date/time conversion suffix characters supported by [java.util.Formatter](https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html). +Requires roles ORG_ADMIN. + +
    Path Parameters
    + +Indicates a campaign was successfully generated from this template, and returns a reference to the new campaign. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/generate-digit-token.api.mdx b/docs/sailpoint-api-beta/generate-digit-token.api.mdx new file mode 100644 index 000000000..cb431d07c --- /dev/null +++ b/docs/sailpoint-api-beta/generate-digit-token.api.mdx @@ -0,0 +1,67 @@ +--- +id: generate-digit-token +sidebar_label: Generate a digit token +hide_title: true +hide_table_of_contents: true +api: {"operationId":"generateDigitToken","tags":["Password Management"],"description":"This API is used to generate a digit token for password management. Requires authorization scope of \"idn:password-digit-token:create\".","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["userId"],"properties":{"userId":{"type":"string","description":"The uid of the user requested for digit token","example":"Abby.Smith"},"length":{"type":"integer","description":"The length of digit token. It should be from 6 to 18, inclusive. The default value is 6.","example":8},"durationMinutes":{"type":"integer","description":"The time to live for the digit token in minutes. The default value is 5 minutes.","example":5}}},"example":{"userId":"Abby.Smith","length":8,"durationMinutes":5}}}},"responses":{"200":{"description":"The digit token for password management.","content":{"application/json":{"schema":{"type":"object","properties":{"digitToken":{"type":"string","description":"The digit token for password management","example":9087713},"requestId":{"type":"string","description":"The reference ID of the digit token generation request","example":"e1267ecd-fcd9-4c73-9c55-12555efad136"}}},"example":{"digitToken":"09087713","requestId":"e1267ecd-fcd9-4c73-9c55-12555efad136"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/generate-password-reset-token/digit","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"userId":"Abby.Smith","length":8,"durationMinutes":5},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Generate a digit token","description":{"content":"This API is used to generate a digit token for password management. Requires authorization scope of \"idn:password-digit-token:create\".","type":"text/plain"},"url":{"path":["generate-password-reset-token","digit"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Generate a digit token + + + +This API is used to generate a digit token for password management. Requires authorization scope of "idn:password-digit-token:create". + +
    Request Body required
    + +The digit token for password management. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/generate-identity-preview.api.mdx b/docs/sailpoint-api-beta/generate-identity-preview.api.mdx new file mode 100644 index 000000000..73a1f2d24 --- /dev/null +++ b/docs/sailpoint-api-beta/generate-identity-preview.api.mdx @@ -0,0 +1,92 @@ +--- +id: generate-identity-preview +sidebar_label: Generate Identity Profile Preview +hide_title: true +hide_table_of_contents: true +api: {"operationId":"generateIdentityPreview","tags":["Identity Profiles"],"description":"This generates a non-persisted IdentityDetails object that will represent as the preview of the identities attribute when the given policy's attribute config is applied.\nA token with ORG_ADMIN authority is required to call this API to generate an identity preview.","requestBody":{"description":"Identity Preview request body.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"identityId":{"type":"string","format":"uuid","example":"2c9180857893f12901789445619b0366"},"identityAttributeConfig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"If the profile or mapping is enabled","example":true},"attributeTransforms":{"type":"array","items":{"type":"object","properties":{"identityAttributeName":{"type":"string","description":"Name of the identity attribute","example":"email"},"transformDefinition":{"description":"The seaspray transformation definition","type":"object","properties":{"type":{"type":"string","description":"The type of the transform definition.","example":"accountAttribute"},"attributes":{"type":"object","additionalProperties":{"type":"object"},"description":"Arbitrary key-value pairs to store any metadata for the object","example":{"attributeName":"e-mail","sourceName":"MySource","sourceId":"2c9180877a826e68017a8c0b03da1a53"}}}}}}}}}}}}}},"responses":{"200":{"description":"Object representing the preview object with all of the identity attributes using the current mappings.","content":{"application/json":{"schema":{"type":"object","properties":{"identity":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"previewAttributes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Name of the attribute that is being previewed.","example":"email"},"value":{"type":"object","description":"Value that was derived during the preview.","example":"email@mail.com"},"previousValue":{"type":"object","description":"The value of the attribute before the preview.","example":"oldEmail@mail.com"},"errorMessages":{"type":"array","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}},"description":"A list of errors that may have been encountered"}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:identity-profile:preview"]}],"method":"post","path":"/identity-profiles/identity-preview","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"identityId":"2c9180857893f12901789445619b0366","identityAttributeConfig":{"enabled":true,"attributeTransforms":[{"identityAttributeName":"email","transformDefinition":{"type":"accountAttribute","attributes":{"attributeName":"e-mail","sourceName":"MySource","sourceId":"2c9180877a826e68017a8c0b03da1a53"}}}]}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Generate Identity Profile Preview","description":{"content":"This generates a non-persisted IdentityDetails object that will represent as the preview of the identities attribute when the given policy's attribute config is applied.\nA token with ORG_ADMIN authority is required to call this API to generate an identity preview.","type":"text/plain"},"url":{"path":["identity-profiles","identity-preview"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Generate Identity Profile Preview + + + +This generates a non-persisted IdentityDetails object that will represent as the preview of the identities attribute when the given policy's attribute config is applied. +A token with ORG_ADMIN authority is required to call this API to generate an identity preview. + +
    Request Body required
    + +Identity Preview request body. + +
      identityAttributeConfig object
      attributeTransforms object[]
      transformDefinition object
      + +The seaspray transformation definition + +
      attributes object
      + +Arbitrary key-value pairs to store any metadata for the object + +
    • property name* object
    + +Object representing the preview object with all of the identity attributes using the current mappings. + +
    Schema
      identity object
      previewAttributes object[]
      errorMessages object[]
      + +A list of errors that may have been encountered + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-access-profile.api.mdx b/docs/sailpoint-api-beta/get-access-profile.api.mdx new file mode 100644 index 000000000..6cf7e98b7 --- /dev/null +++ b/docs/sailpoint-api-beta/get-access-profile.api.mdx @@ -0,0 +1,113 @@ +--- +id: get-access-profile +sidebar_label: Get an Access Profile +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getAccessProfile","tags":["Access Profiles"],"description":"This API returns an Access Profile by its ID.\n\nA token with API, ORG_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"ID of the Access Profile","example":"2c9180837ca6693d017ca8d097500149"}],"responses":{"200":{"description":"An AccessProfile","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the Access Profile","example":"2c91808a7190d06e01719938fcd20792","readOnly":true},"name":{"type":"string","description":"Name of the Access Profile","example":"Employee-database-read-write"},"description":{"type":"string","description":"Information about the Access Profile","example":"Collection of entitlements to read/write the employee database"},"created":{"type":"string","description":"Date the Access Profile was created","format":"date-time","example":"2021-03-01T22:32:58.104Z","readOnly":true},"modified":{"type":"string","description":"Date the Access Profile was last modified.","format":"date-time","example":"2021-03-02T20:22:28.104Z","readOnly":true},"enabled":{"type":"boolean","description":"Whether the Access Profile is enabled. If the Access Profile is enabled then you must include at least one Entitlement.","example":true},"owner":{"description":"Owner of the Access Profile","type":"object","properties":{"type":{"description":"Owner type. This field must be either left null or set to 'IDENTITY' on input, otherwise a 400 Bad Request error will result.","example":"IDENTITY","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"]},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of the owner. It may be left null or omitted in a POST or PATCH. If set, it must match the current value of the owner's display name, otherwise a 400 Bad Request error will result.","example":"support"}}},"source":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the Source with with which the Access Profile is associated","example":"2c91809773dee3610173fdb0b6061ef4"},"type":{"type":"string","enum":["SOURCE"],"description":"The type of the Source, will always be SOURCE","example":"SOURCE"},"name":{"type":"string","description":"The display name of the associated Source","example":"ODS-AD-SOURCE"}}},"entitlements":{"type":"array","description":"A list of entitlements associated with the Access Profile. If enabled is false this is allowed to be empty otherwise it needs to contain at least one Entitlement.","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the Entitlement","example":"2c91809773dee32014e13e122092014e"},"type":{"type":"string","enum":["ENTITLEMENT"],"description":"The type of the Entitlement, will always be ENTITLEMENT","example":"ENTITLEMENT"},"name":{"type":"string","description":"The display name of the Entitlement","example":"CN=entitlement.490efde5,OU=OrgCo,OU=ServiceDept,DC=HQAD,DC=local"}}}},"requestable":{"type":"boolean","description":"Whether the Access Profile is requestable via access request. Currently, making an Access Profile non-requestable is only supported for customers enabled with the new Request Center. Otherwise, attempting to create an Access Profile with a value **false** in this field results in a 400 error.","example":true},"accessRequestConfig":{"description":"Access request configuration for this object","type":"object","properties":{"commentsRequired":{"type":"boolean","description":"Whether the requester of the containing object must provide comments justifying the request","example":true},"denialCommentsRequired":{"type":"boolean","description":"Whether an approver must provide comments when denying the request","example":true},"approvalSchemes":{"type":"array","description":"List describing the steps in approving the request","items":{"type":"object","properties":{"approverType":{"type":"string","enum":["OWNER","SOURCE_OWNER","MANAGER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step. Values are as follows.\n\n**OWNER**: Owner of the associated Access Profile or Role\n\n**SOURCE_OWNER**: Owner of the Source associated with an Access Profile\n\n**MANAGER**: Manager of the Identity making the request\n\n**GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field","example":"GOVERNANCE_GROUP"},"approverId":{"type":"string","description":"Id of the specific approver, used only when approverType is GOVERNANCE_GROUP","example":"46c79819-a69f-49a2-becb-12c971ae66c6"}}}}}},"revocationRequestConfig":{"description":"Revocation request configuration for this object.","type":"object","properties":{"approvalSchemes":{"type":"array","description":"List describing the steps in approving the revocation request","items":{"type":"object","properties":{"approverType":{"type":"string","enum":["OWNER","SOURCE_OWNER","MANAGER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step. Values are as follows.\n\n**OWNER**: Owner of the associated Access Profile or Role\n\n**SOURCE_OWNER**: Owner of the Source associated with an Access Profile\n\n**MANAGER**: Manager of the Identity making the request\n\n**GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field","example":"GOVERNANCE_GROUP"},"approverId":{"type":"string","description":"Id of the specific approver, used only when approverType is GOVERNANCE_GROUP","example":"46c79819-a69f-49a2-becb-12c971ae66c6"}}}}}},"segments":{"type":"array","items":{"type":"string"},"description":"List of IDs of segments, if any, to which this Access Profile is assigned.","example":["f7b1b8a3-5fed-4fd4-ad29-82014e137e19","29cb6c06-1da8-43ea-8be4-b3125f248f2a"]},"provisioningCriteria":{"description":"When an Identity has multiple Accounts on the Source with which an Access Profile is associated, this expression is evaluated against those Accounts to choose one to provision with the Access Profile.","nullable":true,"example":{"operation":"OR","children":[{"operation":"AND","children":[{"attribute":"dn","operation":"CONTAINS","value":"useast"},{"attribute":"manager","operation":"CONTAINS","value":"Scott.Clark"}]},{"operation":"AND","children":[{"attribute":"dn","operation":"EQUALS","value":"Gibson"},{"attribute":"telephoneNumber","operation":"CONTAINS","value":"512"}]}]},"type":"object","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","HAS","AND","OR"],"description":"Supported operations on ProvisioningCriteria","example":"EQUALS"},"attribute":{"type":"string","description":"Name of the Account attribute to be tested. If **operation** is one of EQUALS, NOT_EQUALS, CONTAINS, or HAS, this field is required. Otherwise, specifying it is an error.","example":"email","nullable":true},"value":{"type":"string","description":"String value to test the Account attribute w/r/t the specified operation. If the operation is one of EQUALS, NOT_EQUALS, or CONTAINS, this field is required. Otherwise, specifying it is an error. If the Attribute is not String-typed, it will be converted to the appropriate type.","example":"carlee.cert1c9f9b6fd@mailinator.com"},"children":{"type":"array","items":{"type":"object","description":"Defines matching criteria for an Account to be provisioned with a specific Access Profile","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","HAS","AND","OR"],"description":"Supported operations on ProvisioningCriteria","example":"EQUALS"},"attribute":{"type":"string","description":"Name of the Account attribute to be tested. If **operation** is one of EQUALS, NOT_EQUALS, CONTAINS, or HAS, this field is required. Otherwise, specifying it is an error.","example":"email","nullable":true},"value":{"type":"string","description":"String value to test the Account attribute w/r/t the specified operation. If the operation is one of EQUALS, NOT_EQUALS, or CONTAINS, this field is required. Otherwise, specifying it is an error. If the Attribute is not String-typed, it will be converted to the appropriate type.","example":"carlee.cert1c9f9b6fd@mailinator.com"},"children":{"type":"array","items":{"type":"object","description":"Defines matching criteria for an Account to be provisioned with a specific Access Profile","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","HAS","AND","OR"],"description":"Supported operations on ProvisioningCriteria","example":"EQUALS"},"attribute":{"type":"string","description":"Name of the Account attribute to be tested. If **operation** is one of EQUALS, NOT_EQUALS, CONTAINS, or HAS, this field is required. Otherwise, specifying it is an error.","example":"email","nullable":true},"value":{"type":"string","description":"String value to test the Account attribute w/r/t the specified operation. If the operation is one of EQUALS, NOT_EQUALS, or CONTAINS, this field is required. Otherwise, specifying it is an error. If the Attribute is not String-typed, it will be converted to the appropriate type.","example":"carlee.cert1c9f9b6fd@mailinator.com"}}},"nullable":true,"description":"Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes.","example":null}}},"nullable":true,"description":"Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes.","example":null}}}},"required":["owner","name","source"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:access-profile:read"]}],"method":"get","path":"/access-profiles/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get an Access Profile","description":{"content":"This API returns an Access Profile by its ID.\n\nA token with API, ORG_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["access-profiles",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the Access Profile","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get an Access Profile + + + +This API returns an Access Profile by its ID. + +A token with API, ORG_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + +
    Path Parameters
    + +An AccessProfile + +
    Schema
      owner object
      + +Owner of the Access Profile + +
      source object
      entitlements object[]
      + +A list of entitlements associated with the Access Profile. If enabled is false this is allowed to be empty otherwise it needs to contain at least one Entitlement. + +
      accessRequestConfig object
      + +Access request configuration for this object + +
      approvalSchemes object[]
      + +List describing the steps in approving the request + +
      revocationRequestConfig object
      + +Revocation request configuration for this object. + +
      approvalSchemes object[]
      + +List describing the steps in approving the revocation request + +
      provisioningCriteria object
      + +When an Identity has multiple Accounts on the Source with which an Access Profile is associated, this expression is evaluated against those Accounts to choose one to provision with the Access Profile. + +
      children object[]
      + +Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. + +
      children object[]
      + +Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-access-request-config.api.mdx b/docs/sailpoint-api-beta/get-access-request-config.api.mdx new file mode 100644 index 000000000..0ec3779ab --- /dev/null +++ b/docs/sailpoint-api-beta/get-access-request-config.api.mdx @@ -0,0 +1,87 @@ +--- +id: get-access-request-config +sidebar_label: Get Access Request Configuration +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getAccessRequestConfig","tags":["Access Requests"],"description":"This endpoint returns the current access-request configuration.","responses":{"200":{"description":"Access Request Configuration Details.","content":{"application/json":{"schema":{"type":"object","properties":{"approvalsMustBeExternal":{"type":"boolean","description":"If true, then approvals must be processed by external system.","example":true},"autoApprovalEnabled":{"type":"boolean","description":"If true and requester and reviewer are the same, then automatically approve the approval.","example":true},"requestOnBehalfOfConfig":{"description":"Request On Behalf Of Configuration.","type":"object","properties":{"allowRequestOnBehalfOfAnyoneByAnyone":{"type":"boolean","description":"If anyone can request access for anyone.","example":true},"allowRequestOnBehalfOfEmployeeByManager":{"type":"boolean","description":"If a manager can request access for his/her direct reports.","example":true}}},"approvalReminderAndEscalationConfig":{"description":"Approval Reminder and Escalation Configuration.","type":"object","properties":{"daysUntilEscalation":{"type":"integer","description":"Number of days to wait before the first reminder. If no reminders are configured, then this is the number of days to wait before escalation.","format":"int32","example":0},"daysBetweenReminders":{"type":"integer","description":"Number of days to wait between reminder notifications.","format":"int32","example":0},"maxReminders":{"type":"integer","description":"Maximum number of reminder notification to send to the reviewer before approval escalation.","format":"int32","example":0},"fallbackApproverRef":{"type":"object","nullable":true,"properties":{"type":{"type":"string","description":"The type can only be IDENTITY. This is read-only","example":"IDENTITY"},"id":{"type":"string","description":"Identity id.","example":"5168015d32f890ca15812c9180835d2e"},"name":{"type":"string","description":"Human-readable display name of identity. This is read-only","example":"Alison Ferguso"},"email":{"type":"string","description":"Email address of identity. This is read-only","example":"alison.ferguso@identitysoon.com"}}}}},"entitlementRequestConfig":{"description":"Entitlement Request Configuration.","type":"object","properties":{"allowEntitlementRequest":{"type":"boolean","description":"Flag for allowing entitlement request.","example":true},"requestCommentsRequired":{"type":"boolean","description":"Flag for requiring comments while submitting an entitlement request.","default":false,"example":false},"deniedCommentsRequired":{"type":"boolean","description":"Flag for requiring comments while rejecting an entitlement request.","default":false,"example":false},"grantRequestApprovalSchemes":{"type":"string","description":"Approval schemes for granting entitlement request. This can be empty if no approval is needed.\nMultiple schemes must be comma-separated. The valid schemes are \"sourceOwner\", \"manager\" and \"workgroup:{id}\".\nMultiple workgroups (governance groups) can be used.\n","default":"sourceOwner","example":"sourceOwner, manager, workgroup:2c918084660f45d6016617daa9210584"}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/access-request-config","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Access Request Configuration","description":{"content":"This endpoint returns the current access-request configuration.","type":"text/plain"},"url":{"path":["access-request-config"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Access Request Configuration + + + +This endpoint returns the current access-request configuration. + +
    + +Access Request Configuration Details. + +
    Schema
      requestOnBehalfOfConfig object
      + +Request On Behalf Of Configuration. + +
      approvalReminderAndEscalationConfig object
      + +Approval Reminder and Escalation Configuration. + +
      fallbackApproverRef object
      entitlementRequestConfig object
      + +Entitlement Request Configuration. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-access-request-recommendations-ignored-items.api.mdx b/docs/sailpoint-api-beta/get-access-request-recommendations-ignored-items.api.mdx new file mode 100644 index 000000000..24fae1a6b --- /dev/null +++ b/docs/sailpoint-api-beta/get-access-request-recommendations-ignored-items.api.mdx @@ -0,0 +1,75 @@ +--- +id: get-access-request-recommendations-ignored-items +sidebar_label: List of Ignored Access Request Recommendations +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getAccessRequestRecommendationsIgnoredItems","tags":["IAI Access Request Recommendations"],"description":"This API returns the list of ignored access request recommendations.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter recommendations using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki-API-Standard-Collection-Parameters/ta-p/156407)\n\nFiltering is supported for the following fields and operators:\n\n**access.id**: *eq, in*\n\n**access.type**: *eq, in*\n\n**identityId**: *eq, in*"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **access.id, access.type, identityId, timestamp**"}],"responses":{"200":{"description":"Returns list of ignored access request recommendations.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"identityId":{"type":"string","format":"UUID","description":"The identity ID taking the action.","example":"2c91808570313110017040b06f344ec9"},"access":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"ID of access item being recommended.","example":"2c9180835d2e5168015d32f890ca1581"},"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE"],"description":"The type of access item.","example":"ACCESS_PROFILE"}}},"timestamp":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/ai-access-request-recommendations/ignored-items","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List of Ignored Access Request Recommendations","description":{"content":"This API returns the list of ignored access request recommendations.","type":"text/plain"},"url":{"path":["ai-access-request-recommendations","ignored-items"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter recommendations using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki-API-Standard-Collection-Parameters/ta-p/156407)\n\nFiltering is supported for the following fields and operators:\n\n**access.id**: *eq, in*\n\n**access.type**: *eq, in*\n\n**identityId**: *eq, in*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **access.id, access.type, identityId, timestamp**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List of Ignored Access Request Recommendations + + + +This API returns the list of ignored access request recommendations. + +
    Query Parameters
    + +Returns list of ignored access request recommendations. + +
    Schema array
      access object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-access-request-recommendations-requested-items.api.mdx b/docs/sailpoint-api-beta/get-access-request-recommendations-requested-items.api.mdx new file mode 100644 index 000000000..e6262df19 --- /dev/null +++ b/docs/sailpoint-api-beta/get-access-request-recommendations-requested-items.api.mdx @@ -0,0 +1,75 @@ +--- +id: get-access-request-recommendations-requested-items +sidebar_label: List of Requested Access Request Recommendations +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getAccessRequestRecommendationsRequestedItems","tags":["IAI Access Request Recommendations"],"description":"This API returns a list of requested access request recommendations.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter recommendations using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki-API-Standard-Collection-Parameters/ta-p/156407)\n\nFiltering is supported for the following fields and operators:\n\n**access.id**: *eq, in*\n\n**access.type**: *eq, in*\n\n**identityId**: *eq, in*"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **access.id, access.type, identityId, timestamp**"}],"responses":{"200":{"description":"Returns the list of requested access request recommendations.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"identityId":{"type":"string","format":"UUID","description":"The identity ID taking the action.","example":"2c91808570313110017040b06f344ec9"},"access":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"ID of access item being recommended.","example":"2c9180835d2e5168015d32f890ca1581"},"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE"],"description":"The type of access item.","example":"ACCESS_PROFILE"}}},"timestamp":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/ai-access-request-recommendations/requested-items","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List of Requested Access Request Recommendations","description":{"content":"This API returns a list of requested access request recommendations.","type":"text/plain"},"url":{"path":["ai-access-request-recommendations","requested-items"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter recommendations using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki-API-Standard-Collection-Parameters/ta-p/156407)\n\nFiltering is supported for the following fields and operators:\n\n**access.id**: *eq, in*\n\n**access.type**: *eq, in*\n\n**identityId**: *eq, in*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **access.id, access.type, identityId, timestamp**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List of Requested Access Request Recommendations + + + +This API returns a list of requested access request recommendations. + +
    Query Parameters
    + +Returns the list of requested access request recommendations. + +
    Schema array
      access object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-access-request-recommendations-viewed-items.api.mdx b/docs/sailpoint-api-beta/get-access-request-recommendations-viewed-items.api.mdx new file mode 100644 index 000000000..a3df2ef00 --- /dev/null +++ b/docs/sailpoint-api-beta/get-access-request-recommendations-viewed-items.api.mdx @@ -0,0 +1,75 @@ +--- +id: get-access-request-recommendations-viewed-items +sidebar_label: List of Viewed Access Request Recommendations +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getAccessRequestRecommendationsViewedItems","tags":["IAI Access Request Recommendations"],"description":"This API returns the list of viewed access request recommendations.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter recommendations using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki-API-Standard-Collection-Parameters/ta-p/156407)\n\nFiltering is supported for the following fields and operators:\n\n**access.id**: *eq, in*\n\n**access.type**: *eq, in*\n\n**identityId**: *eq, in*"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **access.id, access.type, identityId, timestamp**"}],"responses":{"200":{"description":"Returns list of viewed access request recommendations.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"identityId":{"type":"string","format":"UUID","description":"The identity ID taking the action.","example":"2c91808570313110017040b06f344ec9"},"access":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"ID of access item being recommended.","example":"2c9180835d2e5168015d32f890ca1581"},"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE"],"description":"The type of access item.","example":"ACCESS_PROFILE"}}},"timestamp":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/ai-access-request-recommendations/viewed-items","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List of Viewed Access Request Recommendations","description":{"content":"This API returns the list of viewed access request recommendations.","type":"text/plain"},"url":{"path":["ai-access-request-recommendations","viewed-items"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter recommendations using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki-API-Standard-Collection-Parameters/ta-p/156407)\n\nFiltering is supported for the following fields and operators:\n\n**access.id**: *eq, in*\n\n**access.type**: *eq, in*\n\n**identityId**: *eq, in*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **access.id, access.type, identityId, timestamp**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List of Viewed Access Request Recommendations + + + +This API returns the list of viewed access request recommendations. + +
    Query Parameters
    + +Returns list of viewed access request recommendations. + +
    Schema array
      access object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-account-activity.api.mdx b/docs/sailpoint-api-beta/get-account-activity.api.mdx new file mode 100644 index 000000000..236f3f77c --- /dev/null +++ b/docs/sailpoint-api-beta/get-account-activity.api.mdx @@ -0,0 +1,99 @@ +--- +id: get-account-activity +sidebar_label: Get Account Activity +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getAccountActivity","tags":["Account Activities"],"description":"This gets a single account activity by its id.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The account activity id","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"An account activity object","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the account activity itself","example":"2c9180835d2e5168015d32f890ca1581"},"name":{"type":"string","example":"2c9180835d2e5168015d32f890ca1581"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"completed":{"type":"string","format":"date-time","example":"2018-10-19T13:49:37.385Z"},"completionStatus":{"nullable":true,"type":"string","enum":["SUCCESS","FAILURE","INCOMPLETE","PENDING"]},"type":{"type":"string","example":"appRequest"},"requesterIdentitySummary":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"ID of this identity summary","example":"ff80818155fe8c080155fe8d925b0316"},"name":{"type":"string","description":"Human-readable display name of identity","example":"SailPoint Services"},"identityId":{"type":"string","description":"ID of the identity that this summary represents","example":"c15b9f5cca5a4e9599eaa0e64fa921bd"},"completed":{"type":"boolean","description":"Indicates if all access items for this summary have been decided on"}}},"targetIdentitySummary":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"ID of this identity summary","example":"ff80818155fe8c080155fe8d925b0316"},"name":{"type":"string","description":"Human-readable display name of identity","example":"SailPoint Services"},"identityId":{"type":"string","description":"ID of the identity that this summary represents","example":"c15b9f5cca5a4e9599eaa0e64fa921bd"},"completed":{"type":"boolean","description":"Indicates if all access items for this summary have been decided on"}}},"errors":{"type":"array","items":{"type":"string"},"example":["sailpoint.connector.ConnectorException: java.lang.InterruptedException: Timeout waiting for response to message 0 from client 57a4ab97-ab3f-4aef-9fe2-0eaf15c73d26 after 60 seconds."]},"warnings":{"type":"array","items":{"type":"string"},"example":null},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Item id","example":"2725138ee34949beb0d6cc982d2d4625"},"name":{"type":"string","description":"Human-readable display name of item"},"requested":{"type":"string","format":"date-time","description":"Date and time item was requested","example":"2017-07-11T18:45:37.098Z"},"approvalStatus":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"provisioningStatus":{"type":"string","enum":["PENDING","FINISHED","UNVERIFIABLE","COMMITED","FAILED","RETRY"],"description":"Provisioning state of an account activity item"},"requesterComment":{"type":"object","nullable":true,"properties":{"commenterId":{"type":"string","description":"Id of the identity making the comment","example":"2c918084660f45d6016617daa9210584"},"commenterName":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"},"body":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat."},"date":{"type":"string","format":"date-time","description":"Date and time comment was made","example":"2017-07-11T18:45:37.098Z"}}},"reviewerIdentitySummary":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"ID of this identity summary","example":"ff80818155fe8c080155fe8d925b0316"},"name":{"type":"string","description":"Human-readable display name of identity","example":"SailPoint Services"},"identityId":{"type":"string","description":"ID of the identity that this summary represents","example":"c15b9f5cca5a4e9599eaa0e64fa921bd"},"completed":{"type":"boolean","description":"Indicates if all access items for this summary have been decided on"}}},"reviewerComment":{"type":"object","nullable":true,"properties":{"commenterId":{"type":"string","description":"Id of the identity making the comment","example":"2c918084660f45d6016617daa9210584"},"commenterName":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"},"body":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat."},"date":{"type":"string","format":"date-time","description":"Date and time comment was made","example":"2017-07-11T18:45:37.098Z"}}},"operation":{"type":"string","enum":["ADD","CREATE","MODIFY","DELETE","DISABLE","ENABLE","UNLOCK","LOCK","REMOVE"],"description":"Represents an operation in an account activity item"},"attribute":{"type":"string","description":"Attribute to which account activity applies","nullable":true,"example":"detectedRoles"},"value":{"type":"string","description":"Value of attribute","nullable":true,"example":"Treasury Analyst [AccessProfile-1529010191212]"},"nativeIdentity":{"nullable":true,"type":"string","description":"Native identity in the target system to which the account activity applies","example":"Sandie.Camero"},"sourceId":{"type":"string","description":"Id of Source to which account activity applies","example":"2c91808363ef85290164000587130c0c"},"accountRequestInfo":{"type":"object","nullable":true,"properties":{"requestedObjectId":{"type":"string","description":"Id of requested object","example":"2c91808563ef85690164001c31140c0c"},"requestedObjectName":{"type":"string","description":"Human-readable name of requested object","example":"Treasury Analyst"},"requestedObjectType":{"type":"string","enum":["ACCESS_PROFILE","ROLE"],"description":"Enum represented the currently supported requestable object types. Additional values may be added in the future without notice.","example":"ACCESS_PROFILE"}},"description":"If an account activity item is associated with an access request, captures details of that request."},"clientMetadata":{"nullable":true,"type":"object","additionalProperties":{"type":"string"},"description":"Arbitrary key-value pairs, if any were included in the corresponding access request item"},"removeDate":{"nullable":true,"type":"string","description":"The date the role or access profile is no longer assigned to the specified identity.","format":"date-time","example":"2020-07-11T00:00:00Z"}}}},"executionStatus":{"type":"string","enum":["EXECUTING","VERIFYING","TERMINATED","COMPLETED"]},"clientMetadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Arbitrary key-value pairs, if any were included in the corresponding access request"},"cancelable":{"type":"boolean","description":"Whether the account activity can be canceled before completion"},"cancelComment":{"type":"object","nullable":true,"properties":{"commenterId":{"type":"string","description":"Id of the identity making the comment","example":"2c918084660f45d6016617daa9210584"},"commenterName":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"},"body":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat."},"date":{"type":"string","format":"date-time","description":"Date and time comment was made","example":"2017-07-11T18:45:37.098Z"}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/account-activities/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Account Activity","description":{"content":"This gets a single account activity by its id.","type":"text/plain"},"url":{"path":["account-activities",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The account activity id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Account Activity + + + +This gets a single account activity by its id. + +
    Path Parameters
    + +An account activity object + +
    Schema
      requesterIdentitySummary object
      targetIdentitySummary object
      items object[]
      requesterComment object
      reviewerIdentitySummary object
      reviewerComment object
      accountRequestInfo object
      + +If an account activity item is associated with an access request, captures details of that request. + +
      clientMetadata object
      + +Arbitrary key-value pairs, if any were included in the corresponding access request item + +
    • property name* string
    • clientMetadata object
      + +Arbitrary key-value pairs, if any were included in the corresponding access request + +
    • property name* string
    • cancelComment object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-account-aggregation-status.api.mdx b/docs/sailpoint-api-beta/get-account-aggregation-status.api.mdx new file mode 100644 index 000000000..6dbf6e530 --- /dev/null +++ b/docs/sailpoint-api-beta/get-account-aggregation-status.api.mdx @@ -0,0 +1,83 @@ +--- +id: get-account-aggregation-status +sidebar_label: In-progress Account Aggregation status +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getAccountAggregationStatus","tags":["Account Aggregations"],"description":"This API returns the status of an *in-progress* account aggregation, along with the total number of **NEW**, **CHANGED** and **DELETED** accounts found since the previous aggregation, and the number of those accounts that have been processed so far.\n\nAccounts that have not changed since the previous aggregation are not included in **totalAccounts** and **processedAccounts** counts returned by this API. This is distinct from **Accounts Scanned** shown in the Aggregation UI, which indicates total accounts scanned regardless of whether they changed or not.\n\nSince this endpoint reports on the status of an *in-progress* account aggregation, totalAccounts and processedAccounts may change between calls to this endpoint.\n\n*Only available up to an hour after the aggregation completes. May respond with *404 Not Found* after that.*\n\nA token with ORG_ADMIN, SOURCE_ADMIN, SOURCE_SUBADMIN or DASHBOARD authority is required to call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The account aggregation id","example":"2c91808477a6b0c60177a81146b8110b"}],"responses":{"200":{"description":"An account aggregation status object","content":{"application/json":{"schema":{"type":"object","properties":{"start":{"type":"string","format":"date-time","example":"2021-01-31T14:30:05.104Z","description":"When the aggregation started."},"status":{"type":"string","enum":["STARTED","ACCOUNTS_COLLECTED","COMPLETED","CANCELLED","RETRIED","TERMINATED"],"example":"ACCOUNTS_COLLECTED","description":"STARTED - Aggregation started, but source account iteration has not completed.\n\nACCOUNTS_COLLECTED - Source account iteration completed, but all accounts have not yet been processed.\n\nCOMPLETED - Aggregation completed (*possibly with errors*).\n\nCANCELLED - Aggregation cancelled by user.\n\nRETRIED - Aggregation retried because of connectivity issues with the Virtual Appliance.\n\nTERMINATED - Aggregation marked as failed after 3 tries after connectivity issues with the Virtual Appliance.\n"},"totalAccounts":{"type":"integer","example":520,"description":"The total number of *NEW, CHANGED and DELETED* accounts that need to be processed for this aggregation. This does not include accounts that were unchanged since the previous aggregation. This can be zero if there were no new, changed or deleted accounts since the previous aggregation. *Only available when status is ACCOUNTS_COLLECTED or COMPLETED.*"},"processedAccounts":{"type":"integer","example":150,"description":"The number of *NEW, CHANGED and DELETED* accounts that have been processed so far. This reflects the number of accounts that have been processed at the time of the API call, and may increase on subsequent API calls while the status is ACCOUNTS_COLLECTED. *Only available when status is ACCOUNTS_COLLECTED or COMPLETED.*"}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/account-aggregations/{id}/status","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"In-progress Account Aggregation status","description":{"content":"This API returns the status of an *in-progress* account aggregation, along with the total number of **NEW**, **CHANGED** and **DELETED** accounts found since the previous aggregation, and the number of those accounts that have been processed so far.\n\nAccounts that have not changed since the previous aggregation are not included in **totalAccounts** and **processedAccounts** counts returned by this API. This is distinct from **Accounts Scanned** shown in the Aggregation UI, which indicates total accounts scanned regardless of whether they changed or not.\n\nSince this endpoint reports on the status of an *in-progress* account aggregation, totalAccounts and processedAccounts may change between calls to this endpoint.\n\n*Only available up to an hour after the aggregation completes. May respond with *404 Not Found* after that.*\n\nA token with ORG_ADMIN, SOURCE_ADMIN, SOURCE_SUBADMIN or DASHBOARD authority is required to call this API.","type":"text/plain"},"url":{"path":["account-aggregations",":id","status"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The account aggregation id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## In-progress Account Aggregation status + + + +This API returns the status of an *in-progress* account aggregation, along with the total number of **NEW**, **CHANGED** and **DELETED** accounts found since the previous aggregation, and the number of those accounts that have been processed so far. + +Accounts that have not changed since the previous aggregation are not included in **totalAccounts** and **processedAccounts** counts returned by this API. This is distinct from **Accounts Scanned** shown in the Aggregation UI, which indicates total accounts scanned regardless of whether they changed or not. + +Since this endpoint reports on the status of an *in-progress* account aggregation, totalAccounts and processedAccounts may change between calls to this endpoint. + +*Only available up to an hour after the aggregation completes. May respond with *404 Not Found* after that.* + +A token with ORG_ADMIN, SOURCE_ADMIN, SOURCE_SUBADMIN or DASHBOARD authority is required to call this API. + +
    Path Parameters
    + +An account aggregation status object + +
    Schema
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-account-entitlements.api.mdx b/docs/sailpoint-api-beta/get-account-entitlements.api.mdx new file mode 100644 index 000000000..b4ee8cad0 --- /dev/null +++ b/docs/sailpoint-api-beta/get-account-entitlements.api.mdx @@ -0,0 +1,88 @@ +--- +id: get-account-entitlements +sidebar_label: Account Entitlements +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getAccountEntitlements","tags":["Accounts"],"description":"This API returns entitlements of the account. \nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:account-entitlement:read"]}],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The account id","example":"ef38f94347e94562b5bb8424a56397d8"},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored(total count).","required":false,"schema":{"type":"boolean","default":false}},{"in":"query","name":"limit","description":"Max number of results to return.","required":false,"schema":{"type":"integer","minimum":1,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.","required":false,"schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"An array of account entitlements","content":{"application/json":{"schema":{"type":"array","items":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","format":"date-time","readOnly":true,"example":true},"modified":{"description":"Last modification date of the Object","type":"string","format":"date-time","readOnly":true,"example":true}}},{"type":"object","description":"Entitlement object that represents entitlement","properties":{"attribute":{"description":"Name of the entitlement attribute","type":"string","example":"authorizationType"},"value":{"description":"Raw value of the entitlement","type":"string","example":"CN=Users,dc=sailpoint,dc=com"},"description":{"description":"Entitlment description","type":"string"},"attributes":{"description":"Entitlement attributes","type":"object"},"sourceSchemaObjectType":{"description":"Schema objectType on the given application that maps to an Account Group","type":"string","example":"group"},"privileged":{"description":"Determines if this Entitlement is privileged.","type":"boolean"},"cloudGoverned":{"description":"Determines if this Entitlement is goverened in the cloud.","type":"boolean"},"source":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the source this entitlment belongs to.","example":[{"type":"SOURCE","id":"2c9180835d191a86015d28455b4b232a","name":"HR Active Directory"}]}}}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/accounts/{id}/entitlements","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Account Entitlements","description":{"content":"This API returns entitlements of the account. \nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts",":id","entitlements"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored(total count).","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Max number of results to return.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.","type":"text/plain"},"key":"offset","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The account id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Account Entitlements + + + +This API returns entitlements of the account. +A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    Query Parameters
    + +An array of account entitlements + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-account.api.mdx b/docs/sailpoint-api-beta/get-account.api.mdx new file mode 100644 index 000000000..33558fb09 --- /dev/null +++ b/docs/sailpoint-api-beta/get-account.api.mdx @@ -0,0 +1,76 @@ +--- +id: get-account +sidebar_label: Account Details +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getAccount","tags":["Accounts"],"description":"This API returns the details for a single account based on the ID. \nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:account:read"]}],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The account ID","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"An account object","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","format":"date-time","readOnly":true,"example":true},"modified":{"description":"Last modification date of the Object","type":"string","format":"date-time","readOnly":true,"example":true}}},{"type":"object","properties":{"sourceId":{"type":"string","example":"2c9180835d2e5168015d32f890ca1581"},"identityId":{"type":"string","example":"2c9180835d2e5168015d32f890ca1581"},"attributes":{"type":"object"},"authoritative":{"type":"boolean"},"description":{"type":"string"},"disabled":{"type":"boolean"},"locked":{"type":"boolean"},"nativeIdentity":{"type":"string"},"systemAccount":{"type":"boolean"},"uncorrelated":{"type":"boolean"},"uuid":{"type":"string"},"manuallyCorrelated":{"type":"boolean"},"hasEntitlements":{"type":"boolean"}}}]}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/accounts/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Account Details","description":{"content":"This API returns the details for a single account based on the ID. \nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The account ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Account Details + + + +This API returns the details for a single account based on the ID. +A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    + +An account object + +
    Schema
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-active-campaigns.api.mdx b/docs/sailpoint-api-beta/get-active-campaigns.api.mdx new file mode 100644 index 000000000..3d54260a9 --- /dev/null +++ b/docs/sailpoint-api-beta/get-active-campaigns.api.mdx @@ -0,0 +1,119 @@ +--- +id: get-active-campaigns +sidebar_label: List Campaigns +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getActiveCampaigns","tags":["Certification Campaigns"],"description":"Gets campaigns and returns them in a list. Can provide increased level of detail for each campaign if provided the correct query.","parameters":[{"in":"query","name":"detail","schema":{"type":"string","enum":["SLIM","FULL"]},"required":false,"description":"Determines whether slim, or increased level of detail is provided for each campaign in the returned list. Slim is the default behavior.","example":"FULL"},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"required":false,"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**name**: *eq, sw*\n\n**status**: *eq, in*","example":"name eq \"Manager Campaign\""},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"required":false,"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **name**","example":"name"}],"responses":{"200":{"description":"A list of campaign objects.","content":{"application/json":{"schema":{"type":"array","items":{"oneOf":[{"type":"object","title":"Slim Campaign","required":["name","description","type"],"properties":{"id":{"type":"string","readOnly":true},"name":{"description":"The campaign name. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details.","type":"string"},"description":{"type":"string","description":"The campaign description. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details."},"deadline":{"type":"string","format":"date-time","description":"The campaign's completion deadline."},"type":{"type":"string","description":"The type of campaign. Could be extended in the future.","enum":["MANAGER","SOURCE_OWNER","SEARCH","ROLE_COMPOSITION"]},"emailNotificationEnabled":{"type":"boolean"},"autoRevokeAllowed":{"type":"boolean"},"recommendationsEnabled":{"type":"boolean","description":"Enables IAI for this campaign. Accepts true even if the IAI product feature is off. If IAI is turned off then campaigns generated from this template will indicate false. The real value will then be returned if IAI is ever enabled for the org in the future."},"status":{"type":"string","description":"The campaign's current status.","readOnly":true,"enum":["PENDING","STAGED","CANCELING","ACTIVATING","ACTIVE","COMPLETING","COMPLETED","ERROR","ARCHIVED"]}},"example":{"id":"2c9079b270a266a60170a2779fcb0007","name":"Manager Campaign","description":"Everyone needs to be reviewed by their manager.","deadline":"2020-03-15T10:00:01.456Z","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"status":"ACTIVE"}},{"type":"object","title":"Campaign","allOf":[{"type":"object","title":"Slim Campaign","required":["name","description","type"],"properties":{"id":{"type":"string","readOnly":true},"name":{"description":"The campaign name. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details.","type":"string"},"description":{"type":"string","description":"The campaign description. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details."},"deadline":{"type":"string","format":"date-time","description":"The campaign's completion deadline."},"type":{"type":"string","description":"The type of campaign. Could be extended in the future.","enum":["MANAGER","SOURCE_OWNER","SEARCH","ROLE_COMPOSITION"]},"emailNotificationEnabled":{"type":"boolean"},"autoRevokeAllowed":{"type":"boolean"},"recommendationsEnabled":{"type":"boolean","description":"Enables IAI for this campaign. Accepts true even if the IAI product feature is off. If IAI is turned off then campaigns generated from this template will indicate false. The real value will then be returned if IAI is ever enabled for the org in the future."},"status":{"type":"string","description":"The campaign's current status.","readOnly":true,"enum":["PENDING","STAGED","CANCELING","ACTIVATING","ACTIVE","COMPLETING","COMPLETED","ERROR","ARCHIVED"]}},"example":{"id":"2c9079b270a266a60170a2779fcb0007","name":"Manager Campaign","description":"Everyone needs to be reviewed by their manager.","deadline":"2020-03-15T10:00:01.456Z","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"status":"ACTIVE"}},{"type":"object","properties":{"created":{"type":"string","readOnly":true,"format":"date-time"},"modified":{"type":"string","readOnly":true,"format":"date-time"},"filter":{"type":"object","description":"Determines which items will be included in this campaign. The default campaign filter is used if this field is left blank.","properties":{"id":{"type":"string","description":"The ID of whatever type of filter is being used."},"type":{"type":"string","enum":["CAMPAIGN_FILTER"]}}},"sunsetCommentsRequired":{"type":"boolean","description":"Determines if comments on sunset date changes are required.","default":true},"sourceOwnerCampaignInfo":{"type":"object","description":"Must be set only if the campaign type is SOURCE_OWNER.","properties":{"sourceIds":{"type":"array","description":"The list of sources to be included in the campaign.","items":{"type":"string"}}}},"searchCampaignInfo":{"type":"object","description":"Must be set only if the campaign type is SEARCH.","properties":{"type":{"type":"string","description":"The type of search campaign represented.","enum":["IDENTITY","ACCESS"]},"description":{"type":"string","description":"Describes this search campaign. Intended for storing the query used, and possibly the number of identities selected/available."},"reviewer":{"description":"If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP","allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object"}]},"query":{"type":"string","description":"The scope for the campaign. The campaign will cover identities returned by the query and identities that have access items returned by the query. One of `query` or `identityIds` must be set."},"identityIds":{"type":"array","description":"A direct list of identities to include in this campaign. One of `identityIds` or `query` must be set.","items":{"type":"string"},"maxItems":1000},"accessConstraints":{"type":"array","description":"Further reduces the scope of the campaign by excluding identities (from `query` or `identityIds`) that do not have this access.","items":{"type":"object","properties":{"type":{"type":"string","enum":["ENTITLEMENT","ACCESS_PROFILE","ROLE"]},"ids":{"description":"Must be set only if operator is SELECTED.","type":"array","items":{"type":"string"}},"operator":{"type":"string","enum":["ALL","SELECTED"]}},"required":["type","operator"],"example":{"type":"ENTITLEMENT","ids":["2c90ad2a70ace7d50170acf22ca90010"],"operator":"SELECTED"}},"maxItems":1000}},"required":["type"]},"roleCompositionCampaignInfo":{"type":"object","description":"Optional configuration options for role composition campaigns.","properties":{"reviewer":{"description":"If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP","allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object"}]},"roleIds":{"type":"array","description":"Optional list of roles to include in this campaign. Only one of `roleIds` and `query` may be set; if neither are set, all roles are included.","items":{"type":"string"}},"remediatorRef":{"type":"object","description":"This determines who remediation tasks will be assigned to. Remediation tasks are created for each revoke decision on items in the campaign. The only legal remediator type is 'IDENTITY', and the chosen identity must be a Role Admin or Org Admin.","properties":{"type":{"type":"string","enum":["IDENTITY"]},"id":{"type":"string","description":"The ID of the remediator."},"name":{"type":"string","description":"The name of the remediator.","readOnly":true}},"required":["type","id"]},"query":{"type":"string","description":"Optional search query to scope this campaign to a set of roles. Only one of `roleIds` and `query` may be set; if neither are set, all roles are included."},"description":{"type":"string","description":"Describes this role composition campaign. Intended for storing the query used, and possibly the number of roles selected/available."}},"required":["remediatorRef"]},"alerts":{"type":"array","description":"A list of errors and warnings that have accumulated.","readOnly":true,"items":{"type":"object","properties":{"level":{"type":"string","enum":["ERROR","WARN","INFO"]},"localizations":{"type":"array","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}},"totalCertifications":{"type":"integer","description":"The total number of certifications in this campaign.","readOnly":true},"completedCertifications":{"type":"integer","description":"The number of completed certifications in this campaign.","readOnly":true},"sourcesWithOrphanEntitlements":{"type":"array","description":"A list of sources in the campaign that contain \\\"orphan entitlements\\\" (entitlements without a corresponding Managed Attribute). An empty list indicates the campaign has no orphan entitlements. Null indicates there may be unknown orphan entitlements in the campaign (the campaign was created before this feature was implemented).","readOnly":true,"items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["SOURCE"]},"name":{"type":"string"}}}}}}],"example":{"id":"2c9079b270a266a60170a2779fcb0007","name":"Manager Campaign","description":"Everyone needs to be reviewed by their manager.","created":"2020-03-03T22:15:13.611Z","modified":"2020-03-03T22:20:12.674Z","deadline":"2020-03-15T00:00:00.456Z","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"status":"ACTIVE","filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"}}}]}},"examples":{"Slim Campaign":{"description":"List of Slim Campaigns that would result from not specifying *detail* or specifying SLIM","value":[{"id":"2c918086719eec070171a7e3355a360a","name":"Manager Review","description":"A review of everyone's access by their manager.","deadline":"2020-12-25T06:00:00.123Z","type":"MANAGER","status":"ACTIVE","emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false},{"id":"7e1a731e3fb845cfbe58112ba4673ee4","name":"Search Campaign","description":"Search Campaign Info","deadline":"2022-07-26T15:42:44Z","type":"SEARCH","status":"ACTIVE","emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false},{"id":"2c918086719eec070171a7e3355a412b","name":"AD Source Review","description":"A review of our AD source.","deadline":"2020-12-25T06:00:00.123Z","type":"SOURCE_OWNER","status":"STAGED","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false},{"id":"3b2e2e5821e84127b6d693d41c40623b","name":"Role Composition Campaign","description":"A review done by a role owner.","deadline":"2020-12-25T06:00:00.468Z","type":"ROLE_COMPOSITION","status":"ACTIVE","emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false}]},"Full Campaign":{"description":"List of Campaigns that would result from specifying *detail* as FULL","value":[{"id":"078696a575e045c68d6722ccdb9f101d","name":"Role Composition Campaign","description":"A review done by a role owner.","deadline":"2020-12-25T06:00:00.468Z","type":"ROLE_COMPOSITION","status":"ERROR","emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false,"created":"2022-08-02T20:29:51.065Z","modified":"2022-08-02T20:29:51.331Z","filter":{"type":"CAMPAIGN_FILTER","id":"0fbe863c063c4c88a35fd7f17e8a3df5"},"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":null,"searchCampaignInfo":null,"roleCompositionCampaignInfo":{"remediatorRef":{"type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"reviewerId":null,"reviewer":null,"roleIds":["b15d609fc5c8434b865fe552315fda8f"],"query":null,"description":null},"alerts":[{"level":"ERROR","localizations":[{"locale":"en","localeOrigin":"DEFAULT","text":"Composite criterion must have children non-composite criterion must not."}]}],"totalCertifications":0,"completedCertifications":0,"sourcesWithOrphanEntitlements":null},{"id":"1be8fc1103914bf0a4e14e316b6a7b7c","name":"Manager Review","description":"A review of everyone's access by their manager.","deadline":"2020-12-25T06:00:00.468Z","type":"MANAGER","status":"STAGED","emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false,"created":"2022-08-02T19:00:27.731Z","modified":"2022-08-02T19:00:34.391Z","filter":{"type":"CAMPAIGN_FILTER","id":"0fbe863c063c4c88a35fd7f17e8a3df5"},"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":null,"searchCampaignInfo":null,"roleCompositionCampaignInfo":null,"alerts":null,"totalCertifications":5,"completedCertifications":0,"sourcesWithOrphanEntitlements":[]},{"id":"7e1a731e3fb845cfbe58112ba4673ee4","name":"Search Campaign","description":"Search Campaign for Identities","deadline":"2022-07-26T15:42:44Z","type":"SEARCH","status":"ACTIVE","emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false,"created":"2022-07-25T15:42:18.276Z","modified":"2022-07-25T15:42:53.718Z","filter":{"type":"CAMPAIGN_FILTER","id":"0fbe863c063c4c88a35fd7f17e8a3df5"},"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":null,"searchCampaignInfo":{"type":"IDENTITY","description":"Example of Search Campaign","reviewer":{"type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":null},"query":"user","identityIds":null,"accessConstraints":[]},"roleCompositionCampaignInfo":null,"alerts":null,"totalCertifications":6,"completedCertifications":0,"sourcesWithOrphanEntitlements":[]},{"id":"ad3cf3dd50394b1bad646de4bc51b999","name":"Source Owner Campaign","description":"Example for Source Owner Campaign","deadline":"2022-08-10T17:09:02Z","type":"SOURCE_OWNER","status":"ACTIVE","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"created":"2022-07-27T17:04:19.027Z","modified":"2022-07-27T17:09:13.925Z","filter":{"type":"CAMPAIGN_FILTER","id":"0fbe863c063c4c88a35fd7f17e8a3df5"},"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":{"sourceIds":["2c91808781fd5aea01821200dc88318e"]},"searchCampaignInfo":null,"roleCompositionCampaignInfo":null,"alerts":null,"totalCertifications":2,"completedCertifications":0,"sourcesWithOrphanEntitlements":[]}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/campaigns","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Campaigns","description":{"content":"Gets campaigns and returns them in a list. Can provide increased level of detail for each campaign if provided the correct query.","type":"text/plain"},"url":{"path":["campaigns"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Determines whether slim, or increased level of detail is provided for each campaign in the returned list. Slim is the default behavior.","type":"text/plain"},"key":"detail","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**name**: *eq, sw*\n\n**status**: *eq, in*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **name**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Campaigns + + + +Gets campaigns and returns them in a list. Can provide increased level of detail for each campaign if provided the correct query. + +
    Query Parameters
    + +A list of campaign objects. + +
    Schema array
    • oneOf
      filter object
      + +Determines which items will be included in this campaign. The default campaign filter is used if this field is left blank. + +
      sourceOwnerCampaignInfo object
      + +Must be set only if the campaign type is SOURCE_OWNER. + +
      searchCampaignInfo object
      + +Must be set only if the campaign type is SEARCH. + +
      reviewer object
      + +If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP + +
      accessConstraints object[]
      + +**Possible values:** `<= 1000` + +
      + +Further reduces the scope of the campaign by excluding identities (from `query` or `identityIds`) that do not have this access. + +
      roleCompositionCampaignInfo object
      + +Optional configuration options for role composition campaigns. + +
      reviewer object
      + +If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP + +
      remediatorRef object
      + +This determines who remediation tasks will be assigned to. Remediation tasks are created for each revoke decision on items in the campaign. The only legal remediator type is 'IDENTITY', and the chosen identity must be a Role Admin or Org Admin. + +
      alerts object[]
      + +A list of errors and warnings that have accumulated. + +
      localizations object[]
      sourcesWithOrphanEntitlements object[]
      + +A list of sources in the campaign that contain \"orphan entitlements\" (entitlements without a corresponding Managed Attribute). An empty list indicates the campaign has no orphan entitlements. Null indicates there may be unknown orphan entitlements in the campaign (the campaign was created before this feature was implemented). + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-campaign-reports-config.api.mdx b/docs/sailpoint-api-beta/get-campaign-reports-config.api.mdx new file mode 100644 index 000000000..affc8a98a --- /dev/null +++ b/docs/sailpoint-api-beta/get-campaign-reports-config.api.mdx @@ -0,0 +1,64 @@ +--- +id: get-campaign-reports-config +sidebar_label: Get Campaign Reports Configuration +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getCampaignReportsConfig","tags":["Certification Campaigns"],"description":"Fetches configuration for campaign reports. Currently it includes only one element - identity attributes defined as custom report columns.\nRequires roles of CERT_ADMIN and ORG_ADMIN.","responses":{"200":{"description":"Campaign Report Configuration","content":{"application/json":{"schema":{"type":"object","title":"Campaign Reports Configuration","properties":{"identityAttributeColumns":{"type":"array","items":{"type":"string"},"example":["firstname","lastname"]}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/campaigns/reports-configuration","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Campaign Reports Configuration","description":{"content":"Fetches configuration for campaign reports. Currently it includes only one element - identity attributes defined as custom report columns.\nRequires roles of CERT_ADMIN and ORG_ADMIN.","type":"text/plain"},"url":{"path":["campaigns","reports-configuration"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Campaign Reports Configuration + + + +Fetches configuration for campaign reports. Currently it includes only one element - identity attributes defined as custom report columns. +Requires roles of CERT_ADMIN and ORG_ADMIN. + +
    + +Campaign Report Configuration + +
    Schema
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-campaign-reports.api.mdx b/docs/sailpoint-api-beta/get-campaign-reports.api.mdx new file mode 100644 index 000000000..8786cb8e4 --- /dev/null +++ b/docs/sailpoint-api-beta/get-campaign-reports.api.mdx @@ -0,0 +1,76 @@ +--- +id: get-campaign-reports +sidebar_label: Get Campaign Reports +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getCampaignReports","tags":["Certification Campaigns"],"description":"Fetches all reports for a certification campaign by campaign ID.\nRequires roles of CERT_ADMIN, DASHBOARD, ORG_ADMIN and REPORT_ADMIN","parameters":[{"in":"path","name":"id","schema":{"type":"string","example":"2c91808571bcfcf80171c23e4b4221fc"},"required":true,"description":"The ID of the campaign for which reports are being fetched."}],"responses":{"200":{"description":"Array of campaign report objects.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","title":"Campaign Report","required":["reportType"],"allOf":[{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object","properties":{"status":{"type":"string","enum":["SUCCESS","WARNING","ERROR","TERMINATED","TEMP_ERROR","PENDING"]}}}]},{"type":"object","properties":{"reportType":{"type":"string","enum":["CAMPAIGN_COMPOSITION_REPORT","CAMPAIGN_REMEDIATION_STATUS_REPORT","CAMPAIGN_STATUS_REPORT","CERTIFICATION_SIGNOFF_REPORT"]},"lastRun":{"type":"integer","readOnly":true,"format":"int64","deprecated":true,"description":"Date is stored in Unix Epoch time format (in milliseconds)"},"lastRunAt":{"type":"string","readOnly":true,"format":"date-time","description":"The most recent date and time this report was run"}}}],"example":{"type":"REPORT_RESULT","id":"2c91808568c529c60168cca6f90c1313","name":"Campaign Composition Report","status":"SUCCESS","reportType":"CAMPAIGN_COMPOSITION_REPORT","lastRun":1549051761000,"lastRunAt":"2019-12-19T13:49:37.385Z"}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/campaigns/{id}/reports","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Campaign Reports","description":{"content":"Fetches all reports for a certification campaign by campaign ID.\nRequires roles of CERT_ADMIN, DASHBOARD, ORG_ADMIN and REPORT_ADMIN","type":"text/plain"},"url":{"path":["campaigns",":id","reports"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the campaign for which reports are being fetched.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Campaign Reports + + + +Fetches all reports for a certification campaign by campaign ID. +Requires roles of CERT_ADMIN, DASHBOARD, ORG_ADMIN and REPORT_ADMIN + +
    Path Parameters
    + +Array of campaign report objects. + +
    Schema array
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-campaign-template-schedule.api.mdx b/docs/sailpoint-api-beta/get-campaign-template-schedule.api.mdx new file mode 100644 index 000000000..6fc904827 --- /dev/null +++ b/docs/sailpoint-api-beta/get-campaign-template-schedule.api.mdx @@ -0,0 +1,147 @@ +--- +id: get-campaign-template-schedule +sidebar_label: Gets a Campaign Template's Schedule +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getCampaignTemplateSchedule","tags":["Certification Campaigns"],"description":"Gets the schedule for a campaign template. Returns a 404 if there is no schedule set.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the campaign template whose schedule is being fetched."}],"responses":{"200":{"description":"The current schedule for the campaign template. See the PUT endpoint documentation for more examples.","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Determines the overall schedule cadence. In general, all time period fields smaller than the chosen type can be configured. For example, a DAILY schedule can have 'hours' set, but not 'days'; a WEEKLY schedule can have both 'hours' and 'days' set.","enum":["DAILY","WEEKLY","MONTHLY","ANNUALLY","CALENDAR"]},"months":{"type":"object","description":"Specifies which months of a schedule are active. Only valid for ANNUALLY schedule types. Examples:\n\nOn February and March:\n* type LIST\n* values \"2\", \"3\"\n\nEvery 3 months, starting in January (quarterly):\n* type LIST\n* values \"1\"\n* interval 3\n\nEvery two months between July and December:\n* type RANGE\n* values \"7\", \"12\"\n* interval 2\n","properties":{"type":{"type":"string","enum":["LIST","RANGE"]},"values":{"type":"array","items":{"type":"string"}},"interval":{"type":"integer"}},"required":["type","values"]},"days":{"type":"object","description":"Specifies which day(s) a schedule is active for. This is required for all schedule types except DAILY.\nThe \"values\" field holds different data depending on the type of schedule:\n* WEEKLY: days of the week (1-7)\n* MONTHLY: days of the month (1-31, L, L-1...)\n* ANNUALLY: if the \"months\" field is also set: days of the month (1-31, L, L-1...); otherwise: ISO-8601 dates without year (\"--12-31\")\n* CALENDAR: ISO-8601 dates (\"2020-12-31\")\n\nNote that CALENDAR only supports the LIST type, and ANNUALLY does not support the RANGE type when provided\nwith ISO-8601 dates without year.\n\nExamples:\n\nOn Sundays:\n* type LIST\n* values \"1\"\n\nThe second to last day of the month:\n* type LIST\n* values \"L-1\"\n\nFrom the 20th to the last day of the month:\n* type RANGE\n* values \"20\", \"L\"\n\nEvery March 2nd:\n* type LIST\n* values \"--03-02\"\n\nOn March 2nd, 2021:\n* type: LIST\n* values \"2021-03-02\"\n","properties":{"type":{"type":"string","enum":["LIST","RANGE"]},"values":{"type":"array","items":{"type":"string"}},"interval":{"type":"integer"}},"required":["type","values"]},"hours":{"type":"object","description":"Specifies which hour(s) a schedule is active for. Examples:\n\nEvery three hours starting from 8AM, inclusive:\n* type LIST\n* values \"8\"\n* interval 3\n\nDuring business hours:\n* type RANGE\n* values \"9\", \"5\"\n\nAt 5AM, noon, and 5PM:\n* type LIST\n* values \"5\", \"12\", \"17\"\n","properties":{"type":{"type":"string","enum":["LIST","RANGE"]},"values":{"type":"array","items":{"type":"string"}},"interval":{"type":"integer"}},"required":["type","values"]},"expiration":{"type":"string","format":"date-time","description":"Specifies the time after which this schedule will no longer occur."},"timeZoneId":{"type":"string","description":"The time zone to use when running the schedule. For instance, if the schedule is a DAILY schedule that runs at 1AM, and this field is set to \"CST\", the schedule will run at 1AM CST."}},"required":["type","hours"],"example":{"type":"MONTHLY","hours":{"type":"LIST","values":["0"]},"days":{"type":"LIST","values":["1"]}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/campaign-templates/{id}/schedule","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Gets a Campaign Template's Schedule","description":{"content":"Gets the schedule for a campaign template. Returns a 404 if there is no schedule set.","type":"text/plain"},"url":{"path":["campaign-templates",":id","schedule"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the campaign template whose schedule is being fetched.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Gets a Campaign Template's Schedule + + + +Gets the schedule for a campaign template. Returns a 404 if there is no schedule set. + +
    Path Parameters
    + +The current schedule for the campaign template. See the PUT endpoint documentation for more examples. + +
    Schema
      months object
      + +Specifies which months of a schedule are active. Only valid for ANNUALLY schedule types. Examples: + +On February and March: +* type LIST +* values "2", "3" + +Every 3 months, starting in January (quarterly): +* type LIST +* values "1" +* interval 3 + +Every two months between July and December: +* type RANGE +* values "7", "12" +* interval 2 + + +
      days object
      + +Specifies which day(s) a schedule is active for. This is required for all schedule types except DAILY. +The "values" field holds different data depending on the type of schedule: +* WEEKLY: days of the week (1-7) +* MONTHLY: days of the month (1-31, L, L-1...) +* ANNUALLY: if the "months" field is also set: days of the month (1-31, L, L-1...); otherwise: ISO-8601 dates without year ("--12-31") +* CALENDAR: ISO-8601 dates ("2020-12-31") + +Note that CALENDAR only supports the LIST type, and ANNUALLY does not support the RANGE type when provided +with ISO-8601 dates without year. + +Examples: + +On Sundays: +* type LIST +* values "1" + +The second to last day of the month: +* type LIST +* values "L-1" + +From the 20th to the last day of the month: +* type RANGE +* values "20", "L" + +Every March 2nd: +* type LIST +* values "--03-02" + +On March 2nd, 2021: +* type: LIST +* values "2021-03-02" + + +
      hours object
      + +Specifies which hour(s) a schedule is active for. Examples: + +Every three hours starting from 8AM, inclusive: +* type LIST +* values "8" +* interval 3 + +During business hours: +* type RANGE +* values "9", "5" + +At 5AM, noon, and 5PM: +* type LIST +* values "5", "12", "17" + + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-campaign-template.api.mdx b/docs/sailpoint-api-beta/get-campaign-template.api.mdx new file mode 100644 index 000000000..4f2265fe4 --- /dev/null +++ b/docs/sailpoint-api-beta/get-campaign-template.api.mdx @@ -0,0 +1,123 @@ +--- +id: get-campaign-template +sidebar_label: Get a Campaign Template +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getCampaignTemplate","tags":["Certification Campaigns"],"description":"Fetches a campaign template by ID.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The desired campaign template's ID."}],"responses":{"200":{"description":"The data for the campaign matching the given ID.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","description":"This template's name. Has no bearing on generated campaigns' names."},"description":{"type":"string","description":"This template's description. Has no bearing on generated campaigns' descriptions."},"created":{"type":"string","readOnly":true,"format":"date-time"},"modified":{"type":"string","readOnly":true,"format":"date-time"},"scheduled":{"type":"boolean","readOnly":true,"description":"Indicates if this campaign template has been scheduled."},"ownerRef":{"type":"object","description":"The owner of this template, and the owner of campaigns generated from this template via a schedule. This field is automatically populated at creation time with the current user.","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["IDENTITY"]},"name":{"type":"string"},"email":{"type":"string"}}},"deadlineDuration":{"type":"string","description":"The time period during which the campaign should be completed, formatted as an ISO-8601 Duration. When this template generates a campaign, the campaign's deadline will be the current date plus this duration. For example, if generation occurred on 2020-01-01 and this field was \"P2W\" (two weeks), the resulting campaign's deadline would be 2020-01-15 (the current date plus 14 days)."},"campaign":{"type":"object","title":"Campaign","allOf":[{"type":"object","title":"Slim Campaign","required":["name","description","type"],"properties":{"id":{"type":"string","readOnly":true},"name":{"description":"The campaign name. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details.","type":"string"},"description":{"type":"string","description":"The campaign description. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details."},"deadline":{"type":"string","format":"date-time","description":"The campaign's completion deadline."},"type":{"type":"string","description":"The type of campaign. Could be extended in the future.","enum":["MANAGER","SOURCE_OWNER","SEARCH","ROLE_COMPOSITION"]},"emailNotificationEnabled":{"type":"boolean"},"autoRevokeAllowed":{"type":"boolean"},"recommendationsEnabled":{"type":"boolean","description":"Enables IAI for this campaign. Accepts true even if the IAI product feature is off. If IAI is turned off then campaigns generated from this template will indicate false. The real value will then be returned if IAI is ever enabled for the org in the future."},"status":{"type":"string","description":"The campaign's current status.","readOnly":true,"enum":["PENDING","STAGED","CANCELING","ACTIVATING","ACTIVE","COMPLETING","COMPLETED","ERROR","ARCHIVED"]}},"example":{"id":"2c9079b270a266a60170a2779fcb0007","name":"Manager Campaign","description":"Everyone needs to be reviewed by their manager.","deadline":"2020-03-15T10:00:01.456Z","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"status":"ACTIVE"}},{"type":"object","properties":{"created":{"type":"string","readOnly":true,"format":"date-time"},"modified":{"type":"string","readOnly":true,"format":"date-time"},"filter":{"type":"object","description":"Determines which items will be included in this campaign. The default campaign filter is used if this field is left blank.","properties":{"id":{"type":"string","description":"The ID of whatever type of filter is being used."},"type":{"type":"string","enum":["CAMPAIGN_FILTER"]}}},"sunsetCommentsRequired":{"type":"boolean","description":"Determines if comments on sunset date changes are required.","default":true},"sourceOwnerCampaignInfo":{"type":"object","description":"Must be set only if the campaign type is SOURCE_OWNER.","properties":{"sourceIds":{"type":"array","description":"The list of sources to be included in the campaign.","items":{"type":"string"}}}},"searchCampaignInfo":{"type":"object","description":"Must be set only if the campaign type is SEARCH.","properties":{"type":{"type":"string","description":"The type of search campaign represented.","enum":["IDENTITY","ACCESS"]},"description":{"type":"string","description":"Describes this search campaign. Intended for storing the query used, and possibly the number of identities selected/available."},"reviewer":{"description":"If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP","allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object"}]},"query":{"type":"string","description":"The scope for the campaign. The campaign will cover identities returned by the query and identities that have access items returned by the query. One of `query` or `identityIds` must be set."},"identityIds":{"type":"array","description":"A direct list of identities to include in this campaign. One of `identityIds` or `query` must be set.","items":{"type":"string"},"maxItems":1000},"accessConstraints":{"type":"array","description":"Further reduces the scope of the campaign by excluding identities (from `query` or `identityIds`) that do not have this access.","items":{"type":"object","properties":{"type":{"type":"string","enum":["ENTITLEMENT","ACCESS_PROFILE","ROLE"]},"ids":{"description":"Must be set only if operator is SELECTED.","type":"array","items":{"type":"string"}},"operator":{"type":"string","enum":["ALL","SELECTED"]}},"required":["type","operator"],"example":{"type":"ENTITLEMENT","ids":["2c90ad2a70ace7d50170acf22ca90010"],"operator":"SELECTED"}},"maxItems":1000}},"required":["type"]},"roleCompositionCampaignInfo":{"type":"object","description":"Optional configuration options for role composition campaigns.","properties":{"reviewer":{"description":"If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP","allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object"}]},"roleIds":{"type":"array","description":"Optional list of roles to include in this campaign. Only one of `roleIds` and `query` may be set; if neither are set, all roles are included.","items":{"type":"string"}},"remediatorRef":{"type":"object","description":"This determines who remediation tasks will be assigned to. Remediation tasks are created for each revoke decision on items in the campaign. The only legal remediator type is 'IDENTITY', and the chosen identity must be a Role Admin or Org Admin.","properties":{"type":{"type":"string","enum":["IDENTITY"]},"id":{"type":"string","description":"The ID of the remediator."},"name":{"type":"string","description":"The name of the remediator.","readOnly":true}},"required":["type","id"]},"query":{"type":"string","description":"Optional search query to scope this campaign to a set of roles. Only one of `roleIds` and `query` may be set; if neither are set, all roles are included."},"description":{"type":"string","description":"Describes this role composition campaign. Intended for storing the query used, and possibly the number of roles selected/available."}},"required":["remediatorRef"]},"alerts":{"type":"array","description":"A list of errors and warnings that have accumulated.","readOnly":true,"items":{"type":"object","properties":{"level":{"type":"string","enum":["ERROR","WARN","INFO"]},"localizations":{"type":"array","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}},"totalCertifications":{"type":"integer","description":"The total number of certifications in this campaign.","readOnly":true},"completedCertifications":{"type":"integer","description":"The number of completed certifications in this campaign.","readOnly":true},"sourcesWithOrphanEntitlements":{"type":"array","description":"A list of sources in the campaign that contain \\\"orphan entitlements\\\" (entitlements without a corresponding Managed Attribute). An empty list indicates the campaign has no orphan entitlements. Null indicates there may be unknown orphan entitlements in the campaign (the campaign was created before this feature was implemented).","readOnly":true,"items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["SOURCE"]},"name":{"type":"string"}}}}}}],"example":{"id":"2c9079b270a266a60170a2779fcb0007","name":"Manager Campaign","description":"Everyone needs to be reviewed by their manager.","created":"2020-03-03T22:15:13.611Z","modified":"2020-03-03T22:20:12.674Z","deadline":"2020-03-15T00:00:00.456Z","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"status":"ACTIVE","filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"}}}},"required":["name","description","created","modified","campaign"],"example":{"id":"2c9079b270a266a60170a277bb960008","name":"Manager Campaign Template","description":"Template for the annual manager campaign.","created":"2020-03-05T22:44:00.364Z","modified":"2020-03-05T22:52:09.969Z","ownerRef":{"type":"IDENTITY","id":"2c918086676d3e0601677611dbde220f","email":"mr.manager@example.com","name":"Mister Manager"},"deadlineDuration":"P2W","campaign":{"name":"%Y Manager Campaign","description":"Everyone needs to be reviewed by their manager.","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"}}}},"examples":{"Manager":{"value":{"id":"e7dbec99d49349c8951bd84f58a05120","name":"Manager Review","created":"2022-08-02T19:16:42.632Z","modified":null,"description":"A review of everyone's access by their manager.","deadlineDuration":"P14D","ownerRef":{"email":"support@testmail.identitysoon.com","type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"scheduled":false,"campaign":{"created":null,"modified":null,"filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"},"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":null,"searchCampaignInfo":null,"roleCompositionCampaignInfo":null,"alerts":null,"totalCertifications":null,"completedCertifications":null,"sourcesWithOrphanEntitlements":null,"id":null,"name":"Manager Review","description":"Review everyone's access.","deadline":null,"type":"MANAGER","status":null,"emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false}}},"Search":{"value":{"id":"b7e6459eed5247ac8b98a5fed81fe27f","name":"Reporting Access Review","created":"2022-07-28T19:19:40.035Z","modified":null,"description":"A review of everyone's access to the reporting system.","deadlineDuration":"P14D","ownerRef":{"email":"support@testmail.identitysoon.com","type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"scheduled":false,"campaign":{"created":null,"modified":null,"filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"},"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":null,"searchCampaignInfo":{"type":"ACCESS","description":"Identities with reporting abilities","reviewerId":null,"reviewer":null,"query":"@access(name: (\"reporter\"))","identityIds":null,"accessConstraints":[]},"roleCompositionCampaignInfo":null,"alerts":null,"totalCertifications":null,"completedCertifications":null,"sourcesWithOrphanEntitlements":null,"id":null,"name":"Search Campaign Review","description":"Review everyone's access to the reporting system.","deadline":null,"type":"SEARCH","status":null,"emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false}}},"Source Owner":{"value":{"id":"b9f41bc69e7a4291b9de0630396d030d","name":"AD Source Review","created":"2022-08-02T13:40:36.857Z","modified":null,"description":"A review of our AD source.","deadlineDuration":"P1M","ownerRef":{"email":"support@testmail.identitysoon.com","type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"scheduled":false,"campaign":{"created":null,"modified":null,"filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"},"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":{"sourceIds":["2c918084707deba501709d45ce4e5569"]},"searchCampaignInfo":null,"roleCompositionCampaignInfo":null,"alerts":null,"totalCertifications":null,"completedCertifications":null,"sourcesWithOrphanEntitlements":null,"id":null,"name":"AD Source Review","description":"Review everyone's access.","deadline":null,"type":"SOURCE_OWNER","status":null,"emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false}}},"RoleComposition":{"value":{"id":"b9f41bc69e7a4291b9de0630396d030d","name":"Campaign With Admin Role","created":"2022-08-02T13:40:36.857Z","modified":null,"description":"Campaign With Admin Role","deadlineDuration":null,"ownerRef":{"email":"support@testmail.identitysoon.com","type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"scheduled":false,"campaign":{"created":null,"modified":null,"filter":null,"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":null,"searchCampaignInfo":null,"roleCompositionCampaignInfo":{"remediatorRef":{"type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"reviewerId":null,"reviewer":null,"roleIds":["b15d609fc5c8434b865fe552315fda8f"],"query":null,"description":null},"alerts":null,"totalCertifications":null,"completedCertifications":null,"sourcesWithOrphanEntitlements":null,"id":null,"name":"Campaign With Admin Role","description":"Campaign With Admin Role","deadline":null,"type":"ROLE_COMPOSITION","status":null,"emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/campaign-templates/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get a Campaign Template","description":{"content":"Fetches a campaign template by ID.","type":"text/plain"},"url":{"path":["campaign-templates",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The desired campaign template's ID.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a Campaign Template + + + +Fetches a campaign template by ID. + +
    Path Parameters
    + +The data for the campaign matching the given ID. + +
    Schema
      ownerRef object
      + +The owner of this template, and the owner of campaigns generated from this template via a schedule. This field is automatically populated at creation time with the current user. + +
      campaign object
      filter object
      + +Determines which items will be included in this campaign. The default campaign filter is used if this field is left blank. + +
      sourceOwnerCampaignInfo object
      + +Must be set only if the campaign type is SOURCE_OWNER. + +
      searchCampaignInfo object
      + +Must be set only if the campaign type is SEARCH. + +
      reviewer object
      + +If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP + +
      accessConstraints object[]
      + +**Possible values:** `<= 1000` + +
      + +Further reduces the scope of the campaign by excluding identities (from `query` or `identityIds`) that do not have this access. + +
      roleCompositionCampaignInfo object
      + +Optional configuration options for role composition campaigns. + +
      reviewer object
      + +If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP + +
      remediatorRef object
      + +This determines who remediation tasks will be assigned to. Remediation tasks are created for each revoke decision on items in the campaign. The only legal remediator type is 'IDENTITY', and the chosen identity must be a Role Admin or Org Admin. + +
      alerts object[]
      + +A list of errors and warnings that have accumulated. + +
      localizations object[]
      sourcesWithOrphanEntitlements object[]
      + +A list of sources in the campaign that contain \"orphan entitlements\" (entitlements without a corresponding Managed Attribute). An empty list indicates the campaign has no orphan entitlements. Null indicates there may be unknown orphan entitlements in the campaign (the campaign was created before this feature was implemented). + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-campaign.api.mdx b/docs/sailpoint-api-beta/get-campaign.api.mdx new file mode 100644 index 000000000..0acaac3fa --- /dev/null +++ b/docs/sailpoint-api-beta/get-campaign.api.mdx @@ -0,0 +1,87 @@ +--- +id: get-campaign +sidebar_label: Get a campaign +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getCampaign","tags":["Certification Campaigns"],"description":"Retrieves information for an existing campaign using the campaign's ID. Authorized callers must be a reviewer for this campaign, an ORG_ADMIN, or a CERT_ADMIN.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the campaign to be retrieved","example":"2c91808571bcfcf80171c23e4b4221fc"}],"responses":{"200":{"description":"A campaign object","content":{"application/json":{"schema":{"type":"object","title":"Slim Campaign","required":["name","description","type"],"properties":{"id":{"type":"string","readOnly":true},"name":{"description":"The campaign name. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details.","type":"string"},"description":{"type":"string","description":"The campaign description. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details."},"deadline":{"type":"string","format":"date-time","description":"The campaign's completion deadline."},"type":{"type":"string","description":"The type of campaign. Could be extended in the future.","enum":["MANAGER","SOURCE_OWNER","SEARCH","ROLE_COMPOSITION"]},"emailNotificationEnabled":{"type":"boolean"},"autoRevokeAllowed":{"type":"boolean"},"recommendationsEnabled":{"type":"boolean","description":"Enables IAI for this campaign. Accepts true even if the IAI product feature is off. If IAI is turned off then campaigns generated from this template will indicate false. The real value will then be returned if IAI is ever enabled for the org in the future."},"status":{"type":"string","description":"The campaign's current status.","readOnly":true,"enum":["PENDING","STAGED","CANCELING","ACTIVATING","ACTIVE","COMPLETING","COMPLETED","ERROR","ARCHIVED"]}},"example":{"id":"2c9079b270a266a60170a2779fcb0007","name":"Manager Campaign","description":"Everyone needs to be reviewed by their manager.","deadline":"2020-03-15T10:00:01.456Z","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"status":"ACTIVE"}},"examples":{"Manager":{"value":{"id":"2c918086719eec070171a7e3355a360a","name":"Manager Review","description":"A review of everyone's access by their manager.","deadline":"2020-12-25T06:00:00.123Z","type":"MANAGER","status":"ACTIVE","emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false}},"Search":{"value":{"id":"7e1a731e3fb845cfbe58112ba4673ee4","name":"Search Campaign","description":"Search Campaign Info","deadline":"2022-07-26T15:42:44Z","type":"SEARCH","status":"ACTIVE","emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false}},"Source Owner":{"value":{"id":"2c918086719eec070171a7e3355a412b","name":"AD Source Review","description":"A review of our AD source.","deadline":"2020-12-25T06:00:00.123Z","type":"SOURCE_OWNER","status":"STAGED","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false}},"RoleComposition":{"value":{"id":"3b2e2e5821e84127b6d693d41c40623b","name":"Role Composition Campaign","description":"A review done by a role owner.","deadline":"2020-12-25T06:00:00.468Z","type":"ROLE_COMPOSITION","status":"ACTIVE","emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/campaigns/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get a campaign","description":{"content":"Retrieves information for an existing campaign using the campaign's ID. Authorized callers must be a reviewer for this campaign, an ORG_ADMIN, or a CERT_ADMIN.","type":"text/plain"},"url":{"path":["campaigns",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the campaign to be retrieved","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a campaign + + + +Retrieves information for an existing campaign using the campaign's ID. Authorized callers must be a reviewer for this campaign, an ORG_ADMIN, or a CERT_ADMIN. + +
    Path Parameters
    + +A campaign object + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-client-log-configuration.api.mdx b/docs/sailpoint-api-beta/get-client-log-configuration.api.mdx new file mode 100644 index 000000000..4fa79263d --- /dev/null +++ b/docs/sailpoint-api-beta/get-client-log-configuration.api.mdx @@ -0,0 +1,75 @@ +--- +id: get-client-log-configuration +sidebar_label: get ManagedCluster Log Configuration for a specified cluster +hide_title: true +hide_table_of_contents: true +api: {"tags":["Managed Clusters"],"description":"Get log configuration for a managed cluster.","operationId":"getClientLogConfiguration","parameters":[{"name":"id","in":"path","description":"ID of the ManagedCluster to get log configuration for","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"aClusterId"}}],"responses":{"200":{"description":"ManagedCluster log configuration matching the given cluster ID","content":{"application/json":{"schema":{"type":"array","items":{"description":"Client Runtime Logging Configuration","type":"object","required":["durationMinutes","rootLevel"],"properties":{"clientId":{"description":"client ID of the Log configuration","type":"string","example":"aClientId"},"durationMinutes":{"description":"duration in minutes for the log configuration to remain in effect before resetting to defaults","type":"integer","format":"int32","example":120,"default":240,"minimum":5,"maximum":1440},"expiration":{"description":"Expiration date-time of the log configuration request","example":120,"type":"string","format":"date-time"},"rootLevel":{"description":"Root Log level to apply","default":"INFO","example":"TRACE","type":"string","enum":["OFF","FATAL","ERROR","WARN","INFO","DEBUG","TRACE"]},"logLevels":{"description":"Map of LogLevel by key","example":"{ level:WARN }","type":"object","additionalProperties":{"default":"INFO","example":"TRACE","description":"Standard Log4j log level","type":"string","enum":["OFF","FATAL","ERROR","WARN","INFO","DEBUG","TRACE"]}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"security":[{"bearerAuth":["idn:managed-cluster-log-config:read"]}],"method":"get","path":"/managed-clusters/{id}/log-config","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"get ManagedCluster Log Configuration for a specified cluster","description":{"content":"Get log configuration for a managed cluster.","type":"text/plain"},"url":{"path":["managed-clusters",":id","log-config"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the ManagedCluster to get log configuration for","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## get ManagedCluster Log Configuration for a specified cluster + + + +Get log configuration for a managed cluster. + +
    Path Parameters
    + +ManagedCluster log configuration matching the given cluster ID + +
    Schema array
      = 5` and `<= 1440`"} defaultValue={240}>
      logLevels object
      + +Map of LogLevel by key + +
    • property name* string
      + +**Possible values:** [`OFF`, `FATAL`, `ERROR`, `WARN`, `INFO`, `DEBUG`, `TRACE`] + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-client-status.api.mdx b/docs/sailpoint-api-beta/get-client-status.api.mdx new file mode 100644 index 000000000..37721db68 --- /dev/null +++ b/docs/sailpoint-api-beta/get-client-status.api.mdx @@ -0,0 +1,87 @@ +--- +id: get-client-status +sidebar_label: Get a specified Managed Client Status. +hide_title: true +hide_table_of_contents: true +api: {"tags":["Managed Clients"],"description":"Retrieve Managed Client Status by ID.","operationId":"getClientStatus","parameters":[{"name":"id","in":"path","description":"ID of the Managed Client Status to get","required":true,"schema":{"type":"string","example":"aClientId"}},{"name":"type","in":"query","description":"Type of the Managed Client Status to get","required":true,"schema":{"example":"VA","description":"Managed Client type","type":"string","enum":["CCG","VA","INTERNAL"]}}],"responses":{"200":{"description":"Responds with Managed Client Status having the given ID and Type.","content":{"application/json":{"schema":{"description":"Managed Client Status","type":"object","required":["body","status","type","timestamp"],"properties":{"body":{"description":"ManagedClientStatus body information","type":"object","example":{"alertKey":"","id":"5678","clusterId":"1234","ccg_etag":"ccg_etag123xyz456","ccg_pin":"NONE","cookbook_etag":"20210420125956-20210511144538","hostname":"megapod-useast1-secret-hostname.sailpoint.com","internal_ip":"127.0.0.1","lastSeen":"1620843964604","sinceSeen":"14708","sinceSeenMillis":"14708","localDev":false,"stacktrace":"","state":null,"status":"NORMAL","uuid":null,"product":"idn","va_version":null,"platform_version":"2","os_version":"2345.3.1","os_type":"flatcar","hypervisor":"unknown"}},"status":{"type":"string","enum":["NORMAL","UNDEFINED","NOT_CONFIGURED","CONFIGURING","WARNING","ERROR","FAILED"],"description":"status of the Managed Client"},"type":{"description":"type of the Managed Client","type":"string","example":"CCG","enum":["CCG","VA","INTERNAL"]},"timestamp":{"description":"timestamp on the Client Status update","type":"string","format":"date-time","example":"2020-01-01T00:00:00.000000Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:managed-client-status:read"]}],"method":"get","path":"/managed-clients/{id}/status","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get a specified Managed Client Status.","description":{"content":"Retrieve Managed Client Status by ID.","type":"text/plain"},"url":{"path":["managed-clients",":id","status"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"(Required) Type of the Managed Client Status to get","type":"text/plain"},"key":"type","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the Managed Client Status to get","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a specified Managed Client Status. + + + +Retrieve Managed Client Status by ID. + +
    Path Parameters
    Query Parameters
    + +Responds with Managed Client Status having the given ID and Type. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-common-access.api.mdx b/docs/sailpoint-api-beta/get-common-access.api.mdx new file mode 100644 index 000000000..803a75318 --- /dev/null +++ b/docs/sailpoint-api-beta/get-common-access.api.mdx @@ -0,0 +1,75 @@ +--- +id: get-common-access +sidebar_label: Get a paginated list of common access +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getCommonAccess","tags":["IAI Common Access"],"description":"This endpoint returns the current common access for a customer. The returned items can be filtered and sorted. Requires authorization scope of iai:access-modeling:read","parameters":[{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407)\n\nFiltering is supported for the following fields and operators:\n\n**status**: *eq* \"CONFIRMED\" or \"DENIED\" **reviewedByUser** *eq* true or false **access.id**: *eq* \"id\" **access.type**: *eq* \"ROLE\" or \"ACCESS_PROFILE\" **access.name**: *sw* \"Administrator\" **access.description**: *sw* \"admin\"","required":false,"style":"form","explode":true,"schema":{"type":"string"}},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407)\n\nSorting is supported for the following fields: **access.name,status**\n\nBy default the common access items are sorted by name, ascending."}],"responses":{"200":{"description":"Succeeded. Returns a list of common access for a customer.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"access":{"description":"common access item","type":"object","properties":{"id":{"type":"string","description":"Common access ID"},"type":{"description":"Common access type (ROLE or ACCESS_PROFILE)","type":"string","enum":["ACCESS_PROFILE","ROLE"]},"name":{"type":"string","description":"Common access name"},"description":{"type":"string","description":"Common access description"},"ownerName":{"type":"string","description":"Common access owner name"},"ownerId":{"type":"string","description":"Common access owner ID"}}},"status":{"type":"string","description":"CONFIRMED or DENIED"},"lastUpdated":{"type":"string","readOnly":true,"format":"date-time"},"reviewedByUser":{"type":"boolean","description":"true if user has confirmed or denied status"},"lastReviewed":{"type":"string","readOnly":true,"format":"date-time"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/common-access","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get a paginated list of common access","description":{"content":"This endpoint returns the current common access for a customer. The returned items can be filtered and sorted. Requires authorization scope of iai:access-modeling:read","type":"text/plain"},"url":{"path":["common-access"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407)\n\nFiltering is supported for the following fields and operators:\n\n**status**: *eq* \"CONFIRMED\" or \"DENIED\" **reviewedByUser** *eq* true or false **access.id**: *eq* \"id\" **access.type**: *eq* \"ROLE\" or \"ACCESS_PROFILE\" **access.name**: *sw* \"Administrator\" **access.description**: *sw* \"admin\"","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407)\n\nSorting is supported for the following fields: **access.name,status**\n\nBy default the common access items are sorted by name, ascending.","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a paginated list of common access + + + +This endpoint returns the current common access for a customer. The returned items can be filtered and sorted. Requires authorization scope of iai:access-modeling:read + +
    Query Parameters
    + +Succeeded. Returns a list of common access for a customer. + +
    Schema array
      access object
      + +common access item + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-connector-list.api.mdx b/docs/sailpoint-api-beta/get-connector-list.api.mdx new file mode 100644 index 000000000..a7939c3c0 --- /dev/null +++ b/docs/sailpoint-api-beta/get-connector-list.api.mdx @@ -0,0 +1,88 @@ +--- +id: get-connector-list +sidebar_label: Gets connector list +hide_title: true +hide_table_of_contents: true +api: {"tags":["Connectors"],"operationId":"getConnectorList","description":"Fetches list of connectors that have 'RELEASED' status using filtering and pagination.\nA token with ORG_ADMIN authority is required to call this API.","parameters":[{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\nFiltering is supported for the following fields and operators:\n\n**name**: *sw*\n\n**type**: *eq*\n\n**directConnect**: *eq*","example":"directConnect eq \"true\""},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"locale","schema":{"type":"string","enum":["de","no","fi","sv","ru","pt","ko","zh-TW","en","it","fr","zh-CN","hu","es","cs","ja","pl","da","nl"],"example":"de"},"description":"The locale to apply to the config. If no viable locale is given, it will default to \"en\""}],"responses":{"200":{"description":"A Connector Dto object","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The connector name","example":"name"},"type":{"type":"string","description":"The connector type","example":"ServiceNow"},"scriptName":{"type":"string","description":"The connector script name","example":"servicenow"},"directConnect":{"type":"boolean","description":"true if the source is a direct connect source","example":true},"connectorMetadata":{"type":"object","description":"Object containing metadata pertinent to the UI to be used","example":{"supportedUI":"EXTJS","platform":"ccg","shortDesc":"connector description"}},"status":{"type":"string","description":"The connector status","example":"RELEASED"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/connectors","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Gets connector list","description":{"content":"Fetches list of connectors that have 'RELEASED' status using filtering and pagination.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["connectors"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\nFiltering is supported for the following fields and operators:\n\n**name**: *sw*\n\n**type**: *eq*\n\n**directConnect**: *eq*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"The locale to apply to the config. If no viable locale is given, it will default to \"en\"","type":"text/plain"},"key":"locale","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Gets connector list + + + +Fetches list of connectors that have 'RELEASED' status using filtering and pagination. +A token with ORG_ADMIN authority is required to call this API. + +
    Query Parameters
    + +A Connector Dto object + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-connector-rule-list.api.mdx b/docs/sailpoint-api-beta/get-connector-rule-list.api.mdx new file mode 100644 index 000000000..456e178cf --- /dev/null +++ b/docs/sailpoint-api-beta/get-connector-rule-list.api.mdx @@ -0,0 +1,76 @@ +--- +id: get-connector-rule-list +sidebar_label: List Connector Rules +hide_title: true +hide_table_of_contents: true +api: {"tags":["Connector Rule Management"],"operationId":"getConnectorRuleList","description":"Returns the list of connector rules.\nA token with ORG_ADMIN authority is required to call this API.","responses":{"200":{"description":"A list of connector rules","content":{"application/json":{"schema":{"type":"array","items":{"description":"ConnectorRuleResponse","allOf":[{"description":"ConnectorRuleCreateRequest","type":"object","required":["name","type","sourceCode"],"properties":{"name":{"type":"string","description":"the name of the rule","example":"WebServiceBeforeOperationRule"},"description":{"type":"string","description":"a description of the rule's purpose","example":"This rule does that"},"type":{"type":"string","enum":["BuildMap","ConnectorAfterCreate","ConnectorAfterDelete","ConnectorAfterModify","ConnectorBeforeCreate","ConnectorBeforeDelete","ConnectorBeforeModify","JDBCBuildMap","JDBCOperationProvisioning","JDBCProvision","PeopleSoftHRMSBuildMap","PeopleSoftHRMSOperationProvisioning","PeopleSoftHRMSProvision","RACFPermissionCustomization","SAPBuildMap","SapHrManagerRule","SapHrOperationProvisioning","SapHrProvision","SuccessFactorsOperationProvisioning","WebServiceAfterOperationRule","WebServiceBeforeOperationRule"],"description":"the type of rule","example":"BuildMap"},"signature":{"description":"The rule's function signature. Describes the rule's input arguments and output (if any)","type":"object","required":["input"],"properties":{"input":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"the name of the argument","example":"firstName"},"description":{"type":"string","description":"the description of the argument","example":"the first name of the identity"},"type":{"type":"string","description":"the programmatic type of the argument","example":"String"}},"required":["name"]}},"output":{"type":"object","properties":{"name":{"type":"string","description":"the name of the argument","example":"firstName"},"description":{"type":"string","description":"the description of the argument","example":"the first name of the identity"},"type":{"type":"string","description":"the programmatic type of the argument","example":"String"}},"required":["name"]}}},"sourceCode":{"description":"SourceCode","type":"object","required":["version","script"],"properties":{"version":{"type":"string","description":"the version of the code","example":"1.0"},"script":{"type":"string","description":"The code","example":"return \"Mr. \" + firstName;"}}},"attributes":{"type":"object","description":"a map of string to objects"}}},{"type":"object","required":["id","created"],"properties":{"id":{"type":"string","description":"the ID of the rule","example":"8113d48c0b914f17b4c6072d4dcb9dfe"},"created":{"type":"string","description":"an ISO 8601 UTC timestamp when this rule was created","example":"021-07-22T15:59:23Z"},"modified":{"type":"string","description":"an ISO 8601 UTC timestamp when this rule was last modified","example":"021-07-22T15:59:23Z"}}}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:connector-rule:read"]}],"method":"get","path":"/connector-rules","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Connector Rules","description":{"content":"Returns the list of connector rules.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["connector-rules"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Connector Rules + + + +Returns the list of connector rules. +A token with ORG_ADMIN authority is required to call this API. + +
    + +A list of connector rules + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-connector-rule.api.mdx b/docs/sailpoint-api-beta/get-connector-rule.api.mdx new file mode 100644 index 000000000..77250b18d --- /dev/null +++ b/docs/sailpoint-api-beta/get-connector-rule.api.mdx @@ -0,0 +1,64 @@ +--- +id: get-connector-rule +sidebar_label: Connector-Rule by ID +hide_title: true +hide_table_of_contents: true +api: {"tags":["Connector Rule Management"],"operationId":"getConnectorRule","description":"Returns the connector rule specified by ID.\nA token with ORG_ADMIN authority is required to call this API.","parameters":[{"name":"id","in":"path","description":"ID of the connector rule to retrieve","required":true,"style":"simple","explode":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Connector rule with the given ID","content":{"application/json":{"schema":{"description":"ConnectorRuleResponse","allOf":[{"description":"ConnectorRuleCreateRequest","type":"object","required":["name","type","sourceCode"],"properties":{"name":{"type":"string","description":"the name of the rule","example":"WebServiceBeforeOperationRule"},"description":{"type":"string","description":"a description of the rule's purpose","example":"This rule does that"},"type":{"type":"string","enum":["BuildMap","ConnectorAfterCreate","ConnectorAfterDelete","ConnectorAfterModify","ConnectorBeforeCreate","ConnectorBeforeDelete","ConnectorBeforeModify","JDBCBuildMap","JDBCOperationProvisioning","JDBCProvision","PeopleSoftHRMSBuildMap","PeopleSoftHRMSOperationProvisioning","PeopleSoftHRMSProvision","RACFPermissionCustomization","SAPBuildMap","SapHrManagerRule","SapHrOperationProvisioning","SapHrProvision","SuccessFactorsOperationProvisioning","WebServiceAfterOperationRule","WebServiceBeforeOperationRule"],"description":"the type of rule","example":"BuildMap"},"signature":{"description":"The rule's function signature. Describes the rule's input arguments and output (if any)","type":"object","required":["input"],"properties":{"input":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"the name of the argument","example":"firstName"},"description":{"type":"string","description":"the description of the argument","example":"the first name of the identity"},"type":{"type":"string","description":"the programmatic type of the argument","example":"String"}},"required":["name"]}},"output":{"type":"object","properties":{"name":{"type":"string","description":"the name of the argument","example":"firstName"},"description":{"type":"string","description":"the description of the argument","example":"the first name of the identity"},"type":{"type":"string","description":"the programmatic type of the argument","example":"String"}},"required":["name"]}}},"sourceCode":{"description":"SourceCode","type":"object","required":["version","script"],"properties":{"version":{"type":"string","description":"the version of the code","example":"1.0"},"script":{"type":"string","description":"The code","example":"return \"Mr. \" + firstName;"}}},"attributes":{"type":"object","description":"a map of string to objects"}}},{"type":"object","required":["id","created"],"properties":{"id":{"type":"string","description":"the ID of the rule","example":"8113d48c0b914f17b4c6072d4dcb9dfe"},"created":{"type":"string","description":"an ISO 8601 UTC timestamp when this rule was created","example":"021-07-22T15:59:23Z"},"modified":{"type":"string","description":"an ISO 8601 UTC timestamp when this rule was last modified","example":"021-07-22T15:59:23Z"}}}]}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"security":[{"bearerAuth":["idn:connector-rule:read"]}],"method":"get","path":"/connector-rules/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Connector-Rule by ID","description":{"content":"Returns the connector rule specified by ID.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["connector-rules",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the connector rule to retrieve","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Connector-Rule by ID + + + +Returns the connector rule specified by ID. +A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    + +Connector rule with the given ID + +
    Schema
      signature object
      + +The rule's function signature. Describes the rule's input arguments and output (if any) + +
      input object[]
      output object
      sourceCode object
      + +SourceCode + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-custom-password-instructions.api.mdx b/docs/sailpoint-api-beta/get-custom-password-instructions.api.mdx new file mode 100644 index 000000000..35a093556 --- /dev/null +++ b/docs/sailpoint-api-beta/get-custom-password-instructions.api.mdx @@ -0,0 +1,79 @@ +--- +id: get-custom-password-instructions +sidebar_label: Get Custom Password Instructions by Page ID +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getCustomPasswordInstructions","tags":["Custom Password Instructions"],"description":"This API returns the custom password instructions for the specified page ID. A token with ORG_ADMIN authority is required to call this API.","parameters":[{"in":"path","name":"pageId","schema":{"type":"string","enum":["change-password:enter-password","change-password:finish","flow-selection:select","forget-username:user-email","mfa:enter-code","mfa:enter-kba","mfa:select","reset-password:enter-password","reset-password:enter-username","reset-password:finish","unlock-account:enter-username","unlock-account:finish"]},"required":true,"description":"The page ID of custom password instructions to query.","example":"mfa:select"},{"in":"query","name":"locale","schema":{"type":"string"},"description":"The locale for the custom instructions, a BCP47 language tag. The default value is \\\"default\\\"."}],"responses":{"200":{"description":"Reference to the custom password instructions.","content":{"application/json":{"schema":{"type":"object","properties":{"pageId":{"type":"string","description":"The page ID that represents the page for forget user name, reset password and unlock account flow.","enum":["change-password:enter-password","change-password:finish","flow-selection:select","forget-username:user-email","mfa:enter-code","mfa:enter-kba","mfa:select","reset-password:enter-password","reset-password:enter-username","reset-password:finish","unlock-account:enter-username","unlock-account:finish"]},"pageContent":{"type":"string","description":"The custom instructions for the specified page. Allow basic HTML format and maximum length is 1000 characters. The custom instructions will be sanitized to avoid attacks. If the customization text includes a link, like ... clicking on this will open the link on the current browser page. If you want your link to be redirected to a different page, please redirect it to \"_blank\" like this: link. This will open a new tab when the link is clicked. Notice we're only supporting _blank as the redirection target."},"locale":{"type":"string","example":"en","description":"The locale for the custom instructions, a BCP47 language tag. The default value is \\\"default\\\"."}}},"example":{"pageId":"reset-password:enter-password","locale":"default","pageContent":"See company password policies for details by clicking here"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/custom-password-instructions/{pageId}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Custom Password Instructions by Page ID","description":{"content":"This API returns the custom password instructions for the specified page ID. A token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["custom-password-instructions",":pageId"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The locale for the custom instructions, a BCP47 language tag. The default value is \\\"default\\\".","type":"text/plain"},"key":"locale","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The page ID of custom password instructions to query.","type":"text/plain"},"type":"any","value":"","key":"pageId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Custom Password Instructions by Page ID + + + +This API returns the custom password instructions for the specified page ID. A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    Query Parameters
    + +Reference to the custom password instructions. + +
    Schema
      ... clicking on this will open the link on the current browser page. If you want your link to be redirected to a different page, please redirect it to \"_blank\" like this: link. This will open a new tab when the link is clicked. Notice we're only supporting _blank as the redirection target."} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}>
    here\"\n}"}>
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-default-identity-attribute-config.api.mdx b/docs/sailpoint-api-beta/get-default-identity-attribute-config.api.mdx new file mode 100644 index 000000000..d2f9668d9 --- /dev/null +++ b/docs/sailpoint-api-beta/get-default-identity-attribute-config.api.mdx @@ -0,0 +1,96 @@ +--- +id: get-default-identity-attribute-config +sidebar_label: Gets the default identity attribute config +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getDefaultIdentityAttributeConfig","tags":["Identity Profiles"],"description":"This returns the default identity attribute config\nA token with ORG_ADMIN authority is required to call this API to get the default identity attribute config.","parameters":[{"in":"path","name":"identity-profile-id","schema":{"type":"string","format":"uuid"},"required":true,"description":"The Identity Profile ID","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"An Identity Attribute Config object","content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean","description":"If the profile or mapping is enabled","example":true},"attributeTransforms":{"type":"array","items":{"type":"object","properties":{"identityAttributeName":{"type":"string","description":"Name of the identity attribute","example":"email"},"transformDefinition":{"description":"The seaspray transformation definition","type":"object","properties":{"type":{"type":"string","description":"The type of the transform definition.","example":"accountAttribute"},"attributes":{"type":"object","additionalProperties":{"type":"object"},"description":"Arbitrary key-value pairs to store any metadata for the object","example":{"attributeName":"e-mail","sourceName":"MySource","sourceId":"2c9180877a826e68017a8c0b03da1a53"}}}}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:identity-profile-default-mapping:read"]}],"method":"get","path":"/identity-profiles/{identity-profile-id}/default-identity-attribute-config","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Gets the default identity attribute config","description":{"content":"This returns the default identity attribute config\nA token with ORG_ADMIN authority is required to call this API to get the default identity attribute config.","type":"text/plain"},"url":{"path":["identity-profiles",":identity-profile-id","default-identity-attribute-config"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Identity Profile ID","type":"text/plain"},"type":"any","value":"","key":"identity-profile-id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Gets the default identity attribute config + + + +This returns the default identity attribute config +A token with ORG_ADMIN authority is required to call this API to get the default identity attribute config. + +
    Path Parameters
    + +An Identity Attribute Config object + +
    Schema
      attributeTransforms object[]
      transformDefinition object
      + +The seaspray transformation definition + +
      attributes object
      + +Arbitrary key-value pairs to store any metadata for the object + +
    • property name* object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-entitlement-changes-identities.api.mdx b/docs/sailpoint-api-beta/get-entitlement-changes-identities.api.mdx new file mode 100644 index 000000000..374efc82b --- /dev/null +++ b/docs/sailpoint-api-beta/get-entitlement-changes-identities.api.mdx @@ -0,0 +1,71 @@ +--- +id: get-entitlement-changes-identities +sidebar_label: Get identities for a suggested entitlement (for a role) +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getEntitlementChangesIdentities","tags":["Role Insights"],"description":"Role insights suggests entitlements to be added for a role. This endpoint returns a list of identities in the role, with or without the entitlements, for a suggested entitlement so that the user can see which identities would be affected if the suggested entitlement were to be added to the role.","parameters":[{"in":"path","name":"insightId","schema":{"type":"string"},"required":true,"description":"The role insight id","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"path","name":"entitlementId","schema":{"type":"string"},"required":true,"description":"The entitlement id","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"query","name":"hasEntitlement","description":"Identity has this entitlement or not","required":false,"style":"form","explode":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"sorters","description":"sort by name","required":false,"style":"form","explode":true,"schema":{"type":"string"}},{"in":"query","name":"filters","description":"Filter parameter by \"starts with\" for the name.","required":false,"style":"form","explode":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succeeded. Returns a list of identities with or without the entitlement.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Id for identity"},"name":{"type":"string","description":"Name for identity"},"attributes":{"type":"object","additionalProperties":{"type":"string"}}},"example":{"id":"8c190e67-87aa-4ed9-a90b-d9d5344523fb","name":"Adam Smith","attributes":{"department":"Human Resources-tah-mgb-dnd","firstName":"Adam","jobTitle":"Sales Analyst","location":"Mexico"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/role-insights/{insightId}/entitlement-changes/{entitlementId}/identities","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get identities for a suggested entitlement (for a role)","description":{"content":"Role insights suggests entitlements to be added for a role. This endpoint returns a list of identities in the role, with or without the entitlements, for a suggested entitlement so that the user can see which identities would be affected if the suggested entitlement were to be added to the role.","type":"text/plain"},"url":{"path":["role-insights",":insightId","entitlement-changes",":entitlementId","identities"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Identity has this entitlement or not","type":"text/plain"},"key":"hasEntitlement","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"sort by name","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"Filter parameter by \"starts with\" for the name.","type":"text/plain"},"key":"filters","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The role insight id","type":"text/plain"},"type":"any","value":"","key":"insightId"},{"disabled":false,"description":{"content":"(Required) The entitlement id","type":"text/plain"},"type":"any","value":"","key":"entitlementId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get identities for a suggested entitlement (for a role) + + + +Role insights suggests entitlements to be added for a role. This endpoint returns a list of identities in the role, with or without the entitlements, for a suggested entitlement so that the user can see which identities would be affected if the suggested entitlement were to be added to the role. + +
    Path Parameters
    Query Parameters
    + +Succeeded. Returns a list of identities with or without the entitlement. + +
    Schema array
      attributes object
    • property name* string
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-entitlement-distribution-potential-role.api.mdx b/docs/sailpoint-api-beta/get-entitlement-distribution-potential-role.api.mdx new file mode 100644 index 000000000..ab9633e88 --- /dev/null +++ b/docs/sailpoint-api-beta/get-entitlement-distribution-potential-role.api.mdx @@ -0,0 +1,71 @@ +--- +id: get-entitlement-distribution-potential-role +sidebar_label: Retrieves entitlement popularity distribution for a potential role in a role mining session +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getEntitlementDistributionPotentialRole","tags":["IAI Role Mining"],"description":"This method returns entitlement popularity distribution for a potential role in a role mining session.","parameters":[{"in":"path","name":"sessionId","schema":{"type":"string"},"required":true,"description":"The role mining session id","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"path","name":"potentialRoleId","schema":{"type":"string"},"required":true,"description":"A potential role id in a role mining session","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"query","name":"includeCommonAccess","description":"Boolean determining whether common access entitlements will be included or not","required":false,"style":"form","explode":true,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Succeeded. Returns a map containing entitlement popularity distribution for a potential role.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"integer"}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/entitlement-popularity-distribution","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Retrieves entitlement popularity distribution for a potential role in a role mining session","description":{"content":"This method returns entitlement popularity distribution for a potential role in a role mining session.","type":"text/plain"},"url":{"path":["role-mining-sessions",":sessionId","potential-roles",":potentialRoleId","entitlement-popularity-distribution"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Boolean determining whether common access entitlements will be included or not","type":"text/plain"},"key":"includeCommonAccess","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The role mining session id","type":"text/plain"},"type":"any","value":"","key":"sessionId"},{"disabled":false,"description":{"content":"(Required) A potential role id in a role mining session","type":"text/plain"},"type":"any","value":"","key":"potentialRoleId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Retrieves entitlement popularity distribution for a potential role in a role mining session + + + +This method returns entitlement popularity distribution for a potential role in a role mining session. + +
    Path Parameters
    Query Parameters
    + +Succeeded. Returns a map containing entitlement popularity distribution for a potential role. + +
    Schema
    • property name* integer
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-entitlement.api.mdx b/docs/sailpoint-api-beta/get-entitlement.api.mdx new file mode 100644 index 000000000..f7a864172 --- /dev/null +++ b/docs/sailpoint-api-beta/get-entitlement.api.mdx @@ -0,0 +1,93 @@ +--- +id: get-entitlement +sidebar_label: Get an Entitlement +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getEntitlement","tags":["Entitlements"],"description":"This API returns an Entitlement by its ID.\n\nA token with ORG_ADMIN or API authority is required to call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"Entitlement Id","example":"2c91808874ff91550175097daaec161c"}],"responses":{"200":{"description":"An Entitlement","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The entitlement id","example":"2c91808874ff91550175097daaec161c"},"name":{"type":"string","description":"The entitlement name","example":"LauncherTestGroup2"},"attribute":{"type":"string","description":"The entitlement attribute name","example":"memberOf"},"value":{"type":"string","description":"The value of the entitlement","example":"CN=LauncherTestGroup2,OU=LauncherTestOrg,OU=slpt-automation,DC=TestAutomationAD,DC=local"},"sourceSchemaObjectType":{"type":"string","description":"The object type of the entitlement from the source schema","example":"group"},"description":{"type":"string","description":"The description of the entitlement","example":"CN=LauncherTestGroup2,OU=LauncherTestOrg,OU=slpt-automation,DC=TestAutomationAD,DC=local"},"privileged":{"type":"boolean","description":"True if the entitlement is privileged","example":true},"cloudGoverned":{"type":"boolean","description":"True if the entitlement is cloud governed","example":true},"created":{"type":"string","description":"Time when the entitlement was created","format":"date-time","example":"2020-10-08T18:33:52.029Z"},"modified":{"type":"string","description":"Time when the entitlement was last modified","format":"date-time","example":"2020-10-08T18:33:52.029Z"},"source":{"type":"object","properties":{"id":{"type":"string","description":"The source ID","example":"2c9180827ca885d7017ca8ce28a000eb"},"type":{"type":"string","description":"The source type, will always be \"SOURCE\"","example":"SOURCE"},"name":{"type":"string","description":"The source name","example":"ODS-AD-Source"}},"example":[{"type":"SOURCE","id":"2c9180835d191a86015d28455b4b232a","name":"HR Active Directory"}]},"attributes":{"type":"object","description":"A map of free-form key-value pairs from the source system","example":{"fieldName":"fieldValue"},"additionalProperties":true},"segments":{"type":"array","items":{"type":"string"},"nullable":true,"description":"List of IDs of segments, if any, to which this Entitlement is assigned.","example":["f7b1b8a3-5fed-4fd4-ad29-82014e137e19","29cb6c06-1da8-43ea-8be4-b3125f248f2a"]},"directPermissions":{"type":"array","items":{"type":"object","description":"Simplified DTO for the Permission objects stored in SailPoint's database. The data is aggregated from customer systems and is free-form, so its appearance can vary largely between different clients/customers.","properties":{"rights":{"type":"array","description":"All the rights (e.g. actions) that this permission allows on the target","readOnly":true,"items":{"type":"string","example":"SELECT"}},"target":{"type":"string","description":"The target the permission would grants rights on.","readOnly":true,"example":"SYS.GV_$TRANSACTION"}}}}}},"example":{"sourceSchemaObjectType":"group","attribute":"memberOf","attributes":{"GroupType":"Security","sAMAccountName":"LauncherTestGroup1","GroupScope":"Global","objectguid":"{01a6e70b-9705-4155-a5c6-492a9bcc8c64}","objectSid":"S-1-5-21-3585869415-1648031554-2909195034-1633","cn":"LauncherTestGroup1","msDS-PrincipalName":"AUTOMATIONAD\\LauncherTestGroup1"},"value":"CN=LauncherTestGroup1,OU=LauncherTestOrg,OU=slpt-automation,DC=TestAutomationAD,DC=local","description":"some description","privileged":false,"cloudGoverned":false,"source":{"type":"SOURCE","id":"2c9180877504c40e0175097d5ce707c8","name":"EndToEnd-ADSource"},"id":"2c91808c74ff913f0175097daa9d59cd","name":"LauncherTestGroup1","created":"2020-10-08T18:33:52.029Z","modified":"2021-01-19T16:53:35.707Z"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/entitlements/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get an Entitlement","description":{"content":"This API returns an Entitlement by its ID.\n\nA token with ORG_ADMIN or API authority is required to call this API.","type":"text/plain"},"url":{"path":["entitlements",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Entitlement Id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get an Entitlement + + + +This API returns an Entitlement by its ID. + +A token with ORG_ADMIN or API authority is required to call this API. + +
    Path Parameters
    + +An Entitlement + +
    Schema
      source object
      attributes object
      + +A map of free-form key-value pairs from the source system + +
      directPermissions object[]
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-entitlements-potential-role.api.mdx b/docs/sailpoint-api-beta/get-entitlements-potential-role.api.mdx new file mode 100644 index 000000000..803c391b1 --- /dev/null +++ b/docs/sailpoint-api-beta/get-entitlements-potential-role.api.mdx @@ -0,0 +1,75 @@ +--- +id: get-entitlements-potential-role +sidebar_label: Retrieves entitlements for a potential role in a role mining session +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getEntitlementsPotentialRole","tags":["IAI Role Mining"],"description":"This method returns entitlements for a potential role in a role mining session.","parameters":[{"in":"path","name":"sessionId","schema":{"type":"string"},"required":true,"description":"The role mining session id","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"path","name":"potentialRoleId","schema":{"type":"string"},"required":true,"description":"A potential role id in a role mining session","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"query","name":"includeCommonAccess","description":"Boolean determining whether common access entitlements will be included or not","required":false,"style":"form","explode":true,"schema":{"type":"boolean"}},{"in":"query","name":"sorters","description":"sort by popularity, default order descending","required":false,"style":"form","explode":true,"schema":{"type":"string"}},{"in":"query","name":"filters","description":"Filter parameter by \"starts with\" for the applicationName and entitlementRef.name.","required":false,"style":"form","explode":true,"schema":{"type":"string"}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Succeeded. Returns a list of entitlements for a potential role.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"entitlementRef":{"description":"Details about the entitlement","type":"object","properties":{"id":{"type":"string","description":"Id of the entitlement"},"name":{"type":"string","description":"Name of the entitlement"},"description":{"type":"string","description":"Description forthe entitlement"}}},"name":{"type":"string","description":"Name of the entitlement"},"applicationName":{"type":"string","description":"Application name of the entitlement"},"identityCount":{"type":"integer","description":"The number of identities with this entitlement in a role.","example":45},"popularity":{"type":"integer","description":"The % popularity of this entitlement in a role.","example":65},"popularityInOrg":{"type":"integer","description":"TThe % popularity of this entitlement in the org.","example":35}},"example":{"entitlementRef":{"id":"2c9180877212632a017228d5a796292b","name":"entitlement.10","description":"Read access"},"name":"Administrator","applicationName":"Slack","identityCount":"8","popularity":"65","popularityInOrg":"35"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/entitlement-popularities","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Retrieves entitlements for a potential role in a role mining session","description":{"content":"This method returns entitlements for a potential role in a role mining session.","type":"text/plain"},"url":{"path":["role-mining-sessions",":sessionId","potential-roles",":potentialRoleId","entitlement-popularities"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Boolean determining whether common access entitlements will be included or not","type":"text/plain"},"key":"includeCommonAccess","value":""},{"disabled":false,"description":{"content":"sort by popularity, default order descending","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"Filter parameter by \"starts with\" for the applicationName and entitlementRef.name.","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The role mining session id","type":"text/plain"},"type":"any","value":"","key":"sessionId"},{"disabled":false,"description":{"content":"(Required) A potential role id in a role mining session","type":"text/plain"},"type":"any","value":"","key":"potentialRoleId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Retrieves entitlements for a potential role in a role mining session + + + +This method returns entitlements for a potential role in a role mining session. + +
    Path Parameters
    Query Parameters
    + +Succeeded. Returns a list of entitlements for a potential role. + +
    Schema array
      entitlementRef object
      + +Details about the entitlement + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-events.api.mdx b/docs/sailpoint-api-beta/get-events.api.mdx new file mode 100644 index 000000000..b40363bba --- /dev/null +++ b/docs/sailpoint-api-beta/get-events.api.mdx @@ -0,0 +1,127 @@ +--- +id: get-events +sidebar_label: Lists all events for the given identity +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getEvents","tags":["Identity History"],"description":"This method retrieves all access events for the identity Requires authorization scope of 'idn:identity-history:read' ","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The identity id","example":"8c190e6787aa4ed9a90bd9d5344523fb"},{"in":"query","name":"from","schema":{"type":"string"},"description":"The optional instant from which to return the access events","example":"2007-03-01T13:00:00Z"},{"in":"query","name":"eventTypes","schema":{"type":"array","items":{"type":"string"}},"description":"An optional list of event types to return. If null or empty, all events are returned","example":["AccessAddedEvent","AccessRemovedEvent"]},{"in":"query","name":"accessItemTypes","schema":{"type":"array","items":{"type":"string"}},"description":"An optional list of access item types (app, account, entitlement, etc...) to return. If null or empty, all access items types are returned","example":["entitlement","account"]},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"The list of events for the identity","content":{"application/json":{"schema":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"accessItem":{"type":"object","oneOf":[{"type":"object","properties":{"accessType":{"type":"string","example":"accessProfile","description":"the access item type. accessProfile in this case"},"id":{"type":"string","example":"2c918087763e69d901763e72e97f006f","description":"the access item id"},"name":{"type":"string","example":"sample","description":"the access profile name"},"sourceName":{"type":"string","example":"DataScienceDataset","description":"the name of the source"},"sourceId":{"type":"string","example":"2793o32dwd","description":"the id of the source"},"description":{"type":"string","example":"AccessProfile - Workday/Citizenship access","description":"the description for the access profile"},"displayName":{"type":"string","example":"Dr. Arden Rogahn MD","description":"the display name of the identity"},"entitlementCount":{"type":"string","example":12,"description":"the number of entitlements the access profile will create"},"appDisplayName":{"type":"string","example":"AppName","description":"the name of app"}}},{"type":"object","properties":{"accessType":{"type":"string","example":"account","description":"the access item type. account in this case"},"id":{"type":"string","example":"2c918087763e69d901763e72e97f006f","description":"the access item id"},"nativeIdentity":{"type":"string","example":"dr.arden.ogahn.d","description":"the native identifier used to uniquely identify an acccount"},"sourceName":{"type":"string","example":"DataScienceDataset","description":"the name of the source"},"sourceId":{"type":"string","example":"2793o32dwd","description":"the id of the source"},"entitlementCount":{"type":"string","example":12,"description":"the number of entitlements the account will create"},"displayName":{"type":"string","example":"Dr. Arden Rogahn MD","description":"the display name of the identity"}}},{"type":"object","properties":{"accessType":{"type":"string","example":"app","description":"the access item type. entitlement in this case"},"id":{"type":"string","example":"2c918087763e69d901763e72e97f006f","description":"the access item id"},"displayName":{"type":"string","example":"Display Name","description":"the access profile display name"},"sourceName":{"type":"string","example":"appName","description":"the associated source name if it exists"}}},{"type":"object","properties":{"accessType":{"type":"string","example":"entitlement","description":"the access item type. entitlement in this case"},"id":{"type":"string","example":"2c918087763e69d901763e72e97f006f","description":"the access item id"},"attribute":{"type":"string","example":"groups","description":"the entitlement attribute"},"value":{"type":"string","example":"Upward mobility access","description":"the associated value"},"entitlementType":{"type":"string","example":"entitlement","description":"the type of entitlement"},"sourceName":{"type":"string","example":"DataScienceDataset","description":"the name of the source"},"sourceId":{"type":"string","example":"2793o32dwd","description":"the id of the source"},"description":{"type":"string","example":"Entitlement - Workday/Citizenship access","description":"the description for the entitlment"},"displayName":{"type":"string","example":"Dr. Arden Rogahn MD","description":"the display name of the identity"}}},{"type":"object","properties":{"accessType":{"type":"string","example":"role","description":"the access item type. role in this case"},"id":{"type":"string","example":"2c918087763e69d901763e72e97f006f","description":"the access item id"},"displayName":{"type":"string","example":"sample","description":"the role display name"},"description":{"type":"string","example":"Role - Workday/Citizenship access","description":"the description for the role"},"sourceName":{"type":"string","example":"Source Name","description":"the associated source name if it exists"}}}],"example":{"id":"8c190e6787aa4ed9a90bd9d5344523fb","accessType":"account","nativeIdentity":127999,"sourceName":"JDBC Entitlements Source","entitlementCount":0,"displayName":"Sample Name"}},"identityId":{"type":"string","description":"the identity id","example":"8c190e6787aa4ed9a90bd9d5344523fb"},"eventType":{"type":"string","description":"the event type","example":"AccessItemAssociated"},"dt":{"type":"string","description":"the date of event","example":"2019-03-08T22:37:33.901Z"},"governanceEvent":{"example":{"name":"Manager Certification for Jon Snow","dt":"2019-03-08T22:37:33.901Z","type":"certification","governanceId":"2c91808a77ff216301782327a50f09bf","owners":[{"id":"bc693f07e7b645539626c25954c58554","displayName":"Jon Snow"}],"reviewers":[{"id":"bc693f07e7b645539626c25954c58554","displayName":"Jon Snow"}],"decisionMaker":{"id":"bc693f07e7b645539626c25954c58554","displayName":"Jon Snow"}},"type":"object","properties":{"name":{"type":"string","description":"The name of the governance event, such as the certification name or access request ID.","example":"Manager Certification for Jon Snow"},"dt":{"type":"string","description":"The date that the certification or access request was completed.","example":"2019-03-08T22:37:33.901Z"},"type":{"type":"string","enum":["certification","accessRequest"],"description":"The type of governance event.","example":"certification"},"governanceId":{"type":"string","description":"The ID of the instance that caused the event - either the certification ID or access request ID.","example":"2c91808a77ff216301782327a50f09bf"},"owners":{"type":"array","description":"The owners of the governance event (the certifiers or approvers)","items":{"type":"object","properties":{"id":{"type":"string","description":"the id of the certifier","example":"8a80828f643d484f01643e14202e206f"},"displayName":{"type":"string","description":"the name of the certifier","example":"John Snow"}}},"example":[{"id":"8a80828f643d484f01643e14202e206f","displayName":"John Snow"}]},"reviewers":{"type":"array","description":"The owners of the governance event (the certifiers or approvers), this field should be preferred over owners","items":{"type":"object","properties":{"id":{"type":"string","description":"the id of the certifier","example":"8a80828f643d484f01643e14202e206f"},"displayName":{"type":"string","description":"the name of the certifier","example":"John Snow"}}},"example":[{"id":"8a80828f643d484f01643e14202e206f","displayName":"John Snow"}]},"decisionMaker":{"type":"object","properties":{"id":{"type":"string","description":"the id of the certifier","example":"8a80828f643d484f01643e14202e206f"},"displayName":{"type":"string","description":"the name of the certifier","example":"John Snow"}},"description":"The decision maker","example":{"id":"8a80828f643d484f01643e14202e206f","displayName":"John Snow"}}}}}},{"type":"object","properties":{"accessItem":{"type":"object","oneOf":[{"type":"object","properties":{"accessType":{"type":"string","example":"accessProfile","description":"the access item type. accessProfile in this case"},"id":{"type":"string","example":"2c918087763e69d901763e72e97f006f","description":"the access item id"},"name":{"type":"string","example":"sample","description":"the access profile name"},"sourceName":{"type":"string","example":"DataScienceDataset","description":"the name of the source"},"sourceId":{"type":"string","example":"2793o32dwd","description":"the id of the source"},"description":{"type":"string","example":"AccessProfile - Workday/Citizenship access","description":"the description for the access profile"},"displayName":{"type":"string","example":"Dr. Arden Rogahn MD","description":"the display name of the identity"},"entitlementCount":{"type":"string","example":12,"description":"the number of entitlements the access profile will create"},"appDisplayName":{"type":"string","example":"AppName","description":"the name of app"}}},{"type":"object","properties":{"accessType":{"type":"string","example":"account","description":"the access item type. account in this case"},"id":{"type":"string","example":"2c918087763e69d901763e72e97f006f","description":"the access item id"},"nativeIdentity":{"type":"string","example":"dr.arden.ogahn.d","description":"the native identifier used to uniquely identify an acccount"},"sourceName":{"type":"string","example":"DataScienceDataset","description":"the name of the source"},"sourceId":{"type":"string","example":"2793o32dwd","description":"the id of the source"},"entitlementCount":{"type":"string","example":12,"description":"the number of entitlements the account will create"},"displayName":{"type":"string","example":"Dr. Arden Rogahn MD","description":"the display name of the identity"}}},{"type":"object","properties":{"accessType":{"type":"string","example":"app","description":"the access item type. entitlement in this case"},"id":{"type":"string","example":"2c918087763e69d901763e72e97f006f","description":"the access item id"},"displayName":{"type":"string","example":"Display Name","description":"the access profile display name"},"sourceName":{"type":"string","example":"appName","description":"the associated source name if it exists"}}},{"type":"object","properties":{"accessType":{"type":"string","example":"entitlement","description":"the access item type. entitlement in this case"},"id":{"type":"string","example":"2c918087763e69d901763e72e97f006f","description":"the access item id"},"attribute":{"type":"string","example":"groups","description":"the entitlement attribute"},"value":{"type":"string","example":"Upward mobility access","description":"the associated value"},"entitlementType":{"type":"string","example":"entitlement","description":"the type of entitlement"},"sourceName":{"type":"string","example":"DataScienceDataset","description":"the name of the source"},"sourceId":{"type":"string","example":"2793o32dwd","description":"the id of the source"},"description":{"type":"string","example":"Entitlement - Workday/Citizenship access","description":"the description for the entitlment"},"displayName":{"type":"string","example":"Dr. Arden Rogahn MD","description":"the display name of the identity"}}},{"type":"object","properties":{"accessType":{"type":"string","example":"role","description":"the access item type. role in this case"},"id":{"type":"string","example":"2c918087763e69d901763e72e97f006f","description":"the access item id"},"displayName":{"type":"string","example":"sample","description":"the role display name"},"description":{"type":"string","example":"Role - Workday/Citizenship access","description":"the description for the role"},"sourceName":{"type":"string","example":"Source Name","description":"the associated source name if it exists"}}}],"example":{"id":"8c190e6787aa4ed9a90bd9d5344523fb","accessType":"account","nativeIdentity":127999,"sourceName":"JDBC Entitlements Source","entitlementCount":0,"displayName":"Sample Name"}},"identityId":{"type":"string","description":"the identity id","example":"8c190e6787aa4ed9a90bd9d5344523fb"},"eventType":{"type":"string","description":"the event type","example":"AccessItemRemoved"},"dt":{"type":"string","description":"the date of event","example":"2019-03-08T22:37:33.901Z"},"governanceEvent":{"example":{"name":"Manager Certification for Jon Snow","dt":"2019-03-08T22:37:33.901Z","type":"certification","governanceId":"2c91808a77ff216301782327a50f09bf","owners":[{"id":"bc693f07e7b645539626c25954c58554","displayName":"Jon Snow"}],"reviewers":[{"id":"bc693f07e7b645539626c25954c58554","displayName":"Jon Snow"}],"decisionMaker":{"id":"bc693f07e7b645539626c25954c58554","displayName":"Jon Snow"}},"type":"object","properties":{"name":{"type":"string","description":"The name of the governance event, such as the certification name or access request ID.","example":"Manager Certification for Jon Snow"},"dt":{"type":"string","description":"The date that the certification or access request was completed.","example":"2019-03-08T22:37:33.901Z"},"type":{"type":"string","enum":["certification","accessRequest"],"description":"The type of governance event.","example":"certification"},"governanceId":{"type":"string","description":"The ID of the instance that caused the event - either the certification ID or access request ID.","example":"2c91808a77ff216301782327a50f09bf"},"owners":{"type":"array","description":"The owners of the governance event (the certifiers or approvers)","items":{"type":"object","properties":{"id":{"type":"string","description":"the id of the certifier","example":"8a80828f643d484f01643e14202e206f"},"displayName":{"type":"string","description":"the name of the certifier","example":"John Snow"}}},"example":[{"id":"8a80828f643d484f01643e14202e206f","displayName":"John Snow"}]},"reviewers":{"type":"array","description":"The owners of the governance event (the certifiers or approvers), this field should be preferred over owners","items":{"type":"object","properties":{"id":{"type":"string","description":"the id of the certifier","example":"8a80828f643d484f01643e14202e206f"},"displayName":{"type":"string","description":"the name of the certifier","example":"John Snow"}}},"example":[{"id":"8a80828f643d484f01643e14202e206f","displayName":"John Snow"}]},"decisionMaker":{"type":"object","properties":{"id":{"type":"string","description":"the id of the certifier","example":"8a80828f643d484f01643e14202e206f"},"displayName":{"type":"string","description":"the name of the certifier","example":"John Snow"}},"description":"The decision maker","example":{"id":"8a80828f643d484f01643e14202e206f","displayName":"John Snow"}}}}}},{"type":"object","properties":{"changes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"the attribute name"},"previousValue":{"type":"string","description":"the old value of attribute"},"newValue":{"type":"string","description":"the new value of attribute"}},"example":{"name":"firstname","previousValue":"adam","newValue":"zampa"}}},"eventType":{"type":"string","description":"the event type"},"identityId":{"type":"string","description":"the identity id"},"dt":{"type":"string","description":"the date of event"}},"example":{"attributeChanges":{"name":"firstname","previousValue":"adam","newValue":"zampa"},"eventType":"AttributesChanged","identityId":"8a80828f643d484f01643e14202e206f","dt":"2019-03-08T22:37:33.901Z"}},{"type":"object","properties":{"accessRequest":{"description":"the access request details","type":"object","properties":{"requesterId":{"type":"string","example":"2c91808a77ff216301782327a50f09bf","description":"the requester Id"},"requesterName":{"type":"string","example":"Bing C","description":"the requesterName"},"items":{"type":"array","example":[{"operation":"Add","accessItemType":"role","name":"Role-1","decision":"APPROVED","description":"The role descrition","sourceId":"8a80828f643d484f01643e14202e206f","sourceName":"Source1","approvalInfos":[{"name":"John Snow","id":"8a80828f643d484f01643e14202e2000","status":"Approved"}]}],"items":{"type":"object","properties":{"operation":{"type":"string","example":"Add","description":"the access request item operation"},"accessItemType":{"type":"string","example":"role","description":"the access item type"},"name":{"type":"string","example":"Role-1","description":"the name of access request item"},"decision":{"type":"string","example":"APPROVED","enum":["APPROVED","REJECTED"],"description":"the final decision for the access request"},"description":{"type":"string","example":"The role descrition","description":"the description of access request item"},"sourceId":{"type":"string","example":"8a80828f643d484f01643e14202e206f","description":"the source id"},"sourceName":{"type":"string","example":"Source1","description":"the source Name"},"approvalInfos":{"type":"array","example":[{"name":"John Snow","id":"8a80828f643d484f01643e14202e2000","status":"Approved"}],"items":{"type":"object","properties":{"id":{"type":"string","example":"8a80828f643d484f01643e14202e2000","description":"the id of approver"},"name":{"type":"string","example":"John Snow","description":"the name of approver"},"status":{"type":"string","example":"Approved","description":"the status of the approval request"}}}}}}}}},"identityId":{"type":"string","example":"8a80828f643d484f01643e14202e206f","description":"the identity id"},"eventType":{"type":"string","example":"AccessRequested","description":"the event type"},"dt":{"type":"string","example":"2019-03-08T22:37:33.901Z","description":"the date of event"}}},{"type":"object","properties":{"certificationId":{"type":"string","description":"the id of the certification item","example":"2c91808a77ff216301782327a50f09bf"},"certificationName":{"type":"string","description":"the certification item name","example":"Cert name"},"signedDate":{"type":"string","description":"the date ceritification was signed","example":"2019-03-08T22:37:33.901Z"},"certifiers":{"type":"array","description":"this field is deprecated and may go away","items":{"type":"object","properties":{"id":{"type":"string","description":"the id of the certifier","example":"8a80828f643d484f01643e14202e206f"},"displayName":{"type":"string","description":"the name of the certifier","example":"John Snow"}}},"example":[{"id":"8a80828f643d484f01643e14202e206f","displayName":"John Snow"}]},"reviewers":{"type":"array","description":"The list of identities who review this certification","items":{"type":"object","properties":{"id":{"type":"string","description":"the id of the certifier","example":"8a80828f643d484f01643e14202e206f"},"displayName":{"type":"string","description":"the name of the certifier","example":"John Snow"}}},"example":[{"id":"8a80828f643d484f01643e14202e206f","displayName":"John Snow"}]},"signer":{"type":"object","properties":{"id":{"type":"string","description":"the id of the certifier","example":"8a80828f643d484f01643e14202e206f"},"displayName":{"type":"string","description":"the name of the certifier","example":"John Snow"}},"description":"Identity who signed off on the certification","example":{"id":"8a80828f643d484f01643e14202e206f","displayName":"John Snow"}},"eventType":{"type":"string","description":"the event type","example":"IdentityCertified"},"dt":{"type":"string","description":"the date of event","example":"2019-03-08T22:37:33.901Z"}}},{"type":"object","properties":{"eventType":{"type":"string","description":"the event type"},"identityId":{"type":"string","description":"the identity id"},"dt":{"type":"string","description":"the date of event"},"account":{"type":"object","properties":{"id":{"type":"string","description":"the ID of the account in the database"},"nativeIdentity":{"type":"string","description":"the native identifier of the account"},"displayName":{"type":"string","description":"the display name of the account"},"sourceId":{"type":"string","description":"the ID of the source for this account"},"sourceName":{"type":"string","description":"the name of the source for this account"},"entitlementCount":{"type":"integer","description":"the number of entitlements on this account"},"accessType":{"type":"string","description":"this value is always \"account\""}}},"statusChange":{"type":"object","properties":{"previousStatus":{"type":"string","description":"the previous status of the account","enum":["enabled","disabled","locked"]},"newStatus":{"type":"string","description":"the new status of the account","enum":["enabled","disabled","locked"]}}}},"example":{"account":{"id":"2c91808a77ff216301782327a50f09bf","nativeIdentity":127999,"displayName":"Sample Name","sourceId":"8a80828f643d484f01643e14202e206f","sourceName":"JDBC Entitlements Source","entitlementCount":0,"accessType":"account"},"statusChange":{"previousStatus":"enabled","newStatus":"disabled"},"eventType":"AccountStatusChanged","identityId":"8a80828f643d484f01643e14202e206f","date":"2019-03-08T22:37:33.901Z"}}]}},"examples":{"AccessItemAssociated":{"description":"An Access item associated event","value":[{"accessItem":{"id":"8c190e6787aa4ed9a90bd9d5344523fb","accessType":"account","nativeIdentity":127999,"sourceName":"JDBC Entitlements Source","entitlementCount":0,"displayName":"Sample Name"},"eventType":"AccessItemAssociated","identityId":"8a80828f643d484f01643e14202e206f","dt":"2019-03-08T22:37:33.901Z","governanceEvent":{"name":"Access Request 58","dt":"2019-03-08T22:37:33.901Z","type":"accessRequest","governanceId":"2c91808a77ff216301782327a50f09e1","owners":[{"id":"bc693f07e7b645539626c25954c58554","displayName":"Jon Snow"}],"reviewers":[{"id":"bc693f07e7b645539626c25954c58554","displayName":"Jon Snow"}],"decisionMaker":{"id":"bc693f07e7b645539626c25954c58554","displayName":"Jon Snow"}}}]},"AccessItemRemoved":{"description":"An Access item removed event","value":[{"accessItem":{"id":"8c190e6787aa4ed9a90bd9d5344523fb","accessType":"account","nativeIdentity":127999,"sourceName":"JDBC Entitlements Source","entitlementCount":0,"displayName":"Sample Name"},"eventType":"AccessItemRemoved","identityId":"8a80828f643d484f01643e14202e206f","dt":"2019-03-08T22:37:33.901Z","governanceEvent":{"name":"Manager Certification for Jon Snow","dt":"2019-03-08T22:37:33.901Z","type":"certification","governanceId":"2c91808a77ff216301782327a50f09bf","owners":[{"id":"bc693f07e7b645539626c25954c58554","displayName":"Jon Snow"}],"reviewers":[{"id":"bc693f07e7b645539626c25954c58554","displayName":"Jon Snow"}],"decisionMaker":{"id":"bc693f07e7b645539626c25954c58554","displayName":"Jon Snow"}}}]},"AttributesChanged":{"description":"An attribute changed event","value":[{"attributeChanges":[{"name":"firstname","previousValue":"adam","newValue":"zampa"}],"eventType":"AttributesChanged","identityId":"8a80828f643d484f01643e14202e206f","dt":"2019-03-08T22:37:33.901Z"}]},"AccessRequested":{"description":"An access requested event","value":{"accessRequest":{"requesterId":"2c91808a77ff216301782327a50f09bf","requestName":"Bing C","items":[{"operation":"Add","accessItemType":"role","name":"Role-1","decision":"APPROVED","description":"The role descrition","sourceId":"8a80828f643d484f01643e14202e206f","sourceName":"Source1","approvalInfos":[{"name":"John Snow","id":"8a80828f643d484f01643e14202e2000","status":"Approved"}]}]},"eventType":"AccessRequested","identityId":"8a80828f643d484f01643e14202e206f","dt":"2019-03-08T22:37:33.901Z"}},"IdentityCertified":{"description":"An identity certified event","value":[{"certification":{"id":"2c91808a77ff216301782327a50f09bf","name":"Cert name","signedDate":"2019-03-08T22:37:33.901Z","certifiers":[{"id":"8a80828f643d484f01643e14202e206f","displayName":"John Snow"}],"reviewers":[{"id":"8a80828f643d484f01643e14202e206f","displayName":"Daenerys Targaryen"}],"signer":{"id":"8a80828f643d484f01643e14202e206f","displayName":"Tyrion Lannister"}},"eventType":"IdentityCertified","identityId":"8a80828f643d484f01643e14202e206f","dt":"2019-03-08T22:37:33.901Z"}]},"AccountStatusChanged":{"description":"An account status changed event","value":[{"account":{"id":"2c91808a77ff216301782327a50f09bf","nativeIdentity":127999,"displayName":"Sample Name","sourceId":"8a80828f643d484f01643e14202e206f","sourceName":"JDBC Entitlements Source","entitlementCount":0,"accessType":"account"},"statusChange":{"previousStatus":"ENABLED","newStatus":"DISABLED"},"eventType":"AccountStatusChanged","identityId":"8a80828f643d484f01643e14202e206f","dt":"2019-03-08T22:37:33.901Z"}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/historical-identities/{id}/events","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Lists all events for the given identity","description":{"content":"This method retrieves all access events for the identity Requires authorization scope of 'idn:identity-history:read' ","type":"text/plain"},"url":{"path":["historical-identities",":id","events"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The optional instant from which to return the access events","type":"text/plain"},"key":"from","value":""},{"disabled":false,"description":{"content":"An optional list of event types to return. If null or empty, all events are returned","type":"text/plain"},"key":"eventTypes","value":""},{"disabled":false,"description":{"content":"An optional list of access item types (app, account, entitlement, etc...) to return. If null or empty, all access items types are returned","type":"text/plain"},"key":"accessItemTypes","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The identity id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Lists all events for the given identity + + + +This method retrieves all access events for the identity Requires authorization scope of 'idn:identity-history:read' + +
    Path Parameters
    Query Parameters
    + +The list of events for the identity + +
    Schema array
    • anyOf
      accessItem object
    • oneOf
    • governanceEvent object
      owners object[]
      + +The owners of the governance event (the certifiers or approvers) + +
      reviewers object[]
      + +The owners of the governance event (the certifiers or approvers), this field should be preferred over owners + +
      decisionMaker object
      + +The decision maker + +
      accessItem object
    • oneOf
    • governanceEvent object
      owners object[]
      + +The owners of the governance event (the certifiers or approvers) + +
      reviewers object[]
      + +The owners of the governance event (the certifiers or approvers), this field should be preferred over owners + +
      decisionMaker object
      + +The decision maker + +
      changes object[]
      accessRequest object
      + +the access request details + +
      items object[]
      approvalInfos object[]
      certifiers object[]
      + +this field is deprecated and may go away + +
      reviewers object[]
      + +The list of identities who review this certification + +
      signer object
      + +Identity who signed off on the certification + +
      account object
      statusChange object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-excluded-entitlements-potential-role.api.mdx b/docs/sailpoint-api-beta/get-excluded-entitlements-potential-role.api.mdx new file mode 100644 index 000000000..a0933961e --- /dev/null +++ b/docs/sailpoint-api-beta/get-excluded-entitlements-potential-role.api.mdx @@ -0,0 +1,75 @@ +--- +id: get-excluded-entitlements-potential-role +sidebar_label: Retrieves excluded entitlements for a potential role in a role mining session +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getExcludedEntitlementsPotentialRole","tags":["IAI Role Mining"],"description":"This method returns excluded entitlements for a potential role in a role mining session.","parameters":[{"in":"path","name":"sessionId","schema":{"type":"string"},"required":true,"description":"The role mining session id","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"path","name":"potentialRoleId","schema":{"type":"string"},"required":true,"description":"A potential role id in a role mining session","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"query","name":"sorters","description":"sort by popularity, default order descending","required":false,"style":"form","explode":true,"schema":{"type":"string"}},{"in":"query","name":"filters","description":"Filter parameter by \"starts with\" for the applicationName and entitlementRef.name.","required":false,"style":"form","explode":true,"schema":{"type":"string"}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Succeeded. Returns a list of excluded entitlements for a potential roles.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"entitlementRef":{"description":"Details about the entitlement","type":"object","properties":{"id":{"type":"string","description":"Id of the entitlement"},"name":{"type":"string","description":"Name of the entitlement"},"description":{"type":"string","description":"Description forthe entitlement"}}},"name":{"type":"string","description":"Name of the entitlement"},"applicationName":{"type":"string","description":"Application name of the entitlement"},"identityCount":{"type":"integer","description":"The number of identities with this entitlement in a role.","example":45},"popularity":{"type":"integer","description":"The % popularity of this entitlement in a role.","example":65},"popularityInOrg":{"type":"integer","description":"TThe % popularity of this entitlement in the org.","example":35}},"example":{"entitlementRef":{"id":"2c9180877212632a017228d5a796292b","name":"entitlement.10","description":"Read access"},"name":"Administrator","applicationName":"Slack","identityCount":"8","popularity":"65","popularityInOrg":"35"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/excluded-entitlements","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Retrieves excluded entitlements for a potential role in a role mining session","description":{"content":"This method returns excluded entitlements for a potential role in a role mining session.","type":"text/plain"},"url":{"path":["role-mining-sessions",":sessionId","potential-roles",":potentialRoleId","excluded-entitlements"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"sort by popularity, default order descending","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"Filter parameter by \"starts with\" for the applicationName and entitlementRef.name.","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The role mining session id","type":"text/plain"},"type":"any","value":"","key":"sessionId"},{"disabled":false,"description":{"content":"(Required) A potential role id in a role mining session","type":"text/plain"},"type":"any","value":"","key":"potentialRoleId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Retrieves excluded entitlements for a potential role in a role mining session + + + +This method returns excluded entitlements for a potential role in a role mining session. + +
    Path Parameters
    Query Parameters
    + +Succeeded. Returns a list of excluded entitlements for a potential roles. + +
    Schema array
      entitlementRef object
      + +Details about the entitlement + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-identities-potential-role.api.mdx b/docs/sailpoint-api-beta/get-identities-potential-role.api.mdx new file mode 100644 index 000000000..d688a3ce5 --- /dev/null +++ b/docs/sailpoint-api-beta/get-identities-potential-role.api.mdx @@ -0,0 +1,71 @@ +--- +id: get-identities-potential-role +sidebar_label: Retrieves identities for a potential role in a role mining session +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getIdentitiesPotentialRole","tags":["IAI Role Mining"],"description":"This method returns identities for a potential role in a role mining session.","parameters":[{"in":"path","name":"sessionId","schema":{"type":"string"},"required":true,"description":"The role mining session id","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"path","name":"potentialRoleId","schema":{"type":"string"},"required":true,"description":"A potential role id in a role mining session","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"query","name":"sorters","description":"sort by name, default order ascending","required":false,"style":"form","explode":true,"schema":{"type":"string"}},{"in":"query","name":"filters","description":"Filter parameter by \"starts with\" for the name.","required":false,"style":"form","explode":true,"schema":{"type":"string"}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Succeeded. Returns a list of identities for a potential role.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Id of the identity"},"name":{"type":"string","description":"Name of the identity"},"attributes":{"type":"object","additionalProperties":{"type":"string"}}},"example":{"id":"2c9180877212632a017228d5934525e6","name":"Allene Abernathy-Welch","attributes":{"jobTitle":"SQL Developer","department":"IT","location":"NYC","firstName":"Allene"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/identities","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Retrieves identities for a potential role in a role mining session","description":{"content":"This method returns identities for a potential role in a role mining session.","type":"text/plain"},"url":{"path":["role-mining-sessions",":sessionId","potential-roles",":potentialRoleId","identities"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"sort by name, default order ascending","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"Filter parameter by \"starts with\" for the name.","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The role mining session id","type":"text/plain"},"type":"any","value":"","key":"sessionId"},{"disabled":false,"description":{"content":"(Required) A potential role id in a role mining session","type":"text/plain"},"type":"any","value":"","key":"potentialRoleId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Retrieves identities for a potential role in a role mining session + + + +This method returns identities for a potential role in a role mining session. + +
    Path Parameters
    Query Parameters
    + +Succeeded. Returns a list of identities for a potential role. + +
    Schema array
      attributes object
    • property name* string
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-identity-certification-item-permissions.api.mdx b/docs/sailpoint-api-beta/get-identity-certification-item-permissions.api.mdx new file mode 100644 index 000000000..f8261d9d7 --- /dev/null +++ b/docs/sailpoint-api-beta/get-identity-certification-item-permissions.api.mdx @@ -0,0 +1,87 @@ +--- +id: get-identity-certification-item-permissions +sidebar_label: Permissions for Entitlement Certification Item +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getIdentityCertificationItemPermissions","tags":["Certifications"],"description":"This API returns the permissions associated with an entitlement certification item based on the certification item's ID. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API.","parameters":[{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSupported fields and primitive operators:\n\n**target**: *eq, sw*\n\n**rights**: *ca*\n\nSupported composite operators:\n\n*and, or*\n\nAll field values (second filter operands) are case-insensitive for this API.\n\nOnly a single *and* or *or* composite filter operator may be used. It must also be used between a target filter and a rights filter, not between 2 filters for the same field.\nFor example,\n\nThe following is valid:\n*?filters=rights+ca+(%22CREATE%22)+and+target+eq+%22SYS.OBJAUTH2%22*\n\nThe following is invalid:\n*?filters=rights+ca+(%22CREATE%22)+and+rights+ca+(%SELECT%22)*"},{"in":"path","name":"certificationId","schema":{"type":"string"},"required":true,"description":"The certification ID","example":"ef38f94347e94562b5bb8424a56397d8"},{"in":"path","name":"itemId","schema":{"type":"string"},"required":true,"description":"The certification item ID","example":"2c91808671bcbab40171bd945d961227"},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"A list of permissions associated with the given itemId","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","description":"Simplified DTO for the Permission objects stored in SailPoint's database. The data is aggregated from customer systems and is free-form, so its appearance can vary largely between different clients/customers.","properties":{"rights":{"type":"array","description":"All the rights (e.g. actions) that this permission allows on the target","readOnly":true,"items":{"type":"string","example":"SELECT"}},"target":{"type":"string","description":"The target the permission would grants rights on.","readOnly":true,"example":"SYS.GV_$TRANSACTION"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/certifications/{certificationId}/access-review-items/{itemId}/permissions","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Permissions for Entitlement Certification Item","description":{"content":"This API returns the permissions associated with an entitlement certification item based on the certification item's ID. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API.","type":"text/plain"},"url":{"path":["certifications",":certificationId","access-review-items",":itemId","permissions"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSupported fields and primitive operators:\n\n**target**: *eq, sw*\n\n**rights**: *ca*\n\nSupported composite operators:\n\n*and, or*\n\nAll field values (second filter operands) are case-insensitive for this API.\n\nOnly a single *and* or *or* composite filter operator may be used. It must also be used between a target filter and a rights filter, not between 2 filters for the same field.\nFor example,\n\nThe following is valid:\n*?filters=rights+ca+(%22CREATE%22)+and+target+eq+%22SYS.OBJAUTH2%22*\n\nThe following is invalid:\n*?filters=rights+ca+(%22CREATE%22)+and+rights+ca+(%SELECT%22)*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The certification ID","type":"text/plain"},"type":"any","value":"","key":"certificationId"},{"disabled":false,"description":{"content":"(Required) The certification item ID","type":"text/plain"},"type":"any","value":"","key":"itemId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Permissions for Entitlement Certification Item + + + +This API returns the permissions associated with an entitlement certification item based on the certification item's ID. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. + +
    Path Parameters
    Query Parameters
    + +A list of permissions associated with the given itemId + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-identity-certification-pending-tasks.api.mdx b/docs/sailpoint-api-beta/get-identity-certification-pending-tasks.api.mdx new file mode 100644 index 000000000..1b280f163 --- /dev/null +++ b/docs/sailpoint-api-beta/get-identity-certification-pending-tasks.api.mdx @@ -0,0 +1,87 @@ +--- +id: get-identity-certification-pending-tasks +sidebar_label: Pending Certification Tasks +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getIdentityCertificationPendingTasks","tags":["Certifications"],"description":"This API returns the status of all pending (`QUEUED` or `IN_PROGRESS`) tasks for an identity campaign certification. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The identity campaign certification ID"}],"responses":{"200":{"description":"A list of pending (`QUEUED` or `IN_PROGRESS`) certification task objects.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The task id","example":"abcd-ef12-3456"},"certificationId":{"type":"string","description":"The certification id","example":"ef38f94347e94562b5bb8424a56397d8"},"type":{"type":"string","enum":["REASSIGN"]},"status":{"type":"string","enum":["QUEUED","IN_PROGRESS","SUCCESS","ERROR"]},"errors":{"type":"array","items":{"type":"string"},"description":"Any errors executing the task (Optional).","example":[]}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/certifications/{id}/tasks-pending","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Pending Certification Tasks","description":{"content":"This API returns the status of all pending (`QUEUED` or `IN_PROGRESS`) tasks for an identity campaign certification. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API.","type":"text/plain"},"url":{"path":["certifications",":id","tasks-pending"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The identity campaign certification ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Pending Certification Tasks + + + +This API returns the status of all pending (`QUEUED` or `IN_PROGRESS`) tasks for an identity campaign certification. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. + +
    Path Parameters
    + +A list of pending (`QUEUED` or `IN_PROGRESS`) certification task objects. + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-identity-certification-task-status.api.mdx b/docs/sailpoint-api-beta/get-identity-certification-task-status.api.mdx new file mode 100644 index 000000000..e2b0ee9d1 --- /dev/null +++ b/docs/sailpoint-api-beta/get-identity-certification-task-status.api.mdx @@ -0,0 +1,87 @@ +--- +id: get-identity-certification-task-status +sidebar_label: Certification Task Status +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getIdentityCertificationTaskStatus","tags":["Certifications"],"description":"This API returns the status of a certification task. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The identity campaign certification ID"},{"in":"path","name":"taskId","schema":{"type":"string"},"required":true,"description":"The certification task ID"}],"responses":{"200":{"description":"A certification task object.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The task id","example":"abcd-ef12-3456"},"certificationId":{"type":"string","description":"The certification id","example":"ef38f94347e94562b5bb8424a56397d8"},"type":{"type":"string","enum":["REASSIGN"]},"status":{"type":"string","enum":["QUEUED","IN_PROGRESS","SUCCESS","ERROR"]},"errors":{"type":"array","items":{"type":"string"},"description":"Any errors executing the task (Optional).","example":[]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/certifications/{id}/tasks/{taskId}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Certification Task Status","description":{"content":"This API returns the status of a certification task. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API.","type":"text/plain"},"url":{"path":["certifications",":id","tasks",":taskId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The identity campaign certification ID","type":"text/plain"},"type":"any","value":"","key":"id"},{"disabled":false,"description":{"content":"(Required) The certification task ID","type":"text/plain"},"type":"any","value":"","key":"taskId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Certification Task Status + + + +This API returns the status of a certification task. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. + +
    Path Parameters
    + +A certification task object. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-identity-profile.api.mdx b/docs/sailpoint-api-beta/get-identity-profile.api.mdx new file mode 100644 index 000000000..965b6cf12 --- /dev/null +++ b/docs/sailpoint-api-beta/get-identity-profile.api.mdx @@ -0,0 +1,104 @@ +--- +id: get-identity-profile +sidebar_label: Gets a single Identity Profile +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getIdentityProfile","tags":["Identity Profiles"],"description":"This returns a single Identity Profile based on ID.\nA token with ORG_ADMIN or API authority is required to call this API.","parameters":[{"in":"path","name":"identity-profile-id","schema":{"type":"string","format":"uuid"},"required":true,"description":"The Identity Profile ID","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"An Identity Profile object","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","format":"date-time","readOnly":true,"example":true},"modified":{"description":"Last modification date of the Object","type":"string","format":"date-time","readOnly":true,"example":true}}},{"type":"object","properties":{"description":{"type":"string","description":"The description of the Identity Profile.","example":"My custom flat file profile"},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The owner of the Identity Profile."},"priority":{"type":"integer","format":"int64","description":"The priority for an Identity Profile.","example":10},"authoritativeSource":{"type":"object","properties":{"type":{"type":"string","enum":["SOURCE"],"description":"Type of the object to which this reference applies","example":"SOURCE"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c9180835d191a86015d28455b4b232a"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"HR Active Directory"}},"description":"The authoritative source for this Identity Profile."},"identityRefreshRequired":{"type":"boolean","description":"True if a identity refresh is needed. Typically triggered when a change on the source has been made","example":true},"identityCount":{"type":"integer","description":"The number of identities that belong to the Identity Profile.","format":"int32","example":8},"identityAttributeConfig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"If the profile or mapping is enabled","example":true},"attributeTransforms":{"type":"array","items":{"type":"object","properties":{"identityAttributeName":{"type":"string","description":"Name of the identity attribute","example":"email"},"transformDefinition":{"description":"The seaspray transformation definition","type":"object","properties":{"type":{"type":"string","description":"The type of the transform definition.","example":"accountAttribute"},"attributes":{"type":"object","additionalProperties":{"type":"object"},"description":"Arbitrary key-value pairs to store any metadata for the object","example":{"attributeName":"e-mail","sourceName":"MySource","sourceId":"2c9180877a826e68017a8c0b03da1a53"}}}}}}}}},"identityExceptionReportReference":{"type":"object","properties":{"taskResultId":{"type":"string","format":"uuid","description":"The id of the task result","example":"2c918086795cd09201795d5f7d7533df"},"reportName":{"type":"string","example":"My annual report","description":"The name of the report"}}},"hasTimeBasedAttr":{"description":"Indicates the value of requiresPeriodicRefresh attribute for the Identity Profile.","type":"boolean","example":true}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:identity-profile:read"]}],"method":"get","path":"/identity-profiles/{identity-profile-id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Gets a single Identity Profile","description":{"content":"This returns a single Identity Profile based on ID.\nA token with ORG_ADMIN or API authority is required to call this API.","type":"text/plain"},"url":{"path":["identity-profiles",":identity-profile-id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Identity Profile ID","type":"text/plain"},"type":"any","value":"","key":"identity-profile-id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Gets a single Identity Profile + + + +This returns a single Identity Profile based on ID. +A token with ORG_ADMIN or API authority is required to call this API. + +
    Path Parameters
    + +An Identity Profile object + +
    Schema
      owner object
      + +The owner of the Identity Profile. + +
      authoritativeSource object
      + +The authoritative source for this Identity Profile. + +
      identityAttributeConfig object
      attributeTransforms object[]
      transformDefinition object
      + +The seaspray transformation definition + +
      attributes object
      + +Arbitrary key-value pairs to store any metadata for the object + +
    • property name* object
    • identityExceptionReportReference object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-identity-snapshot-summary.api.mdx b/docs/sailpoint-api-beta/get-identity-snapshot-summary.api.mdx new file mode 100644 index 000000000..28f139be8 --- /dev/null +++ b/docs/sailpoint-api-beta/get-identity-snapshot-summary.api.mdx @@ -0,0 +1,83 @@ +--- +id: get-identity-snapshot-summary +sidebar_label: Gets the summary for the event count for a specific identity +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getIdentitySnapshotSummary","tags":["Identity History"],"description":"This method gets the summary for the event count for a specific identity by month/day Requires authorization scope of 'idn:identity-history:read' ","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The identity id","example":"8c190e6787aa4ed9a90bd9d5344523fb"},{"in":"query","name":"before","schema":{"type":"string"},"description":"The date before which snapshot summary is required","example":"2007-03-01T13:00:00Z"},{"in":"query","name":"interval","schema":{"type":"string","enum":["day","month"]},"description":"The interval indicating day or month. Defaults to month if not specified"},{"in":"query","name":"time-zone","schema":{"type":"string"},"description":"The time zone. Defaults to UTC if not provided","example":"UTC"},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"A summary list of identity changes in date histogram format.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"the name of metric"},"value":{"type":"number","description":"the value associated to the metric"}},"example":{"name":"2021-04-01T00:00:00.000Z","value":2}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/historical-identities/{id}/snapshot-summary","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Gets the summary for the event count for a specific identity","description":{"content":"This method gets the summary for the event count for a specific identity by month/day Requires authorization scope of 'idn:identity-history:read' ","type":"text/plain"},"url":{"path":["historical-identities",":id","snapshot-summary"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The date before which snapshot summary is required","type":"text/plain"},"key":"before","value":""},{"disabled":false,"description":{"content":"The interval indicating day or month. Defaults to month if not specified","type":"text/plain"},"key":"interval","value":""},{"disabled":false,"description":{"content":"The time zone. Defaults to UTC if not provided","type":"text/plain"},"key":"time-zone","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The identity id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Gets the summary for the event count for a specific identity + + + +This method gets the summary for the event count for a specific identity by month/day Requires authorization scope of 'idn:identity-history:read' + +
    Path Parameters
    Query Parameters
    + +A summary list of identity changes in date histogram format. + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-identity-snapshot.api.mdx b/docs/sailpoint-api-beta/get-identity-snapshot.api.mdx new file mode 100644 index 000000000..8201196bc --- /dev/null +++ b/docs/sailpoint-api-beta/get-identity-snapshot.api.mdx @@ -0,0 +1,91 @@ +--- +id: get-identity-snapshot +sidebar_label: Gets an identity snapshot at a given date +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getIdentitySnapshot","tags":["Identity History"],"description":"This method retrieves a specified identity snapshot at a given date Requires authorization scope of 'idn:identity-history:read' ","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The identity id","example":"8c190e6787aa4ed9a90bd9d5344523fb"},{"in":"path","name":"date","schema":{"type":"string"},"description":"The specified date","example":"2007-03-01T13:00:00Z","required":true}],"responses":{"200":{"description":"The identity object.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"the identity ID","example":"bc693f07e7b645539626c25954c58554"},"displayName":{"type":"string","description":"the display name of the identity","example":"Adam Zampa"},"snapshot":{"type":"string","description":"the date when the identity record was created","example":"2007-03-01T13:00:00.000Z"},"deletedDate":{"type":"string","description":"the date when the identity was deleted","example":"2007-03-01T13:00:00.000Z"},"accessItemCount":{"type":"object","description":"A map containing the count of each access item","additionalProperties":{"type":"string"}},"attributes":{"type":"object","description":"A map containing the identity attributes","additionalProperties":{"type":"string"}}},"example":{"id":"2c9079b270a266a60170a2779fcb0007","displayName":"Lahoma Wuckert","deletedDate":null,"snapshot":"2007-03-01T13:00:00.000Z","attributes":{"jobTitle":"HR Manager","location":"NYC","firstname":"Lahoma","lastname":"Wuckert","department":"HR"},"accessItemCount":{"role":2,"accessProfile":2,"entitlement":28,"account":3}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/historical-identities/{id}/snapshots/{date}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Gets an identity snapshot at a given date","description":{"content":"This method retrieves a specified identity snapshot at a given date Requires authorization scope of 'idn:identity-history:read' ","type":"text/plain"},"url":{"path":["historical-identities",":id","snapshots",":date"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The identity id","type":"text/plain"},"type":"any","value":"","key":"id"},{"disabled":false,"description":{"content":"(Required) The specified date","type":"text/plain"},"type":"any","value":"","key":"date"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Gets an identity snapshot at a given date + + + +This method retrieves a specified identity snapshot at a given date Requires authorization scope of 'idn:identity-history:read' + +
    Path Parameters
    + +The identity object. + +
    Schema
      accessItemCount object
      + +A map containing the count of each access item + +
    • property name* string
    • attributes object
      + +A map containing the identity attributes + +
    • property name* string
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-identity.api.mdx b/docs/sailpoint-api-beta/get-identity.api.mdx new file mode 100644 index 000000000..77c59d0f7 --- /dev/null +++ b/docs/sailpoint-api-beta/get-identity.api.mdx @@ -0,0 +1,79 @@ +--- +id: get-identity +sidebar_label: Gets the most recent snapshot of a specific identity +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getIdentity","tags":["Identity History"],"description":"This method retrieves a specified identity Requires authorization scope of 'idn:identity-history:read' ","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The identity id","example":"8c190e6787aa4ed9a90bd9d5344523fb"}],"responses":{"200":{"description":"The identity object.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"the identity ID","example":"bc693f07e7b645539626c25954c58554"},"displayName":{"type":"string","description":"the display name of the identity","example":"Adam Zampa"},"snapshot":{"type":"string","description":"the date when the identity record was created","example":"2007-03-01T13:00:00.000Z"},"deletedDate":{"type":"string","description":"the date when the identity was deleted","example":"2007-03-01T13:00:00.000Z"},"accessItemCount":{"type":"object","description":"A map containing the count of each access item","additionalProperties":{"type":"string"}},"attributes":{"type":"object","description":"A map containing the identity attributes","additionalProperties":{"type":"string"}}},"example":{"id":"2c9079b270a266a60170a2779fcb0007","displayName":"Lahoma Wuckert","deletedDate":null,"snapshot":"2007-03-01T13:00:00.000Z","attributes":{"jobTitle":"HR Manager","location":"NYC","firstname":"Lahoma","lastname":"Wuckert","department":"HR"},"accessItemCount":{"role":2,"accessProfile":2,"entitlement":28,"account":3}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/historical-identities/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Gets the most recent snapshot of a specific identity","description":{"content":"This method retrieves a specified identity Requires authorization scope of 'idn:identity-history:read' ","type":"text/plain"},"url":{"path":["historical-identities",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The identity id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Gets the most recent snapshot of a specific identity + + + +This method retrieves a specified identity Requires authorization scope of 'idn:identity-history:read' + +
    Path Parameters
    + +The identity object. + +
    Schema
      accessItemCount object
      + +A map containing the count of each access item + +
    • property name* string
    • attributes object
      + +A map containing the identity attributes + +
    • property name* string
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-latest-outlier-snapshots.api.mdx b/docs/sailpoint-api-beta/get-latest-outlier-snapshots.api.mdx new file mode 100644 index 000000000..2cf1e1c77 --- /dev/null +++ b/docs/sailpoint-api-beta/get-latest-outlier-snapshots.api.mdx @@ -0,0 +1,80 @@ +--- +id: get-latest-outlier-snapshots +sidebar_label: IAI Identity Outliers Latest Summary +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getLatestOutlierSnapshots","tags":["IAI Outliers"],"description":"This API returns a most recent snapshot of each outlier type, each containing: the number of identities that customer has, the number of outliers, and the type of outlier\nRequires authorization scope of 'iai:outliers-management:read'","parameters":[{"name":"type","in":"query","description":"Type of the identity outliers snapshot to filter on","required":false,"schema":{"type":"string","enum":["LOW_SIMILARITY","STRUCTURAL"]}}],"responses":{"200":{"description":"Succeeded. Returns list of objects. Each object is a summary to give high level statistics/counts of outliers","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["LOW_SIMILARITY","STRUCTURAL"],"description":"The type of outlier summary","example":"LOW_SIMILARITY"},"snapshotDate":{"type":"string","format":"date-time","description":"The date the bulk outlier detection ran/snapshot was created","example":"2021-05-01T18:40:35.772Z"},"totalOutliers":{"type":"integer","description":"Total number of outliers for the customer making the request","example":50},"totalIdentities":{"type":"integer","description":"Total number of identities for the customer making the request","example":5000},"totalIgnored":{"type":"integer","description":"Total number of ignored outliers","example":10}}}}}}},"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/outlier-summaries/latest","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"IAI Identity Outliers Latest Summary","description":{"content":"This API returns a most recent snapshot of each outlier type, each containing: the number of identities that customer has, the number of outliers, and the type of outlier\nRequires authorization scope of 'iai:outliers-management:read'","type":"text/plain"},"url":{"path":["outlier-summaries","latest"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Type of the identity outliers snapshot to filter on","type":"text/plain"},"key":"type","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## IAI Identity Outliers Latest Summary + + + +This API returns a most recent snapshot of each outlier type, each containing: the number of identities that customer has, the number of outliers, and the type of outlier +Requires authorization scope of 'iai:outliers-management:read' + +
    Query Parameters
    + +Succeeded. Returns list of objects. Each object is a summary to give high level statistics/counts of outliers + +
    Schema array
    + +Accepted - Returned if the request was successfully accepted into the system. + +
    Schema
    • object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-managed-cluster.api.mdx b/docs/sailpoint-api-beta/get-managed-cluster.api.mdx new file mode 100644 index 000000000..e7efb444d --- /dev/null +++ b/docs/sailpoint-api-beta/get-managed-cluster.api.mdx @@ -0,0 +1,99 @@ +--- +id: get-managed-cluster +sidebar_label: Get a specified ManagedCluster. +hide_title: true +hide_table_of_contents: true +api: {"tags":["Managed Clusters"],"description":"Retrieve a ManagedCluster by ID.","operationId":"getManagedCluster","parameters":[{"name":"id","in":"path","description":"ID of the ManagedCluster to get","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"aClusterId"}}],"responses":{"200":{"description":"Responds with ManagedCluster having the given ID.","content":{"application/json":{"schema":{"description":"Managed Cluster","type":"object","required":["id","clientType","ccgVersion"],"properties":{"id":{"description":"ManagedCluster ID","type":"string","example":"aClusterId"},"name":{"description":"ManagedCluster name","type":"string","example":"Managed Cluster Name"},"pod":{"description":"ManagedCluster pod","type":"string","example":"megapod-useast1"},"org":{"description":"ManagedCluster org","type":"string","example":"denali"},"type":{"description":"The Type of Cluster","example":"idn","nullable":false,"type":"string","enum":["idn","iai"]},"configuration":{"description":"ManagedProcess configuration map","type":"object","additionalProperties":{"type":"string"},"example":{"clusterExternalId":"externalId","ccgVersion":"77.0.0"}},"keyPair":{"description":"key pair for the ManagedCluster","type":"object","properties":{"publicKey":{"description":"ManagedCluster publicKey","type":"string","example":"-----BEGIN PUBLIC KEY-----******-----END PUBLIC KEY-----"},"publicKeyThumbprint":{"description":"ManagedCluster publicKeyThumbprint","type":"string","example":"6CMlaJIV44-xJxcB3CJBjDUUn54"},"publicKeyCertificate":{"description":"ManagedCluster publicKeyCertificate","type":"string","example":"-----BEGIN CERTIFICATE-----****-----END CERTIFICATE-----"}}},"attributes":{"description":"Specific Attributes for Configuring a ManagedCluster by Type","type":"object","properties":{"queue":{"description":"ManagedCluster keystore for sqsCluster type","type":"object","properties":{"name":{"description":"ManagedCluster queue name","type":"string","example":"megapod-useast1-denali-lwt-cluster-1533"},"region":{"description":"ManagedCluster queue aws region","type":"string","example":"us-east-1"}}},"keystore":{"description":"ManagedCluster keystore for spConnectCluster type","type":"string","example":"/u3+7QAAAAIAAAABAAAAAQAvL3Byb3h5LWNsdXN0ZXIvMmM5MTgwODc3Yjg3MW"}}},"description":{"description":"ManagedCluster description","type":"string","example":"A short description of the managed cluster."},"redis":{"description":"Redis configuration for the ManagedCluster","type":"object","properties":{"redisHost":{"description":"ManagedCluster redisHost","type":"string","example":"megapod-useast1-shared-redis.cloud.sailpoint.com"},"redisPort":{"description":"ManagedCluster redisPort","type":"integer","format":"int32","example":6379}}},"clientType":{"description":"type of client for the ManagedCluster","type":"string","example":"CCG","enum":["CCG","VA","INTERNAL"]},"ccgVersion":{"description":"CCG version used by the ManagedCluster","type":"string","example":"v01"},"pinnedConfig":{"description":"boolean flag indiacting whether or not the cluster configuration is pinned","type":"boolean","default":false,"example":false},"logConfiguration":{"description":"client log configuration for the cluster","example":"{ \"rootLevel\": \"WARN\", \"logLevels\": { \"foobar\": \"WARN\" } }","type":"object","required":["durationMinutes","rootLevel"],"properties":{"clientId":{"description":"client ID of the Log configuration","type":"string","example":"aClientId"},"durationMinutes":{"description":"duration in minutes for the log configuration to remain in effect before resetting to defaults","type":"integer","format":"int32","example":120,"default":240,"minimum":5,"maximum":1440},"expiration":{"description":"Expiration date-time of the log configuration request","example":120,"type":"string","format":"date-time"},"rootLevel":{"description":"Root Log level to apply","default":"INFO","example":"TRACE","type":"string","enum":["OFF","FATAL","ERROR","WARN","INFO","DEBUG","TRACE"]},"logLevels":{"description":"Map of LogLevel by key","example":"{ level:WARN }","type":"object","additionalProperties":{"default":"INFO","example":"TRACE","description":"Standard Log4j log level","type":"string","enum":["OFF","FATAL","ERROR","WARN","INFO","DEBUG","TRACE"]}}}},"operational":{"description":"Whether or not the cluster is operational or not","type":"boolean","default":false,"example":false},"status":{"description":"Cluster status","type":"string","example":"NORMAL"},"publicKeyCertificate":{"description":"Public key certificate","type":"string","example":"-----BEGIN CERTIFICATE-----TCCAb2gAwIBAgIBADANBgkqhkiG9w0BAQsFADAuMQ0wCwYDVQQD-----END CERTIFICATE-----"},"publicKeyThumbprint":{"description":"Public key thumbprint","type":"string","example":"obc6pLiulGbtZ"},"publicKey":{"description":"Public key","type":"string","example":"-----BEGIN PUBLIC KEY-----jANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3WgnsxP52MDgBTfHR+5n4-----END PUBLIC KEY-----"},"alertKey":{"description":"Key describing any immediate cluster alerts","type":"string","example":"LIMITED_RESOURCES"},"clientIds":{"type":"array","description":"List of clients in a cluster","items":{"type":"string"},"example":["1244","1245"]},"serviceCount":{"description":"Number of services bound to a cluster","type":"integer","format":"int32","default":0,"example":6},"ccId":{"description":"CC ID only used in calling CC, will be removed without notice when Migration to CEGS is finished","type":"string","default":"0","example":"1533"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"security":[{"bearerAuth":["idn:managed-cluster:read"]}],"method":"get","path":"/managed-clusters/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get a specified ManagedCluster.","description":{"content":"Retrieve a ManagedCluster by ID.","type":"text/plain"},"url":{"path":["managed-clusters",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the ManagedCluster to get","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a specified ManagedCluster. + + + +Retrieve a ManagedCluster by ID. + +
    Path Parameters
    + +Responds with ManagedCluster having the given ID. + +
    Schema
      configuration object
      + +ManagedProcess configuration map + +
    • property name* string
    • keyPair object
      + +key pair for the ManagedCluster + +
      attributes object
      + +Specific Attributes for Configuring a ManagedCluster by Type + +
      queue object
      + +ManagedCluster keystore for sqsCluster type + +
      redis object
      + +Redis configuration for the ManagedCluster + +
      logConfiguration object
      + +client log configuration for the cluster + +
      = 5` and `<= 1440`"} defaultValue={240}>
      logLevels object
      + +Map of LogLevel by key + +
    • property name* string
      + +**Possible values:** [`OFF`, `FATAL`, `ERROR`, `WARN`, `INFO`, `DEBUG`, `TRACE`] + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-managed-clusters.api.mdx b/docs/sailpoint-api-beta/get-managed-clusters.api.mdx new file mode 100644 index 000000000..135c89143 --- /dev/null +++ b/docs/sailpoint-api-beta/get-managed-clusters.api.mdx @@ -0,0 +1,107 @@ +--- +id: get-managed-clusters +sidebar_label: Retrieve all Managed Clusters. +hide_title: true +hide_table_of_contents: true +api: {"tags":["Managed Clusters"],"description":"Retrieve all Managed Clusters for the current Org, based on request context.","operationId":"getManagedClusters","parameters":[{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filtering is supported for the following fields and operators:\n\n**operational**: *eq*"}],"responses":{"200":{"description":"Responds with a list of ManagedCluster.","content":{"application/json":{"schema":{"type":"array","items":{"description":"Managed Cluster","type":"object","required":["id","clientType","ccgVersion"],"properties":{"id":{"description":"ManagedCluster ID","type":"string","example":"aClusterId"},"name":{"description":"ManagedCluster name","type":"string","example":"Managed Cluster Name"},"pod":{"description":"ManagedCluster pod","type":"string","example":"megapod-useast1"},"org":{"description":"ManagedCluster org","type":"string","example":"denali"},"type":{"description":"The Type of Cluster","example":"idn","nullable":false,"type":"string","enum":["idn","iai"]},"configuration":{"description":"ManagedProcess configuration map","type":"object","additionalProperties":{"type":"string"},"example":{"clusterExternalId":"externalId","ccgVersion":"77.0.0"}},"keyPair":{"description":"key pair for the ManagedCluster","type":"object","properties":{"publicKey":{"description":"ManagedCluster publicKey","type":"string","example":"-----BEGIN PUBLIC KEY-----******-----END PUBLIC KEY-----"},"publicKeyThumbprint":{"description":"ManagedCluster publicKeyThumbprint","type":"string","example":"6CMlaJIV44-xJxcB3CJBjDUUn54"},"publicKeyCertificate":{"description":"ManagedCluster publicKeyCertificate","type":"string","example":"-----BEGIN CERTIFICATE-----****-----END CERTIFICATE-----"}}},"attributes":{"description":"Specific Attributes for Configuring a ManagedCluster by Type","type":"object","properties":{"queue":{"description":"ManagedCluster keystore for sqsCluster type","type":"object","properties":{"name":{"description":"ManagedCluster queue name","type":"string","example":"megapod-useast1-denali-lwt-cluster-1533"},"region":{"description":"ManagedCluster queue aws region","type":"string","example":"us-east-1"}}},"keystore":{"description":"ManagedCluster keystore for spConnectCluster type","type":"string","example":"/u3+7QAAAAIAAAABAAAAAQAvL3Byb3h5LWNsdXN0ZXIvMmM5MTgwODc3Yjg3MW"}}},"description":{"description":"ManagedCluster description","type":"string","example":"A short description of the managed cluster."},"redis":{"description":"Redis configuration for the ManagedCluster","type":"object","properties":{"redisHost":{"description":"ManagedCluster redisHost","type":"string","example":"megapod-useast1-shared-redis.cloud.sailpoint.com"},"redisPort":{"description":"ManagedCluster redisPort","type":"integer","format":"int32","example":6379}}},"clientType":{"description":"type of client for the ManagedCluster","type":"string","example":"CCG","enum":["CCG","VA","INTERNAL"]},"ccgVersion":{"description":"CCG version used by the ManagedCluster","type":"string","example":"v01"},"pinnedConfig":{"description":"boolean flag indiacting whether or not the cluster configuration is pinned","type":"boolean","default":false,"example":false},"logConfiguration":{"description":"client log configuration for the cluster","example":"{ \"rootLevel\": \"WARN\", \"logLevels\": { \"foobar\": \"WARN\" } }","type":"object","required":["durationMinutes","rootLevel"],"properties":{"clientId":{"description":"client ID of the Log configuration","type":"string","example":"aClientId"},"durationMinutes":{"description":"duration in minutes for the log configuration to remain in effect before resetting to defaults","type":"integer","format":"int32","example":120,"default":240,"minimum":5,"maximum":1440},"expiration":{"description":"Expiration date-time of the log configuration request","example":120,"type":"string","format":"date-time"},"rootLevel":{"description":"Root Log level to apply","default":"INFO","example":"TRACE","type":"string","enum":["OFF","FATAL","ERROR","WARN","INFO","DEBUG","TRACE"]},"logLevels":{"description":"Map of LogLevel by key","example":"{ level:WARN }","type":"object","additionalProperties":{"default":"INFO","example":"TRACE","description":"Standard Log4j log level","type":"string","enum":["OFF","FATAL","ERROR","WARN","INFO","DEBUG","TRACE"]}}}},"operational":{"description":"Whether or not the cluster is operational or not","type":"boolean","default":false,"example":false},"status":{"description":"Cluster status","type":"string","example":"NORMAL"},"publicKeyCertificate":{"description":"Public key certificate","type":"string","example":"-----BEGIN CERTIFICATE-----TCCAb2gAwIBAgIBADANBgkqhkiG9w0BAQsFADAuMQ0wCwYDVQQD-----END CERTIFICATE-----"},"publicKeyThumbprint":{"description":"Public key thumbprint","type":"string","example":"obc6pLiulGbtZ"},"publicKey":{"description":"Public key","type":"string","example":"-----BEGIN PUBLIC KEY-----jANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3WgnsxP52MDgBTfHR+5n4-----END PUBLIC KEY-----"},"alertKey":{"description":"Key describing any immediate cluster alerts","type":"string","example":"LIMITED_RESOURCES"},"clientIds":{"type":"array","description":"List of clients in a cluster","items":{"type":"string"},"example":["1244","1245"]},"serviceCount":{"description":"Number of services bound to a cluster","type":"integer","format":"int32","default":0,"example":6},"ccId":{"description":"CC ID only used in calling CC, will be removed without notice when Migration to CEGS is finished","type":"string","default":"0","example":"1533"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:managed-cluster:read"]}],"method":"get","path":"/managed-clusters","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Retrieve all Managed Clusters.","description":{"content":"Retrieve all Managed Clusters for the current Org, based on request context.","type":"text/plain"},"url":{"path":["managed-clusters"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filtering is supported for the following fields and operators:\n\n**operational**: *eq*","type":"text/plain"},"key":"filters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Retrieve all Managed Clusters. + + + +Retrieve all Managed Clusters for the current Org, based on request context. + +
    Query Parameters
    + +Responds with a list of ManagedCluster. + +
    Schema array
      configuration object
      + +ManagedProcess configuration map + +
    • property name* string
    • keyPair object
      + +key pair for the ManagedCluster + +
      attributes object
      + +Specific Attributes for Configuring a ManagedCluster by Type + +
      queue object
      + +ManagedCluster keystore for sqsCluster type + +
      redis object
      + +Redis configuration for the ManagedCluster + +
      logConfiguration object
      + +client log configuration for the cluster + +
      = 5` and `<= 1440`"} defaultValue={240}>
      logLevels object
      + +Map of LogLevel by key + +
    • property name* string
      + +**Possible values:** [`OFF`, `FATAL`, `ERROR`, `WARN`, `INFO`, `DEBUG`, `TRACE`] + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-message-catalogs.api.mdx b/docs/sailpoint-api-beta/get-message-catalogs.api.mdx new file mode 100644 index 000000000..9122dfa16 --- /dev/null +++ b/docs/sailpoint-api-beta/get-message-catalogs.api.mdx @@ -0,0 +1,79 @@ +--- +id: get-message-catalogs +sidebar_label: Get Message catalogs +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getMessageCatalogs","tags":["IAI Recommendations","IAI Access Request Recommendations"],"description":"The getMessageCatalogs API returns message catalog based on the language headers in the requested object.","parameters":[{"in":"path","name":"catalog-id","schema":{"type":"string","enum":["recommender","access-request-recommender"]},"required":true,"description":"The ID of the message catalog."}],"responses":{"200":{"description":"The message catalogs based on the request headers","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"locale":{"type":"string","description":"The language in which the messages are returned","example":"en_US"},"messages":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The key of the message","example":"recommender-api.V2_WEIGHT_FEATURE_PRODUCT_INTERPRETATION_LOW"},"format":{"type":"string","description":"The format of the message","example":"{0,,\\\"i18n hint: percentage\\\"}% of identities with the same {1,,\\\"i18n hint: name of category feature\\\"} have this access. This information had a low impact on the overall score."}}},"description":"The list of message with their keys and formats"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":[]}],"method":"get","path":"/translation-catalogs/{catalog-id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Message catalogs","description":{"content":"The getMessageCatalogs API returns message catalog based on the language headers in the requested object.","type":"text/plain"},"url":{"path":["translation-catalogs",":catalog-id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the message catalog.","type":"text/plain"},"type":"any","value":"","key":"catalog-id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Message catalogs + + + +The getMessageCatalogs API returns message catalog based on the language headers in the requested object. + +
    Path Parameters
    + +The message catalogs based on the request headers + +
    Schema array
      messages object[]
      + +The list of message with their keys and formats + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-mfa-config.api.mdx b/docs/sailpoint-api-beta/get-mfa-config.api.mdx new file mode 100644 index 000000000..470e194a6 --- /dev/null +++ b/docs/sailpoint-api-beta/get-mfa-config.api.mdx @@ -0,0 +1,75 @@ +--- +id: get-mfa-config +sidebar_label: Get configuration of a MFA method +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getMFAConfig","tags":["MFA Configuration"],"description":"This API returns the configuration of a given MFA method.
    A token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:mfa-config:read"]}],"parameters":[{"in":"path","name":"method","schema":{"type":"string","example":"okta-verify"},"required":true,"description":"The name of the MFA method.
    The currently supported method name is okta-verify."}],"responses":{"200":{"description":"MFA configuration of a given method.","content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean","description":"If MFA method is enabled."},"host":{"type":"string","description":"The server host name or IP address of the MFA provider.","example":"example.com"},"accessKey":{"type":"string","description":"The secret key for authenticating requests to the MFA provider."},"identityAttribute":{"type":"string","description":"Optional. The name of the attribute for mapping IdentityNow identity to the MFA provider.","example":"email"}}},"example":{"enabled":true,"host":"www.example.com","accessKey":"dk778Y3QlA5UqocYpdU3rEkzrK2D497y","identityAttribute":"email"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/mfa/{method}/config","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get configuration of a MFA method","description":{"content":"This API returns the configuration of a given MFA method.
    A token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["mfa",":method","config"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The name of the MFA method.
    The currently supported method name is okta-verify.","type":"text/plain"},"type":"any","value":"","key":"method"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get configuration of a MFA method + + + +This API returns the configuration of a given MFA method. </br> A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
      The currently supported method name is okta-verify."}}>
    + +MFA configuration of a given method. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-notification-preference.api.mdx b/docs/sailpoint-api-beta/get-notification-preference.api.mdx new file mode 100644 index 000000000..edb16cb0d --- /dev/null +++ b/docs/sailpoint-api-beta/get-notification-preference.api.mdx @@ -0,0 +1,76 @@ +--- +id: get-notification-preference +sidebar_label: Get Notification Preferences for tenant. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getNotificationPreference","tags":["Notifications"],"description":"Returns the notification preferences for tenant. Note that if the key doesn't exist, then a 404 will be returned.\nRequest will require the following legacy roles: ORG_ADMIN and API","parameters":[{"in":"path","name":"key","required":true,"schema":{"type":"string"},"description":"The notification key."}],"responses":{"200":{"description":"Return preference for the given notification key.","content":{"application/json":{"schema":{"type":"object","description":"Maps an Identity's attribute key to a list of preferred notification mediums.","properties":{"key":{"type":"string","description":"The template notification key.","example":"cloud_manual_work_item_summary"},"mediums":{"type":"array","description":"List of preferred notification mediums, i.e., the mediums (or method) for which notifications are enabled. More mediums may be added in the future.","items":{"type":"string","enum":["EMAIL","SMS","PHONE","SLACK","TEAMS"]},"example":["EMAIL"]},"modified":{"type":"string","description":"Modified date of preference","format":"date-time","example":"2020-05-15T14:37:06.909Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}}},"method":"get","path":"/notification-preferences/{key}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Notification Preferences for tenant.","description":{"content":"Returns the notification preferences for tenant. Note that if the key doesn't exist, then a 404 will be returned.\nRequest will require the following legacy roles: ORG_ADMIN and API","type":"text/plain"},"url":{"path":["notification-preferences",":key"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The notification key.","type":"text/plain"},"type":"any","value":"","key":"key"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Notification Preferences for tenant. + + + +Returns the notification preferences for tenant. Note that if the key doesn't exist, then a 404 will be returned. +Request will require the following legacy roles: ORG_ADMIN and API + +
    Path Parameters
    + +Return preference for the given notification key. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-notification-template.api.mdx b/docs/sailpoint-api-beta/get-notification-template.api.mdx new file mode 100644 index 000000000..d4b04ae1b --- /dev/null +++ b/docs/sailpoint-api-beta/get-notification-template.api.mdx @@ -0,0 +1,75 @@ +--- +id: get-notification-template +sidebar_label: Get Notification Template By Id +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getNotificationTemplate","tags":["Notifications"],"description":"This gets a template that you have modified for your site by Id.","parameters":[{"name":"id","in":"path","description":"Id of the Notification Template","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"c17bea3a-574d-453c-9e04-4365fbf5af0b"}}],"responses":{"200":{"description":"A template object for your site","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","example":"cloud_manual_work_item_summary"},"name":{"type":"string","example":"Task Manager Subscription"},"medium":{"type":"string","description":"The message medium. More mediums may be added in the future.","enum":["EMAIL","PHONE","SMS","SLACK","TEAMS"],"example":"EMAIL"},"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en"},"subject":{"type":"string","example":"You have $numberOfPendingTasks $taskTasks to complete in ${__global.productName}."},"header":{"type":"string","example":"Dear $__recipient.name,
    "},"body":{"type":"string","example":"Please go to the task manager"},"footer":{"type":"string","example":"
    Thanks,
    The $__global.productName Team
    "},"from":{"type":"string","example":"$__global.emailFromAddress"},"replyTo":{"type":"string","example":"$__global.emailFromAddress"},"description":{"type":"string","example":"Daily digest - sent if number of outstanding tasks for task owner > 0"},"id":{"type":"string","example":"c17bea3a-574d-453c-9e04-4365fbf5af0b","description":"This is auto-generated."},"created":{"type":"string","format":"date-time","description":"The time when this template is created. This is auto-generated.","example":"2020-01-01T00:00:00.000000Z"},"modified":{"type":"string","format":"date-time","description":"The time when this template was last modified. This is auto-generated.","example":"2020-01-01T00:00:00.000000Z"}},"required":["key","medium","locale"]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/notification-templates/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Notification Template By Id","description":{"content":"This gets a template that you have modified for your site by Id.","type":"text/plain"},"url":{"path":["notification-templates",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Id of the Notification Template","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Notification Template By Id + + + +This gets a template that you have modified for your site by Id. + +
    Path Parameters
    + +A template object for your site + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-notifications-template-context.api.mdx b/docs/sailpoint-api-beta/get-notifications-template-context.api.mdx new file mode 100644 index 000000000..7441f8b2a --- /dev/null +++ b/docs/sailpoint-api-beta/get-notifications-template-context.api.mdx @@ -0,0 +1,79 @@ +--- +id: get-notifications-template-context +sidebar_label: Get Notification Template Context +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getNotificationsTemplateContext","tags":["Notifications"],"description":"The notification service (Hermes) maintains metadata to construct the notification templates or supply any information during the event propagation. The data-store where this information is retrieved is called \"Global Context\" (a.k.a. notification template context). It defines a set of attributes\n that will be available per tenant (organization).\n\nRegarding authorization, the access token contains the tenant and will grant access to the one requested.\nRequires the following security scope: idn:notification-templates:read","responses":{"200":{"description":"Notification template context attributes for a specific tenant.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"attributes":{"type":"object","description":"A JSON object that stores the context.","example":{"productUrl":"https://test-org.identitysoon.com","brandingConfigs":{"default":{"narrowLogoURL":null,"productName":"SailPoint","standardLogoURL":null,"navigationColor":"011E64","actionButtonColor":"20B2DE","emailFromAddress":null,"activeLinkColor":"20B2DE","loginInformationalMessage":null}}}},"created":{"type":"string","description":"When the global context was created","format":"date-time","example":"2020-04-15T16:16:47.525Z"},"modified":{"type":"string","description":"When the global context was last modified","format":"date-time","example":"2020-04-15T16:16:47.525Z"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/notification-template-context","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Notification Template Context","description":{"content":"The notification service (Hermes) maintains metadata to construct the notification templates or supply any information during the event propagation. The data-store where this information is retrieved is called \"Global Context\" (a.k.a. notification template context). It defines a set of attributes\n that will be available per tenant (organization).\n\nRegarding authorization, the access token contains the tenant and will grant access to the one requested.\nRequires the following security scope: idn:notification-templates:read","type":"text/plain"},"url":{"path":["notification-template-context"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Notification Template Context + + + +The notification service (Hermes) maintains metadata to construct the notification templates or supply any information during the event propagation. The data-store where this information is retrieved is called "Global Context" (a.k.a. notification template context). It defines a set of attributes + that will be available per tenant (organization). + +Regarding authorization, the access token contains the tenant and will grant access to the one requested. +Requires the following security scope: idn:notification-templates:read + +
    + +Notification template context attributes for a specific tenant. + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-oauth-client.api.mdx b/docs/sailpoint-api-beta/get-oauth-client.api.mdx new file mode 100644 index 000000000..643d7eb53 --- /dev/null +++ b/docs/sailpoint-api-beta/get-oauth-client.api.mdx @@ -0,0 +1,89 @@ +--- +id: get-oauth-client +sidebar_label: Get OAuth Client +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getOauthClient","tags":["OAuth Clients"],"description":"This gets details of an OAuth client.\nRequest will require the following security scope:\n- 'idn:oathkeeper-client:read'","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The OAuth client id","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"Request succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the OAuth client","example":"2c9180835d2e5168015d32f890ca1581"},"businessName":{"type":"string","description":"The name of the business the API Client should belong to","example":"Acme-Solar"},"homepageUrl":{"type":"string","description":"The homepage URL associated with the owner of the API Client","example":"http://localhost:12345"},"name":{"type":"string","description":"A human-readable name for the API Client","example":"Demo API Client"},"description":{"type":"string","description":"A description of the API Client","example":"An API client used for the authorization_code, refresh_token, and client_credentials flows"},"accessTokenValiditySeconds":{"type":"string","description":"The number of seconds an access token generated for this API Client is valid for","example":750},"refreshTokenValiditySeconds":{"type":"string","description":"The number of seconds a refresh token generated for this API Client is valid for","example":86400},"redirectUris":{"type":"array","items":{"type":"string"},"description":"A list of the approved redirect URIs used with the authorization_code flow","example":["http://localhost:12345"]},"grantTypes":{"type":"array","items":{"description":"OAuth2 Grant Type","type":"string","example":"CLIENT_CREDENTIALS","enum":["CLIENT_CREDENTIALS","AUTHORIZATION_CODE","REFRESH_TOKEN"]},"description":"A list of OAuth 2.0 grant types this API Client can be used with","example":["AUTHORIZATION_CODE","CLIENT_CREDENTIALS","REFRESH_TOKEN"]},"accessType":{"description":"The access type (online or offline) of this API Client","example":"OFFLINE","type":"string","enum":["ONLINE","OFFLINE"]},"type":{"description":"The type of the API Client (public or confidential)","example":"CONFIDENTIAL","type":"string","enum":["CONFIDENTIAL","PUBLIC"]},"internal":{"type":"boolean","description":"An indicator of whether the API Client can be used for requests internal to IDN","example":false},"enabled":{"type":"boolean","description":"An indicator of whether the API Client is enabled for use","example":true},"strongAuthSupported":{"type":"boolean","description":"An indicator of whether the API Client supports strong authentication","example":false},"claimsSupported":{"type":"boolean","description":"An indicator of whether the API Client supports the serialization of SAML claims when used with the authorization_code flow","example":false},"created":{"type":"string","format":"date-time","description":"The date and time, down to the millisecond, when the API Client was created","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","description":"The date and time, down to the millisecond, when the API Client was last updated","example":"2018-06-25T20:22:28.104Z"}},"required":["id","businessName","homepageUrl","name","description","accessTokenValiditySeconds","refreshTokenValiditySeconds","redirectUris","grantTypes","accessType","type","internal","enabled","strongAuthSupported","claimsSupported","created","modified"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/oauth-clients/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get OAuth Client","description":{"content":"This gets details of an OAuth client.\nRequest will require the following security scope:\n- 'idn:oathkeeper-client:read'","type":"text/plain"},"url":{"path":["oauth-clients",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The OAuth client id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get OAuth Client + + + +This gets details of an OAuth client. +Request will require the following security scope: +- 'idn:oathkeeper-client:read' + +
    Path Parameters
    + +Request succeeded. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-org-config.api.mdx b/docs/sailpoint-api-beta/get-org-config.api.mdx new file mode 100644 index 000000000..73245dc9d --- /dev/null +++ b/docs/sailpoint-api-beta/get-org-config.api.mdx @@ -0,0 +1,89 @@ +--- +id: get-org-config +sidebar_label: Get Org configuration settings +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getOrgConfig","tags":["Org Config"],"description":"Get org configuration with only external (org admin) accessible properties for the current org. Request will require the following security scope:\n- 'idn:org-config:read'\n- 'idn:org-config-internal:read'","responses":{"200":{"description":"Request succeeded.","content":{"application/json":{"schema":{"type":"object","description":"DTO class for OrgConfig data accessible by customer external org admin (\"ORG_ADMIN\") users","properties":{"orgName":{"type":"string","description":"The name of the org.","example":"acme-solar"},"timeZone":{"type":"string","description":"The selected time zone which is to be used for the org. This directly affects when scheduled tasks are executed. Valid options can be found at /beta/org-config/valid-time-zones","example":"America/Toronto"},"lcsChangeHonorsSourceEnableFeature":{"type":"boolean","description":"Flag to determine whether the LCS_CHANGE_HONORS_SOURCE_ENABLE_FEATURE flag is enabled for the current org.","example":false},"armCustomerId":{"type":"string","description":"ARM Customer ID","example":"DE38E75A-5FF6-4A65-5DC7-08D64426B09E"},"armSapSystemIdMappings":{"type":"string","description":"A list of IDN::sourceId to ARM::systemId mappings.","example":[{"sourceId":"2c91808c791a94e501792388b0d62659","systemId":"1556"},{"sourceId":"2_2c91808c791a94e501792388b0d62659","systemId":"2_1556"},{"sourceId":"3_2c91808c791a94e501792388b0d62659","systemId":"3_1556"}]},"armAuth":{"type":"string","description":"ARM authentication string","example":"epiYNTRYA2S7swisDWk1Zv4VMNgvqEjiBh5_ufuCWsma2m-5XADijqBg0ijXLby5nS6lxZNXabhGnAPGeDGc4V3jQKrhwV-UHypRLs8ZLgOjiQNus9NimS0uPdKomRW6TFWqXyfnYd-znNgbbVuwUy9GyD9ebDVJSntPastxSx7UcyGuWBqfNZYpuxKRWe_7TVY60qL55jUqyz8N4XUbbdcxdbZ0uik6ut-Bv90MKTbZexBW_PR4qcgIkaEs4kIenLyBxnGziYo7AO0tJ8bGHO8FJRkibCpAQIt7PISLo7Gg_Xf9j10dKq2YDgy4pPTvz3fE2ZHYnXCXvXFSA-vVag=="},"armDb":{"type":"string","description":"ARM database name","example":"EU"},"armSsoUrl":{"type":"string","description":"ARM SSO URL","example":"https://your-arm-sso-url"},"iaiEnableCertificationRecommendations":{"type":"boolean","description":"Flag to determine whether IAI Certification Recommendations are enabled for the current org","example":true},"sodReportConfigs":{"type":"array","items":{"type":"object","properties":{"columnName":{"type":"string","description":"Name of column in report","example":"SOD Business Name"},"required":{"type":"boolean","description":"If true, column is required in all reports, and this entry is immutable. A 400 error will result from any attempt to modify the column's definition.","example":true,"default":false},"included":{"type":"boolean","description":"If true, column is included in the report. A 400 error will be thrown if an attempt is made to set included=false if required==true.","example":false,"default":false},"order":{"type":"integer","format":"int32","minimum":0,"maximum":2147483647,"description":"Relative sort order for the column. Columns will be displayed left-to-right in nondecreasing order.","example":2}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/org-config","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Org configuration settings","description":{"content":"Get org configuration with only external (org admin) accessible properties for the current org. Request will require the following security scope:\n- 'idn:org-config:read'\n- 'idn:org-config-internal:read'","type":"text/plain"},"url":{"path":["org-config"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Org configuration settings + + + +Get org configuration with only external (org admin) accessible properties for the current org. Request will require the following security scope: +- 'idn:org-config:read' +- 'idn:org-config-internal:read' + +
    + +Request succeeded. + +
    Schema
      sodReportConfigs object[]
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-outlier-snapshots.api.mdx b/docs/sailpoint-api-beta/get-outlier-snapshots.api.mdx new file mode 100644 index 000000000..b3cdef4de --- /dev/null +++ b/docs/sailpoint-api-beta/get-outlier-snapshots.api.mdx @@ -0,0 +1,84 @@ +--- +id: get-outlier-snapshots +sidebar_label: IAI Identity Outliers Summary +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getOutlierSnapshots","tags":["IAI Outliers"],"description":"This API receives a summary containing: the number of identities that customer has, the number of outliers, and the type of outlier\nRequires authorization scope of 'iai:outliers-management:read'","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"name":"type","in":"query","description":"Type of the identity outliers snapshot to filter on","required":false,"schema":{"type":"string","enum":["LOW_SIMILARITY","STRUCTURAL"]}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#filtering-results)\nFiltering is supported for the following field and operators: \n**snapshotDate**: *ge, le*"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#sorting-results)\nSorting is supported for the following field: **snapshotDate**","example":"snapshotDate","required":false}],"responses":{"200":{"description":"Succeeded. Returns list of objects. Each object is a summary to give high level statistics/counts of outliers","headers":{"X-Total-Count":{"description":"The total result count.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["LOW_SIMILARITY","STRUCTURAL"],"description":"The type of outlier summary","example":"LOW_SIMILARITY"},"snapshotDate":{"type":"string","format":"date-time","description":"The date the bulk outlier detection ran/snapshot was created","example":"2021-05-01T18:40:35.772Z"},"totalOutliers":{"type":"integer","description":"Total number of outliers for the customer making the request","example":50},"totalIdentities":{"type":"integer","description":"Total number of identities for the customer making the request","example":5000}}}}}}},"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/outlier-summaries","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"IAI Identity Outliers Summary","description":{"content":"This API receives a summary containing: the number of identities that customer has, the number of outliers, and the type of outlier\nRequires authorization scope of 'iai:outliers-management:read'","type":"text/plain"},"url":{"path":["outlier-summaries"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Type of the identity outliers snapshot to filter on","type":"text/plain"},"key":"type","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#filtering-results)\nFiltering is supported for the following field and operators: \n**snapshotDate**: *ge, le*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#sorting-results)\nSorting is supported for the following field: **snapshotDate**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## IAI Identity Outliers Summary + + + +This API receives a summary containing: the number of identities that customer has, the number of outliers, and the type of outlier +Requires authorization scope of 'iai:outliers-management:read' + +
    Query Parameters
    + +Succeeded. Returns list of objects. Each object is a summary to give high level statistics/counts of outliers + +
    Response Headers
    • X-Total-Count integer
      + +The total result count. + +
    Schema array
    + +Accepted - Returned if the request was successfully accepted into the system. + +
    Schema
    • object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-outliers.api.mdx b/docs/sailpoint-api-beta/get-outliers.api.mdx new file mode 100644 index 000000000..de5174e86 --- /dev/null +++ b/docs/sailpoint-api-beta/get-outliers.api.mdx @@ -0,0 +1,80 @@ +--- +id: get-outliers +sidebar_label: IAI Get Identity Outliers +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getOutliers","tags":["IAI Outliers"],"description":"This API receives a list of outliers, containing data such as: identityId, outlier type, detection dates, identity attributes, if identity is ignore, and certification information\nRequires authorization scope of 'iai:outliers-management:read'","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"name":"type","in":"query","description":"Type of the identity outliers snapshot to filter on","required":false,"schema":{"type":"string","enum":["LOW_SIMILARITY","STRUCTURAL"],"example":"LOW_SIMILARITY"}},{"in":"query","name":"filters","required":false,"schema":{"type":"string","example":"attributes.displayName sw \"John\" and certStatus eq \"false\""},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#filtering-results)\n\nFiltering is supported for the following Entitlement fields and operators:\n**attributes**: *eq, sw, co, in*\n\n**firstDetectionDate**: *ge, le*\n\n**certStatus**: *eq*\n\n**ignored**: *eq*\n\n**score**: *ge, le*"},{"in":"query","name":"sorters","required":false,"schema":{"type":"string","format":"comma-separated","example":"attributes.displayName,firstDetectionDate,-score"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\nSorting is supported for the following fields: **firstDetectionDate, attributes, score**"}],"responses":{"200":{"description":"Succeeded. Returns list of objects. Each object contains information about outliers","headers":{"X-Total-Count":{"description":"The total result count.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The identity's unique identifier for the outlier record","example":"5be33d3e-c54d-4ed7-af73-2380543e8283"},"identityId":{"type":"string","description":"The ID of the identity that is detected as an outlier","example":"5be33d3e-c54d-4ed7-af73-2380543e8283"},"type":{"type":"string","enum":["LOW_SIMILARITY","STRUCTURAL"],"description":"The type of outlier summary","example":"LOW_SIMILARITY"},"firstDetectionDate":{"type":"string","format":"date-time","description":"The first date the outlier was detected","example":"2021-05-01T18:40:35.772Z"},"latestDetectionDate":{"type":"string","format":"date-time","description":"The most recent date the outlier was detected","example":"2021-05-03T18:40:35.772Z"},"ignored":{"type":"boolean","description":"Flag whether or not the outlier has been ignored","example":false},"attributes":{"type":"object","description":"Object containing mapped identity attributes","example":{"displayName":"John Smith","jobTitle":"Software Engineer","department":"Engineering"}},"score":{"type":"number","format":"float","description":"The outlier score determined by the detection engine ranging from 0..1","example":0.92},"unignoreType":{"type":"string","enum":["MANUAL","AUTOMATIC"],"description":"Enum value of if the outlier manually or automatically un-ignored. Will be NULL if outlier is not ignored","example":"MANUAL"},"unignoreDate":{"type":"string","format":"date-time","description":"shows date when last time has been unignored outlier","example":"2021-06-01T18:40:35.772Z"},"ignoreDate":{"type":"string","format":"date-time","description":"shows date when last time has been ignored outlier","example":"2021-06-01T18:40:35.772Z"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/outliers","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"IAI Get Identity Outliers","description":{"content":"This API receives a list of outliers, containing data such as: identityId, outlier type, detection dates, identity attributes, if identity is ignore, and certification information\nRequires authorization scope of 'iai:outliers-management:read'","type":"text/plain"},"url":{"path":["outliers"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Type of the identity outliers snapshot to filter on","type":"text/plain"},"key":"type","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#filtering-results)\n\nFiltering is supported for the following Entitlement fields and operators:\n**attributes**: *eq, sw, co, in*\n\n**firstDetectionDate**: *ge, le*\n\n**certStatus**: *eq*\n\n**ignored**: *eq*\n\n**score**: *ge, le*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\nSorting is supported for the following fields: **firstDetectionDate, attributes, score**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## IAI Get Identity Outliers + + + +This API receives a list of outliers, containing data such as: identityId, outlier type, detection dates, identity attributes, if identity is ignore, and certification information +Requires authorization scope of 'iai:outliers-management:read' + +
    Query Parameters
    + +Succeeded. Returns list of objects. Each object contains information about outliers + +
    Response Headers
    • X-Total-Count integer
      + +The total result count. + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-password-change-status.api.mdx b/docs/sailpoint-api-beta/get-password-change-status.api.mdx new file mode 100644 index 000000000..d85c1f421 --- /dev/null +++ b/docs/sailpoint-api-beta/get-password-change-status.api.mdx @@ -0,0 +1,83 @@ +--- +id: get-password-change-status +sidebar_label: Get Password Change Request Status +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getPasswordChangeStatus","tags":["Password Management"],"description":"This API returns the status of a password change request. A token with identity owner or trusted API client application authority is required to call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true}],"responses":{"200":{"description":"Status of the password change request","content":{"application/json":{"schema":{"type":"object","properties":{"requestId":{"type":"string","nullable":true,"description":"The password change request ID","example":"089899f13a8f4da7824996191587bab9"},"state":{"type":"string","enum":["IN_PROGRESS","FINISHED","FAILED"],"description":"Password change state"},"errors":{"type":"array","items":{"type":"string"},"description":"The errors during the password change request"},"sourceIds":{"type":"array","items":{"type":"string"},"description":"List of source IDs in the password change request"}}},"example":{"status":"IN_PROCESS","reqeustId":"089899f13a8f4da7824996191587bab9","error":null}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/password-change-status/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Password Change Request Status","description":{"content":"This API returns the status of a password change request. A token with identity owner or trusted API client application authority is required to call this API.","type":"text/plain"},"url":{"path":["password-change-status",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Password Change Request Status + + + +This API returns the status of a password change request. A token with identity owner or trusted API client application authority is required to call this API. + +
    Path Parameters
    + +Status of the password change request + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-password-dictionary-file-status.api.mdx b/docs/sailpoint-api-beta/get-password-dictionary-file-status.api.mdx new file mode 100644 index 000000000..119ca7284 --- /dev/null +++ b/docs/sailpoint-api-beta/get-password-dictionary-file-status.api.mdx @@ -0,0 +1,48 @@ +--- +id: get-password-dictionary-file-status +sidebar_label: Get Password Dictionary Status +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getPasswordDictionaryFileStatus","tags":["Password Dictionary"],"description":"Used to check the status of password dictionary.\nA token with ORG_ADMIN authority is required to call this API.","responses":{"200":{"description":"Password dictionary exists"},"404":{"description":"Password dictionary does not exist"},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"head","path":"/password-dictionary","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Password Dictionary Status","description":{"content":"Used to check the status of password dictionary.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["password-dictionary"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"HEAD"}} +sidebar_class_name: "head api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Password Dictionary Status + + + +Used to check the status of password dictionary. +A token with ORG_ADMIN authority is required to call this API. + +
    + +Password dictionary exists + +
    + +Password dictionary does not exist + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-password-dictionary.api.mdx b/docs/sailpoint-api-beta/get-password-dictionary.api.mdx new file mode 100644 index 000000000..c0569acbc --- /dev/null +++ b/docs/sailpoint-api-beta/get-password-dictionary.api.mdx @@ -0,0 +1,104 @@ +--- +id: get-password-dictionary +sidebar_label: Get Password Dictionary +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getPasswordDictionary","tags":["Password Dictionary"],"description":"This gets password dictionary for the organization.\nA token with ORG_ADMIN authority is required to call this API.","responses":{"200":{"description":"\nThe password dictionary file can contain lines that are:\n1. comment lines - the first character is '#', can be 128 Unicode codepoints in length, and are ignored during processing\n2. empty lines\n3. locale line - the first line that starts with \"locale=\" is considered to be locale line, the rest are treated as normal content lines\n4. line containing the password dictionary word - it must start with non-whitespace character and only non-whitespace characters are allowed;\n maximum length of the line is 128 Unicode codepoints\n\n\nPassword dictionary file may not contain more than 2,500 lines (not counting whitespace lines, comment lines and locale line).\n Password dict file must contain UTF-8 characters only.\n\n# Sample password text file\n\n```\n\n# Password dictionary small test file\n\nlocale=en_US\n\n# Password dictionary prohibited words\n\nqwerty\nabcd\naaaaa\npassword\nqazxsws\n\n```","content":{"text/plain":{"schema":{"type":"string"}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/password-dictionary","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Password Dictionary","description":{"content":"This gets password dictionary for the organization.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["password-dictionary"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"text/plain"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Password Dictionary + + + +This gets password dictionary for the organization. +A token with ORG_ADMIN authority is required to call this API. + +
    + + +The password dictionary file can contain lines that are: +1. comment lines - the first character is '#', can be 128 Unicode codepoints in length, and are ignored during processing +2. empty lines +3. locale line - the first line that starts with "locale=" is considered to be locale line, the rest are treated as normal content lines +4. line containing the password dictionary word - it must start with non-whitespace character and only non-whitespace characters are allowed; + maximum length of the line is 128 Unicode codepoints + + +Password dictionary file may not contain more than 2,500 lines (not counting whitespace lines, comment lines and locale line). + Password dict file must contain UTF-8 characters only. + +# Sample password text file + +``` + +# Password dictionary small test file + +locale=en_US + +# Password dictionary prohibited words + +qwerty +abcd +aaaaa +password +qazxsws + +``` + +
    Schema
    • string
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-password-org-config.api.mdx b/docs/sailpoint-api-beta/get-password-org-config.api.mdx new file mode 100644 index 000000000..c98dc06d3 --- /dev/null +++ b/docs/sailpoint-api-beta/get-password-org-config.api.mdx @@ -0,0 +1,55 @@ +--- +id: get-password-org-config +sidebar_label: Get Password Org Config +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getPasswordOrgConfig","tags":["Password Configuration"],"description":"This API returns the password org config . Requires ORG_ADMIN, API role or authorization scope of 'idn:password-org-config:read'","responses":{"200":{"description":"Reference to the password org config.","content":{"application/json":{"schema":{"type":"object","properties":{"customInstructionsEnabled":{"type":"boolean","description":"Indicator whether custom password instructions feature is enabled. The default value is false."},"digitTokenEnabled":{"type":"boolean","description":"Indicator whether \"digit token\" feature is enabled. The default value is false.","example":true},"digitTokenDurationMinutes":{"type":"integer","description":"The duration of \"digit token\" in minutes. The default value is 5.","example":10},"digitTokenLength":{"type":"integer","description":"The length of \"digit token\". The default value is 6.","example":9}}},"example":{"customInstructionsEnabled":true,"digitTokenDurationMinutes":9,"digitTokenEnabled":false,"digitTokenLength":6}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/password-org-config","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Password Org Config","description":{"content":"This API returns the password org config . Requires ORG_ADMIN, API role or authorization scope of 'idn:password-org-config:read'","type":"text/plain"},"url":{"path":["password-org-config"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Password Org Config + + + +This API returns the password org config . Requires ORG_ADMIN, API role or authorization scope of 'idn:password-org-config:read' + +
    + +Reference to the password org config. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-password-sync-group.api.mdx b/docs/sailpoint-api-beta/get-password-sync-group.api.mdx new file mode 100644 index 000000000..cf7b2bf43 --- /dev/null +++ b/docs/sailpoint-api-beta/get-password-sync-group.api.mdx @@ -0,0 +1,79 @@ +--- +id: get-password-sync-group +sidebar_label: Get Password Sync Group by ID +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getPasswordSyncGroup","tags":["Password Sync Groups"],"description":"This API returns the sync group for the specified ID. A token with ORG_ADMIN authority is required to call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of password sync group to retrieve.","example":"6881f631-3bd5-4213-9c75-8e05cc3e35dd"}],"responses":{"200":{"description":"Reference to the password sync group.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the sync group","example":"6881f631-3bd5-4213-9c75-8e05cc3e35dd"},"name":{"description":"Name of the sync group","type":"string","example":"Password Sync Group 1"},"passwordPolicyId":{"type":"string","example":"2c91808d744ba0ce01746f93b6204501"},"sourceIds":{"type":"array","description":"List of password managed sources IDs","items":{"type":"string"},"example":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"]}}},"example":{"id":"6881f631-3bd5-4213-9c75-8e05cc3e35dd","name":"Password Sync Group 1","passwordPolicyId":"2c91808d744ba0ce01746f93b6204501","sourceIds":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/password-sync-groups/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Password Sync Group by ID","description":{"content":"This API returns the sync group for the specified ID. A token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["password-sync-groups",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of password sync group to retrieve.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Password Sync Group by ID + + + +This API returns the sync group for the specified ID. A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    + +Reference to the password sync group. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-password-sync-groups.api.mdx b/docs/sailpoint-api-beta/get-password-sync-groups.api.mdx new file mode 100644 index 000000000..2a7f32e63 --- /dev/null +++ b/docs/sailpoint-api-beta/get-password-sync-groups.api.mdx @@ -0,0 +1,67 @@ +--- +id: get-password-sync-groups +sidebar_label: Get Password Sync Group List +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getPasswordSyncGroups","tags":["Password Sync Groups"],"description":"This API returns a list of password sync groups. A token with ORG_ADMIN authority is required to call this API.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"A list of password sync groups.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the sync group","example":"6881f631-3bd5-4213-9c75-8e05cc3e35dd"},"name":{"description":"Name of the sync group","type":"string","example":"Password Sync Group 1"},"passwordPolicyId":{"type":"string","example":"2c91808d744ba0ce01746f93b6204501"},"sourceIds":{"type":"array","description":"List of password managed sources IDs","items":{"type":"string"},"example":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"]}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/password-sync-groups","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Password Sync Group List","description":{"content":"This API returns a list of password sync groups. A token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["password-sync-groups"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Password Sync Group List + + + +This API returns a list of password sync groups. A token with ORG_ADMIN authority is required to call this API. + +
    Query Parameters
    + +A list of password sync groups. + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-potential-role-applications.api.mdx b/docs/sailpoint-api-beta/get-potential-role-applications.api.mdx new file mode 100644 index 000000000..40ced2ebf --- /dev/null +++ b/docs/sailpoint-api-beta/get-potential-role-applications.api.mdx @@ -0,0 +1,71 @@ +--- +id: get-potential-role-applications +sidebar_label: Retrieves the applications of a potential role for a role mining session +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getPotentialRoleApplications","tags":["IAI Role Mining"],"description":"This method returns the applications of a potential role for a role mining session.","parameters":[{"in":"path","name":"sessionId","schema":{"type":"string"},"required":true,"description":"The role mining session id","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"path","name":"potentialRoleId","schema":{"type":"string"},"required":true,"description":"A potential role id in a role mining session","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Succeeded. Returns a list of potential roles for a role mining session.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Id of the potential role"},"name":{"type":"string","description":"Name of the potential role"}},"example":{"id":"2c9180877212632a017228d5a796292b","name":"Slack"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/role-mining-sessions/{sessionId}/potential-role-summaries/{potentialRoleId}/applications","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Retrieves the applications of a potential role for a role mining session","description":{"content":"This method returns the applications of a potential role for a role mining session.","type":"text/plain"},"url":{"path":["role-mining-sessions",":sessionId","potential-role-summaries",":potentialRoleId","applications"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The role mining session id","type":"text/plain"},"type":"any","value":"","key":"sessionId"},{"disabled":false,"description":{"content":"(Required) A potential role id in a role mining session","type":"text/plain"},"type":"any","value":"","key":"potentialRoleId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Retrieves the applications of a potential role for a role mining session + + + +This method returns the applications of a potential role for a role mining session. + +
    Path Parameters
    Query Parameters
    + +Succeeded. Returns a list of potential roles for a role mining session. + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-potential-role-summaries.api.mdx b/docs/sailpoint-api-beta/get-potential-role-summaries.api.mdx new file mode 100644 index 000000000..6c080e1df --- /dev/null +++ b/docs/sailpoint-api-beta/get-potential-role-summaries.api.mdx @@ -0,0 +1,75 @@ +--- +id: get-potential-role-summaries +sidebar_label: Retrieves the potential role summaries for a role mining session +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getPotentialRoleSummaries","tags":["IAI Role Mining"],"description":"This method returns the potential role summaries for a role mining session.","parameters":[{"in":"path","name":"sessionId","schema":{"type":"string"},"required":true,"description":"The role mining session id","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"query","name":"sorters","description":"sort by identityCount, density, freshness or quality","required":false,"style":"form","explode":true,"schema":{"type":"string"}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Succeeded. Returns a list of potential role summaries for a role mining session.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"potentialRoleRef":{"description":"Details about the potential role","type":"object","properties":{"id":{"type":"string","description":"Id of the potential role"},"name":{"type":"string","description":"Name of the potential role"}}},"identityCount":{"type":"integer","description":"The number of identities in a potential role.","example":25},"entitlementCount":{"type":"integer","description":"The number of entitlements in a potential role.","example":15},"identityGroupStatus":{"type":"string","description":"The status for this identity group which can be \"REQUESTED\" or \"OBTAINED\"","example":"OBTAINED"},"provisionState":{"description":"The status of provisioning for this potential role. Can be \"POTENTIAL\", \"PENDING\", \"FAILED\", or \"COMPLETE\".","example":"PENDING","type":"string","enum":["POTENTIAL","PENDING","COMPLETE","FAILED"]},"roleId":{"type":"string","description":"ID of the provisioned role in IIQ or IDN. Null if this potential role has not been provisioned.","example":"2a4be6fbcf3c4e66b95a0c15ffd591"},"density":{"type":"integer","description":"The density metric (0-100) of this potential role. Higher density values indicate higher similarity amongst the identities.","example":90},"freshness":{"type":"integer","description":"The freshness metric (0-100) of this potential role. Higher freshness values indicate this potential role is more distinctive compared to existing roles.","example":70},"quality":{"type":"integer","description":"The quality metric (0-100) of this potential role. Higher quality values indicate this potential role has high density and freshness.","example":80}},"example":{"potentialRoleRef":{"id":"dd4c13c6-8237-4753-bfb7-f627e489f9ec","name":"Potential Role - dd4c13"},"identityCount":"25","entitlementCount":"15","identityGroupStatus":"OBTAINED","provisionState":"PENDING","roleId":"2a4be6fbcf3c4e66b95a0c15ffd591"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/role-mining-sessions/{sessionId}/potential-role-summaries","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Retrieves the potential role summaries for a role mining session","description":{"content":"This method returns the potential role summaries for a role mining session.","type":"text/plain"},"url":{"path":["role-mining-sessions",":sessionId","potential-role-summaries"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"sort by identityCount, density, freshness or quality","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The role mining session id","type":"text/plain"},"type":"any","value":"","key":"sessionId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Retrieves the potential role summaries for a role mining session + + + +This method returns the potential role summaries for a role mining session. + +
    Path Parameters
    Query Parameters
    + +Succeeded. Returns a list of potential role summaries for a role mining session. + +
    Schema array
      potentialRoleRef object
      + +Details about the potential role + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-potential-role-summary.api.mdx b/docs/sailpoint-api-beta/get-potential-role-summary.api.mdx new file mode 100644 index 000000000..5710a6208 --- /dev/null +++ b/docs/sailpoint-api-beta/get-potential-role-summary.api.mdx @@ -0,0 +1,75 @@ +--- +id: get-potential-role-summary +sidebar_label: Retrieves a specific potential role for a role mining session +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getPotentialRoleSummary","tags":["IAI Role Mining"],"description":"This method returns a specific potential role for a role mining session.","parameters":[{"in":"path","name":"sessionId","schema":{"type":"string"},"required":true,"description":"The role mining session id","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"path","name":"potentialRoleId","schema":{"type":"string"},"required":true,"description":"A potential role id in a role mining session","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"}],"responses":{"200":{"description":"Succeeded. Returns a list of potential roles for a role mining session.","content":{"application/json":{"schema":{"type":"object","allOf":[{"type":"object","properties":{"potentialRoleRef":{"description":"Details about the potential role","type":"object","properties":{"id":{"type":"string","description":"Id of the potential role"},"name":{"type":"string","description":"Name of the potential role"}}},"identityCount":{"type":"integer","description":"The number of identities in a potential role.","example":25},"entitlementCount":{"type":"integer","description":"The number of entitlements in a potential role.","example":15},"identityGroupStatus":{"type":"string","description":"The status for this identity group which can be \"REQUESTED\" or \"OBTAINED\"","example":"OBTAINED"},"provisionState":{"description":"The status of provisioning for this potential role. Can be \"POTENTIAL\", \"PENDING\", \"FAILED\", or \"COMPLETE\".","example":"PENDING","type":"string","enum":["POTENTIAL","PENDING","COMPLETE","FAILED"]},"roleId":{"type":"string","description":"ID of the provisioned role in IIQ or IDN. Null if this potential role has not been provisioned.","example":"2a4be6fbcf3c4e66b95a0c15ffd591"},"density":{"type":"integer","description":"The density metric (0-100) of this potential role. Higher density values indicate higher similarity amongst the identities.","example":90},"freshness":{"type":"integer","description":"The freshness metric (0-100) of this potential role. Higher freshness values indicate this potential role is more distinctive compared to existing roles.","example":70},"quality":{"type":"integer","description":"The quality metric (0-100) of this potential role. Higher quality values indicate this potential role has high density and freshness.","example":80}},"example":{"potentialRoleRef":{"id":"dd4c13c6-8237-4753-bfb7-f627e489f9ec","name":"Potential Role - dd4c13"},"identityCount":"25","entitlementCount":"15","identityGroupStatus":"OBTAINED","provisionState":"PENDING","roleId":"2a4be6fbcf3c4e66b95a0c15ffd591"}},{"type":"object"}],"properties":{"identityDistribution":{"description":"Identity attribute distribution","type":"array","items":{"type":"object","properties":{"attributeName":{"type":"string","description":"Id of the potential role"},"distribution":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"example":{"potentialRoleRef":{"id":"dd4c13c6-8237-4753-bfb7-f627e489f9ec","name":"Potential Role - dd4c13"},"identityCount":"25","entitlementCount":"15","identityGroupStatus":"OBTAINED","roleId":null,"density":100,"freshness":90,"quality":95,"identityDistribution":[]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/role-mining-sessions/{sessionId}/potential-role-summaries/{potentialRoleId}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Retrieves a specific potential role for a role mining session","description":{"content":"This method returns a specific potential role for a role mining session.","type":"text/plain"},"url":{"path":["role-mining-sessions",":sessionId","potential-role-summaries",":potentialRoleId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The role mining session id","type":"text/plain"},"type":"any","value":"","key":"sessionId"},{"disabled":false,"description":{"content":"(Required) A potential role id in a role mining session","type":"text/plain"},"type":"any","value":"","key":"potentialRoleId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Retrieves a specific potential role for a role mining session + + + +This method returns a specific potential role for a role mining session. + +
    Path Parameters
    + +Succeeded. Returns a list of potential roles for a role mining session. + +
    Schema
      potentialRoleRef object
      + +Details about the potential role + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-provisioning-policy.api.mdx b/docs/sailpoint-api-beta/get-provisioning-policy.api.mdx new file mode 100644 index 000000000..0862d6ea2 --- /dev/null +++ b/docs/sailpoint-api-beta/get-provisioning-policy.api.mdx @@ -0,0 +1,88 @@ +--- +id: get-provisioning-policy +sidebar_label: Get Provisioning Policy by UsageType +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getProvisioningPolicy","tags":["Sources"],"description":"This end-point retrieves the ProvisioningPolicy with the specified usage on the specified Source in IdentityNow.\nA token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:provisioning-policy:read"]}],"parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source ID.","example":"2c9180835d191a86015d28455b4a2329"},{"in":"path","name":"usageType","required":true,"schema":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"description":"The type of ProvisioningPolicy usage.","example":"REGISTER"}],"responses":{"200":{"description":"The requested ProvisioningPolicyDto was successfully retrieved.","content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"usageType":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"userName"},"transform":{"type":"object","description":"The transform to apply to the field","example":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"default":{}},"attributes":{"type":"object","description":"Attributes required for the transform","example":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"}},"isRequired":{"type":"boolean","readOnly":true,"description":"Flag indicating whether or not the attribute is required.","default":false,"example":false},"type":{"type":"string","description":"The type of the attribute.","example":"string"},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","default":false,"example":false}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sources/{sourceId}/provisioning-policies/{usageType}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Provisioning Policy by UsageType","description":{"content":"This end-point retrieves the ProvisioningPolicy with the specified usage on the specified Source in IdentityNow.\nA token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":sourceId","provisioning-policies",":usageType"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source ID.","type":"text/plain"},"type":"any","value":"","key":"sourceId"},{"disabled":false,"description":{"content":"(Required) The type of ProvisioningPolicy usage.","type":"text/plain"},"type":"any","value":"","key":"usageType"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Provisioning Policy by UsageType + + + +This end-point retrieves the ProvisioningPolicy with the specified usage on the specified Source in IdentityNow. +A token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + +
    Path Parameters
    + +The requested ProvisioningPolicyDto was successfully retrieved. + +
    Schema
      fields object[]
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-public-identity-config.api.mdx b/docs/sailpoint-api-beta/get-public-identity-config.api.mdx new file mode 100644 index 000000000..a36bde5ea --- /dev/null +++ b/docs/sailpoint-api-beta/get-public-identity-config.api.mdx @@ -0,0 +1,67 @@ +--- +id: get-public-identity-config +sidebar_label: Get Public Identity Config +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getPublicIdentityConfig","tags":["Public Identity Config"],"description":"This gets details of public identity config.","responses":{"200":{"description":"Request succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Details of up to 5 Identity attributes that will be publicly accessible for all Identities to anyone in the org","properties":{"attributes":{"type":"array","items":{"type":"object","description":"Used to map an attribute key for an Identity to its display name.","properties":{"key":{"type":"string","description":"the key of the attribute","example":"country"},"name":{"type":"string","description":"the display name of the attribute","example":"Country"}}}},"modifiedBy":{"type":"object","nullable":true,"description":"The manager for the identity.","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of identity.","example":"Thomas Edison"}}},"modified":{"type":"string","description":"the date/time of the modification","format":"date-time","example":"2018-06-25T20:22:28.104Z"}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/public-identities-config","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Public Identity Config","description":{"content":"This gets details of public identity config.","type":"text/plain"},"url":{"path":["public-identities-config"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Public Identity Config + + + +This gets details of public identity config. + +
    + +Request succeeded. + +
    Schema
      attributes object[]
      modifiedBy object
      + +The manager for the identity. + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-recommendations-config.api.mdx b/docs/sailpoint-api-beta/get-recommendations-config.api.mdx new file mode 100644 index 000000000..85bab7b11 --- /dev/null +++ b/docs/sailpoint-api-beta/get-recommendations-config.api.mdx @@ -0,0 +1,71 @@ +--- +id: get-recommendations-config +sidebar_label: Get certification recommendation config values +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getRecommendationsConfig","tags":["IAI Recommendations"],"description":"Retrieves configuration attributes used by certification recommendations.","responses":{"200":{"description":"Cert recommendation configuration attributes","content":{"application/json":{"schema":{"type":"object","properties":{"recommenderFeatures":{"type":"array","items":{"type":"string"},"description":"List of identity attributes to use for calculating certification recommendations","example":["jobTitle","location","peer_group","department","active"]},"peerGroupPercentageThreshold":{"type":"number","description":"The percent value that the recommendation calculation must surpass to produce a YES recommendation","minimum":0,"maximum":1,"example":0.5},"forceRefresh":{"type":"boolean","description":"If true, rulesRecommenderConfig will be refreshed with new programatically selected attribute and threshold values on the next pipeline run","example":false}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":[]}],"method":"get","path":"/recommendations/config","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get certification recommendation config values","description":{"content":"Retrieves configuration attributes used by certification recommendations.","type":"text/plain"},"url":{"path":["recommendations","config"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get certification recommendation config values + + + +Retrieves configuration attributes used by certification recommendations. + +
    + +Cert recommendation configuration attributes + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-recommendations.api.mdx b/docs/sailpoint-api-beta/get-recommendations.api.mdx new file mode 100644 index 000000000..c0e792cb6 --- /dev/null +++ b/docs/sailpoint-api-beta/get-recommendations.api.mdx @@ -0,0 +1,95 @@ +--- +id: get-recommendations +sidebar_label: Returns a Recommendation Based on Object +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getRecommendations","tags":["IAI Recommendations"],"description":"The getRecommendations API returns recommendations based on the requested object. The recommendations are invoked by IdentityIQ and IdentityNow plug-ins that retrieve recommendations based on the performed calculations.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"requests":{"type":"array","items":{"description":"List of requests to retrieve recommendations","type":"object","properties":{"identityId":{"type":"string","description":"The identity ID","example":"2c938083633d259901633d25c68c00fa"},"item":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the access item for which to retrieve the recommendation","example":"2c938083633d259901633d2623ec0375"},"type":{"type":"string","example":"ENTITLEMENT","description":"The type of the access item.","enum":["ENTITLEMENT","ACCESS_PROFILE","ROLE"]}}}}}},"excludeInterpretations":{"type":"boolean","description":"Exclude interpretations in the response if \"true\". Return interpretations in the response if this attribute is not specified.","default":"false","example":"false"},"includeTranslationMessages":{"type":"boolean","description":"When set to true, the calling system uses the translated messages for the specified language","default":"false","example":"false"},"includeDebugInformation":{"type":"boolean","description":"Returns the recommender calculations if set to true","default":"false","example":"true"},"prescribeMode":{"type":"boolean","description":"When set to true, uses prescribedRulesRecommenderConfig to get identity attributes and peer group threshold instead of standard config.","default":"false","example":"false"}}}}}},"responses":{"200":{"description":"The recommendations for a customer","content":{"application/json":{"schema":{"type":"object","properties":{"response":{"type":"array","items":{"type":"object","properties":{"request":{"type":"object","properties":{"identityId":{"type":"string","description":"The identity ID","example":"2c938083633d259901633d25c68c00fa"},"item":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the access item for which to retrieve the recommendation","example":"2c938083633d259901633d2623ec0375"},"type":{"type":"string","example":"ENTITLEMENT","description":"The type of the access item.","enum":["ENTITLEMENT","ACCESS_PROFILE","ROLE"]}}}}},"recommendation":{"type":"string","example":"YES","description":"The recommendation - YES if the access is recommended, NO if not recommended, MAYBE if there is not enough information to make a recommendation, NOT_FOUND if the identity is not found in the system","enum":["YES","NO","MAYBE","NOT_FOUND"]},"interpretations":{"type":"array","items":{"type":"string"},"description":"The list of interpretations explaining the recommendation. The array is empty if includeInterpretations is false or not present in the request. e.g. - [ \"Not approved in the last 6 months.\" ]. Interpretations will be translated using the client's locale as found in the Accept-Language header. If a translation for the client's locale cannot be found, the US English translation will be returned.","example":["75% of identities with the same department have this access. This information had a high impact on the overall score.","67% of identities with the same peer group have this access. This information had a low impact on the overall score.","42% of identities with the same location have this access. This information had a low impact on the overall score."]},"translationMessages":{"type":"array","example":[{"key":"recommender-api.V2_WEIGHT_FEATURE_PRODUCT_INTERPRETATION_HIGH","values":["75","department"]}],"items":{"properties":{"key":{"type":"string","description":"The key of the translation message","example":"recommender-api.V2_WEIGHT_FEATURE_PRODUCT_INTERPRETATION_HIGH"},"values":{"type":"array","description":"The values corresponding to the translation messages","items":{"type":"string"},"example":["75","department"]}}},"description":"The list of translation messages, if they have been requested."},"recommenderCalculations":{"description":"The calcuations performed behind the scenes that provide recommendations to the user.","properties":{"identityId":{"type":"string","description":"The ID of the identity","example":"2c91808457d8f3ab0157e3e62cb4213c"},"entitlementId":{"type":"string","description":"The entitlement ID","example":"2c91809050db617d0150e0bf3215385e"},"recommendation":{"type":"string","description":"The actual recommendation","example":"YES"},"overallWeightedScore":{"type":"number","description":"The overall weighted score"},"featureWeightedScores":{"type":"object","description":"The weighted score of each individual feature","additionalProperties":{"type":"number"}},"threshold":{"type":"number","description":"The configured value against which the overallWeightedScore is compared"},"identityAttributes":{"type":"object","description":"The values for your configured features","additionalProperties":{"type":"object","properties":{"value":{"type":"string"}}}},"featureValues":{"description":"The feature details","type":"object","properties":{"feature":{"type":"string","description":"The type of feature","example":"department"},"numerator":{"type":"integer","format":"int32","example":14,"description":"The number of identities that have access to the feature"},"denominator":{"type":"integer","format":"int32","example":14,"description":"The number of identities with the corresponding feature"}}}}}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":[]}],"method":"post","path":"/recommendations/request","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"requests":[{"identityId":"2c938083633d259901633d25c68c00fa","item":{"id":"2c938083633d259901633d2623ec0375","type":"ENTITLEMENT"}}],"excludeInterpretations":"false","includeTranslationMessages":"false","includeDebugInformation":"true","prescribeMode":"false"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Returns a Recommendation Based on Object","description":{"content":"The getRecommendations API returns recommendations based on the requested object. The recommendations are invoked by IdentityIQ and IdentityNow plug-ins that retrieve recommendations based on the performed calculations.","type":"text/plain"},"url":{"path":["recommendations","request"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Returns a Recommendation Based on Object + + + +The getRecommendations API returns recommendations based on the requested object. The recommendations are invoked by IdentityIQ and IdentityNow plug-ins that retrieve recommendations based on the performed calculations. + +
    Request Body required
      requests object[]
      item object
    + +The recommendations for a customer + +
    Schema
      response object[]
      request object
      item object
      translationMessages undefined[]
      + +The list of translation messages, if they have been requested. + +
      recommenderCalculations
      + +The calcuations performed behind the scenes that provide recommendations to the user. + +
      featureWeightedScores object
      + +The weighted score of each individual feature + +
    • property name* number
    • identityAttributes object
      + +The values for your configured features + +
    • property name* object
    • featureValues object
      + +The feature details + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-role-assigned-identities.api.mdx b/docs/sailpoint-api-beta/get-role-assigned-identities.api.mdx new file mode 100644 index 000000000..59c23d951 --- /dev/null +++ b/docs/sailpoint-api-beta/get-role-assigned-identities.api.mdx @@ -0,0 +1,75 @@ +--- +id: get-role-assigned-identities +sidebar_label: Get a list of Identities assigned a Role +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getRoleAssignedIdentities","tags":["Roles"],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"description":"ID of the Role for which the assigned Identities are to be listed","example":"2c91808a7813090a017814121e121518","required":true},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**aliasName**: *eq, sw*\n\n**email**: *eq, sw*\n\n**name**: *eq, sw*","example":"name sw Joe"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **id**, **name**, **aliasName**, **email**","example":"aliasName,name"}],"responses":{"200":{"description":"List of Identities assigned the Role","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","description":"A subset of the fields of an Identity which is a member of a Role.","properties":{"id":{"type":"string","description":"The ID of the Identity","example":"2c9180a46faadee4016fb4e018c20639"},"aliasName":{"type":"string","description":"The alias / username of the Identity","example":"t.edison"},"name":{"type":"string","description":"The human-readable display name of the Identity","example":"Thomas Edison"},"email":{"type":"string","description":"Email address of the Identity","example":"t.edison@identitynow.com"},"roleAssignmentSource":{"type":"string","enum":["ACCESS_REQUEST","ROLE_MEMBERSHIP"],"description":"Type which indicates how a particular Identity obtained a particular Role","example":"ACCESS_REQUEST"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:role:read","idn:role-checked:read"]}],"description":"Get a list of Identities assigned a Role","method":"get","path":"/roles/{id}/assigned-identities","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get a list of Identities assigned a Role","description":{"type":"text/plain"},"url":{"path":["roles",":id","assigned-identities"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**aliasName**: *eq, sw*\n\n**email**: *eq, sw*\n\n**name**: *eq, sw*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **id**, **name**, **aliasName**, **email**","type":"text/plain"},"key":"sorters","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the Role for which the assigned Identities are to be listed","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a list of Identities assigned a Role + + + +Get a list of Identities assigned a Role + +
    Path Parameters
    Query Parameters
    + +List of Identities assigned the Role + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-role-insight.api.mdx b/docs/sailpoint-api-beta/get-role-insight.api.mdx new file mode 100644 index 000000000..ef8f84975 --- /dev/null +++ b/docs/sailpoint-api-beta/get-role-insight.api.mdx @@ -0,0 +1,79 @@ +--- +id: get-role-insight +sidebar_label: Get a single role insight +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getRoleInsight","tags":["Role Insights"],"description":"This endpoint gets role insights information for a role.","parameters":[{"in":"path","name":"insightId","schema":{"type":"string"},"required":true,"description":"The role insight id","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"}],"responses":{"200":{"description":"Succeeded. Returns information about insights for a single role.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Insight id","example":"1467e61e-f284-439c-ba2d-c6cc11cf0941"},"numberOfUpdates":{"type":"integer","description":"Total number of updates for this role","example":5},"createdDate":{"type":"string","format":"date-time","description":"The date-time insights were last created for this role.","example":"2020-05-19T13:49:37.385Z"},"role":{"description":"A role","type":"object","properties":{"name":{"type":"string","description":"Role name","example":"Software Engineer"},"id":{"type":"string","description":"Role id","example":"1467e61e-f284-439c-ba2d-c6cc11cf0941"},"description":{"type":"string","description":"Role description","example":"Person who develops software"},"ownerName":{"type":"string","description":"Role owner name","example":"Bob"},"ownerId":{"type":"string","description":"Role owner id","example":"1467e61e-f284-439c-ba2d-c6cc11cf0941"}}},"insight":{"description":"The kind of insight this is and some stats","type":"object","properties":{"type":{"type":"string","description":"The number of identities in this role with the entitlement.","example":"ADD"},"identitiesWithAccess":{"type":"integer","description":"The number of identities in this role with the entitlement.","example":850},"identitiesImpacted":{"type":"integer","description":"The number of identities in this role that do not have the specified entitlement.","example":150},"totalNumberOfIdentities":{"type":"integer","description":"The total number of identities.","example":1000}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/role-insights/{insightId}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get a single role insight","description":{"content":"This endpoint gets role insights information for a role.","type":"text/plain"},"url":{"path":["role-insights",":insightId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The role insight id","type":"text/plain"},"type":"any","value":"","key":"insightId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a single role insight + + + +This endpoint gets role insights information for a role. + +
    Path Parameters
    + +Succeeded. Returns information about insights for a single role. + +
    Schema
      role object
      + +A role + +
      insight object
      + +The kind of insight this is and some stats + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-role-insights-current-entitlements.api.mdx b/docs/sailpoint-api-beta/get-role-insights-current-entitlements.api.mdx new file mode 100644 index 000000000..5dcfe929f --- /dev/null +++ b/docs/sailpoint-api-beta/get-role-insights-current-entitlements.api.mdx @@ -0,0 +1,71 @@ +--- +id: get-role-insights-current-entitlements +sidebar_label: Get current entitlement for a role +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getRoleInsightsCurrentEntitlements","tags":["Role Insights"],"description":"This endpoint gets the entitlements for a role. The term \"current\" is to distinguish from the entitlement(s) an insight might recommend adding.","parameters":[{"in":"path","name":"insightId","schema":{"type":"string"},"required":true,"description":"The role insight id","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"query","name":"filters","description":"Filter parameter(s) by \"starts with\" for the name and description.","required":false,"style":"form","explode":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succeeded. Returns a list of current or pre-existing entitlements for a role.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Name of the entitlement"},"id":{"type":"string","description":"Id of the entitlement"},"description":{"type":"string","description":"Description for the entitlement"},"source":{"type":"string","description":"Source or the application for the entitlement"},"attribute":{"type":"string","description":"Attribute for the entitlement"},"value":{"type":"string","description":"Attribute value for the entitlement"}},"example":{"name":"Administrator","id":"8c190e67-87aa-4ed9-a90b-d9d5344523fb","description":"Full administrative access to IdentityNow","source":"IdentityNow","attribute":"assignedGroups","value":"ORG_ADMIN"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/role-insights/{insightId}/current-entitlements","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get current entitlement for a role","description":{"content":"This endpoint gets the entitlements for a role. The term \"current\" is to distinguish from the entitlement(s) an insight might recommend adding.","type":"text/plain"},"url":{"path":["role-insights",":insightId","current-entitlements"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Filter parameter(s) by \"starts with\" for the name and description.","type":"text/plain"},"key":"filters","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The role insight id","type":"text/plain"},"type":"any","value":"","key":"insightId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get current entitlement for a role + + + +This endpoint gets the entitlements for a role. The term "current" is to distinguish from the entitlement(s) an insight might recommend adding. + +
    Path Parameters
    Query Parameters
    + +Succeeded. Returns a list of current or pre-existing entitlements for a role. + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-role-insights-entitlements-changes.api.mdx b/docs/sailpoint-api-beta/get-role-insights-entitlements-changes.api.mdx new file mode 100644 index 000000000..9a60ae7cf --- /dev/null +++ b/docs/sailpoint-api-beta/get-role-insights-entitlements-changes.api.mdx @@ -0,0 +1,75 @@ +--- +id: get-role-insights-entitlements-changes +sidebar_label: Get entitlement insights for a role +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getRoleInsightsEntitlementsChanges","tags":["Role Insights"],"description":"This endpoint returns entitlement insights for a role.","parameters":[{"in":"path","name":"insightId","schema":{"type":"string"},"required":true,"description":"The role insight id","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},{"in":"query","name":"sorters","description":"sort by identitiesWithAccess or name","required":false,"style":"form","explode":true,"schema":{"type":"string"}},{"in":"query","name":"filters","description":"Filter parameter(s) by \"starts with\" for the name and description.","required":false,"style":"form","explode":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succeeded. Returns a list of entitlements to be added for a role.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Name of the entitlement"},"id":{"type":"string","description":"Id of the entitlement"},"description":{"type":"string","description":"Description for the entitlement"},"attribute":{"type":"string","description":"Attribute for the entitlement"},"value":{"type":"string","description":"Attribute value for the entitlement"},"source":{"type":"string","description":"Source or the application for the entitlement"},"insight":{"description":"The kind of insight this is and some stats","type":"object","properties":{"type":{"type":"string","description":"The number of identities in this role with the entitlement.","example":"ADD"},"identitiesWithAccess":{"type":"integer","description":"The number of identities in this role with the entitlement.","example":850},"identitiesImpacted":{"type":"integer","description":"The number of identities in this role that do not have the specified entitlement.","example":150},"totalNumberOfIdentities":{"type":"integer","description":"The total number of identities.","example":1000}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/role-insights/{insightId}/entitlement-changes","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get entitlement insights for a role","description":{"content":"This endpoint returns entitlement insights for a role.","type":"text/plain"},"url":{"path":["role-insights",":insightId","entitlement-changes"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"sort by identitiesWithAccess or name","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"Filter parameter(s) by \"starts with\" for the name and description.","type":"text/plain"},"key":"filters","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The role insight id","type":"text/plain"},"type":"any","value":"","key":"insightId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get entitlement insights for a role + + + +This endpoint returns entitlement insights for a role. + +
    Path Parameters
    Query Parameters
    + +Succeeded. Returns a list of entitlements to be added for a role. + +
    Schema array
      insight object
      + +The kind of insight this is and some stats + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-role-insights-requests.api.mdx b/docs/sailpoint-api-beta/get-role-insights-requests.api.mdx new file mode 100644 index 000000000..b9ca8ef0f --- /dev/null +++ b/docs/sailpoint-api-beta/get-role-insights-requests.api.mdx @@ -0,0 +1,71 @@ +--- +id: get-role-insights-requests +sidebar_label: Returns the metadata for a request in order to generate insights for roles. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getRoleInsightsRequests","tags":["Role Insights"],"description":"This endpoint returns details of a prior request.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The role insights request id","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"}],"responses":{"200":{"description":"Succeeded. Returns details of an earlier role insights request.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Request Id for a role insight generation request","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},"createdDate":{"type":"string","format":"date-time","description":"The date-time role insights request was created.","example":"2020-09-16T18:49:32.150Z"},"lastGenerated":{"type":"string","format":"date-time","description":"The date-time role insights request was completed.","example":"2020-09-16T18:50:12.150Z"},"numberOfUpdates":{"type":"integer","description":"Total number of updates for this request. Starts with 0 and will have correct number when request is COMPLETED.","example":0},"roleIds":{"description":"The role IDs that are in this request.","type":"array","items":{"type":"string"}},"status":{"type":"string","description":"Request status","enum":["CREATED","IN PROGRESS","COMPLETED","FAILED"]}},"example":{"id":"c9aa02f7-86b0-4bc4-84bd-3116a6131e77","createdDate":"2020-09-16T18:49:32.150Z","lastGenerated":"2020-09-16T18:49:32.150Z","numberOfUpdates":0,"roleIds":["2c91808e720e94f8017253287c0a44f4","2c918087723ac2800172532191540e03","2c9180986e4c8592016e6b15eaef447c"],"status":"CREATED"}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/role-insights/requests/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Returns the metadata for a request in order to generate insights for roles.","description":{"content":"This endpoint returns details of a prior request.","type":"text/plain"},"url":{"path":["role-insights","requests",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The role insights request id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Returns the metadata for a request in order to generate insights for roles. + + + +This endpoint returns details of a prior request. + +
    Path Parameters
    + +Succeeded. Returns details of an earlier role insights request. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-role-insights-summary.api.mdx b/docs/sailpoint-api-beta/get-role-insights-summary.api.mdx new file mode 100644 index 000000000..1b76593fa --- /dev/null +++ b/docs/sailpoint-api-beta/get-role-insights-summary.api.mdx @@ -0,0 +1,71 @@ +--- +id: get-role-insights-summary +sidebar_label: Get role insights summary information +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getRoleInsightsSummary","tags":["Role Insights"],"description":"This method returns high level summary information for role insights for a customer.","responses":{"200":{"description":"Succeeded. Returns high level counts.","content":{"application/json":{"schema":{"type":"object","properties":{"numberOfUpdates":{"type":"integer","description":"Total number of roles with updates"},"lastGenerated":{"type":"string","format":"date-time","description":"The date-time role insights were last found.","example":"2020-05-19T13:49:37.385Z"},"entitlementsIncludedInRoles":{"type":"integer","description":"The number of entitlements included in roles (vs free radicals).","example":45},"totalNumberOfEntitlements":{"type":"integer","description":"The total number of entitlements.","example":250},"identitiesWithAccessViaRoles":{"type":"integer","description":"The number of identities in roles vs. identities with just entitlements and not in roles.","example":550},"totalNumberOfIdentities":{"type":"integer","description":"The total number of identities.","example":980}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/role-insights/summary","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get role insights summary information","description":{"content":"This method returns high level summary information for role insights for a customer.","type":"text/plain"},"url":{"path":["role-insights","summary"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get role insights summary information + + + +This method returns high level summary information for role insights for a customer. + +
    + +Succeeded. Returns high level counts. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-role-insights.api.mdx b/docs/sailpoint-api-beta/get-role-insights.api.mdx new file mode 100644 index 000000000..30da83182 --- /dev/null +++ b/docs/sailpoint-api-beta/get-role-insights.api.mdx @@ -0,0 +1,79 @@ +--- +id: get-role-insights +sidebar_label: Get role insights +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getRoleInsights","tags":["Role Insights"],"description":"This method returns detailed role insights for each role.","parameters":[{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"name":"sorters","in":"query","description":"sort by numberOfUpdates, identitiesWithAccess, totalNumberOfIdentities (default- ascending)","required":false,"style":"form","explode":true,"schema":{"type":"string"}},{"name":"filters","in":"query","description":"Filter parameter(s) by \"starts with\" for the name, ownerName and description.","required":false,"style":"form","explode":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succeeded. Returns a list of roles with information about insights for each role.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Insight id","example":"1467e61e-f284-439c-ba2d-c6cc11cf0941"},"numberOfUpdates":{"type":"integer","description":"Total number of updates for this role","example":5},"createdDate":{"type":"string","format":"date-time","description":"The date-time insights were last created for this role.","example":"2020-05-19T13:49:37.385Z"},"role":{"description":"A role","type":"object","properties":{"name":{"type":"string","description":"Role name","example":"Software Engineer"},"id":{"type":"string","description":"Role id","example":"1467e61e-f284-439c-ba2d-c6cc11cf0941"},"description":{"type":"string","description":"Role description","example":"Person who develops software"},"ownerName":{"type":"string","description":"Role owner name","example":"Bob"},"ownerId":{"type":"string","description":"Role owner id","example":"1467e61e-f284-439c-ba2d-c6cc11cf0941"}}},"insight":{"description":"The kind of insight this is and some stats","type":"object","properties":{"type":{"type":"string","description":"The number of identities in this role with the entitlement.","example":"ADD"},"identitiesWithAccess":{"type":"integer","description":"The number of identities in this role with the entitlement.","example":850},"identitiesImpacted":{"type":"integer","description":"The number of identities in this role that do not have the specified entitlement.","example":150},"totalNumberOfIdentities":{"type":"integer","description":"The total number of identities.","example":1000}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/role-insights","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get role insights","description":{"content":"This method returns detailed role insights for each role.","type":"text/plain"},"url":{"path":["role-insights"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"sort by numberOfUpdates, identitiesWithAccess, totalNumberOfIdentities (default- ascending)","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"Filter parameter(s) by \"starts with\" for the name, ownerName and description.","type":"text/plain"},"key":"filters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get role insights + + + +This method returns detailed role insights for each role. + +
    Query Parameters
    + +Succeeded. Returns a list of roles with information about insights for each role. + +
    Schema array
      role object
      + +A role + +
      insight object
      + +The kind of insight this is and some stats + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-role-mining-session-status.api.mdx b/docs/sailpoint-api-beta/get-role-mining-session-status.api.mdx new file mode 100644 index 000000000..3f0f968e3 --- /dev/null +++ b/docs/sailpoint-api-beta/get-role-mining-session-status.api.mdx @@ -0,0 +1,71 @@ +--- +id: get-role-mining-session-status +sidebar_label: Get role mining session status state +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getRoleMiningSessionStatus","tags":["IAI Role Mining"],"description":"This method returns a role mining session status for a customer.","parameters":[{"in":"path","name":"sessionId","schema":{"type":"string"},"required":true,"description":"The role mining session id","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"}],"responses":{"200":{"description":"Succeeded. Returns session status","content":{"application/json":{"schema":{"type":"object","properties":{"state":{"description":"The role mining session status. Can be one of these states - CREATED|UPDATED|IDENTITIES_OBTAINED|PRUNE_THRESHOLD_OBTAINED|POTENTIAL_ROLES_PROCESSING|POTENTIAL_ROLES_CREATED","type":"string","example":"CREATED"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/role-mining-sessions/{sessionId}/status","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get role mining session status state","description":{"content":"This method returns a role mining session status for a customer.","type":"text/plain"},"url":{"path":["role-mining-sessions",":sessionId","status"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The role mining session id","type":"text/plain"},"type":"any","value":"","key":"sessionId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get role mining session status state + + + +This method returns a role mining session status for a customer. + +
    Path Parameters
    + +Succeeded. Returns session status + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-role-mining-session.api.mdx b/docs/sailpoint-api-beta/get-role-mining-session.api.mdx new file mode 100644 index 000000000..e1ebedb04 --- /dev/null +++ b/docs/sailpoint-api-beta/get-role-mining-session.api.mdx @@ -0,0 +1,103 @@ +--- +id: get-role-mining-session +sidebar_label: Get a role mining session +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getRoleMiningSession","tags":["IAI Role Mining"],"description":"The method retrieves a role mining session.","parameters":[{"in":"path","name":"sessionId","schema":{"type":"string"},"required":true,"description":"The role mining session id to be retrieved.","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"}],"responses":{"200":{"description":"Returns a role mining session","content":{"application/json":{"schema":{"type":"object","properties":{"scope":{"description":"The scope of identities for this role mining session","type":"object","properties":{"identityIds":{"type":"array","items":{"type":"string"},"description":"The list of identities for this role mining session.","example":["2c918090761a5aac0176215c46a62d58","2c918090761a5aac01722015c46a62d42"]},"criteria":{"type":"string","description":"The \"search\" criteria that produces the list of identities for this role mining session.","example":"source.name:DataScienceDataset"},"attributeFilterCriteria":{"type":"array","items":{"type":"object"},"description":"The filter criteria for this role mining session.","example":{"displayName":{"untranslated":"Location: Miami"},"ariaLabel":{"untranslated":"Location: Miami"},"data":{"displayName":{"translateKey":"IDN.IDENTITY_ATTRIBUTES.LOCATION"},"name":"location","operator":"EQUALS","values":["Miami"]}}}}},"minNumIdentitiesInPotentialRole":{"type":"integer","description":"Minimum number of identities in a potential role","example":20},"prescribedPruneThreshold":{"type":"integer","description":"The computed (or prescribed) prune threshold for this session","example":83},"pruneThreshold":{"type":"integer","description":"The prune threshold to be used for this role mining session","example":70},"potentialRoleCount":{"type":"integer","description":"The number of potential roles","example":8},"potentialRolesReadyCount":{"type":"integer","description":"The number of potential roles which have completed processing","example":4},"status":{"description":"The role mining session status","type":"object","properties":{"state":{"description":"The role mining session status. Can be one of these states - CREATED|UPDATED|IDENTITIES_OBTAINED|PRUNE_THRESHOLD_OBTAINED|POTENTIAL_ROLES_PROCESSING|POTENTIAL_ROLES_CREATED","type":"string","example":"CREATED"}}},"id":{"type":"string","description":"Session Id for this role mining session","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},"createdDate":{"type":"string","format":"date-time","description":"The date-time when this role mining session was created."},"modifiedDate":{"type":"string","format":"date-time","description":"The date-time when this role mining session was completed."},"type":{"description":"Role mining session type","type":"string","enum":["SPECIALIZED","COMMON"],"example":"SPECIALIZED"}},"example":{"scope":{"identityIds":[],"criteria":"source.name:DataScienceDataset"},"minNumIdentitiesInPotentialRole":20,"pruneThreshold":70,"prescribedPruneThreshold":83,"potentialRoleCount":8,"potentialRolesReadyCount":4,"status":{"state":"POTENTIAL_ROLES_PROCESSING"},"id":"602ba738-cf48-499b-a780-7b67b3fc1ecf","createdDate":"2021-09-08T16:11:05.348Z","modifiedDate":"2021-09-08T16:11:05.348Z","type":"SPECIALIZED"}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/role-mining-sessions/{sessionId}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get a role mining session","description":{"content":"The method retrieves a role mining session.","type":"text/plain"},"url":{"path":["role-mining-sessions",":sessionId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The role mining session id to be retrieved.","type":"text/plain"},"type":"any","value":"","key":"sessionId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a role mining session + + + +The method retrieves a role mining session. + +
    Path Parameters
    + +Returns a role mining session + +
    Schema
      scope object
      + +The scope of identities for this role mining session + +
      status object
      + +The role mining session status + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-role-mining-sessions.api.mdx b/docs/sailpoint-api-beta/get-role-mining-sessions.api.mdx new file mode 100644 index 000000000..a441a529d --- /dev/null +++ b/docs/sailpoint-api-beta/get-role-mining-sessions.api.mdx @@ -0,0 +1,87 @@ +--- +id: get-role-mining-sessions +sidebar_label: Retrieves all role mining sessions +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getRoleMiningSessions","tags":["IAI Role Mining"],"description":"Returns all role mining sessions that match the query parameters","parameters":[{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) Filtering is supported for the following fields and operators: **saved**: *eq* \"true\" or \"false\" **name**: *eq, sw*","example":"saved eq \"true\" and name sw \"RM Session\""},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) Sorting is supported for the following fields: **createdBy, createdDate**","example":"createdBy,createdDate"},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Succeeded. Returns all role mining sessions that match the query parameters.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"scope":{"description":"The scope of identities for this role mining session","example":{"identityIds":[],"criteria":"source.name:DataScienceDataset","attributeFilterCriteria":{"displayName":{"untranslated":"Location: Miami"},"ariaLabel":{"untranslated":"Location: Miami"},"data":{"displayName":{"translateKey":"IDN.IDENTITY_ATTRIBUTES.LOCATION"},"name":"location","operator":"EQUALS","values":["Miami"]}}},"type":"object","properties":{"identityIds":{"type":"array","items":{"type":"string"},"description":"The list of identities for this role mining session.","example":["2c918090761a5aac0176215c46a62d58","2c918090761a5aac01722015c46a62d42"]},"criteria":{"type":"string","description":"The \"search\" criteria that produces the list of identities for this role mining session.","example":"source.name:DataScienceDataset"},"attributeFilterCriteria":{"type":"array","items":{"type":"object"},"description":"The filter criteria for this role mining session.","example":{"displayName":{"untranslated":"Location: Miami"},"ariaLabel":{"untranslated":"Location: Miami"},"data":{"displayName":{"translateKey":"IDN.IDENTITY_ATTRIBUTES.LOCATION"},"name":"location","operator":"EQUALS","values":["Miami"]}}}}},"pruneThreshold":{"type":"integer","description":"The prune threshold to be used or null to calculate prescribedPruneThreshold","example":5,"format":"int32"},"prescribedPruneThreshold":{"type":"integer","description":"The calculated prescribedPruneThreshold","example":10,"format":"int32"},"minNumIdentitiesInPotentialRole":{"type":"integer","description":"Minimum number of identities in a potential role","example":20,"format":"int32"},"potentialRoleCount":{"type":"integer","description":"Number of potential roles","example":0,"format":"int32"},"potentialRolesReadyCount":{"type":"integer","description":"Number of potential roles ready","example":0,"format":"int32"},"status":{"description":"The status of the role mining session","example":"CREATED","type":"object","properties":{"state":{"description":"The role mining session status. Can be one of these states - CREATED|UPDATED|IDENTITIES_OBTAINED|PRUNE_THRESHOLD_OBTAINED|POTENTIAL_ROLES_PROCESSING|POTENTIAL_ROLES_CREATED","type":"string","example":"CREATED"}}},"type":{"description":"Role mining session type","example":"SPECIALIZED","type":"string","enum":["SPECIALIZED","COMMON"]},"emailRecipientId":{"type":"string","description":"The id of the user who will receive an email about the role mining session","example":"2c918090761a5aac0176215c46a62d58"},"createdBy":{"description":"The session created by details","type":"object","properties":{"id":{"type":"string","description":"ID of the creator","example":"2c918090761a5aac0176215c46a62d58"},"displayName":{"type":"string","description":"The display name of the creator","example":"Ashley.Pierce"}}},"identityCount":{"type":"integer","description":"Number of identities in the population which meet the search criteria or identity list provided","example":0,"format":"int32"},"saved":{"type":"boolean","description":"The session's saved status","example":true},"name":{"type":"string","description":"The session's saved name","example":"Saved RM Session - 07/10"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/role-mining-sessions","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Retrieves all role mining sessions","description":{"content":"Returns all role mining sessions that match the query parameters","type":"text/plain"},"url":{"path":["role-mining-sessions"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) Filtering is supported for the following fields and operators: **saved**: *eq* \"true\" or \"false\" **name**: *eq, sw*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) Sorting is supported for the following fields: **createdBy, createdDate**","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Retrieves all role mining sessions + + + +Returns all role mining sessions that match the query parameters + +
    Query Parameters
    + +Succeeded. Returns all role mining sessions that match the query parameters. + +
    Schema array
      scope object
      + +The scope of identities for this role mining session + +
      status object
      + +The status of the role mining session + +
      createdBy object
      + +The session created by details + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-role.api.mdx b/docs/sailpoint-api-beta/get-role.api.mdx new file mode 100644 index 000000000..bbf8ef7e6 --- /dev/null +++ b/docs/sailpoint-api-beta/get-role.api.mdx @@ -0,0 +1,133 @@ +--- +id: get-role +sidebar_label: Get a Role +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getRole","tags":["Roles"],"description":"This API returns a Role by its ID.\n\nA token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to call this API. In addition, a token with ROLE_SUBADMIN authority may only call this API if all Access Profiles included in the Role are associated to Sources with management workgroups of which the ROLE_SUBADMIN is a member.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"ID of the Role","example":"2c91808a7813090a017814121e121518"}],"responses":{"200":{"description":"List of all Roles","content":{"application/json":{"schema":{"type":"object","description":"A Role","properties":{"id":{"type":"string","description":"The id of the Role. This field must be left null when creating an Role, otherwise a 400 Bad Request error will result.","example":"2c918086749d78830174a1a40e121518"},"name":{"type":"string","description":"The human-readable display name of the Role","maxLength":128,"example":"Role 2567"},"created":{"type":"string","description":"Date the Role was created","format":"date-time","example":"2021-03-01T22:32:58.104Z","readOnly":true},"modified":{"type":"string","description":"Date the Role was last modified.","format":"date-time","example":"2021-03-02T20:22:28.104Z","readOnly":true},"description":{"type":"string","nullable":true,"description":"A human-readable description of the Role","example":"Urna amet cursus pellentesque nisl orci maximus lorem nisl euismod fusce morbi placerat adipiscing maecenas nisi tristique et metus et lacus sed morbi nunc nisl maximus magna arcu varius sollicitudin elementum enim maecenas nisi id ipsum tempus fusce diam ipsum tortor."},"owner":{"type":"object","description":"The owner of this object.","properties":{"type":{"description":"Owner type. This field must be either left null or set to 'IDENTITY' on input, otherwise a 400 Bad Request error will result.","example":"IDENTITY","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"]},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of the owner. It may be left null or omitted in a POST or PATCH. If set, it must match the current value of the owner's display name, otherwise a 400 Bad Request error will result.","example":"support"}}},"accessProfiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the Access Profile","example":"ff808081751e6e129f1518161919ecca"},"type":{"type":"string","description":"Type of requested object. This field must be either left null or set to 'ACCESS_PROFILE' when creating an Access Profile, otherwise a 400 Bad Request error will result.","enum":["ACCESS_PROFILE"],"example":"ACCESS_PROFILE"},"name":{"type":"string","description":"Human-readable display name of the Access Profile. This field is ignored on input.","example":"Access Profile 2567"}}},"nullable":true},"membership":{"nullable":true,"type":"object","description":"When present, specifies that the Role is to be granted to Identities which either satisfy specific criteria or which are members of a given list of Identities.","properties":{"type":{"type":"string","enum":["STANDARD","IDENTITY_LIST"],"description":"This enum characterizes the type of a Role's membership selector. Only the following two are fully supported:\n\nSTANDARD: Indicates that Role membership is defined in terms of a criteria expression\n\nIDENTITY_LIST: Indicates that Role membership is conferred on the specific identities listed","example":"IDENTITY_LIST"},"criteria":{"nullable":true,"type":"object","description":"Defines STANDARD type Role membership","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","STARTS_WITH","ENDS_WITH","AND","OR"],"description":"An operation","example":"EQUALS"},"key":{"type":"object","description":"Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria","properties":{"type":{"type":"string","enum":["IDENTITY","ACCOUNT","ENTITLEMENT"],"description":"Indicates whether the associated criteria represents an expression on identity attributes, account attributes, or entitlements, respectively.","example":"ACCOUNT"},"property":{"type":"string","description":"The name of the attribute or entitlement to which the associated criteria applies.","example":"attribute.email"},"sourceId":{"type":"string","nullable":true,"description":"ID of the Source from which an account attribute or entitlement is drawn. Required if type is ACCOUNT or ENTITLEMENT","example":"2c9180867427f3a301745aec18211519"}},"required":["type","property"]},"stringValue":{"type":"string","description":"String value to test the Identity attribute, Account attribute, or Entitlement specified in the key w/r/t the specified operation. If this criteria is a leaf node, that is, if the operation is one of EQUALS, NOT_EQUALS, CONTAINS, STARTS_WITH, or ENDS_WITH, this field is required. Otherwise, specifying it is an error.","example":"carlee.cert1c9f9b6fd@mailinator.com"},"children":{"type":"array","items":{"type":"object","description":"Defines STANDARD type Role membership","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","STARTS_WITH","ENDS_WITH","AND","OR"],"description":"An operation","example":"EQUALS"},"key":{"type":"object","description":"Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria","properties":{"type":{"type":"string","enum":["IDENTITY","ACCOUNT","ENTITLEMENT"],"description":"Indicates whether the associated criteria represents an expression on identity attributes, account attributes, or entitlements, respectively.","example":"ACCOUNT"},"property":{"type":"string","description":"The name of the attribute or entitlement to which the associated criteria applies.","example":"attribute.email"},"sourceId":{"type":"string","nullable":true,"description":"ID of the Source from which an account attribute or entitlement is drawn. Required if type is ACCOUNT or ENTITLEMENT","example":"2c9180867427f3a301745aec18211519"}},"required":["type","property"]},"stringValue":{"type":"string","description":"String value to test the Identity attribute, Account attribute, or Entitlement specified in the key w/r/t the specified operation. If this criteria is a leaf node, that is, if the operation is one of EQUALS, NOT_EQUALS, CONTAINS, STARTS_WITH, or ENDS_WITH, this field is required. Otherwise, specifying it is an error.","example":"carlee.cert1c9f9b6fd@mailinator.com"},"children":{"type":"array","items":{"type":"object","description":"Defines STANDARD type Role membership","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","STARTS_WITH","ENDS_WITH","AND","OR"],"description":"An operation","example":"EQUALS"},"key":{"type":"object","description":"Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria","properties":{"type":{"type":"string","enum":["IDENTITY","ACCOUNT","ENTITLEMENT"],"description":"Indicates whether the associated criteria represents an expression on identity attributes, account attributes, or entitlements, respectively.","example":"ACCOUNT"},"property":{"type":"string","description":"The name of the attribute or entitlement to which the associated criteria applies.","example":"attribute.email"},"sourceId":{"type":"string","nullable":true,"description":"ID of the Source from which an account attribute or entitlement is drawn. Required if type is ACCOUNT or ENTITLEMENT","example":"2c9180867427f3a301745aec18211519"}},"required":["type","property"]},"stringValue":{"type":"string","description":"String value to test the Identity attribute, Account attribute, or Entitlement specified in the key w/r/t the specified operation. If this criteria is a leaf node, that is, if the operation is one of EQUALS, NOT_EQUALS, CONTAINS, STARTS_WITH, or ENDS_WITH, this field is required. Otherwise, specifying it is an error.","example":"carlee.cert1c9f9b6fd@mailinator.com"}}},"nullable":true,"description":"Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be children or OR nodes and vice-versa."}}},"nullable":true,"description":"Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be children or OR nodes and vice-versa."}}},"identities":{"type":"array","items":{"type":"object","description":"A reference to an Identity in an IDENTITY_LIST role membership criteria.","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY","nullable":true},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","nullable":true,"description":"Human-readable display name of the Identity.","example":"Thomas Edison"},"aliasName":{"type":"string","nullable":true,"description":"User name of the Identity","example":"t.edison"}}},"nullable":true,"description":"Defines role membership as being exclusive to the specified Identities, when type is IDENTITY_LIST."}}},"legacyMembershipInfo":{"type":"object","nullable":true,"description":"This field is not directly modifiable and is generally expected to be *null*. In very rare instances, some Roles may have been created using membership selection criteria that are no longer fully supported. While these Roles will still work, they should be migrated to STANDARD or IDENTITY_LIST selection criteria. This field exists for informational purposes as an aid to such migration.","example":{"type":"IDENTITY_LIST"},"additionalProperties":true},"enabled":{"type":"boolean","description":"Whether the Role is enabled or not. This field is false by default.","example":true},"requestable":{"type":"boolean","description":"Whether the Role can be the target of Access Requests. This field is false by default.","example":true},"accessRequestConfig":{"nullable":true,"description":"Access request configuration for this object","type":"object","properties":{"commentsRequired":{"type":"boolean","description":"Whether the requester of the containing object must provide comments justifying the request","example":true},"denialCommentsRequired":{"type":"boolean","description":"Whether an approver must provide comments when denying the request","example":true},"approvalSchemes":{"type":"array","description":"List describing the steps in approving the request","items":{"type":"object","properties":{"approverType":{"type":"string","enum":["OWNER","MANAGER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step. Values are as follows.\n\n**OWNER**: Owner of the associated Role\n\n**MANAGER**: Manager of the Identity making the request\n\n**GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field","example":"GOVERNANCE_GROUP"},"approverId":{"type":"string","description":"Id of the specific approver, used only when approverType is GOVERNANCE_GROUP","example":"46c79819-a69f-49a2-becb-12c971ae66c6"}}}}}},"revocationRequestConfig":{"nullable":true,"description":"Revocation request configuration for this object.","type":"object","properties":{"approvalSchemes":{"type":"array","description":"List describing the steps in approving the revocation request","items":{"type":"object","properties":{"approverType":{"type":"string","enum":["OWNER","SOURCE_OWNER","MANAGER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step. Values are as follows.\n\n**OWNER**: Owner of the associated Access Profile or Role\n\n**SOURCE_OWNER**: Owner of the Source associated with an Access Profile\n\n**MANAGER**: Manager of the Identity making the request\n\n**GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field","example":"GOVERNANCE_GROUP"},"approverId":{"type":"string","description":"Id of the specific approver, used only when approverType is GOVERNANCE_GROUP","example":"46c79819-a69f-49a2-becb-12c971ae66c6"}}}}}},"segments":{"type":"array","items":{"type":"string"},"nullable":true,"description":"List of IDs of segments, if any, to which this Role is assigned.","example":["f7b1b8a3-5fed-4fd4-ad29-82014e137e19","29cb6c06-1da8-43ea-8be4-b3125f248f2a"]}},"required":["name"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:role:read","idn:role-checked:read"]}],"method":"get","path":"/roles/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get a Role","description":{"content":"This API returns a Role by its ID.\n\nA token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to call this API. In addition, a token with ROLE_SUBADMIN authority may only call this API if all Access Profiles included in the Role are associated to Sources with management workgroups of which the ROLE_SUBADMIN is a member.","type":"text/plain"},"url":{"path":["roles",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the Role","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a Role + + + +This API returns a Role by its ID. + +A token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to call this API. In addition, a token with ROLE_SUBADMIN authority may only call this API if all Access Profiles included in the Role are associated to Sources with management workgroups of which the ROLE_SUBADMIN is a member. + +
    Path Parameters
    + +List of all Roles + +
    Schema
      owner object
      + +The owner of this object. + +
      accessProfiles object[]
      membership object
      + +When present, specifies that the Role is to be granted to Identities which either satisfy specific criteria or which are members of a given list of Identities. + +
      criteria object
      + +Defines STANDARD type Role membership + +
      key object
      + +Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria + +
      children object[]
      + +Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be children or OR nodes and vice-versa. + +
      key object
      + +Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria + +
      children object[]
      + +Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be children or OR nodes and vice-versa. + +
      key object
      + +Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria + +
      identities object[]
      + +Defines role membership as being exclusive to the specified Identities, when type is IDENTITY_LIST. + +
      legacyMembershipInfo object
      + +This field is not directly modifiable and is generally expected to be *null*. In very rare instances, some Roles may have been created using membership selection criteria that are no longer fully supported. While these Roles will still work, they should be migrated to STANDARD or IDENTITY_LIST selection criteria. This field exists for informational purposes as an aid to such migration. + +
      accessRequestConfig object
      + +Access request configuration for this object + +
      approvalSchemes object[]
      + +List describing the steps in approving the request + +
      revocationRequestConfig object
      + +Revocation request configuration for this object. + +
      approvalSchemes object[]
      + +List describing the steps in approving the revocation request + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-schema-attribute.api.mdx b/docs/sailpoint-api-beta/get-schema-attribute.api.mdx new file mode 100644 index 000000000..71dc0a2f0 --- /dev/null +++ b/docs/sailpoint-api-beta/get-schema-attribute.api.mdx @@ -0,0 +1,63 @@ +--- +id: get-schema-attribute +sidebar_label: Get Schema Attribute Non-Employee Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getSchemaAttribute","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This API gets a schema attribute by Id for the specified Non-Employee SourceId.","parameters":[{"in":"path","name":"attributeId","schema":{"type":"string"},"required":true,"description":"The Schema Attribute Id (UUID)"},{"in":"path","name":"sourceId","schema":{"type":"string"},"required":true,"description":"The Source id"}],"responses":{"200":{"description":"The Schema Attribute","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"UUID","example":"ac110005-7156-1150-8171-5b292e3e0084","description":"Schema Attribute Id"},"system":{"type":"boolean","description":"True if this schema attribute is mandatory on all non-employees sources.","example":true},"modified":{"type":"string","format":"date-time","description":"When the schema attribute was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the schema attribute was created.","example":"2019-08-23T18:40:35.772Z"},"type":{"type":"string","enum":["TEXT","DATE","IDENTITY"],"description":"Enum representing the type of data a schema attribute accepts."},"label":{"type":"string","description":"Label displayed on the UI for this schema attribute.","example":"Account Name"},"technicalName":{"type":"string","description":"The technical name of the attribute. Must be unique per source.","example":"account.name"},"helpText":{"type":"string","description":"help text displayed by UI.","example":"The unique identifier for the account"},"placeholder":{"type":"string","description":"Hint text that fills UI box.","example":"Enter a unique user name for this account."},"required":{"type":"boolean","description":"If true, the schema attribute is required for all non-employees in the source","example":true}},"required":["type","technicalName","label"]}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-sources/{sourceId}/schema-attributes/{attributeId}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Schema Attribute Non-Employee Source","description":{"content":"This API gets a schema attribute by Id for the specified Non-Employee SourceId.","type":"text/plain"},"url":{"path":["non-employee-sources",":sourceId","schema-attributes",":attributeId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Schema Attribute Id (UUID)","type":"text/plain"},"type":"any","value":"","key":"attributeId"},{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Schema Attribute Non-Employee Source + + + +This API gets a schema attribute by Id for the specified Non-Employee SourceId. + +
    Path Parameters
    + +The Schema Attribute + +
    Schema
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-schema-attributes.api.mdx b/docs/sailpoint-api-beta/get-schema-attributes.api.mdx new file mode 100644 index 000000000..5e71f7632 --- /dev/null +++ b/docs/sailpoint-api-beta/get-schema-attributes.api.mdx @@ -0,0 +1,75 @@ +--- +id: get-schema-attributes +sidebar_label: List Schema Attributes Non-Employee Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getSchemaAttributes","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This API gets the list of schema attributes for the specified Non-Employee SourceId. There are 8 mandatory attributes added to each new Non-Employee Source automatically. Additionaly, user can add up to 10 custom attributes. This interface returns all the mandatory attributes followed by any custom attributes. At most, a total of 18 attributes will be returned.","parameters":[{"in":"path","name":"sourceId","schema":{"type":"string"},"required":true,"description":"The Source id"}],"responses":{"200":{"description":"A list of Schema Attributes","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"UUID","example":"ac110005-7156-1150-8171-5b292e3e0084","description":"Schema Attribute Id"},"system":{"type":"boolean","description":"True if this schema attribute is mandatory on all non-employees sources.","example":true},"modified":{"type":"string","format":"date-time","description":"When the schema attribute was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the schema attribute was created.","example":"2019-08-23T18:40:35.772Z"},"type":{"type":"string","enum":["TEXT","DATE","IDENTITY"],"description":"Enum representing the type of data a schema attribute accepts."},"label":{"type":"string","description":"Label displayed on the UI for this schema attribute.","example":"Account Name"},"technicalName":{"type":"string","description":"The technical name of the attribute. Must be unique per source.","example":"account.name"},"helpText":{"type":"string","description":"help text displayed by UI.","example":"The unique identifier for the account"},"placeholder":{"type":"string","description":"Hint text that fills UI box.","example":"Enter a unique user name for this account."},"required":{"type":"boolean","description":"If true, the schema attribute is required for all non-employees in the source","example":true}},"required":["type","technicalName","label"]},"maxItems":18}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-sources/{sourceId}/schema-attributes","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Schema Attributes Non-Employee Source","description":{"content":"This API gets the list of schema attributes for the specified Non-Employee SourceId. There are 8 mandatory attributes added to each new Non-Employee Source automatically. Additionaly, user can add up to 10 custom attributes. This interface returns all the mandatory attributes followed by any custom attributes. At most, a total of 18 attributes will be returned.","type":"text/plain"},"url":{"path":["non-employee-sources",":sourceId","schema-attributes"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Schema Attributes Non-Employee Source + + + +This API gets the list of schema attributes for the specified Non-Employee SourceId. There are 8 mandatory attributes added to each new Non-Employee Source automatically. Additionaly, user can add up to 10 custom attributes. This interface returns all the mandatory attributes followed by any custom attributes. At most, a total of 18 attributes will be returned. + +
    Path Parameters
    + +A list of Schema Attributes + +
    Schema array
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-schema.api.mdx b/docs/sailpoint-api-beta/get-schema.api.mdx new file mode 100644 index 000000000..489ab857b --- /dev/null +++ b/docs/sailpoint-api-beta/get-schema.api.mdx @@ -0,0 +1,96 @@ +--- +id: get-schema +sidebar_label: Get Source Schema by ID +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getSchema","tags":["Sources"],"description":"Get the Source Schema by ID in IdentityNow.\n","parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source ID.","example":"2c9180835d191a86015d28455b4a2329"},{"in":"path","name":"schemaId","schema":{"type":"string"},"required":true,"description":"The Schema ID.","example":"2c9180835d191a86015d28455b4a2329"}],"responses":{"200":{"description":"The requested Schema was successfully retrieved.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Schema.","example":"2c9180835d191a86015d28455b4a2329"},"name":{"type":"string","description":"The name of the Schema.","example":"account"},"nativeObjectType":{"type":"string","description":"The name of the object type on the native system that the schema represents.","example":"User"},"identityAttribute":{"type":"string","description":"The name of the attribute used to calculate the unique identifier for an object in the schema.","example":"sAMAccountName"},"displayAttribute":{"type":"string","description":"The name of the attribute used to calculate the display value for an object in the schema.","example":"distinguishedName"},"hierarchyAttribute":{"type":"string","description":"The name of the attribute whose values represent other objects in a hierarchy. Only relevant to group schemas.","example":"memberOf"},"includePermissions":{"type":"boolean","description":"Flag indicating whether or not the include permissions with the object data when aggregating the schema.","example":false},"features":{"type":"array","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"description":"The features that the schema supports.","example":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"]},"configuration":{"type":"object","description":"Holds any extra configuration data that the schema may require.","example":{"groupMemberAttribute":"member"}},"attributes":{"type":"array","description":"The attribute definitions which form the schema.","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"sAMAccountName"},"type":{"description":"The type of the attribute.","example":"string","type":"string","enum":["STRING","LONG","INT","BOOLEAN"]},"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"A reference to the schema on the source to which the values of the attribute map.","example":{"type":"CONNECTOR_SCHEMA","id":"2c9180866166b5b0016167c32ef31a66","name":"group"}},"description":{"type":"string","description":"A human-readable description of the attribute."},"isMulti":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","example":false},"isEntitlement":{"type":"boolean","description":"Flag indicating whether or not the attribute is an entitlement.","example":false},"isGroup":{"type":"boolean","description":"Unmodifiable flag indicating whether or not the attribute represents a group.","example":false,"readOnly":true}}},"example":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}]},"created":{"type":"string","description":"The date the Schema was created.","format":"date-time","example":"2019-12-24T22:32:58.104Z"},"modified":{"type":"string","description":"The date the Schema was last modified.","format":"date-time","example":"2019-12-31T20:22:28.104Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sources/{sourceId}/schemas/{schemaId}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Source Schema by ID","description":{"content":"Get the Source Schema by ID in IdentityNow.\n","type":"text/plain"},"url":{"path":["sources",":sourceId","schemas",":schemaId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source ID.","type":"text/plain"},"type":"any","value":"","key":"sourceId"},{"disabled":false,"description":{"content":"(Required) The Schema ID.","type":"text/plain"},"type":"any","value":"","key":"schemaId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Source Schema by ID + + + +Get the Source Schema by ID in IdentityNow. + + +
    Path Parameters
    + +The requested Schema was successfully retrieved. + +
    Schema
      attributes object[]
      + +The attribute definitions which form the schema. + +
      schema object
      + +A reference to the schema on the source to which the values of the attribute map. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-search-attribute-config.api.mdx b/docs/sailpoint-api-beta/get-search-attribute-config.api.mdx new file mode 100644 index 000000000..d8bce1b10 --- /dev/null +++ b/docs/sailpoint-api-beta/get-search-attribute-config.api.mdx @@ -0,0 +1,64 @@ +--- +id: get-search-attribute-config +sidebar_label: Retrieve a list of extended search attributes in IdentityNow. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getSearchAttributeConfig","tags":["Search Attribute Configuration"],"description":"This API retrieves a list of attribute/application associates currently configured in IdentityNow.\nA token with ORG_ADMIN authority is required to call this API.","responses":{"200":{"description":"List of attribute configurations in IdentityNow.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Name of the new attribute","example":"newMailAttribute"},"displayName":{"type":"string","description":"The display name of the new attribute","example":"New Mail Attribute"},"applicationAttributes":{"type":"object","description":"Map of application id and their associated attribute.","example":{"2c91808b79fd2422017a0b35d30f3968":"employeeNumber","2c91808b79fd2422017a0b36008f396b":"employeeNumber"}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/accounts/search-attribute-config","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Retrieve a list of extended search attributes in IdentityNow.","description":{"content":"This API retrieves a list of attribute/application associates currently configured in IdentityNow.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts","search-attribute-config"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Retrieve a list of extended search attributes in IdentityNow. + + + +This API retrieves a list of attribute/application associates currently configured in IdentityNow. +A token with ORG_ADMIN authority is required to call this API. + +
    + +List of attribute configurations in IdentityNow. + +
    Schema array
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-segment-by-id.api.mdx b/docs/sailpoint-api-beta/get-segment-by-id.api.mdx new file mode 100644 index 000000000..58aaabbe7 --- /dev/null +++ b/docs/sailpoint-api-beta/get-segment-by-id.api.mdx @@ -0,0 +1,85 @@ +--- +id: get-segment-by-id +sidebar_label: Get a Segment by its ID +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getSegmentById","tags":["Segments"],"description":"This API returns the segment specified by the given ID.\n\nA token with ORG_ADMIN or API authority is required to call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the Segment to retrieve.","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"Segment","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"name":{"type":"string","description":"Segment Business Name","example":"segment-xyz"},"created":{"type":"string","format":"date-time","description":"The time when this Segment is created","example":"2020-01-01T00:00:00.000000Z"},"modified":{"type":"string","format":"date-time","description":"The time when this Segment is modified","example":"2020-01-01T00:00:00.000000Z"},"description":{"type":"string","description":"Optional description of the Segment","example":"This segment represents xyz"},"owner":{"type":"object","description":"The owner of this object.","properties":{"type":{"description":"Owner type. This field must be either left null or set to 'IDENTITY' on input, otherwise a 400 Bad Request error will result.","example":"IDENTITY","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"]},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of the owner. It may be left null or omitted in a POST or PATCH. If set, it must match the current value of the owner's display name, otherwise a 400 Bad Request error will result.","example":"support"}}},"visibilityCriteria":{"type":"object","properties":{"expression":{"type":"object","properties":{"operator":{"type":"string","description":"Operator for the expression","enum":["AND","EQUALS"],"example":"EQUALS"},"attribute":{"type":"string","description":"Name for the attribute","example":"location"},"value":{"type":"object","properties":{"type":{"type":"string","description":"The type of attribute value","example":"STRING"},"value":{"type":"string","description":"The attribute value","example":"Austin"}}},"children":{"type":"array","description":"List of expressions","items":{"type":"object","properties":{"type":{"type":"string","description":"The type of attribute value","example":"STRING"},"value":{"type":"string","description":"The attribute value","example":"Austin"}}},"example":[]}}}}},"active":{"type":"boolean","description":"Whether the Segment is currently active. Inactive segments have no effect."}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/segments/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get a Segment by its ID","description":{"content":"This API returns the segment specified by the given ID.\n\nA token with ORG_ADMIN or API authority is required to call this API.","type":"text/plain"},"url":{"path":["segments",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the Segment to retrieve.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a Segment by its ID + + + +This API returns the segment specified by the given ID. + +A token with ORG_ADMIN or API authority is required to call this API. + +
    Path Parameters
    + +Segment + +
    Schema
      owner object
      + +The owner of this object. + +
      visibilityCriteria object
      expression object
      value object
      children object[]
      + +List of expressions + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-service-desk-integration-list.api.mdx b/docs/sailpoint-api-beta/get-service-desk-integration-list.api.mdx new file mode 100644 index 000000000..b6fb09a6e --- /dev/null +++ b/docs/sailpoint-api-beta/get-service-desk-integration-list.api.mdx @@ -0,0 +1,87 @@ +--- +id: get-service-desk-integration-list +sidebar_label: List existing Service Desk Integrations +hide_title: true +hide_table_of_contents: true +api: {"tags":["Service Desk Integration"],"description":"Get a list of ServiceDeskIntegrationDto for existing Service Desk Integrations. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","operationId":"getServiceDeskIntegrationList","parameters":[{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"name":"sorters","in":"query","required":false,"style":"form","explode":true,"schema":{"type":"string"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **name**"},{"name":"filters","in":"query","required":false,"style":"form","explode":true,"schema":{"type":"string","format":"comma-separated"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**name**: *eq*\n\n**type**: *eq, in*\n\n**cluster**: *eq, in*"},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"List of ServiceDeskIntegrationDto","content":{"application/json":{"schema":{"type":"array","items":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","format":"date-time","readOnly":true,"example":true},"modified":{"description":"Last modification date of the Object","type":"string","format":"date-time","readOnly":true,"example":true}}},{"type":"object","description":"Specification of a Service Desk integration","required":["description","type","attributes"],"properties":{"description":{"description":"Description of the Service Desk integration","type":"string","example":"A very nice Service Desk integration"},"type":{"description":"Type of the Service Desk integration","type":"string","default":"ServiceNowSDIM"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the identity that is the owner of this Service Desk integration","default":{"type":"IDENTITY"}},"clusterRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the source cluster for this Service Desk integration","default":{"type":"CLUSTER"}},"cluster":{"description":"ID of the cluster for the Service Desk integration (replaced by clusterRef, retained for backward compatibility)","type":"string","example":"xyzzy999","deprecated":true},"managedSources":{"description":"Source IDs for the Service Desk integration (replaced by provisioningConfig.managedSResourceRefs, but retained here for backward compatibility)","type":"array","items":{"type":"string"},"deprecated":true},"provisioningConfig":{"description":"The 'provisioningConfig' property specifies the configuration used to provision integrations.","type":"object","properties":{"universalManager":{"description":"Specifies whether this configuration is used to manage provisioning requests for all sources from the org. If true, no managedResourceRefs are allowed.","type":"boolean","readOnly":true},"managedResourceRefs":{"description":"References to sources for the Service Desk integration template. May only be specified if universalManager is false.","type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"default":{"type":"SOURCE"}}},"planInitializerScript":{"description":"This is a reference to a plan initializer script.","type":"object","properties":{"source":{"description":"This is a Rule that allows provisioning instruction changes.","type":"string"}}}}},"attributes":{"description":"Attributes of the Service Desk integration. Validation constraints enforced by the implementation.","type":"object","additionalProperties":true},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to beforeProvisioningRule for this Service Desk integration","default":{"type":"RULE"}}}}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:service-desk-admin:read","idn:service-desk-integration:read"]}],"method":"get","path":"/service-desk-integrations","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List existing Service Desk Integrations","description":{"content":"Get a list of ServiceDeskIntegrationDto for existing Service Desk Integrations. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","type":"text/plain"},"url":{"path":["service-desk-integrations"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **name**","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**name**: *eq*\n\n**type**: *eq, in*\n\n**cluster**: *eq, in*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List existing Service Desk Integrations + + + +Get a list of ServiceDeskIntegrationDto for existing Service Desk Integrations. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + +
    Query Parameters
    + +List of ServiceDeskIntegrationDto + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-service-desk-integration-template.api.mdx b/docs/sailpoint-api-beta/get-service-desk-integration-template.api.mdx new file mode 100644 index 000000000..c99ec3fba --- /dev/null +++ b/docs/sailpoint-api-beta/get-service-desk-integration-template.api.mdx @@ -0,0 +1,103 @@ +--- +id: get-service-desk-integration-template +sidebar_label: Service Desk integration template by scriptName. +hide_title: true +hide_table_of_contents: true +api: {"tags":["Service Desk Integration"],"description":"This API endpoint returns an existing Service Desk integration template by scriptName. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","operationId":"getServiceDeskIntegrationTemplate","parameters":[{"name":"scriptName","in":"path","description":"The scriptName value of the Service Desk integration template to get","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"aScriptName"}}],"responses":{"200":{"description":"Responds with the ServiceDeskIntegrationTemplateDto with the specified scriptName.","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","format":"date-time","readOnly":true,"example":true},"modified":{"description":"Last modification date of the Object","type":"string","format":"date-time","readOnly":true,"example":true}}},{"type":"object","description":"This is the model for a Service Desk integration template, used to create and edit Service Desk Integrations.","required":["type","attributes","provisioningConfig"],"properties":{"type":{"description":"The 'type' property specifies the type of the Service Desk integration template.","type":"string","example":"Web Service SDIM","default":"Web Service SDIM"},"attributes":{"description":"The 'attributes' property value is a map of attributes available for integrations using this Service Desk integration template.","type":"object","additionalProperties":true},"provisioningConfig":{"description":"The 'provisioningConfig' property specifies the configuration used to provision integrations using the template.","type":"object","properties":{"universalManager":{"description":"Specifies whether this configuration is used to manage provisioning requests for all sources from the org. If true, no managedResourceRefs are allowed.","type":"boolean","readOnly":true},"managedResourceRefs":{"description":"References to sources for the Service Desk integration template. May only be specified if universalManager is false.","type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"default":{"type":"SOURCE"}}},"planInitializerScript":{"description":"This is a reference to a plan initializer script.","type":"object","properties":{"source":{"description":"This is a Rule that allows provisioning instruction changes.","type":"string"}}}}}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:service-desk-admin:read","idn:service-desk-integration:read"]}],"method":"get","path":"/service-desk-integrations/templates/{scriptName}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Service Desk integration template by scriptName.","description":{"content":"This API endpoint returns an existing Service Desk integration template by scriptName. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","type":"text/plain"},"url":{"path":["service-desk-integrations","templates",":scriptName"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The scriptName value of the Service Desk integration template to get","type":"text/plain"},"type":"any","value":"","key":"scriptName"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Service Desk integration template by scriptName. + + + +This API endpoint returns an existing Service Desk integration template by scriptName. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + +
    Path Parameters
    + +Responds with the ServiceDeskIntegrationTemplateDto with the specified scriptName. + +
    Schema
      attributes object
      + +The 'attributes' property value is a map of attributes available for integrations using this Service Desk integration template. + +
      provisioningConfig object
      + +The 'provisioningConfig' property specifies the configuration used to provision integrations using the template. + +
      managedResourceRefs object[]
      + +References to sources for the Service Desk integration template. May only be specified if universalManager is false. + +
      planInitializerScript object
      + +This is a reference to a plan initializer script. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-service-desk-integration-types.api.mdx b/docs/sailpoint-api-beta/get-service-desk-integration-types.api.mdx new file mode 100644 index 000000000..da7837d3d --- /dev/null +++ b/docs/sailpoint-api-beta/get-service-desk-integration-types.api.mdx @@ -0,0 +1,87 @@ +--- +id: get-service-desk-integration-types +sidebar_label: Service Desk Integration Types List. +hide_title: true +hide_table_of_contents: true +api: {"tags":["Service Desk Integration"],"description":"This API endpoint returns the current list of supported Service Desk integration types. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","operationId":"getServiceDeskIntegrationTypes","responses":{"200":{"description":"Responds with an array of the currently supported Service Desk integration types.","content":{"application/json":{"schema":{"type":"array","items":{"description":"This represents a Service Desk Integration template type.","required":["type","scriptName"],"type":"object","properties":{"name":{"description":"This is the name of the type.","example":"aName","type":"string"},"type":{"description":"This is the type value for the type.","example":"aType","type":"string"},"scriptName":{"description":"This is the scriptName attribute value for the type.","example":"aScriptName","type":"string"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:service-desk-admin:read","idn:service-desk-integration:read"]}],"method":"get","path":"/service-desk-integrations/types","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Service Desk Integration Types List.","description":{"content":"This API endpoint returns the current list of supported Service Desk integration types. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","type":"text/plain"},"url":{"path":["service-desk-integrations","types"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Service Desk Integration Types List. + + + +This API endpoint returns the current list of supported Service Desk integration types. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + +
    + +Responds with an array of the currently supported Service Desk integration types. + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-service-desk-integration.api.mdx b/docs/sailpoint-api-beta/get-service-desk-integration.api.mdx new file mode 100644 index 000000000..8d4d0f2a5 --- /dev/null +++ b/docs/sailpoint-api-beta/get-service-desk-integration.api.mdx @@ -0,0 +1,115 @@ +--- +id: get-service-desk-integration +sidebar_label: Get a Service Desk integration by ID +hide_title: true +hide_table_of_contents: true +api: {"tags":["Service Desk Integration"],"description":"Get an existing Service Desk integration by ID. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","operationId":"getServiceDeskIntegration","parameters":[{"name":"id","in":"path","description":"ID of the Service Desk integration to get","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"anId"}}],"responses":{"200":{"description":"ServiceDeskIntegrationDto with the given ID","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","format":"date-time","readOnly":true,"example":true},"modified":{"description":"Last modification date of the Object","type":"string","format":"date-time","readOnly":true,"example":true}}},{"type":"object","description":"Specification of a Service Desk integration","required":["description","type","attributes"],"properties":{"description":{"description":"Description of the Service Desk integration","type":"string","example":"A very nice Service Desk integration"},"type":{"description":"Type of the Service Desk integration","type":"string","default":"ServiceNowSDIM"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the identity that is the owner of this Service Desk integration","default":{"type":"IDENTITY"}},"clusterRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the source cluster for this Service Desk integration","default":{"type":"CLUSTER"}},"cluster":{"description":"ID of the cluster for the Service Desk integration (replaced by clusterRef, retained for backward compatibility)","type":"string","example":"xyzzy999","deprecated":true},"managedSources":{"description":"Source IDs for the Service Desk integration (replaced by provisioningConfig.managedSResourceRefs, but retained here for backward compatibility)","type":"array","items":{"type":"string"},"deprecated":true},"provisioningConfig":{"description":"The 'provisioningConfig' property specifies the configuration used to provision integrations.","type":"object","properties":{"universalManager":{"description":"Specifies whether this configuration is used to manage provisioning requests for all sources from the org. If true, no managedResourceRefs are allowed.","type":"boolean","readOnly":true},"managedResourceRefs":{"description":"References to sources for the Service Desk integration template. May only be specified if universalManager is false.","type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"default":{"type":"SOURCE"}}},"planInitializerScript":{"description":"This is a reference to a plan initializer script.","type":"object","properties":{"source":{"description":"This is a Rule that allows provisioning instruction changes.","type":"string"}}}}},"attributes":{"description":"Attributes of the Service Desk integration. Validation constraints enforced by the implementation.","type":"object","additionalProperties":true},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to beforeProvisioningRule for this Service Desk integration","default":{"type":"RULE"}}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:service-desk-admin:read","idn:service-desk-integration:read"]}],"method":"get","path":"/service-desk-integrations/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get a Service Desk integration by ID","description":{"content":"Get an existing Service Desk integration by ID. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","type":"text/plain"},"url":{"path":["service-desk-integrations",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the Service Desk integration to get","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a Service Desk integration by ID + + + +Get an existing Service Desk integration by ID. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + +
    Path Parameters
    + +ServiceDeskIntegrationDto with the given ID + +
    Schema
      ownerRef object
      + +Reference to the identity that is the owner of this Service Desk integration + +
      clusterRef object
      + +Reference to the source cluster for this Service Desk integration + +
      provisioningConfig object
      + +The 'provisioningConfig' property specifies the configuration used to provision integrations. + +
      managedResourceRefs object[]
      + +References to sources for the Service Desk integration template. May only be specified if universalManager is false. + +
      planInitializerScript object
      + +This is a reference to a plan initializer script. + +
      attributes object
      + +Attributes of the Service Desk integration. Validation constraints enforced by the implementation. + +
      beforeProvisioningRule object
      + +Reference to beforeProvisioningRule for this Service Desk integration + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-single-search-attribute-config.api.mdx b/docs/sailpoint-api-beta/get-single-search-attribute-config.api.mdx new file mode 100644 index 000000000..c880de6a7 --- /dev/null +++ b/docs/sailpoint-api-beta/get-single-search-attribute-config.api.mdx @@ -0,0 +1,80 @@ +--- +id: get-single-search-attribute-config +sidebar_label: Get the details of a specific extended search attribute in IdentityNow. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getSingleSearchAttributeConfig","tags":["Search Attribute Configuration"],"description":"This API accepts an extended attribute name and retrieves the corresponding extended attribute configuration.\nA token with ORG_ADMIN authority is required to call this API.","parameters":[{"name":"name","in":"path","description":"Name of the extended search attribute configuration to delete.","required":true,"schema":{"type":"string","example":"newMailAttribute"}}],"responses":{"200":{"description":"Specific attribute configuration in IdentityNow.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Name of the new attribute","example":"newMailAttribute"},"displayName":{"type":"string","description":"The display name of the new attribute","example":"New Mail Attribute"},"applicationAttributes":{"type":"object","description":"Map of application id and their associated attribute.","example":{"2c91808b79fd2422017a0b35d30f3968":"employeeNumber","2c91808b79fd2422017a0b36008f396b":"employeeNumber"}}}}}}}},"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/accounts/search-attribute-config/{name}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get the details of a specific extended search attribute in IdentityNow.","description":{"content":"This API accepts an extended attribute name and retrieves the corresponding extended attribute configuration.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts","search-attribute-config",":name"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Name of the extended search attribute configuration to delete.","type":"text/plain"},"type":"any","value":"","key":"name"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get the details of a specific extended search attribute in IdentityNow. + + + +This API accepts an extended attribute name and retrieves the corresponding extended attribute configuration. +A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    + +Specific attribute configuration in IdentityNow. + +
    Schema array
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-sod-all-report-run-status.api.mdx b/docs/sailpoint-api-beta/get-sod-all-report-run-status.api.mdx new file mode 100644 index 000000000..ed0972629 --- /dev/null +++ b/docs/sailpoint-api-beta/get-sod-all-report-run-status.api.mdx @@ -0,0 +1,76 @@ +--- +id: get-sod-all-report-run-status +sidebar_label: Get multi-report run task status +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getSodAllReportRunStatus","tags":["SOD Policy"],"description":"This gets status for a violation report for all policy run.\nRequires role of ORG_ADMIN.","responses":{"200":{"description":"Status of the violation report run task for all policy run","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object","properties":{"status":{"type":"string","enum":["SUCCESS","WARNING","ERROR","TERMINATED","TEMP_ERROR","PENDING"]}}}]},"example":{"status":"SUCCESS","type":"REPORT_RESULT","id":"37b3b32a-f394-46f8-acad-b5223969fa68","name":"Multi Query Report"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sod-violation-report","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get multi-report run task status","description":{"content":"This gets status for a violation report for all policy run.\nRequires role of ORG_ADMIN.","type":"text/plain"},"url":{"path":["sod-violation-report"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get multi-report run task status + + + +This gets status for a violation report for all policy run. +Requires role of ORG_ADMIN. + +
    + +Status of the violation report run task for all policy run + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-sod-policy-by-id.api.mdx b/docs/sailpoint-api-beta/get-sod-policy-by-id.api.mdx new file mode 100644 index 000000000..aaf2285ec --- /dev/null +++ b/docs/sailpoint-api-beta/get-sod-policy-by-id.api.mdx @@ -0,0 +1,96 @@ +--- +id: get-sod-policy-by-id +sidebar_label: Get SOD Policy By ID +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getSodPolicyById","tags":["SOD Policy"],"description":"This gets specified SOD policy.\nRequires role of ORG_ADMIN.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the object reference to retrieve.","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"SOD policy ID.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Policy id","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"name":{"type":"string","description":"Policy Business Name","example":"policy-xyz"},"created":{"type":"string","format":"date-time","description":"The time when this SOD policy is created.","example":"2020-01-01T00:00:00.000000Z"},"modified":{"type":"string","format":"date-time","description":"The time when this SOD policy is modified.","example":"2020-01-01T00:00:00.000000Z"},"description":{"type":"string","description":"Optional description of the SOD policy","example":"This policy ensures compliance of xyz"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"externalPolicyReference":{"type":"string","description":"Optional External Policy Reference","example":"XYZ policy"},"policyQuery":{"type":"string","description":"Search query of the SOD policy","example":"@access(id:0f11f2a4-7c94-4bf3-a2bd-742580fe3bdg) AND @access(id:0f11f2a4-7c94-4bf3-a2bd-742580fe3bdf)"},"compensatingControls":{"type":"string","description":"Optional compensating controls(Mitigating Controls)","example":"Have a manager review the transaction decisions for their \"out of compliance\" employee"},"correctionAdvice":{"type":"string","description":"Optional correction advice","example":"Based on the role of the employee, managers should remove access that is not required for their job function."},"state":{"type":"string","description":"whether the policy is enforced or not","enum":["ENFORCED","NOT_ENFORCED"],"example":"ENFORCED"},"tags":{"type":"array","description":"tags for this policy object","example":["TAG1","TAG2"],"items":{"type":"string"}},"creatorId":{"type":"string","description":"Policy's creator ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"modifierId":{"type":"string","description":"Policy's modifier ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","nullable":true},"violationOwnerAssignmentConfig":{"nullable":true,"type":"object","properties":{"assignmentRule":{"type":"string","enum":["MANAGER","STATIC"],"description":"Details about the violations owner.\nMANAGER - identity's manager\nSTATIC - Governance Group or Identity","example":"MANAGER"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}}},"scheduled":{"type":"boolean","description":"defines whether a policy has been scheduled or not","example":true},"type":{"type":"string","description":"whether a policy is query based or conflicting access based","default":"GENERAL","enum":["GENERAL","CONFLICTING_ACCESS_BASED"],"example":"GENERAL"},"conflictingAccessCriteria":{"nullable":true,"type":"object","properties":{"leftCriteria":{"type":"object","properties":{"name":{"type":"string","description":"Business name for the access construct list","example":"money-in"},"criteriaList":{"type":"array","description":"List of criteria. There is a min of 1 and max of 50 items in the list.","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"example":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66","name":"Administrator"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67","name":"Administrator"}]}}},"rightCriteria":{"type":"object","properties":{"name":{"type":"string","description":"Business name for the access construct list","example":"money-in"},"criteriaList":{"type":"array","description":"List of criteria. There is a min of 1 and max of 50 items in the list.","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"example":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66","name":"Administrator"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67","name":"Administrator"}]}}}}}}},"examples":{"Conflicting Access Based Policy":{"value":{"id":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","name":"Conflicting-Policy-Name","created":"2020-01-01T00:00:00.000000Z","modified":"2020-01-01T00:00:00.000000Z","description":"This policy ensures compliance of xyz","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"Owner Name"},"externalPolicyReference":"XYZ policy","policyQuery":"@access(id:2c9180866166b5b0016167c32ef31a66 OR id:2c9180866166b5b0016167c32ef31a67) AND @access(id:2c9180866166b5b0016167c32ef31a68 OR id:2c9180866166b5b0016167c32ef31a69)","compensatingControls":"Have a manager review the transaction decisions for their \"out of compliance\" employee","correctionAdvice":"Based on the role of the employee, managers should remove access that is not required for their job function.","state":"ENFORCED","tags":["string"],"creatorId":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","modifierId":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","violationOwnerAssignmentConfig":{"assignmentRule":"MANAGER","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"Violation Owner Name"}},"scheduled":true,"type":"CONFLICTING_ACCESS_BASED","conflictingAccessCriteria":{"leftCriteria":{"name":"money-in","criteriaList":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67"}]},"rightCriteria":{"name":"money-out","criteriaList":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a68"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a69"}]}}}},"General Policy":{"value":{"description":"Description","ownerRef":{"type":"IDENTITY","id":"2c918087682f9a86016839c05e8f1aff","name":"Owner Name"},"externalPolicyReference":"New policy","policyQuery":"policy query implementation","compensatingControls":"Compensating controls","correctionAdvice":"Correction advice","tags":[],"state":"ENFORCED","scheduled":false,"creatorId":"2c918087682f9a86016839c05e8f1aff","modifierId":null,"violationOwnerAssignmentConfig":null,"type":"GENERAL","conflictingAccessCriteria":null,"id":"52c11db4-733e-4c31-949a-766c95ec95f1","name":"General-Policy-Name","created":"2020-05-12T19:47:38Z","modified":"2020-05-12T19:47:38Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sod-policies/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get SOD Policy By ID","description":{"content":"This gets specified SOD policy.\nRequires role of ORG_ADMIN.","type":"text/plain"},"url":{"path":["sod-policies",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the object reference to retrieve.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get SOD Policy By ID + + + +This gets specified SOD policy. +Requires role of ORG_ADMIN. + +
    Path Parameters
    + +SOD policy ID. + +
    Schema
      ownerRef object
      violationOwnerAssignmentConfig object
      ownerRef object
      conflictingAccessCriteria object
      leftCriteria object
      criteriaList object[]
      + +List of criteria. There is a min of 1 and max of 50 items in the list. + +
      rightCriteria object
      criteriaList object[]
      + +List of criteria. There is a min of 1 and max of 50 items in the list. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-sod-policy-schedule-by-id.api.mdx b/docs/sailpoint-api-beta/get-sod-policy-schedule-by-id.api.mdx new file mode 100644 index 000000000..796e892b9 --- /dev/null +++ b/docs/sailpoint-api-beta/get-sod-policy-schedule-by-id.api.mdx @@ -0,0 +1,95 @@ +--- +id: get-sod-policy-schedule-by-id +sidebar_label: Get SOD Policy Schedule +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getSodPolicyScheduleById","tags":["SOD Policy"],"description":"This gets schedule for a specified SOD policy.\nRequires a role of ORG_ADMIN","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the object reference to retrieve.","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"SOD policy ID.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"SOD Policy schedule name","example":"SCH-1584312283015"},"created":{"type":"string","format":"date-time","description":"The time when this SOD policy schedule is created.","example":"2020-01-01T00:00:00.000000Z"},"modified":{"type":"string","format":"date-time","description":"The time when this SOD policy schedule is modified.","example":"2020-01-01T00:00:00.000000Z"},"description":{"type":"string","description":"SOD Policy schedule description","example":"Schedule for policy xyz"},"schedule":{"type":"object","description":"The schedule information.\n","properties":{"type":{"description":"Enum representing the currently supported schedule types.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["DAILY","WEEKLY","MONTHLY","CALENDAR"],"example":"WEEKLY"},"months":{"description":"The months selected.","type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"days":{"description":"The days selected.\n","example":{"type":"LIST","values":["MON","WED","FRI"]},"type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"hours":{"description":"The hours selected.\n","example":{"type":"RANGE","values":["9","18"],"interval":3},"type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"expiration":{"description":"The schedule expiration date. Latest possible expiration date is '2038-01-19T03:14:07+0000'\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"timeZoneId":{"description":"The ID of the time zone for the schedule.\n","type":"string","example":"GMT-06:00"}},"required":["type","hours"]},"recipients":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}},"emailEmptyResults":{"type":"boolean","description":"Indicates if empty results need to be emailed","example":false},"creatorId":{"type":"string","description":"Policy's creator ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"modifierId":{"type":"string","description":"Policy's modifier ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sod-policies/{id}/schedule","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get SOD Policy Schedule","description":{"content":"This gets schedule for a specified SOD policy.\nRequires a role of ORG_ADMIN","type":"text/plain"},"url":{"path":["sod-policies",":id","schedule"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the object reference to retrieve.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get SOD Policy Schedule + + + +This gets schedule for a specified SOD policy. +Requires a role of ORG_ADMIN + +
    Path Parameters
    + +SOD policy ID. + +
    Schema
      schedule object
      + +The schedule information. + + +
      months object
      + +The months selected. + +
      days object
      + +The days selected. + + +
      hours object
      + +The hours selected. + + +
      recipients object[]
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-sod-violation-report-run-status.api.mdx b/docs/sailpoint-api-beta/get-sod-violation-report-run-status.api.mdx new file mode 100644 index 000000000..9a1df6e83 --- /dev/null +++ b/docs/sailpoint-api-beta/get-sod-violation-report-run-status.api.mdx @@ -0,0 +1,88 @@ +--- +id: get-sod-violation-report-run-status +sidebar_label: Get violation report run status +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getSodViolationReportRunStatus","tags":["SOD Policy"],"description":"This gets status for a violation report run task invoked already.\nRequires role of ORG_ADMIN.","parameters":[{"in":"path","name":"reportResultId","schema":{"type":"string"},"required":true,"description":"The ID of the report reference to retrieve.","example":"2e8d8180-24bc-4d21-91c6-7affdb473b0d"}],"responses":{"200":{"description":"Status of the violation report run task.","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object","properties":{"status":{"type":"string","enum":["SUCCESS","WARNING","ERROR","TERMINATED","TEMP_ERROR","PENDING"]}}}]},"example":{"status":"SUCCESS","type":"REPORT_RESULT","id":"2e8d8180-24bc-4d21-91c6-7affdb473b0d","name":"policy-xyz"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sod-violation-report-status/{reportResultId}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get violation report run status","description":{"content":"This gets status for a violation report run task invoked already.\nRequires role of ORG_ADMIN.","type":"text/plain"},"url":{"path":["sod-violation-report-status",":reportResultId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the report reference to retrieve.","type":"text/plain"},"type":"any","value":"","key":"reportResultId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get violation report run status + + + +This gets status for a violation report run task invoked already. +Requires role of ORG_ADMIN. + +
    Path Parameters
    + +Status of the violation report run task. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-sod-violation-report-status.api.mdx b/docs/sailpoint-api-beta/get-sod-violation-report-status.api.mdx new file mode 100644 index 000000000..113757dc4 --- /dev/null +++ b/docs/sailpoint-api-beta/get-sod-violation-report-status.api.mdx @@ -0,0 +1,88 @@ +--- +id: get-sod-violation-report-status +sidebar_label: Get SOD violation report status +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getSodViolationReportStatus","tags":["SOD Policy"],"description":"This gets status for a violation report run task invoked already.\nRequires role of ORG_ADMIN.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the object reference to retrieve.","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"Status of the violation report run task.","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object","properties":{"status":{"type":"string","enum":["SUCCESS","WARNING","ERROR","TERMINATED","TEMP_ERROR","PENDING"]}}}]},"example":{"status":"SUCCESS","type":"REPORT_RESULT","id":"2e8d8180-24bc-4d21-91c6-7affdb473b0d","name":"policy-xyz"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sod-policies/{id}/violation-report","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get SOD violation report status","description":{"content":"This gets status for a violation report run task invoked already.\nRequires role of ORG_ADMIN.","type":"text/plain"},"url":{"path":["sod-policies",":id","violation-report"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the object reference to retrieve.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get SOD violation report status + + + +This gets status for a violation report run task invoked already. +Requires role of ORG_ADMIN. + +
    Path Parameters
    + +Status of the violation report run task. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-source-attr-sync-config.api.mdx b/docs/sailpoint-api-beta/get-source-attr-sync-config.api.mdx new file mode 100644 index 000000000..2225a2862 --- /dev/null +++ b/docs/sailpoint-api-beta/get-source-attr-sync-config.api.mdx @@ -0,0 +1,96 @@ +--- +id: get-source-attr-sync-config +sidebar_label: Attribute Sync Config +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getSourceAttrSyncConfig","tags":["Sources"],"description":"This API returns the existing attribute synchronization configuration for a source specified by the given ID. The response contains all attributes, regardless of whether they enabled or not.\nA token with ORG_ADMIN authority is required to call this API.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The source id","example":"2c9180835d191a86015d28455b4a2329"}],"responses":{"200":{"description":"Attribute synchronization configuration for a source","content":{"application/json":{"schema":{"type":"object","description":"Specification of attribute sync configuration for a source","required":["source","attributes"],"properties":{"source":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the source which is the target of the attribute synchronization","example":[{"type":"SOURCE","id":"2c9180835d191a86015d28455b4b232a","name":"HR Active Directory"}]},"attributes":{"type":"array","description":"Attribute synchronization configuration for specific identity attributes in the context of a source","items":{"type":"object","description":"Specification of source attribute sync mapping configuration for an identity attribute","required":["name","displayName","enabled","target"],"properties":{"name":{"type":"string","description":"Name of the identity attribute","example":"email"},"displayName":{"type":"string","description":"Display name of the identity attribute","example":"Email"},"enabled":{"type":"boolean","description":"Determines whether or not the attribute is enabled for synchronization","example":true},"target":{"type":"string","description":"Name of the source account attribute to which the identity attribute value will be synchronized if enabled","example":"mail"}}},"example":[{"name":"email","displayName":"Email","enabled":true,"target":"mail"},{"name":"firstname","displayName":"First Name","enabled":false,"target":"givenName"}]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sources/{id}/attribute-sync-config","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Attribute Sync Config","description":{"content":"This API returns the existing attribute synchronization configuration for a source specified by the given ID. The response contains all attributes, regardless of whether they enabled or not.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":id","attribute-sync-config"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The source id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Attribute Sync Config + + + +This API returns the existing attribute synchronization configuration for a source specified by the given ID. The response contains all attributes, regardless of whether they enabled or not. +A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    + +Attribute synchronization configuration for a source + +
    Schema
      source object
      + +Reference to the source which is the target of the attribute synchronization + +
      attributes object[]
      + +Attribute synchronization configuration for specific identity attributes in the context of a source + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-source-config.api.mdx b/docs/sailpoint-api-beta/get-source-config.api.mdx new file mode 100644 index 000000000..2dfd81b32 --- /dev/null +++ b/docs/sailpoint-api-beta/get-source-config.api.mdx @@ -0,0 +1,76 @@ +--- +id: get-source-config +sidebar_label: Gets source config with language translations +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getSourceConfig","tags":["Sources"],"description":"Looks up and returns the source config for the requested source id after populating the source config values and applying language translations.\nA token with ORG_ADMIN authority is required to call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The Source id"},{"in":"query","name":"locale","schema":{"type":"string","enum":["de","no","fi","sv","ru","pt","ko","zh-TW","en","it","fr","zh-CN","hu","es","cs","ja","pl","da","nl"]},"description":"The locale to apply to the config. If no viable locale is given, it will default to \"en\""}],"responses":{"200":{"description":"A Connector Detail object","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The connector name","example":"JDBC"},"sourceConfigXml":{"type":"string","description":"XML representation of the source config data","example":"
    \n\t
    "},"sourceConfig":{"type":"string","description":"JSON representation of the source config data","example":{"Form":{"Field":{"_defaultValue":"true","_hidden":"true","_name":"cloudAuthEnabled","_type":"boolean","_value":"true"},"_xmlns":"http://www.sailpoint.com/xsd/sailpoint_form_1_0.xsd","_connectorName":"Active Directory - Direct","_directConnect":"true","_name":"Active Directory","_status":"released","_type":"SourceConfig","__text":"\\n\\t"}}},"directConnect":{"type":"boolean","description":"true if the source is a direct connect source","example":true},"fileUpload":{"type":"boolean","description":"Connector config's file upload attribute, false if not there","example":false},"uploadedFiles":{"type":"string","description":"List of uploaded file strings for the connector","example":[]},"connectorMetadata":{"type":"object","description":"Object containing metadata pertinent to the UI to be used","example":{"supportedUI":"EXTJS"}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sources/{sourceId}/connectors/source-config","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Gets source config with language translations","description":{"content":"Looks up and returns the source config for the requested source id after populating the source config values and applying language translations.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":sourceId","connectors","source-config"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The locale to apply to the config. If no viable locale is given, it will default to \"en\"","type":"text/plain"},"key":"locale","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Gets source config with language translations + + + +Looks up and returns the source config for the requested source id after populating the source config values and applying language translations. +A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    Query Parameters
    + +A Connector Detail object + +
    Schema
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-source.api.mdx b/docs/sailpoint-api-beta/get-source.api.mdx new file mode 100644 index 000000000..33647c7ac --- /dev/null +++ b/docs/sailpoint-api-beta/get-source.api.mdx @@ -0,0 +1,128 @@ +--- +id: get-source +sidebar_label: Get Source by ID +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getSource","tags":["Sources"],"description":"This end-point gets a specific source in IdentityNow.\nA token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The Source ID","example":"2c9180835d191a86015d28455b4a2329"}],"responses":{"200":{"description":"A Source object","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"the id of the Source","example":"2c91808568c529c60168cca6f90c1324"},"description":{"type":"string","description":"Human-readable description of the source","example":"This is the corporate directory."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to an owning Identity Object"},"cluster":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the associated Cluster","example":{"type":"CLUSTER","id":"2c9180866166b5b0016167c32ef31a66","name":"Corporate Cluster"}},"accountCorrelationConfig":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Correlation Config object","example":{"type":"ACCOUNT_CORRELATION_CONFIG","id":"2c9180855d191c59015d28583727245a","name":"Directory [source-62867] Account Correlation"}},"accountCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used."},"managerCorrelationMapping":{"description":"Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity","type":"object","properties":{"accountAttribute":{"type":"string","description":"Name of the attribute to use for manager correlation. The value found on the account attribute will be used to lookup the manager's identity.","example":"manager"},"identityAttribute":{"type":"string","description":"Name of the identity attribute to search when trying to find a manager using the value from the accountAttribute.","example":"manager"}}},"managerCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient."},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called."},"schemas":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to Schema objects","example":[{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232a","name":"account"},{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232b","name":"group"}]},"passwordPolicies":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to the associated PasswordPolicy objects.","example":[{"type":"PASSWORD_POLICY","id":"2c9180855d191c59015d291ceb053980","name":"Corporate Password Policy"}]},"features":{"type":"array","description":"Optional features that can be supported by a source.","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"example":["SYNC_PROVISIONING","MANAGER_LOOKUP","SEARCH","PROVISIONING","AUTHENTICATE","GROUP_PROVISIONING","PASSWORD"]},"type":{"type":"string","description":"Specifies the type of system being managed e.g. Active Directory, Workday, etc..","example":"OpenLDAP - Direct"},"connector":{"type":"string","description":"Connector script name.","example":"active-directory"},"connectorClass":{"type":"string","description":"The fully qualified name of the Java class that implements the connector interface.","example":"sailpoint.connector.LDAPConnector"},"connectorAttributes":{"type":"object","description":"Connector specific configuration; will differ from type to type.","example":{"healthCheckTimeout":30,"authSearchAttributes":["cn","uid","mail"]}},"deleteThreshold":{"type":"integer","format":"int32","description":"Number from 0 to 100 that specifies when to skip the delete phase.","example":10},"authoritative":{"type":"boolean","description":"When true indicates the source is referenced by an IdentityProfile.","example":false},"managementWorkgroup":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to Management Workgroup for this Source"},"healthy":{"type":"boolean","description":"When true indicates a healthy source","example":true},"status":{"type":"string","description":"A status identifier, giving specific information on why a source is healthy or not","example":"SOURCE_STATE_HEALTHY"},"since":{"type":"string","description":"Timestamp showing when a source health check was last performed","example":"2021-09-28T15:48:29.3801666300Z"},"connectorId":{"type":"string","description":"The id of connector","example":"active-directory"},"connectorName":{"type":"string","description":"The name of the connector that was chosen on source creation","example":"Active Directory"},"connectionType":{"type":"string","description":"The type of connection (direct or file)","example":"file"},"connectorImplementstionId":{"type":"string","description":"The connector implementstion id","example":"delimited-file"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sources/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Source by ID","description":{"content":"This end-point gets a specific source in IdentityNow.\nA token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Source by ID + + + +This end-point gets a specific source in IdentityNow. +A token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + +
    Path Parameters
    + +A Source object + +
    Schema
      owner object
      + +Reference to an owning Identity Object + +
      cluster object
      + +Reference to the associated Cluster + +
      accountCorrelationConfig object
      + +Reference to a Correlation Config object + +
      accountCorrelationRule object
      + +Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used. + +
      managerCorrelationMapping object
      + +Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity + +
      managerCorrelationRule object
      + +Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient. + +
      beforeProvisioningRule object
      + +Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called. + +
      schemas object[]
      + +List of references to Schema objects + +
      passwordPolicies object[]
      + +List of references to the associated PasswordPolicy objects. + +
      managementWorkgroup object
      + +Reference to Management Workgroup for this Source + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-start-date.api.mdx b/docs/sailpoint-api-beta/get-start-date.api.mdx new file mode 100644 index 000000000..d776f4b11 --- /dev/null +++ b/docs/sailpoint-api-beta/get-start-date.api.mdx @@ -0,0 +1,83 @@ +--- +id: get-start-date +sidebar_label: Gets the start date of the identity +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getStartDate","tags":["Identity History"],"description":"This method retrieves start date of the identity Requires authorization scope of 'idn:identity-history:read' ","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The identity id","example":"8c190e6787aa4ed9a90bd9d5344523fb"}],"responses":{"200":{"description":"The start date of the identity","content":{"application/json":{"schema":{"type":"string","example":"2017-03-01T13:00:00.000Z"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/historical-identities/{id}/start-date","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Gets the start date of the identity","description":{"content":"This method retrieves start date of the identity Requires authorization scope of 'idn:identity-history:read' ","type":"text/plain"},"url":{"path":["historical-identities",":id","start-date"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The identity id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Gets the start date of the identity + + + +This method retrieves start date of the identity Requires authorization scope of 'idn:identity-history:read' + +
    Path Parameters
    + +The start date of the identity + +
    Schema
    • string
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-status-check-details.api.mdx b/docs/sailpoint-api-beta/get-status-check-details.api.mdx new file mode 100644 index 000000000..24f9499dd --- /dev/null +++ b/docs/sailpoint-api-beta/get-status-check-details.api.mdx @@ -0,0 +1,87 @@ +--- +id: get-status-check-details +sidebar_label: Get the time check configuration of queued SDIM tickets +hide_title: true +hide_table_of_contents: true +api: {"tags":["Service Desk Integration"],"description":"Get the time check configuration of queued SDIM tickets. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","operationId":"getStatusCheckDetails","responses":{"200":{"description":"QueuedCheckConfigDetails containing the configured values","content":{"application/json":{"schema":{"description":"Configuration of maximum number days and interval for checking Service Desk integration queue status","required":["provisioningStatusCheckIntervalMinutes","provisioningMaxStatusCheckDays"],"type":"object","properties":{"provisioningStatusCheckIntervalMinutes":{"description":"interval in minutes between status checks","type":"string","example":30},"provisioningMaxStatusCheckDays":{"description":"maximum number of days to check","type":"string","example":2}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:service-desk-admin:read","idn:service-desk-integration:read"]}],"method":"get","path":"/service-desk-integrations/status-check-configuration","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get the time check configuration of queued SDIM tickets","description":{"content":"Get the time check configuration of queued SDIM tickets. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","type":"text/plain"},"url":{"path":["service-desk-integrations","status-check-configuration"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get the time check configuration of queued SDIM tickets + + + +Get the time check configuration of queued SDIM tickets. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + +
    + +QueuedCheckConfigDetails containing the configured values + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-tagged-object-by-type-and-id.api.mdx b/docs/sailpoint-api-beta/get-tagged-object-by-type-and-id.api.mdx new file mode 100644 index 000000000..71815a199 --- /dev/null +++ b/docs/sailpoint-api-beta/get-tagged-object-by-type-and-id.api.mdx @@ -0,0 +1,75 @@ +--- +id: get-tagged-object-by-type-and-id +sidebar_label: Get Tagged Object +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getTaggedObjectByTypeAndId","tags":["Tagged Objects"],"description":"This gets a tagged object for the specified type.","parameters":[{"in":"path","name":"type","schema":{"type":"string","enum":["ROLE","IDENTITY","SOD_POLICY"]},"required":true,"description":"The type of tagged object to retrieve.","example":"ROLE"},{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the object reference to retrieve.","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"Tagged object by type and ID.","content":{"application/json":{"schema":{"type":"object","properties":{"objectRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"tags":{"type":"array","items":{"type":"string"},"description":"Labels to be applied to an Object","example":["BU_FINANCE","PCI"]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/tagged-objects/{type}/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Tagged Object","description":{"content":"This gets a tagged object for the specified type.","type":"text/plain"},"url":{"path":["tagged-objects",":type",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The type of tagged object to retrieve.","type":"text/plain"},"type":"any","value":"","key":"type"},{"disabled":false,"description":{"content":"(Required) The ID of the object reference to retrieve.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Tagged Object + + + +This gets a tagged object for the specified type. + +
    Path Parameters
    + +Tagged object by type and ID. + +
    Schema
      objectRef object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-transform.api.mdx b/docs/sailpoint-api-beta/get-transform.api.mdx new file mode 100644 index 000000000..1871bfec6 --- /dev/null +++ b/docs/sailpoint-api-beta/get-transform.api.mdx @@ -0,0 +1,60 @@ +--- +id: get-transform +sidebar_label: Transform by ID +hide_title: true +hide_table_of_contents: true +api: {"tags":["Transforms"],"description":"This API returns the transform specified by the given ID.\nA token with transform read authority is required to call this API.","operationId":"getTransform","parameters":[{"name":"id","in":"path","description":"ID of the transform to retrieve","required":true,"style":"simple","explode":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Transform with the given ID","content":{"application/json":{"schema":{"type":"object","description":"DTO for representing an internally- or customer-defined transform.","required":["name","type","attributes"],"properties":{"id":{"type":"string","readOnly":true,"description":"Unique ID of this transform","example":"2cd78adghjkja34jh2b1hkjhasuecd"},"name":{"type":"string","readOnly":true,"description":"Unique name of this transform","example":"Timestamp To Date"},"type":{"type":"string","readOnly":true,"description":"The transform type (see [Transformations in IdentityNow Using Seaspray](https://community.sailpoint.com/docs/DOC-4629)).","example":"concat"},"attributes":{"type":"object","description":"Meta-data about the transform. Values in this list are specific to the type of transform to be executed.","additionalProperties":true,"example":{"inputFormat":"MMM dd yyyy, HH:mm:ss.SSS","outputFormat":"yyyy/dd/MM"}},"internal":{"type":"boolean","readOnly":true,"description":"Indicates whether this is an internal SailPoint-created transform or a customer-created transform","example":false}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"security":[{"bearerAuth":["idn:transforms:read"]}],"method":"get","path":"/transforms/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Transform by ID","description":{"content":"This API returns the transform specified by the given ID.\nA token with transform read authority is required to call this API.","type":"text/plain"},"url":{"path":["transforms",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the transform to retrieve","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Transform by ID + + + +This API returns the transform specified by the given ID. +A token with transform read authority is required to call this API. + +
    Path Parameters
    + +Transform with the given ID + +
    Schema
      attributes object
      + +Meta-data about the transform. Values in this list are specific to the type of transform to be executed. + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-transforms-list.api.mdx b/docs/sailpoint-api-beta/get-transforms-list.api.mdx new file mode 100644 index 000000000..38bbdf064 --- /dev/null +++ b/docs/sailpoint-api-beta/get-transforms-list.api.mdx @@ -0,0 +1,48 @@ +--- +id: get-transforms-list +sidebar_label: List transforms +hide_title: true +hide_table_of_contents: true +api: {"tags":["Transforms"],"description":"Gets a list of all saved transform objects.\nA token with transforms-list read authority is required to call this API.","operationId":"getTransformsList","parameters":[{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"name":"name","in":"query","description":"Name of the transform to retrieve from the list.","required":false,"style":"form","schema":{"type":"string","example":"ExampleTransformName123"}},{"name":"filters","in":"query","description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\nFiltering is supported for the following fields and operators:\n**internal**: *eq*\n**name**: *eq*, *sw*","required":false,"style":"form","explode":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"A list of transforms matching the given criteria.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","description":"DTO for representing an internally- or customer-defined transform.","required":["name","type","attributes"],"properties":{"id":{"type":"string","readOnly":true,"description":"Unique ID of this transform","example":"2cd78adghjkja34jh2b1hkjhasuecd"},"name":{"type":"string","readOnly":true,"description":"Unique name of this transform","example":"Timestamp To Date"},"type":{"type":"string","readOnly":true,"description":"The transform type (see [Transformations in IdentityNow Using Seaspray](https://community.sailpoint.com/docs/DOC-4629)).","example":"concat"},"attributes":{"type":"object","description":"Meta-data about the transform. Values in this list are specific to the type of transform to be executed.","additionalProperties":true,"example":{"inputFormat":"MMM dd yyyy, HH:mm:ss.SSS","outputFormat":"yyyy/dd/MM"}},"internal":{"type":"boolean","readOnly":true,"description":"Indicates whether this is an internal SailPoint-created transform or a customer-created transform","example":false}}}},"example":[{"id":"2cd78adghjkja34jh2b1hkjhasuecd","name":"Timestamp To Date","type":"dateFormat","attributes":{"inputFormat":"MMM-dd-yyyy, HH:mm:ss.SSS","outputFormat":"yyyy/dd/MM"},"internal":false},{"id":"2lkas8dhj4bkuakja77giih7l4ashh","name":"PrefixSubstring","type":"substring","attributes":{"begin":0,"end":3},"internal":true}]}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}}},"security":[{"bearerAuth":["idn:transforms-list:read"]}],"method":"get","path":"/transforms","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List transforms","description":{"content":"Gets a list of all saved transform objects.\nA token with transforms-list read authority is required to call this API.","type":"text/plain"},"url":{"path":["transforms"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Name of the transform to retrieve from the list.","type":"text/plain"},"key":"name","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\nFiltering is supported for the following fields and operators:\n**internal**: *eq*\n**name**: *eq*, *sw*","type":"text/plain"},"key":"filters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List transforms + + + +Gets a list of all saved transform objects. +A token with transforms-list read authority is required to call this API. + +
    Query Parameters
    + +A list of transforms matching the given criteria. + +
    Schema array
      attributes object
      + +Meta-data about the transform. Values in this list are specific to the type of transform to be executed. + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-valid-time-zones.api.mdx b/docs/sailpoint-api-beta/get-valid-time-zones.api.mdx new file mode 100644 index 000000000..cf704db03 --- /dev/null +++ b/docs/sailpoint-api-beta/get-valid-time-zones.api.mdx @@ -0,0 +1,79 @@ +--- +id: get-valid-time-zones +sidebar_label: Get list of time zones +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getValidTimeZones","tags":["Org Config"],"description":"Get a list of valid time zones that can be set in org configurations.\nRequest will require the following security scope:\n- 'idn:org-config-user:read'\n- 'idn:org-config:read'\n- 'idn:org-config-internal:read'","responses":{"200":{"description":"Request successful","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}},"example":["Etc/GMT-6","Etc/GMT+8","EST","America/Chicago","America/Toronto","Asia/Gaza","Europe/Brussels","Europe/Kiev"]}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/org-config/valid-time-zones","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get list of time zones","description":{"content":"Get a list of valid time zones that can be set in org configurations.\nRequest will require the following security scope:\n- 'idn:org-config-user:read'\n- 'idn:org-config:read'\n- 'idn:org-config-internal:read'","type":"text/plain"},"url":{"path":["org-config","valid-time-zones"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get list of time zones + + + +Get a list of valid time zones that can be set in org configurations. +Request will require the following security scope: +- 'idn:org-config-user:read' +- 'idn:org-config:read' +- 'idn:org-config-internal:read' + +
    + +Request successful + +
    Schema array
    • string
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-work-items.api.mdx b/docs/sailpoint-api-beta/get-work-items.api.mdx new file mode 100644 index 000000000..cd8ab5005 --- /dev/null +++ b/docs/sailpoint-api-beta/get-work-items.api.mdx @@ -0,0 +1,67 @@ +--- +id: get-work-items +sidebar_label: Get a Work Item +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getWorkItems","tags":["Work Items"],"description":"This gets the details of a Work Item belonging to either the specified user(admin required), or the current user.","parameters":[{"in":"query","name":"ownerId","schema":{"type":"string"},"description":"ID of the work item owner.","required":false},{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"ID of the work item."}],"responses":{"200":{"description":"The work item with the given ID.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the work item","example":"2c9180835d2e5168015d32f890ca1581"},"requesterId":{"type":"string","description":"ID of the requester","example":"2c9180835d2e5168015d32f890ca1581"},"requesterDisplayName":{"type":"string","description":"The displayname of the requester","example":"John Smith"},"ownerId":{"type":"string","description":"The ID of the owner","example":"2c9180835d2e5168015d32f890ca1581"},"ownerName":{"type":"string","description":"The name of the owner","example":"Jason Smith"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"description":{"type":"string","description":"The description of the work item","example":"Create account on source 'AD'"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"type":{"type":"string","enum":["UNKNOWN","GENERIC","CERTIFICATION","REMEDIATION","DELEGATION","APPROVAL","VIOLATIONREVIEW","FORM","POLICYVIOLATION","CHALLENGE","IMPACTANALYSIS","SIGNOFF","EVENT","MANUALACTION","TEST"]},"remediationItems":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the certification","example":"2c9180835d2e5168015d32f890ca1581"},"targetId":{"type":"string","description":"The ID of the certification target","example":"2c9180835d2e5168015d32f890ca1581"},"targetName":{"type":"string","description":"The name of the certification target","example":"john.smith"},"targetDisplayName":{"type":"string","description":"The display name of the certification target","example":"emailAddress"},"applicationName":{"type":"string","description":"The name of the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute being certified","example":"phoneNumber"},"attributeOperation":{"type":"string","description":"The operation of the certification on the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute being certified","example":"512-555-1212"},"nativeIdentity":{"type":"string","description":"The native identity of the target","example":"jason.smith2"}}},"approvalItems":{"type":"object","properties":{"id":{"type":"string","description":"ID of the approval item","example":"2c9180835d2e5168015d32f890ca1581"},"account":{"type":"string","description":"The account referenced by the approval item","example":"john.smith"},"application":{"type":"string","description":"The name the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute","example":"emailAddress"},"attributeOperation":{"type":"string","description":"The operation of the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute","example":"a@b.com"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]}}},"name":{"type":"string","description":"The work item name","example":"Account Create"},"completed":{"type":"string","format":"date-time","example":"2018-10-19T13:49:37.385Z"},"numItems":{"type":"integer","description":"The number of items in the work item","example":19},"errors":{"type":"array","items":{"type":"string"},"example":["The work item ID that was specified was not found."]}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"method":"get","path":"/work-items/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get a Work Item","description":{"content":"This gets the details of a Work Item belonging to either the specified user(admin required), or the current user.","type":"text/plain"},"url":{"path":["work-items",":id"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"ID of the work item owner.","type":"text/plain"},"key":"ownerId","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the work item.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a Work Item + + + +This gets the details of a Work Item belonging to either the specified user(admin required), or the current user. + +
    Path Parameters
    Query Parameters
    + +The work item with the given ID. + +
    Schema array
      remediationItems object
      approvalItems object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-workflow-execution-history.api.mdx b/docs/sailpoint-api-beta/get-workflow-execution-history.api.mdx new file mode 100644 index 000000000..23113c739 --- /dev/null +++ b/docs/sailpoint-api-beta/get-workflow-execution-history.api.mdx @@ -0,0 +1,87 @@ +--- +id: get-workflow-execution-history +sidebar_label: Get Workflow Execution History +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getWorkflowExecutionHistory","tags":["Workflows"],"description":"Get a detailed history of a single workflow execution. Workflow executions are available for up to 2 days before being archived. If you attempt to access a workflow execution that has been archived, you will receive a 404 Not Found.","security":[{"bearerAuth":["sp:workflow:read"]}],"parameters":[{"name":"id","in":"path","description":"Id of the workflow execution","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"c17bea3a-574d-453c-9e04-4365fbf5af0b"}}],"responses":{"200":{"description":"List of workflow execution events for the given workflow execution","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"type":{"description":"The type of event","enum":["WorkflowExecutionScheduled","WorkflowExecutionStarted","WorkflowExecutionCompleted","WorkflowExecutionFailed","WorkflowTaskScheduled","WorkflowTaskStarted","WorkflowTaskCompleted","WorkflowTaskFailed","ActivityTaskScheduled","ActivityTaskStarted","ActivityTaskCompleted","ActivityTaskFailed"],"example":"WorkflowTaskScheduled"},"timestamp":{"type":"string","format":"date-time","description":"The date-time when the event occurred","example":"2022-02-07T20:13:31.640618296Z"},"attributes":{"type":"object","description":"Additional attributes associated with the event","example":{}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/workflow-executions/{id}/history","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Workflow Execution History","description":{"content":"Get a detailed history of a single workflow execution. Workflow executions are available for up to 2 days before being archived. If you attempt to access a workflow execution that has been archived, you will receive a 404 Not Found.","type":"text/plain"},"url":{"path":["workflow-executions",":id","history"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Id of the workflow execution","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Workflow Execution History + + + +Get a detailed history of a single workflow execution. Workflow executions are available for up to 2 days before being archived. If you attempt to access a workflow execution that has been archived, you will receive a 404 Not Found. + +
    Path Parameters
    + +List of workflow execution events for the given workflow execution + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-workflow-execution.api.mdx b/docs/sailpoint-api-beta/get-workflow-execution.api.mdx new file mode 100644 index 000000000..778422567 --- /dev/null +++ b/docs/sailpoint-api-beta/get-workflow-execution.api.mdx @@ -0,0 +1,87 @@ +--- +id: get-workflow-execution +sidebar_label: Get a Workflow Execution +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getWorkflowExecution","tags":["Workflows"],"description":"Get a single workflow execution. Workflow executions are available for up to 2 days before being archived. If you attempt to access a workflow execution that has been archived, you will receive a 404 Not Found.","security":[{"bearerAuth":["sp:workflow:read"]}],"parameters":[{"name":"id","in":"path","description":"Id of the workflow execution","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"c17bea3a-574d-453c-9e04-4365fbf5af0b"}}],"responses":{"200":{"description":"The workflow execution","content":{"application/json":{"schema":{"items":{"type":"object","properties":{"id":{"type":"string","description":"The workflow execution ID","example":"b393f4e2-4785-4d7f-ab27-3a6b8ded4c81"},"workflowId":{"type":"string","description":"The workflow ID","example":"d201c5d9-d37b-4a2f-af14-66414f39d568"},"requestId":{"type":"string","description":"This backend ID tracks a workflow request in the system. You can provide this ID in a customer support ticket for debugging purposes.","example":"41e12a74fa7b4a6a98ae47887b64acdb"},"startTime":{"type":"string","format":"date-time","description":"The date/time the workflow started","example":"2022-02-07T20:13:29.356648026Z"},"closeTime":{"type":"string","format":"date-time","description":"The date/time the workflow ended","example":"2022-02-07T20:13:31.682410165Z"},"status":{"description":"The workflow execution status","type":"string","enum":["Completed","Failed","Canceled","Running"],"example":"Completed"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/workflow-executions/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get a Workflow Execution","description":{"content":"Get a single workflow execution. Workflow executions are available for up to 2 days before being archived. If you attempt to access a workflow execution that has been archived, you will receive a 404 Not Found.","type":"text/plain"},"url":{"path":["workflow-executions",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Id of the workflow execution","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a Workflow Execution + + + +Get a single workflow execution. Workflow executions are available for up to 2 days before being archived. If you attempt to access a workflow execution that has been archived, you will receive a 404 Not Found. + +
    Path Parameters
    + +The workflow execution + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/get-workflow.api.mdx b/docs/sailpoint-api-beta/get-workflow.api.mdx new file mode 100644 index 000000000..5b4978be6 --- /dev/null +++ b/docs/sailpoint-api-beta/get-workflow.api.mdx @@ -0,0 +1,99 @@ +--- +id: get-workflow +sidebar_label: Get Workflow By Id +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getWorkflow","tags":["Workflows"],"description":"Get a single workflow by id.","security":[{"bearerAuth":["sp:workflow:read"]}],"parameters":[{"name":"id","in":"path","description":"Id of the workflow","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"c17bea3a-574d-453c-9e04-4365fbf5af0b"}}],"responses":{"200":{"description":"The workflow object","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"id":{"type":"string","description":"Workflow ID. This is a UUID generated upon creation.","example":"d201c5e9-d37b-4aff-af14-66414f39d569"},"executionCount":{"type":"integer","format":"int32","description":"The number of times this workflow has been executed","example":2},"failureCount":{"type":"integer","format":"int32","description":"The number of times this workflow has failed during execution","example":0},"created":{"type":"string","format":"date-time","description":"The date and time the workflow was created","example":"2022-01-10T16:06:16.636381447Z"},"creator":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity that created the workflow.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}},"example":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}}}},{"type":"object","properties":{"name":{"type":"string","description":"The name of the workflow","example":"Send Email"},"owner":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity that owns the workflow. The owner's permissions in IDN will determine what actions the workflow is allowed to perform. Ownership can be changed by updating the owner in a PUT or PATCH request.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}},"example":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}},"description":{"type":"string","description":"Description of what the workflow accomplishes","example":"Send an email to the identity who's attributes changed."},"definition":{"type":"object","description":"The map of steps that the workflow will execute.","properties":{"start":{"type":"string","description":"The name of the starting step.","example":"Send Email Test"},"steps":{"type":"object","description":"One or more step objects that comprise this workflow. Please see the Workflow documentation to see the JSON schema for each step type.","additionalProperties":true,"example":{"Send Email":{"actionId":"sp:send-email","attributes":{"body":"This is a test","from":"sailpoint@sailpoint.com","recipientId.$":"$.identity.id","subject":"test"},"nextStep":"success","selectResult":null,"type":"action"},"success":{"type":"success"}}}}},"enabled":{"type":"boolean","description":"Enable or disable the workflow. Workflows cannot be created in an enabled state.","default":false,"example":false},"trigger":{"type":"object","description":"The trigger that starts the workflow","required":["type","attributes"],"properties":{"type":{"enum":["EVENT","EXTERNAL","SCHEDULED"],"example":"EVENT","description":"The trigger type"},"attributes":{"description":"Workflow Trigger Attributes.","oneOf":[{"title":"Event Trigger Attributes","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The unique ID of the trigger","example":"idn:identity-attributes-changed"},"filter":{"type":"string","description":"JSON path expression that will limit which events the trigger will fire on","example":"$.changes[?(@.attribute == 'manager')]"}}},{"title":"Scheduled Trigger Attributes","type":"object","required":["cronString"],"properties":{"cronString":{"type":"string","description":"A valid CRON expression","externalDocs":{"description":"CRON expression editor","url":"https://crontab.guru/"},"example":"0 * */3 */5 *"}}}]}}}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/workflows/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Workflow By Id","description":{"content":"Get a single workflow by id.","type":"text/plain"},"url":{"path":["workflows",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Id of the workflow","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Workflow By Id + + + +Get a single workflow by id. + +
    Path Parameters
    + +The workflow object + +
    Schema
      creator object
      + +The identity that created the workflow. + +
      owner object
      + +The identity that owns the workflow. The owner's permissions in IDN will determine what actions the workflow is allowed to perform. Ownership can be changed by updating the owner in a PUT or PATCH request. + +
      definition object
      + +The map of steps that the workflow will execute. + +
      steps object
      + +One or more step objects that comprise this workflow. Please see the Workflow documentation to see the JSON schema for each step type. + +
      trigger object
      + +The trigger that starts the workflow + +
      attributes object
      + +Workflow Trigger Attributes. + +
    • oneOf
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/iai-access-request-recommendations.tag.mdx b/docs/sailpoint-api-beta/iai-access-request-recommendations.tag.mdx new file mode 100644 index 000000000..edda4226a --- /dev/null +++ b/docs/sailpoint-api-beta/iai-access-request-recommendations.tag.mdx @@ -0,0 +1,15 @@ +--- +id: iai-access-request-recommendations +title: IAI Access Request Recommendations +description: IAI Access Request Recommendations +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/iai-common-access.tag.mdx b/docs/sailpoint-api-beta/iai-common-access.tag.mdx new file mode 100644 index 000000000..f88335bb1 --- /dev/null +++ b/docs/sailpoint-api-beta/iai-common-access.tag.mdx @@ -0,0 +1,15 @@ +--- +id: iai-common-access +title: IAI Common Access +description: IAI Common Access +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/iai-outliers.tag.mdx b/docs/sailpoint-api-beta/iai-outliers.tag.mdx new file mode 100644 index 000000000..6c072fb3d --- /dev/null +++ b/docs/sailpoint-api-beta/iai-outliers.tag.mdx @@ -0,0 +1,15 @@ +--- +id: iai-outliers +title: IAI Outliers +description: IAI Outliers +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/iai-peer-group-strategies.tag.mdx b/docs/sailpoint-api-beta/iai-peer-group-strategies.tag.mdx new file mode 100644 index 000000000..4f3ed37b3 --- /dev/null +++ b/docs/sailpoint-api-beta/iai-peer-group-strategies.tag.mdx @@ -0,0 +1,15 @@ +--- +id: iai-peer-group-strategies +title: IAI Peer Group Strategies +description: IAI Peer Group Strategies +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/iai-recommendations.tag.mdx b/docs/sailpoint-api-beta/iai-recommendations.tag.mdx new file mode 100644 index 000000000..14946d82e --- /dev/null +++ b/docs/sailpoint-api-beta/iai-recommendations.tag.mdx @@ -0,0 +1,15 @@ +--- +id: iai-recommendations +title: IAI Recommendations +description: IAI Recommendations +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/iai-role-mining.tag.mdx b/docs/sailpoint-api-beta/iai-role-mining.tag.mdx new file mode 100644 index 000000000..730865834 --- /dev/null +++ b/docs/sailpoint-api-beta/iai-role-mining.tag.mdx @@ -0,0 +1,15 @@ +--- +id: iai-role-mining +title: IAI Role Mining +description: IAI Role Mining +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/identities.tag.mdx b/docs/sailpoint-api-beta/identities.tag.mdx new file mode 100644 index 000000000..3eb3f71fb --- /dev/null +++ b/docs/sailpoint-api-beta/identities.tag.mdx @@ -0,0 +1,15 @@ +--- +id: identities +title: Identities +description: Identities +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/identity-history.tag.mdx b/docs/sailpoint-api-beta/identity-history.tag.mdx new file mode 100644 index 000000000..26eab0d3e --- /dev/null +++ b/docs/sailpoint-api-beta/identity-history.tag.mdx @@ -0,0 +1,15 @@ +--- +id: identity-history +title: Identity History +description: Identity History +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/identity-profiles.tag.mdx b/docs/sailpoint-api-beta/identity-profiles.tag.mdx new file mode 100644 index 000000000..a54e90627 --- /dev/null +++ b/docs/sailpoint-api-beta/identity-profiles.tag.mdx @@ -0,0 +1,15 @@ +--- +id: identity-profiles +title: Identity Profiles +description: Identity Profiles +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/ignore-outliers.api.mdx b/docs/sailpoint-api-beta/ignore-outliers.api.mdx new file mode 100644 index 000000000..2929b39a9 --- /dev/null +++ b/docs/sailpoint-api-beta/ignore-outliers.api.mdx @@ -0,0 +1,76 @@ +--- +id: ignore-outliers +sidebar_label: IAI Identity Outliers Ignore +hide_title: true +hide_table_of_contents: true +api: {"operationId":"ignoreOutliers","tags":["IAI Outliers"],"description":"This API receives a list of IdentityIDs in the request, changes the outliers to be ignored--returning a 204 if successful.\nRequires authorization scope of 'iai:outliers-management:update'","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"string"},"description":"List of identity IDs to ignore from outlier listing","example":["abc123def456","ghi789jkl012"]}}}},"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/outliers/ignore","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":["abc123def456","ghi789jkl012"],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"IAI Identity Outliers Ignore","description":{"content":"This API receives a list of IdentityIDs in the request, changes the outliers to be ignored--returning a 204 if successful.\nRequires authorization scope of 'iai:outliers-management:update'","type":"text/plain"},"url":{"path":["outliers","ignore"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## IAI Identity Outliers Ignore + + + +This API receives a list of IdentityIDs in the request, changes the outliers to be ignored--returning a 204 if successful. +Requires authorization scope of 'iai:outliers-management:update' + +
    Request Body array required
    • string
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/import-identity-profiles.api.mdx b/docs/sailpoint-api-beta/import-identity-profiles.api.mdx new file mode 100644 index 000000000..f9eed1095 --- /dev/null +++ b/docs/sailpoint-api-beta/import-identity-profiles.api.mdx @@ -0,0 +1,123 @@ +--- +id: import-identity-profiles +sidebar_label: Import Identity Profiles +hide_title: true +hide_table_of_contents: true +api: {"operationId":"importIdentityProfiles","description":"This imports previously exported identity profiles.","tags":["Identity Profiles"],"requestBody":{"description":"Previously exported Identity Profiles.","required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","description":"Identity Profile exported object","properties":{"version":{"type":"integer","example":1,"description":"Version or object from the target service."},"self":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"object":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object","properties":{"description":{"type":"string","description":"The description of the Identity Profile.","example":"My custom flat file profile"},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The owner of the Identity Profile."},"priority":{"type":"integer","format":"int64","description":"The priority for an Identity Profile.","example":10},"authoritativeSource":{"type":"object","properties":{"type":{"type":"string","enum":["SOURCE"],"description":"Type of the object to which this reference applies","example":"SOURCE"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c9180835d191a86015d28455b4b232a"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"HR Active Directory"}}},"identityRefreshRequired":{"type":"boolean","description":"True if a identity refresh is needed. Typically triggered when a change on the source has been made.","example":true},"identityCount":{"type":"integer","description":"The number of identities that belong to the Identity Profile.","format":"int32","example":8},"identityAttributeConfig":{"type":"object","description":"Defines all the identity attribute mapping configurations. This defines how to generate or collect data for each identity attributes in identity refresh process.","properties":{"enabled":{"description":"The backend will only promote values if the profile/mapping is enabled.","type":"boolean","example":true},"attributeTransforms":{"type":"array","items":{"type":"object","description":"Defines a transformation definition for an identity attribute.","properties":{"identityAttributeName":{"type":"string","description":"Name of the identity attribute.","example":"email"},"transformDefinition":{"description":"The seaspray transformation definition.","type":"object","properties":{"type":{"type":"string","description":"The type of the transform definition.","example":"accountAttribute"},"attributes":{"type":"object","additionalProperties":{"type":"object"},"description":"Arbitrary key-value pairs to store any metadata for the object","example":{"attributeName":"e-mail","sourceName":"MySource","sourceId":"2c9180877a826e68017a8c0b03da1a53"}}}}}}}}},"identityExceptionReportReference":{"type":"object","properties":{"taskResultId":{"type":"string","format":"uuid","description":"The id of the task result.","example":"2c918086795cd09201795d5f7d7533df"},"reportName":{"type":"string","example":"My annual report","description":"The name of the report."}}},"hasTimeBasedAttr":{"description":"Indicates the value of requiresPeriodicRefresh attribute for the Identity Profile.","type":"boolean","example":true}}}]}}}}}}},"responses":{"200":{"description":"The result of importing Identity Profiles.","content":{"application/json":{"schema":{"type":"object","title":"Import Object Response Body","description":"Response model for import of a single object.","properties":{"infos":{"description":"Informational messages returned from the target service on import.","type":"array","items":{"type":"object","title":"Config Import/Export Message","description":"Message model for Config Import/Export.","properties":{"key":{"type":"string","description":"Message key.","example":"UNKNOWN_REFERENCE_RESOLVER"},"text":{"type":"string","description":"Message text.","example":"Unable to resolve reference for object [type: IDENTITY, id: 2c91808c746e9c9601747d6507332ecz, name: random identity]"},"details":{"type":"object","description":"Message details if any, in key:value pairs.","additionalProperties":{"type":"object"},"example":{"details":"message details"}}},"required":["key","text","details"]}},"warnings":{"description":"Warning messages returned from the target service on import.","type":"array","items":{"type":"object","title":"Config Import/Export Message","description":"Message model for Config Import/Export.","properties":{"key":{"type":"string","description":"Message key.","example":"UNKNOWN_REFERENCE_RESOLVER"},"text":{"type":"string","description":"Message text.","example":"Unable to resolve reference for object [type: IDENTITY, id: 2c91808c746e9c9601747d6507332ecz, name: random identity]"},"details":{"type":"object","description":"Message details if any, in key:value pairs.","additionalProperties":{"type":"object"},"example":{"details":"message details"}}},"required":["key","text","details"]}},"errors":{"description":"Error messages returned from the target service on import.","type":"array","items":{"type":"object","title":"Config Import/Export Message","description":"Message model for Config Import/Export.","properties":{"key":{"type":"string","description":"Message key.","example":"UNKNOWN_REFERENCE_RESOLVER"},"text":{"type":"string","description":"Message text.","example":"Unable to resolve reference for object [type: IDENTITY, id: 2c91808c746e9c9601747d6507332ecz, name: random identity]"},"details":{"type":"object","description":"Message details if any, in key:value pairs.","additionalProperties":{"type":"object"},"example":{"details":"message details"}}},"required":["key","text","details"]}},"importedObjects":{"description":"References to objects that were created or updated by the import.","type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}}},"required":["infos","warnings","errors","importedObjects"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:identity-profile:create"]}],"method":"post","path":"/identity-profiles/import","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"version":1,"self":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"object":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson","description":"My custom flat file profile","owner":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"priority":10,"authoritativeSource":{"type":"SOURCE","id":"2c9180835d191a86015d28455b4b232a","name":"HR Active Directory"},"identityRefreshRequired":true,"identityCount":8,"identityAttributeConfig":{"enabled":true,"attributeTransforms":[{"identityAttributeName":"email","transformDefinition":{"type":"accountAttribute","attributes":{"attributeName":"e-mail","sourceName":"MySource","sourceId":"2c9180877a826e68017a8c0b03da1a53"}}}]},"identityExceptionReportReference":{"taskResultId":"2c918086795cd09201795d5f7d7533df","reportName":"My annual report"},"hasTimeBasedAttr":true}}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Import Identity Profiles","description":{"content":"This imports previously exported identity profiles.","type":"text/plain"},"url":{"path":["identity-profiles","import"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Import Identity Profiles + + + +This imports previously exported identity profiles. + +
    Request Body array required
    + +Previously exported Identity Profiles. + +
      self object
      object object
      owner object
      + +The owner of the Identity Profile. + +
      authoritativeSource object
      identityAttributeConfig object
      + +Defines all the identity attribute mapping configurations. This defines how to generate or collect data for each identity attributes in identity refresh process. + +
      attributeTransforms object[]
      transformDefinition object
      + +The seaspray transformation definition. + +
      attributes object
      + +Arbitrary key-value pairs to store any metadata for the object + +
    • property name* object
    • identityExceptionReportReference object
    + +The result of importing Identity Profiles. + +
    Schema
      infos object[]
      + +Informational messages returned from the target service on import. + +
      details object
      + +Message details if any, in key:value pairs. + +
    • property name* object
    • warnings object[]
      + +Warning messages returned from the target service on import. + +
      details object
      + +Message details if any, in key:value pairs. + +
    • property name* object
    • errors object[]
      + +Error messages returned from the target service on import. + +
      details object
      + +Message details if any, in key:value pairs. + +
    • property name* object
    • importedObjects object[]
      + +References to objects that were created or updated by the import. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/lifecycle-states.tag.mdx b/docs/sailpoint-api-beta/lifecycle-states.tag.mdx new file mode 100644 index 000000000..18a9598a1 --- /dev/null +++ b/docs/sailpoint-api-beta/lifecycle-states.tag.mdx @@ -0,0 +1,15 @@ +--- +id: lifecycle-states +title: Lifecycle States +description: Lifecycle States +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-access-profile-entitlements.api.mdx b/docs/sailpoint-api-beta/list-access-profile-entitlements.api.mdx new file mode 100644 index 000000000..4b47e4faa --- /dev/null +++ b/docs/sailpoint-api-beta/list-access-profile-entitlements.api.mdx @@ -0,0 +1,81 @@ +--- +id: list-access-profile-entitlements +sidebar_label: List Access Profile's Entitlements +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listAccessProfileEntitlements","tags":["Access Profiles"],"description":"This API lists the Entitlements associated with a given Access Profile\n\nA token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to invoke this API. In addition, a token with SOURCE_SUBADMIN authority must have access to the Source associated with the given Access Profile","parameters":[{"name":"id","in":"path","description":"ID of the containing Access Profile","required":true,"schema":{"type":"string","example":"2c91808a7813090a017814121919ecca"}},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#filtering-results)\n\nFiltering is supported for the following Entitlement fields and operators:\n**id**: *eq, in*\n\n**name**: *eq, sw*\n\n**attribute**: *eq, sw*\n\n**value**: *eq, sw*\n\n**created, modified**: *gt, lt, ge, le*\n\n**owner.id**: *eq, in*\n\n**source.id**: *eq, in*","example":"attribute eq \"memberOf\"","required":false},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#sorting-results)\n\nSorting is supported for the following fields: **name, attribute, value, created, modified**","example":"name,-modified","required":false}],"responses":{"200":{"description":"List of Entitlements","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The entitlement id","example":"2c91808874ff91550175097daaec161c"},"name":{"type":"string","description":"The entitlement name","example":"LauncherTestGroup2"},"attribute":{"type":"string","description":"The entitlement attribute name","example":"memberOf"},"value":{"type":"string","description":"The value of the entitlement","example":"CN=LauncherTestGroup2,OU=LauncherTestOrg,OU=slpt-automation,DC=TestAutomationAD,DC=local"},"sourceSchemaObjectType":{"type":"string","description":"The object type of the entitlement from the source schema","example":"group"},"description":{"type":"string","description":"The description of the entitlement","example":"CN=LauncherTestGroup2,OU=LauncherTestOrg,OU=slpt-automation,DC=TestAutomationAD,DC=local"},"privileged":{"type":"boolean","description":"True if the entitlement is privileged","example":true},"cloudGoverned":{"type":"boolean","description":"True if the entitlement is cloud governed","example":true},"created":{"type":"string","description":"Time when the entitlement was created","format":"date-time","example":"2020-10-08T18:33:52.029Z"},"modified":{"type":"string","description":"Time when the entitlement was last modified","format":"date-time","example":"2020-10-08T18:33:52.029Z"},"source":{"type":"object","properties":{"id":{"type":"string","description":"The source ID","example":"2c9180827ca885d7017ca8ce28a000eb"},"type":{"type":"string","description":"The source type, will always be \"SOURCE\"","example":"SOURCE"},"name":{"type":"string","description":"The source name","example":"ODS-AD-Source"}},"example":[{"type":"SOURCE","id":"2c9180835d191a86015d28455b4b232a","name":"HR Active Directory"}]},"attributes":{"type":"object","description":"A map of free-form key-value pairs from the source system","example":{"fieldName":"fieldValue"},"additionalProperties":true},"segments":{"type":"array","items":{"type":"string"},"nullable":true,"description":"List of IDs of segments, if any, to which this Entitlement is assigned.","example":["f7b1b8a3-5fed-4fd4-ad29-82014e137e19","29cb6c06-1da8-43ea-8be4-b3125f248f2a"]},"directPermissions":{"type":"array","items":{"type":"object","description":"Simplified DTO for the Permission objects stored in SailPoint's database. The data is aggregated from customer systems and is free-form, so its appearance can vary largely between different clients/customers.","properties":{"rights":{"type":"array","description":"All the rights (e.g. actions) that this permission allows on the target","readOnly":true,"items":{"type":"string","example":"SELECT"}},"target":{"type":"string","description":"The target the permission would grants rights on.","readOnly":true,"example":"SYS.GV_$TRANSACTION"}}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:access-profile:read"]}],"method":"get","path":"/access-profiles/{id}/entitlements","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Access Profile's Entitlements","description":{"content":"This API lists the Entitlements associated with a given Access Profile\n\nA token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to invoke this API. In addition, a token with SOURCE_SUBADMIN authority must have access to the Source associated with the given Access Profile","type":"text/plain"},"url":{"path":["access-profiles",":id","entitlements"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#filtering-results)\n\nFiltering is supported for the following Entitlement fields and operators:\n**id**: *eq, in*\n\n**name**: *eq, sw*\n\n**attribute**: *eq, sw*\n\n**value**: *eq, sw*\n\n**created, modified**: *gt, lt, ge, le*\n\n**owner.id**: *eq, in*\n\n**source.id**: *eq, in*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#sorting-results)\n\nSorting is supported for the following fields: **name, attribute, value, created, modified**","type":"text/plain"},"key":"sorters","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the containing Access Profile","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Access Profile's Entitlements + + + +This API lists the Entitlements associated with a given Access Profile + +A token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to invoke this API. In addition, a token with SOURCE_SUBADMIN authority must have access to the Source associated with the given Access Profile + +
    Path Parameters
    Query Parameters
    + +List of Entitlements + +
    Schema array
      source object
      attributes object
      + +A map of free-form key-value pairs from the source system + +
      directPermissions object[]
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-access-profiles.api.mdx b/docs/sailpoint-api-beta/list-access-profiles.api.mdx new file mode 100644 index 000000000..f2ab119b2 --- /dev/null +++ b/docs/sailpoint-api-beta/list-access-profiles.api.mdx @@ -0,0 +1,113 @@ +--- +id: list-access-profiles +sidebar_label: List Access Profiles +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listAccessProfiles","tags":["Access Profiles"],"description":"This API returns a list of Access Profiles.\n\nA token with API, ORG_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","parameters":[{"in":"query","name":"for-subadmin","schema":{"type":"string"},"description":"If provided, filters the returned list according to what is visible to the indicated ROLE_SUBADMIN or SOURCE_SUBADMIN Identity. The value of the parameter is either an Identity ID, or the special value **me**, which is shorthand for the calling Identity's ID.\n\nA 400 Bad Request error is returned if the **for-subadmin** parameter is specified for an Identity that is not a subadmin.","example":"8c190e6787aa4ed9a90bd9d5344523fb","required":false},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":50,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":50,"default":50}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#filtering-results)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**name**: *eq, sw*\n\n**created, modified**: *gt, lt, ge, le*\n\n**owner.id**: *eq, in*\n\n**requestable**: *eq*\n\n**source.id**: *eq, in*","example":"name eq \"SailPoint Support\"","required":false},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#sorting-results)\n\nSorting is supported for the following fields: **name, created, modified**","example":"name,-modified","required":false},{"in":"query","name":"for-segment-ids","schema":{"type":"string","format":"comma-separated"},"description":"If present and not empty, additionally filters Access Profiles to those which are assigned to the Segment(s) with the specified IDs.\n\nIf segmentation is currently unavailable, specifying this parameter results in an error.","example":"0b5c9f25-83c6-4762-9073-e38f7bb2ae26,2e8d8180-24bc-4d21-91c6-7affdb473b0d","required":false},{"in":"query","name":"include-unsegmented","schema":{"type":"boolean","default":true},"description":"Whether or not the response list should contain unsegmented Access Profiles. If *for-segment-ids* is absent or empty, specifying *include-unsegmented* as false results in an error.","example":false,"required":false}],"responses":{"200":{"description":"List of Access Profiles","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the Access Profile","example":"2c91808a7190d06e01719938fcd20792","readOnly":true},"name":{"type":"string","description":"Name of the Access Profile","example":"Employee-database-read-write"},"description":{"type":"string","description":"Information about the Access Profile","example":"Collection of entitlements to read/write the employee database"},"created":{"type":"string","description":"Date the Access Profile was created","format":"date-time","example":"2021-03-01T22:32:58.104Z","readOnly":true},"modified":{"type":"string","description":"Date the Access Profile was last modified.","format":"date-time","example":"2021-03-02T20:22:28.104Z","readOnly":true},"enabled":{"type":"boolean","description":"Whether the Access Profile is enabled. If the Access Profile is enabled then you must include at least one Entitlement.","example":true},"owner":{"description":"Owner of the Access Profile","type":"object","properties":{"type":{"description":"Owner type. This field must be either left null or set to 'IDENTITY' on input, otherwise a 400 Bad Request error will result.","example":"IDENTITY","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"]},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of the owner. It may be left null or omitted in a POST or PATCH. If set, it must match the current value of the owner's display name, otherwise a 400 Bad Request error will result.","example":"support"}}},"source":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the Source with with which the Access Profile is associated","example":"2c91809773dee3610173fdb0b6061ef4"},"type":{"type":"string","enum":["SOURCE"],"description":"The type of the Source, will always be SOURCE","example":"SOURCE"},"name":{"type":"string","description":"The display name of the associated Source","example":"ODS-AD-SOURCE"}}},"entitlements":{"type":"array","description":"A list of entitlements associated with the Access Profile. If enabled is false this is allowed to be empty otherwise it needs to contain at least one Entitlement.","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the Entitlement","example":"2c91809773dee32014e13e122092014e"},"type":{"type":"string","enum":["ENTITLEMENT"],"description":"The type of the Entitlement, will always be ENTITLEMENT","example":"ENTITLEMENT"},"name":{"type":"string","description":"The display name of the Entitlement","example":"CN=entitlement.490efde5,OU=OrgCo,OU=ServiceDept,DC=HQAD,DC=local"}}}},"requestable":{"type":"boolean","description":"Whether the Access Profile is requestable via access request. Currently, making an Access Profile non-requestable is only supported for customers enabled with the new Request Center. Otherwise, attempting to create an Access Profile with a value **false** in this field results in a 400 error.","example":true},"accessRequestConfig":{"description":"Access request configuration for this object","type":"object","properties":{"commentsRequired":{"type":"boolean","description":"Whether the requester of the containing object must provide comments justifying the request","example":true},"denialCommentsRequired":{"type":"boolean","description":"Whether an approver must provide comments when denying the request","example":true},"approvalSchemes":{"type":"array","description":"List describing the steps in approving the request","items":{"type":"object","properties":{"approverType":{"type":"string","enum":["OWNER","SOURCE_OWNER","MANAGER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step. Values are as follows.\n\n**OWNER**: Owner of the associated Access Profile or Role\n\n**SOURCE_OWNER**: Owner of the Source associated with an Access Profile\n\n**MANAGER**: Manager of the Identity making the request\n\n**GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field","example":"GOVERNANCE_GROUP"},"approverId":{"type":"string","description":"Id of the specific approver, used only when approverType is GOVERNANCE_GROUP","example":"46c79819-a69f-49a2-becb-12c971ae66c6"}}}}}},"revocationRequestConfig":{"description":"Revocation request configuration for this object.","type":"object","properties":{"approvalSchemes":{"type":"array","description":"List describing the steps in approving the revocation request","items":{"type":"object","properties":{"approverType":{"type":"string","enum":["OWNER","SOURCE_OWNER","MANAGER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step. Values are as follows.\n\n**OWNER**: Owner of the associated Access Profile or Role\n\n**SOURCE_OWNER**: Owner of the Source associated with an Access Profile\n\n**MANAGER**: Manager of the Identity making the request\n\n**GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field","example":"GOVERNANCE_GROUP"},"approverId":{"type":"string","description":"Id of the specific approver, used only when approverType is GOVERNANCE_GROUP","example":"46c79819-a69f-49a2-becb-12c971ae66c6"}}}}}},"segments":{"type":"array","items":{"type":"string"},"description":"List of IDs of segments, if any, to which this Access Profile is assigned.","example":["f7b1b8a3-5fed-4fd4-ad29-82014e137e19","29cb6c06-1da8-43ea-8be4-b3125f248f2a"]},"provisioningCriteria":{"description":"When an Identity has multiple Accounts on the Source with which an Access Profile is associated, this expression is evaluated against those Accounts to choose one to provision with the Access Profile.","nullable":true,"example":{"operation":"OR","children":[{"operation":"AND","children":[{"attribute":"dn","operation":"CONTAINS","value":"useast"},{"attribute":"manager","operation":"CONTAINS","value":"Scott.Clark"}]},{"operation":"AND","children":[{"attribute":"dn","operation":"EQUALS","value":"Gibson"},{"attribute":"telephoneNumber","operation":"CONTAINS","value":"512"}]}]},"type":"object","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","HAS","AND","OR"],"description":"Supported operations on ProvisioningCriteria","example":"EQUALS"},"attribute":{"type":"string","description":"Name of the Account attribute to be tested. If **operation** is one of EQUALS, NOT_EQUALS, CONTAINS, or HAS, this field is required. Otherwise, specifying it is an error.","example":"email","nullable":true},"value":{"type":"string","description":"String value to test the Account attribute w/r/t the specified operation. If the operation is one of EQUALS, NOT_EQUALS, or CONTAINS, this field is required. Otherwise, specifying it is an error. If the Attribute is not String-typed, it will be converted to the appropriate type.","example":"carlee.cert1c9f9b6fd@mailinator.com"},"children":{"type":"array","items":{"type":"object","description":"Defines matching criteria for an Account to be provisioned with a specific Access Profile","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","HAS","AND","OR"],"description":"Supported operations on ProvisioningCriteria","example":"EQUALS"},"attribute":{"type":"string","description":"Name of the Account attribute to be tested. If **operation** is one of EQUALS, NOT_EQUALS, CONTAINS, or HAS, this field is required. Otherwise, specifying it is an error.","example":"email","nullable":true},"value":{"type":"string","description":"String value to test the Account attribute w/r/t the specified operation. If the operation is one of EQUALS, NOT_EQUALS, or CONTAINS, this field is required. Otherwise, specifying it is an error. If the Attribute is not String-typed, it will be converted to the appropriate type.","example":"carlee.cert1c9f9b6fd@mailinator.com"},"children":{"type":"array","items":{"type":"object","description":"Defines matching criteria for an Account to be provisioned with a specific Access Profile","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","HAS","AND","OR"],"description":"Supported operations on ProvisioningCriteria","example":"EQUALS"},"attribute":{"type":"string","description":"Name of the Account attribute to be tested. If **operation** is one of EQUALS, NOT_EQUALS, CONTAINS, or HAS, this field is required. Otherwise, specifying it is an error.","example":"email","nullable":true},"value":{"type":"string","description":"String value to test the Account attribute w/r/t the specified operation. If the operation is one of EQUALS, NOT_EQUALS, or CONTAINS, this field is required. Otherwise, specifying it is an error. If the Attribute is not String-typed, it will be converted to the appropriate type.","example":"carlee.cert1c9f9b6fd@mailinator.com"}}},"nullable":true,"description":"Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes.","example":null}}},"nullable":true,"description":"Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes.","example":null}}}},"required":["owner","name","source"]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:access-profile:read"]}],"method":"get","path":"/access-profiles","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Access Profiles","description":{"content":"This API returns a list of Access Profiles.\n\nA token with API, ORG_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["access-profiles"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"If provided, filters the returned list according to what is visible to the indicated ROLE_SUBADMIN or SOURCE_SUBADMIN Identity. The value of the parameter is either an Identity ID, or the special value **me**, which is shorthand for the calling Identity's ID.\n\nA 400 Bad Request error is returned if the **for-subadmin** parameter is specified for an Identity that is not a subadmin.","type":"text/plain"},"key":"for-subadmin","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#filtering-results)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**name**: *eq, sw*\n\n**created, modified**: *gt, lt, ge, le*\n\n**owner.id**: *eq, in*\n\n**requestable**: *eq*\n\n**source.id**: *eq, in*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#sorting-results)\n\nSorting is supported for the following fields: **name, created, modified**","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"If present and not empty, additionally filters Access Profiles to those which are assigned to the Segment(s) with the specified IDs.\n\nIf segmentation is currently unavailable, specifying this parameter results in an error.","type":"text/plain"},"key":"for-segment-ids","value":""},{"disabled":false,"description":{"content":"Whether or not the response list should contain unsegmented Access Profiles. If *for-segment-ids* is absent or empty, specifying *include-unsegmented* as false results in an error.","type":"text/plain"},"key":"include-unsegmented","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Access Profiles + + + +This API returns a list of Access Profiles. + +A token with API, ORG_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + +
    Query Parameters
    + +List of Access Profiles + +
    Schema array
      owner object
      + +Owner of the Access Profile + +
      source object
      entitlements object[]
      + +A list of entitlements associated with the Access Profile. If enabled is false this is allowed to be empty otherwise it needs to contain at least one Entitlement. + +
      accessRequestConfig object
      + +Access request configuration for this object + +
      approvalSchemes object[]
      + +List describing the steps in approving the request + +
      revocationRequestConfig object
      + +Revocation request configuration for this object. + +
      approvalSchemes object[]
      + +List describing the steps in approving the revocation request + +
      provisioningCriteria object
      + +When an Identity has multiple Accounts on the Source with which an Access Profile is associated, this expression is evaluated against those Accounts to choose one to provision with the Access Profile. + +
      children object[]
      + +Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. + +
      children object[]
      + +Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-access-request-status.api.mdx b/docs/sailpoint-api-beta/list-access-request-status.api.mdx new file mode 100644 index 000000000..7cbe47378 --- /dev/null +++ b/docs/sailpoint-api-beta/list-access-request-status.api.mdx @@ -0,0 +1,164 @@ +--- +id: list-access-request-status +sidebar_label: Access Request Status +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listAccessRequestStatus","tags":["Access Requests"],"description":"The Access Request Status API returns a list of access request statuses based on the specified query parameters.\nAny token with any authority can request their own status. A token with ORG_ADMIN authority is required to call this API to get a list of statuses for other users.","parameters":[{"in":"query","name":"requested-for","schema":{"type":"string"},"example":"2c9180877b2b6ea4017b2c545f971429","description":"Filter the results by the identity for which the requests were made. *me* indicates the current user. Mutually exclusive with *regarding-identity*.","required":false},{"in":"query","name":"requested-by","schema":{"type":"string"},"example":"2c9180877b2b6ea4017b2c545f971429","description":"Filter the results by the identity that made the requests. *me* indicates the current user. Mutually exclusive with *regarding-identity*.","required":false},{"in":"query","name":"regarding-identity","schema":{"type":"string"},"example":"2c9180877b2b6ea4017b2c545f971429","description":"Filter the results by the specified identity which is either the requester or target of the requests. *me* indicates the current user. Mutually exclusive with *requested-for* and *requested-by*.","required":false},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.","required":false,"schema":{"type":"boolean","default":false},"example":false},{"in":"query","name":"limit","description":"Max number of results to return.","required":false,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250},"example":100},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results. Defaults to 0 if not specified.","required":false,"schema":{"type":"integer","format":"int32","minimum":0},"example":10}],"responses":{"200":{"description":"List of requested item status.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Human-readable display name of the item being requested.","example":"AccessProfile1"},"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE","ENTITLEMENT"],"description":"Type of requested object.","example":"ACCESS_PROFILE"},"cancelledRequestDetails":{"type":"object","properties":{"comment":{"type":"string","description":"Comment made by the owner when cancelling the associated request.","example":"Nisl quis ipsum quam quisque condimentum nunc ut dolor nunc."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"modified":{"type":"string","format":"date-time","description":"Date comment was added by the owner when cancelling the associated request","example":"2019-12-20T09:17:12.192Z"}},"description":"Provides additional details for a request that has been cancelled."},"errorMessages":{"type":"array","items":{"type":"array","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"description":"List of list of localized error messages, if any, encountered during the approval/provisioning process."},"state":{"type":"string","enum":["EXECUTING","REQUEST_COMPLETED","CANCELLED","TERMINATED","PROVISIONING_VERIFICATION_PENDING","REJECTED","PROVISIONING_FAILED","NOT_ALL_ITEMS_PROVISIONED","ERROR"],"description":"Indicates the state of an access request:\n* EXECUTING: The request is executing, which indicates the system is doing some processing.\n* REQUEST_COMPLETED: Indicates the request has been completed.\n* CANCELLED: The request was cancelled with no user input.\n* TERMINATED: The request has been terminated before it was able to complete.\n* PROVISIONING_VERIFICATION_PENDING: The request has finished any approval steps and provisioning is waiting to be verified.\n* REJECTED: The request was rejected.\n* PROVISIONING_FAILED: The request has failed to complete.\n* NOT_ALL_ITEMS_PROVISIONED: One or more of the requested items failed to complete, but there were one or more successes.\n* ERROR: An error occurred during request processing.","example":"EXECUTING"},"approvalDetails":{"type":"array","items":{"type":"object","properties":{"forwarded":{"type":"boolean","description":"True if the request for this item was forwarded from one owner to another."},"originalOwner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Base identity/workgroup reference object representing the original owner, if forwarded."},"currentOwner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Base reference of approver that will make decision."},"reviewedBy":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The identity who has reviewed the approval."},"modified":{"type":"string","format":"date-time","description":"Time at which item was modified.","example":"2019-08-23T18:52:57.398Z"},"status":{"type":"string","enum":["PENDING","APPROVED","REJECTED","EXPIRED","CANCELLED","ARCHIVED"],"description":"Indicates the state of the request processing for this item:\n* PENDING: The request for this item is awaiting processing.\n* APPROVED: The request for this item has been approved.\n* REJECTED: The request for this item was rejected.\n* EXPIRED: The request for this item expired with no action taken.\n* CANCELLED: The request for this item was cancelled with no user action.\n* ARCHIVED: The request for this item has been archived after completion.","example":"PENDING"},"scheme":{"type":"string","enum":["APP_OWNER","SOURCE_OWNER","MANAGER","ROLE_OWNER","ACCESS_PROFILE_OWNER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step."},"errorMessages":{"type":"array","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}},"description":"If the request failed, includes any error messages that were generated."},"comment":{"type":"string","description":"Comment, if any, provided by the approver."},"removeDate":{"type":"string","description":"The date the role or access profile is no longer assigned to the specified identity.","format":"date-time","example":"2020-07-11T00:00:00Z"}}},"description":"Approval details for each item."},"manualWorkItemDetails":{"type":"array","items":{"type":"object","properties":{"forwarded":{"type":"boolean","description":"True if the request for this item was forwarded from one owner to another.","example":true},"originalOwner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Base identity/workgroup reference object representing the original owner, if forwarded."},"currentOwner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Base reference of approver that will make decision."},"modified":{"type":"string","format":"date-time","description":"Time at which item was modified.","example":"2019-08-23T18:52:57.398Z"},"status":{"type":"string","enum":["PENDING","APPROVED","REJECTED","EXPIRED","CANCELLED","ARCHIVED"],"description":"Indicates the state of the request processing for this item:\n* PENDING: The request for this item is awaiting processing.\n* APPROVED: The request for this item has been approved.\n* REJECTED: The request for this item was rejected.\n* EXPIRED: The request for this item expired with no action taken.\n* CANCELLED: The request for this item was cancelled with no user action.\n* ARCHIVED: The request for this item has been archived after completion.","example":"PENDING"}}},"description":"Manual work items created for provisioning the item."},"accountActivityItemId":{"type":"string","description":"Id of associated account activity item.","example":"2c9180926cbfbddd016cbfc7c3b10010"},"requestType":{"type":"string","enum":["GRANT_ACCESS","REVOKE_ACCESS"],"description":"Access request type. Defaults to GRANT_ACCESS. REVOKE_ACCESS type can only have a single Identity ID in the requestedFor field. Currently REVOKE_ACCESS is not supported for entitlements.","example":"GRANT_ACCESS"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"},"requester":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The identity that requested the item."},"requestedFor":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The identity for whom the Access Request Status is requested for."},"requesterComment":{"description":"The requester's comment.","type":"object","properties":{"comment":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat"},"author":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"ID of the author","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"}}},"created":{"type":"string","format":"date-time","description":"Date and time comment was created","example":"2017-07-11T18:45:37.098Z"}}},"sodViolationContext":{"description":"The details of the SOD violations for the associated approval.","type":"object","properties":{"state":{"type":"string","enum":["SUCCESS","ERROR"],"description":"The status of SOD violation check","example":"SUCCESS"},"uuid":{"description":"The id of the Violation check event","type":"string","example":"f73d16e9-a038-46c5-b217-1246e15fdbdd"},"violationCheckResult":{"description":"The inner object representing the completed SOD Violation check","type":"object","properties":{"message":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}},"description":"If the request failed, includes any error message that was generated.","example":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An error has occurred during the SOD violation check"}]},"clientMetadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on completion of the violation check.","example":{"requestedAppName":"test-app","requestedAppId":"2c91808f7892918f0178b78da4a305a1"}},"violationContexts":{"type":"array","items":{"description":"The contextual information of the violated criteria","type":"object","properties":{"policy":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the Policy that is being violated."},"conflictingAccessCriteria":{"type":"object","description":"The object which contains the left and right hand side of the entitlements that got violated according to the policy.","properties":{"leftCriteria":{"type":"object","properties":{"criteriaList":{"type":"array","items":{"description":"Details of the Entitlement criteria","type":"object","properties":{"existing":{"type":"boolean","example":true,"description":"If the entitlement already belonged to the user or not."},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Entitlement ID","example":"2c918085771e9d3301773b3cb66f6398"},"name":{"type":"string","description":"Entitlement name","example":"My HR Entitlement"}}}}}},"rightCriteria":{"type":"object","properties":{"criteriaList":{"type":"array","items":{"description":"Details of the Entitlement criteria","type":"object","properties":{"existing":{"type":"boolean","example":true,"description":"If the entitlement already belonged to the user or not."},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Entitlement ID","example":"2c918085771e9d3301773b3cb66f6398"},"name":{"type":"string","description":"Entitlement name","example":"My HR Entitlement"}}}}}}}}}}},"violatedPolicies":{"type":"array","description":"A list of the Policies that were violated","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the policy that was violated","example":[{"type":"SOD_POLICY","id":"69129440-422d-4a23-aadd-35c828d5bfda","name":"HR Policy"}]}}}}}},"provisioningDetails":{"type":"object","properties":{"orderedSubPhaseReferences":{"type":"string","description":"Ordered CSV of sub phase references to objects that contain more information about provisioning. For example, this can contain \"manualWorkItemDetails\" which indicate that there is further information in that object for this phase.","example":"manualWorkItemDetails"}},"description":"Provides additional details about provisioning for this request."},"preApprovalTriggerDetails":{"type":"object","properties":{"comment":{"type":"string","description":"Comment left for the pre-approval decision","example":"Access is Approved"},"reviewer":{"type":"string","description":"The reviewer of the pre-approval decision","example":"John Doe"},"decision":{"type":"string","enum":["APPROVED","REJECTED"],"description":"The decision of the pre-approval trigger","example":"APPROVED"}},"description":"Provides additional details about the pre-approval trigger for this request."},"accessRequestPhases":{"type":"array","items":{"type":"object","properties":{"started":{"type":"string","description":"The time that this phase started.","format":"date-time","example":"2020-07-11T00:00:00Z"},"finished":{"type":"string","description":"The time that this phase finished.","format":"date-time","example":"2020-07-12T00:00:00Z"},"name":{"type":"string","description":"The name of this phase.","example":"APPROVAL_PHASE"},"state":{"type":"string","enum":["PENDING","EXECUTING","COMPLETED","CANCELLED"],"description":"The state of this phase.","example":"COMPLETED"},"result":{"type":"string","enum":["SUCCESSFUL","FAILED"],"description":"The state of this phase.","example":"SUCCESSFUL"},"phaseReference":{"type":"string","description":"A reference to another object on the RequestedItemStatus that contains more details about the phase. Note that for the Provisioning phase, this will be empty if there are no manual work items.","example":"approvalDetails"}},"description":"Provides additional details about this access request phase."},"description":"A list of Phases that the Access Request has gone through in order, to help determine the status of the request."},"description":{"type":"string","description":"Description associated to the requested object.","example":"This is the Engineering role that engineers are granted."},"removeDate":{"type":"string","format":"date-time","description":"When the role access is scheduled for removal.","example":"2019-10-23T00:00:00.000Z"},"cancelable":{"type":"boolean","description":"True if the request can be canceled.","example":true},"accessRequestId":{"type":"string","format":"uuid","description":"This is the account activity id.","example":"ef38f94347e94562b5bb8424a56397d8"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/access-request-status","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Access Request Status","description":{"content":"The Access Request Status API returns a list of access request statuses based on the specified query parameters.\nAny token with any authority can request their own status. A token with ORG_ADMIN authority is required to call this API to get a list of statuses for other users.","type":"text/plain"},"url":{"path":["access-request-status"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Filter the results by the identity for which the requests were made. *me* indicates the current user. Mutually exclusive with *regarding-identity*.","type":"text/plain"},"key":"requested-for","value":""},{"disabled":false,"description":{"content":"Filter the results by the identity that made the requests. *me* indicates the current user. Mutually exclusive with *regarding-identity*.","type":"text/plain"},"key":"requested-by","value":""},{"disabled":false,"description":{"content":"Filter the results by the specified identity which is either the requester or target of the requests. *me* indicates the current user. Mutually exclusive with *requested-for* and *requested-by*.","type":"text/plain"},"key":"regarding-identity","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Max number of results to return.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results. Defaults to 0 if not specified.","type":"text/plain"},"key":"offset","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Access Request Status + + + +The Access Request Status API returns a list of access request statuses based on the specified query parameters. +Any token with any authority can request their own status. A token with ORG_ADMIN authority is required to call this API to get a list of statuses for other users. + +
    Query Parameters
    + +List of requested item status. + +
    Schema array
      cancelledRequestDetails object
      + +Provides additional details for a request that has been cancelled. + +
      owner object
      approvalDetails object[]
      + +Approval details for each item. + +
      originalOwner object
      + +Base identity/workgroup reference object representing the original owner, if forwarded. + +
      currentOwner object
      + +Base reference of approver that will make decision. + +
      reviewedBy object
      + +The identity who has reviewed the approval. + +
      errorMessages object[]
      + +If the request failed, includes any error messages that were generated. + +
      manualWorkItemDetails object[]
      + +Manual work items created for provisioning the item. + +
      originalOwner object
      + +Base identity/workgroup reference object representing the original owner, if forwarded. + +
      currentOwner object
      + +Base reference of approver that will make decision. + +
      requester object
      + +The identity that requested the item. + +
      requestedFor object
      + +The identity for whom the Access Request Status is requested for. + +
      requesterComment object
      + +The requester's comment. + +
      author object
      sodViolationContext object
      + +The details of the SOD violations for the associated approval. + +
      violationCheckResult object
      + +The inner object representing the completed SOD Violation check + +
      message object
      + +If the request failed, includes any error message that was generated. + +
      clientMetadata object
      + +Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on completion of the violation check. + +
    • property name* string
    • violationContexts object[]
      policy object
      + +Reference to the Policy that is being violated. + +
      conflictingAccessCriteria object
      + +The object which contains the left and right hand side of the entitlements that got violated according to the policy. + +
      leftCriteria object
      criteriaList object[]
      rightCriteria object
      criteriaList object[]
      violatedPolicies object[]
      + +A list of the Policies that were violated + +
      provisioningDetails object
      + +Provides additional details about provisioning for this request. + +
      preApprovalTriggerDetails object
      + +Provides additional details about the pre-approval trigger for this request. + +
      accessRequestPhases object[]
      + +A list of Phases that the Access Request has gone through in order, to help determine the status of the request. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-account-activities.api.mdx b/docs/sailpoint-api-beta/list-account-activities.api.mdx new file mode 100644 index 000000000..13e9add9a --- /dev/null +++ b/docs/sailpoint-api-beta/list-account-activities.api.mdx @@ -0,0 +1,87 @@ +--- +id: list-account-activities +sidebar_label: List Account Activities +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listAccountActivities","tags":["Account Activities"],"description":"This gets a collection of account activities that satisfy the given query parameters.","parameters":[{"in":"query","name":"requested-for","schema":{"type":"string"},"description":"The identity that the activity was requested for. *me* indicates the current user. Mutually exclusive with *regarding-identity*.","required":false},{"in":"query","name":"requested-by","schema":{"type":"string"},"description":"The identity that requested the activity. *me* indicates the current user. Mutually exclusive with *regarding-identity*.","required":false},{"in":"query","name":"regarding-identity","schema":{"type":"string"},"description":"The specified identity will be either the requester or target of the account activity. *me* indicates the current user. Mutually exclusive with *requested-for* and *requested-by*.","required":false},{"in":"query","name":"type","schema":{"type":"string"},"description":"The type of account activity.","required":false},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**type**: *eq, in*\n\n**created**: *gt, lt, ge, le*\n\n**modified**: *gt, lt, ge, le*"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **type, created, modified**"}],"responses":{"200":{"description":"List of account activities","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the account activity itself","example":"2c9180835d2e5168015d32f890ca1581"},"name":{"type":"string","example":"2c9180835d2e5168015d32f890ca1581"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"completed":{"type":"string","format":"date-time","example":"2018-10-19T13:49:37.385Z"},"completionStatus":{"nullable":true,"type":"string","enum":["SUCCESS","FAILURE","INCOMPLETE","PENDING"]},"type":{"type":"string","example":"appRequest"},"requesterIdentitySummary":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"ID of this identity summary","example":"ff80818155fe8c080155fe8d925b0316"},"name":{"type":"string","description":"Human-readable display name of identity","example":"SailPoint Services"},"identityId":{"type":"string","description":"ID of the identity that this summary represents","example":"c15b9f5cca5a4e9599eaa0e64fa921bd"},"completed":{"type":"boolean","description":"Indicates if all access items for this summary have been decided on"}}},"targetIdentitySummary":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"ID of this identity summary","example":"ff80818155fe8c080155fe8d925b0316"},"name":{"type":"string","description":"Human-readable display name of identity","example":"SailPoint Services"},"identityId":{"type":"string","description":"ID of the identity that this summary represents","example":"c15b9f5cca5a4e9599eaa0e64fa921bd"},"completed":{"type":"boolean","description":"Indicates if all access items for this summary have been decided on"}}},"errors":{"type":"array","items":{"type":"string"},"example":["sailpoint.connector.ConnectorException: java.lang.InterruptedException: Timeout waiting for response to message 0 from client 57a4ab97-ab3f-4aef-9fe2-0eaf15c73d26 after 60 seconds."]},"warnings":{"type":"array","items":{"type":"string"},"example":null},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Item id","example":"2725138ee34949beb0d6cc982d2d4625"},"name":{"type":"string","description":"Human-readable display name of item"},"requested":{"type":"string","format":"date-time","description":"Date and time item was requested","example":"2017-07-11T18:45:37.098Z"},"approvalStatus":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"provisioningStatus":{"type":"string","enum":["PENDING","FINISHED","UNVERIFIABLE","COMMITED","FAILED","RETRY"],"description":"Provisioning state of an account activity item"},"requesterComment":{"type":"object","nullable":true,"properties":{"commenterId":{"type":"string","description":"Id of the identity making the comment","example":"2c918084660f45d6016617daa9210584"},"commenterName":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"},"body":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat."},"date":{"type":"string","format":"date-time","description":"Date and time comment was made","example":"2017-07-11T18:45:37.098Z"}}},"reviewerIdentitySummary":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"ID of this identity summary","example":"ff80818155fe8c080155fe8d925b0316"},"name":{"type":"string","description":"Human-readable display name of identity","example":"SailPoint Services"},"identityId":{"type":"string","description":"ID of the identity that this summary represents","example":"c15b9f5cca5a4e9599eaa0e64fa921bd"},"completed":{"type":"boolean","description":"Indicates if all access items for this summary have been decided on"}}},"reviewerComment":{"type":"object","nullable":true,"properties":{"commenterId":{"type":"string","description":"Id of the identity making the comment","example":"2c918084660f45d6016617daa9210584"},"commenterName":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"},"body":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat."},"date":{"type":"string","format":"date-time","description":"Date and time comment was made","example":"2017-07-11T18:45:37.098Z"}}},"operation":{"type":"string","enum":["ADD","CREATE","MODIFY","DELETE","DISABLE","ENABLE","UNLOCK","LOCK","REMOVE"],"description":"Represents an operation in an account activity item"},"attribute":{"type":"string","description":"Attribute to which account activity applies","nullable":true,"example":"detectedRoles"},"value":{"type":"string","description":"Value of attribute","nullable":true,"example":"Treasury Analyst [AccessProfile-1529010191212]"},"nativeIdentity":{"nullable":true,"type":"string","description":"Native identity in the target system to which the account activity applies","example":"Sandie.Camero"},"sourceId":{"type":"string","description":"Id of Source to which account activity applies","example":"2c91808363ef85290164000587130c0c"},"accountRequestInfo":{"type":"object","nullable":true,"properties":{"requestedObjectId":{"type":"string","description":"Id of requested object","example":"2c91808563ef85690164001c31140c0c"},"requestedObjectName":{"type":"string","description":"Human-readable name of requested object","example":"Treasury Analyst"},"requestedObjectType":{"type":"string","enum":["ACCESS_PROFILE","ROLE"],"description":"Enum represented the currently supported requestable object types. Additional values may be added in the future without notice.","example":"ACCESS_PROFILE"}},"description":"If an account activity item is associated with an access request, captures details of that request."},"clientMetadata":{"nullable":true,"type":"object","additionalProperties":{"type":"string"},"description":"Arbitrary key-value pairs, if any were included in the corresponding access request item"},"removeDate":{"nullable":true,"type":"string","description":"The date the role or access profile is no longer assigned to the specified identity.","format":"date-time","example":"2020-07-11T00:00:00Z"}}}},"executionStatus":{"type":"string","enum":["EXECUTING","VERIFYING","TERMINATED","COMPLETED"]},"clientMetadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Arbitrary key-value pairs, if any were included in the corresponding access request"},"cancelable":{"type":"boolean","description":"Whether the account activity can be canceled before completion"},"cancelComment":{"type":"object","nullable":true,"properties":{"commenterId":{"type":"string","description":"Id of the identity making the comment","example":"2c918084660f45d6016617daa9210584"},"commenterName":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"},"body":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat."},"date":{"type":"string","format":"date-time","description":"Date and time comment was made","example":"2017-07-11T18:45:37.098Z"}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/account-activities","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Account Activities","description":{"content":"This gets a collection of account activities that satisfy the given query parameters.","type":"text/plain"},"url":{"path":["account-activities"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The identity that the activity was requested for. *me* indicates the current user. Mutually exclusive with *regarding-identity*.","type":"text/plain"},"key":"requested-for","value":""},{"disabled":false,"description":{"content":"The identity that requested the activity. *me* indicates the current user. Mutually exclusive with *regarding-identity*.","type":"text/plain"},"key":"requested-by","value":""},{"disabled":false,"description":{"content":"The specified identity will be either the requester or target of the account activity. *me* indicates the current user. Mutually exclusive with *requested-for* and *requested-by*.","type":"text/plain"},"key":"regarding-identity","value":""},{"disabled":false,"description":{"content":"The type of account activity.","type":"text/plain"},"key":"type","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**type**: *eq, in*\n\n**created**: *gt, lt, ge, le*\n\n**modified**: *gt, lt, ge, le*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **type, created, modified**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Account Activities + + + +This gets a collection of account activities that satisfy the given query parameters. + +
    Query Parameters
    + +List of account activities + +
    Schema array
      requesterIdentitySummary object
      targetIdentitySummary object
      items object[]
      requesterComment object
      reviewerIdentitySummary object
      reviewerComment object
      accountRequestInfo object
      + +If an account activity item is associated with an access request, captures details of that request. + +
      clientMetadata object
      + +Arbitrary key-value pairs, if any were included in the corresponding access request item + +
    • property name* string
    • clientMetadata object
      + +Arbitrary key-value pairs, if any were included in the corresponding access request + +
    • property name* string
    • cancelComment object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-accounts.api.mdx b/docs/sailpoint-api-beta/list-accounts.api.mdx new file mode 100644 index 000000000..276a0c48c --- /dev/null +++ b/docs/sailpoint-api-beta/list-accounts.api.mdx @@ -0,0 +1,76 @@ +--- +id: list-accounts +sidebar_label: Accounts List +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listAccounts","tags":["Accounts"],"description":"This returns a list of accounts. \nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:account-list:read"]}],"parameters":[{"in":"query","name":"detailLevel","schema":{"type":"string","enum":["SLIM","FULL"]},"description":"Determines whether Slim, or increased level of detail is provided for each account in the returned list. FULL is the default behavior.","example":"FULL"},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**identityId**: *eq*\n\n**name**: *eq, in*\n\n**nativeIdentity**: *eq, in*\n\n**sourceId**: *eq, in*\n\n**uncorrelated**: *eq*"}],"responses":{"200":{"description":"List of account objects","content":{"application/json":{"schema":{"type":"array","items":{"oneOf":[{"type":"object","title":"Slim Account","allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","format":"date-time","readOnly":true,"example":true},"modified":{"description":"Last modification date of the Object","type":"string","format":"date-time","readOnly":true,"example":true}}},{"type":"object","properties":{"uuid":{"type":"string","format":"uuid","description":"Unique ID from the owning source","example":"2c9180857893f12901789445619b0366"},"nativeIdentity":{"type":"string","description":"The native identifier of the account","example":"brandin.gray"},"description":{"type":"string","description":"The description for the account","example":"Brandin Gray the CEO of Silly Inc."},"disabled":{"type":"boolean","description":"Whether the account is disabled","example":false},"locked":{"type":"boolean","description":"Whether the account is locked","example":false},"manuallyCorrelated":{"type":"boolean","description":"Whether the account was manually correlated","example":false},"hasEntitlements":{"type":"boolean","description":"Whether the account has any entitlements associated with it","example":true},"sourceId":{"type":"string","description":"The ID of the source for which this account belongs","example":"2c9180835d2e5168015d32f890ca1581"},"identityId":{"type":"string","description":"The ID of the identity for which this account is correlated to if not uncorrelated","example":"4b9163835d2e5168015d32f890ca5936"},"attributes":{"type":"object","description":"A map containing attributes associated with the account"}}}]},{"type":"object","title":"Full Account","allOf":[{"type":"object","title":"Slim Account","allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","format":"date-time","readOnly":true,"example":true},"modified":{"description":"Last modification date of the Object","type":"string","format":"date-time","readOnly":true,"example":true}}},{"type":"object","properties":{"uuid":{"type":"string","format":"uuid","description":"Unique ID from the owning source","example":"2c9180857893f12901789445619b0366"},"nativeIdentity":{"type":"string","description":"The native identifier of the account","example":"brandin.gray"},"description":{"type":"string","description":"The description for the account","example":"Brandin Gray the CEO of Silly Inc."},"disabled":{"type":"boolean","description":"Whether the account is disabled","example":false},"locked":{"type":"boolean","description":"Whether the account is locked","example":false},"manuallyCorrelated":{"type":"boolean","description":"Whether the account was manually correlated","example":false},"hasEntitlements":{"type":"boolean","description":"Whether the account has any entitlements associated with it","example":true},"sourceId":{"type":"string","description":"The ID of the source for which this account belongs","example":"2c9180835d2e5168015d32f890ca1581"},"identityId":{"type":"string","description":"The ID of the identity for which this account is correlated to if not uncorrelated","example":"4b9163835d2e5168015d32f890ca5936"},"attributes":{"type":"object","description":"A map containing attributes associated with the account"}}}]},{"type":"object","properties":{"authoritative":{"type":"boolean","description":"Whether this account belongs to an authoritative source","example":false},"systemAccount":{"type":"boolean","description":"Whether this account is for the IdentityNow source","example":false},"uncorrelated":{"type":"boolean","description":"True if this account is not correlated to an identity","example":false},"features":{"type":"string","description":"A string list containing the owning source's features","example":"ENABLE"}}}]}]}},"examples":{"Slim Accounts":{"description":"List of slim accounts that would result with *detailLevel = SLIM*","value":[{"attributes":null,"created":"2021-09-28T02:15:44.644Z","description":null,"disabled":false,"features":"PROVISIONING, GROUP_PROVISIONING, SYNC_PROVISIONING, AUTHENTICATE","hasEntitlements":true,"id":"2c9180867c184ff6017c2a2fbf031667","identityId":"2c9180867c184ff6017c2a2fbf031666","locked":false,"manuallyCorrelated":false,"modified":"2021-09-28T02:16:12.207Z","name":"Geovanni.0a7cad6df","nativeIdentity":"CN=Geovanni 0a7cad6df,OU=hpun,OU=org-data-service,DC=TestAutomationAD,DC=local","sourceId":"2c91808b7c28b350017c2a2ec5790aa1","uuid":"{e4218fa4-da52-4bb0-aa41-d2dcc08a7ad8}"}]},"Full Accounts":{"description":"List of slim accounts that would result with *detailLevel = FULL* or not specifying it","value":[{"attributes":null,"authoritative":true,"created":"2021-09-28T02:15:44.644Z","description":null,"disabled":false,"features":"PROVISIONING, GROUP_PROVISIONING, SYNC_PROVISIONING, AUTHENTICATE","hasEntitlements":true,"id":"2c9180867c184ff6017c2a2fbf031667","identityId":"2c9180867c184ff6017c2a2fbf031666","locked":false,"manuallyCorrelated":false,"modified":"2021-09-28T02:16:12.207Z","name":"Geovanni.0a7cad6df","nativeIdentity":"CN=Geovanni 0a7cad6df,OU=hpun,OU=org-data-service,DC=TestAutomationAD,DC=local","sourceId":"2c91808b7c28b350017c2a2ec5790aa1","systemAccount":false,"uncorrelated":false,"uuid":"{e4218fa4-da52-4bb0-aa41-d2dcc08a7ad8}"}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/accounts","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Accounts List","description":{"content":"This returns a list of accounts. \nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Determines whether Slim, or increased level of detail is provided for each account in the returned list. FULL is the default behavior.","type":"text/plain"},"key":"detailLevel","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**identityId**: *eq*\n\n**name**: *eq, in*\n\n**nativeIdentity**: *eq, in*\n\n**sourceId**: *eq, in*\n\n**uncorrelated**: *eq*","type":"text/plain"},"key":"filters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Accounts List + + + +This returns a list of accounts. +A token with ORG_ADMIN authority is required to call this API. + +
    Query Parameters
    + +List of account objects + +
    Schema array
    • oneOf
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-campaign-templates.api.mdx b/docs/sailpoint-api-beta/list-campaign-templates.api.mdx new file mode 100644 index 000000000..30a48b9ef --- /dev/null +++ b/docs/sailpoint-api-beta/list-campaign-templates.api.mdx @@ -0,0 +1,123 @@ +--- +id: list-campaign-templates +sidebar_label: List Campaign Templates +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listCampaignTemplates","tags":["Certification Campaigns"],"parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **name, created, modified**"},{"in":"query","name":"filters","schema":{"type":"string","format":"comma-separated"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields: **name, id**"}],"responses":{"200":{"description":"List of campaign template objects","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","description":"This template's name. Has no bearing on generated campaigns' names."},"description":{"type":"string","description":"This template's description. Has no bearing on generated campaigns' descriptions."},"created":{"type":"string","readOnly":true,"format":"date-time"},"modified":{"type":"string","readOnly":true,"format":"date-time"},"scheduled":{"type":"boolean","readOnly":true,"description":"Indicates if this campaign template has been scheduled."},"ownerRef":{"type":"object","description":"The owner of this template, and the owner of campaigns generated from this template via a schedule. This field is automatically populated at creation time with the current user.","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["IDENTITY"]},"name":{"type":"string"},"email":{"type":"string"}}},"deadlineDuration":{"type":"string","description":"The time period during which the campaign should be completed, formatted as an ISO-8601 Duration. When this template generates a campaign, the campaign's deadline will be the current date plus this duration. For example, if generation occurred on 2020-01-01 and this field was \"P2W\" (two weeks), the resulting campaign's deadline would be 2020-01-15 (the current date plus 14 days)."},"campaign":{"type":"object","title":"Campaign","allOf":[{"type":"object","title":"Slim Campaign","required":["name","description","type"],"properties":{"id":{"type":"string","readOnly":true},"name":{"description":"The campaign name. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details.","type":"string"},"description":{"type":"string","description":"The campaign description. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details."},"deadline":{"type":"string","format":"date-time","description":"The campaign's completion deadline."},"type":{"type":"string","description":"The type of campaign. Could be extended in the future.","enum":["MANAGER","SOURCE_OWNER","SEARCH","ROLE_COMPOSITION"]},"emailNotificationEnabled":{"type":"boolean"},"autoRevokeAllowed":{"type":"boolean"},"recommendationsEnabled":{"type":"boolean","description":"Enables IAI for this campaign. Accepts true even if the IAI product feature is off. If IAI is turned off then campaigns generated from this template will indicate false. The real value will then be returned if IAI is ever enabled for the org in the future."},"status":{"type":"string","description":"The campaign's current status.","readOnly":true,"enum":["PENDING","STAGED","CANCELING","ACTIVATING","ACTIVE","COMPLETING","COMPLETED","ERROR","ARCHIVED"]}},"example":{"id":"2c9079b270a266a60170a2779fcb0007","name":"Manager Campaign","description":"Everyone needs to be reviewed by their manager.","deadline":"2020-03-15T10:00:01.456Z","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"status":"ACTIVE"}},{"type":"object","properties":{"created":{"type":"string","readOnly":true,"format":"date-time"},"modified":{"type":"string","readOnly":true,"format":"date-time"},"filter":{"type":"object","description":"Determines which items will be included in this campaign. The default campaign filter is used if this field is left blank.","properties":{"id":{"type":"string","description":"The ID of whatever type of filter is being used."},"type":{"type":"string","enum":["CAMPAIGN_FILTER"]}}},"sunsetCommentsRequired":{"type":"boolean","description":"Determines if comments on sunset date changes are required.","default":true},"sourceOwnerCampaignInfo":{"type":"object","description":"Must be set only if the campaign type is SOURCE_OWNER.","properties":{"sourceIds":{"type":"array","description":"The list of sources to be included in the campaign.","items":{"type":"string"}}}},"searchCampaignInfo":{"type":"object","description":"Must be set only if the campaign type is SEARCH.","properties":{"type":{"type":"string","description":"The type of search campaign represented.","enum":["IDENTITY","ACCESS"]},"description":{"type":"string","description":"Describes this search campaign. Intended for storing the query used, and possibly the number of identities selected/available."},"reviewer":{"description":"If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP","allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object"}]},"query":{"type":"string","description":"The scope for the campaign. The campaign will cover identities returned by the query and identities that have access items returned by the query. One of `query` or `identityIds` must be set."},"identityIds":{"type":"array","description":"A direct list of identities to include in this campaign. One of `identityIds` or `query` must be set.","items":{"type":"string"},"maxItems":1000},"accessConstraints":{"type":"array","description":"Further reduces the scope of the campaign by excluding identities (from `query` or `identityIds`) that do not have this access.","items":{"type":"object","properties":{"type":{"type":"string","enum":["ENTITLEMENT","ACCESS_PROFILE","ROLE"]},"ids":{"description":"Must be set only if operator is SELECTED.","type":"array","items":{"type":"string"}},"operator":{"type":"string","enum":["ALL","SELECTED"]}},"required":["type","operator"],"example":{"type":"ENTITLEMENT","ids":["2c90ad2a70ace7d50170acf22ca90010"],"operator":"SELECTED"}},"maxItems":1000}},"required":["type"]},"roleCompositionCampaignInfo":{"type":"object","description":"Optional configuration options for role composition campaigns.","properties":{"reviewer":{"description":"If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP","allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object"}]},"roleIds":{"type":"array","description":"Optional list of roles to include in this campaign. Only one of `roleIds` and `query` may be set; if neither are set, all roles are included.","items":{"type":"string"}},"remediatorRef":{"type":"object","description":"This determines who remediation tasks will be assigned to. Remediation tasks are created for each revoke decision on items in the campaign. The only legal remediator type is 'IDENTITY', and the chosen identity must be a Role Admin or Org Admin.","properties":{"type":{"type":"string","enum":["IDENTITY"]},"id":{"type":"string","description":"The ID of the remediator."},"name":{"type":"string","description":"The name of the remediator.","readOnly":true}},"required":["type","id"]},"query":{"type":"string","description":"Optional search query to scope this campaign to a set of roles. Only one of `roleIds` and `query` may be set; if neither are set, all roles are included."},"description":{"type":"string","description":"Describes this role composition campaign. Intended for storing the query used, and possibly the number of roles selected/available."}},"required":["remediatorRef"]},"alerts":{"type":"array","description":"A list of errors and warnings that have accumulated.","readOnly":true,"items":{"type":"object","properties":{"level":{"type":"string","enum":["ERROR","WARN","INFO"]},"localizations":{"type":"array","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}},"totalCertifications":{"type":"integer","description":"The total number of certifications in this campaign.","readOnly":true},"completedCertifications":{"type":"integer","description":"The number of completed certifications in this campaign.","readOnly":true},"sourcesWithOrphanEntitlements":{"type":"array","description":"A list of sources in the campaign that contain \\\"orphan entitlements\\\" (entitlements without a corresponding Managed Attribute). An empty list indicates the campaign has no orphan entitlements. Null indicates there may be unknown orphan entitlements in the campaign (the campaign was created before this feature was implemented).","readOnly":true,"items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["SOURCE"]},"name":{"type":"string"}}}}}}],"example":{"id":"2c9079b270a266a60170a2779fcb0007","name":"Manager Campaign","description":"Everyone needs to be reviewed by their manager.","created":"2020-03-03T22:15:13.611Z","modified":"2020-03-03T22:20:12.674Z","deadline":"2020-03-15T00:00:00.456Z","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"status":"ACTIVE","filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"}}}},"required":["name","description","created","modified","campaign"],"example":{"id":"2c9079b270a266a60170a277bb960008","name":"Manager Campaign Template","description":"Template for the annual manager campaign.","created":"2020-03-05T22:44:00.364Z","modified":"2020-03-05T22:52:09.969Z","ownerRef":{"type":"IDENTITY","id":"2c918086676d3e0601677611dbde220f","email":"mr.manager@example.com","name":"Mister Manager"},"deadlineDuration":"P2W","campaign":{"name":"%Y Manager Campaign","description":"Everyone needs to be reviewed by their manager.","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"}}}}},"example":[{"id":"e7dbec99d49349c8951bd84f58a05120","name":"Manager Review","created":"2022-08-02T19:16:42.632Z","modified":null,"description":"A review of everyone's access by their manager.","deadlineDuration":"P14D","ownerRef":{"email":"support@testmail.identitysoon.com","type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"scheduled":false,"campaign":{"created":null,"modified":null,"filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"},"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":null,"searchCampaignInfo":null,"roleCompositionCampaignInfo":null,"alerts":null,"totalCertifications":null,"completedCertifications":null,"sourcesWithOrphanEntitlements":null,"id":null,"name":"Manager Review","description":"Review everyone's access.","deadline":null,"type":"MANAGER","status":null,"emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false}},{"id":"b7e6459eed5247ac8b98a5fed81fe27f","name":"Reporting Access Review","created":"2022-07-28T19:19:40.035Z","modified":null,"description":"A review of everyone's access to the reporting system.","deadlineDuration":"P14D","ownerRef":{"email":"support@testmail.identitysoon.com","type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"scheduled":false,"campaign":{"created":null,"modified":null,"filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"},"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":null,"searchCampaignInfo":{"type":"ACCESS","description":"Identities with reporting abilities","reviewerId":null,"reviewer":null,"query":"@access(name: (\"reporter\"))","identityIds":null,"accessConstraints":[]},"roleCompositionCampaignInfo":null,"alerts":null,"totalCertifications":null,"completedCertifications":null,"sourcesWithOrphanEntitlements":null,"id":null,"name":"Search Campaign","description":"Review everyone's access to the reporting system.","deadline":null,"type":"SEARCH","status":null,"emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false}},{"id":"b9f41bc69e7a4291b9de0630396d030d","name":"Campaign With Admin Role","created":"2022-08-02T13:40:36.857Z","modified":null,"description":"Campaign With Admin Role","deadlineDuration":null,"ownerRef":{"email":"support@testmail.identitysoon.com","type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"scheduled":false,"campaign":{"created":null,"modified":null,"filter":null,"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":null,"searchCampaignInfo":null,"roleCompositionCampaignInfo":{"remediatorRef":{"type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"reviewerId":null,"reviewer":null,"roleIds":["b15d609fc5c8434b865fe552315fda8f"],"query":null,"description":null},"alerts":null,"totalCertifications":null,"completedCertifications":null,"sourcesWithOrphanEntitlements":null,"id":null,"name":"Campaign With Admin Role","description":"Campaign With Admin Role","deadline":null,"type":"ROLE_COMPOSITION","status":null,"emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false}},{"id":"b9f41bc69e7a4291b9de0630396d030d","name":"AD Source Review","created":"2022-08-02T13:40:36.857Z","modified":null,"description":"A review of our AD source.","deadlineDuration":"P1M","ownerRef":{"email":"support@testmail.identitysoon.com","type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"scheduled":false,"campaign":{"created":null,"modified":null,"filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"},"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":{"sourceIds":["2c918084707deba501709d45ce4e5569"]},"searchCampaignInfo":null,"roleCompositionCampaignInfo":null,"alerts":null,"totalCertifications":null,"completedCertifications":null,"sourcesWithOrphanEntitlements":null,"id":null,"name":"AD Source Review","description":"Review everyone's access.","deadline":null,"type":"SOURCE_OWNER","status":null,"emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false}}]}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"description":"List Campaign Templates","method":"get","path":"/campaign-templates","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Campaign Templates","description":{"type":"text/plain"},"url":{"path":["campaign-templates"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **name, created, modified**","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields: **name, id**","type":"text/plain"},"key":"filters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Campaign Templates + + + +List Campaign Templates + +
    Query Parameters
    + +List of campaign template objects + +
    Schema array
      ownerRef object
      + +The owner of this template, and the owner of campaigns generated from this template via a schedule. This field is automatically populated at creation time with the current user. + +
      campaign object
      filter object
      + +Determines which items will be included in this campaign. The default campaign filter is used if this field is left blank. + +
      sourceOwnerCampaignInfo object
      + +Must be set only if the campaign type is SOURCE_OWNER. + +
      searchCampaignInfo object
      + +Must be set only if the campaign type is SEARCH. + +
      reviewer object
      + +If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP + +
      accessConstraints object[]
      + +**Possible values:** `<= 1000` + +
      + +Further reduces the scope of the campaign by excluding identities (from `query` or `identityIds`) that do not have this access. + +
      roleCompositionCampaignInfo object
      + +Optional configuration options for role composition campaigns. + +
      reviewer object
      + +If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP + +
      remediatorRef object
      + +This determines who remediation tasks will be assigned to. Remediation tasks are created for each revoke decision on items in the campaign. The only legal remediator type is 'IDENTITY', and the chosen identity must be a Role Admin or Org Admin. + +
      alerts object[]
      + +A list of errors and warnings that have accumulated. + +
      localizations object[]
      sourcesWithOrphanEntitlements object[]
      + +A list of sources in the campaign that contain \"orphan entitlements\" (entitlements without a corresponding Managed Attribute). An empty list indicates the campaign has no orphan entitlements. Null indicates there may be unknown orphan entitlements in the campaign (the campaign was created before this feature was implemented). + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-complete-workflow-library.api.mdx b/docs/sailpoint-api-beta/list-complete-workflow-library.api.mdx new file mode 100644 index 000000000..89a03e6c5 --- /dev/null +++ b/docs/sailpoint-api-beta/list-complete-workflow-library.api.mdx @@ -0,0 +1,87 @@ +--- +id: list-complete-workflow-library +sidebar_label: List Complete Workflow Library +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listCompleteWorkflowLibrary","tags":["Workflows"],"description":"This lists all triggers, actions, and operators in the library","externalDocs":{"description":"Additional documentation for workflows","url":"https://documentation.sailpoint.com/saas/help/workflows/workflow-steps.html"},"parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}}],"security":[{"bearerAuth":["sp:workflow:read"]}],"responses":{"200":{"description":"List of workflow steps","content":{"application/json":{"schema":{"type":"array","items":{"anyOf":[{"title":"Workflow Action","type":"object","properties":{"id":{"type":"string","description":"Action ID. This is a static namespaced ID for the action","example":"sp:create-campaign"},"name":{"type":"string","description":"Action Name","example":"Create Certification Campaign"},"description":{"type":"string","description":"Action Description","example":"Generates a certification campaign."},"formFields":{"type":"array","description":"One or more inputs that the action accepts","items":{"type":"object","properties":{"helpText":{"type":"string","description":"Describes the form field in the UI","example":"The name to give to this certification campaign."},"label":{"type":"string","description":"A human readable name for this form field in the UI","example":"Campaign Name"},"name":{"type":"string","description":"The name of the input attribute","example":"name"},"required":{"type":"boolean","description":"Denotes if this field is a required attribute","example":false},"type":{"description":"The type of the form field","enum":["text","textarea","boolean","email","url","number","json","checkbox"],"example":"text"}}}},"outputSchema":{"type":"object","description":"Defines the output schema, if any, that this action produces.","example":{"definitions":{},"properties":{"autoRevokeAllowed":{"$id":"#sp:create-campaign/autoRevokeAllowed","default":true,"examples":[false],"title":"autoRevokeAllowed","type":"boolean"},"deadline":{"$id":"#sp:create-campaign/deadline","default":"","examples":["2020-12-25T06:00:00.468Z"],"format":"date-time","pattern":"^.*$","title":"deadline","type":"string"},"description":{"$id":"#sp:create-campaign/description","default":"","examples":["A review of everyone's access by their manager."],"pattern":"^.*$","title":"description","type":"string"},"emailNotificationEnabled":{"$id":"#sp:create-campaign/emailNotificationEnabled","default":true,"examples":[false],"title":"emailNotificationEnabled","type":"boolean"},"filter":{"$id":"#sp:create-campaign/filter","properties":{"id":{"$id":"#sp:create-campaign/filter/id","default":"","examples":["e0adaae69852e8fe8b8a3d48e5ce757c"],"pattern":"^.*$","title":"id","type":"string"},"type":{"$id":"#sp:create-campaign/filter/type","default":"","examples":["CAMPAIGN_FILTER"],"pattern":"^.*$","title":"type","type":"string"}},"title":"filter","type":"object"},"id":{"$id":"#sp:create-campaign/id","default":"","examples":["2c918086719eec070171a7e3355a360a"],"pattern":"^.*$","title":"id","type":"string"},"name":{"$id":"#sp:create-campaign/name","default":"","examples":["Manager Review"],"pattern":"^.*$","title":"name","type":"string"},"recommendationsEnabled":{"$id":"#sp:create-campaign/recommendationsEnabled","default":true,"examples":[false],"title":"recommendationEnabled","type":"boolean"},"type":{"$id":"#sp:create-campaign/type","default":"","examples":["MANAGER"],"pattern":"^.*$","title":"type","type":"string"}},"title":"sp:create-campaign","type":"object"}}}},{"title":"Workflow Trigger","type":"object","properties":{"id":{"type":"string","description":"Trigger ID. This is a static namespaced ID for the trigger.","example":"idn:identity-attributes-changed"},"type":{"description":"Trigger type","enum":["EVENT","SCHEDULED","EXTERNAL"],"example":"EVENT"},"name":{"type":"string","description":"Trigger Name","example":"Identity Attributes Changed"},"description":{"type":"string","description":"Trigger Description","example":"One or more identity attributes changed."},"inputExample":{"type":"object","description":"Example trigger payload if applicable","externalDocs":{"description":"List of triggers and their input schemas","url":"https://developer.sailpoint.com/triggers/available_event_triggers.html#request"},"example":{"changes":[{"attribute":"department","newValue":"marketing","oldValue":"sales"},{"attribute":"manager","newValue":{"id":"ee769173319b41d19ccec6c235423236c","name":"mean.guy","type":"IDENTITY"},"oldValue":{"id":"ee769173319b41d19ccec6c235423237b","name":"nice.guy","type":"IDENTITY"}},{"attribute":"email","newValue":"john.doe@gmail.com","oldValue":"john.doe@hotmail.com"}],"identity":{"id":"ee769173319b41d19ccec6cea52f237b","name":"john.doe","type":"IDENTITY"}}},"formFields":{"type":"array","description":"One or more inputs that the trigger accepts","example":[],"items":{"type":"object","properties":{"helpText":{"type":"string","description":"Describes the form field in the UI","example":"The name to give to this certification campaign."},"label":{"type":"string","description":"A human readable name for this form field in the UI","example":"Campaign Name"},"name":{"type":"string","description":"The name of the input attribute","example":"name"},"required":{"type":"boolean","description":"Denotes if this field is a required attribute","example":false},"type":{"description":"The type of the form field","enum":["text","textarea","boolean","email","url","number","json","checkbox"],"example":"text"}}}}}},{"title":"Workflow Operator","type":"object","properties":{"id":{"type":"string","description":"Operator ID.","example":"sp:compare-boolean"},"name":{"type":"string","description":"Operator friendly name","example":"Compare Boolean Values"},"description":{"type":"string","description":"Description of the operator","example":"Compare two boolean values and decide what happens based on the result."},"formFields":{"type":"array","description":"One or more inputs that the operator accepts","items":{"type":"object","properties":{"helpText":{"type":"string","description":"Describes the form field in the UI","example":"The name to give to this certification campaign."},"label":{"type":"string","description":"A human readable name for this form field in the UI","example":"Campaign Name"},"name":{"type":"string","description":"The name of the input attribute","example":"name"},"required":{"type":"boolean","description":"Denotes if this field is a required attribute","example":false},"type":{"description":"The type of the form field","enum":["text","textarea","boolean","email","url","number","json","checkbox"],"example":"text"}}},"example":[{"description":"Enter the JSONPath to a value from the input to compare to Variable B.","helpText":"","label":"Variable A","name":"variableA.$","required":true,"type":"text"},{"helpText":"Select an operation.","label":"Operation","name":"operator","options":[{"label":"Equals","value":"BooleanEquals"}],"required":true,"type":"select"},{"description":"Enter the JSONPath to a value from the input to compare to Variable A.","helpText":"","label":"Variable B","name":"variableB.$","required":false,"type":"text"},{"description":"Enter True or False.","helpText":"","label":"Variable B","name":"variableB","required":false,"type":"text"}]}}}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/workflow-library","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Complete Workflow Library","description":{"content":"This lists all triggers, actions, and operators in the library","type":"text/plain"},"url":{"path":["workflow-library"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Complete Workflow Library + + + +This lists all triggers, actions, and operators in the library + +
    Query Parameters
    + +List of workflow steps + +
    Schema array
    • anyOf
      formFields object[]
      + +One or more inputs that the action accepts + +
      formFields object[]
      + +One or more inputs that the trigger accepts + +
      formFields object[]
      + +One or more inputs that the operator accepts + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-completed-approvals.api.mdx b/docs/sailpoint-api-beta/list-completed-approvals.api.mdx new file mode 100644 index 000000000..3cd399447 --- /dev/null +++ b/docs/sailpoint-api-beta/list-completed-approvals.api.mdx @@ -0,0 +1,127 @@ +--- +id: list-completed-approvals +sidebar_label: Completed Access Request Approvals List +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listCompletedApprovals","tags":["Access Request Approvals"],"description":"This endpoint returns list of completed approvals. See *owner-id* query parameter below for authorization info.","parameters":[{"in":"query","name":"owner-id","schema":{"type":"string"},"description":"If present, the value returns only completed approvals for the specified identity.\n * ORG_ADMIN users can call this with any identity ID value.\n * ORG_ADMIN users can also fetch all the approvals in the org, when owner-id is not used.\n * Non-ORG_ADMIN users can only specify *me* or pass their own identity ID value."},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**requestedFor.id**: *eq, in*\n\n**modified**: *gt, lt, ge, le*"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **created, modified**"}],"responses":{"200":{"description":"List of Completed Approvals.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c938083633d259901633d25c68c00fa","description":"The approval id."},"name":{"type":"string","example":"Approval Name","description":"The name of the approval."},"created":{"type":"string","format":"date-time","description":"When the approval was created.","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","description":"When the approval was modified last time.","example":"2018-07-25T20:22:28.104Z"},"requestCreated":{"type":"string","format":"date-time","description":"When the access-request was created.","example":"2017-07-11T18:45:35.098Z"},"requestType":{"type":"string","enum":["GRANT_ACCESS","REVOKE_ACCESS"],"description":"Access request type. Defaults to GRANT_ACCESS. REVOKE_ACCESS type can only have a single Identity ID in the requestedFor field. Currently REVOKE_ACCESS is not supported for entitlements.","example":"GRANT_ACCESS"},"requester":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The identity that requested the item."},"requestedFor":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The identity for whom the item is requested for."},"reviewedBy":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The identity who has reviewed the approval."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The owner or approver of the approval."},"requestedObject":{"description":"The requested access item.","type":"object","properties":{"id":{"type":"string","example":"2c938083633d259901633d25c68c00fa","description":"Id of the object."},"name":{"type":"string","example":"Object Name","description":"Name of the object."},"description":{"type":"string","example":"Object Description","description":"Description of the object."},"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE","ENTITLEMENT"],"description":"Type of the object.","example":"ROLE"}}},"requesterComment":{"type":"object","properties":{"comment":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat"},"author":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"ID of the author","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"}}},"created":{"type":"string","format":"date-time","description":"Date and time comment was created","example":"2017-07-11T18:45:37.098Z"}},"description":"The requester's comment."},"reviewerComment":{"type":"object","properties":{"comment":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat"},"author":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"ID of the author","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"}}},"created":{"type":"string","format":"date-time","description":"Date and time comment was created","example":"2017-07-11T18:45:37.098Z"}},"description":"The approval's reviewer's comment."},"previousReviewersComments":{"type":"array","items":{"type":"object","properties":{"comment":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat"},"author":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"ID of the author","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"}}},"created":{"type":"string","format":"date-time","description":"Date and time comment was created","example":"2017-07-11T18:45:37.098Z"}}},"description":"The history of the previous reviewers comments."},"forwardHistory":{"type":"array","items":{"type":"object","properties":{"oldApproverName":{"type":"string","description":"Display name of approver that forwarded the approval.","example":"frank.mir"},"newApproverName":{"type":"string","description":"Display name of approver to whom the approval was forwarded.","example":"al.volta"},"comment":{"type":"string","description":"Comment made by old approver when forwarding.","example":"Fusce id orci vel consectetur amet ipsum quam."},"modified":{"type":"string","format":"date-time","description":"Time at which approval was forwarded.","example":"2019-08-23T18:52:57.398Z"}}},"description":"The history of approval forward action."},"commentRequiredWhenRejected":{"type":"boolean","example":true,"description":"When true the rejector has to provide comments when rejecting"},"state":{"description":"The final state of the approval","type":"string","enum":["APPROVED","REJECTED"],"example":"APPROVED"},"removeDate":{"type":"string","description":"The date the role or access profile is no longer assigned to the specified identity.","format":"date-time","example":"2020-07-11T00:00:00Z"},"removeDateUpdateRequested":{"type":"boolean","example":true,"description":"If true, then the request was to change the remove date or sunset date."},"currentRemoveDate":{"type":"string","description":"The remove date or sunset date that was assigned at the time of the request.","format":"date-time","example":"2020-07-11T00:00:00Z"},"sodViolationContext":{"description":"The details of the SOD violations for the associated approval.","type":"object","properties":{"state":{"type":"string","enum":["SUCCESS","ERROR"],"description":"The status of SOD violation check","example":"SUCCESS"},"uuid":{"description":"The id of the Violation check event","type":"string","example":"f73d16e9-a038-46c5-b217-1246e15fdbdd"},"violationCheckResult":{"description":"The inner object representing the completed SOD Violation check","type":"object","properties":{"message":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}},"description":"If the request failed, includes any error message that was generated.","example":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An error has occurred during the SOD violation check"}]},"clientMetadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on completion of the violation check.","example":{"requestedAppName":"test-app","requestedAppId":"2c91808f7892918f0178b78da4a305a1"}},"violationContexts":{"type":"array","items":{"description":"The contextual information of the violated criteria","type":"object","properties":{"policy":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the Policy that is being violated."},"conflictingAccessCriteria":{"type":"object","description":"The object which contains the left and right hand side of the entitlements that got violated according to the policy.","properties":{"leftCriteria":{"type":"object","properties":{"criteriaList":{"type":"array","items":{"description":"Details of the Entitlement criteria","type":"object","properties":{"existing":{"type":"boolean","example":true,"description":"If the entitlement already belonged to the user or not."},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Entitlement ID","example":"2c918085771e9d3301773b3cb66f6398"},"name":{"type":"string","description":"Entitlement name","example":"My HR Entitlement"}}}}}},"rightCriteria":{"type":"object","properties":{"criteriaList":{"type":"array","items":{"description":"Details of the Entitlement criteria","type":"object","properties":{"existing":{"type":"boolean","example":true,"description":"If the entitlement already belonged to the user or not."},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Entitlement ID","example":"2c918085771e9d3301773b3cb66f6398"},"name":{"type":"string","description":"Entitlement name","example":"My HR Entitlement"}}}}}}}}}}},"violatedPolicies":{"type":"array","description":"A list of the Policies that were violated","items":{"description":"Reference to the policy that was violated","example":[{"type":"SOD_POLICY","id":"69129440-422d-4a23-aadd-35c828d5bfda","name":"HR Policy"}],"type":"object","properties":{"id":{"type":"string","description":"the application ID","example":"ff8081814d977c21014da056804a0af3"},"name":{"type":"string","description":"the application name","example":"Github"}}}}}}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/access-request-approvals/completed","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Completed Access Request Approvals List","description":{"content":"This endpoint returns list of completed approvals. See *owner-id* query parameter below for authorization info.","type":"text/plain"},"url":{"path":["access-request-approvals","completed"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"If present, the value returns only completed approvals for the specified identity.\n * ORG_ADMIN users can call this with any identity ID value.\n * ORG_ADMIN users can also fetch all the approvals in the org, when owner-id is not used.\n * Non-ORG_ADMIN users can only specify *me* or pass their own identity ID value.","type":"text/plain"},"key":"owner-id","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**requestedFor.id**: *eq, in*\n\n**modified**: *gt, lt, ge, le*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **created, modified**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Completed Access Request Approvals List + + + +This endpoint returns list of completed approvals. See *owner-id* query parameter below for authorization info. + +
    Query Parameters
    + +List of Completed Approvals. + +
    Schema array
      requester object
      + +The identity that requested the item. + +
      requestedFor object
      + +The identity for whom the item is requested for. + +
      reviewedBy object
      + +The identity who has reviewed the approval. + +
      owner object
      + +The owner or approver of the approval. + +
      requestedObject object
      + +The requested access item. + +
      requesterComment object
      + +The requester's comment. + +
      author object
      reviewerComment object
      + +The approval's reviewer's comment. + +
      author object
      previousReviewersComments object[]
      + +The history of the previous reviewers comments. + +
      author object
      forwardHistory object[]
      + +The history of approval forward action. + +
      sodViolationContext object
      + +The details of the SOD violations for the associated approval. + +
      violationCheckResult object
      + +The inner object representing the completed SOD Violation check + +
      message object
      + +If the request failed, includes any error message that was generated. + +
      clientMetadata object
      + +Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on completion of the violation check. + +
    • property name* string
    • violationContexts object[]
      policy object
      + +Reference to the Policy that is being violated. + +
      conflictingAccessCriteria object
      + +The object which contains the left and right hand side of the entitlements that got violated according to the policy. + +
      leftCriteria object
      criteriaList object[]
      rightCriteria object
      criteriaList object[]
      violatedPolicies object[]
      + +A list of the Policies that were violated + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-entitlement-parents.api.mdx b/docs/sailpoint-api-beta/list-entitlement-parents.api.mdx new file mode 100644 index 000000000..254285fd5 --- /dev/null +++ b/docs/sailpoint-api-beta/list-entitlement-parents.api.mdx @@ -0,0 +1,93 @@ +--- +id: list-entitlement-parents +sidebar_label: List of entitlements parents +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listEntitlementParents","tags":["Entitlements"],"description":"This API returns a list of all parent entitlements of a given entitlement.\n\nA token with ORG_ADMIN or API authority is required to call this API.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"Entitlement Id","example":"2c91808c74ff913f0175097daa9d59cd"}],"responses":{"200":{"description":"List of entitlements parents from an entitlement","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The entitlement id","example":"2c91808874ff91550175097daaec161c"},"name":{"type":"string","description":"The entitlement name","example":"LauncherTestGroup2"},"attribute":{"type":"string","description":"The entitlement attribute name","example":"memberOf"},"value":{"type":"string","description":"The value of the entitlement","example":"CN=LauncherTestGroup2,OU=LauncherTestOrg,OU=slpt-automation,DC=TestAutomationAD,DC=local"},"sourceSchemaObjectType":{"type":"string","description":"The object type of the entitlement from the source schema","example":"group"},"description":{"type":"string","description":"The description of the entitlement","example":"CN=LauncherTestGroup2,OU=LauncherTestOrg,OU=slpt-automation,DC=TestAutomationAD,DC=local"},"privileged":{"type":"boolean","description":"True if the entitlement is privileged","example":true},"cloudGoverned":{"type":"boolean","description":"True if the entitlement is cloud governed","example":true},"created":{"type":"string","description":"Time when the entitlement was created","format":"date-time","example":"2020-10-08T18:33:52.029Z"},"modified":{"type":"string","description":"Time when the entitlement was last modified","format":"date-time","example":"2020-10-08T18:33:52.029Z"},"source":{"type":"object","properties":{"id":{"type":"string","description":"The source ID","example":"2c9180827ca885d7017ca8ce28a000eb"},"type":{"type":"string","description":"The source type, will always be \"SOURCE\"","example":"SOURCE"},"name":{"type":"string","description":"The source name","example":"ODS-AD-Source"}},"example":[{"type":"SOURCE","id":"2c9180835d191a86015d28455b4b232a","name":"HR Active Directory"}]},"attributes":{"type":"object","description":"A map of free-form key-value pairs from the source system","example":{"fieldName":"fieldValue"},"additionalProperties":true},"segments":{"type":"array","items":{"type":"string"},"nullable":true,"description":"List of IDs of segments, if any, to which this Entitlement is assigned.","example":["f7b1b8a3-5fed-4fd4-ad29-82014e137e19","29cb6c06-1da8-43ea-8be4-b3125f248f2a"]},"directPermissions":{"type":"array","items":{"type":"object","description":"Simplified DTO for the Permission objects stored in SailPoint's database. The data is aggregated from customer systems and is free-form, so its appearance can vary largely between different clients/customers.","properties":{"rights":{"type":"array","description":"All the rights (e.g. actions) that this permission allows on the target","readOnly":true,"items":{"type":"string","example":"SELECT"}},"target":{"type":"string","description":"The target the permission would grants rights on.","readOnly":true,"example":"SYS.GV_$TRANSACTION"}}}}}}},"example":[{"sourceSchemaObjectType":"group","attribute":"memberOf","attributes":{"GroupType":"Security","sAMAccountName":"LauncherTestGroup1","GroupScope":"Global","objectguid":"{01a6e70b-9705-4155-a5c6-492a9bcc8c64}","objectSid":"S-1-5-21-3585869415-1648031554-2909195034-1633","cn":"LauncherTestGroup1","msDS-PrincipalName":"AUTOMATIONAD\\LauncherTestGroup1"},"value":"CN=LauncherTestGroup1,OU=LauncherTestOrg,OU=slpt-automation,DC=TestAutomationAD,DC=local","description":"some description","privileged":false,"cloudGoverned":false,"source":{"type":"SOURCE","id":"2c9180877504c40e0175097d5ce707c8","name":"EndToEnd-ADSource"},"id":"2c91808c74ff913f0175097daa9d59cd","name":"LauncherTestGroup1","created":"2020-10-08T18:33:52.029Z","modified":"2021-01-19T16:53:35.707Z"}]}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/entitlements/{id}/parents","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List of entitlements parents","description":{"content":"This API returns a list of all parent entitlements of a given entitlement.\n\nA token with ORG_ADMIN or API authority is required to call this API.","type":"text/plain"},"url":{"path":["entitlements",":id","parents"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) Entitlement Id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List of entitlements parents + + + +This API returns a list of all parent entitlements of a given entitlement. + +A token with ORG_ADMIN or API authority is required to call this API. + +
    Path Parameters
    Query Parameters
    + +List of entitlements parents from an entitlement + +
    Schema array
      source object
      attributes object
      + +A map of free-form key-value pairs from the source system + +
      directPermissions object[]
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-entitlementchildren.api.mdx b/docs/sailpoint-api-beta/list-entitlementchildren.api.mdx new file mode 100644 index 000000000..1e3233be3 --- /dev/null +++ b/docs/sailpoint-api-beta/list-entitlementchildren.api.mdx @@ -0,0 +1,93 @@ +--- +id: list-entitlementchildren +sidebar_label: List of entitlements children +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listEntitlementchildren","tags":["Entitlements"],"description":"This API returns a list of all child entitlements of a given entitlement.\n\nA token with ORG_ADMIN or API authority is required to call this API.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"Entitlement Id","example":"2c91808874ff91550175097daaec161c"}],"responses":{"200":{"description":"List of entitlements children from an entitlement","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The entitlement id","example":"2c91808874ff91550175097daaec161c"},"name":{"type":"string","description":"The entitlement name","example":"LauncherTestGroup2"},"attribute":{"type":"string","description":"The entitlement attribute name","example":"memberOf"},"value":{"type":"string","description":"The value of the entitlement","example":"CN=LauncherTestGroup2,OU=LauncherTestOrg,OU=slpt-automation,DC=TestAutomationAD,DC=local"},"sourceSchemaObjectType":{"type":"string","description":"The object type of the entitlement from the source schema","example":"group"},"description":{"type":"string","description":"The description of the entitlement","example":"CN=LauncherTestGroup2,OU=LauncherTestOrg,OU=slpt-automation,DC=TestAutomationAD,DC=local"},"privileged":{"type":"boolean","description":"True if the entitlement is privileged","example":true},"cloudGoverned":{"type":"boolean","description":"True if the entitlement is cloud governed","example":true},"created":{"type":"string","description":"Time when the entitlement was created","format":"date-time","example":"2020-10-08T18:33:52.029Z"},"modified":{"type":"string","description":"Time when the entitlement was last modified","format":"date-time","example":"2020-10-08T18:33:52.029Z"},"source":{"type":"object","properties":{"id":{"type":"string","description":"The source ID","example":"2c9180827ca885d7017ca8ce28a000eb"},"type":{"type":"string","description":"The source type, will always be \"SOURCE\"","example":"SOURCE"},"name":{"type":"string","description":"The source name","example":"ODS-AD-Source"}},"example":[{"type":"SOURCE","id":"2c9180835d191a86015d28455b4b232a","name":"HR Active Directory"}]},"attributes":{"type":"object","description":"A map of free-form key-value pairs from the source system","example":{"fieldName":"fieldValue"},"additionalProperties":true},"segments":{"type":"array","items":{"type":"string"},"nullable":true,"description":"List of IDs of segments, if any, to which this Entitlement is assigned.","example":["f7b1b8a3-5fed-4fd4-ad29-82014e137e19","29cb6c06-1da8-43ea-8be4-b3125f248f2a"]},"directPermissions":{"type":"array","items":{"type":"object","description":"Simplified DTO for the Permission objects stored in SailPoint's database. The data is aggregated from customer systems and is free-form, so its appearance can vary largely between different clients/customers.","properties":{"rights":{"type":"array","description":"All the rights (e.g. actions) that this permission allows on the target","readOnly":true,"items":{"type":"string","example":"SELECT"}},"target":{"type":"string","description":"The target the permission would grants rights on.","readOnly":true,"example":"SYS.GV_$TRANSACTION"}}}}}}},"example":[{"sourceSchemaObjectType":"group","attribute":"memberOf","attributes":{"GroupType":"Security","sAMAccountName":"LauncherTestGroup1","GroupScope":"Global","objectguid":"{01a6e70b-9705-4155-a5c6-492a9bcc8c64}","objectSid":"S-1-5-21-3585869415-1648031554-2909195034-1633","cn":"LauncherTestGroup1","msDS-PrincipalName":"AUTOMATIONAD\\LauncherTestGroup1"},"value":"CN=LauncherTestGroup1,OU=LauncherTestOrg,OU=slpt-automation,DC=TestAutomationAD,DC=local","description":"some description","privileged":false,"cloudGoverned":false,"source":{"type":"SOURCE","id":"2c9180877504c40e0175097d5ce707c8","name":"EndToEnd-ADSource"},"id":"2c91808c74ff913f0175097daa9d59cd","name":"LauncherTestGroup1","created":"2020-10-08T18:33:52.029Z","modified":"2021-01-19T16:53:35.707Z"}]}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/entitlements/{id}/children","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List of entitlements children","description":{"content":"This API returns a list of all child entitlements of a given entitlement.\n\nA token with ORG_ADMIN or API authority is required to call this API.","type":"text/plain"},"url":{"path":["entitlements",":id","children"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) Entitlement Id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List of entitlements children + + + +This API returns a list of all child entitlements of a given entitlement. + +A token with ORG_ADMIN or API authority is required to call this API. + +
    Path Parameters
    Query Parameters
    + +List of entitlements children from an entitlement + +
    Schema array
      source object
      attributes object
      + +A map of free-form key-value pairs from the source system + +
      directPermissions object[]
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-entitlements.api.mdx b/docs/sailpoint-api-beta/list-entitlements.api.mdx new file mode 100644 index 000000000..2b63a54f6 --- /dev/null +++ b/docs/sailpoint-api-beta/list-entitlements.api.mdx @@ -0,0 +1,83 @@ +--- +id: list-entitlements +sidebar_label: Gets a list of entitlements. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listEntitlements","tags":["Entitlements"],"description":"This API returns a list of entitlements.\n\nThis API can be used in one of the two following ways: either getting entitlements for a specific **account-id**, or getting via use of **filters** (those two options are exclusive).\n\nAny authenticated token can call this API.","parameters":[{"in":"query","name":"account-id","schema":{"type":"string"},"description":"The account ID. If specified, returns only entitlements associated with the given Account. Can not be specified with the **filters**, **segmented-for-identity**, **for-segment-ids**, or **include-unsegmented** param(s).","example":"ef38f94347e94562b5bb8424a56397d8","required":false},{"in":"query","name":"segmented-for-identity","schema":{"type":"string"},"description":"If present and not empty, additionally filters Entitlements to those which are assigned to the Segment(s) which are visible to the Identity with the specified ID. By convention, the value **me** can stand in for the current user's Identity ID.\nCan not be specified with the **account-id** or **for-segment-ids** param(s). It is also illegal to specify a value that refers to a different user's Identity.","example":"me","required":false},{"in":"query","name":"for-segment-ids","schema":{"type":"string","format":"comma-separated"},"description":"If present and not empty, additionally filters Access Profiles to those which are assigned to the Segment(s) with the specified IDs.\nCan not be specified with the **account-id** or **segmented-for-identity** param(s).","example":"041727d4-7d95-4779-b891-93cf41e98249,a378c9fa-bae5-494c-804e-a1e30f69f649","required":false},{"in":"query","name":"include-unsegmented","schema":{"type":"boolean","default":true},"description":"Whether or not the response list should contain unsegmented Entitlements. If **for-segment-ids** and **segmented-for-identity** are both absent or empty, specifying **include-unsegmented=false** results in an error.","example":true,"required":false},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\nSorting is supported for the following fields: **id, name, created, modified, type, attribute, value, source.id**","example":"name,-modified","required":false,"style":"form","explode":true},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**name**: *eq, in, sw*\n\n**type**: *eq, in*\n\n**attribute**: *eq, in*\n\n**value**: *eq, in, sw*\n\n**source.id**: *eq, in*\n\n**requestable**: *eq*","example":"attribute eq \"memberOf\"","required":false,"style":"form","explode":true},{"in":"query","name":"cursor","schema":{"type":"string"},"description":"This endpoint supports cursor-based pagination as an alternative to pagination using **limit** and **offset**. Use of cursors is optional but may deliver significantly better performance when paginating over large result sets, particularly when sorting is involved.\n\nTo obtain an initial cursor value, the initial request must be made with **offset=0** and **count=false**, or by omitting those parameters. Other query parameters may be specified on the initial request, to specify filtering and sorting for example. The response to this initial request will provide a cursor value in the **Slpt-Cursor** response header. Thereafter, passing in the last returned value of **Slpt-Cursor** as the value of the **cursor** parameter on the following request will return the next page of results, and so on. The end of the result set is signalled when a request returns without providing a value for **Slpt-Cursor**.\n\nThe **cursor** param is generally incompatible with other parameters; the second and subsequent requests should only pass that parameter and no others. A 400 Bad Request will be returned if any incompatible parameter values are passed along with the **cursor**.\n\nCursors expire after 15 minutes; a 400 Bad Request is returned if an expired value is provided for **cursor**.","example":"9602877a-1c11-4c02-a399-7273ea2158da","required":false}],"responses":{"200":{"description":"List of entitlements","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The entitlement id","example":"2c91808874ff91550175097daaec161c"},"name":{"type":"string","description":"The entitlement name","example":"LauncherTestGroup2"},"attribute":{"type":"string","description":"The entitlement attribute name","example":"memberOf"},"value":{"type":"string","description":"The value of the entitlement","example":"CN=LauncherTestGroup2,OU=LauncherTestOrg,OU=slpt-automation,DC=TestAutomationAD,DC=local"},"sourceSchemaObjectType":{"type":"string","description":"The object type of the entitlement from the source schema","example":"group"},"description":{"type":"string","description":"The description of the entitlement","example":"CN=LauncherTestGroup2,OU=LauncherTestOrg,OU=slpt-automation,DC=TestAutomationAD,DC=local"},"privileged":{"type":"boolean","description":"True if the entitlement is privileged","example":true},"cloudGoverned":{"type":"boolean","description":"True if the entitlement is cloud governed","example":true},"created":{"type":"string","description":"Time when the entitlement was created","format":"date-time","example":"2020-10-08T18:33:52.029Z"},"modified":{"type":"string","description":"Time when the entitlement was last modified","format":"date-time","example":"2020-10-08T18:33:52.029Z"},"source":{"type":"object","properties":{"id":{"type":"string","description":"The source ID","example":"2c9180827ca885d7017ca8ce28a000eb"},"type":{"type":"string","description":"The source type, will always be \"SOURCE\"","example":"SOURCE"},"name":{"type":"string","description":"The source name","example":"ODS-AD-Source"}},"example":[{"type":"SOURCE","id":"2c9180835d191a86015d28455b4b232a","name":"HR Active Directory"}]},"attributes":{"type":"object","description":"A map of free-form key-value pairs from the source system","example":{"fieldName":"fieldValue"},"additionalProperties":true},"segments":{"type":"array","items":{"type":"string"},"nullable":true,"description":"List of IDs of segments, if any, to which this Entitlement is assigned.","example":["f7b1b8a3-5fed-4fd4-ad29-82014e137e19","29cb6c06-1da8-43ea-8be4-b3125f248f2a"]},"directPermissions":{"type":"array","items":{"type":"object","description":"Simplified DTO for the Permission objects stored in SailPoint's database. The data is aggregated from customer systems and is free-form, so its appearance can vary largely between different clients/customers.","properties":{"rights":{"type":"array","description":"All the rights (e.g. actions) that this permission allows on the target","readOnly":true,"items":{"type":"string","example":"SELECT"}},"target":{"type":"string","description":"The target the permission would grants rights on.","readOnly":true,"example":"SYS.GV_$TRANSACTION"}}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/entitlements","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Gets a list of entitlements.","description":{"content":"This API returns a list of entitlements.\n\nThis API can be used in one of the two following ways: either getting entitlements for a specific **account-id**, or getting via use of **filters** (those two options are exclusive).\n\nAny authenticated token can call this API.","type":"text/plain"},"url":{"path":["entitlements"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The account ID. If specified, returns only entitlements associated with the given Account. Can not be specified with the **filters**, **segmented-for-identity**, **for-segment-ids**, or **include-unsegmented** param(s).","type":"text/plain"},"key":"account-id","value":""},{"disabled":false,"description":{"content":"If present and not empty, additionally filters Entitlements to those which are assigned to the Segment(s) which are visible to the Identity with the specified ID. By convention, the value **me** can stand in for the current user's Identity ID.\nCan not be specified with the **account-id** or **for-segment-ids** param(s). It is also illegal to specify a value that refers to a different user's Identity.","type":"text/plain"},"key":"segmented-for-identity","value":""},{"disabled":false,"description":{"content":"If present and not empty, additionally filters Access Profiles to those which are assigned to the Segment(s) with the specified IDs.\nCan not be specified with the **account-id** or **segmented-for-identity** param(s).","type":"text/plain"},"key":"for-segment-ids","value":""},{"disabled":false,"description":{"content":"Whether or not the response list should contain unsegmented Entitlements. If **for-segment-ids** and **segmented-for-identity** are both absent or empty, specifying **include-unsegmented=false** results in an error.","type":"text/plain"},"key":"include-unsegmented","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\nSorting is supported for the following fields: **id, name, created, modified, type, attribute, value, source.id**","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**name**: *eq, in, sw*\n\n**type**: *eq, in*\n\n**attribute**: *eq, in*\n\n**value**: *eq, in, sw*\n\n**source.id**: *eq, in*\n\n**requestable**: *eq*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"This endpoint supports cursor-based pagination as an alternative to pagination using **limit** and **offset**. Use of cursors is optional but may deliver significantly better performance when paginating over large result sets, particularly when sorting is involved.\n\nTo obtain an initial cursor value, the initial request must be made with **offset=0** and **count=false**, or by omitting those parameters. Other query parameters may be specified on the initial request, to specify filtering and sorting for example. The response to this initial request will provide a cursor value in the **Slpt-Cursor** response header. Thereafter, passing in the last returned value of **Slpt-Cursor** as the value of the **cursor** parameter on the following request will return the next page of results, and so on. The end of the result set is signalled when a request returns without providing a value for **Slpt-Cursor**.\n\nThe **cursor** param is generally incompatible with other parameters; the second and subsequent requests should only pass that parameter and no others. A 400 Bad Request will be returned if any incompatible parameter values are passed along with the **cursor**.\n\nCursors expire after 15 minutes; a 400 Bad Request is returned if an expired value is provided for **cursor**.","type":"text/plain"},"key":"cursor","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Gets a list of entitlements. + + + +This API returns a list of entitlements. + +This API can be used in one of the two following ways: either getting entitlements for a specific **account-id**, or getting via use of **filters** (those two options are exclusive). + +Any authenticated token can call this API. + +
    Query Parameters
    + +List of entitlements + +
    Schema array
      source object
      attributes object
      + +A map of free-form key-value pairs from the source system + +
      directPermissions object[]
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-from-addresses.api.mdx b/docs/sailpoint-api-beta/list-from-addresses.api.mdx new file mode 100644 index 000000000..08c7cef92 --- /dev/null +++ b/docs/sailpoint-api-beta/list-from-addresses.api.mdx @@ -0,0 +1,63 @@ +--- +id: list-from-addresses +sidebar_label: List From Addresses +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listFromAddresses","tags":["Notifications"],"description":"Retrieve a list of sender email addresses and their verification statuses","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**email**: *eq*"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields:\n\n**email**"}],"responses":{"200":{"description":"List of Email Status","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string","example":"sender@example.com"},"verificationStatus":{"type":"string","enum":["PENDING","SUCCESS","FAILED"]}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/verified-from-addresses","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List From Addresses","description":{"content":"Retrieve a list of sender email addresses and their verification statuses","type":"text/plain"},"url":{"path":["verified-from-addresses"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**email**: *eq*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields:\n\n**email**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List From Addresses + + + +Retrieve a list of sender email addresses and their verification statuses + +
    Query Parameters
    + +List of Email Status + +
    Schema array
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-identities.api.mdx b/docs/sailpoint-api-beta/list-identities.api.mdx new file mode 100644 index 000000000..9ac265bf5 --- /dev/null +++ b/docs/sailpoint-api-beta/list-identities.api.mdx @@ -0,0 +1,59 @@ +--- +id: list-identities +sidebar_label: Lists all the identities +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listIdentities","description":"This gets the list of identities for the customer. This list end point does not support count=true request param. The total count of identities would never be returned even if the count param is specified in the request Requires authorization scope of 'idn:identity-history:read' ","tags":["Identity History"],"parameters":[{"in":"query","name":"starts-with-query","schema":{"type":"string"},"description":"This param is used for starts-with search for first, last and display name of the identity","example":"Ada"},{"in":"query","name":"is-deleted","schema":{"type":"boolean"},"description":"Indicates if we want to only list down deleted identities or not.","example":true},{"in":"query","name":"is-active","schema":{"type":"boolean"},"description":"Indicates if we want to only list active or inactive identities.","example":true},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}}],"responses":{"200":{"description":"List of identities for the customer.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"the identity ID","example":"bc693f07e7b645539626c25954c58554"},"displayName":{"type":"string","description":"the display name of the identity","example":"Adam Zampa"},"firstName":{"type":"string","description":"the first name of the identity","example":"Adam"},"lastName":{"type":"string","description":"the last name of the identity","example":"Zampa"},"active":{"type":"boolean","description":"indicates if an identity is active or not","example":true},"deletedDate":{"type":"string","description":"the date when the identity was deleted","example":"2007-03-01T13:00:00.000Z"}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":[]}],"method":"get","path":"/historical-identities","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Lists all the identities","description":{"content":"This gets the list of identities for the customer. This list end point does not support count=true request param. The total count of identities would never be returned even if the count param is specified in the request Requires authorization scope of 'idn:identity-history:read' ","type":"text/plain"},"url":{"path":["historical-identities"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"This param is used for starts-with search for first, last and display name of the identity","type":"text/plain"},"key":"starts-with-query","value":""},{"disabled":false,"description":{"content":"Indicates if we want to only list down deleted identities or not.","type":"text/plain"},"key":"is-deleted","value":""},{"disabled":false,"description":{"content":"Indicates if we want to only list active or inactive identities.","type":"text/plain"},"key":"is-active","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Lists all the identities + + + +This gets the list of identities for the customer. This list end point does not support count=true request param. The total count of identities would never be returned even if the count param is specified in the request Requires authorization scope of 'idn:identity-history:read' + +
    Query Parameters
    + +List of identities for the customer. + +
    Schema array
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-identity-access-items.api.mdx b/docs/sailpoint-api-beta/list-identity-access-items.api.mdx new file mode 100644 index 000000000..ceac8bd6e --- /dev/null +++ b/docs/sailpoint-api-beta/list-identity-access-items.api.mdx @@ -0,0 +1,83 @@ +--- +id: list-identity-access-items +sidebar_label: Gets a list of access items for the identity filtered by item type +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listIdentityAccessItems","tags":["Identity History"],"description":"This method retrieves a list of access item for the identity filtered by the access item type Requires authorization scope of 'idn:identity-history:read' ","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The identity id","example":"8c190e6787aa4ed9a90bd9d5344523fb"},{"in":"query","name":"type","schema":{"type":"string"},"description":"The type of access item for the identity. If not provided, it defaults to account","example":"account"}],"responses":{"200":{"description":"The list of access items.","content":{"application/json":{"schema":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"accessType":{"type":"string","example":"accessProfile","description":"the access item type. accessProfile in this case"},"id":{"type":"string","example":"2c918087763e69d901763e72e97f006f","description":"the access item id"},"name":{"type":"string","example":"sample","description":"the access profile name"},"sourceName":{"type":"string","example":"DataScienceDataset","description":"the name of the source"},"sourceId":{"type":"string","example":"2793o32dwd","description":"the id of the source"},"description":{"type":"string","example":"AccessProfile - Workday/Citizenship access","description":"the description for the access profile"},"displayName":{"type":"string","example":"Dr. Arden Rogahn MD","description":"the display name of the identity"},"entitlementCount":{"type":"string","example":12,"description":"the number of entitlements the access profile will create"},"appDisplayName":{"type":"string","example":"AppName","description":"the name of app"}}},{"type":"object","properties":{"accessType":{"type":"string","example":"account","description":"the access item type. account in this case"},"id":{"type":"string","example":"2c918087763e69d901763e72e97f006f","description":"the access item id"},"nativeIdentity":{"type":"string","example":"dr.arden.ogahn.d","description":"the native identifier used to uniquely identify an acccount"},"sourceName":{"type":"string","example":"DataScienceDataset","description":"the name of the source"},"sourceId":{"type":"string","example":"2793o32dwd","description":"the id of the source"},"entitlementCount":{"type":"string","example":12,"description":"the number of entitlements the account will create"},"displayName":{"type":"string","example":"Dr. Arden Rogahn MD","description":"the display name of the identity"}}},{"type":"object","properties":{"accessType":{"type":"string","example":"app","description":"the access item type. entitlement in this case"},"id":{"type":"string","example":"2c918087763e69d901763e72e97f006f","description":"the access item id"},"displayName":{"type":"string","example":"Display Name","description":"the access profile display name"},"sourceName":{"type":"string","example":"appName","description":"the associated source name if it exists"}}},{"type":"object","properties":{"accessType":{"type":"string","example":"entitlement","description":"the access item type. entitlement in this case"},"id":{"type":"string","example":"2c918087763e69d901763e72e97f006f","description":"the access item id"},"attribute":{"type":"string","example":"groups","description":"the entitlement attribute"},"value":{"type":"string","example":"Upward mobility access","description":"the associated value"},"entitlementType":{"type":"string","example":"entitlement","description":"the type of entitlement"},"sourceName":{"type":"string","example":"DataScienceDataset","description":"the name of the source"},"sourceId":{"type":"string","example":"2793o32dwd","description":"the id of the source"},"description":{"type":"string","example":"Entitlement - Workday/Citizenship access","description":"the description for the entitlment"},"displayName":{"type":"string","example":"Dr. Arden Rogahn MD","description":"the display name of the identity"}}},{"type":"object","properties":{"accessType":{"type":"string","example":"role","description":"the access item type. role in this case"},"id":{"type":"string","example":"2c918087763e69d901763e72e97f006f","description":"the access item id"},"displayName":{"type":"string","example":"sample","description":"the role display name"},"description":{"type":"string","example":"Role - Workday/Citizenship access","description":"the description for the role"},"sourceName":{"type":"string","example":"Source Name","description":"the associated source name if it exists"}}}]}},"examples":{"Access Profile":{"description":"An access profile response","value":[{"accessType":"accessProfile","id":"2c918087763e69d901763e72e97f006f","name":"sample","sourceName":"DataScienceDataset","sourceId":"2793o32dwd","description":"AccessProfile - Workday/Citizenship access","displayName":"Dr. Arden Rogahn MD","entitlementCount":12,"appDisplayName":"AppName"}]},"Account":{"description":"An account response","value":[{"accessType":"account","id":"2c918087763e69d901763e72e97f006f","nativeIdentity":"dr.arden.ogahn.d","sourceName":"DataScienceDataset","sourceId":"2793o32dwd","entitlementCount":12,"displayName":"Dr. Arden Rogahn MD"}]},"App":{"description":"An app response","value":[{"accessType":"app","id":"2c918087763e69d901763e72e97f006f","name":"appName"}]},"Entitlement":{"description":"An entitlement event","value":[{"accessType":"entitlement","id":"2c918087763e69d901763e72e97f006f","attribute":"groups","value":"Upward mobility access","type":"group","sourceName":"DataScienceDataset","sourceId":"2793o32dwd","description":"Entitlement - Workday/Citizenship access","displayName":"Dr. Arden Rogahn MD"}]},"Role":{"description":"A role response","value":[{"accessType":"role","id":"2c918087763e69d901763e72e97f006f","name":"sample","description":"Role - Workday/Citizenship access"}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/historical-identities/{id}/access-items","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Gets a list of access items for the identity filtered by item type","description":{"content":"This method retrieves a list of access item for the identity filtered by the access item type Requires authorization scope of 'idn:identity-history:read' ","type":"text/plain"},"url":{"path":["historical-identities",":id","access-items"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The type of access item for the identity. If not provided, it defaults to account","type":"text/plain"},"key":"type","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The identity id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Gets a list of access items for the identity filtered by item type + + + +This method retrieves a list of access item for the identity filtered by the access item type Requires authorization scope of 'idn:identity-history:read' + +
    Path Parameters
    Query Parameters
    + +The list of access items. + +
    Schema array
    • oneOf
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-identity-profiles.api.mdx b/docs/sailpoint-api-beta/list-identity-profiles.api.mdx new file mode 100644 index 000000000..6b4cfd0e5 --- /dev/null +++ b/docs/sailpoint-api-beta/list-identity-profiles.api.mdx @@ -0,0 +1,76 @@ +--- +id: list-identity-profiles +sidebar_label: Identity Profiles list +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listIdentityProfiles","tags":["Identity Profiles"],"description":"This returns a list of Identity Profiles based on the specified query parameters.\nA token with ORG_ADMIN or API authority is required to call this API to get a list of Identity Profiles.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, ne*\n\n**name**: *eq, ne*\n\n**priority**: *eq, ne*"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **id**, **name**, **priority**"}],"responses":{"200":{"description":"List of identityProfiles.","content":{"application/json":{"schema":{"type":"array","items":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","format":"date-time","readOnly":true,"example":true},"modified":{"description":"Last modification date of the Object","type":"string","format":"date-time","readOnly":true,"example":true}}},{"type":"object","properties":{"description":{"type":"string","description":"The description of the Identity Profile.","example":"My custom flat file profile"},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The owner of the Identity Profile."},"priority":{"type":"integer","format":"int64","description":"The priority for an Identity Profile.","example":10},"authoritativeSource":{"type":"object","properties":{"type":{"type":"string","enum":["SOURCE"],"description":"Type of the object to which this reference applies","example":"SOURCE"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c9180835d191a86015d28455b4b232a"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"HR Active Directory"}},"description":"The authoritative source for this Identity Profile."},"identityRefreshRequired":{"type":"boolean","description":"True if a identity refresh is needed. Typically triggered when a change on the source has been made","example":true},"identityCount":{"type":"integer","description":"The number of identities that belong to the Identity Profile.","format":"int32","example":8},"identityAttributeConfig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"If the profile or mapping is enabled","example":true},"attributeTransforms":{"type":"array","items":{"type":"object","properties":{"identityAttributeName":{"type":"string","description":"Name of the identity attribute","example":"email"},"transformDefinition":{"description":"The seaspray transformation definition","type":"object","properties":{"type":{"type":"string","description":"The type of the transform definition.","example":"accountAttribute"},"attributes":{"type":"object","additionalProperties":{"type":"object"},"description":"Arbitrary key-value pairs to store any metadata for the object","example":{"attributeName":"e-mail","sourceName":"MySource","sourceId":"2c9180877a826e68017a8c0b03da1a53"}}}}}}}}},"identityExceptionReportReference":{"type":"object","properties":{"taskResultId":{"type":"string","format":"uuid","description":"The id of the task result","example":"2c918086795cd09201795d5f7d7533df"},"reportName":{"type":"string","example":"My annual report","description":"The name of the report"}}},"hasTimeBasedAttr":{"description":"Indicates the value of requiresPeriodicRefresh attribute for the Identity Profile.","type":"boolean","example":true}}}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:identity-profile:read"]}],"method":"get","path":"/identity-profiles","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Identity Profiles list","description":{"content":"This returns a list of Identity Profiles based on the specified query parameters.\nA token with ORG_ADMIN or API authority is required to call this API to get a list of Identity Profiles.","type":"text/plain"},"url":{"path":["identity-profiles"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, ne*\n\n**name**: *eq, ne*\n\n**priority**: *eq, ne*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **id**, **name**, **priority**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Identity Profiles list + + + +This returns a list of Identity Profiles based on the specified query parameters. +A token with ORG_ADMIN or API authority is required to call this API to get a list of Identity Profiles. + +
    Query Parameters
    + +List of identityProfiles. + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-identity-snapshot-access-items.api.mdx b/docs/sailpoint-api-beta/list-identity-snapshot-access-items.api.mdx new file mode 100644 index 000000000..095eaec70 --- /dev/null +++ b/docs/sailpoint-api-beta/list-identity-snapshot-access-items.api.mdx @@ -0,0 +1,83 @@ +--- +id: list-identity-snapshot-access-items +sidebar_label: Gets the list of identity access items at a given date filterd by item type +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listIdentitySnapshotAccessItems","tags":["Identity History"],"description":"This method retrieves the list of identity access items at a given date filterd by item type Requires authorization scope of 'idn:identity-history:read' ","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The identity id","example":"8c190e6787aa4ed9a90bd9d5344523fb"},{"in":"path","name":"date","schema":{"type":"string"},"required":true,"description":"The specified date","example":"2007-03-01T13:00:00Z"},{"in":"query","name":"type","schema":{"type":"string"},"description":"The access item type","example":"account"}],"responses":{"200":{"description":"The identity object.","content":{"application/json":{"schema":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"accessType":{"type":"string","example":"accessProfile","description":"the access item type. accessProfile in this case"},"id":{"type":"string","example":"2c918087763e69d901763e72e97f006f","description":"the access item id"},"name":{"type":"string","example":"sample","description":"the access profile name"},"sourceName":{"type":"string","example":"DataScienceDataset","description":"the name of the source"},"sourceId":{"type":"string","example":"2793o32dwd","description":"the id of the source"},"description":{"type":"string","example":"AccessProfile - Workday/Citizenship access","description":"the description for the access profile"},"displayName":{"type":"string","example":"Dr. Arden Rogahn MD","description":"the display name of the identity"},"entitlementCount":{"type":"string","example":12,"description":"the number of entitlements the access profile will create"},"appDisplayName":{"type":"string","example":"AppName","description":"the name of app"}}},{"type":"object","properties":{"accessType":{"type":"string","example":"account","description":"the access item type. account in this case"},"id":{"type":"string","example":"2c918087763e69d901763e72e97f006f","description":"the access item id"},"nativeIdentity":{"type":"string","example":"dr.arden.ogahn.d","description":"the native identifier used to uniquely identify an acccount"},"sourceName":{"type":"string","example":"DataScienceDataset","description":"the name of the source"},"sourceId":{"type":"string","example":"2793o32dwd","description":"the id of the source"},"entitlementCount":{"type":"string","example":12,"description":"the number of entitlements the account will create"},"displayName":{"type":"string","example":"Dr. Arden Rogahn MD","description":"the display name of the identity"}}},{"type":"object","properties":{"accessType":{"type":"string","example":"app","description":"the access item type. entitlement in this case"},"id":{"type":"string","example":"2c918087763e69d901763e72e97f006f","description":"the access item id"},"displayName":{"type":"string","example":"Display Name","description":"the access profile display name"},"sourceName":{"type":"string","example":"appName","description":"the associated source name if it exists"}}},{"type":"object","properties":{"accessType":{"type":"string","example":"entitlement","description":"the access item type. entitlement in this case"},"id":{"type":"string","example":"2c918087763e69d901763e72e97f006f","description":"the access item id"},"attribute":{"type":"string","example":"groups","description":"the entitlement attribute"},"value":{"type":"string","example":"Upward mobility access","description":"the associated value"},"entitlementType":{"type":"string","example":"entitlement","description":"the type of entitlement"},"sourceName":{"type":"string","example":"DataScienceDataset","description":"the name of the source"},"sourceId":{"type":"string","example":"2793o32dwd","description":"the id of the source"},"description":{"type":"string","example":"Entitlement - Workday/Citizenship access","description":"the description for the entitlment"},"displayName":{"type":"string","example":"Dr. Arden Rogahn MD","description":"the display name of the identity"}}},{"type":"object","properties":{"accessType":{"type":"string","example":"role","description":"the access item type. role in this case"},"id":{"type":"string","example":"2c918087763e69d901763e72e97f006f","description":"the access item id"},"displayName":{"type":"string","example":"sample","description":"the role display name"},"description":{"type":"string","example":"Role - Workday/Citizenship access","description":"the description for the role"},"sourceName":{"type":"string","example":"Source Name","description":"the associated source name if it exists"}}}]}},"examples":{"Access Item AccessProfile Response":{"description":"An access profile response","value":[{"type":"accessProfile","id":"2c918087763e69d901763e72e97f006f","name":"sample","sourceName":"DataScienceDataset","sourceId":"2793o32dwd","description":"AccessProfile - Workday/Citizenship access","displayName":"Dr. Arden Rogahn MD","entitlementCount":12,"appDisplayName":"AppName"}]},"Access Item Account Response":{"description":"An account response","value":[{"type":"account","id":"2c918087763e69d901763e72e97f006f","nativeIdentity":"dr.arden.ogahn.d","sourceName":"DataScienceDataset","sourceId":"2793o32dwd","entitlementCount":12,"displayName":"Dr. Arden Rogahn MD"}]},"Access Item App Response":{"description":"An app response","value":[{"type":"app","id":"2c918087763e69d901763e72e97f006f","name":"appName"}]},"Access Item Entitlement Response":{"description":"An entitlement event","value":[{"type":"entitlement","id":"2c918087763e69d901763e72e97f006f","attribute":"groups","value":"Upward mobility access","entitlementType":"entitlement","sourceName":"DataScienceDataset","sourceId":"2793o32dwd","description":"Entitlement - Workday/Citizenship access","displayName":"Dr. Arden Rogahn MD"}]},"Access Item Role Response":{"description":"A role response","value":[{"type":"role","id":"2c918087763e69d901763e72e97f006f","name":"sample","description":"Role - Workday/Citizenship access"}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/historical-identities/{id}/snapshots/{date}/access-items","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Gets the list of identity access items at a given date filterd by item type","description":{"content":"This method retrieves the list of identity access items at a given date filterd by item type Requires authorization scope of 'idn:identity-history:read' ","type":"text/plain"},"url":{"path":["historical-identities",":id","snapshots",":date","access-items"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The access item type","type":"text/plain"},"key":"type","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The identity id","type":"text/plain"},"type":"any","value":"","key":"id"},{"disabled":false,"description":{"content":"(Required) The specified date","type":"text/plain"},"type":"any","value":"","key":"date"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Gets the list of identity access items at a given date filterd by item type + + + +This method retrieves the list of identity access items at a given date filterd by item type Requires authorization scope of 'idn:identity-history:read' + +
    Path Parameters
    Query Parameters
    + +The identity object. + +
    Schema array
    • oneOf
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-identity-snapshots.api.mdx b/docs/sailpoint-api-beta/list-identity-snapshots.api.mdx new file mode 100644 index 000000000..3ebc58fb8 --- /dev/null +++ b/docs/sailpoint-api-beta/list-identity-snapshots.api.mdx @@ -0,0 +1,83 @@ +--- +id: list-identity-snapshots +sidebar_label: Lists all the snapshots for the identity +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listIdentitySnapshots","tags":["Identity History"],"description":"This method retrieves all the snapshots for the identity Requires authorization scope of 'idn:identity-history:read' ","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The identity id","example":"8c190e6787aa4ed9a90bd9d5344523fb"},{"in":"query","name":"start","schema":{"type":"string"},"description":"The specified start date","example":"2007-03-01T13:00:00Z"},{"in":"query","name":"interval","schema":{"type":"string","enum":["day","month"]},"description":"The interval indicating the range in day or month for the specified interval-name"},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"A list of identity summary for each snapshot.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"snapshot":{"type":"string","description":"the date when the identity record was created","example":"2007-03-01T13:00:00.000Z"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/historical-identities/{id}/snapshots","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Lists all the snapshots for the identity","description":{"content":"This method retrieves all the snapshots for the identity Requires authorization scope of 'idn:identity-history:read' ","type":"text/plain"},"url":{"path":["historical-identities",":id","snapshots"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The specified start date","type":"text/plain"},"key":"start","value":""},{"disabled":false,"description":{"content":"The interval indicating the range in day or month for the specified interval-name","type":"text/plain"},"key":"interval","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The identity id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Lists all the snapshots for the identity + + + +This method retrieves all the snapshots for the identity Requires authorization scope of 'idn:identity-history:read' + +
    Path Parameters
    Query Parameters
    + +A list of identity summary for each snapshot. + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-invocation-status.api.mdx b/docs/sailpoint-api-beta/list-invocation-status.api.mdx new file mode 100644 index 000000000..8f021f0c5 --- /dev/null +++ b/docs/sailpoint-api-beta/list-invocation-status.api.mdx @@ -0,0 +1,89 @@ +--- +id: list-invocation-status +sidebar_label: List Latest Invocation Statuses +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listInvocationStatus","tags":["Triggers"],"description":"Gets a list of latest invocation statuses.\nStatuses of successful invocations are available for up to 24 hours. Statuses of failed invocations are available for up to 48 hours.\nThis endpoint may only fetch up to 2000 invocations, and should not be treated as a representation of the full history of invocations.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","required":false,"schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**triggerId**: *eq* **subscriptionId**: *eq*","example":"triggerId eq \"idn:access-request-dynamic-approver\""},{"in":"query","name":"sorters","required":false,"schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields:\n\n**triggerId** **subscriptionName** **created** **completed**","example":"created"}],"responses":{"200":{"description":"List of latest invocation statuses.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["id","triggerId","subscriptionId","startInvocationInput","type","subscriptionName","created"],"properties":{"id":{"type":"string","description":"Invocation ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"triggerId":{"type":"string","description":"Trigger ID","example":"idn:access-requested"},"subscriptionId":{"type":"string","description":"Subscription ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"type":{"type":"string","description":"Defines the Invocation type.\n\n**TEST** The trigger was invocated as a test, either via the test subscription button in the UI or via the start test invocation API.\n\n**REAL_TIME** The trigger subscription is live and was invocated by a real event in IdentityNow.","enum":["TEST","REAL_TIME"],"example":"TEST"},"created":{"type":"string","format":"date-time","description":"Invocation created timestamp. ISO-8601 in UTC.","example":"2020-03-27T20:40:10.738Z"},"completed":{"type":"string","format":"date-time","description":"Invocation completed timestamp; empty fields imply invocation is in-flight or not completed. ISO-8601 in UTC.","example":"2020-03-27T20:42:14.738Z"},"startInvocationInput":{"description":"Data related to start of trigger invocation.","type":"object","properties":{"triggerId":{"type":"string","description":"Trigger ID","example":"idn:access-requested"},"input":{"type":"object","example":{"identityId":"201327fda1c44704ac01181e963d463c"},"description":"Trigger input payload. Its schema is defined in the trigger definition."},"contentJson":{"type":"object","example":{"workflowId":1234},"description":"JSON map of invocation metadata"}}},"completeInvocationInput":{"description":"Data related to end of trigger invocation.","type":"object","properties":{"localizedError":{"type":"object","description":"Localized error message to indicate a failed invocation or error if any.","required":["locale","message"],"properties":{"locale":{"description":"Message locale","type":"string","example":"An error has occurred!"},"message":{"description":"Message text","type":"string","example":"Error has occurred!"}}},"output":{"type":"object","example":{"approved":false},"description":"Trigger output that completed the invocation. Its schema is defined in the trigger definition."}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"oauth2":["idn:trigger-service-invocation-status:read"]}],"method":"get","path":"/trigger-invocations/status","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Latest Invocation Statuses","description":{"content":"Gets a list of latest invocation statuses.\nStatuses of successful invocations are available for up to 24 hours. Statuses of failed invocations are available for up to 48 hours.\nThis endpoint may only fetch up to 2000 invocations, and should not be treated as a representation of the full history of invocations.","type":"text/plain"},"url":{"path":["trigger-invocations","status"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**triggerId**: *eq* **subscriptionId**: *eq*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields:\n\n**triggerId** **subscriptionName** **created** **completed**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET","auth":{"type":"oauth2","oauth2":[]}}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Latest Invocation Statuses + + + +Gets a list of latest invocation statuses. +Statuses of successful invocations are available for up to 24 hours. Statuses of failed invocations are available for up to 48 hours. +This endpoint may only fetch up to 2000 invocations, and should not be treated as a representation of the full history of invocations. + +
    Query Parameters
    + +List of latest invocation statuses. + +
    Schema array
      startInvocationInput object
      + +Data related to start of trigger invocation. + +
      completeInvocationInput object
      + +Data related to end of trigger invocation. + +
      localizedError object
      + +Localized error message to indicate a failed invocation or error if any. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-lifecycle-states.api.mdx b/docs/sailpoint-api-beta/list-lifecycle-states.api.mdx new file mode 100644 index 000000000..f03a2a4fd --- /dev/null +++ b/docs/sailpoint-api-beta/list-lifecycle-states.api.mdx @@ -0,0 +1,78 @@ +--- +id: list-lifecycle-states +sidebar_label: Lifecycle State +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listLifecycleStates","tags":["Lifecycle States"],"description":"This endpoint returns a lifecycle state.\n\nA token with ORG_ADMIN or API authority is required to call this API.\n","parameters":[{"in":"path","name":"identity-profile-id","description":"Identity Profile ID","required":true,"schema":{"type":"string"}},{"in":"path","name":"lifecycle-state-id","description":"Lifecycle State ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"lifecycle-state","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"example":"2c9180835d2e5168015d32f890ca1581","description":"lifecycle stat id."},"name":{"type":"string","readOnly":true,"example":"Lifecycle Name","description":"Lifecycle-state name."},"technicalName":{"type":"string","readOnly":true,"example":"lifecycleTechnicalName","description":"The technical name for lifecycle state. This is for internal use."},"description":{"type":"string","example":"LifecycleDescription","description":"Lifecycle state description."},"created":{"type":"string","readOnly":true,"format":"date-time","example":"2015-05-28T14:07:17Z","description":"Lifecycle state created date."},"modified":{"type":"string","readOnly":true,"format":"date-time","example":"2015-05-28T14:07:17Z","description":"Lifecycle state modified date."},"enabled":{"type":"boolean","example":true,"description":"Whether the lifecycle state is enabled or disabled."},"identityCount":{"type":"integer","format":"int32","readOnly":true,"example":12,"description":"Number of identities that have the lifecycle state."},"emailNotificationOption":{"type":"object","properties":{"notifyManagers":{"type":"boolean","example":true,"description":"If true, then the manager is notified of the lifecycle state change."},"notifyAllAdmins":{"type":"boolean","example":true,"description":"If true, then all the admins are notified of the lifecycle state change."},"notifySpecificUsers":{"type":"boolean","example":true,"description":"If true, then the users specified in \"emailAddressList\" below are notified of lifecycle state change."},"emailAddressList":{"type":"array","example":["test@test.com","test2@test.com"],"items":{"type":"string"},"description":"List of user email addresses. If \"notifySpecificUsers\" option is true, then these users are notified of lifecycle state change."}}},"accountActions":{"type":"array","items":{"type":"object","properties":{"action":{"type":"string","example":"ENABLE","description":"Describes if action will be enabled or disabled","enum":["ENABLE","DISABLE"]},"sourceIds":{"type":"array","items":{"example":"2c918084660f45d6016617daa9210584","description":"Source Id","type":"string"},"example":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"],"description":"List of source IDs. The sources must have the ENABLE feature or flat file source. See \"/sources\" endpoint for source features."}}}},"accessProfileIds":{"type":"array","items":{"type":"string"},"example":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"],"description":"List of access-profile IDs that are associated with the lifecycle state."}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/identity-profiles/{identity-profile-id}/lifecycle-states/{lifecycle-state-id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Lifecycle State","description":{"content":"This endpoint returns a lifecycle state.\n\nA token with ORG_ADMIN or API authority is required to call this API.\n","type":"text/plain"},"url":{"path":["identity-profiles",":identity-profile-id","lifecycle-states",":lifecycle-state-id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Identity Profile ID","type":"text/plain"},"type":"any","value":"","key":"identity-profile-id"},{"disabled":false,"description":{"content":"(Required) Lifecycle State ID","type":"text/plain"},"type":"any","value":"","key":"lifecycle-state-id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Lifecycle State + + + +This endpoint returns a lifecycle state. + +A token with ORG_ADMIN or API authority is required to call this API. + + +
    Path Parameters
    + +lifecycle-state + +
    Schema
      emailNotificationOption object
      accountActions object[]
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-notification-template-defaults.api.mdx b/docs/sailpoint-api-beta/list-notification-template-defaults.api.mdx new file mode 100644 index 000000000..bedad2484 --- /dev/null +++ b/docs/sailpoint-api-beta/list-notification-template-defaults.api.mdx @@ -0,0 +1,75 @@ +--- +id: list-notification-template-defaults +sidebar_label: List Notification Template Defaults +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listNotificationTemplateDefaults","tags":["Notifications"],"description":"This lists the default templates used for notifications, such as emails from IdentityNow. Since this is a beta feature, it doesn't include all the templates.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**key**: *eq, in*\n\n**medium**: *eq*\n\n**locale**: *eq*"}],"responses":{"200":{"description":"A list of the default template objects","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","example":"cloud_manual_work_item_summary"},"name":{"type":"string","example":"Task Manager Subscription"},"medium":{"type":"string","description":"The message medium. More mediums may be added in the future.","enum":["EMAIL","PHONE","SMS","SLACK","TEAMS"],"example":"EMAIL"},"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en"},"subject":{"type":"string","example":"You have $numberOfPendingTasks $taskTasks to complete in ${__global.productName}."},"header":{"type":"string","example":"Dear $__recipient.name,
    "},"body":{"type":"string","example":"Please go to the task manager"},"footer":{"type":"string","example":"
    Thanks,
    The $__global.productName Team
    "},"from":{"type":"string","example":"$__global.emailFromAddress"},"replyTo":{"type":"string","example":"$__global.emailFromAddress"},"description":{"type":"string","example":"Daily digest - sent if number of outstanding tasks for task owner > 0"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/notification-template-defaults","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Notification Template Defaults","description":{"content":"This lists the default templates used for notifications, such as emails from IdentityNow. Since this is a beta feature, it doesn't include all the templates.","type":"text/plain"},"url":{"path":["notification-template-defaults"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**key**: *eq, in*\n\n**medium**: *eq*\n\n**locale**: *eq*","type":"text/plain"},"key":"filters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Notification Template Defaults + + + +This lists the default templates used for notifications, such as emails from IdentityNow. Since this is a beta feature, it doesn't include all the templates. + +
    Query Parameters
    + +A list of the default template objects + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-notification-templates.api.mdx b/docs/sailpoint-api-beta/list-notification-templates.api.mdx new file mode 100644 index 000000000..8661f3818 --- /dev/null +++ b/docs/sailpoint-api-beta/list-notification-templates.api.mdx @@ -0,0 +1,75 @@ +--- +id: list-notification-templates +sidebar_label: List Notification Templates For Your Site +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listNotificationTemplates","tags":["Notifications"],"description":"This lists the templates that you have modified for your site. Since this is a beta feature, it doesn't include all your modified templates.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**key**: *eq, in*\n\n**medium**: *eq*\n\n**locale**: *eq*"}],"responses":{"200":{"description":"A list of template objects for your site","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","example":"cloud_manual_work_item_summary"},"name":{"type":"string","example":"Task Manager Subscription"},"medium":{"type":"string","description":"The message medium. More mediums may be added in the future.","enum":["EMAIL","PHONE","SMS","SLACK","TEAMS"],"example":"EMAIL"},"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en"},"subject":{"type":"string","example":"You have $numberOfPendingTasks $taskTasks to complete in ${__global.productName}."},"header":{"type":"string","example":"Dear $__recipient.name,
    "},"body":{"type":"string","example":"Please go to the task manager"},"footer":{"type":"string","example":"
    Thanks,
    The $__global.productName Team
    "},"from":{"type":"string","example":"$__global.emailFromAddress"},"replyTo":{"type":"string","example":"$__global.emailFromAddress"},"description":{"type":"string","example":"Daily digest - sent if number of outstanding tasks for task owner > 0"},"id":{"type":"string","example":"c17bea3a-574d-453c-9e04-4365fbf5af0b","description":"This is auto-generated."},"created":{"type":"string","format":"date-time","description":"The time when this template is created. This is auto-generated.","example":"2020-01-01T00:00:00.000000Z"},"modified":{"type":"string","format":"date-time","description":"The time when this template was last modified. This is auto-generated.","example":"2020-01-01T00:00:00.000000Z"}},"required":["key","medium","locale"]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/notification-templates","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Notification Templates For Your Site","description":{"content":"This lists the templates that you have modified for your site. Since this is a beta feature, it doesn't include all your modified templates.","type":"text/plain"},"url":{"path":["notification-templates"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**key**: *eq, in*\n\n**medium**: *eq*\n\n**locale**: *eq*","type":"text/plain"},"key":"filters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Notification Templates For Your Site + + + +This lists the templates that you have modified for your site. Since this is a beta feature, it doesn't include all your modified templates. + +
    Query Parameters
    + +A list of template objects for your site + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-oauth-clients.api.mdx b/docs/sailpoint-api-beta/list-oauth-clients.api.mdx new file mode 100644 index 000000000..a0481886c --- /dev/null +++ b/docs/sailpoint-api-beta/list-oauth-clients.api.mdx @@ -0,0 +1,77 @@ +--- +id: list-oauth-clients +sidebar_label: List OAuth Clients +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listOauthClients","tags":["OAuth Clients"],"description":"This gets a list of OAuth clients.\nRequest will require the following security scope:\n- 'idn:oathkeeper-client-list:read'","responses":{"200":{"description":"List of OAuth clients.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the OAuth client","example":"2c9180835d2e5168015d32f890ca1581"},"businessName":{"type":"string","description":"The name of the business the API Client should belong to","example":"Acme-Solar"},"homepageUrl":{"type":"string","description":"The homepage URL associated with the owner of the API Client","example":"http://localhost:12345"},"name":{"type":"string","description":"A human-readable name for the API Client","example":"Demo API Client"},"description":{"type":"string","description":"A description of the API Client","example":"An API client used for the authorization_code, refresh_token, and client_credentials flows"},"accessTokenValiditySeconds":{"type":"string","description":"The number of seconds an access token generated for this API Client is valid for","example":750},"refreshTokenValiditySeconds":{"type":"string","description":"The number of seconds a refresh token generated for this API Client is valid for","example":86400},"redirectUris":{"type":"array","items":{"type":"string"},"description":"A list of the approved redirect URIs used with the authorization_code flow","example":["http://localhost:12345"]},"grantTypes":{"type":"array","items":{"description":"OAuth2 Grant Type","type":"string","example":"CLIENT_CREDENTIALS","enum":["CLIENT_CREDENTIALS","AUTHORIZATION_CODE","REFRESH_TOKEN"]},"description":"A list of OAuth 2.0 grant types this API Client can be used with","example":["AUTHORIZATION_CODE","CLIENT_CREDENTIALS","REFRESH_TOKEN"]},"accessType":{"description":"The access type (online or offline) of this API Client","example":"OFFLINE","type":"string","enum":["ONLINE","OFFLINE"]},"type":{"description":"The type of the API Client (public or confidential)","example":"CONFIDENTIAL","type":"string","enum":["CONFIDENTIAL","PUBLIC"]},"internal":{"type":"boolean","description":"An indicator of whether the API Client can be used for requests internal to IDN","example":false},"enabled":{"type":"boolean","description":"An indicator of whether the API Client is enabled for use","example":true},"strongAuthSupported":{"type":"boolean","description":"An indicator of whether the API Client supports strong authentication","example":false},"claimsSupported":{"type":"boolean","description":"An indicator of whether the API Client supports the serialization of SAML claims when used with the authorization_code flow","example":false},"created":{"type":"string","format":"date-time","description":"The date and time, down to the millisecond, when the API Client was created","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","description":"The date and time, down to the millisecond, when the API Client was last updated","example":"2018-06-25T20:22:28.104Z"}},"required":["id","businessName","homepageUrl","name","description","accessTokenValiditySeconds","refreshTokenValiditySeconds","redirectUris","grantTypes","accessType","type","internal","enabled","strongAuthSupported","claimsSupported","created","modified"]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/oauth-clients","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List OAuth Clients","description":{"content":"This gets a list of OAuth clients.\nRequest will require the following security scope:\n- 'idn:oathkeeper-client-list:read'","type":"text/plain"},"url":{"path":["oauth-clients"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List OAuth Clients + + + +This gets a list of OAuth clients. +Request will require the following security scope: +- 'idn:oathkeeper-client-list:read' + +
    + +List of OAuth clients. + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-pending-approvals.api.mdx b/docs/sailpoint-api-beta/list-pending-approvals.api.mdx new file mode 100644 index 000000000..5f0612594 --- /dev/null +++ b/docs/sailpoint-api-beta/list-pending-approvals.api.mdx @@ -0,0 +1,119 @@ +--- +id: list-pending-approvals +sidebar_label: Pending Access Request Approvals List +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listPendingApprovals","tags":["Access Request Approvals"],"description":"This endpoint returns a list of pending approvals. See \"owner-id\" query parameter below for authorization info.","parameters":[{"in":"query","name":"owner-id","schema":{"type":"string"},"description":"If present, the value returns only pending approvals for the specified identity.\n * ORG_ADMIN users can call this with any identity ID value.\n * ORG_ADMIN users can also fetch all the approvals in the org, when owner-id is not used.\n * Non-ORG_ADMIN users can only specify *me* or pass their own identity ID value.","required":false},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**requestedFor.id**: *eq, in*\n\n**modified**: *gt, lt, ge, le*"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **created, modified**"}],"responses":{"200":{"description":"List of Pending Approvals.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c9180835d2e5168015d32f890ca1581","description":"The approval id."},"name":{"type":"string","example":"Pending approval name","description":"The name of the approval."},"created":{"type":"string","format":"date-time","description":"When the approval was created.","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","description":"When the approval was modified last time.","example":"2018-07-25T20:22:28.104Z"},"requestCreated":{"type":"string","format":"date-time","description":"When the access-request was created.","example":"2017-07-11T18:45:35.098Z"},"requestType":{"type":"string","enum":["GRANT_ACCESS","REVOKE_ACCESS"],"description":"Access request type. Defaults to GRANT_ACCESS. REVOKE_ACCESS type can only have a single Identity ID in the requestedFor field. Currently REVOKE_ACCESS is not supported for entitlements.","example":"GRANT_ACCESS"},"requester":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The identity that requested the item."},"requestedFor":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The identity for whom the item is requested for."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The owner or approver of the approval."},"requestedObject":{"description":"The requested access item.","type":"object","properties":{"id":{"type":"string","example":"2c938083633d259901633d25c68c00fa","description":"Id of the object."},"name":{"type":"string","example":"Object Name","description":"Name of the object."},"description":{"type":"string","example":"Object Description","description":"Description of the object."},"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE","ENTITLEMENT"],"description":"Type of the object.","example":"ROLE"}}},"requesterComment":{"description":"The requester's comment.","type":"object","properties":{"comment":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat"},"author":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"ID of the author","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"}}},"created":{"type":"string","format":"date-time","description":"Date and time comment was created","example":"2017-07-11T18:45:37.098Z"}}},"previousReviewersComments":{"type":"array","items":{"type":"object","properties":{"comment":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat"},"author":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"ID of the author","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"}}},"created":{"type":"string","format":"date-time","description":"Date and time comment was created","example":"2017-07-11T18:45:37.098Z"}}},"description":"The history of the previous reviewers comments."},"forwardHistory":{"type":"array","items":{"type":"object","properties":{"oldApproverName":{"type":"string","description":"Display name of approver that forwarded the approval.","example":"frank.mir"},"newApproverName":{"type":"string","description":"Display name of approver to whom the approval was forwarded.","example":"al.volta"},"comment":{"type":"string","description":"Comment made by old approver when forwarding.","example":"Fusce id orci vel consectetur amet ipsum quam."},"modified":{"type":"string","format":"date-time","description":"Time at which approval was forwarded.","example":"2019-08-23T18:52:57.398Z"}}},"description":"The history of approval forward action."},"commentRequiredWhenRejected":{"type":"boolean","example":true,"description":"When true the rejector has to provide comments when rejecting"},"actionInProcess":{"description":"Action that is performed on this approval, and system has not finished performing that action yet.","type":"string","enum":["APPROVED","REJECTED","FORWARDED"],"example":"APPROVED"},"removeDate":{"type":"string","description":"The date the role or access profile is no longer assigned to the specified identity.","format":"date-time","example":"2020-07-11T00:00:00Z"},"removeDateUpdateRequested":{"type":"boolean","example":true,"description":"If true, then the request is to change the remove date or sunset date."},"currentRemoveDate":{"type":"string","description":"The remove date or sunset date that was assigned at the time of the request.","format":"date-time","example":"2020-07-11T00:00:00Z"},"sodViolationContext":{"description":"The details of the SOD violations for the associated approval.","type":"object","properties":{"state":{"type":"string","enum":["SUCCESS","ERROR"],"description":"The status of SOD violation check","example":"SUCCESS"},"uuid":{"description":"The id of the Violation check event","type":"string","example":"f73d16e9-a038-46c5-b217-1246e15fdbdd"},"violationCheckResult":{"description":"The inner object representing the completed SOD Violation check","type":"object","properties":{"message":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}},"description":"If the request failed, includes any error message that was generated.","example":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An error has occurred during the SOD violation check"}]},"clientMetadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on completion of the violation check.","example":{"requestedAppName":"test-app","requestedAppId":"2c91808f7892918f0178b78da4a305a1"}},"violationContexts":{"type":"array","items":{"description":"The contextual information of the violated criteria","type":"object","properties":{"policy":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the Policy that is being violated."},"conflictingAccessCriteria":{"type":"object","description":"The object which contains the left and right hand side of the entitlements that got violated according to the policy.","properties":{"leftCriteria":{"type":"object","properties":{"criteriaList":{"type":"array","items":{"description":"Details of the Entitlement criteria","type":"object","properties":{"existing":{"type":"boolean","example":true,"description":"If the entitlement already belonged to the user or not."},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Entitlement ID","example":"2c918085771e9d3301773b3cb66f6398"},"name":{"type":"string","description":"Entitlement name","example":"My HR Entitlement"}}}}}},"rightCriteria":{"type":"object","properties":{"criteriaList":{"type":"array","items":{"description":"Details of the Entitlement criteria","type":"object","properties":{"existing":{"type":"boolean","example":true,"description":"If the entitlement already belonged to the user or not."},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Entitlement ID","example":"2c918085771e9d3301773b3cb66f6398"},"name":{"type":"string","description":"Entitlement name","example":"My HR Entitlement"}}}}}}}}}}},"violatedPolicies":{"type":"array","description":"A list of the Policies that were violated","items":{"description":"Reference to the policy that was violated","example":[{"type":"SOD_POLICY","id":"69129440-422d-4a23-aadd-35c828d5bfda","name":"HR Policy"}],"type":"object","properties":{"id":{"type":"string","description":"the application ID","example":"ff8081814d977c21014da056804a0af3"},"name":{"type":"string","description":"the application name","example":"Github"}}}}}}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/access-request-approvals/pending","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Pending Access Request Approvals List","description":{"content":"This endpoint returns a list of pending approvals. See \"owner-id\" query parameter below for authorization info.","type":"text/plain"},"url":{"path":["access-request-approvals","pending"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"If present, the value returns only pending approvals for the specified identity.\n * ORG_ADMIN users can call this with any identity ID value.\n * ORG_ADMIN users can also fetch all the approvals in the org, when owner-id is not used.\n * Non-ORG_ADMIN users can only specify *me* or pass their own identity ID value.","type":"text/plain"},"key":"owner-id","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**requestedFor.id**: *eq, in*\n\n**modified**: *gt, lt, ge, le*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **created, modified**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Pending Access Request Approvals List + + + +This endpoint returns a list of pending approvals. See "owner-id" query parameter below for authorization info. + +
    Query Parameters
    + +List of Pending Approvals. + +
    Schema array
      requester object
      + +The identity that requested the item. + +
      requestedFor object
      + +The identity for whom the item is requested for. + +
      owner object
      + +The owner or approver of the approval. + +
      requestedObject object
      + +The requested access item. + +
      requesterComment object
      + +The requester's comment. + +
      author object
      previousReviewersComments object[]
      + +The history of the previous reviewers comments. + +
      author object
      forwardHistory object[]
      + +The history of approval forward action. + +
      sodViolationContext object
      + +The details of the SOD violations for the associated approval. + +
      violationCheckResult object
      + +The inner object representing the completed SOD Violation check + +
      message object
      + +If the request failed, includes any error message that was generated. + +
      clientMetadata object
      + +Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on completion of the violation check. + +
    • property name* string
    • violationContexts object[]
      policy object
      + +Reference to the Policy that is being violated. + +
      conflictingAccessCriteria object
      + +The object which contains the left and right hand side of the entitlements that got violated according to the policy. + +
      leftCriteria object
      criteriaList object[]
      rightCriteria object
      criteriaList object[]
      violatedPolicies object[]
      + +A list of the Policies that were violated + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-personal-access-tokens.api.mdx b/docs/sailpoint-api-beta/list-personal-access-tokens.api.mdx new file mode 100644 index 000000000..bcd52529d --- /dev/null +++ b/docs/sailpoint-api-beta/list-personal-access-tokens.api.mdx @@ -0,0 +1,83 @@ +--- +id: list-personal-access-tokens +sidebar_label: List Personal Access Tokens +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listPersonalAccessTokens","tags":["Personal Access Tokens"],"description":"This gets a collection of personal access tokens associated with the optional owner-id.
    query parameter. If the owner-id query parameter is omitted, all personal access tokens
    for a tenant will be retrieved, but the caller must have the 'idn:all-personal-access-tokens:read' right.

    Any of the following rights are required to access this resource:
      \n
    • idn:my-personal-access-tokens:read
    • \n
    • idn:all-personal-access-tokens:read
    • \n
    • idn:managed-personal-access-tokens:read
    • \n
    ","parameters":[{"in":"query","name":"owner-id","description":"The identity ID of the owner whose personal access tokens should be listed.
    If \"me\", the caller should have the following right: 'idn:my-personal-access-tokens:read'

    If an actual owner ID or if the owner-id parameter is omitted in the request,
    the caller should have the following right: 'idn:all-personal-access-tokens:read'.

    If the caller has the following right, then managed personal access tokens associated with owner-id
    will be retrieved: 'idn:managed-personal-access-tokens:read'","required":false,"schema":{"type":"string","default":null,"example":"2c9180867b50d088017b554662fb281e"}}],"responses":{"200":{"description":"List of personal access tokens.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the personal access token (to be used as the username for Basic Auth).","example":"86f1dc6fe8f54414950454cbb11278fa"},"name":{"type":"string","description":"The name of the personal access token. Cannot be the same as other personal access tokens owned by a user.","example":"NodeJS Integration"},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Details about the owner of the personal access token."},"created":{"type":"string","format":"date-time","description":"The date and time, down to the millisecond, when this personal access token was created.","example":"2017-07-11T18:45:37.098Z"}},"required":["id","name","owner","created"]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/personal-access-tokens","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Personal Access Tokens","description":{"content":"This gets a collection of personal access tokens associated with the optional owner-id.
    query parameter. If the owner-id query parameter is omitted, all personal access tokens
    for a tenant will be retrieved, but the caller must have the 'idn:all-personal-access-tokens:read' right.

    Any of the following rights are required to access this resource:
      \n
    • idn:my-personal-access-tokens:read
    • \n
    • idn:all-personal-access-tokens:read
    • \n
    • idn:managed-personal-access-tokens:read
    • \n
    ","type":"text/plain"},"url":{"path":["personal-access-tokens"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The identity ID of the owner whose personal access tokens should be listed.
    If \"me\", the caller should have the following right: 'idn:my-personal-access-tokens:read'

    If an actual owner ID or if the owner-id parameter is omitted in the request,
    the caller should have the following right: 'idn:all-personal-access-tokens:read'.

    If the caller has the following right, then managed personal access tokens associated with owner-id
    will be retrieved: 'idn:managed-personal-access-tokens:read'","type":"text/plain"},"key":"owner-id","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Personal Access Tokens + + + +This gets a collection of personal access tokens associated with the optional <code>owner-id</code>. </br> query parameter. If the <code>owner-id</code> query parameter is omitted, all personal access tokens </br> for a tenant will be retrieved, but the caller must have the 'idn:all-personal-access-tokens:read' right. </br> </br> Any of the following rights are required to access this resource: <ul> + <li>idn:my-personal-access-tokens:read</li> + <li>idn:all-personal-access-tokens:read</li> + <li>idn:managed-personal-access-tokens:read</li> +</ul> + +
    Query Parameters
      If \"me\", the caller should have the following right: 'idn:my-personal-access-tokens:read'

      If an actual owner ID or if the owner-id parameter is omitted in the request,
      the caller should have the following right: 'idn:all-personal-access-tokens:read'.

      If the caller has the following right, then managed personal access tokens associated with owner-id
      will be retrieved: 'idn:managed-personal-access-tokens:read'","required":false,"schema":{"type":"string","default":null,"example":"2c9180867b50d088017b554662fb281e"}}}>
    + +List of personal access tokens. + +
    Schema array
      owner object
      + +Details about the owner of the personal access token. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-provisioning-policies.api.mdx b/docs/sailpoint-api-beta/list-provisioning-policies.api.mdx new file mode 100644 index 000000000..d22f0361d --- /dev/null +++ b/docs/sailpoint-api-beta/list-provisioning-policies.api.mdx @@ -0,0 +1,88 @@ +--- +id: list-provisioning-policies +sidebar_label: Lists ProvisioningPolicies +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listProvisioningPolicies","tags":["Sources"],"description":"This end-point lists all the ProvisioningPolicies in IdentityNow.\nA token with API, or ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:provisioning-policy-list:read"]}],"parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source id","example":"2c9180835d191a86015d28455b4a2329"}],"responses":{"200":{"description":"List of ProvisioningPolicyDto objects","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"usageType":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"userName"},"transform":{"type":"object","description":"The transform to apply to the field","example":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"default":{}},"attributes":{"type":"object","description":"Attributes required for the transform","example":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"}},"isRequired":{"type":"boolean","readOnly":true,"description":"Flag indicating whether or not the attribute is required.","default":false,"example":false},"type":{"type":"string","description":"The type of the attribute.","example":"string"},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","default":false,"example":false}}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sources/{sourceId}/provisioning-policies","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Lists ProvisioningPolicies","description":{"content":"This end-point lists all the ProvisioningPolicies in IdentityNow.\nA token with API, or ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":sourceId","provisioning-policies"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Lists ProvisioningPolicies + + + +This end-point lists all the ProvisioningPolicies in IdentityNow. +A token with API, or ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    + +List of ProvisioningPolicyDto objects + +
    Schema array
      fields object[]
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-requestable-objects.api.mdx b/docs/sailpoint-api-beta/list-requestable-objects.api.mdx new file mode 100644 index 000000000..5010b5e9c --- /dev/null +++ b/docs/sailpoint-api-beta/list-requestable-objects.api.mdx @@ -0,0 +1,76 @@ +--- +id: list-requestable-objects +sidebar_label: Requestable Objects List +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listRequestableObjects","tags":["Requestable Objects"],"description":"This endpoint returns a list of acccess items that that can be requested through the Access Request endpoints. Access items are marked with AVAILABLE, PENDING or ASSIGNED with respect to the identity provided using *identity-id* query param.\nAny authenticated token can call this endpoint to see their requestable access items. A token with ORG_ADMIN authority is required to call this endpoint to return a list of all of the requestable access items for the org or for another identity.","parameters":[{"in":"query","name":"identity-id","required":false,"schema":{"type":"string"},"example":"e7eab60924f64aa284175b9fa3309599","description":"If present, the value returns only requestable objects for the specified identity.\n * Admin users can call this with any identity ID value.\n * Non-admin users can only specify *me* or pass their own identity ID value.\n * If absent, returns a list of all requestable objects for the tenant. Only admin users can make such a call. In this case, the available, pending, assigned accesses will not be annotated in the result."},{"in":"query","name":"types","description":"Filters the results to the specified type/types, where each type is one of ROLE or ACCESS_PROFILE. If absent, all types are returned. Support for additional types may be added in the future without notice.","required":false,"schema":{"type":"array","items":{"type":"string","enum":["ACCESS_PROFILE","ROLE"],"description":"Enum represented the currently supported requestable object types. Additional values may be added in the future without notice.","example":"ACCESS_PROFILE"}},"example":"ROLE,ACCESS_PROFILE","explode":false},{"in":"query","name":"term","required":false,"schema":{"type":"string"},"example":"Finance Role","description":"It allows searching requestable access items with a partial match on the name or description. If term is provided, then the *filter* query parameter will be ignored."},{"in":"query","name":"statuses","description":"Filters the result to the specified status/statuses, where each status is one of AVAILABLE, ASSIGNED, or PENDING. It is an error to specify this parameter without also specifying an *identity-id* parameter. Additional statuses may be added in the future without notice.","required":false,"schema":{"type":"array","items":{"type":"string","enum":["AVAILABLE","PENDING","ASSIGNED"],"description":"Status indicating the ability of an access request for the object to be made by or on behalf of the identity specified by *identity-id*. *AVAILABLE* indicates the object is available to request. *PENDING* indicates the object is unavailable because the identity has a pending request in flight. *ASSIGNED* indicates the object is unavailable because the identity already has the indicated role or access profile. If *identity-id* is not specified (allowed only for admin users), then status will be *AVAILABLE* for all results."}},"explode":false,"example":["ASSIGNED","PENDING"]},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"example":"name sw \"bob\"","description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**name**: *eq, in, sw*\n"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"example":"name","description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **name**\n"}],"responses":{"200":{"description":"List of requestable objects","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Id of the requestable object itself","example":"2c9180835d2e5168015d32f890ca1581"},"name":{"type":"string","description":"Human-readable display name of the requestable object","example":"Applied Research Access"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"nullable":true,"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"description":{"type":"string","description":"Description of the requestable object.","example":"Access to research information, lab results, and schematics."},"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE"],"description":"Enum represented the currently supported requestable object types. Additional values may be added in the future without notice.","example":"ACCESS_PROFILE"},"requestStatus":{"type":"string","enum":["AVAILABLE","PENDING","ASSIGNED"],"description":"Status indicating the ability of an access request for the object to be made by or on behalf of the identity specified by *identity-id*. *AVAILABLE* indicates the object is available to request. *PENDING* indicates the object is unavailable because the identity has a pending request in flight. *ASSIGNED* indicates the object is unavailable because the identity already has the indicated role or access profile. If *identity-id* is not specified (allowed only for admin users), then status will be *AVAILABLE* for all results."},"identityRequestId":{"type":"string","description":"If *requestStatus* is *PENDING*, indicates the id of the associated account activity.","nullable":true,"example":null},"ownerRef":{"type":"object","nullable":true,"properties":{"type":{"type":"string","description":"The type can only be IDENTITY. This is read-only","example":"IDENTITY"},"id":{"type":"string","description":"Identity id.","example":"5168015d32f890ca15812c9180835d2e"},"name":{"type":"string","description":"Human-readable display name of identity. This is read-only","example":"Alison Ferguso"},"email":{"type":"string","description":"Email address of identity. This is read-only","example":"alison.ferguso@identitysoon.com"}}},"requestCommentsRequired":{"type":"boolean","description":"Whether the requester must provide comments when requesting the object."}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/requestable-objects","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Requestable Objects List","description":{"content":"This endpoint returns a list of acccess items that that can be requested through the Access Request endpoints. Access items are marked with AVAILABLE, PENDING or ASSIGNED with respect to the identity provided using *identity-id* query param.\nAny authenticated token can call this endpoint to see their requestable access items. A token with ORG_ADMIN authority is required to call this endpoint to return a list of all of the requestable access items for the org or for another identity.","type":"text/plain"},"url":{"path":["requestable-objects"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"If present, the value returns only requestable objects for the specified identity.\n * Admin users can call this with any identity ID value.\n * Non-admin users can only specify *me* or pass their own identity ID value.\n * If absent, returns a list of all requestable objects for the tenant. Only admin users can make such a call. In this case, the available, pending, assigned accesses will not be annotated in the result.","type":"text/plain"},"key":"identity-id","value":""},{"disabled":false,"description":{"content":"Filters the results to the specified type/types, where each type is one of ROLE or ACCESS_PROFILE. If absent, all types are returned. Support for additional types may be added in the future without notice.","type":"text/plain"},"key":"types","value":""},{"disabled":false,"description":{"content":"It allows searching requestable access items with a partial match on the name or description. If term is provided, then the *filter* query parameter will be ignored.","type":"text/plain"},"key":"term","value":""},{"disabled":false,"description":{"content":"Filters the result to the specified status/statuses, where each status is one of AVAILABLE, ASSIGNED, or PENDING. It is an error to specify this parameter without also specifying an *identity-id* parameter. Additional statuses may be added in the future without notice.","type":"text/plain"},"key":"statuses","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**name**: *eq, in, sw*\n","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **name**\n","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Requestable Objects List + + + +This endpoint returns a list of acccess items that that can be requested through the Access Request endpoints. Access items are marked with AVAILABLE, PENDING or ASSIGNED with respect to the identity provided using *identity-id* query param. +Any authenticated token can call this endpoint to see their requestable access items. A token with ORG_ADMIN authority is required to call this endpoint to return a list of all of the requestable access items for the org or for another identity. + +
    Query Parameters
    + +List of requestable objects + +
    Schema array
      ownerRef object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-reviewers.api.mdx b/docs/sailpoint-api-beta/list-reviewers.api.mdx new file mode 100644 index 000000000..c57b12f61 --- /dev/null +++ b/docs/sailpoint-api-beta/list-reviewers.api.mdx @@ -0,0 +1,87 @@ +--- +id: list-reviewers +sidebar_label: List of Reviewers for the certification +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listReviewers","tags":["Certifications"],"description":"This API returns a list of reviewers for the certification. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The certification ID","example":"ef38f94347e94562b5bb8424a56397d8"},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators (Filtering is done by reviewer's fields):\n\n**id**: *eq, in*\n\n**name**: *eq, sw*\n\n**email**: *eq, sw*"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **name, email**"}],"responses":{"200":{"description":"A list of reviewers","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","nullable":true,"properties":{"type":{"type":"string","description":"The type can only be IDENTITY. This is read-only","example":"IDENTITY"},"id":{"type":"string","description":"Identity id.","example":"5168015d32f890ca15812c9180835d2e"},"name":{"type":"string","description":"Human-readable display name of identity. This is read-only","example":"Alison Ferguso"},"email":{"type":"string","description":"Email address of identity. This is read-only","example":"alison.ferguso@identitysoon.com"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/certifications/{id}/reviewers","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List of Reviewers for the certification","description":{"content":"This API returns a list of reviewers for the certification. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API.","type":"text/plain"},"url":{"path":["certifications",":id","reviewers"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators (Filtering is done by reviewer's fields):\n\n**id**: *eq, in*\n\n**name**: *eq, sw*\n\n**email**: *eq, sw*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **name, email**","type":"text/plain"},"key":"sorters","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The certification ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List of Reviewers for the certification + + + +This API returns a list of reviewers for the certification. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. + +
    Path Parameters
    Query Parameters
    + +A list of reviewers + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-roles.api.mdx b/docs/sailpoint-api-beta/list-roles.api.mdx new file mode 100644 index 000000000..5706001a3 --- /dev/null +++ b/docs/sailpoint-api-beta/list-roles.api.mdx @@ -0,0 +1,133 @@ +--- +id: list-roles +sidebar_label: List Roles +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listRoles","tags":["Roles"],"description":"This API returns a list of Roles.\n\nA token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to call this API.","parameters":[{"in":"query","name":"for-subadmin","schema":{"type":"string"},"description":"If provided, filters the returned list according to what is visible to the indicated ROLE_SUBADMIN Identity. The value of the parameter is either an Identity ID, or the special value **me**, which is shorthand for the calling Identity's ID. A 400 Bad Request error is returned if the **for-subadmin** parameter is specified for an Identity that is not a subadmin.","example":"5168015d32f890ca15812c9180835d2e","required":false},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":50,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":50,"default":50}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#filtering-results) Filtering is supported for the following fields and operators:\n**id**: *eq, in* **name**: *eq, sw* **created, modified**: *gt, lt, ge, le* **owner.id**: *eq, in* **requestable**: *eq*","example":"requestable eq false","required":false},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#sorting-results) Sorting is supported for the following fields: **name, created, modified**","example":"name,-modified","required":false},{"in":"query","name":"for-segment-ids","schema":{"type":"string","format":"comma-separated"},"description":"If present and not empty, additionally filters Roles to those which are assigned to the Segment(s) with the specified IDs.\n\nIf segmentation is currently unavailable, specifying this parameter results in an error.","example":"0b5c9f25-83c6-4762-9073-e38f7bb2ae26,2e8d8180-24bc-4d21-91c6-7affdb473b0d","required":false},{"in":"query","name":"include-unsegmented","schema":{"type":"boolean","default":true},"description":"Whether or not the response list should contain unsegmented Roles. If *for-segment-ids* is absent or empty, specifying *include-unsegmented* as false results in an error.","example":false,"required":false}],"responses":{"200":{"description":"List of Roles","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","description":"A Role","properties":{"id":{"type":"string","description":"The id of the Role. This field must be left null when creating an Role, otherwise a 400 Bad Request error will result.","example":"2c918086749d78830174a1a40e121518"},"name":{"type":"string","description":"The human-readable display name of the Role","maxLength":128,"example":"Role 2567"},"created":{"type":"string","description":"Date the Role was created","format":"date-time","example":"2021-03-01T22:32:58.104Z","readOnly":true},"modified":{"type":"string","description":"Date the Role was last modified.","format":"date-time","example":"2021-03-02T20:22:28.104Z","readOnly":true},"description":{"type":"string","nullable":true,"description":"A human-readable description of the Role","example":"Urna amet cursus pellentesque nisl orci maximus lorem nisl euismod fusce morbi placerat adipiscing maecenas nisi tristique et metus et lacus sed morbi nunc nisl maximus magna arcu varius sollicitudin elementum enim maecenas nisi id ipsum tempus fusce diam ipsum tortor."},"owner":{"type":"object","description":"The owner of this object.","properties":{"type":{"description":"Owner type. This field must be either left null or set to 'IDENTITY' on input, otherwise a 400 Bad Request error will result.","example":"IDENTITY","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"]},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of the owner. It may be left null or omitted in a POST or PATCH. If set, it must match the current value of the owner's display name, otherwise a 400 Bad Request error will result.","example":"support"}}},"accessProfiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the Access Profile","example":"ff808081751e6e129f1518161919ecca"},"type":{"type":"string","description":"Type of requested object. This field must be either left null or set to 'ACCESS_PROFILE' when creating an Access Profile, otherwise a 400 Bad Request error will result.","enum":["ACCESS_PROFILE"],"example":"ACCESS_PROFILE"},"name":{"type":"string","description":"Human-readable display name of the Access Profile. This field is ignored on input.","example":"Access Profile 2567"}}},"nullable":true},"membership":{"nullable":true,"type":"object","description":"When present, specifies that the Role is to be granted to Identities which either satisfy specific criteria or which are members of a given list of Identities.","properties":{"type":{"type":"string","enum":["STANDARD","IDENTITY_LIST"],"description":"This enum characterizes the type of a Role's membership selector. Only the following two are fully supported:\n\nSTANDARD: Indicates that Role membership is defined in terms of a criteria expression\n\nIDENTITY_LIST: Indicates that Role membership is conferred on the specific identities listed","example":"IDENTITY_LIST"},"criteria":{"nullable":true,"type":"object","description":"Defines STANDARD type Role membership","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","STARTS_WITH","ENDS_WITH","AND","OR"],"description":"An operation","example":"EQUALS"},"key":{"type":"object","description":"Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria","properties":{"type":{"type":"string","enum":["IDENTITY","ACCOUNT","ENTITLEMENT"],"description":"Indicates whether the associated criteria represents an expression on identity attributes, account attributes, or entitlements, respectively.","example":"ACCOUNT"},"property":{"type":"string","description":"The name of the attribute or entitlement to which the associated criteria applies.","example":"attribute.email"},"sourceId":{"type":"string","nullable":true,"description":"ID of the Source from which an account attribute or entitlement is drawn. Required if type is ACCOUNT or ENTITLEMENT","example":"2c9180867427f3a301745aec18211519"}},"required":["type","property"]},"stringValue":{"type":"string","description":"String value to test the Identity attribute, Account attribute, or Entitlement specified in the key w/r/t the specified operation. If this criteria is a leaf node, that is, if the operation is one of EQUALS, NOT_EQUALS, CONTAINS, STARTS_WITH, or ENDS_WITH, this field is required. Otherwise, specifying it is an error.","example":"carlee.cert1c9f9b6fd@mailinator.com"},"children":{"type":"array","items":{"type":"object","description":"Defines STANDARD type Role membership","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","STARTS_WITH","ENDS_WITH","AND","OR"],"description":"An operation","example":"EQUALS"},"key":{"type":"object","description":"Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria","properties":{"type":{"type":"string","enum":["IDENTITY","ACCOUNT","ENTITLEMENT"],"description":"Indicates whether the associated criteria represents an expression on identity attributes, account attributes, or entitlements, respectively.","example":"ACCOUNT"},"property":{"type":"string","description":"The name of the attribute or entitlement to which the associated criteria applies.","example":"attribute.email"},"sourceId":{"type":"string","nullable":true,"description":"ID of the Source from which an account attribute or entitlement is drawn. Required if type is ACCOUNT or ENTITLEMENT","example":"2c9180867427f3a301745aec18211519"}},"required":["type","property"]},"stringValue":{"type":"string","description":"String value to test the Identity attribute, Account attribute, or Entitlement specified in the key w/r/t the specified operation. If this criteria is a leaf node, that is, if the operation is one of EQUALS, NOT_EQUALS, CONTAINS, STARTS_WITH, or ENDS_WITH, this field is required. Otherwise, specifying it is an error.","example":"carlee.cert1c9f9b6fd@mailinator.com"},"children":{"type":"array","items":{"type":"object","description":"Defines STANDARD type Role membership","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","STARTS_WITH","ENDS_WITH","AND","OR"],"description":"An operation","example":"EQUALS"},"key":{"type":"object","description":"Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria","properties":{"type":{"type":"string","enum":["IDENTITY","ACCOUNT","ENTITLEMENT"],"description":"Indicates whether the associated criteria represents an expression on identity attributes, account attributes, or entitlements, respectively.","example":"ACCOUNT"},"property":{"type":"string","description":"The name of the attribute or entitlement to which the associated criteria applies.","example":"attribute.email"},"sourceId":{"type":"string","nullable":true,"description":"ID of the Source from which an account attribute or entitlement is drawn. Required if type is ACCOUNT or ENTITLEMENT","example":"2c9180867427f3a301745aec18211519"}},"required":["type","property"]},"stringValue":{"type":"string","description":"String value to test the Identity attribute, Account attribute, or Entitlement specified in the key w/r/t the specified operation. If this criteria is a leaf node, that is, if the operation is one of EQUALS, NOT_EQUALS, CONTAINS, STARTS_WITH, or ENDS_WITH, this field is required. Otherwise, specifying it is an error.","example":"carlee.cert1c9f9b6fd@mailinator.com"}}},"nullable":true,"description":"Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be children or OR nodes and vice-versa."}}},"nullable":true,"description":"Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be children or OR nodes and vice-versa."}}},"identities":{"type":"array","items":{"type":"object","description":"A reference to an Identity in an IDENTITY_LIST role membership criteria.","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY","nullable":true},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","nullable":true,"description":"Human-readable display name of the Identity.","example":"Thomas Edison"},"aliasName":{"type":"string","nullable":true,"description":"User name of the Identity","example":"t.edison"}}},"nullable":true,"description":"Defines role membership as being exclusive to the specified Identities, when type is IDENTITY_LIST."}}},"legacyMembershipInfo":{"type":"object","nullable":true,"description":"This field is not directly modifiable and is generally expected to be *null*. In very rare instances, some Roles may have been created using membership selection criteria that are no longer fully supported. While these Roles will still work, they should be migrated to STANDARD or IDENTITY_LIST selection criteria. This field exists for informational purposes as an aid to such migration.","example":{"type":"IDENTITY_LIST"},"additionalProperties":true},"enabled":{"type":"boolean","description":"Whether the Role is enabled or not. This field is false by default.","example":true},"requestable":{"type":"boolean","description":"Whether the Role can be the target of Access Requests. This field is false by default.","example":true},"accessRequestConfig":{"nullable":true,"description":"Access request configuration for this object","type":"object","properties":{"commentsRequired":{"type":"boolean","description":"Whether the requester of the containing object must provide comments justifying the request","example":true},"denialCommentsRequired":{"type":"boolean","description":"Whether an approver must provide comments when denying the request","example":true},"approvalSchemes":{"type":"array","description":"List describing the steps in approving the request","items":{"type":"object","properties":{"approverType":{"type":"string","enum":["OWNER","MANAGER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step. Values are as follows.\n\n**OWNER**: Owner of the associated Role\n\n**MANAGER**: Manager of the Identity making the request\n\n**GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field","example":"GOVERNANCE_GROUP"},"approverId":{"type":"string","description":"Id of the specific approver, used only when approverType is GOVERNANCE_GROUP","example":"46c79819-a69f-49a2-becb-12c971ae66c6"}}}}}},"revocationRequestConfig":{"nullable":true,"description":"Revocation request configuration for this object.","type":"object","properties":{"approvalSchemes":{"type":"array","description":"List describing the steps in approving the revocation request","items":{"type":"object","properties":{"approverType":{"type":"string","enum":["OWNER","SOURCE_OWNER","MANAGER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step. Values are as follows.\n\n**OWNER**: Owner of the associated Access Profile or Role\n\n**SOURCE_OWNER**: Owner of the Source associated with an Access Profile\n\n**MANAGER**: Manager of the Identity making the request\n\n**GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field","example":"GOVERNANCE_GROUP"},"approverId":{"type":"string","description":"Id of the specific approver, used only when approverType is GOVERNANCE_GROUP","example":"46c79819-a69f-49a2-becb-12c971ae66c6"}}}}}},"segments":{"type":"array","items":{"type":"string"},"nullable":true,"description":"List of IDs of segments, if any, to which this Role is assigned.","example":["f7b1b8a3-5fed-4fd4-ad29-82014e137e19","29cb6c06-1da8-43ea-8be4-b3125f248f2a"]}},"required":["name"]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:role:read","idn:role-checked:read"]}],"method":"get","path":"/roles","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Roles","description":{"content":"This API returns a list of Roles.\n\nA token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["roles"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"If provided, filters the returned list according to what is visible to the indicated ROLE_SUBADMIN Identity. The value of the parameter is either an Identity ID, or the special value **me**, which is shorthand for the calling Identity's ID. A 400 Bad Request error is returned if the **for-subadmin** parameter is specified for an Identity that is not a subadmin.","type":"text/plain"},"key":"for-subadmin","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#filtering-results) Filtering is supported for the following fields and operators:\n**id**: *eq, in* **name**: *eq, sw* **created, modified**: *gt, lt, ge, le* **owner.id**: *eq, in* **requestable**: *eq*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#sorting-results) Sorting is supported for the following fields: **name, created, modified**","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"If present and not empty, additionally filters Roles to those which are assigned to the Segment(s) with the specified IDs.\n\nIf segmentation is currently unavailable, specifying this parameter results in an error.","type":"text/plain"},"key":"for-segment-ids","value":""},{"disabled":false,"description":{"content":"Whether or not the response list should contain unsegmented Roles. If *for-segment-ids* is absent or empty, specifying *include-unsegmented* as false results in an error.","type":"text/plain"},"key":"include-unsegmented","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Roles + + + +This API returns a list of Roles. + +A token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to call this API. + +
    Query Parameters
    + +List of Roles + +
    Schema array
      owner object
      + +The owner of this object. + +
      accessProfiles object[]
      membership object
      + +When present, specifies that the Role is to be granted to Identities which either satisfy specific criteria or which are members of a given list of Identities. + +
      criteria object
      + +Defines STANDARD type Role membership + +
      key object
      + +Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria + +
      children object[]
      + +Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be children or OR nodes and vice-versa. + +
      key object
      + +Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria + +
      children object[]
      + +Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be children or OR nodes and vice-versa. + +
      key object
      + +Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria + +
      identities object[]
      + +Defines role membership as being exclusive to the specified Identities, when type is IDENTITY_LIST. + +
      legacyMembershipInfo object
      + +This field is not directly modifiable and is generally expected to be *null*. In very rare instances, some Roles may have been created using membership selection criteria that are no longer fully supported. While these Roles will still work, they should be migrated to STANDARD or IDENTITY_LIST selection criteria. This field exists for informational purposes as an aid to such migration. + +
      accessRequestConfig object
      + +Access request configuration for this object + +
      approvalSchemes object[]
      + +List describing the steps in approving the request + +
      revocationRequestConfig object
      + +Revocation request configuration for this object. + +
      approvalSchemes object[]
      + +List describing the steps in approving the revocation request + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-schemas.api.mdx b/docs/sailpoint-api-beta/list-schemas.api.mdx new file mode 100644 index 000000000..c41ab3344 --- /dev/null +++ b/docs/sailpoint-api-beta/list-schemas.api.mdx @@ -0,0 +1,83 @@ +--- +id: list-schemas +sidebar_label: Lists the Schemas that exist on the specified Source in IdentityNow. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listSchemas","tags":["Sources"],"parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source id.","example":"2c9180835d191a86015d28455b4a2329"},{"in":"query","name":"include-types","required":false,"schema":{"type":"string"},"description":"If set to 'group', then the account schema is filtered and only group schemas are returned. Only a value of 'group' is recognized.","example":"group"}],"responses":{"200":{"description":"The Schemas were successfully retrieved.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Schema.","example":"2c9180835d191a86015d28455b4a2329"},"name":{"type":"string","description":"The name of the Schema.","example":"account"},"nativeObjectType":{"type":"string","description":"The name of the object type on the native system that the schema represents.","example":"User"},"identityAttribute":{"type":"string","description":"The name of the attribute used to calculate the unique identifier for an object in the schema.","example":"sAMAccountName"},"displayAttribute":{"type":"string","description":"The name of the attribute used to calculate the display value for an object in the schema.","example":"distinguishedName"},"hierarchyAttribute":{"type":"string","description":"The name of the attribute whose values represent other objects in a hierarchy. Only relevant to group schemas.","example":"memberOf"},"includePermissions":{"type":"boolean","description":"Flag indicating whether or not the include permissions with the object data when aggregating the schema.","example":false},"features":{"type":"array","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"description":"The features that the schema supports.","example":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"]},"configuration":{"type":"object","description":"Holds any extra configuration data that the schema may require.","example":{"groupMemberAttribute":"member"}},"attributes":{"type":"array","description":"The attribute definitions which form the schema.","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"sAMAccountName"},"type":{"description":"The type of the attribute.","example":"string","type":"string","enum":["STRING","LONG","INT","BOOLEAN"]},"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"A reference to the schema on the source to which the values of the attribute map.","example":{"type":"CONNECTOR_SCHEMA","id":"2c9180866166b5b0016167c32ef31a66","name":"group"}},"description":{"type":"string","description":"A human-readable description of the attribute."},"isMulti":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","example":false},"isEntitlement":{"type":"boolean","description":"Flag indicating whether or not the attribute is an entitlement.","example":false},"isGroup":{"type":"boolean","description":"Unmodifiable flag indicating whether or not the attribute represents a group.","example":false,"readOnly":true}}},"example":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}]},"created":{"type":"string","description":"The date the Schema was created.","format":"date-time","example":"2019-12-24T22:32:58.104Z"},"modified":{"type":"string","description":"The date the Schema was last modified.","format":"date-time","example":"2019-12-31T20:22:28.104Z"}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"description":"Lists the Schemas that exist on the specified Source in IdentityNow.","method":"get","path":"/sources/{sourceId}/schemas","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Lists the Schemas that exist on the specified Source in IdentityNow.","description":{"type":"text/plain"},"url":{"path":["sources",":sourceId","schemas"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"If set to 'group', then the account schema is filtered and only group schemas are returned. Only a value of 'group' is recognized.","type":"text/plain"},"key":"include-types","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id.","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Lists the Schemas that exist on the specified Source in IdentityNow. + + + +Lists the Schemas that exist on the specified Source in IdentityNow. + +
    Path Parameters
    Query Parameters
    + +The Schemas were successfully retrieved. + +
    Schema array
      attributes object[]
      + +The attribute definitions which form the schema. + +
      schema object
      + +A reference to the schema on the source to which the values of the attribute map. + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-segments.api.mdx b/docs/sailpoint-api-beta/list-segments.api.mdx new file mode 100644 index 000000000..77631734d --- /dev/null +++ b/docs/sailpoint-api-beta/list-segments.api.mdx @@ -0,0 +1,84 @@ +--- +id: list-segments +sidebar_label: List Segments +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listSegments","tags":["Segments"],"description":"This API returns a list of all segments.\nA token with ORG_ADMIN or API authority is required to call this API.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"List of all Segments","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"name":{"type":"string","description":"Segment Business Name","example":"segment-xyz"},"created":{"type":"string","format":"date-time","description":"The time when this Segment is created","example":"2020-01-01T00:00:00.000000Z"},"modified":{"type":"string","format":"date-time","description":"The time when this Segment is modified","example":"2020-01-01T00:00:00.000000Z"},"description":{"type":"string","description":"Optional description of the Segment","example":"This segment represents xyz"},"owner":{"type":"object","description":"The owner of this object.","properties":{"type":{"description":"Owner type. This field must be either left null or set to 'IDENTITY' on input, otherwise a 400 Bad Request error will result.","example":"IDENTITY","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"]},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of the owner. It may be left null or omitted in a POST or PATCH. If set, it must match the current value of the owner's display name, otherwise a 400 Bad Request error will result.","example":"support"}}},"visibilityCriteria":{"type":"object","properties":{"expression":{"type":"object","properties":{"operator":{"type":"string","description":"Operator for the expression","enum":["AND","EQUALS"],"example":"EQUALS"},"attribute":{"type":"string","description":"Name for the attribute","example":"location"},"value":{"type":"object","properties":{"type":{"type":"string","description":"The type of attribute value","example":"STRING"},"value":{"type":"string","description":"The attribute value","example":"Austin"}}},"children":{"type":"array","description":"List of expressions","items":{"type":"object","properties":{"type":{"type":"string","description":"The type of attribute value","example":"STRING"},"value":{"type":"string","description":"The attribute value","example":"Austin"}}},"example":[]}}}}},"active":{"type":"boolean","description":"Whether the Segment is currently active. Inactive segments have no effect."}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/segments","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Segments","description":{"content":"This API returns a list of all segments.\nA token with ORG_ADMIN or API authority is required to call this API.","type":"text/plain"},"url":{"path":["segments"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Segments + + + +This API returns a list of all segments. +A token with ORG_ADMIN or API authority is required to call this API. + +
    Query Parameters
    + +List of all Segments + +
    Schema array
      owner object
      + +The owner of this object. + +
      visibilityCriteria object
      expression object
      value object
      children object[]
      + +List of expressions + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-sod-policies.api.mdx b/docs/sailpoint-api-beta/list-sod-policies.api.mdx new file mode 100644 index 000000000..e60e32f90 --- /dev/null +++ b/docs/sailpoint-api-beta/list-sod-policies.api.mdx @@ -0,0 +1,84 @@ +--- +id: list-sod-policies +sidebar_label: List SOD Policies +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listSodPolicies","tags":["SOD Policy"],"description":"This gets list of all SOD Policies.\nRequires role of ORG_ADMIN","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq*
    **name**: *eq*
    **state**: *eq*","example":"id eq \"bc693f07e7b645539626c25954c58554\"","required":false}],"responses":{"200":{"description":"List of all SOD Policies.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Policy id","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"name":{"type":"string","description":"Policy Business Name","example":"policy-xyz"},"created":{"type":"string","format":"date-time","description":"The time when this SOD policy is created.","example":"2020-01-01T00:00:00.000000Z"},"modified":{"type":"string","format":"date-time","description":"The time when this SOD policy is modified.","example":"2020-01-01T00:00:00.000000Z"},"description":{"type":"string","description":"Optional description of the SOD policy","example":"This policy ensures compliance of xyz"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"externalPolicyReference":{"type":"string","description":"Optional External Policy Reference","example":"XYZ policy"},"policyQuery":{"type":"string","description":"Search query of the SOD policy","example":"@access(id:0f11f2a4-7c94-4bf3-a2bd-742580fe3bdg) AND @access(id:0f11f2a4-7c94-4bf3-a2bd-742580fe3bdf)"},"compensatingControls":{"type":"string","description":"Optional compensating controls(Mitigating Controls)","example":"Have a manager review the transaction decisions for their \"out of compliance\" employee"},"correctionAdvice":{"type":"string","description":"Optional correction advice","example":"Based on the role of the employee, managers should remove access that is not required for their job function."},"state":{"type":"string","description":"whether the policy is enforced or not","enum":["ENFORCED","NOT_ENFORCED"],"example":"ENFORCED"},"tags":{"type":"array","description":"tags for this policy object","example":["TAG1","TAG2"],"items":{"type":"string"}},"creatorId":{"type":"string","description":"Policy's creator ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"modifierId":{"type":"string","description":"Policy's modifier ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","nullable":true},"violationOwnerAssignmentConfig":{"nullable":true,"type":"object","properties":{"assignmentRule":{"type":"string","enum":["MANAGER","STATIC"],"description":"Details about the violations owner.\nMANAGER - identity's manager\nSTATIC - Governance Group or Identity","example":"MANAGER"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}}},"scheduled":{"type":"boolean","description":"defines whether a policy has been scheduled or not","example":true},"type":{"type":"string","description":"whether a policy is query based or conflicting access based","default":"GENERAL","enum":["GENERAL","CONFLICTING_ACCESS_BASED"],"example":"GENERAL"},"conflictingAccessCriteria":{"nullable":true,"type":"object","properties":{"leftCriteria":{"type":"object","properties":{"name":{"type":"string","description":"Business name for the access construct list","example":"money-in"},"criteriaList":{"type":"array","description":"List of criteria. There is a min of 1 and max of 50 items in the list.","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"example":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66","name":"Administrator"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67","name":"Administrator"}]}}},"rightCriteria":{"type":"object","properties":{"name":{"type":"string","description":"Business name for the access construct list","example":"money-in"},"criteriaList":{"type":"array","description":"List of criteria. There is a min of 1 and max of 50 items in the list.","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"example":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66","name":"Administrator"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67","name":"Administrator"}]}}}}}}}},"example":[{"id":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","name":"Conflicting-Policy-Name","created":"2020-01-01T00:00:00.000000Z","modified":"2020-01-01T00:00:00.000000Z","description":"This policy ensures compliance of xyz","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"Owner Name"},"externalPolicyReference":"XYZ policy","policyQuery":"@access(id:2c9180866166b5b0016167c32ef31a66 OR id:2c9180866166b5b0016167c32ef31a67) AND @access(id:2c9180866166b5b0016167c32ef31a68 OR id:2c9180866166b5b0016167c32ef31a69)","compensatingControls":"Have a manager review the transaction decisions for their \"out of compliance\" employee","correctionAdvice":"Based on the role of the employee, managers should remove access that is not required for their job function.","state":"ENFORCED","tags":["string"],"creatorId":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","modifierId":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","violationOwnerAssignmentConfig":{"assignmentRule":"MANAGER","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"Violation Owner Name"}},"scheduled":true,"type":"CONFLICTING_ACCESS_BASED","conflictingAccessCriteria":{"leftCriteria":{"name":"money-in","criteriaList":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67"}]},"rightCriteria":{"name":"money-out","criteriaList":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a68"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a69"}]}}},{"description":"Description","ownerRef":{"type":"IDENTITY","id":"2c918087682f9a86016839c05e8f1aff","name":"Owner Name"},"externalPolicyReference":"New policy","policyQuery":"policy query implementation","compensatingControls":"Compensating controls","correctionAdvice":"Correction advice","tags":[],"state":"ENFORCED","scheduled":false,"creatorId":"2c918087682f9a86016839c05e8f1aff","modifierId":null,"violationOwnerAssignmentConfig":null,"type":"GENERAL","conflictingAccessCriteria":null,"id":"52c11db4-733e-4c31-949a-766c95ec95f1","name":"General-Policy-Name","created":"2020-05-12T19:47:38Z","modified":"2020-05-12T19:47:38Z"}]}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sod-policies","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List SOD Policies","description":{"content":"This gets list of all SOD Policies.\nRequires role of ORG_ADMIN","type":"text/plain"},"url":{"path":["sod-policies"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq*
    **name**: *eq*
    **state**: *eq*","type":"text/plain"},"key":"filters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List SOD Policies + + + +This gets list of all SOD Policies. +Requires role of ORG_ADMIN + +
    Query Parameters
      **name**: *eq*
      **state**: *eq*","example":"id eq \"bc693f07e7b645539626c25954c58554\"","required":false}}>
    + +List of all SOD Policies. + +
    Schema array
      ownerRef object
      violationOwnerAssignmentConfig object
      ownerRef object
      conflictingAccessCriteria object
      leftCriteria object
      criteriaList object[]
      + +List of criteria. There is a min of 1 and max of 50 items in the list. + +
      rightCriteria object
      criteriaList object[]
      + +List of criteria. There is a min of 1 and max of 50 items in the list. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-sources.api.mdx b/docs/sailpoint-api-beta/list-sources.api.mdx new file mode 100644 index 000000000..84c70d8d3 --- /dev/null +++ b/docs/sailpoint-api-beta/list-sources.api.mdx @@ -0,0 +1,128 @@ +--- +id: list-sources +sidebar_label: Lists all sources in IdentityNow. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listSources","tags":["Sources"],"description":"This end-point lists all the sources in IdentityNow.\nA token with ORG_ADMIN, SOURCE_ADMIN, SOURCE_SUBADMIN, or ROLE_SUBADMIN authority is required to call this API.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":50,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":50,"default":50}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"example":"name eq \"#Employees\"","description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**name**: *co, eq, in, sw*\n\n**type**: *eq, in*\n\n**owner.id**: *eq, in*\n\n**features**: *ca, co*\n\n**created**: *eq*\n\n**modified**: *eq*\n\n**managementWorkgroup.id**: *eq*\n\n**description**: *eq*\n\n**authoritative**: *eq*\n\n**healthy**: *eq*\n\n**status**: *eq, in*\n\n**connectionType**: *eq*\n\n**connectorName**: *eq*"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"example":"name","description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **type, created, modified, name, owner.name, healthy, status**"},{"in":"query","name":"for-subadmin","schema":{"type":"string"},"example":"name","description":"Filter the returned list of sources for the identity specified by the parameter, which is the id of an identity with the role SOURCE_SUBADMIN. By convention, the value **me** indicates the identity id of the current user.\nSubadmins may only view Sources which they are able to administer; all other Sources will be filtered out when this parameter is set. If the current user is a SOURCE_SUBADMIN but fails to pass a valid value for this parameter, a 403 Forbidden is returned."}],"responses":{"200":{"description":"List of Source objects","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"the id of the Source","example":"2c91808568c529c60168cca6f90c1324"},"description":{"type":"string","description":"Human-readable description of the source","example":"This is the corporate directory."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to an owning Identity Object"},"cluster":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the associated Cluster","example":{"type":"CLUSTER","id":"2c9180866166b5b0016167c32ef31a66","name":"Corporate Cluster"}},"accountCorrelationConfig":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Correlation Config object","example":{"type":"ACCOUNT_CORRELATION_CONFIG","id":"2c9180855d191c59015d28583727245a","name":"Directory [source-62867] Account Correlation"}},"accountCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used."},"managerCorrelationMapping":{"description":"Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity","type":"object","properties":{"accountAttribute":{"type":"string","description":"Name of the attribute to use for manager correlation. The value found on the account attribute will be used to lookup the manager's identity.","example":"manager"},"identityAttribute":{"type":"string","description":"Name of the identity attribute to search when trying to find a manager using the value from the accountAttribute.","example":"manager"}}},"managerCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient."},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called."},"schemas":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to Schema objects","example":[{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232a","name":"account"},{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232b","name":"group"}]},"passwordPolicies":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to the associated PasswordPolicy objects.","example":[{"type":"PASSWORD_POLICY","id":"2c9180855d191c59015d291ceb053980","name":"Corporate Password Policy"}]},"features":{"type":"array","description":"Optional features that can be supported by a source.","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"example":["SYNC_PROVISIONING","MANAGER_LOOKUP","SEARCH","PROVISIONING","AUTHENTICATE","GROUP_PROVISIONING","PASSWORD"]},"type":{"type":"string","description":"Specifies the type of system being managed e.g. Active Directory, Workday, etc..","example":"OpenLDAP - Direct"},"connector":{"type":"string","description":"Connector script name.","example":"active-directory"},"connectorClass":{"type":"string","description":"The fully qualified name of the Java class that implements the connector interface.","example":"sailpoint.connector.LDAPConnector"},"connectorAttributes":{"type":"object","description":"Connector specific configuration; will differ from type to type.","example":{"healthCheckTimeout":30,"authSearchAttributes":["cn","uid","mail"]}},"deleteThreshold":{"type":"integer","format":"int32","description":"Number from 0 to 100 that specifies when to skip the delete phase.","example":10},"authoritative":{"type":"boolean","description":"When true indicates the source is referenced by an IdentityProfile.","example":false},"managementWorkgroup":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to Management Workgroup for this Source"},"healthy":{"type":"boolean","description":"When true indicates a healthy source","example":true},"status":{"type":"string","description":"A status identifier, giving specific information on why a source is healthy or not","example":"SOURCE_STATE_HEALTHY"},"since":{"type":"string","description":"Timestamp showing when a source health check was last performed","example":"2021-09-28T15:48:29.3801666300Z"},"connectorId":{"type":"string","description":"The id of connector","example":"active-directory"},"connectorName":{"type":"string","description":"The name of the connector that was chosen on source creation","example":"Active Directory"},"connectionType":{"type":"string","description":"The type of connection (direct or file)","example":"file"},"connectorImplementstionId":{"type":"string","description":"The connector implementstion id","example":"delimited-file"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sources","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Lists all sources in IdentityNow.","description":{"content":"This end-point lists all the sources in IdentityNow.\nA token with ORG_ADMIN, SOURCE_ADMIN, SOURCE_SUBADMIN, or ROLE_SUBADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**name**: *co, eq, in, sw*\n\n**type**: *eq, in*\n\n**owner.id**: *eq, in*\n\n**features**: *ca, co*\n\n**created**: *eq*\n\n**modified**: *eq*\n\n**managementWorkgroup.id**: *eq*\n\n**description**: *eq*\n\n**authoritative**: *eq*\n\n**healthy**: *eq*\n\n**status**: *eq, in*\n\n**connectionType**: *eq*\n\n**connectorName**: *eq*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **type, created, modified, name, owner.name, healthy, status**","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"Filter the returned list of sources for the identity specified by the parameter, which is the id of an identity with the role SOURCE_SUBADMIN. By convention, the value **me** indicates the identity id of the current user.\nSubadmins may only view Sources which they are able to administer; all other Sources will be filtered out when this parameter is set. If the current user is a SOURCE_SUBADMIN but fails to pass a valid value for this parameter, a 403 Forbidden is returned.","type":"text/plain"},"key":"for-subadmin","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Lists all sources in IdentityNow. + + + +This end-point lists all the sources in IdentityNow. +A token with ORG_ADMIN, SOURCE_ADMIN, SOURCE_SUBADMIN, or ROLE_SUBADMIN authority is required to call this API. + +
    Query Parameters
    + +List of Source objects + +
    Schema array
      owner object
      + +Reference to an owning Identity Object + +
      cluster object
      + +Reference to the associated Cluster + +
      accountCorrelationConfig object
      + +Reference to a Correlation Config object + +
      accountCorrelationRule object
      + +Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used. + +
      managerCorrelationMapping object
      + +Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity + +
      managerCorrelationRule object
      + +Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient. + +
      beforeProvisioningRule object
      + +Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called. + +
      schemas object[]
      + +List of references to Schema objects + +
      passwordPolicies object[]
      + +List of references to the associated PasswordPolicy objects. + +
      managementWorkgroup object
      + +Reference to Management Workgroup for this Source + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-subscriptions.api.mdx b/docs/sailpoint-api-beta/list-subscriptions.api.mdx new file mode 100644 index 000000000..87da183fb --- /dev/null +++ b/docs/sailpoint-api-beta/list-subscriptions.api.mdx @@ -0,0 +1,91 @@ +--- +id: list-subscriptions +sidebar_label: List Subscriptions +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listSubscriptions","tags":["Triggers"],"description":"Gets a list of all trigger subscriptions.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","required":false,"name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq*\n\n**triggerId**: *eq*\n\n**type**: *eq*","example":"id eq \"12cff757-c0c0-413b-8ad7-2a47956d1e89\""},{"in":"query","name":"sorters","required":false,"schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields:\n\n**triggerId** **triggerName**","example":"triggerName"}],"responses":{"200":{"description":"List of subscriptions.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["id","triggerId","type","name","triggerName","enabled","responseDeadline"],"properties":{"id":{"type":"string","description":"Subscription ID.","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"name":{"type":"string","description":"Subscription name.","example":"Access request subscription"},"description":{"type":"string","description":"Subscription description.","example":"Access requested to site xyz"},"triggerId":{"type":"string","description":"ID of trigger subscribed to.","example":"idn:access-requested"},"triggerName":{"type":"string","description":"Trigger name of trigger subscribed to.","example":"Access Requested"},"type":{"type":"string","description":"Subscription type. **NOTE** If type is EVENTBRIDGE, then eventBridgeConfig is required. If type is HTTP, then httpConfig is required.","enum":["HTTP","EVENTBRIDGE"],"example":"HTTP"},"responseDeadline":{"type":"string","description":"Deadline for completing REQUEST_RESPONSE trigger invocation, represented in ISO-8601 duration format.","example":"PT1H","default":"PT1H"},"httpConfig":{"description":"Config required if HTTP subscription type is used.","type":"object","properties":{"url":{"type":"string","description":"URL of the external/custom integration.","example":"https://www.example.com"},"httpDispatchMode":{"type":"string","description":"HTTP response modes, i.e. SYNC, ASYNC, or DYNAMIC.","enum":["SYNC","ASYNC","DYNAMIC"],"example":"SYNC"},"httpAuthenticationType":{"type":"string","description":"Defines the HTTP Authentication type. Additional values may be added in the future.\n\nIf *NO_AUTH* is selected, no extra information will be in HttpConfig.\n\nIf *BASIC_AUTH* is selected, HttpConfig will include BasicAuthConfig with Username and Password as strings.\n\nIf *BEARER_TOKEN* is selected, HttpConfig will include BearerTokenAuthConfig with Token as string.","enum":["NO_AUTH","BASIC_AUTH","BEARER_TOKEN"],"default":"NO_AUTH","example":"BASIC_AUTH"},"basicAuthConfig":{"type":"object","properties":{"userName":{"type":"string","description":"The username to authenticate.","example":"user@example.com"},"password":{"type":"string","nullable":true,"description":"The password to authenticate. On response, this field is set to null as to not return secrets.","example":null}},"description":"Config required if BASIC_AUTH is used."},"bearerTokenAuthConfig":{"type":"object","properties":{"bearerToken":{"type":"string","nullable":true,"description":"Bearer token","example":null}},"description":"Config required if BEARER_TOKEN authentication is used. On response, this field is set to null as to not return secrets."}},"required":["url","httpDispatchMode"]},"eventBridgeConfig":{"description":"Config required if EVENTBRIDGE subscription type is used.","type":"object","properties":{"awsAccount":{"type":"string","description":"AWS Account Number (12-digit number) that has the EventBridge Partner Event Source Resource.","example":"123456789012"},"awsRegion":{"type":"string","description":"AWS Region that has the EventBridge Partner Event Source Resource. See https://docs.aws.amazon.com/general/latest/gr/rande.html for a full list of available values.","example":"us-west-1"}},"required":["awsAccount","awsRegion"]},"enabled":{"type":"boolean","description":"Whether subscription should receive real-time trigger invocations or not.\nTest trigger invocations are always enabled regardless of this option.","default":true,"example":true},"filter":{"type":"string","description":"JSONPath filter to conditionally invoke trigger when expression evaluates to true.","example":"$[?($.identityId == \"201327fda1c44704ac01181e963d463c\")]","externalDocs":{"description":"JSONPath filter documentation","url":"https://developer.sailpoint.com/triggers/filtering_event_triggers.html#filtering-event-triggers"}}}}},"examples":{"HTTP Subscription":{"value":[{"id":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","name":"Access request subscription","description":"Access requested to site xyz","triggerId":"idn:access-requested","triggerName":"Access Requested","type":"HTTP","httpConfig":{"url":"https://www.example.com","httpDispatchMode":"SYNC","httpAuthenticationType":"BASIC_AUTH","basicAuthConfig":{"userName":"user@example.com","password":null}},"enabled":true,"filter":"$[?($.identityId == \"201327fda1c44704ac01181e963d463c\")]"}]},"HTTP Async Subscription":{"value":{"name":"Access request subscription","description":"Access requested to site xyz","triggerId":"idn:access-requested","triggerName":"Access Requested","type":"HTTP","responseDeadline":"PT1H","httpConfig":{"url":"https://www.example.com","httpDispatchMode":"ASYNC","httpAuthenticationType":"BASIC_AUTH","basicAuthConfig":{"userName":"user@example.com","password":null}},"enabled":true,"filter":"$[?($.identityId == \"201327fda1c44704ac01181e963d463c\")]"}},"EventBridge Subscription":{"value":[{"id":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","name":"Access request subscription","description":"Access requested to site xyz","triggerId":"idn:access-requested","triggerName":"Access Requested","type":"EVENTBRIDGE","eventBridgeConfig":{"awsAccount":"123456789012","awsRegion":"us-west-1"},"enabled":true,"filter":"$[?($.identityId == \"201327fda1c44704ac01181e963d463c\")]"}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"oauth2":["idn:trigger-service-subscriptions:read"]}],"method":"get","path":"/trigger-subscriptions","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Subscriptions","description":{"content":"Gets a list of all trigger subscriptions.","type":"text/plain"},"url":{"path":["trigger-subscriptions"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq*\n\n**triggerId**: *eq*\n\n**type**: *eq*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields:\n\n**triggerId** **triggerName**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET","auth":{"type":"oauth2","oauth2":[]}}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Subscriptions + + + +Gets a list of all trigger subscriptions. + +
    Query Parameters
    + +List of subscriptions. + +
    Schema array
      httpConfig object
      + +Config required if HTTP subscription type is used. + +
      basicAuthConfig object
      + +Config required if BASIC_AUTH is used. + +
      bearerTokenAuthConfig object
      + +Config required if BEARER_TOKEN authentication is used. On response, this field is set to null as to not return secrets. + +
      eventBridgeConfig object
      + +Config required if EVENTBRIDGE subscription type is used. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-tagged-objects-by-type.api.mdx b/docs/sailpoint-api-beta/list-tagged-objects-by-type.api.mdx new file mode 100644 index 000000000..9f96e9ff5 --- /dev/null +++ b/docs/sailpoint-api-beta/list-tagged-objects-by-type.api.mdx @@ -0,0 +1,77 @@ +--- +id: list-tagged-objects-by-type +sidebar_label: List Tagged Objects +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listTaggedObjectsByType","tags":["Tagged Objects"],"description":"This API returns a list of all tagged objects by type.\n\nAny authenticated token may be used to call this API.","parameters":[{"in":"path","name":"type","schema":{"type":"string","enum":["ROLE","IDENTITY","SOD_POLICY"]},"required":true,"description":"The type of tagged object to retrieve.","example":"ROLE"},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**objectRef.id**: *eq*\n\n**objectRef.type**: *eq*","example":"objectRef.id eq \"2c91808568c529c60168cca6f90c1313\"","required":false}],"responses":{"200":{"description":"List of all tagged objects for specified type.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"objectRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"tags":{"type":"array","items":{"type":"string"},"description":"Labels to be applied to an Object","example":["BU_FINANCE","PCI"]}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/tagged-objects/{type}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Tagged Objects","description":{"content":"This API returns a list of all tagged objects by type.\n\nAny authenticated token may be used to call this API.","type":"text/plain"},"url":{"path":["tagged-objects",":type"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**objectRef.id**: *eq*\n\n**objectRef.type**: *eq*","type":"text/plain"},"key":"filters","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The type of tagged object to retrieve.","type":"text/plain"},"type":"any","value":"","key":"type"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Tagged Objects + + + +This API returns a list of all tagged objects by type. + +Any authenticated token may be used to call this API. + +
    Path Parameters
    Query Parameters
    + +List of all tagged objects for specified type. + +
    Schema array
      objectRef object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-tagged-objects.api.mdx b/docs/sailpoint-api-beta/list-tagged-objects.api.mdx new file mode 100644 index 000000000..9afc1fe87 --- /dev/null +++ b/docs/sailpoint-api-beta/list-tagged-objects.api.mdx @@ -0,0 +1,77 @@ +--- +id: list-tagged-objects +sidebar_label: List Tagged Objects +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listTaggedObjects","tags":["Tagged Objects"],"description":"This API returns a list of all tagged objects.\n\nAny authenticated token may be used to call this API.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**objectRef.id**: *eq, in*\n\n**objectRef.type**: *eq, in*\n\n**tagName**: *eq, in*","example":"tagName eq \"BU_FINANCE\"","required":false}],"responses":{"200":{"description":"List of all tagged objects.","content":{"application/json":{"schema":{"type":"object","properties":{"objectRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"tags":{"type":"array","items":{"type":"string"},"description":"Labels to be applied to an Object","example":["BU_FINANCE","PCI"]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/tagged-objects","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Tagged Objects","description":{"content":"This API returns a list of all tagged objects.\n\nAny authenticated token may be used to call this API.","type":"text/plain"},"url":{"path":["tagged-objects"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**objectRef.id**: *eq, in*\n\n**objectRef.type**: *eq, in*\n\n**tagName**: *eq, in*","type":"text/plain"},"key":"filters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Tagged Objects + + + +This API returns a list of all tagged objects. + +Any authenticated token may be used to call this API. + +
    Query Parameters
    + +List of all tagged objects. + +
    Schema
      objectRef object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-triggers.api.mdx b/docs/sailpoint-api-beta/list-triggers.api.mdx new file mode 100644 index 000000000..7837bb874 --- /dev/null +++ b/docs/sailpoint-api-beta/list-triggers.api.mdx @@ -0,0 +1,259 @@ +--- +id: list-triggers +sidebar_label: List Triggers +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listTriggers","tags":["Triggers"],"description":"Gets a list of triggers that are available in the tenant.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","required":false,"schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq*","example":"id eq \"idn:access-request-post-approval\""},{"in":"query","name":"sorters","required":false,"schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields:\n\n**id** **name**","example":"name"}],"responses":{"200":{"description":"List of triggers.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["id","name","type","inputSchema","exampleInput"],"properties":{"id":{"type":"string","description":"Unique identifier of the trigger.","example":"idn:access-request-dynamic-approver"},"name":{"type":"string","description":"Trigger Name.","example":"Access Request Dynamic Approver"},"type":{"example":"REQUEST_RESPONSE","type":"string","description":"The type of trigger.","enum":["REQUEST_RESPONSE","FIRE_AND_FORGET"]},"description":{"type":"string","description":"Trigger Description.","example":"Trigger for getting a dynamic approver."},"inputSchema":{"type":"string","description":"The JSON schema of the payload that will be sent by the trigger to the subscribed service.","example":"{\"definitions\":{\"record:AccessRequestDynamicApproverInput\":{\"type\":\"object\",\"required\":[\"accessRequestId\",\"requestedFor\",\"requestedItems\",\"requestedBy\"],\"additionalProperties\":true,\"properties\":{\"accessRequestId\":{\"type\":\"string\"},\"requestedFor\":{\"$ref\":\"#/definitions/record:requestedForIdentityRef\"},\"requestedItems\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/record:requestedObjectRef\"}},\"requestedBy\":{\"$ref\":\"#/definitions/record:requestedByIdentityRef\"}}},\"record:requestedForIdentityRef\":{\"type\":\"object\",\"required\":[\"id\",\"name\",\"type\"],\"additionalProperties\":true,\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"type\":{\"type\":\"string\"}}},\"record:requestedObjectRef\":{\"type\":\"object\",\"optional\":[\"description\",\"comment\"],\"required\":[\"id\",\"name\",\"type\",\"operation\"],\"additionalProperties\":true,\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"description\":{\"oneOf\":[{\"type\":\"null\"},{\"type\":\"string\"}]},\"type\":{\"type\":\"string\"},\"operation\":{\"type\":\"string\"},\"comment\":{\"oneOf\":[{\"type\":\"null\"},{\"type\":\"string\"}]}}},\"record:requestedByIdentityRef\":{\"type\":\"object\",\"required\":[\"type\",\"id\",\"name\"],\"additionalProperties\":true,\"properties\":{\"type\":{\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}}}},\"$ref\":\"#/definitions/record:AccessRequestDynamicApproverInput\"}"},"exampleInput":{"description":"An example of the JSON payload that will be sent by the trigger to the subscribed service.","oneOf":[{"title":"Access Request Dynamic Approver","type":"object","required":["accessRequestId","requestedFor","requestedItems","requestedBy"],"properties":{"accessRequestId":{"type":"string","description":"The unique ID of the access request object. Can be used with the [access request status endpoint](https://developer.sailpoint.com/apis/beta/#operation/listAccessRequestStatus) to get the status of the request.\n","example":"4b4d982dddff4267ab12f0f1e72b5a6d"},"requestedFor":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity for whom the access is requested for.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}}},"requestedItems":{"description":"The access items that are being requested.","type":"array","items":{"type":"object","required":["id","name","type","operation"],"properties":{"id":{"type":"string","description":"The unique ID of the access item.","example":"2c91808b6ef1d43e016efba0ce470904"},"name":{"type":"string","description":"Human friendly name of the access item.","example":"Engineering Access"},"description":{"nullable":true,"type":"string","description":"Extended description of the access item.","example":"Engineering Access"},"type":{"enum":["ACCESS_PROFILE","ROLE","ENTITLEMENT"],"description":"The type of access item being requested.","example":"ACCESS_PROFILE"},"operation":{"enum":["Add","Remove"],"description":"Grant or revoke the access item","example":"Add"},"comment":{"nullable":true,"type":"string","description":"A comment from the requestor on why the access is needed.","example":"William needs this access for his day to day job activities."}}}},"requestedBy":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity that initiated the access request.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}}}}},{"title":"Access Request Post Approval","type":"object","required":["accessRequestId","requestedFor","requestedItemsStatus","requestedBy"],"properties":{"accessRequestId":{"type":"string","description":"The unique ID of the access request.","example":"2c91808b6ef1d43e016efba0ce470904"},"requestedFor":{"required":["id","type","name"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity who the access request is for.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}}},"requestedItemsStatus":{"description":"Details on the outcome of each access item.","type":"array","items":{"type":"object","required":["id","name","type","operation","approvalInfo"],"properties":{"id":{"type":"string","description":"The unique ID of the access item being requested.","example":"2c91808b6ef1d43e016efba0ce470904"},"name":{"type":"string","description":"The human friendly name of the access item.","example":"Engineering Access"},"description":{"nullable":true,"type":"string","description":"Detailed description of the access item.","example":"Access to engineering database"},"type":{"enum":["ACCESS_PROFILE","ROLE","ENTITLEMENT"],"description":"The type of access item.","example":"ACCESS_PROFILE"},"operation":{"enum":["Add","Remove"],"description":"The action to perform on the access item.","example":"Add"},"comment":{"nullable":true,"type":"string","description":"A comment from the identity requesting the access.","example":"William needs this access to do his job."},"clientMetadata":{"description":"Additional customer defined metadata about the access item.","nullable":true,"type":"object","additionalProperties":true,"example":{"applicationName":"My application"}},"approvalInfo":{"description":"A list of one or more approvers for the access request.","type":"array","items":{"type":"object","required":["approvalDecision","approverName","approver"],"properties":{"approvalComment":{"nullable":true,"type":"string","description":"A comment left by the approver.","example":"This access looks good. Approved."},"approvalDecision":{"enum":["APPROVED","DENIED"],"description":"The final decision of the approver.","example":"APPROVED"},"approverName":{"type":"string","description":"The name of the approver","example":"Stephen.Austin"},"approver":{"required":["id","type","name"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity of the approver.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}}}}}}}}},"requestedBy":{"required":["id","type","name"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity that initiated the access request.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}}}}},{"title":"Access Request Pre Approval","type":"object","required":["accessRequestId","requestedFor","requestedItems","requestedBy"],"properties":{"accessRequestId":{"type":"string","description":"The unique ID of the access request.","example":"2c91808b6ef1d43e016efba0ce470904"},"requestedFor":{"required":["id","type","name"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity who the access request is for.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}}},"requestedItems":{"description":"Details of the access items being requested.","type":"array","items":{"type":"object","required":["id","name","type","operation"],"properties":{"id":{"type":"string","description":"The unique ID of the access item being requested.","example":"2c91808b6ef1d43e016efba0ce470904"},"name":{"type":"string","description":"The human friendly name of the access item.","example":"Engineering Access"},"description":{"nullable":true,"type":"string","description":"Detailed description of the access item.","example":"Access to engineering database"},"type":{"enum":["ACCESS_PROFILE","ROLE","ENTITLEMENT"],"description":"The type of access item.","example":"ACCESS_PROFILE"},"operation":{"enum":["Add","Remove"],"description":"The action to perform on the access item.","example":"Add"},"comment":{"nullable":true,"type":"string","description":"A comment from the identity requesting the access.","example":"William needs this access to do his job."}}}},"requestedBy":{"required":["id","type","name"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity that initiated the access request.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}}}}},{"title":"Account Aggregation Completed","type":"object","required":["source","status","started","completed","errors","warnings","stats"],"properties":{"source":{"required":["type","name","id"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The source from which the accounts were aggregated.","properties":{"type":{"enum":["SOURCE"],"description":"The type of object that is referenced","example":"SOURCE"}}},"status":{"description":"The overall status of the aggregation.","enum":["Success","Failed","Terminated"],"example":"Success"},"started":{"type":"string","format":"date-time","description":"The date and time when the account aggregation started.","example":"2020-06-29T22:01:50.474Z"},"completed":{"type":"string","format":"date-time","description":"The date and time when the account aggregation finished.","example":"2020-06-29T22:02:04.090Z"},"errors":{"nullable":true,"description":"A list of errors that occurred during the aggregation.","type":"array","items":{"type":"string","description":"A descriptive error message.","example":"Accounts unable to be aggregated."}},"warnings":{"nullable":true,"description":"A list of warnings that occurred during the aggregation.","type":"array","items":{"type":"string","description":"A descriptive warning message.","example":"Account Skipped"}},"stats":{"type":"object","description":"Overall statistics about the account aggregation.","required":["scanned","unchanged","changed","added","removed"],"properties":{"scanned":{"type":"integer","format":"int32","minimum":0,"maximum":2147483647,"description":"The number of accounts which were scanned / iterated over.","example":200},"unchanged":{"type":"integer","format":"int32","minimum":0,"maximum":2147483647,"description":"The number of accounts which existed before, but had no changes.","example":190},"changed":{"type":"integer","format":"int32","minimum":0,"maximum":2147483647,"description":"The number of accounts which existed before, but had changes.","example":6},"added":{"type":"integer","format":"int32","minimum":0,"maximum":2147483647,"description":"The number of accounts which are new - have not existed before.","example":4},"removed":{"type":"integer","minimum":0,"maximum":2147483647,"format":"int32","description":"The number accounts which existed before, but no longer exist (thus getting removed).","example":3}}}}},{"title":"Account Attributes Changed","type":"object","required":["identity","source","account","changes"],"properties":{"identity":{"required":["id","type","name"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity whose account attributes changed.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}}},"source":{"required":["id","type","name"],"type":"object","description":"The source that contains the account.","properties":{"id":{"description":"ID of the object to which this reference applies","type":"string","example":"4e4d982dddff4267ab12f0f1e72b5a6d"},"type":{"type":"string","enum":["SOURCE"],"example":"SOURCE","description":"The type of object that is referenced"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"Corporate Active Directory"}}},"account":{"type":"object","description":"Details of the account where the attributes changed.","required":["id","uuid","name","nativeIdentity","type"],"properties":{"id":{"type":"string","description":"SailPoint generated unique identifier.","example":"52170a74-ca89-11ea-87d0-0242ac130003"},"uuid":{"nullable":true,"type":"string","description":"The source's unique identifier for the account. UUID is generated by the source system.","example":"1cb1f07d-3e5a-4431-becd-234fa4306108"},"name":{"type":"string","description":"Name of the account.","example":"john.doe"},"nativeIdentity":{"type":"string","description":"Unique ID of the account on the source.","example":"cn=john.doe,ou=users,dc=acme,dc=com"},"type":{"enum":["ACCOUNT"],"description":"The type of the account","example":"ACCOUNT"}}},"changes":{"type":"array","description":"A list of attributes that changed.","items":{"type":"object","required":["attribute","oldValue","newValue"],"properties":{"attribute":{"type":"string","description":"The name of the attribute.","example":"sn"},"oldValue":{"description":"The previous value of the attribute.","nullable":true,"oneOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"nullable":true,"type":"string"}}],"example":"doe"},"newValue":{"description":"The new value of the attribute.","nullable":true,"oneOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"nullable":true,"type":"string"}}],"example":"ryans"}}}}}},{"title":"Account Correlated","type":"object","required":["identity","source","account","attributes"],"properties":{"identity":{"required":["type","name","id"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity that the account correlated with.","properties":{"type":{"enum":["IDENTITY"],"description":"The type of object that is referenced","example":"IDENTITY"}}},"source":{"required":["id","type","name"],"type":"object","description":"The source from which the account came from.","properties":{"id":{"description":"ID of the object to which this reference applies","type":"string","example":"4e4d982dddff4267ab12f0f1e72b5a6d"},"type":{"type":"string","enum":["SOURCE"],"example":"SOURCE","description":"The type of object that is referenced"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"Corporate Active Directory"}}},"account":{"required":["id","name","nativeIdentity","type"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The account that was correlated.","properties":{"type":{"enum":["ACCOUNT"],"description":"The type of object that is referenced","example":"ACCOUNT"},"nativeIdentity":{"type":"string","description":"Unique ID of the account on the source.","example":"cn=john.doe,ou=users,dc=acme,dc=com"},"uuid":{"nullable":true,"type":"string","description":"The source's unique identifier for the account. UUID is generated by the source system.","example":"1cb1f07d-3e5a-4431-becd-234fa4306108"}}},"attributes":{"type":"object","description":"The attributes associated with the account. Attributes are unique per source.","additionalProperties":true,"example":{"sn":"doe","givenName":"john","memberOf":["cn=g1,ou=groups,dc=acme,dc=com","cn=g2,ou=groups,dc=acme,dc=com","cn=g3,ou=groups,dc=acme,dc=com"]}},"entitlementCount":{"type":"integer","format":"int32","description":"The number of entitlements associated with this account.","example":0}}},{"title":"Accounts Collected for Aggregation","type":"object","required":["source","status","started","completed","errors","warnings","stats"],"properties":{"source":{"required":["id","type","name"],"type":"object","description":"Reference to the source that has been aggregated.","properties":{"id":{"description":"ID of the object to which this reference applies","type":"string","example":"4e4d982dddff4267ab12f0f1e72b5a6d"},"type":{"type":"string","enum":["SOURCE"],"example":"SOURCE","description":"The type of object that is referenced"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"Corporate Active Directory"}}},"status":{"description":"The overall status of the collection.","enum":["Success","Failed","Terminated"],"example":"Success"},"started":{"type":"string","format":"date-time","description":"The date and time when the account collection started.","example":"2020-06-29T22:01:50.474Z"},"completed":{"type":"string","format":"date-time","description":"The date and time when the account collection finished.","example":"2020-06-29T22:02:04.090Z"},"errors":{"nullable":true,"description":"A list of errors that occurred during the collection.","type":"array","items":{"type":"string","description":"A descriptive error message.","example":"Unable to collect accounts for aggregation."}},"warnings":{"nullable":true,"description":"A list of warnings that occurred during the collection.","type":"array","items":{"type":"string","description":"A descriptive warning message.","example":"Account Skipped"}},"stats":{"type":"object","description":"Overall statistics about the account collection.","required":["scanned","unchanged","changed","added","removed"],"properties":{"scanned":{"type":"integer","format":"int32","minimum":0,"maximum":2147483647,"description":"The number of accounts which were scanned / iterated over.","example":200},"unchanged":{"type":"integer","format":"int32","minimum":0,"maximum":2147483647,"description":"The number of accounts which existed before, but had no changes.","example":190},"changed":{"type":"integer","format":"int32","minimum":0,"maximum":2147483647,"description":"The number of accounts which existed before, but had changes.","example":6},"added":{"type":"integer","format":"int32","minimum":0,"maximum":2147483647,"description":"The number of accounts which are new - have not existed before.","example":4},"removed":{"type":"integer","minimum":0,"maximum":2147483647,"format":"int32","description":"The number accounts which existed before, but no longer exist (thus getting removed).","example":3}}}}},{"title":"Account Uncorrelated","type":"object","required":["identity","source","account"],"properties":{"identity":{"required":["type","name","id"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity that the account uncorrelated with.","properties":{"type":{"enum":["IDENTITY"],"description":"The type of object that is referenced","example":"IDENTITY"}}},"source":{"required":["type","name","id"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The source from which the account came from.","properties":{"type":{"enum":["SOURCE"],"description":"The type of object that is referenced","example":"SOURCE"}}},"account":{"required":["id","name","nativeIdentity","type"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The account that was uncorrelated.","properties":{"type":{"enum":["ACCOUNT"],"description":"The type of object that is referenced","example":"ACCOUNT"},"nativeIdentity":{"type":"string","description":"Unique ID of the account on the source.","example":"cn=john.doe,ou=users,dc=acme,dc=com"},"uuid":{"nullable":true,"type":"string","description":"The source's unique identifier for the account. UUID is generated by the source system.","example":"1cb1f07d-3e5a-4431-becd-234fa4306108"}}},"entitlementCount":{"type":"integer","format":"int32","description":"The number of entitlements associated with this account.","example":0}}},{"title":"Campaign Activated","type":"object","required":["campaign"],"properties":{"campaign":{"type":"object","description":"Details about the certification campaign that was activated.","required":["id","name","description","created","deadline","type","campaignOwner","status"],"properties":{"id":{"type":"string","description":"Unique ID for the campaign.","example":"2c91808576f886190176f88cac5a0010"},"name":{"type":"string","description":"The human friendly name of the campaign.","example":"Manager Access Campaign"},"description":{"type":"string","description":"Extended description of the campaign.","example":"Audit access for all employees."},"created":{"type":"string","format":"date-time","description":"The date and time the campaign was created.","example":"2021-02-16T03:04:45.815Z"},"modified":{"nullable":true,"type":"string","format":"date-time","description":"The date and time the campaign was last modified.","example":"2021-02-16T03:06:45.815Z"},"deadline":{"type":"string","format":"date-time","description":"The date and time the campaign is due.","example":"2021-03-16T03:04:45.815Z"},"type":{"description":"The type of campaign.","enum":["MANAGER","SOURCE_OWNER","SEARCH","ROLE_COMPOSITION"],"example":"MANAGER"},"campaignOwner":{"type":"object","description":"Details of the identity that owns the campaign.","required":["id","displayName","email"],"properties":{"id":{"type":"string","description":"The unique ID of the identity.","example":"37f080867702c1910177031320c40n27"},"displayName":{"type":"string","description":"The human friendly name of the identity.","example":"John Snow"},"email":{"type":"string","description":"The primary email address of the identity.","example":"john.snow@example.com"}}},"status":{"enum":["ACTIVE"],"description":"The current status of the campaign.","example":"ACTIVE"}}}}},{"title":"Campaign Ended","type":"object","required":["campaign"],"properties":{"campaign":{"type":"object","description":"Details about the certification campaign that ended.","required":["id","name","description","created","deadline","type","campaignOwner","status"],"properties":{"id":{"type":"string","description":"Unique ID for the campaign.","example":"2c91808576f886190176f88cac5a0010"},"name":{"type":"string","description":"The human friendly name of the campaign.","example":"Manager Access Campaign"},"description":{"type":"string","description":"Extended description of the campaign.","example":"Audit access for all employees."},"created":{"type":"string","format":"date-time","description":"The date and time the campaign was created.","example":"2021-02-16T03:04:45.815Z"},"modified":{"nullable":true,"type":"string","format":"date-time","description":"The date and time the campaign was last modified.","example":"2021-03-16T03:06:45.815Z"},"deadline":{"type":"string","format":"date-time","description":"The date and time the campaign is due.","example":"2021-03-16T03:04:45.815Z"},"type":{"description":"The type of campaign.","enum":["MANAGER","SOURCE_OWNER","SEARCH","ROLE_COMPOSITION"],"example":"MANAGER"},"campaignOwner":{"type":"object","description":"Details of the identity that owns the campaign.","required":["id","displayName","email"],"properties":{"id":{"type":"string","description":"The unique ID of the identity.","example":"37f080867702c1910177031320c40n27"},"displayName":{"type":"string","description":"The human friendly name of the identity.","example":"John Snow"},"email":{"type":"string","description":"The primary email address of the identity.","example":"john.snow@example.com"}}},"status":{"enum":["COMPLETED"],"description":"The current status of the campaign.","example":"COMPLETED"}}}}},{"title":"Campaign Generated","type":"object","required":["campaign"],"properties":{"campaign":{"description":"Details about the campaign that was generated.","type":"object","required":["id","name","description","created","type","campaignOwner","status"],"properties":{"id":{"type":"string","description":"The unique ID of the campaign.","example":"2c91808576f886190176f88cac5a0010"},"name":{"type":"string","description":"Human friendly name of the campaign.","example":"Manager Access Campaign"},"description":{"type":"string","description":"Extended description of the campaign.","example":"Audit access for all employees."},"created":{"type":"string","format":"date-time","description":"The date and time the campaign was created.","example":"2021-02-16T03:04:45.815Z"},"modified":{"nullable":true,"type":"string","description":"The date and time the campaign was last modified.","example":"2021-02-17T03:04:45.815Z"},"deadline":{"nullable":true,"type":"string","description":"The date and time when the campaign must be finished by.","example":"2021-02-18T03:04:45.815Z"},"type":{"enum":["MANAGER","SOURCE_OWNER","SEARCH","ROLE_COMPOSITION"],"description":"The type of campaign that was generated.","example":"MANAGER"},"campaignOwner":{"type":"object","description":"The identity that owns the campaign.","required":["id","displayName","email"],"properties":{"id":{"type":"string","description":"The unique ID of the identity.","example":"37f080867702c1910177031320c40n27"},"displayName":{"type":"string","description":"The display name of the identity.","example":"John Snow"},"email":{"type":"string","description":"The primary email address of the identity.","example":"john.snow@example.com"}}},"status":{"enum":["STAGED","ACTIVATING","ACTIVE"],"description":"The current status of the campaign.","example":"STAGED"}}}}},{"title":"Certification Signed Off","type":"object","required":["certification"],"properties":{"certification":{"description":"The certification campaign that was signed off on.","required":["id","name","created"],"allOf":[{"type":"object","required":["campaignRef","completed","decisionsMade","decisionsTotal","due","signed","reviewer","campaignOwner","hasErrors","phase","entitiesCompleted","entitiesTotal"],"properties":{"campaignRef":{"type":"object","required":["id","name","type","campaignType","description"],"properties":{"id":{"type":"string","description":"The unique ID of the campaign.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the campaign.","example":"Campaign Name"},"type":{"type":"string","enum":["CAMPAIGN"],"description":"The type of object that is being referenced.","example":"CAMPAIGN"},"campaignType":{"type":"string","enum":["MANAGER","SOURCE_OWNER","SEARCH"],"description":"The type of the campaign.","example":"MANAGER"},"description":{"type":"string","description":"The description of the campaign set by the admin who created it.","nullable":true,"example":"A description of the campaign"}}},"phase":{"type":"string","description":"The current phase of the campaign.\n* `STAGED`: The campaign is waiting to be activated.\n* `ACTIVE`: The campaign is active.\n* `SIGNED`: The reviewer has signed off on the campaign, and it is considered complete.\n","enum":["STAGED","ACTIVE","SIGNED"],"example":"ACTIVE"},"due":{"type":"string","format":"date-time","description":"The due date of the certification.","example":"2018-10-19T13:49:37.385Z"},"signed":{"type":"string","format":"date-time","description":"The date the reviewer signed off on the certification.","example":"2018-10-19T13:49:37.385Z"},"reviewer":{"description":"A reference to the reviewer of the campaign.","type":"object","required":["type","id","name"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"properties":{"type":{"description":"The type of object that the reviewer is.","enum":["IDENTITY","GOVERNANCE_GROUP"],"example":"IDENTITY"},"email":{"type":"string","nullable":true,"description":"The email of the reviewing identity. Only applicable to `IDENTITY`","example":"reviewer@test.com"}}},"reassignment":{"nullable":true,"description":"A reference to a reviewer that this campaign has been reassigned to.","type":"object","properties":{"from":{"description":"The previous certification","type":"object","allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object","properties":{"reviewer":{"description":"Certification reviewer","type":"object","required":["type","id","name"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"properties":{"type":{"description":"The type of object that the reviewer is.","enum":["IDENTITY","GOVERNANCE_GROUP"],"example":"IDENTITY"},"email":{"type":"string","nullable":true,"description":"The email of the reviewing identity. Only applicable to `IDENTITY`","example":"reviewer@test.com"}}}}}],"properties":{"type":{"description":"The type of object that the reviewer is.","enum":["CERTIFICATION"],"example":"CERTIFICATION"}},"example":{"reviewer":{"email":"reviewer@test.com","type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"type":"CERTIFICATION","id":"2c9180867921dd73017923ddd8d203ba","name":"Identity Access Review for William Wilson"}},"comment":{"type":"string","description":"Comments from the previous reviewer.","example":"Please review"}}},"hasErrors":{"type":"boolean","example":false,"description":"Indicates it the certification has any errors."},"errorMessage":{"type":"string","nullable":true,"example":"The certification has an error","description":"A message indicating what the error is."},"completed":{"type":"boolean","description":"Indicates if all certification decisions have been made.","example":false},"decisionsMade":{"type":"integer","description":"The number of approve/revoke/acknowledge decisions that have been made by the reviewer.","example":20,"format":"int32"},"decisionsTotal":{"type":"integer","description":"The total number of approve/revoke/acknowledge decisions for the certification.","example":40,"format":"int32"},"entitiesCompleted":{"type":"integer","description":"The number of entities (identities, access profiles, roles, etc.) for which all decisions have been made and are complete.","example":5,"format":"int32"},"entitiesTotal":{"type":"integer","format":"int32","description":"The total number of entities (identities, access profiles, roles, etc.) in the certification, both complete and incomplete.","example":10}}}],"properties":{"id":{"type":"string","description":"Unique ID of the certification.","example":"2c91808576f886190176f88caf0d0067"},"name":{"type":"string","description":"The name of the certification.","example":"Manager Access Review for Alice Baker"},"created":{"type":"string","format":"date-time","description":"The date and time the certification was created.","example":"2020-02-16T03:04:45.815Z"},"modified":{"nullable":true,"type":"string","format":"date-time","description":"The date and time the certification was last modified.","example":"2020-02-16T03:06:45.815Z"}}}}},{"title":"Identity Attributes Changed","type":"object","required":["identity","changes"],"properties":{"identity":{"required":["id","type","name"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity who's attributes changed.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}}},"changes":{"description":"A list of one or more identity attributes that changed on the identity.","type":"array","items":{"type":"object","required":["attribute"],"properties":{"attribute":{"type":"string","description":"The name of the identity attribute that changed.","example":"department"},"oldValue":{"description":"The value of the identity attribute before it changed.","nullable":true,"example":"sales","oneOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"string"}},{"type":"object","nullable":true,"additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"integer"},{"type":"boolean"}]}}]},"newValue":{"description":"The value of the identity attribute after it changed.","example":"marketing","oneOf":[{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"string"}},{"type":"object","nullable":true,"additionalProperties":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"integer"},{"type":"boolean"}]}}]}}}}}},{"title":"Identity Created","type":"object","required":["identity","attributes"],"properties":{"identity":{"required":["id","type","name"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity that was created.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}}},"attributes":{"type":"object","description":"The attributes assigned to the identity. Attributes are determined by the identity profile.","additionalProperties":true,"example":{"firstname":"John"}}}},{"title":"Identity Deleted","type":"object","required":["identity","attributes"],"properties":{"identity":{"required":["id","type","name"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity that was deleted.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}}},"attributes":{"type":"object","description":"The attributes assigned to the identity. Attributes are determined by the identity profile.","additionalProperties":true,"example":{"firstname":"John"}}}},{"title":"Provisioning Completed","type":"object","required":["trackingNumber","sources","recipient","accountRequests"],"properties":{"trackingNumber":{"type":"string","description":"The reference number of the provisioning request. Useful for tracking status in the Account Activity search interface.","example":"4b4d982dddff4267ab12f0f1e72b5a6d"},"sources":{"type":"string","description":"One or more sources that the provisioning transaction(s) were done against. Sources are comma separated.","example":"Corp AD, Corp LDAP, Corp Salesforce"},"action":{"nullable":true,"type":"string","description":"Origin of where the provisioning request came from.","example":"IdentityRefresh"},"errors":{"nullable":true,"description":"A list of any accumulated error messages that occurred during provisioning.","type":"array","items":{"type":"string","example":"Connector AD Failed"}},"warnings":{"nullable":true,"description":"A list of any accumulated warning messages that occurred during provisioning.","type":"array","items":{"type":"string","example":"Notification Skipped due to invalid email"}},"recipient":{"required":["id","type","name"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"Reference to the identity who is the target of the provisioning request.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}}},"requester":{"nullable":true,"required":["id","type","name"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"Reference to the identity (if any) who submitted the provisioning request.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}}},"accountRequests":{"type":"array","description":"A list of provisioning instructions to perform on an account-by-account basis.","items":{"type":"object","required":["source","accountOperation","provisioningResult","provisioningTarget"],"properties":{"source":{"required":["id","type","name"],"type":"object","description":"Reference to the source being provisioned against.","properties":{"id":{"description":"ID of the object to which this reference applies","type":"string","example":"4e4d982dddff4267ab12f0f1e72b5a6d"},"type":{"type":"string","enum":["SOURCE"],"example":"SOURCE","description":"The type of object that is referenced"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"Corporate Active Directory"}}},"accountId":{"type":"string","description":"The unique idenfier of the account being provisioned.","example":"CN=Chewy.Bacca,ou=hardcorefigter,ou=wookies,dc=starwars,dc=com"},"accountOperation":{"type":"string","description":"The provisioning operation; typically Create, Modify, Enable, Disable, Unlock, or Delete.","example":"Modify"},"provisioningResult":{"description":"The overall result of the provisioning transaction; this could be success, pending, failed, etc.","enum":["SUCCESS","PENDING","FAILED"],"example":"SUCCESS"},"provisioningTarget":{"type":"string","description":"The name of the provisioning channel selected; this could be the same as the source, or could be a Service Desk Integration Module (SDIM).","example":"Corp AD"},"ticketId":{"nullable":true,"type":"string","description":"A reference to a tracking number, if this is sent to a Service Desk Integration Module (SDIM).","example":"72619262"},"attributeRequests":{"nullable":true,"description":"A list of attributes as part of the provisioning transaction.","type":"array","items":{"type":"object","required":["attributeName","operation"],"properties":{"attributeName":{"type":"string","description":"The name of the attribute being provisioned.","example":"memberOf"},"attributeValue":{"nullable":true,"type":"string","description":"The value of the attribute being provisioned.","example":"CN=jedi,DC=starwars,DC=com"},"operation":{"enum":["Add","Set","Remove"],"description":"The operation to handle the attribute.","example":"Add"}}}}}}}}},{"title":"Saved Search Complete","type":"object","required":["fileName","ownerEmail","ownerName","query","searchName","searchResults","signedS3Url"],"properties":{"fileName":{"type":"string","description":"A name for the report file.","example":"Modified.zip"},"ownerEmail":{"type":"string","description":"The email address of the identity that owns the saved search.","example":"test@sailpoint.com"},"ownerName":{"type":"string","description":"The name of the identity that owns the saved search.","example":"Cloud Support"},"query":{"type":"string","description":"The search query that was used to generate the report.","example":"modified:[now-7y/d TO now]"},"searchName":{"type":"string","description":"The name of the saved search.","example":"Modified Activity"},"searchResults":{"type":"object","description":"A preview of the search results for each object type. This includes a count as well as headers, and the first several rows of data, per object type.","properties":{"Account":{"description":"A table of accounts that match the search criteria.","nullable":true,"type":"object","required":["count","noun","preview"],"properties":{"count":{"type":"string","description":"The number of rows in the table.","example":3},"noun":{"type":"string","description":"The type of object represented in the table.","example":"accounts"},"preview":{"description":"A sample of the data in the table.","type":"array","items":{"type":"array","items":{"type":"string","example":"Robert.Chase"},"example":[]}}}},"Entitlement":{"description":"A table of entitlements that match the search criteria.","nullable":true,"type":"object","required":["count","noun","preview"],"properties":{"count":{"type":"string","description":"The number of rows in the table.","example":2},"noun":{"type":"string","description":"The type of object represented in the table.","example":"entitlements"},"preview":{"description":"A sample of the data in the table.","type":"array","items":{"type":"array","items":{"type":"string","example":"Administrator"},"example":[]}}}},"Identity":{"description":"A table of identities that match the search criteria.","nullable":true,"type":"object","required":["count","noun","preview"],"properties":{"count":{"type":"string","description":"The number of rows in the table.","example":2},"noun":{"type":"string","description":"The type of object represented in the table.","example":"identities"},"preview":{"description":"A sample of the data in the table.","type":"array","items":{"type":"array","items":{"type":"string","example":"Carol Shelby"},"example":[]}}}}}},"signedS3Url":{"type":"string","description":"The Amazon S3 URL to download the report from.","example":"https://sptcbu-org-data-useast1.s3.amazonaws.com/arsenal-john/reports/Events%20Export.2020-05-06%2018%2759%20GMT.3e580592-86e4-4953-8aea-49e6ef20a086.zip?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20200506T185919Z&X-Amz-SignedHeaders=host&X-Amz-Expires=899&X-Amz-Credential=AKIAV5E54XOGTS4Q4L7A%2F20200506%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=2e732bb97a12a1fd8a215613e3c31fcdae8ba1fb6a25916843ab5b51d2ddefbc"}}},{"type":"object","required":["id","nativeIdentifier","sourceId","sourceName","identityId","identityName","attributes"],"properties":{"uuid":{"type":"string","description":"Source unique identifier for the identity. UUID is generated by the source system.","example":"b7264868-7201-415f-9118-b581d431c688"},"id":{"type":"string","description":"SailPoint generated unique identifier.","example":"ee769173319b41d19ccec35ba52f237b"},"nativeIdentifier":{"type":"string","description":"Unique ID of the account on the source.","example":"E009"},"sourceId":{"type":"string","description":"The ID of the source.","example":"2c918082814e693601816e09471b29b6"},"sourceName":{"type":"string","description":"The name of the source.","example":"Active Directory"},"identityId":{"type":"string","description":"The ID of the identity that is corellated with this account.","example":"ee769173319b41d19ccec6c235423237b"},"identityName":{"type":"string","description":"The name of the identity that is corellated with this account.","example":"john.doe"},"attributes":{"type":"object","additionalProperties":true,"description":"The attributes of the account. The contents of attributes depends on the account schema for the source.","example":{"firstname":"John","lastname":"Doe","email":"john.doe@gmail.com","department":"Sales","displayName":"John Doe","created":"2020-04-27T16:48:33.597Z","employeeNumber":"E009","uid":"E009","inactive":"true","phone":null,"identificationNumber":"E009"}}}},{"type":"object","required":["id","nativeIdentifier","sourceId","sourceName","identityId","identityName","attributes"],"properties":{"uuid":{"type":"string","description":"Source unique identifier for the identity. UUID is generated by the source system.","example":"b7264868-7201-415f-9118-b581d431c688"},"id":{"type":"string","description":"SailPoint generated unique identifier.","example":"ee769173319b41d19ccec35ba52f237b"},"nativeIdentifier":{"type":"string","description":"Unique ID of the account on the source.","example":"E009"},"sourceId":{"type":"string","description":"The ID of the source.","example":"2c918082814e693601816e09471b29b6"},"sourceName":{"type":"string","description":"The name of the source.","example":"Active Directory"},"identityId":{"type":"string","description":"The ID of the identity that is corellated with this account.","example":"ee769173319b41d19ccec6c235423237b"},"identityName":{"type":"string","description":"The name of the identity that is corellated with this account.","example":"john.doe"},"attributes":{"type":"object","additionalProperties":true,"description":"The attributes of the account. The contents of attributes depends on the account schema for the source.","example":{"firstname":"John","lastname":"Doe","email":"john.doe@gmail.com","department":"Sales","displayName":"John Doe","created":"2020-04-27T16:48:33.597Z","employeeNumber":"E009","uid":"E009","inactive":"true","phone":null,"identificationNumber":"E009"}}}},{"type":"object","required":["id","nativeIdentifier","sourceId","sourceName","identityId","identityName","attributes"],"properties":{"uuid":{"type":"string","description":"Source unique identifier for the identity. UUID is generated by the source system.","example":"b7264868-7201-415f-9118-b581d431c688"},"id":{"type":"string","description":"SailPoint generated unique identifier.","example":"ee769173319b41d19ccec35ba52f237b"},"nativeIdentifier":{"type":"string","description":"Unique ID of the account on the source.","example":"E009"},"sourceId":{"type":"string","description":"The ID of the source.","example":"2c918082814e693601816e09471b29b6"},"sourceName":{"type":"string","description":"The name of the source.","example":"Active Directory"},"identityId":{"type":"string","description":"The ID of the identity that is corellated with this account.","example":"ee769173319b41d19ccec6c235423237b"},"identityName":{"type":"string","description":"The name of the identity that is corellated with this account.","example":"john.doe"},"attributes":{"type":"object","additionalProperties":true,"description":"The attributes of the account. The contents of attributes depends on the account schema for the source.","example":{"firstname":"John","lastname":"Doe","email":"john.doe@gmail.com","department":"Sales","displayName":"John Doe","created":"2020-04-27T16:48:33.597Z","employeeNumber":"E009","uid":"E009","inactive":"true","phone":null,"identificationNumber":"E009"}}}},{"title":"Source Created","type":"object","required":["id","name","type","created","connector","actor"],"properties":{"id":{"type":"string","description":"The unique ID of the source.","example":"2c9180866166b5b0016167c32ef31a66"},"name":{"type":"string","description":"Human friendly name of the source.","example":"Test source"},"type":{"type":"string","description":"The connection type.","example":"DIRECT_CONNECT"},"created":{"type":"string","format":"date-time","description":"The date and time the source was created.","example":"2021-03-29T22:01:50.474Z"},"connector":{"type":"string","description":"The connector type used to connect to the source.","example":"active-directory"},"actor":{"required":["id","name","type"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity that created the source.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}}}}},{"title":"Source Deleted","type":"object","required":["id","name","type","deleted","connector","actor"],"properties":{"id":{"type":"string","description":"The unique ID of the source.","example":"2c9180866166b5b0016167c32ef31a66"},"name":{"type":"string","description":"Human friendly name of the source.","example":"Test source"},"type":{"type":"string","description":"The connection type.","example":"DIRECT_CONNECT"},"deleted":{"type":"string","format":"date-time","description":"The date and time the source was deleted.","example":"2021-03-29T22:01:50.474Z"},"connector":{"type":"string","description":"The connector type used to connect to the source.","example":"active-directory"},"actor":{"required":["id","name","type"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity that deleted the source.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}}}}},{"title":"Source Updated","type":"object","required":["id","name","type","modified","connector","actor"],"properties":{"id":{"type":"string","description":"The unique ID of the source.","example":"2c9180866166b5b0016167c32ef31a66"},"name":{"type":"string","description":"The user friendly name of the source.","example":"Corporate Active Directory"},"type":{"type":"string","description":"The connection type of the source.","example":"DIRECT_CONNECT"},"modified":{"type":"string","format":"date-time","description":"The date and time the source was modified.","example":"2021-03-29T22:01:50.474Z"},"connector":{"type":"string","description":"The connector type used to connect to the source.","example":"active-directory"},"actor":{"required":["type","name"],"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity or system that performed the update.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}}}}},{"title":"VA Cluster Status Change Event","type":"object","required":["created","type","application","healthCheckResult","previousHealthCheckResult"],"properties":{"created":{"type":"string","format":"date-time","description":"The date and time the status change occurred.","example":"2020-06-29T22:01:50.474Z"},"type":{"enum":["SOURCE","CLUSTER"],"description":"The type of the object that initiated this event.","example":"CLUSTER"},"application":{"type":"object","description":"Details about the `CLUSTER` or `SOURCE` that initiated this event.","required":["id","name","attributes"],"properties":{"id":{"type":"string","description":"The GUID of the application","example":"2c9180866166b5b0016167c32ef31a66"},"name":{"type":"string","description":"The name of the application","example":"Production VA Cluster"},"attributes":{"type":"object","description":"Custom map of attributes for a source. This will only be populated if type is `SOURCE` and the source has a proxy.","additionalProperties":true,"nullable":true,"example":null}}},"healthCheckResult":{"type":"object","description":"The results of the most recent health check.","required":["message","resultType","status"],"properties":{"message":{"type":"string","description":"Detailed message of the result of the health check.","example":"Test Connection failed with exception. Error message - java.lang Exception"},"resultType":{"type":"string","description":"The type of the health check result.","example":"SOURCE_STATE_ERROR_CLUSTER"},"status":{"enum":["Succeeded","Failed"],"description":"The status of the health check.","example":"Succeeded"}}},"previousHealthCheckResult":{"type":"object","description":"The results of the last health check.","required":["message","resultType","status"],"properties":{"message":{"type":"string","description":"Detailed message of the result of the health check.","example":"Test Connection failed with exception. Error message - java.lang Exception"},"resultType":{"type":"string","description":"The type of the health check result.","example":"SOURCE_STATE_ERROR_CLUSTER"},"status":{"enum":["Succeeded","Failed"],"description":"The status of the health check.","example":"Failed"}}}}}]},"outputSchema":{"type":"string","description":"The JSON schema of the response that will be sent by the subscribed service to the trigger in response to an event. This only applies to a trigger type of `REQUEST_RESPONSE`.","nullable":true,"example":"{\"definitions\":{\"record:AccessRequestDynamicApproverOutput\":{\"type\":[\"null\",\"object\"],\"required\":[\"id\",\"name\",\"type\"],\"additionalProperties\":true,\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"type\":{\"type\":\"string\"}}}},\"$ref\":\"#/definitions/record:AccessRequestDynamicApproverOutput\"}"},"exampleOutput":{"description":"An example of the JSON payload that will be sent by the subscribed service to the trigger in response to an event.","nullable":true,"oneOf":[{"title":"Access Request Dynamic Approver","type":"object","nullable":true,"required":["id","name","type"],"properties":{"id":{"type":"string","description":"The unique ID of the identity to add to the approver list for the access request.","example":"2c91808b6ef1d43e016efba0ce470906"},"name":{"type":"string","description":"The name of the identity to add to the approver list for the access request.","example":"Adam Adams"},"type":{"enum":["IDENTITY","GOVERNANCE_GROUP"],"description":"The type of object being referenced.","example":"IDENTITY"}}},{"title":"Access Request Pre Approval","type":"object","required":["approved","comment","approver"],"properties":{"approved":{"type":"boolean","description":"Whether or not to approve the access request.","example":false},"comment":{"type":"string","description":"A comment about the decision to approve or deny the request.","example":"This access should be denied, because this will cause an SOD violation."},"approver":{"type":"string","description":"The name of the entity that approved or denied the request.","example":"AcmeCorpExternalIntegration"}}}]}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"oauth2":["idn:trigger-service-subscriptions:read"]}],"method":"get","path":"/triggers","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Triggers","description":{"content":"Gets a list of triggers that are available in the tenant.","type":"text/plain"},"url":{"path":["triggers"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields:\n\n**id** **name**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET","auth":{"type":"oauth2","oauth2":[]}}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Triggers + + + +Gets a list of triggers that are available in the tenant. + +
    Query Parameters
    + +List of triggers. + +
    Schema array
      exampleInput object
      + +An example of the JSON payload that will be sent by the trigger to the subscribed service. + +
    • oneOf
      requestedFor object
      requestedItems object[]
      + +The access items that are being requested. + +
      requestedBy object
      requestedFor object
      requestedItemsStatus object[]
      + +Details on the outcome of each access item. + +
      clientMetadata object
      + +Additional customer defined metadata about the access item. + +
      approvalInfo object[]
      + +A list of one or more approvers for the access request. + +
      approver object
      requestedBy object
      requestedFor object
      requestedItems object[]
      + +Details of the access items being requested. + +
      requestedBy object
      source object
      stats object
      + +Overall statistics about the account aggregation. + +
      identity object
      source object
      + +The source that contains the account. + +
      account object
      + +Details of the account where the attributes changed. + +
      changes object[]
      + +A list of attributes that changed. + +
      oldValue object
      + +The previous value of the attribute. + +
    • oneOf
    • string
    • boolean
    • string
    • newValue object
      + +The new value of the attribute. + +
    • oneOf
    • string
    • boolean
    • string
    identity object
    source object
    + +The source from which the account came from. + +
    account object
    attributes object
    + +The attributes associated with the account. Attributes are unique per source. + +
    source object
    + +Reference to the source that has been aggregated. + +
    stats object
    + +Overall statistics about the account collection. + +
    identity object
    source object
    account object
    campaign object
    + +Details about the certification campaign that was activated. + +
    campaignOwner object
    + +Details of the identity that owns the campaign. + +
    campaign object
    + +Details about the certification campaign that ended. + +
    campaignOwner object
    + +Details of the identity that owns the campaign. + +
    campaign object
    + +Details about the campaign that was generated. + +
    campaignOwner object
    + +The identity that owns the campaign. + +
    certification object
    campaignRef object
    reviewer object
    + +A reference to the reviewer of the campaign. + +
    reassignment object
    + +A reference to a reviewer that this campaign has been reassigned to. + +
    from object
    + +The previous certification + +
    reviewer object
    + +Certification reviewer + +
    identity object
    changes object[]
    + +A list of one or more identity attributes that changed on the identity. + +
    oldValue object
    + +The value of the identity attribute before it changed. + +
  • oneOf
  • string
  • boolean
  • string
  • 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 literal 0 HcmV?d00001 diff --git a/docs/idn_docs/triggers/img/what-are-triggers.png b/docs/idn_docs/triggers/img/what-are-triggers.png new file mode 100644 index 0000000000000000000000000000000000000000..898ca7c3c0ee3eabac31bffe0c8bf92b3bf100d8 GIT binary patch literal 105467 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�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%0DqEvyJcFcPtr>GCJ*yp;W&+iXOQvleDU(_$8xbt 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 literal 0 HcmV?d00001 diff --git a/docs/sailpoint-api-beta/access-profiles.tag.mdx b/docs/sailpoint-api-beta/access-profiles.tag.mdx new file mode 100644 index 000000000..28517e4f5 --- /dev/null +++ b/docs/sailpoint-api-beta/access-profiles.tag.mdx @@ -0,0 +1,54 @@ +--- +id: access-profiles +title: Access Profiles +description: Access Profiles +--- + + + +Use this API to implement and customize access profile functionality. +With this functionality in place, administrators can create access profiles and configure them for use throughout IdentityNow, enabling users to get the access they need quickly and securely. + +Access profiles group entitlements, which represent access rights on sources. + +For example, an Active Directory source in IdentityNow can have multiple entitlements: the first, 'Employees,' may represent the access all employees have at the organization, and a second, 'Developers,' may represent the access all developers have at the organization. + +An administrator can then create a broader set of access in the form of an access profile, 'AD Developers' grouping the 'Employees' entitlement with the 'Developers' entitlement. + +When users only need Active Directory employee access, they can request access to the 'Employees' entitlement. + +When users need both Active Directory employee and developer access, they can request access to the 'AD Developers' access profile. + +Access profiles are the most important units of access in IdentityNow. IdentityNow uses access profiles in many features, including the following: + +- Provisioning: When you use the Provisioning Service, lifecycle states and roles both grant access to users in the form of access profiles. + +- Certifications: You can approve or revoke access profiles in certification campaigns, just like entitlements. + +- Access Requests: You can assign access profiles to applications, and when a user requests access to the app associated with an access profile and someone approves the request, access is granted to both the application and its associated access profile. + +- Roles: You can group one or more access profiles into a role to quickly assign access items based on an identity's role. + +In IdentityNow, administrators can use the Access drop-down menu and select Access Profiles to view, configure, and delete existing access profiles, as well as create new ones. +Administrators can enable and disable an access profile, and they can also make the following configurations: + +- Manage Entitlements: Manage the profile's access by adding and removing entitlements. + +- Access Requests: Configure access profiles to be requestable and establish an approval process for any requests that the access profile be granted or revoked. +Do not configure an access profile to be requestable without first establishing a secure access request approval process for the access profile. + +- Multiple Account Options: Define the logic IdentityNow uses to provision access to an identity with multiple accounts on the source. + + +Refer to the following link for more information about access profiles. + + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/access-request-approvals.tag.mdx b/docs/sailpoint-api-beta/access-request-approvals.tag.mdx new file mode 100644 index 000000000..4626e2940 --- /dev/null +++ b/docs/sailpoint-api-beta/access-request-approvals.tag.mdx @@ -0,0 +1,36 @@ +--- +id: access-request-approvals +title: Access Request Approvals +description: Access Request Approvals +--- + + + +Use this API to implement and customize access request approval functionality. +With this functionality in place, administrators can delegate qualified users to review users' requests for access or managers' requests to revoke team members' access to applications, entitlements, or roles. +This enables more qualified users to review access requests and the others to spend their time on other tasks. + +In IdentityNow, users can request access to applications, entitlements, and roles, and managers can request that team members' access be revoked. +For applications and entitlements, administrators can set access profiles to require approval from the access profile owner, the application owner, the source owner, the requesting user's manager, or a governance group for access to be granted or revoked. +For roles, administrators can also set roles to allow access requests and require approval from the role owner, the requesting user's manager, or a governance group for access to be granted or revoked. +If the administrator designates a governance group as the required approver, any governance group member can approve the requests. + +When a user submits an access request, IdentityNow sends the first required approver in the queue an email notification, based on the access request configuration's approval and reminder escalation configuration. + +In Approvals in IdentityNow, required approvers can view pending access requests under the Requested tab and approve or deny them, or the approvers can reassign the requests to different reviewers for approval. +If the required approver approves the request and is the only reviewer required, IdentityNow grants or revokes access, based on the request. +If multiple reviewers are required, IdentityNow sends the request to the next reviewer in the queue, based on the access request configuration's approval reminder and escalation configuration. +The required approver can then view any completed access requests under the Reviewed tab. + +Refer to the following link for more information about access request approvals. + + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/access-request-recommendations.api.mdx b/docs/sailpoint-api-beta/access-request-recommendations.api.mdx new file mode 100644 index 000000000..40b5138de --- /dev/null +++ b/docs/sailpoint-api-beta/access-request-recommendations.api.mdx @@ -0,0 +1,79 @@ +--- +id: access-request-recommendations +sidebar_label: Identity Access Request Recommendations +hide_title: true +hide_table_of_contents: true +api: {"operationId":"accessRequestRecommendations","tags":["IAI Access Request Recommendations"],"description":"This API returns the access request recommendations for the specified identity. The default identity is *me* which indicates the current user.","parameters":[{"in":"query","name":"identity-id","description":"Get access request recommendations for an identityId. *me* indicates the current user.","schema":{"type":"string","default":"me"},"required":false,"example":"2c91808570313110017040b06f344ec9"},{"in":"query","name":"limit","description":"Max number of results to return.","required":false,"schema":{"type":"integer","minimum":0,"maximum":15,"default":15}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"include-translation-messages","description":"If *true* it will populate a list of translation messages in the response.","schema":{"type":"boolean","default":false},"required":false,"example":false},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter recommendations using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki-API-Standard-Collection-Parameters/ta-p/156407)\n\nFiltering is supported for the following fields and operators:\n\n**access.name**: *co*\n\n**access.type**: *eq, in*\n\n**access.description**: *co*"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **access.name, access.type**\n\nBy default the recommendations are sorted by highest confidence first."}],"responses":{"200":{"description":"List of access request recommendations for the identityId","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"identityId":{"type":"string","format":"UUID","description":"Identity ID for the recommendation","example":"2c91808570313110017040b06f344ec9"},"access":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"ID of access item being recommended.","example":"2c9180835d2e5168015d32f890ca1581"},"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE"],"description":"The type of access item.","example":"ACCESS_PROFILE"},"name":{"type":"string","description":"Name of the access item","example":"Employee-database-read-write"},"description":{"type":"string","description":"Description of the access item","example":"This item grants an employee read and write access to the database"}}},"ignored":{"type":"boolean","example":true,"description":"Whether or not the identity has already chosen to ignore this recommendation."},"requested":{"type":"boolean","example":true,"description":"Whether or not the identity has already chosen to request this recommendation."},"viewed":{"type":"boolean","example":true,"description":"Whether or not the identity reportedly viewed this recommendation."},"messages":{"type":"array","items":{"type":"object","properties":{"interpretation":{"type":"string","description":"Information about why the access item was recommended.","example":"95% of your peers have this access."}}}},"translationMessages":{"description":"The list of translation messages","type":"array","example":[{"key":"recommender-api.V2_WEIGHT_FEATURE_PRODUCT_INTERPRETATION_HIGH","values":["75","department"]}],"items":{"properties":{"key":{"type":"string","description":"The key of the translation message","example":"recommender-api.V2_WEIGHT_FEATURE_PRODUCT_INTERPRETATION_HIGH"},"values":{"type":"array","description":"The values corresponding to the translation messages","items":{"type":"string"},"example":["75","department"]}}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/ai-access-request-recommendations","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Identity Access Request Recommendations","description":{"content":"This API returns the access request recommendations for the specified identity. The default identity is *me* which indicates the current user.","type":"text/plain"},"url":{"path":["ai-access-request-recommendations"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Get access request recommendations for an identityId. *me* indicates the current user.","type":"text/plain"},"key":"identity-id","value":""},{"disabled":false,"description":{"content":"Max number of results to return.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"If *true* it will populate a list of translation messages in the response.","type":"text/plain"},"key":"include-translation-messages","value":""},{"disabled":false,"description":{"content":"Filter recommendations using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki-API-Standard-Collection-Parameters/ta-p/156407)\n\nFiltering is supported for the following fields and operators:\n\n**access.name**: *co*\n\n**access.type**: *eq, in*\n\n**access.description**: *co*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **access.name, access.type**\n\nBy default the recommendations are sorted by highest confidence first.","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Identity Access Request Recommendations + + + +This API returns the access request recommendations for the specified identity. The default identity is *me* which indicates the current user. + +

    UI`YS>xy0#4Nh~(u2P5hu1bHjz2KG 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 b)r*#4iNJT$*9@C#@)a;9 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 literal 0 HcmV?d00001 diff --git a/docs/idn_docs/triggers/available-event-triggers/img/provisioning-access-request.png b/docs/idn_docs/triggers/available-event-triggers/img/provisioning-access-request.png new file mode 100644 index 0000000000000000000000000000000000000000..8f005df6ffb8b18cfc104d8dedf368c23898e615 GIT binary patch literal 91618 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 W@9;Vv6xjrPju{+3ny+{A>VE(Lgb(ll literal 0 HcmV?d00001 diff --git a/docs/idn_docs/triggers/available-event-triggers/img/aggregation-diagram.png b/docs/idn_docs/triggers/available-event-triggers/img/aggregation-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..ca1ddaac8ad8c1d1e31101c7d08972696ea21c1d GIT binary patch literal 102730 zcmZsDWl&t}5-slT?(XjH?oN=w3GVJ5+#Q0uy95oc!3pjTgFAWTocpR?y?d*F%+&0u zJ^QonUaMD6l!}rxA{-tZ2nYzGtc-*j2naYi2neVT4Akc*{fQdxpD&;;YSLmLwbKMA zARrio}lLj(1DtqOG4~@2;x_g-l+9K-)J5-;U5ftX)YVMEiM{(EVfjCbTT~{ z>R|d{qnwik-%)+P+w{pEm}I#PFmj&p@$%Tr9zd8BkTEuNPR`li-{0KNp*W%_K~d_y z#Q^>fTN%TU*%-TjJ{5rcUxonL&9Z9*p$z(879>{?h%H4IcHX1*U)Mgr%^dUO(Wn03 z_Fau;J1kL-w5x96e_ZW@C;uS)UyoUi0p|%QRvW#fzyBYD01iY3K>x4Drwao!#Hqk& ze3cXYAH(|`+SY#$3{?4ZXd?G=6^q)ZwA=rmp{RVXS24Q?XKZx$D}C1gVc*1H^h0&2 zb|Pi+ye26%H$wQ{g_7N-YX8t7S&wtRSWD`zj%xrnvPzrUAd9ntnlWoBnF{etW-q*D z%4p*^r{Gi-&gT@X4e|Xf+WY6XRB$my2aD}90~s5kCi})Yv(1K16&w9cv2X&{b*TDS zAUeP{MR~55$7PV;XvAmh{llAWwT!a3YoVb?#$gu94Qtr4j?V5rXQ^BaV>_eKcuX&| z%_{bd&$L3}*)GbTswHesEjiq+#HI|Z z@y}+BdA^{&T-Q=;$psOjswVFl9dT(Fr>h+4y1gRkmghgq9<&hyhR^vA^kRoZnbMUz@Ar$RgpfwfYBj}c+CUMwtdy;>S) z0n1(EPJS?kz+0GDney)AURF1LECj*kvY6JVMK5JaQB6LanB=85yS}+^1YB4of+1iK zh|wSbnK>oZp0tA<`*tLyiC&@zZgI8J?=dh|3cgh{|CzHHC7Qy=0hs;yu{K&D$Up9n zli%rTWsjwUmTC=8Tf6i#fh$ahlHFJKf?mH9TWVa2Ie+b+ElF}hQ*X7(mξ5|b-n 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.~LuEd*_42TVVwyH6EUz&f{E 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 J7azkV{R=Q{T95z$ literal 0 HcmV?d00001 diff --git a/docs/idn_docs/triggers/available-event-triggers/img/identity-created-attributes-highlight.png b/docs/idn_docs/triggers/available-event-triggers/img/identity-created-attributes-highlight.png new file mode 100644 index 0000000000000000000000000000000000000000..388c54b8c61b2ae8c6ca97cbf8b57423d91a2589 GIT binary patch literal 126096 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 J7azkV{R=Q{T95z$ literal 0 HcmV?d00001 diff --git a/docs/idn_docs/triggers/available-event-triggers/img/identity-created-path.png b/docs/idn_docs/triggers/available-event-triggers/img/identity-created-path.png new file mode 100644 index 0000000000000000000000000000000000000000..e16d1ca6b01b28911ff491393b96705cbb90915b GIT binary patch literal 99607 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

  • newValue object
    + +The value of the identity attribute after it changed. + +
  • oneOf
  • string
  • boolean
  • string
  • identity object
    attributes object
    + +The attributes assigned to the identity. Attributes are determined by the identity profile. + +
    identity object
    attributes object
    + +The attributes assigned to the identity. Attributes are determined by the identity profile. + +
    recipient object
    requester object
    accountRequests object[]
    + +A list of provisioning instructions to perform on an account-by-account basis. + +
    source object
    + +Reference to the source being provisioned against. + +
    attributeRequests object[]
    + +A list of attributes as part of the provisioning transaction. + +
    searchResults object
    + +A preview of the search results for each object type. This includes a count as well as headers, and the first several rows of data, per object type. + +
    Account object
    + +A table of accounts that match the search criteria. + +
    Entitlement object
    + +A table of entitlements that match the search criteria. + +
    Identity object
    + +A table of identities that match the search criteria. + +
    attributes object
    + +The attributes of the account. The contents of attributes depends on the account schema for the source. + +
    attributes object
    + +The attributes of the account. The contents of attributes depends on the account schema for the source. + +
    attributes object
    + +The attributes of the account. The contents of attributes depends on the account schema for the source. + +
    actor object
    actor object
    actor object
    application object
    + +Details about the `CLUSTER` or `SOURCE` that initiated this event. + +
    attributes object
    + +Custom map of attributes for a source. This will only be populated if type is `SOURCE` and the source has a proxy. + +
    healthCheckResult object
    + +The results of the most recent health check. + +
    previousHealthCheckResult object
    + +The results of the last health check. + +
    exampleOutput object
    + +An example of the JSON payload that will be sent by the subscribed service to the trigger in response to an event. + +
  • oneOf
  • + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-work-items.api.mdx b/docs/sailpoint-api-beta/list-work-items.api.mdx new file mode 100644 index 000000000..ebea7bfd2 --- /dev/null +++ b/docs/sailpoint-api-beta/list-work-items.api.mdx @@ -0,0 +1,67 @@ +--- +id: list-work-items +sidebar_label: List Work Items +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listWorkItems","tags":["Work Items"],"description":"This gets a collection of work items belonging to either the specified user(admin required), or the current user.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"ownerId","schema":{"type":"string"},"description":"ID of the work item owner.","required":false}],"responses":{"200":{"description":"List of work items","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the work item","example":"2c9180835d2e5168015d32f890ca1581"},"requesterId":{"type":"string","description":"ID of the requester","example":"2c9180835d2e5168015d32f890ca1581"},"requesterDisplayName":{"type":"string","description":"The displayname of the requester","example":"John Smith"},"ownerId":{"type":"string","description":"The ID of the owner","example":"2c9180835d2e5168015d32f890ca1581"},"ownerName":{"type":"string","description":"The name of the owner","example":"Jason Smith"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"description":{"type":"string","description":"The description of the work item","example":"Create account on source 'AD'"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"type":{"type":"string","enum":["UNKNOWN","GENERIC","CERTIFICATION","REMEDIATION","DELEGATION","APPROVAL","VIOLATIONREVIEW","FORM","POLICYVIOLATION","CHALLENGE","IMPACTANALYSIS","SIGNOFF","EVENT","MANUALACTION","TEST"]},"remediationItems":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the certification","example":"2c9180835d2e5168015d32f890ca1581"},"targetId":{"type":"string","description":"The ID of the certification target","example":"2c9180835d2e5168015d32f890ca1581"},"targetName":{"type":"string","description":"The name of the certification target","example":"john.smith"},"targetDisplayName":{"type":"string","description":"The display name of the certification target","example":"emailAddress"},"applicationName":{"type":"string","description":"The name of the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute being certified","example":"phoneNumber"},"attributeOperation":{"type":"string","description":"The operation of the certification on the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute being certified","example":"512-555-1212"},"nativeIdentity":{"type":"string","description":"The native identity of the target","example":"jason.smith2"}}},"approvalItems":{"type":"object","properties":{"id":{"type":"string","description":"ID of the approval item","example":"2c9180835d2e5168015d32f890ca1581"},"account":{"type":"string","description":"The account referenced by the approval item","example":"john.smith"},"application":{"type":"string","description":"The name the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute","example":"emailAddress"},"attributeOperation":{"type":"string","description":"The operation of the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute","example":"a@b.com"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]}}},"name":{"type":"string","description":"The work item name","example":"Account Create"},"completed":{"type":"string","format":"date-time","example":"2018-10-19T13:49:37.385Z"},"numItems":{"type":"integer","description":"The number of items in the work item","example":19},"errors":{"type":"array","items":{"type":"string"},"example":["The work item ID that was specified was not found."]}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"method":"get","path":"/work-items","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Work Items","description":{"content":"This gets a collection of work items belonging to either the specified user(admin required), or the current user.","type":"text/plain"},"url":{"path":["work-items"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"ID of the work item owner.","type":"text/plain"},"key":"ownerId","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Work Items + + + +This gets a collection of work items belonging to either the specified user(admin required), or the current user. + +
    Query Parameters
    + +List of work items + +
    Schema array
      remediationItems object
      approvalItems object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-workflow-executions.api.mdx b/docs/sailpoint-api-beta/list-workflow-executions.api.mdx new file mode 100644 index 000000000..cd0b2c200 --- /dev/null +++ b/docs/sailpoint-api-beta/list-workflow-executions.api.mdx @@ -0,0 +1,75 @@ +--- +id: list-workflow-executions +sidebar_label: List Workflow Executions +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listWorkflowExecutions","tags":["Workflows"],"description":"This lists the executions for a given workflow","security":[{"bearerAuth":["sp:workflow:read"]}],"parameters":[{"name":"id","in":"path","description":"Id of the workflow","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"c17bea3a-574d-453c-9e04-4365fbf5af0b"}}],"responses":{"200":{"description":"List of workflow executions for the given workflow","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The workflow execution ID","example":"b393f4e2-4785-4d7f-ab27-3a6b8ded4c81"},"workflowId":{"type":"string","description":"The workflow ID","example":"d201c5d9-d37b-4a2f-af14-66414f39d568"},"requestId":{"type":"string","description":"This backend ID tracks a workflow request in the system. You can provide this ID in a customer support ticket for debugging purposes.","example":"41e12a74fa7b4a6a98ae47887b64acdb"},"startTime":{"type":"string","format":"date-time","description":"The date/time the workflow started","example":"2022-02-07T20:13:29.356648026Z"},"closeTime":{"type":"string","format":"date-time","description":"The date/time the workflow ended","example":"2022-02-07T20:13:31.682410165Z"},"status":{"description":"The workflow execution status","type":"string","enum":["Completed","Failed","Canceled","Running"],"example":"Completed"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/workflows/{id}/executions","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Workflow Executions","description":{"content":"This lists the executions for a given workflow","type":"text/plain"},"url":{"path":["workflows",":id","executions"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Id of the workflow","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Workflow Executions + + + +This lists the executions for a given workflow + +
    Path Parameters
    + +List of workflow executions for the given workflow + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-workflow-library-actions.api.mdx b/docs/sailpoint-api-beta/list-workflow-library-actions.api.mdx new file mode 100644 index 000000000..fe87c433d --- /dev/null +++ b/docs/sailpoint-api-beta/list-workflow-library-actions.api.mdx @@ -0,0 +1,79 @@ +--- +id: list-workflow-library-actions +sidebar_label: List Workflow Library Actions +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listWorkflowLibraryActions","tags":["Workflows"],"description":"This lists the workflow actions available to you.","externalDocs":{"description":"Additional documentation for each action","url":"https://documentation.sailpoint.com/saas/help/workflows/workflow-steps.html#actions"},"parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"filters","required":false,"schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#filtering-results)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq*","example":"id eq \"sp:create-campaign\""}],"security":[{"bearerAuth":["sp:workflow:read"]}],"responses":{"200":{"description":"List of workflow actions","content":{"application/json":{"schema":{"type":"array","items":{"title":"Workflow Action","type":"object","properties":{"id":{"type":"string","description":"Action ID. This is a static namespaced ID for the action","example":"sp:create-campaign"},"name":{"type":"string","description":"Action Name","example":"Create Certification Campaign"},"description":{"type":"string","description":"Action Description","example":"Generates a certification campaign."},"formFields":{"type":"array","description":"One or more inputs that the action accepts","items":{"type":"object","properties":{"helpText":{"type":"string","description":"Describes the form field in the UI","example":"The name to give to this certification campaign."},"label":{"type":"string","description":"A human readable name for this form field in the UI","example":"Campaign Name"},"name":{"type":"string","description":"The name of the input attribute","example":"name"},"required":{"type":"boolean","description":"Denotes if this field is a required attribute","example":false},"type":{"description":"The type of the form field","enum":["text","textarea","boolean","email","url","number","json","checkbox"],"example":"text"}}}},"outputSchema":{"type":"object","description":"Defines the output schema, if any, that this action produces.","example":{"definitions":{},"properties":{"autoRevokeAllowed":{"$id":"#sp:create-campaign/autoRevokeAllowed","default":true,"examples":[false],"title":"autoRevokeAllowed","type":"boolean"},"deadline":{"$id":"#sp:create-campaign/deadline","default":"","examples":["2020-12-25T06:00:00.468Z"],"format":"date-time","pattern":"^.*$","title":"deadline","type":"string"},"description":{"$id":"#sp:create-campaign/description","default":"","examples":["A review of everyone's access by their manager."],"pattern":"^.*$","title":"description","type":"string"},"emailNotificationEnabled":{"$id":"#sp:create-campaign/emailNotificationEnabled","default":true,"examples":[false],"title":"emailNotificationEnabled","type":"boolean"},"filter":{"$id":"#sp:create-campaign/filter","properties":{"id":{"$id":"#sp:create-campaign/filter/id","default":"","examples":["e0adaae69852e8fe8b8a3d48e5ce757c"],"pattern":"^.*$","title":"id","type":"string"},"type":{"$id":"#sp:create-campaign/filter/type","default":"","examples":["CAMPAIGN_FILTER"],"pattern":"^.*$","title":"type","type":"string"}},"title":"filter","type":"object"},"id":{"$id":"#sp:create-campaign/id","default":"","examples":["2c918086719eec070171a7e3355a360a"],"pattern":"^.*$","title":"id","type":"string"},"name":{"$id":"#sp:create-campaign/name","default":"","examples":["Manager Review"],"pattern":"^.*$","title":"name","type":"string"},"recommendationsEnabled":{"$id":"#sp:create-campaign/recommendationsEnabled","default":true,"examples":[false],"title":"recommendationEnabled","type":"boolean"},"type":{"$id":"#sp:create-campaign/type","default":"","examples":["MANAGER"],"pattern":"^.*$","title":"type","type":"string"}},"title":"sp:create-campaign","type":"object"}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/workflow-library/actions","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Workflow Library Actions","description":{"content":"This lists the workflow actions available to you.","type":"text/plain"},"url":{"path":["workflow-library","actions"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#filtering-results)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq*","type":"text/plain"},"key":"filters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Workflow Library Actions + + + +This lists the workflow actions available to you. + +
    Query Parameters
    + +List of workflow actions + +
    Schema array
      formFields object[]
      + +One or more inputs that the action accepts + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-workflow-library-operators.api.mdx b/docs/sailpoint-api-beta/list-workflow-library-operators.api.mdx new file mode 100644 index 000000000..cda5d82dd --- /dev/null +++ b/docs/sailpoint-api-beta/list-workflow-library-operators.api.mdx @@ -0,0 +1,79 @@ +--- +id: list-workflow-library-operators +sidebar_label: List Workflow Library Operators +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listWorkflowLibraryOperators","tags":["Workflows"],"description":"This lists the workflow operators available to you","security":[{"bearerAuth":["sp:workflow:read"]}],"responses":{"200":{"description":"List of workflow operators","content":{"application/json":{"schema":{"type":"array","items":{"title":"Workflow Operator","type":"object","properties":{"id":{"type":"string","description":"Operator ID.","example":"sp:compare-boolean"},"name":{"type":"string","description":"Operator friendly name","example":"Compare Boolean Values"},"description":{"type":"string","description":"Description of the operator","example":"Compare two boolean values and decide what happens based on the result."},"formFields":{"type":"array","description":"One or more inputs that the operator accepts","items":{"type":"object","properties":{"helpText":{"type":"string","description":"Describes the form field in the UI","example":"The name to give to this certification campaign."},"label":{"type":"string","description":"A human readable name for this form field in the UI","example":"Campaign Name"},"name":{"type":"string","description":"The name of the input attribute","example":"name"},"required":{"type":"boolean","description":"Denotes if this field is a required attribute","example":false},"type":{"description":"The type of the form field","enum":["text","textarea","boolean","email","url","number","json","checkbox"],"example":"text"}}},"example":[{"description":"Enter the JSONPath to a value from the input to compare to Variable B.","helpText":"","label":"Variable A","name":"variableA.$","required":true,"type":"text"},{"helpText":"Select an operation.","label":"Operation","name":"operator","options":[{"label":"Equals","value":"BooleanEquals"}],"required":true,"type":"select"},{"description":"Enter the JSONPath to a value from the input to compare to Variable A.","helpText":"","label":"Variable B","name":"variableB.$","required":false,"type":"text"},{"description":"Enter True or False.","helpText":"","label":"Variable B","name":"variableB","required":false,"type":"text"}]}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/workflow-library/operators","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Workflow Library Operators","description":{"content":"This lists the workflow operators available to you","type":"text/plain"},"url":{"path":["workflow-library","operators"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Workflow Library Operators + + + +This lists the workflow operators available to you + +
    + +List of workflow operators + +
    Schema array
      formFields object[]
      + +One or more inputs that the operator accepts + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-workflow-library-triggers.api.mdx b/docs/sailpoint-api-beta/list-workflow-library-triggers.api.mdx new file mode 100644 index 000000000..dd3f71f60 --- /dev/null +++ b/docs/sailpoint-api-beta/list-workflow-library-triggers.api.mdx @@ -0,0 +1,79 @@ +--- +id: list-workflow-library-triggers +sidebar_label: List Workflow Library Triggers +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listWorkflowLibraryTriggers","tags":["Workflows"],"description":"This lists the workflow triggers available to you","externalDocs":{"description":"Additional documentation for each trigger","url":"https://documentation.sailpoint.com/saas/help/workflows/workflow-steps.html#triggers"},"parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"filters","required":false,"schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#filtering-results)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq*","example":"id eq \"idn:identity-attributes-changed\""}],"security":[{"bearerAuth":["sp:workflow:read"]}],"responses":{"200":{"description":"List of workflow triggers","content":{"application/json":{"schema":{"type":"array","items":{"title":"Workflow Trigger","type":"object","properties":{"id":{"type":"string","description":"Trigger ID. This is a static namespaced ID for the trigger.","example":"idn:identity-attributes-changed"},"type":{"description":"Trigger type","enum":["EVENT","SCHEDULED","EXTERNAL"],"example":"EVENT"},"name":{"type":"string","description":"Trigger Name","example":"Identity Attributes Changed"},"description":{"type":"string","description":"Trigger Description","example":"One or more identity attributes changed."},"inputExample":{"type":"object","description":"Example trigger payload if applicable","externalDocs":{"description":"List of triggers and their input schemas","url":"https://developer.sailpoint.com/triggers/available_event_triggers.html#request"},"example":{"changes":[{"attribute":"department","newValue":"marketing","oldValue":"sales"},{"attribute":"manager","newValue":{"id":"ee769173319b41d19ccec6c235423236c","name":"mean.guy","type":"IDENTITY"},"oldValue":{"id":"ee769173319b41d19ccec6c235423237b","name":"nice.guy","type":"IDENTITY"}},{"attribute":"email","newValue":"john.doe@gmail.com","oldValue":"john.doe@hotmail.com"}],"identity":{"id":"ee769173319b41d19ccec6cea52f237b","name":"john.doe","type":"IDENTITY"}}},"formFields":{"type":"array","description":"One or more inputs that the trigger accepts","example":[],"items":{"type":"object","properties":{"helpText":{"type":"string","description":"Describes the form field in the UI","example":"The name to give to this certification campaign."},"label":{"type":"string","description":"A human readable name for this form field in the UI","example":"Campaign Name"},"name":{"type":"string","description":"The name of the input attribute","example":"name"},"required":{"type":"boolean","description":"Denotes if this field is a required attribute","example":false},"type":{"description":"The type of the form field","enum":["text","textarea","boolean","email","url","number","json","checkbox"],"example":"text"}}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/workflow-library/triggers","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Workflow Library Triggers","description":{"content":"This lists the workflow triggers available to you","type":"text/plain"},"url":{"path":["workflow-library","triggers"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#filtering-results)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq*","type":"text/plain"},"key":"filters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Workflow Library Triggers + + + +This lists the workflow triggers available to you + +
    Query Parameters
    + +List of workflow triggers + +
    Schema array
      formFields object[]
      + +One or more inputs that the trigger accepts + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/list-workflows.api.mdx b/docs/sailpoint-api-beta/list-workflows.api.mdx new file mode 100644 index 000000000..637e2d1f4 --- /dev/null +++ b/docs/sailpoint-api-beta/list-workflows.api.mdx @@ -0,0 +1,75 @@ +--- +id: list-workflows +sidebar_label: List Workflows +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listWorkflows","tags":["Workflows"],"description":"List all workflows in the tenant.","security":[{"bearerAuth":["sp:workflow:read"]}],"responses":{"200":{"description":"List of workflows","content":{"application/json":{"schema":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","description":"Workflow ID. This is a UUID generated upon creation.","example":"d201c5e9-d37b-4aff-af14-66414f39d569"},"executionCount":{"type":"integer","format":"int32","description":"The number of times this workflow has been executed","example":2},"failureCount":{"type":"integer","format":"int32","description":"The number of times this workflow has failed during execution","example":0},"created":{"type":"string","format":"date-time","description":"The date and time the workflow was created","example":"2022-01-10T16:06:16.636381447Z"},"creator":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity that created the workflow.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}},"example":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}}}},{"type":"object","properties":{"name":{"type":"string","description":"The name of the workflow","example":"Send Email"},"owner":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity that owns the workflow. The owner's permissions in IDN will determine what actions the workflow is allowed to perform. Ownership can be changed by updating the owner in a PUT or PATCH request.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}},"example":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}},"description":{"type":"string","description":"Description of what the workflow accomplishes","example":"Send an email to the identity who's attributes changed."},"definition":{"type":"object","description":"The map of steps that the workflow will execute.","properties":{"start":{"type":"string","description":"The name of the starting step.","example":"Send Email Test"},"steps":{"type":"object","description":"One or more step objects that comprise this workflow. Please see the Workflow documentation to see the JSON schema for each step type.","additionalProperties":true,"example":{"Send Email":{"actionId":"sp:send-email","attributes":{"body":"This is a test","from":"sailpoint@sailpoint.com","recipientId.$":"$.identity.id","subject":"test"},"nextStep":"success","selectResult":null,"type":"action"},"success":{"type":"success"}}}}},"enabled":{"type":"boolean","description":"Enable or disable the workflow. Workflows cannot be created in an enabled state.","default":false,"example":false},"trigger":{"type":"object","description":"The trigger that starts the workflow","required":["type","attributes"],"properties":{"type":{"enum":["EVENT","EXTERNAL","SCHEDULED"],"example":"EVENT","description":"The trigger type"},"attributes":{"description":"Workflow Trigger Attributes.","oneOf":[{"title":"Event Trigger Attributes","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The unique ID of the trigger","example":"idn:identity-attributes-changed"},"filter":{"type":"string","description":"JSON path expression that will limit which events the trigger will fire on","example":"$.changes[?(@.attribute == 'manager')]"}}},{"title":"Scheduled Trigger Attributes","type":"object","required":["cronString"],"properties":{"cronString":{"type":"string","description":"A valid CRON expression","externalDocs":{"description":"CRON expression editor","url":"https://crontab.guru/"},"example":"0 * */3 */5 *"}}}]}}}}}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/workflows","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Workflows","description":{"content":"List all workflows in the tenant.","type":"text/plain"},"url":{"path":["workflows"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Workflows + + + +List all workflows in the tenant. + +
    + +List of workflows + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/managed-clients.tag.mdx b/docs/sailpoint-api-beta/managed-clients.tag.mdx new file mode 100644 index 000000000..9db098417 --- /dev/null +++ b/docs/sailpoint-api-beta/managed-clients.tag.mdx @@ -0,0 +1,19 @@ +--- +id: managed-clients +title: Managed Clients +description: Managed Clients +--- + + + +Read and write operations for managing client data and statuses + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/managed-clusters.tag.mdx b/docs/sailpoint-api-beta/managed-clusters.tag.mdx new file mode 100644 index 000000000..78adfb520 --- /dev/null +++ b/docs/sailpoint-api-beta/managed-clusters.tag.mdx @@ -0,0 +1,19 @@ +--- +id: managed-clusters +title: Managed Clusters +description: Managed Clusters +--- + + + +Operations for accessing and managing client Clusters, including Log Configuration + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/mfa-configuration.tag.mdx b/docs/sailpoint-api-beta/mfa-configuration.tag.mdx new file mode 100644 index 000000000..8e1b715a9 --- /dev/null +++ b/docs/sailpoint-api-beta/mfa-configuration.tag.mdx @@ -0,0 +1,19 @@ +--- +id: mfa-configuration +title: MFA Configuration +description: MFA Configuration +--- + + + +Configure and test multifactor authentication (MFA) methods + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-approval-get.api.mdx b/docs/sailpoint-api-beta/non-employee-approval-get.api.mdx new file mode 100644 index 000000000..a9e68565a --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-approval-get.api.mdx @@ -0,0 +1,91 @@ +--- +id: non-employee-approval-get +sidebar_label: Get a non-employee approval item detail +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeApprovalGet","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"Approves a non-employee approval request and notifies the next approver.","parameters":[{"in":"path","name":"id","description":"Non-Employee approval item id (UUID)","required":true,"schema":{"type":"string"}},{"in":"query","name":"include-detail","description":"The object nonEmployeeRequest will not be included detail when set to false. *Default value is true*","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Non-Employee approval item object.","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee approval item id","example":"2c1e388b-1e55-4b0a-ab5c-897f1204159c"},"approver":{"description":"Reference to the associated Identity","type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}},"accountName":{"type":"string","description":"Requested identity account name","example":"test.account"},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"approvalOrder":{"type":"number","description":"Approval order","example":1},"comment":{"type":"string","description":"comment of approver"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}},{"type":"object","properties":{"nonEmployeeRequest":{"description":"Non-Employee request associated to this approval","allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee request id."},"requester":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}},"example":{"type":"IDENTITY","id":"2c9180866166b5b0016167c32ef31a66","name":"William Smith"}}}},{"type":"object","properties":{"accountName":{"type":"string","description":"Requested identity account name.","example":"william.smith"},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"nonEmployeeSource":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},{"type":"object","properties":{"schemaAttributes":{"description":"List of schema attributes associated with this non-employee source.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"UUID","example":"ac110005-7156-1150-8171-5b292e3e0084","description":"Schema Attribute Id"},"system":{"type":"boolean","description":"True if this schema attribute is mandatory on all non-employees sources.","example":true},"modified":{"type":"string","format":"date-time","description":"When the schema attribute was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the schema attribute was created.","example":"2019-08-23T18:40:35.772Z"},"type":{"type":"string","enum":["TEXT","DATE","IDENTITY"],"description":"Enum representing the type of data a schema attribute accepts."},"label":{"type":"string","description":"Label displayed on the UI for this schema attribute.","example":"Account Name"},"technicalName":{"type":"string","description":"The technical name of the attribute. Must be unique per source.","example":"account.name"},"helpText":{"type":"string","description":"help text displayed by UI.","example":"The unique identifier for the account"},"placeholder":{"type":"string","description":"Hint text that fills UI box.","example":"Enter a unique user name for this account."},"required":{"type":"boolean","description":"If true, the schema attribute is required for all non-employees in the source","example":true}},"required":["type","technicalName","label"]}}}}]},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee."},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"comment":{"type":"string","description":"comment of requester"},"completionDate":{"type":"string","format":"date-time","description":"When the request was completely approved.","example":"2020-03-24T11:11:41.139-05:00"},"startDate":{"type":"string","format":"date","description":"Non-Employee employment start date.","example":"2020-03-24"},"endDate":{"type":"string","format":"date","description":"Non-Employee employment end date.","example":"2021-03-25"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2020-03-24T11:11:41.139-05:00"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2020-03-24T11:11:41.139-05:00"}}}]}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-approvals/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get a non-employee approval item detail","description":{"content":"Approves a non-employee approval request and notifies the next approver.","type":"text/plain"},"url":{"path":["non-employee-approvals",":id"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The object nonEmployeeRequest will not be included detail when set to false. *Default value is true*","type":"text/plain"},"key":"include-detail","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) Non-Employee approval item id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a non-employee approval item detail + + + +Approves a non-employee approval request and notifies the next approver. + +
    Path Parameters
    Query Parameters
    + +Non-Employee approval item object. + +
    Schema
      approver object
      + +Reference to the associated Identity + +
      nonEmployeeRequest object
      + +Non-Employee request associated to this approval + +
      requester object
      nonEmployeeSource object
      schemaAttributes object[]
      + +List of schema attributes associated with this non-employee source. + +
      data object
      + +Attribute blob/bag for a non-employee. + +
    • property name* string
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-approval-list.api.mdx b/docs/sailpoint-api-beta/non-employee-approval-list.api.mdx new file mode 100644 index 000000000..20bb4d30d --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-approval-list.api.mdx @@ -0,0 +1,75 @@ +--- +id: non-employee-approval-list +sidebar_label: Get List of Non-Employee Approval Requests +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeApprovalList","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This gets a list of non-employee approval requests.","parameters":[{"in":"query","name":"requested-for","schema":{"type":"string"},"description":"The identity for whom the request was made. *me* indicates the current user.","required":false},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)

    Filtering is supported for the following fields and operators:

    **approvalStatus**: *eq*

    *Example:* approvalStatus eq \"PENDING\""},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#toc-hId-2058949)

    Sorting is supported for the following fields: **created, modified**"}],"responses":{"200":{"description":"List of approval items.","content":{"application/json":{"schema":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee approval item id","example":"2c1e388b-1e55-4b0a-ab5c-897f1204159c"},"approver":{"description":"Reference to the associated Identity","type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}},"accountName":{"type":"string","description":"Requested identity account name","example":"test.account"},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"approvalOrder":{"type":"number","description":"Approval order","example":1},"comment":{"type":"string","description":"comment of approver"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}},{"type":"object","properties":{"nonEmployeeRequest":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee request id."},"requester":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}},"example":{"type":"IDENTITY","id":"2c9180866166b5b0016167c32ef31a66","name":"William Smith"}}}}}}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-approvals","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get List of Non-Employee Approval Requests","description":{"content":"This gets a list of non-employee approval requests.","type":"text/plain"},"url":{"path":["non-employee-approvals"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The identity for whom the request was made. *me* indicates the current user.","type":"text/plain"},"key":"requested-for","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)

    Filtering is supported for the following fields and operators:

    **approvalStatus**: *eq*

    *Example:* approvalStatus eq \"PENDING\"","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#toc-hId-2058949)

    Sorting is supported for the following fields: **created, modified**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get List of Non-Employee Approval Requests + + + +This gets a list of non-employee approval requests. + +
    Query Parameters

      Filtering is supported for the following fields and operators:

      **approvalStatus**: *eq*

      *Example:* approvalStatus eq \"PENDING\""}}>

      Sorting is supported for the following fields: **created, modified**"}}>
    + +List of approval items. + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-approval-summary.api.mdx b/docs/sailpoint-api-beta/non-employee-approval-summary.api.mdx new file mode 100644 index 000000000..fe7737a92 --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-approval-summary.api.mdx @@ -0,0 +1,75 @@ +--- +id: non-employee-approval-summary +sidebar_label: Get Summary of Non-Employee Approval Requests +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeApprovalSummary","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This request will retrieve a summary of non-employee approval requests.

    There are two contextual uses for the `requested-for` path parameter:
    1. The current user is the Org Admin, in which case he or she may request a summary of all non-employee approval requests assigned to a particular approver by passing in that approver's id.
    2. The current user is an approver, in which case \"me\" should be provided as the `requested-for` value. This will provide the approver with a summary of the approval items assigned to him or her.","parameters":[{"in":"path","name":"requested-for","schema":{"type":"string"},"description":"The identity (UUID) of the approver for whom for whom the summary is being retrieved. Use \"me\" instead to indicate the current user.","required":true}],"responses":{"200":{"description":"summary of non-employee approval requests","content":{"application/json":{"schema":{"type":"object","properties":{"approved":{"type":"number","description":"The number of approved non-employee approval requests."},"pending":{"type":"number","description":"The number of pending non-employee approval requests."},"rejected":{"type":"number","description":"The number of rejected non-employee approval requests."}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-approvals/summary/{requested-for}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Summary of Non-Employee Approval Requests","description":{"content":"This request will retrieve a summary of non-employee approval requests.

    There are two contextual uses for the `requested-for` path parameter:
    1. The current user is the Org Admin, in which case he or she may request a summary of all non-employee approval requests assigned to a particular approver by passing in that approver's id.
    2. The current user is an approver, in which case \"me\" should be provided as the `requested-for` value. This will provide the approver with a summary of the approval items assigned to him or her.","type":"text/plain"},"url":{"path":["non-employee-approvals","summary",":requested-for"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The identity (UUID) of the approver for whom for whom the summary is being retrieved. Use \"me\" instead to indicate the current user.","type":"text/plain"},"type":"any","value":"","key":"requested-for"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Summary of Non-Employee Approval Requests + + + +This request will retrieve a summary of non-employee approval requests.<br><br> There are two contextual uses for the `requested-for` path parameter:<br> 1. The current user is the Org Admin, in which case he or she may request a summary of all non-employee approval requests assigned to a particular approver by passing in that approver's id.<br> 2. The current user is an approver, in which case "me" should be provided as the `requested-for` value. This will provide the approver with a summary of the approval items assigned to him or her. + +
    Path Parameters
    + +summary of non-employee approval requests + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-approve-request.api.mdx b/docs/sailpoint-api-beta/non-employee-approve-request.api.mdx new file mode 100644 index 000000000..819038dc5 --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-approve-request.api.mdx @@ -0,0 +1,79 @@ +--- +id: non-employee-approve-request +sidebar_label: Approve a Non-Employee Request +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeApproveRequest","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"Approves a non-employee approval request and notifies the next approver.","parameters":[{"in":"path","name":"id","description":"Non-Employee approval item id (UUID)","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"comment":{"type":"string","description":"Comment on the approval item.","maxLength":4000}}}}}},"responses":{"200":{"description":"Non-Employee approval item object.","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee approval item id","example":"2c1e388b-1e55-4b0a-ab5c-897f1204159c"},"approver":{"description":"Reference to the associated Identity","type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}},"accountName":{"type":"string","description":"Requested identity account name","example":"test.account"},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"approvalOrder":{"type":"number","description":"Approval order","example":1},"comment":{"type":"string","description":"comment of approver"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}},{"type":"object","properties":{"nonEmployeeRequest":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee request id."},"requester":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}},"example":{"type":"IDENTITY","id":"2c9180866166b5b0016167c32ef31a66","name":"William Smith"}}}}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/non-employee-approvals/{id}/approve","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"comment":"string"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Approve a Non-Employee Request","description":{"content":"Approves a non-employee approval request and notifies the next approver.","type":"text/plain"},"url":{"path":["non-employee-approvals",":id","approve"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Non-Employee approval item id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Approve a Non-Employee Request + + + +Approves a non-employee approval request and notifies the next approver. + +
    Path Parameters
    Request Body required
    + +Non-Employee approval item object. + +
    Schema
      approver object
      + +Reference to the associated Identity + +
      nonEmployeeRequest object
      requester object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-bulk-upload-status.api.mdx b/docs/sailpoint-api-beta/non-employee-bulk-upload-status.api.mdx new file mode 100644 index 000000000..fbf1a20e0 --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-bulk-upload-status.api.mdx @@ -0,0 +1,80 @@ +--- +id: non-employee-bulk-upload-status +sidebar_label: Obtain the status of bulk upload on the source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeBulkUploadStatus","tags":["Non-Employee Lifecycle Management"],"description":"The nonEmployeeBulkUploadStatus API returns the status of the newest bulk upload job for the specified source.\n\nRequest will need the following scope:\n\n'idn:nesr:read'\n","parameters":[{"in":"path","name":"id","description":"Source ID (UUID)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Status of the newest bulk-upload job, if any.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","ERROR"],"description":"Returns the following values indicating the progress or result of the bulk upload job.\n\"PENDING\" means the job is queued and waiting to be processed.\n\"IN_PROGRESS\" means the job is currently being processed.\n\"COMPLETED\" means the job has been completed without any errors.\n\"ERROR\" means the job failed to process with errors.\nnull means job has been submitted to the source.\n","example":"PENDING"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-sources/{id}/non-employee-bulk-upload/status","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Obtain the status of bulk upload on the source","description":{"content":"The nonEmployeeBulkUploadStatus API returns the status of the newest bulk upload job for the specified source.\n\nRequest will need the following scope:\n\n'idn:nesr:read'\n","type":"text/plain"},"url":{"path":["non-employee-sources",":id","non-employee-bulk-upload","status"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Source ID (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Obtain the status of bulk upload on the source + + + +The nonEmployeeBulkUploadStatus API returns the status of the newest bulk upload job for the specified source. + +Request will need the following scope: + +'idn:nesr:read' + + +
    Path Parameters
    + +Status of the newest bulk-upload job, if any. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-export-source-schema-template.api.mdx b/docs/sailpoint-api-beta/non-employee-export-source-schema-template.api.mdx new file mode 100644 index 000000000..b7f3abc95 --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-export-source-schema-template.api.mdx @@ -0,0 +1,89 @@ +--- +id: non-employee-export-source-schema-template +sidebar_label: Exports Source Schema Template +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeExportSourceSchemaTemplate","tags":["Non-Employee Lifecycle Management"],"description":"This requests a download for the Source Schema Template for a provided source.\nRequest will require the following security scope:\nidn:nesr:read'","parameters":[{"in":"path","name":"id","description":"Source Id (UUID)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Exported Source Schema Template","content":{"text/csv":{"example":"accountName,firstName,lastName,phone,email,manager,startDate,endDate\n"}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-sources/{id}/schema-attributes-template/download","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Exports Source Schema Template","description":{"content":"This requests a download for the Source Schema Template for a provided source.\nRequest will require the following security scope:\nidn:nesr:read'","type":"text/plain"},"url":{"path":["non-employee-sources",":id","schema-attributes-template","download"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Source Id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"text/csv"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Exports Source Schema Template + + + +This requests a download for the Source Schema Template for a provided source. +Request will require the following security scope: +idn:nesr:read' + +
    Path Parameters
    + +Exported Source Schema Template + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-lifecycle-management.tag.mdx b/docs/sailpoint-api-beta/non-employee-lifecycle-management.tag.mdx new file mode 100644 index 000000000..178b6e401 --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-lifecycle-management.tag.mdx @@ -0,0 +1,15 @@ +--- +id: non-employee-lifecycle-management +title: Non-Employee Lifecycle Management +description: Non-Employee Lifecycle Management +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-record-bulk-delete.api.mdx b/docs/sailpoint-api-beta/non-employee-record-bulk-delete.api.mdx new file mode 100644 index 000000000..5d4e7bdae --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-record-bulk-delete.api.mdx @@ -0,0 +1,81 @@ +--- +id: non-employee-record-bulk-delete +sidebar_label: Delete Multiple Non-Employee Records +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRecordBulkDelete","tags":["Non-Employee Lifecycle Management"],"description":"This request will delete multiple non-employee records based on the non-employee ids provided.\nRequest will require the following scope:\n'idn:nesr:delete'","requestBody":{"description":"Non-Employee bulk delete request body.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"description":"List of non-employee ids.","type":"array","items":{"type":"string","format":"uuid"}}},"required":["ids"]}}}},"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/non-employee-records/bulk-delete","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"ids":["3fa85f64-5717-4562-b3fc-2c963f66afa6"]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete Multiple Non-Employee Records","description":{"content":"This request will delete multiple non-employee records based on the non-employee ids provided.\nRequest will require the following scope:\n'idn:nesr:delete'","type":"text/plain"},"url":{"path":["non-employee-records","bulk-delete"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Multiple Non-Employee Records + + + +This request will delete multiple non-employee records based on the non-employee ids provided. +Request will require the following scope: +'idn:nesr:delete' + +
    Request Body required
    + +Non-Employee bulk delete request body. + +
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-record-creation.api.mdx b/docs/sailpoint-api-beta/non-employee-record-creation.api.mdx new file mode 100644 index 000000000..08c08051d --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-record-creation.api.mdx @@ -0,0 +1,89 @@ +--- +id: non-employee-record-creation +sidebar_label: Create Non-Employee Record +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRecordCreation","tags":["Non-Employee Lifecycle Management"],"description":"This request will create a non-employee record.\nRequest will require the following security scope:\n'idn:nesr:create'","requestBody":{"description":"Non-Employee record creation request body.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountName":{"type":"string","description":"Requested identity account name.","example":"william.smith"},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"sourceId":{"type":"string","description":"Non-Employee's source id.","example":"2c91808568c529c60168cca6f90c1313"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee, 10 attributes is the maximum size supported."},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2020-03-24T00:00:00-05:00"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2021-03-25T00:00:00-05:00"}},"required":["accountName","firstName","lastName","email","phone","manager","sourceId","startDate","endDate"]}}}},"responses":{"200":{"description":"Created non-employee record.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee record id."},"accountName":{"type":"string","description":"Requested identity account name."},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"sourceId":{"type":"string","description":"Non-Employee's source id.","example":"2c91808568c529c60168cca6f90c1313"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee."},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2019-08-23T18:52:59.162Z"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2020-08-23T18:52:59.162Z"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/non-employee-records","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"accountName":"william.smith","firstName":"William","lastName":"Smith","email":"william.smith@example.com","phone":"5555555555","manager":"jane.doe","sourceId":"2c91808568c529c60168cca6f90c1313","data":{},"startDate":"2020-03-24T00:00:00-05:00","endDate":"2021-03-25T00:00:00-05:00"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create Non-Employee Record","description":{"content":"This request will create a non-employee record.\nRequest will require the following security scope:\n'idn:nesr:create'","type":"text/plain"},"url":{"path":["non-employee-records"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Non-Employee Record + + + +This request will create a non-employee record. +Request will require the following security scope: +'idn:nesr:create' + +
    Request Body required
    + +Non-Employee record creation request body. + +
      data object
      + +Attribute blob/bag for a non-employee, 10 attributes is the maximum size supported. + +
    • property name* string
    + +Created non-employee record. + +
    Schema
      data object
      + +Attribute blob/bag for a non-employee. + +
    • property name* string
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-record-delete.api.mdx b/docs/sailpoint-api-beta/non-employee-record-delete.api.mdx new file mode 100644 index 000000000..f656aaef7 --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-record-delete.api.mdx @@ -0,0 +1,77 @@ +--- +id: non-employee-record-delete +sidebar_label: Delete Non-Employee Record +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRecordDelete","tags":["Non-Employee Lifecycle Management"],"description":"This request will delete a non-employee record.\nRequest will require the following security scope:\n'idn:nesr:delete'","parameters":[{"in":"path","name":"id","description":"Non-Employee record id (UUID)","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/non-employee-records/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete Non-Employee Record","description":{"content":"This request will delete a non-employee record.\nRequest will require the following security scope:\n'idn:nesr:delete'","type":"text/plain"},"url":{"path":["non-employee-records",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Non-Employee record id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Non-Employee Record + + + +This request will delete a non-employee record. +Request will require the following security scope: +'idn:nesr:delete' + +
    Path Parameters
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-record-get.api.mdx b/docs/sailpoint-api-beta/non-employee-record-get.api.mdx new file mode 100644 index 000000000..a592bed6c --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-record-get.api.mdx @@ -0,0 +1,81 @@ +--- +id: non-employee-record-get +sidebar_label: Get a Non-Employee Record +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRecordGet","tags":["Non-Employee Lifecycle Management"],"description":"This gets a non-employee record.\nRequest will require the following scope:\n'idn:nesr:read'","parameters":[{"in":"path","name":"id","description":"Non-Employee record id (UUID)","required":true,"example":"2c91808b6ef1d43e016efba0ce470904","schema":{"type":"string"}}],"responses":{"200":{"description":"Non-Employee record object","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee record id."},"accountName":{"type":"string","description":"Requested identity account name."},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"sourceId":{"type":"string","description":"Non-Employee's source id.","example":"2c91808568c529c60168cca6f90c1313"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee."},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2019-08-23T18:52:59.162Z"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2020-08-23T18:52:59.162Z"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-records/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get a Non-Employee Record","description":{"content":"This gets a non-employee record.\nRequest will require the following scope:\n'idn:nesr:read'","type":"text/plain"},"url":{"path":["non-employee-records",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Non-Employee record id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a Non-Employee Record + + + +This gets a non-employee record. +Request will require the following scope: +'idn:nesr:read' + +
    Path Parameters
    + +Non-Employee record object + +
    Schema
      data object
      + +Attribute blob/bag for a non-employee. + +
    • property name* string
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-record-list.api.mdx b/docs/sailpoint-api-beta/non-employee-record-list.api.mdx new file mode 100644 index 000000000..e28dab757 --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-record-list.api.mdx @@ -0,0 +1,79 @@ +--- +id: non-employee-record-list +sidebar_label: List Non-Employee Records +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRecordList","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This gets a list of non-employee records.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","required":false,"name":"sorters","schema":{"type":"string","format":"comma-separated"},"example":"accountName,sourceId","description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#toc-hId-2058949)

    Sorting is supported for the following fields: **id, accountName, sourceId, manager, firstName, lastName, email, phone, startDate, endDate, created, modified**"},{"in":"query","name":"filters","required":false,"schema":{"type":"string"},"example":"sourceId eq \"2c91808568c529c60168cca6f90c1313\"","description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)

    Filtering is supported for the following fields and operators:

    **sourceId**: *eq*

    *Example:* sourceId eq \"2c91808568c529c60168cca6f90c1313\""}],"responses":{"200":{"description":"Non-Employee record objects","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee record id."},"accountName":{"type":"string","description":"Requested identity account name."},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"sourceId":{"type":"string","description":"Non-Employee's source id.","example":"2c91808568c529c60168cca6f90c1313"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee."},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2019-08-23T18:52:59.162Z"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2020-08-23T18:52:59.162Z"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-records","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Non-Employee Records","description":{"content":"This gets a list of non-employee records.","type":"text/plain"},"url":{"path":["non-employee-records"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#toc-hId-2058949)

    Sorting is supported for the following fields: **id, accountName, sourceId, manager, firstName, lastName, email, phone, startDate, endDate, created, modified**","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)

    Filtering is supported for the following fields and operators:

    **sourceId**: *eq*

    *Example:* sourceId eq \"2c91808568c529c60168cca6f90c1313\"","type":"text/plain"},"key":"filters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Non-Employee Records + + + +This gets a list of non-employee records. + +
    Query Parameters

      Sorting is supported for the following fields: **id, accountName, sourceId, manager, firstName, lastName, email, phone, startDate, endDate, created, modified**"}}>

      Filtering is supported for the following fields and operators:

      **sourceId**: *eq*

      *Example:* sourceId eq \"2c91808568c529c60168cca6f90c1313\""}}>
    + +Non-Employee record objects + +
    Schema array
      data object
      + +Attribute blob/bag for a non-employee. + +
    • property name* string
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-record-patch.api.mdx b/docs/sailpoint-api-beta/non-employee-record-patch.api.mdx new file mode 100644 index 000000000..d48aadbff --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-record-patch.api.mdx @@ -0,0 +1,99 @@ +--- +id: non-employee-record-patch +sidebar_label: Patch Non-Employee Record +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRecordPatch","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This request will patch a non-employee record.","parameters":[{"in":"path","name":"id","description":"Non-employee record id (UUID)","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"A list of non-employee update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. Attributes are restricted by user type. Owner of source can update end date. Organization admins can update all available fields.","required":true,"content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}},"example":[{"op":"replace","path":"/endDate","value":{"2019-08-23T18:40:35.772Z":null}}]}}},"responses":{"200":{"description":"A patched non-employee record.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee record id."},"accountName":{"type":"string","description":"Requested identity account name."},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"sourceId":{"type":"string","description":"Non-Employee's source id.","example":"2c91808568c529c60168cca6f90c1313"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee."},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2019-08-23T18:52:59.162Z"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2020-08-23T18:52:59.162Z"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/non-employee-records/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Patch Non-Employee Record","description":{"content":"This request will patch a non-employee record.","type":"text/plain"},"url":{"path":["non-employee-records",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Non-employee record id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Patch Non-Employee Record + + + +This request will patch a non-employee record. + +
    Path Parameters
    Request Body array required
    + +A list of non-employee update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. Attributes are restricted by user type. Owner of source can update end date. Organization admins can update all available fields. + +
      value object
      + +The value to be used for the operation, required for "add" and "replace" operations + +
    • anyOf
    • string
    • integer
    • anyOf
    • string
    • integer
    + +A patched non-employee record. + +
    Schema
      data object
      + +Attribute blob/bag for a non-employee. + +
    • property name* string
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-record-update.api.mdx b/docs/sailpoint-api-beta/non-employee-record-update.api.mdx new file mode 100644 index 000000000..6ecb2fff1 --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-record-update.api.mdx @@ -0,0 +1,99 @@ +--- +id: non-employee-record-update +sidebar_label: Update Non-Employee Record +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRecordUpdate","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This request will update a non-employee record.","parameters":[{"in":"path","name":"id","description":"Non-employee record id (UUID)","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Non-employee record creation request body. Attributes are restricted by user type. Owner of source can update end date. Organization admins can update all available fields.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountName":{"type":"string","description":"Requested identity account name.","example":"william.smith"},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"sourceId":{"type":"string","description":"Non-Employee's source id.","example":"2c91808568c529c60168cca6f90c1313"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee, 10 attributes is the maximum size supported."},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2020-03-24T00:00:00-05:00"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2021-03-25T00:00:00-05:00"}},"required":["accountName","firstName","lastName","email","phone","manager","sourceId","startDate","endDate"]}}}},"responses":{"200":{"description":"An updated non-employee record.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee record id."},"accountName":{"type":"string","description":"Requested identity account name."},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"sourceId":{"type":"string","description":"Non-Employee's source id.","example":"2c91808568c529c60168cca6f90c1313"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee."},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2019-08-23T18:52:59.162Z"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2020-08-23T18:52:59.162Z"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/non-employee-records/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"accountName":"william.smith","firstName":"William","lastName":"Smith","email":"william.smith@example.com","phone":"5555555555","manager":"jane.doe","sourceId":"2c91808568c529c60168cca6f90c1313","data":{},"startDate":"2020-03-24T00:00:00-05:00","endDate":"2021-03-25T00:00:00-05:00"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update Non-Employee Record","description":{"content":"This request will update a non-employee record.","type":"text/plain"},"url":{"path":["non-employee-records",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Non-employee record id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Non-Employee Record + + + +This request will update a non-employee record. + +
    Path Parameters
    Request Body required
    + +Non-employee record creation request body. Attributes are restricted by user type. Owner of source can update end date. Organization admins can update all available fields. + +
      data object
      + +Attribute blob/bag for a non-employee, 10 attributes is the maximum size supported. + +
    • property name* string
    + +An updated non-employee record. + +
    Schema
      data object
      + +Attribute blob/bag for a non-employee. + +
    • property name* string
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-records-bulk-upload.api.mdx b/docs/sailpoint-api-beta/non-employee-records-bulk-upload.api.mdx new file mode 100644 index 000000000..2fb524f95 --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-records-bulk-upload.api.mdx @@ -0,0 +1,95 @@ +--- +id: non-employee-records-bulk-upload +sidebar_label: Imports, or Updates, Non-Employee Records +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRecordsBulkUpload","tags":["Non-Employee Lifecycle Management"],"description":"This post will import, or update, Non-Employee records found in the CSV.\nRequest will need the following security scope:\n'idn:nesr:create'","parameters":[{"in":"path","name":"id","description":"Source Id (UUID)","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The form-data \"name\" attribute for the file content must be \"data\". See the schema specification.","content":{"multipart/form-data":{"schema":{"type":"object","properties":{"data":{"type":"string","format":"base64"}},"required":["data"]},"example":{"data":"accountName,firstName,lastName,phone,email,manager,startDate,endDate Jon.Smith, Jon, Smith, 555-555-5555, jon@jon.doe.nope.com, Jim Smith, 2020-04-05T08:00:00-10:00, 2020-08-07T19:00:00-10:00 William.Chaffin, William, Chaffin, 555-555-5555, william@chaffins.nope.com, Bertram Chaffin, 2020-04-05T08:00:00-10:00, 2020-08-07T19:00:00-10:00"}}}},"responses":{"202":{"description":"The CSV was accepted to be bulk inserted now or at a later time.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The bulk upload job's ID. (UUID)","example":"2c91808568c529c60168cca6f90cffff"},"sourceId":{"type":"string","description":"The ID of the source to bulk-upload non-employees to. (UUID)","example":"2c91808568c529c60168cca6f90c1313"},"created":{"type":"string","format":"date-time","description":"The date-time the job was submitted.","example":"2019-08-23T18:52:59.162Z"},"modified":{"type":"string","format":"date-time","description":"The date-time that the job was last updated.","example":"2019-08-23T18:52:59.162Z"},"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","ERROR"],"description":"Returns the following values indicating the progress or result of the bulk upload job.\n\"PENDING\" means the job is queued and waiting to be processed.\n\"IN_PROGRESS\" means the job is currently being processed.\n\"COMPLETED\" means the job has been completed without any errors.\n\"ERROR\" means the job failed to process with errors.\n","example":"PENDING"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.\nThe response body will contain the list of specific errors with one on each line.\n","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/non-employee-sources/{id}/non-employee-bulk-upload","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Imports, or Updates, Non-Employee Records","description":{"content":"This post will import, or update, Non-Employee records found in the CSV.\nRequest will need the following security scope:\n'idn:nesr:create'","type":"text/plain"},"url":{"path":["non-employee-sources",":id","non-employee-bulk-upload"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Source Id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"multipart/form-data"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"formdata","formdata":[]}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Imports, or Updates, Non-Employee Records + + + +This post will import, or update, Non-Employee records found in the CSV. +Request will need the following security scope: +'idn:nesr:create' + +
    Path Parameters
    Request Body
    + +The form-data "name" attribute for the file content must be "data". See the schema specification. + +
    + +The CSV was accepted to be bulk inserted now or at a later time. + +
    Schema
    + +Client Error - Returned if the request body is invalid. +The response body will contain the list of specific errors with one on each line. + + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-records-export.api.mdx b/docs/sailpoint-api-beta/non-employee-records-export.api.mdx new file mode 100644 index 000000000..d3ade7499 --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-records-export.api.mdx @@ -0,0 +1,89 @@ +--- +id: non-employee-records-export +sidebar_label: Exports Non-Employee Records to CSV +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRecordsExport","tags":["Non-Employee Lifecycle Management"],"description":"This requests a CSV download for all non-employees from a provided source.\nRequest will need the following security scope:\n'idn:nesr:read'","parameters":[{"in":"path","name":"id","description":"Source Id (UUID)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Exported CSV","content":{"text/csv":{"example":"accountName,firstName,lastName,phone,email,manager,startDate,endDate\nJon.Smith, Jon, Smith, 555-555-5555, jon@jon.doe.nope.com, Jim Smith, 2020-04-05T08:00:00-10:00,2020-08-07T19:00:00-10:00\nWilliam.Chaffin, William, Chaffin, 555-555-5555, william@chaffins.nope.com, Bertram Chaffin, 2020-04-05T08:00:00-10:00,2020-08-07T19:00:00-10:00\n"}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-sources/{id}/non-employees/download","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Exports Non-Employee Records to CSV","description":{"content":"This requests a CSV download for all non-employees from a provided source.\nRequest will need the following security scope:\n'idn:nesr:read'","type":"text/plain"},"url":{"path":["non-employee-sources",":id","non-employees","download"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Source Id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"text/csv"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Exports Non-Employee Records to CSV + + + +This requests a CSV download for all non-employees from a provided source. +Request will need the following security scope: +'idn:nesr:read' + +
    Path Parameters
    + +Exported CSV + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-reject-request.api.mdx b/docs/sailpoint-api-beta/non-employee-reject-request.api.mdx new file mode 100644 index 000000000..e3e191308 --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-reject-request.api.mdx @@ -0,0 +1,79 @@ +--- +id: non-employee-reject-request +sidebar_label: Reject a Non-Employee Request +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRejectRequest","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This endpoint will reject an approval item request and notify user.","parameters":[{"in":"path","name":"id","description":"Non-Employee approval item id (UUID)","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"comment":{"type":"string","description":"Comment on the approval item.","maxLength":4000}},"required":["comment"]}}}},"responses":{"200":{"description":"Non-Employee approval item object.","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee approval item id","example":"2c1e388b-1e55-4b0a-ab5c-897f1204159c"},"approver":{"description":"Reference to the associated Identity","type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}},"accountName":{"type":"string","description":"Requested identity account name","example":"test.account"},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"approvalOrder":{"type":"number","description":"Approval order","example":1},"comment":{"type":"string","description":"comment of approver"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}},{"type":"object","properties":{"nonEmployeeRequest":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee request id."},"requester":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}},"example":{"type":"IDENTITY","id":"2c9180866166b5b0016167c32ef31a66","name":"William Smith"}}}}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/non-employee-approvals/{id}/reject","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"comment":"string"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Reject a Non-Employee Request","description":{"content":"This endpoint will reject an approval item request and notify user.","type":"text/plain"},"url":{"path":["non-employee-approvals",":id","reject"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Non-Employee approval item id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Reject a Non-Employee Request + + + +This endpoint will reject an approval item request and notify user. + +
    Path Parameters
    Request Body required
    + +Non-Employee approval item object. + +
    Schema
      approver object
      + +Reference to the associated Identity + +
      nonEmployeeRequest object
      requester object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-request-creation.api.mdx b/docs/sailpoint-api-beta/non-employee-request-creation.api.mdx new file mode 100644 index 000000000..544d87485 --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-request-creation.api.mdx @@ -0,0 +1,95 @@ +--- +id: non-employee-request-creation +sidebar_label: Create Non-Employee Request +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRequestCreation","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This request will create a non-employee request and notify the approver","requestBody":{"description":"Non-Employee creation request body","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountName":{"type":"string","description":"Requested identity account name.","example":"william.smith"},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"sourceId":{"type":"string","description":"Non-Employee's source id.","example":"2c91808568c529c60168cca6f90c1313"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee, 10 attributes is the maximum size supported."},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2020-03-24T00:00:00-05:00"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2021-03-25T00:00:00-05:00"}},"required":["accountName","firstName","lastName","email","phone","manager","sourceId","startDate","endDate"]}}}},"responses":{"200":{"description":"Non-Employee request creation object","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},{"type":"object","properties":{"accountName":{"type":"string","description":"Requested identity account name.","example":"william.smith"},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"nonEmployeeSource":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee."},"approvalItems":{"description":"List of approval item for the request","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee approval item id","example":"2c1e388b-1e55-4b0a-ab5c-897f1204159c"},"approver":{"description":"Reference to the associated Identity","type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}},"accountName":{"type":"string","description":"Requested identity account name","example":"test.account"},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"approvalOrder":{"type":"number","description":"Approval order","example":1},"comment":{"type":"string","description":"comment of approver"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"comment":{"type":"string","description":"comment of requester"},"completionDate":{"type":"string","format":"date-time","description":"When the request was completely approved.","example":"2020-03-24T11:11:41.139-05:00"},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2020-03-24T00:00:00-05:00"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2021-03-25T00:00:00-05:00"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2020-03-24T11:11:41.139-05:00"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2020-03-24T11:11:41.139-05:00"}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"400.1 Bad Request Content":{"description":"Response for bad request content","value":{"detailCode":"400.1 Bad Request Content","trackingId":"e7eab60924f64aa284175b9fa3309599","messages":[{"locale":"en","localeOrigin":"REQUEST","text":"firstName is required; accountName is required;"}]}},"400.1.409 Reference conflict":{"description":"Response for reference conflict","value":{"detailCode":"400.1.409 Reference conflict","trackingId":"e7eab60924f64aa284175b9fa3309599","messages":[{"locale":"en","localeOrigin":"REQUEST","text":"Unable to create Non-Employee because the accountName \"existed\" is already being used."}]}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/non-employee-requests","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"accountName":"william.smith","firstName":"William","lastName":"Smith","email":"william.smith@example.com","phone":"5555555555","manager":"jane.doe","sourceId":"2c91808568c529c60168cca6f90c1313","data":{},"startDate":"2020-03-24T00:00:00-05:00","endDate":"2021-03-25T00:00:00-05:00"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create Non-Employee Request","description":{"content":"This request will create a non-employee request and notify the approver","type":"text/plain"},"url":{"path":["non-employee-requests"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Non-Employee Request + + + +This request will create a non-employee request and notify the approver + +
    Request Body required
    + +Non-Employee creation request body + +
      data object
      + +Attribute blob/bag for a non-employee, 10 attributes is the maximum size supported. + +
    • property name* string
    + +Non-Employee request creation object + +
    Schema
      nonEmployeeSource object
      data object
      + +Attribute blob/bag for a non-employee. + +
    • property name* string
    • approvalItems object[]
      + +List of approval item for the request + +
      approver object
      + +Reference to the associated Identity + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-request-deletion.api.mdx b/docs/sailpoint-api-beta/non-employee-request-deletion.api.mdx new file mode 100644 index 000000000..50d70c24e --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-request-deletion.api.mdx @@ -0,0 +1,89 @@ +--- +id: non-employee-request-deletion +sidebar_label: Delete Non-Employee Request +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRequestDeletion","tags":["Non-Employee Lifecycle Management"],"description":"This request will delete a non-employee request. \nRequest will require the following scope:\n'idn:nesr:delete'","parameters":[{"in":"path","name":"id","description":"Non-Employee request id in the UUID format","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/non-employee-requests/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete Non-Employee Request","description":{"content":"This request will delete a non-employee request. \nRequest will require the following scope:\n'idn:nesr:delete'","type":"text/plain"},"url":{"path":["non-employee-requests",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Non-Employee request id in the UUID format","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Non-Employee Request + + + +This request will delete a non-employee request. +Request will require the following scope: +'idn:nesr:delete' + +
    Path Parameters
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-request-get.api.mdx b/docs/sailpoint-api-beta/non-employee-request-get.api.mdx new file mode 100644 index 000000000..ebcbf6886 --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-request-get.api.mdx @@ -0,0 +1,99 @@ +--- +id: non-employee-request-get +sidebar_label: Get a Non-Employee Request +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRequestGet","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This gets a non-employee request.","parameters":[{"in":"path","name":"id","example":"2c91808b6ef1d43e016efba0ce470904","description":"Non-Employee request id (UUID)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Non-Employee request object.","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},{"type":"object","properties":{"accountName":{"type":"string","description":"Requested identity account name.","example":"william.smith"},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"nonEmployeeSource":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee."},"approvalItems":{"description":"List of approval item for the request","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee approval item id","example":"2c1e388b-1e55-4b0a-ab5c-897f1204159c"},"approver":{"description":"Reference to the associated Identity","type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}},"accountName":{"type":"string","description":"Requested identity account name","example":"test.account"},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"approvalOrder":{"type":"number","description":"Approval order","example":1},"comment":{"type":"string","description":"comment of approver"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"comment":{"type":"string","description":"comment of requester"},"completionDate":{"type":"string","format":"date-time","description":"When the request was completely approved.","example":"2020-03-24T11:11:41.139-05:00"},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2020-03-24T00:00:00-05:00"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2021-03-25T00:00:00-05:00"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2020-03-24T11:11:41.139-05:00"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2020-03-24T11:11:41.139-05:00"}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-requests/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get a Non-Employee Request","description":{"content":"This gets a non-employee request.","type":"text/plain"},"url":{"path":["non-employee-requests",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Non-Employee request id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a Non-Employee Request + + + +This gets a non-employee request. + +
    Path Parameters
    + +Non-Employee request object. + +
    Schema
      nonEmployeeSource object
      data object
      + +Attribute blob/bag for a non-employee. + +
    • property name* string
    • approvalItems object[]
      + +List of approval item for the request + +
      approver object
      + +Reference to the associated Identity + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-request-list.api.mdx b/docs/sailpoint-api-beta/non-employee-request-list.api.mdx new file mode 100644 index 000000000..cc12af640 --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-request-list.api.mdx @@ -0,0 +1,75 @@ +--- +id: non-employee-request-list +sidebar_label: List Non-Employee Requests +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRequestList","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This gets a list of non-employee requests.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"requested-for","required":true,"schema":{"type":"string"},"example":"me","description":"The identity for whom the request was made. *me* indicates the current user."},{"in":"query","name":"sorters","required":false,"schema":{"type":"string","format":"comma-separated"},"example":"approvalStatus,firstName","description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#toc-hId-2058949)

    Sorting is supported for the following fields: **created, approvalStatus, firstName, lastName, email, phone, accountName, startDate, endDate**"},{"in":"query","name":"filters","required":false,"schema":{"type":"string"},"example":"sourceId eq \"2c91808568c529c60168cca6f90c1313\"","description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)

    Filtering is supported for the following fields and operators:

    **sourceId**: *eq*

    *Example:* sourceId eq \"2c91808568c529c60168cca6f90c1313\""}],"responses":{"200":{"description":"List of non-employee request objects.","content":{"application/json":{"schema":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},{"type":"object","properties":{"accountName":{"type":"string","description":"Requested identity account name.","example":"william.smith"},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"nonEmployeeSource":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee."},"approvalItems":{"description":"List of approval item for the request","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee approval item id","example":"2c1e388b-1e55-4b0a-ab5c-897f1204159c"},"approver":{"description":"Reference to the associated Identity","type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}},"accountName":{"type":"string","description":"Requested identity account name","example":"test.account"},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"approvalOrder":{"type":"number","description":"Approval order","example":1},"comment":{"type":"string","description":"comment of approver"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"comment":{"type":"string","description":"comment of requester"},"completionDate":{"type":"string","format":"date-time","description":"When the request was completely approved.","example":"2020-03-24T11:11:41.139-05:00"},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2020-03-24T00:00:00-05:00"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2021-03-25T00:00:00-05:00"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2020-03-24T11:11:41.139-05:00"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2020-03-24T11:11:41.139-05:00"}}}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-requests","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Non-Employee Requests","description":{"content":"This gets a list of non-employee requests.","type":"text/plain"},"url":{"path":["non-employee-requests"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"(Required) The identity for whom the request was made. *me* indicates the current user.","type":"text/plain"},"key":"requested-for","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#toc-hId-2058949)

    Sorting is supported for the following fields: **created, approvalStatus, firstName, lastName, email, phone, accountName, startDate, endDate**","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)

    Filtering is supported for the following fields and operators:

    **sourceId**: *eq*

    *Example:* sourceId eq \"2c91808568c529c60168cca6f90c1313\"","type":"text/plain"},"key":"filters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Non-Employee Requests + + + +This gets a list of non-employee requests. + +
    Query Parameters

      Sorting is supported for the following fields: **created, approvalStatus, firstName, lastName, email, phone, accountName, startDate, endDate**"}}>

      Filtering is supported for the following fields and operators:

      **sourceId**: *eq*

      *Example:* sourceId eq \"2c91808568c529c60168cca6f90c1313\""}}>
    + +List of non-employee request objects. + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-request-summary-get.api.mdx b/docs/sailpoint-api-beta/non-employee-request-summary-get.api.mdx new file mode 100644 index 000000000..f397fd0c5 --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-request-summary-get.api.mdx @@ -0,0 +1,75 @@ +--- +id: non-employee-request-summary-get +sidebar_label: Get Summary of Non-Employee Requests +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRequestSummaryGet","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This request will retrieve a summary of non-employee requests.

    There are two contextual uses for the `requested-for` path parameter:
    1. The current user is the Org Admin, in which case he or she may request a summary of all non-employee approval requests assigned to a particular account manager by passing in that manager's id.
    2. The current user is an account manager, in which case \"me\" should be provided as the `requested-for` value. This will provide the user with a summary of the non-employee requests in the source(s) he or she manages.","parameters":[{"in":"path","name":"requested-for","description":"The identity (UUID) of the non-employee account manager for whom the summary is being retrieved. Use \"me\" instead to indicate the current user.","required":true,"schema":{"type":"string","format":"uuid (if user is Org Admin)"}}],"responses":{"200":{"description":"Non-Employee request summary object.","content":{"application/json":{"schema":{"type":"object","properties":{"approved":{"type":"number","description":"The number of approved non-employee requests on all sources that *requested-for* user manages."},"rejected":{"type":"number","description":"The number of rejected non-employee requests on all sources that *requested-for* user manages."},"pending":{"type":"number","description":"The number of pending non-employee requests on all sources that *requested-for* user manages."},"nonEmployeeCount":{"type":"number","description":"The number of non-employee records on all sources that *requested-for* user manages."}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-requests/summary/{requested-for}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Summary of Non-Employee Requests","description":{"content":"This request will retrieve a summary of non-employee requests.

    There are two contextual uses for the `requested-for` path parameter:
    1. The current user is the Org Admin, in which case he or she may request a summary of all non-employee approval requests assigned to a particular account manager by passing in that manager's id.
    2. The current user is an account manager, in which case \"me\" should be provided as the `requested-for` value. This will provide the user with a summary of the non-employee requests in the source(s) he or she manages.","type":"text/plain"},"url":{"path":["non-employee-requests","summary",":requested-for"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The identity (UUID) of the non-employee account manager for whom the summary is being retrieved. Use \"me\" instead to indicate the current user.","type":"text/plain"},"type":"any","value":"","key":"requested-for"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Summary of Non-Employee Requests + + + +This request will retrieve a summary of non-employee requests.<br><br> There are two contextual uses for the `requested-for` path parameter:<br> 1. The current user is the Org Admin, in which case he or she may request a summary of all non-employee approval requests assigned to a particular account manager by passing in that manager's id.<br> 2. The current user is an account manager, in which case "me" should be provided as the `requested-for` value. This will provide the user with a summary of the non-employee requests in the source(s) he or she manages. + +
    Path Parameters
    + +Non-Employee request summary object. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-source-delete.api.mdx b/docs/sailpoint-api-beta/non-employee-source-delete.api.mdx new file mode 100644 index 000000000..4609c45c9 --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-source-delete.api.mdx @@ -0,0 +1,77 @@ +--- +id: non-employee-source-delete +sidebar_label: Delete Non-Employee Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeSourceDelete","tags":["Non-Employee Lifecycle Management"],"description":"This request will delete a non-employee source.\nRequest will require the following security scope:\n'idn:nesr:delete'","parameters":[{"in":"path","name":"sourceId","description":"Source Id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/non-employee-sources/{sourceId}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Delete Non-Employee Source","description":{"content":"This request will delete a non-employee source.\nRequest will require the following security scope:\n'idn:nesr:delete'","type":"text/plain"},"url":{"path":["non-employee-sources",":sourceId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Source Id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Non-Employee Source + + + +This request will delete a non-employee source. +Request will require the following security scope: +'idn:nesr:delete' + +
    Path Parameters
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-source-get.api.mdx b/docs/sailpoint-api-beta/non-employee-source-get.api.mdx new file mode 100644 index 000000000..402500a8a --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-source-get.api.mdx @@ -0,0 +1,83 @@ +--- +id: non-employee-source-get +sidebar_label: Get a Non-Employee Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeSourceGet","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This gets a non-employee source.","parameters":[{"in":"path","example":"2c91808b7c28b350017c2a2ec5790aa1","name":"sourceId","description":"Source Id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Non-Employee source object.","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},{"type":"object","properties":{"approvers":{"description":"List of approvers","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}}},"accountManagers":{"description":"List of account managers","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}}},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-sources/{sourceId}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get a Non-Employee Source","description":{"content":"This gets a non-employee source.","type":"text/plain"},"url":{"path":["non-employee-sources",":sourceId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Source Id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a Non-Employee Source + + + +This gets a non-employee source. + +
    Path Parameters
    + +Non-Employee source object. + +
    Schema
      approvers object[]
      + +List of approvers + +
      accountManagers object[]
      + +List of account managers + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-source-patch.api.mdx b/docs/sailpoint-api-beta/non-employee-source-patch.api.mdx new file mode 100644 index 000000000..00985b4e2 --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-source-patch.api.mdx @@ -0,0 +1,93 @@ +--- +id: non-employee-source-patch +sidebar_label: Patch a Non-Employee Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeSourcePatch","tags":["Non-Employee Lifecycle Management"],"description":"patch a non-employee source. (Partial Update)
    Patchable field: **name, description, approvers, accountManagers**\nRequest will require the following security scope:\n'idn:nesr:update'","parameters":[{"in":"path","name":"sourceId","description":"Source Id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"A list of non-employee source update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.","required":true,"content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}},"example":[{"op":"replace","path":"/name","value":{"new name":null}},{"op":"replace","path":"/approvers","value":["2c91809f703bb37a017040a2fe8748c7","48b1f463c9e8427db5a5071bd81914b8"]}]}}},"responses":{"200":{"description":"A patched non-employee source object.","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},{"type":"object","properties":{"approvers":{"description":"List of approvers","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}}},"accountManagers":{"description":"List of account managers","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}}},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/non-employee-sources/{sourceId}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Patch a Non-Employee Source","description":{"content":"patch a non-employee source. (Partial Update)
    Patchable field: **name, description, approvers, accountManagers**\nRequest will require the following security scope:\n'idn:nesr:update'","type":"text/plain"},"url":{"path":["non-employee-sources",":sourceId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Source Id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Patch a Non-Employee Source + + + +patch a non-employee source. (Partial Update) <br/> Patchable field: **name, description, approvers, accountManagers** +Request will require the following security scope: +'idn:nesr:update' + +
    Path Parameters
    Request Body array required
    + +A list of non-employee source update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + +
      value object
      + +The value to be used for the operation, required for "add" and "replace" operations + +
    • anyOf
    • string
    • integer
    • anyOf
    • string
    • integer
    + +A patched non-employee source object. + +
    Schema
      approvers object[]
      + +List of approvers + +
      accountManagers object[]
      + +List of account managers + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-sources-creation.api.mdx b/docs/sailpoint-api-beta/non-employee-sources-creation.api.mdx new file mode 100644 index 000000000..1f9f1a6ad --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-sources-creation.api.mdx @@ -0,0 +1,109 @@ +--- +id: non-employee-sources-creation +sidebar_label: Create Non-Employee Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeSourcesCreation","tags":["Non-Employee Lifecycle Management"],"description":"This request will create a non-employee source.\nRequest will require the following security scope:\n'idn:nesr:create'","requestBody":{"description":"Non-Employee source creation request body.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Name of non-employee source.","example":"Retail"},"description":{"type":"string","description":"Description of non-employee source.","example":"Source description"},"owner":{"description":"Owner of non-employee source.","type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Identity id.","example":"2c91808570313110017040b06f344ec9"}},"required":["id"]},"managementWorkgroup":{"type":"string","description":"The ID for the management workgroup that contains source sub-admins","example":"123299"},"approvers":{"description":"List of approvers.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Identity id.","example":"2c91808570313110017040b06f344ec9"}},"required":["id"]},"maxItems":3},"accountManagers":{"description":"List of account managers.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Identity id.","example":"2c91808570313110017040b06f344ec9"}},"required":["id"]},"maxItems":10}},"required":["owner","name","description"]}}}},"responses":{"200":{"description":"Created non-employee source.","content":{"application/json":{"schema":{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},{"type":"object","properties":{"approvers":{"description":"List of approvers","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}}},"accountManagers":{"description":"List of account managers","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}}},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}]},{"type":"object","properties":{"cloudExternalId":{"type":"string","description":"Legacy ID used for sources from the V1 API. This attribute will be removed from a future version of the API and will not be considered a breaking change. No clients should rely on this ID always being present.","example":"99999"}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/non-employee-sources","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"Retail","description":"Source description","owner":{"id":"2c91808570313110017040b06f344ec9"},"managementWorkgroup":"123299","approvers":[{"id":"2c91808570313110017040b06f344ec9"}],"accountManagers":[{"id":"2c91808570313110017040b06f344ec9"}]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create Non-Employee Source","description":{"content":"This request will create a non-employee source.\nRequest will require the following security scope:\n'idn:nesr:create'","type":"text/plain"},"url":{"path":["non-employee-sources"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Non-Employee Source + + + +This request will create a non-employee source. +Request will require the following security scope: +'idn:nesr:create' + +
    Request Body required
    + +Non-Employee source creation request body. + +
      owner object
      + +Owner of non-employee source. + +
      approvers object[]
      + +**Possible values:** `<= 3` + +
      + +List of approvers. + +
      accountManagers object[]
      + +**Possible values:** `<= 10` + +
      + +List of account managers. + +
    + +Created non-employee source. + +
    Schema
      approvers object[]
      + +List of approvers + +
      accountManagers object[]
      + +List of account managers + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/non-employee-sources-list.api.mdx b/docs/sailpoint-api-beta/non-employee-sources-list.api.mdx new file mode 100644 index 000000000..823df8f43 --- /dev/null +++ b/docs/sailpoint-api-beta/non-employee-sources-list.api.mdx @@ -0,0 +1,75 @@ +--- +id: non-employee-sources-list +sidebar_label: List Non-Employee Sources +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeSourcesList","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This gets a list of non-employee sources.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","required":true,"name":"requested-for","example":"me","schema":{"type":"string"},"description":"The identity for whom the request was made. *me* indicates the current user."},{"in":"query","required":true,"name":"non-employee-count","example":false,"schema":{"type":"boolean"},"description":"The flag to determine whether return a non-employee count associate with source."},{"in":"query","name":"sorters","required":false,"schema":{"type":"string","format":"comma-separated"},"example":"name,created","description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#toc-hId-2058949)

    Sorting is supported for the following fields: **name, created**"}],"responses":{"200":{"description":"List of non-employee sources objects.","content":{"application/json":{"schema":{"type":"array","items":{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},{"type":"object","properties":{"approvers":{"description":"List of approvers","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}}},"accountManagers":{"description":"List of account managers","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}}},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}]},{"type":"object","properties":{"nonEmployeeCount":{"type":"number","description":"Number of non-employee records associated with this source."}}}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-sources","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"List Non-Employee Sources","description":{"content":"This gets a list of non-employee sources.","type":"text/plain"},"url":{"path":["non-employee-sources"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"(Required) The identity for whom the request was made. *me* indicates the current user.","type":"text/plain"},"key":"requested-for","value":""},{"disabled":false,"description":{"content":"(Required) The flag to determine whether return a non-employee count associate with source.","type":"text/plain"},"key":"non-employee-count","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#toc-hId-2058949)

    Sorting is supported for the following fields: **name, created**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Non-Employee Sources + + + +This gets a list of non-employee sources. + +
    Query Parameters

      Sorting is supported for the following fields: **name, created**"}}>
    + +List of non-employee sources objects. + +
    Schema array
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/notifications.tag.mdx b/docs/sailpoint-api-beta/notifications.tag.mdx new file mode 100644 index 000000000..7af0c434c --- /dev/null +++ b/docs/sailpoint-api-beta/notifications.tag.mdx @@ -0,0 +1,15 @@ +--- +id: notifications +title: Notifications +description: Notifications +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/o-auth-clients.tag.mdx b/docs/sailpoint-api-beta/o-auth-clients.tag.mdx new file mode 100644 index 000000000..2111e75ad --- /dev/null +++ b/docs/sailpoint-api-beta/o-auth-clients.tag.mdx @@ -0,0 +1,15 @@ +--- +id: o-auth-clients +title: OAuth Clients +description: OAuth Clients +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/org-config.tag.mdx b/docs/sailpoint-api-beta/org-config.tag.mdx new file mode 100644 index 000000000..e6a12f7c2 --- /dev/null +++ b/docs/sailpoint-api-beta/org-config.tag.mdx @@ -0,0 +1,19 @@ +--- +id: org-config +title: Org Config +description: Org Config +--- + + + +Operations for managing org configuration settings (eg. time zone) + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/password-configuration.tag.mdx b/docs/sailpoint-api-beta/password-configuration.tag.mdx new file mode 100644 index 000000000..f7c7c65a1 --- /dev/null +++ b/docs/sailpoint-api-beta/password-configuration.tag.mdx @@ -0,0 +1,15 @@ +--- +id: password-configuration +title: Password Configuration +description: Password Configuration +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/password-dictionary.tag.mdx b/docs/sailpoint-api-beta/password-dictionary.tag.mdx new file mode 100644 index 000000000..c5fbc0975 --- /dev/null +++ b/docs/sailpoint-api-beta/password-dictionary.tag.mdx @@ -0,0 +1,15 @@ +--- +id: password-dictionary +title: Password Dictionary +description: Password Dictionary +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/password-management.tag.mdx b/docs/sailpoint-api-beta/password-management.tag.mdx new file mode 100644 index 000000000..69597f3e8 --- /dev/null +++ b/docs/sailpoint-api-beta/password-management.tag.mdx @@ -0,0 +1,19 @@ +--- +id: password-management +title: Password Management +description: Password Management +--- + + + +Operations for managing identity's passwords + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/password-sync-groups.tag.mdx b/docs/sailpoint-api-beta/password-sync-groups.tag.mdx new file mode 100644 index 000000000..e8ace7ef6 --- /dev/null +++ b/docs/sailpoint-api-beta/password-sync-groups.tag.mdx @@ -0,0 +1,15 @@ +--- +id: password-sync-groups +title: Password Sync Groups +description: Password Sync Groups +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/patch-access-profile.api.mdx b/docs/sailpoint-api-beta/patch-access-profile.api.mdx new file mode 100644 index 000000000..e99ec8e2c --- /dev/null +++ b/docs/sailpoint-api-beta/patch-access-profile.api.mdx @@ -0,0 +1,123 @@ +--- +id: patch-access-profile +sidebar_label: Patch a specified Access Profile +hide_title: true +hide_table_of_contents: true +api: {"operationId":"patchAccessProfile","tags":["Access Profiles"],"description":"This API updates an existing Access Profile. The following fields are patchable:\n\n**name**, **description**, **enabled**, **owner**, **requestable**, **accessRequestConfig**, **revokeRequestConfig**, **segments**, **entitlements**, **provisioningCriteria**\n\n> You can only add or replace **entitlements** that exist on the source that the access profile is attached to. You can use the **list entitlements** endpoint with the **filters** query parameter to get a list of available entitlements on the access profile's source.\n\n> Patching the value of the **requestable** field is only supported for customers enabled with the new Request Center. Otherwise, attempting to modify this field results in a 400 error.\n\nA token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. In addition, a SOURCE_SUBADMIN may only use this API to patch Access Profiles which are associated with Sources they are able to administer.","parameters":[{"name":"id","in":"path","description":"ID of the Access Profile to patch","required":true,"schema":{"type":"string","example":"2c91808a7813090a017814121919ecca"}}],"requestBody":{"content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}},"examples":{"Add Entitlements":{"description":"Add one or more entitlements to the end of the list","value":[{"op":"add","path":"/entitlements","value":[{"id":"2c9180857725c14301772a93bb77242d","type":"ENTITLEMENT","name":"AD User Group"}]}]},"Insert Entitlement":{"description":"Add an entitlement at the beginning of the entitlement list","value":[{"op":"add","path":"/entitlements/0","value":{"id":"2c9180857725c14301772a93bb77242d","type":"ENTITLEMENT","name":"AD User Group"}}]},"Replace Entitlements":{"description":"Replace all entitlements with a new list of entitlements","value":[{"op":"replace","path":"/entitlements","value":[{"id":"2c9180857725c14301772a93bb77242d","type":"ENTITLEMENT","name":"AD User Group"}]}]},"Remove Entitlement":{"description":"Remove the first entitlement in the list","value":[{"op":"remove","path":"/entitlements/0"}]}}}},"required":true},"responses":{"200":{"description":"Responds with the Access Profile as updated.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the Access Profile","example":"2c91808a7190d06e01719938fcd20792","readOnly":true},"name":{"type":"string","description":"Name of the Access Profile","example":"Employee-database-read-write"},"description":{"type":"string","description":"Information about the Access Profile","example":"Collection of entitlements to read/write the employee database"},"created":{"type":"string","description":"Date the Access Profile was created","format":"date-time","example":"2021-03-01T22:32:58.104Z","readOnly":true},"modified":{"type":"string","description":"Date the Access Profile was last modified.","format":"date-time","example":"2021-03-02T20:22:28.104Z","readOnly":true},"enabled":{"type":"boolean","description":"Whether the Access Profile is enabled. If the Access Profile is enabled then you must include at least one Entitlement.","example":true},"owner":{"description":"Owner of the Access Profile","type":"object","properties":{"type":{"description":"Owner type. This field must be either left null or set to 'IDENTITY' on input, otherwise a 400 Bad Request error will result.","example":"IDENTITY","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"]},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of the owner. It may be left null or omitted in a POST or PATCH. If set, it must match the current value of the owner's display name, otherwise a 400 Bad Request error will result.","example":"support"}}},"source":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the Source with with which the Access Profile is associated","example":"2c91809773dee3610173fdb0b6061ef4"},"type":{"type":"string","enum":["SOURCE"],"description":"The type of the Source, will always be SOURCE","example":"SOURCE"},"name":{"type":"string","description":"The display name of the associated Source","example":"ODS-AD-SOURCE"}}},"entitlements":{"type":"array","description":"A list of entitlements associated with the Access Profile. If enabled is false this is allowed to be empty otherwise it needs to contain at least one Entitlement.","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the Entitlement","example":"2c91809773dee32014e13e122092014e"},"type":{"type":"string","enum":["ENTITLEMENT"],"description":"The type of the Entitlement, will always be ENTITLEMENT","example":"ENTITLEMENT"},"name":{"type":"string","description":"The display name of the Entitlement","example":"CN=entitlement.490efde5,OU=OrgCo,OU=ServiceDept,DC=HQAD,DC=local"}}}},"requestable":{"type":"boolean","description":"Whether the Access Profile is requestable via access request. Currently, making an Access Profile non-requestable is only supported for customers enabled with the new Request Center. Otherwise, attempting to create an Access Profile with a value **false** in this field results in a 400 error.","example":true},"accessRequestConfig":{"description":"Access request configuration for this object","type":"object","properties":{"commentsRequired":{"type":"boolean","description":"Whether the requester of the containing object must provide comments justifying the request","example":true},"denialCommentsRequired":{"type":"boolean","description":"Whether an approver must provide comments when denying the request","example":true},"approvalSchemes":{"type":"array","description":"List describing the steps in approving the request","items":{"type":"object","properties":{"approverType":{"type":"string","enum":["OWNER","SOURCE_OWNER","MANAGER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step. Values are as follows.\n\n**OWNER**: Owner of the associated Access Profile or Role\n\n**SOURCE_OWNER**: Owner of the Source associated with an Access Profile\n\n**MANAGER**: Manager of the Identity making the request\n\n**GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field","example":"GOVERNANCE_GROUP"},"approverId":{"type":"string","description":"Id of the specific approver, used only when approverType is GOVERNANCE_GROUP","example":"46c79819-a69f-49a2-becb-12c971ae66c6"}}}}}},"revocationRequestConfig":{"description":"Revocation request configuration for this object.","type":"object","properties":{"approvalSchemes":{"type":"array","description":"List describing the steps in approving the revocation request","items":{"type":"object","properties":{"approverType":{"type":"string","enum":["OWNER","SOURCE_OWNER","MANAGER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step. Values are as follows.\n\n**OWNER**: Owner of the associated Access Profile or Role\n\n**SOURCE_OWNER**: Owner of the Source associated with an Access Profile\n\n**MANAGER**: Manager of the Identity making the request\n\n**GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field","example":"GOVERNANCE_GROUP"},"approverId":{"type":"string","description":"Id of the specific approver, used only when approverType is GOVERNANCE_GROUP","example":"46c79819-a69f-49a2-becb-12c971ae66c6"}}}}}},"segments":{"type":"array","items":{"type":"string"},"description":"List of IDs of segments, if any, to which this Access Profile is assigned.","example":["f7b1b8a3-5fed-4fd4-ad29-82014e137e19","29cb6c06-1da8-43ea-8be4-b3125f248f2a"]},"provisioningCriteria":{"description":"When an Identity has multiple Accounts on the Source with which an Access Profile is associated, this expression is evaluated against those Accounts to choose one to provision with the Access Profile.","nullable":true,"example":{"operation":"OR","children":[{"operation":"AND","children":[{"attribute":"dn","operation":"CONTAINS","value":"useast"},{"attribute":"manager","operation":"CONTAINS","value":"Scott.Clark"}]},{"operation":"AND","children":[{"attribute":"dn","operation":"EQUALS","value":"Gibson"},{"attribute":"telephoneNumber","operation":"CONTAINS","value":"512"}]}]},"type":"object","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","HAS","AND","OR"],"description":"Supported operations on ProvisioningCriteria","example":"EQUALS"},"attribute":{"type":"string","description":"Name of the Account attribute to be tested. If **operation** is one of EQUALS, NOT_EQUALS, CONTAINS, or HAS, this field is required. Otherwise, specifying it is an error.","example":"email","nullable":true},"value":{"type":"string","description":"String value to test the Account attribute w/r/t the specified operation. If the operation is one of EQUALS, NOT_EQUALS, or CONTAINS, this field is required. Otherwise, specifying it is an error. If the Attribute is not String-typed, it will be converted to the appropriate type.","example":"carlee.cert1c9f9b6fd@mailinator.com"},"children":{"type":"array","items":{"type":"object","description":"Defines matching criteria for an Account to be provisioned with a specific Access Profile","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","HAS","AND","OR"],"description":"Supported operations on ProvisioningCriteria","example":"EQUALS"},"attribute":{"type":"string","description":"Name of the Account attribute to be tested. If **operation** is one of EQUALS, NOT_EQUALS, CONTAINS, or HAS, this field is required. Otherwise, specifying it is an error.","example":"email","nullable":true},"value":{"type":"string","description":"String value to test the Account attribute w/r/t the specified operation. If the operation is one of EQUALS, NOT_EQUALS, or CONTAINS, this field is required. Otherwise, specifying it is an error. If the Attribute is not String-typed, it will be converted to the appropriate type.","example":"carlee.cert1c9f9b6fd@mailinator.com"},"children":{"type":"array","items":{"type":"object","description":"Defines matching criteria for an Account to be provisioned with a specific Access Profile","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","HAS","AND","OR"],"description":"Supported operations on ProvisioningCriteria","example":"EQUALS"},"attribute":{"type":"string","description":"Name of the Account attribute to be tested. If **operation** is one of EQUALS, NOT_EQUALS, CONTAINS, or HAS, this field is required. Otherwise, specifying it is an error.","example":"email","nullable":true},"value":{"type":"string","description":"String value to test the Account attribute w/r/t the specified operation. If the operation is one of EQUALS, NOT_EQUALS, or CONTAINS, this field is required. Otherwise, specifying it is an error. If the Attribute is not String-typed, it will be converted to the appropriate type.","example":"carlee.cert1c9f9b6fd@mailinator.com"}}},"nullable":true,"description":"Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes.","example":null}}},"nullable":true,"description":"Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes.","example":null}}}},"required":["owner","name","source"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:access-profile:manage"]}],"method":"patch","path":"/access-profiles/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Patch a specified Access Profile","description":{"content":"This API updates an existing Access Profile. The following fields are patchable:\n\n**name**, **description**, **enabled**, **owner**, **requestable**, **accessRequestConfig**, **revokeRequestConfig**, **segments**, **entitlements**, **provisioningCriteria**\n\n> You can only add or replace **entitlements** that exist on the source that the access profile is attached to. You can use the **list entitlements** endpoint with the **filters** query parameter to get a list of available entitlements on the access profile's source.\n\n> Patching the value of the **requestable** field is only supported for customers enabled with the new Request Center. Otherwise, attempting to modify this field results in a 400 error.\n\nA token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. In addition, a SOURCE_SUBADMIN may only use this API to patch Access Profiles which are associated with Sources they are able to administer.","type":"text/plain"},"url":{"path":["access-profiles",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the Access Profile to patch","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Patch a specified Access Profile + + + +This API updates an existing Access Profile. The following fields are patchable: + +**name**, **description**, **enabled**, **owner**, **requestable**, **accessRequestConfig**, **revokeRequestConfig**, **segments**, **entitlements**, **provisioningCriteria** + +> You can only add or replace **entitlements** that exist on the source that the access profile is attached to. You can use the **list entitlements** endpoint with the **filters** query parameter to get a list of available entitlements on the access profile's source. + +> Patching the value of the **requestable** field is only supported for customers enabled with the new Request Center. Otherwise, attempting to modify this field results in a 400 error. + +A token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. In addition, a SOURCE_SUBADMIN may only use this API to patch Access Profiles which are associated with Sources they are able to administer. + +
    Path Parameters
    Request Body array required
      value object
      + +The value to be used for the operation, required for "add" and "replace" operations + +
    • anyOf
    • string
    • integer
    • anyOf
    • string
    • integer
    + +Responds with the Access Profile as updated. + +
    Schema
      owner object
      + +Owner of the Access Profile + +
      source object
      entitlements object[]
      + +A list of entitlements associated with the Access Profile. If enabled is false this is allowed to be empty otherwise it needs to contain at least one Entitlement. + +
      accessRequestConfig object
      + +Access request configuration for this object + +
      approvalSchemes object[]
      + +List describing the steps in approving the request + +
      revocationRequestConfig object
      + +Revocation request configuration for this object. + +
      approvalSchemes object[]
      + +List describing the steps in approving the revocation request + +
      provisioningCriteria object
      + +When an Identity has multiple Accounts on the Source with which an Access Profile is associated, this expression is evaluated against those Accounts to choose one to provision with the Access Profile. + +
      children object[]
      + +Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. + +
      children object[]
      + +Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/patch-campaign-template.api.mdx b/docs/sailpoint-api-beta/patch-campaign-template.api.mdx new file mode 100644 index 000000000..5e0b01e38 --- /dev/null +++ b/docs/sailpoint-api-beta/patch-campaign-template.api.mdx @@ -0,0 +1,147 @@ +--- +id: patch-campaign-template +sidebar_label: Update a Campaign Template +hide_title: true +hide_table_of_contents: true +api: {"operationId":"patchCampaignTemplate","tags":["Certification Campaigns"],"description":"Allows updating individual fields on a campaign template using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the campaign template being modified.","example":"2c9180835d191a86015d28455b4a2329"}],"requestBody":{"required":true,"description":"A list of campaign update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\n\nThe following fields are patchable:\n* name\n* description\n* ownerRef\n* deadlineDuration\n* campaign (all fields that are allowed during create)\n","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object"}},"example":[{"op":"replace","path":"/description","value":"Updated description!"},{"op":"replace","path":"/campaign/filter/id","value":"ff80818155fe8c080155fe8d925b0316"}]}}},"responses":{"200":{"description":"Indicates the PATCH operation succeeded, and returns the template's new representation.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","description":"This template's name. Has no bearing on generated campaigns' names."},"description":{"type":"string","description":"This template's description. Has no bearing on generated campaigns' descriptions."},"created":{"type":"string","readOnly":true,"format":"date-time"},"modified":{"type":"string","readOnly":true,"format":"date-time"},"scheduled":{"type":"boolean","readOnly":true,"description":"Indicates if this campaign template has been scheduled."},"ownerRef":{"type":"object","description":"The owner of this template, and the owner of campaigns generated from this template via a schedule. This field is automatically populated at creation time with the current user.","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["IDENTITY"]},"name":{"type":"string"},"email":{"type":"string"}}},"deadlineDuration":{"type":"string","description":"The time period during which the campaign should be completed, formatted as an ISO-8601 Duration. When this template generates a campaign, the campaign's deadline will be the current date plus this duration. For example, if generation occurred on 2020-01-01 and this field was \"P2W\" (two weeks), the resulting campaign's deadline would be 2020-01-15 (the current date plus 14 days)."},"campaign":{"type":"object","title":"Campaign","allOf":[{"type":"object","title":"Slim Campaign","required":["name","description","type"],"properties":{"id":{"type":"string","readOnly":true},"name":{"description":"The campaign name. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details.","type":"string"},"description":{"type":"string","description":"The campaign description. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details."},"deadline":{"type":"string","format":"date-time","description":"The campaign's completion deadline."},"type":{"type":"string","description":"The type of campaign. Could be extended in the future.","enum":["MANAGER","SOURCE_OWNER","SEARCH","ROLE_COMPOSITION"]},"emailNotificationEnabled":{"type":"boolean"},"autoRevokeAllowed":{"type":"boolean"},"recommendationsEnabled":{"type":"boolean","description":"Enables IAI for this campaign. Accepts true even if the IAI product feature is off. If IAI is turned off then campaigns generated from this template will indicate false. The real value will then be returned if IAI is ever enabled for the org in the future."},"status":{"type":"string","description":"The campaign's current status.","readOnly":true,"enum":["PENDING","STAGED","CANCELING","ACTIVATING","ACTIVE","COMPLETING","COMPLETED","ERROR","ARCHIVED"]}},"example":{"id":"2c9079b270a266a60170a2779fcb0007","name":"Manager Campaign","description":"Everyone needs to be reviewed by their manager.","deadline":"2020-03-15T10:00:01.456Z","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"status":"ACTIVE"}},{"type":"object","properties":{"created":{"type":"string","readOnly":true,"format":"date-time"},"modified":{"type":"string","readOnly":true,"format":"date-time"},"filter":{"type":"object","description":"Determines which items will be included in this campaign. The default campaign filter is used if this field is left blank.","properties":{"id":{"type":"string","description":"The ID of whatever type of filter is being used."},"type":{"type":"string","enum":["CAMPAIGN_FILTER"]}}},"sunsetCommentsRequired":{"type":"boolean","description":"Determines if comments on sunset date changes are required.","default":true},"sourceOwnerCampaignInfo":{"type":"object","description":"Must be set only if the campaign type is SOURCE_OWNER.","properties":{"sourceIds":{"type":"array","description":"The list of sources to be included in the campaign.","items":{"type":"string"}}}},"searchCampaignInfo":{"type":"object","description":"Must be set only if the campaign type is SEARCH.","properties":{"type":{"type":"string","description":"The type of search campaign represented.","enum":["IDENTITY","ACCESS"]},"description":{"type":"string","description":"Describes this search campaign. Intended for storing the query used, and possibly the number of identities selected/available."},"reviewer":{"description":"If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP","allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object"}]},"query":{"type":"string","description":"The scope for the campaign. The campaign will cover identities returned by the query and identities that have access items returned by the query. One of `query` or `identityIds` must be set."},"identityIds":{"type":"array","description":"A direct list of identities to include in this campaign. One of `identityIds` or `query` must be set.","items":{"type":"string"},"maxItems":1000},"accessConstraints":{"type":"array","description":"Further reduces the scope of the campaign by excluding identities (from `query` or `identityIds`) that do not have this access.","items":{"type":"object","properties":{"type":{"type":"string","enum":["ENTITLEMENT","ACCESS_PROFILE","ROLE"]},"ids":{"description":"Must be set only if operator is SELECTED.","type":"array","items":{"type":"string"}},"operator":{"type":"string","enum":["ALL","SELECTED"]}},"required":["type","operator"],"example":{"type":"ENTITLEMENT","ids":["2c90ad2a70ace7d50170acf22ca90010"],"operator":"SELECTED"}},"maxItems":1000}},"required":["type"]},"roleCompositionCampaignInfo":{"type":"object","description":"Optional configuration options for role composition campaigns.","properties":{"reviewer":{"description":"If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP","allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object"}]},"roleIds":{"type":"array","description":"Optional list of roles to include in this campaign. Only one of `roleIds` and `query` may be set; if neither are set, all roles are included.","items":{"type":"string"}},"remediatorRef":{"type":"object","description":"This determines who remediation tasks will be assigned to. Remediation tasks are created for each revoke decision on items in the campaign. The only legal remediator type is 'IDENTITY', and the chosen identity must be a Role Admin or Org Admin.","properties":{"type":{"type":"string","enum":["IDENTITY"]},"id":{"type":"string","description":"The ID of the remediator."},"name":{"type":"string","description":"The name of the remediator.","readOnly":true}},"required":["type","id"]},"query":{"type":"string","description":"Optional search query to scope this campaign to a set of roles. Only one of `roleIds` and `query` may be set; if neither are set, all roles are included."},"description":{"type":"string","description":"Describes this role composition campaign. Intended for storing the query used, and possibly the number of roles selected/available."}},"required":["remediatorRef"]},"alerts":{"type":"array","description":"A list of errors and warnings that have accumulated.","readOnly":true,"items":{"type":"object","properties":{"level":{"type":"string","enum":["ERROR","WARN","INFO"]},"localizations":{"type":"array","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}},"totalCertifications":{"type":"integer","description":"The total number of certifications in this campaign.","readOnly":true},"completedCertifications":{"type":"integer","description":"The number of completed certifications in this campaign.","readOnly":true},"sourcesWithOrphanEntitlements":{"type":"array","description":"A list of sources in the campaign that contain \\\"orphan entitlements\\\" (entitlements without a corresponding Managed Attribute). An empty list indicates the campaign has no orphan entitlements. Null indicates there may be unknown orphan entitlements in the campaign (the campaign was created before this feature was implemented).","readOnly":true,"items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["SOURCE"]},"name":{"type":"string"}}}}}}],"example":{"id":"2c9079b270a266a60170a2779fcb0007","name":"Manager Campaign","description":"Everyone needs to be reviewed by their manager.","created":"2020-03-03T22:15:13.611Z","modified":"2020-03-03T22:20:12.674Z","deadline":"2020-03-15T00:00:00.456Z","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"status":"ACTIVE","filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"}}}},"required":["name","description","created","modified","campaign"],"example":{"id":"2c9079b270a266a60170a277bb960008","name":"Manager Campaign Template","description":"Template for the annual manager campaign.","created":"2020-03-05T22:44:00.364Z","modified":"2020-03-05T22:52:09.969Z","ownerRef":{"type":"IDENTITY","id":"2c918086676d3e0601677611dbde220f","email":"mr.manager@example.com","name":"Mister Manager"},"deadlineDuration":"P2W","campaign":{"name":"%Y Manager Campaign","description":"Everyone needs to be reviewed by their manager.","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"}}}},"examples":{"Manager":{"value":{"id":"e7dbec99d49349c8951bd84f58a05120","name":"Manager Review","created":"2022-08-02T19:16:42.632Z","modified":null,"description":"A review of everyone's access by their manager.","deadlineDuration":"P14D","ownerRef":{"email":"support@testmail.identitysoon.com","type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"scheduled":false,"campaign":{"created":null,"modified":null,"filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"},"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":null,"searchCampaignInfo":null,"roleCompositionCampaignInfo":null,"alerts":null,"totalCertifications":null,"completedCertifications":null,"sourcesWithOrphanEntitlements":null,"id":null,"name":"Manager Review","description":"Review everyone's access.","deadline":null,"type":"MANAGER","status":null,"emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false}}},"Search":{"value":{"id":"b7e6459eed5247ac8b98a5fed81fe27f","name":"Reporting Access Review","created":"2022-07-28T19:19:40.035Z","modified":null,"description":"A review of everyone's access to the reporting system.","deadlineDuration":"P14D","ownerRef":{"email":"support@testmail.identitysoon.com","type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"scheduled":false,"campaign":{"created":null,"modified":null,"filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"},"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":null,"searchCampaignInfo":{"type":"ACCESS","description":"Identities with reporting abilities","reviewerId":null,"reviewer":null,"query":"@access(name: (\"reporter\"))","identityIds":null,"accessConstraints":[]},"roleCompositionCampaignInfo":null,"alerts":null,"totalCertifications":null,"completedCertifications":null,"sourcesWithOrphanEntitlements":null,"id":null,"name":"Search Campaign Review","description":"Review everyone's access to the reporting system.","deadline":null,"type":"SEARCH","status":null,"emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false}}},"Source Owner":{"value":{"id":"b9f41bc69e7a4291b9de0630396d030d","name":"AD Source Review","created":"2022-08-02T13:40:36.857Z","modified":null,"description":"A review of our AD source.","deadlineDuration":"P1M","ownerRef":{"email":"support@testmail.identitysoon.com","type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"scheduled":false,"campaign":{"created":null,"modified":null,"filter":{"type":"CAMPAIGN_FILTER","id":"e0adaae69852e8fe8b8a3d48e5ce757c"},"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":{"sourceIds":["2c918084707deba501709d45ce4e5569"]},"searchCampaignInfo":null,"roleCompositionCampaignInfo":null,"alerts":null,"totalCertifications":null,"completedCertifications":null,"sourcesWithOrphanEntitlements":null,"id":null,"name":"AD Source Review","description":"Review everyone's access.","deadline":null,"type":"SOURCE_OWNER","status":null,"emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false}}},"RoleComposition":{"value":{"id":"b9f41bc69e7a4291b9de0630396d030d","name":"Campaign With Admin Role","created":"2022-08-02T13:40:36.857Z","modified":null,"description":"Campaign With Admin Role","deadlineDuration":null,"ownerRef":{"email":"support@testmail.identitysoon.com","type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"scheduled":false,"campaign":{"created":null,"modified":null,"filter":null,"sunsetCommentsRequired":true,"sourceOwnerCampaignInfo":null,"searchCampaignInfo":null,"roleCompositionCampaignInfo":{"remediatorRef":{"type":"IDENTITY","id":"7ec252acbd4245548bc25df22348cb75","name":"SailPoint Support"},"reviewerId":null,"reviewer":null,"roleIds":["b15d609fc5c8434b865fe552315fda8f"],"query":null,"description":null},"alerts":null,"totalCertifications":null,"completedCertifications":null,"sourcesWithOrphanEntitlements":null,"id":null,"name":"Campaign With Admin Role","description":"Campaign With Admin Role","deadline":null,"type":"ROLE_COMPOSITION","status":null,"emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/campaign-templates/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update a Campaign Template","description":{"content":"Allows updating individual fields on a campaign template using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.","type":"text/plain"},"url":{"path":["campaign-templates",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the campaign template being modified.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update a Campaign Template + + + +Allows updating individual fields on a campaign template using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + +
    Path Parameters
    Request Body array required
    + +A list of campaign update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + +The following fields are patchable: +* name +* description +* ownerRef +* deadlineDuration +* campaign (all fields that are allowed during create) + + +
    + +Indicates the PATCH operation succeeded, and returns the template's new representation. + +
    Schema
      ownerRef object
      + +The owner of this template, and the owner of campaigns generated from this template via a schedule. This field is automatically populated at creation time with the current user. + +
      campaign object
      filter object
      + +Determines which items will be included in this campaign. The default campaign filter is used if this field is left blank. + +
      sourceOwnerCampaignInfo object
      + +Must be set only if the campaign type is SOURCE_OWNER. + +
      searchCampaignInfo object
      + +Must be set only if the campaign type is SEARCH. + +
      reviewer object
      + +If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP + +
      accessConstraints object[]
      + +**Possible values:** `<= 1000` + +
      + +Further reduces the scope of the campaign by excluding identities (from `query` or `identityIds`) that do not have this access. + +
      roleCompositionCampaignInfo object
      + +Optional configuration options for role composition campaigns. + +
      reviewer object
      + +If specified, this identity or governance group will be the reviewer for all certifications in this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP + +
      remediatorRef object
      + +This determines who remediation tasks will be assigned to. Remediation tasks are created for each revoke decision on items in the campaign. The only legal remediator type is 'IDENTITY', and the chosen identity must be a Role Admin or Org Admin. + +
      alerts object[]
      + +A list of errors and warnings that have accumulated. + +
      localizations object[]
      sourcesWithOrphanEntitlements object[]
      + +A list of sources in the campaign that contain \"orphan entitlements\" (entitlements without a corresponding Managed Attribute). An empty list indicates the campaign has no orphan entitlements. Null indicates there may be unknown orphan entitlements in the campaign (the campaign was created before this feature was implemented). + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/patch-entitlement.api.mdx b/docs/sailpoint-api-beta/patch-entitlement.api.mdx new file mode 100644 index 000000000..f421da7d9 --- /dev/null +++ b/docs/sailpoint-api-beta/patch-entitlement.api.mdx @@ -0,0 +1,99 @@ +--- +id: patch-entitlement +sidebar_label: Patch a specified Entitlement +hide_title: true +hide_table_of_contents: true +api: {"operationId":"patchEntitlement","tags":["Entitlements"],"description":"This API updates an existing Entitlement using [JSON Patch](https://tools.ietf.org/html/rfc6902) syntax.\n\nThe following fields are patchable: **requestable**, **privileged**, **segments**\n\nA token with ORG_ADMIN or SOURCE_ADMIN authority is required to call this API.","parameters":[{"name":"id","in":"path","description":"ID of the Entitlement to patch","required":true,"schema":{"type":"string","example":"2c91808a7813090a017814121e121518"}}],"requestBody":{"content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}},"examples":{"Make an Entitlement Requestable and Privileged in One Call":{"description":"This example shows how multiple fields may be updated with a single patch call.","value":[{"op":"replace","path":"/requestable","value":true},{"op":"replace","path":"/privileged","value":true}]},"Assign an Entitlement to a Segment":{"description":"This example illustrates the use of patch to assign an Entitlement to a Segment by adding the Segment's ID to the Entitlement's segments array.","value":[{"op":"add","path":"/segments/-","value":"f7b1b8a3-5fed-4fd4-ad29-82014e137e19"}]}}}}},"responses":{"200":{"description":"Responds with the Entitlement as updated.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The entitlement id","example":"2c91808874ff91550175097daaec161c"},"name":{"type":"string","description":"The entitlement name","example":"LauncherTestGroup2"},"attribute":{"type":"string","description":"The entitlement attribute name","example":"memberOf"},"value":{"type":"string","description":"The value of the entitlement","example":"CN=LauncherTestGroup2,OU=LauncherTestOrg,OU=slpt-automation,DC=TestAutomationAD,DC=local"},"sourceSchemaObjectType":{"type":"string","description":"The object type of the entitlement from the source schema","example":"group"},"description":{"type":"string","description":"The description of the entitlement","example":"CN=LauncherTestGroup2,OU=LauncherTestOrg,OU=slpt-automation,DC=TestAutomationAD,DC=local"},"privileged":{"type":"boolean","description":"True if the entitlement is privileged","example":true},"cloudGoverned":{"type":"boolean","description":"True if the entitlement is cloud governed","example":true},"created":{"type":"string","description":"Time when the entitlement was created","format":"date-time","example":"2020-10-08T18:33:52.029Z"},"modified":{"type":"string","description":"Time when the entitlement was last modified","format":"date-time","example":"2020-10-08T18:33:52.029Z"},"source":{"type":"object","properties":{"id":{"type":"string","description":"The source ID","example":"2c9180827ca885d7017ca8ce28a000eb"},"type":{"type":"string","description":"The source type, will always be \"SOURCE\"","example":"SOURCE"},"name":{"type":"string","description":"The source name","example":"ODS-AD-Source"}},"example":[{"type":"SOURCE","id":"2c9180835d191a86015d28455b4b232a","name":"HR Active Directory"}]},"attributes":{"type":"object","description":"A map of free-form key-value pairs from the source system","example":{"fieldName":"fieldValue"},"additionalProperties":true},"segments":{"type":"array","items":{"type":"string"},"nullable":true,"description":"List of IDs of segments, if any, to which this Entitlement is assigned.","example":["f7b1b8a3-5fed-4fd4-ad29-82014e137e19","29cb6c06-1da8-43ea-8be4-b3125f248f2a"]},"directPermissions":{"type":"array","items":{"type":"object","description":"Simplified DTO for the Permission objects stored in SailPoint's database. The data is aggregated from customer systems and is free-form, so its appearance can vary largely between different clients/customers.","properties":{"rights":{"type":"array","description":"All the rights (e.g. actions) that this permission allows on the target","readOnly":true,"items":{"type":"string","example":"SELECT"}},"target":{"type":"string","description":"The target the permission would grants rights on.","readOnly":true,"example":"SYS.GV_$TRANSACTION"}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/entitlements","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Patch a specified Entitlement","description":{"content":"This API updates an existing Entitlement using [JSON Patch](https://tools.ietf.org/html/rfc6902) syntax.\n\nThe following fields are patchable: **requestable**, **privileged**, **segments**\n\nA token with ORG_ADMIN or SOURCE_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["entitlements"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the Entitlement to patch","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Patch a specified Entitlement + + + +This API updates an existing Entitlement using [JSON Patch](https://tools.ietf.org/html/rfc6902) syntax. + +The following fields are patchable: **requestable**, **privileged**, **segments** + +A token with ORG_ADMIN or SOURCE_ADMIN authority is required to call this API. + +
    Path Parameters
    Request Body array
      value object
      + +The value to be used for the operation, required for "add" and "replace" operations + +
    • anyOf
    • string
    • integer
    • anyOf
    • string
    • integer
    + +Responds with the Entitlement as updated. + +
    Schema
      source object
      attributes object
      + +A map of free-form key-value pairs from the source system + +
      directPermissions object[]
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/patch-oauth-client.api.mdx b/docs/sailpoint-api-beta/patch-oauth-client.api.mdx new file mode 100644 index 000000000..64b73c514 --- /dev/null +++ b/docs/sailpoint-api-beta/patch-oauth-client.api.mdx @@ -0,0 +1,113 @@ +--- +id: patch-oauth-client +sidebar_label: Patch OAuth Client +hide_title: true +hide_table_of_contents: true +api: {"operationId":"patchOauthClient","tags":["OAuth Clients"],"description":"This performs a targeted update to the field(s) of an OAuth client.\nRequest will require a security scope of \n'idn:oathkeeper-client:update'","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The OAuth client id","example":"ef38f94347e94562b5bb8424a56397d8"}],"requestBody":{"required":true,"description":"A list of OAuth client update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\n\nThe following fields are patchable:\n* tenant\n* businessName\n* homepageUrl\n* name\n* description\n* accessTokenValiditySeconds\n* refreshTokenValiditySeconds\n* redirectUris\n* grantTypes\n* accessType\n* enabled\n* strongAuthSupported\n* claimsSupported\n","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}},"example":[{"op":"replace","path":"/strongAuthSupported","value":true},{"op":"replace","path":"/businessName","value":"acme-solar"}]}}},"responses":{"200":{"description":"Indicates the PATCH operation succeeded, and returns the OAuth client's new representation.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the OAuth client","example":"2c9180835d2e5168015d32f890ca1581"},"businessName":{"type":"string","description":"The name of the business the API Client should belong to","example":"Acme-Solar"},"homepageUrl":{"type":"string","description":"The homepage URL associated with the owner of the API Client","example":"http://localhost:12345"},"name":{"type":"string","description":"A human-readable name for the API Client","example":"Demo API Client"},"description":{"type":"string","description":"A description of the API Client","example":"An API client used for the authorization_code, refresh_token, and client_credentials flows"},"accessTokenValiditySeconds":{"type":"string","description":"The number of seconds an access token generated for this API Client is valid for","example":750},"refreshTokenValiditySeconds":{"type":"string","description":"The number of seconds a refresh token generated for this API Client is valid for","example":86400},"redirectUris":{"type":"array","items":{"type":"string"},"description":"A list of the approved redirect URIs used with the authorization_code flow","example":["http://localhost:12345"]},"grantTypes":{"type":"array","items":{"description":"OAuth2 Grant Type","type":"string","example":"CLIENT_CREDENTIALS","enum":["CLIENT_CREDENTIALS","AUTHORIZATION_CODE","REFRESH_TOKEN"]},"description":"A list of OAuth 2.0 grant types this API Client can be used with","example":["AUTHORIZATION_CODE","CLIENT_CREDENTIALS","REFRESH_TOKEN"]},"accessType":{"description":"The access type (online or offline) of this API Client","example":"OFFLINE","type":"string","enum":["ONLINE","OFFLINE"]},"type":{"description":"The type of the API Client (public or confidential)","example":"CONFIDENTIAL","type":"string","enum":["CONFIDENTIAL","PUBLIC"]},"internal":{"type":"boolean","description":"An indicator of whether the API Client can be used for requests internal to IDN","example":false},"enabled":{"type":"boolean","description":"An indicator of whether the API Client is enabled for use","example":true},"strongAuthSupported":{"type":"boolean","description":"An indicator of whether the API Client supports strong authentication","example":false},"claimsSupported":{"type":"boolean","description":"An indicator of whether the API Client supports the serialization of SAML claims when used with the authorization_code flow","example":false},"created":{"type":"string","format":"date-time","description":"The date and time, down to the millisecond, when the API Client was created","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","description":"The date and time, down to the millisecond, when the API Client was last updated","example":"2018-06-25T20:22:28.104Z"}},"required":["id","businessName","homepageUrl","name","description","accessTokenValiditySeconds","refreshTokenValiditySeconds","redirectUris","grantTypes","accessType","type","internal","enabled","strongAuthSupported","claimsSupported","created","modified"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/oauth-clients/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Patch OAuth Client","description":{"content":"This performs a targeted update to the field(s) of an OAuth client.\nRequest will require a security scope of \n'idn:oathkeeper-client:update'","type":"text/plain"},"url":{"path":["oauth-clients",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The OAuth client id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Patch OAuth Client + + + +This performs a targeted update to the field(s) of an OAuth client. +Request will require a security scope of +'idn:oathkeeper-client:update' + +
    Path Parameters
    Request Body array required
    + +A list of OAuth client update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + +The following fields are patchable: +* tenant +* businessName +* homepageUrl +* name +* description +* accessTokenValiditySeconds +* refreshTokenValiditySeconds +* redirectUris +* grantTypes +* accessType +* enabled +* strongAuthSupported +* claimsSupported + + +
      value object
      + +The value to be used for the operation, required for "add" and "replace" operations + +
    • anyOf
    • string
    • integer
    • anyOf
    • string
    • integer
    + +Indicates the PATCH operation succeeded, and returns the OAuth client's new representation. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/patch-org-config.api.mdx b/docs/sailpoint-api-beta/patch-org-config.api.mdx new file mode 100644 index 000000000..f7e6f1795 --- /dev/null +++ b/docs/sailpoint-api-beta/patch-org-config.api.mdx @@ -0,0 +1,98 @@ +--- +id: patch-org-config +sidebar_label: Patch an Org configuration property +hide_title: true +hide_table_of_contents: true +api: {"operationId":"patchOrgConfig","tags":["Org Config"],"description":"Patch configuration of the current org using http://jsonpatch.com/ syntax. Commonly used for changing the time zone of an org.\nRequest will require a security scope of:\n- 'idn:org-config:write'\n- 'idn:org-config-internal:write'","requestBody":{"description":"A list of schema attribute update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}},"example":[{"op":"replace","path":"/timeZone","value":"America/Toronto"}]}},"required":true},"responses":{"200":{"description":"The Org was successfully patched.","content":{"application/json":{"schema":{"type":"object","description":"DTO class for OrgConfig data accessible by customer external org admin (\"ORG_ADMIN\") users","properties":{"orgName":{"type":"string","description":"The name of the org.","example":"acme-solar"},"timeZone":{"type":"string","description":"The selected time zone which is to be used for the org. This directly affects when scheduled tasks are executed. Valid options can be found at /beta/org-config/valid-time-zones","example":"America/Toronto"},"lcsChangeHonorsSourceEnableFeature":{"type":"boolean","description":"Flag to determine whether the LCS_CHANGE_HONORS_SOURCE_ENABLE_FEATURE flag is enabled for the current org.","example":false},"armCustomerId":{"type":"string","description":"ARM Customer ID","example":"DE38E75A-5FF6-4A65-5DC7-08D64426B09E"},"armSapSystemIdMappings":{"type":"string","description":"A list of IDN::sourceId to ARM::systemId mappings.","example":[{"sourceId":"2c91808c791a94e501792388b0d62659","systemId":"1556"},{"sourceId":"2_2c91808c791a94e501792388b0d62659","systemId":"2_1556"},{"sourceId":"3_2c91808c791a94e501792388b0d62659","systemId":"3_1556"}]},"armAuth":{"type":"string","description":"ARM authentication string","example":"epiYNTRYA2S7swisDWk1Zv4VMNgvqEjiBh5_ufuCWsma2m-5XADijqBg0ijXLby5nS6lxZNXabhGnAPGeDGc4V3jQKrhwV-UHypRLs8ZLgOjiQNus9NimS0uPdKomRW6TFWqXyfnYd-znNgbbVuwUy9GyD9ebDVJSntPastxSx7UcyGuWBqfNZYpuxKRWe_7TVY60qL55jUqyz8N4XUbbdcxdbZ0uik6ut-Bv90MKTbZexBW_PR4qcgIkaEs4kIenLyBxnGziYo7AO0tJ8bGHO8FJRkibCpAQIt7PISLo7Gg_Xf9j10dKq2YDgy4pPTvz3fE2ZHYnXCXvXFSA-vVag=="},"armDb":{"type":"string","description":"ARM database name","example":"EU"},"armSsoUrl":{"type":"string","description":"ARM SSO URL","example":"https://your-arm-sso-url"},"iaiEnableCertificationRecommendations":{"type":"boolean","description":"Flag to determine whether IAI Certification Recommendations are enabled for the current org","example":true},"sodReportConfigs":{"type":"array","items":{"type":"object","properties":{"columnName":{"type":"string","description":"Name of column in report","example":"SOD Business Name"},"required":{"type":"boolean","description":"If true, column is required in all reports, and this entry is immutable. A 400 error will result from any attempt to modify the column's definition.","example":true,"default":false},"included":{"type":"boolean","description":"If true, column is included in the report. A 400 error will be thrown if an attempt is made to set included=false if required==true.","example":false,"default":false},"order":{"type":"integer","format":"int32","minimum":0,"maximum":2147483647,"description":"Relative sort order for the column. Columns will be displayed left-to-right in nondecreasing order.","example":2}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/org-config","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Patch an Org configuration property","description":{"content":"Patch configuration of the current org using http://jsonpatch.com/ syntax. Commonly used for changing the time zone of an org.\nRequest will require a security scope of:\n- 'idn:org-config:write'\n- 'idn:org-config-internal:write'","type":"text/plain"},"url":{"path":["org-config"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Patch an Org configuration property + + + +Patch configuration of the current org using http://jsonpatch.com/ syntax. Commonly used for changing the time zone of an org. +Request will require a security scope of: +- 'idn:org-config:write' +- 'idn:org-config-internal:write' + +
    Request Body array required
    + +A list of schema attribute update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + +
      value object
      + +The value to be used for the operation, required for "add" and "replace" operations + +
    • anyOf
    • string
    • integer
    • anyOf
    • string
    • integer
    + +The Org was successfully patched. + +
    Schema
      sodReportConfigs object[]
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/patch-role-mining-session.api.mdx b/docs/sailpoint-api-beta/patch-role-mining-session.api.mdx new file mode 100644 index 000000000..13e6a35cb --- /dev/null +++ b/docs/sailpoint-api-beta/patch-role-mining-session.api.mdx @@ -0,0 +1,95 @@ +--- +id: patch-role-mining-session +sidebar_label: Patch a role mining session +hide_title: true +hide_table_of_contents: true +api: {"operationId":"patchRoleMiningSession","tags":["IAI Role Mining"],"description":"The method updates an existing role mining session using PATCH. Supports op in {\"replace\"} and changes to pruneThreshold and/or minNumIdentitiesInPotentialRole. The potential roles in this role mining session is then re-calculated.","parameters":[{"in":"path","name":"sessionId","schema":{"type":"string"},"required":true,"description":"The role mining session id to be patched","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"}],"requestBody":{"required":true,"description":"Replace pruneThreshold and/or minNumIdentitiesInPotentialRole in role mining session. Update saved status or saved name for a role mining session.","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}},"example":[{"op":"replace","path":"/pruneThreshold","value":"83"},{"op":"replace","path":"/minNumIdentitiesInPotentialRole","value":"10"},{"op":"replace","path":"/saved","value":"false"},{"op":"replace","path":"/name","value":"RM Session - 07/10/22"},{"op":"add","path":"/name","value":"RM Session - 07/10/22"}]}}},"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/role-mining-sessions/{sessionId}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Patch a role mining session","description":{"content":"The method updates an existing role mining session using PATCH. Supports op in {\"replace\"} and changes to pruneThreshold and/or minNumIdentitiesInPotentialRole. The potential roles in this role mining session is then re-calculated.","type":"text/plain"},"url":{"path":["role-mining-sessions",":sessionId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The role mining session id to be patched","type":"text/plain"},"type":"any","value":"","key":"sessionId"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Patch a role mining session + + + +The method updates an existing role mining session using PATCH. Supports op in {"replace"} and changes to pruneThreshold and/or minNumIdentitiesInPotentialRole. The potential roles in this role mining session is then re-calculated. + +
    Path Parameters
    Request Body array required
    + +Replace pruneThreshold and/or minNumIdentitiesInPotentialRole in role mining session. Update saved status or saved name for a role mining session. + +
      value object
      + +The value to be used for the operation, required for "add" and "replace" operations + +
    • anyOf
    • string
    • integer
    • anyOf
    • string
    • integer
    + +Accepted - Returned if the request was successfully accepted into the system. + +
    Schema
    • object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/patch-role.api.mdx b/docs/sailpoint-api-beta/patch-role.api.mdx new file mode 100644 index 000000000..10ee1eee6 --- /dev/null +++ b/docs/sailpoint-api-beta/patch-role.api.mdx @@ -0,0 +1,139 @@ +--- +id: patch-role +sidebar_label: Patch a specified Role +hide_title: true +hide_table_of_contents: true +api: {"operationId":"patchRole","tags":["Roles"],"description":"This API updates an existing Role using [JSON Patch](https://tools.ietf.org/html/rfc6902) syntax.\n\nThe following fields are patchable: **name**, **description**, **enabled**, **owner**, **accessProfiles**, **membership**, **requestable**, **accessRequestConfig**, **revokeRequestConfig**, **segments**\n\nA token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to call this API. In addition, a token with ROLE_SUBADMIN authority may only call this API if all Access Profiles included in the Role are associated to Sources with management workgroups of which the ROLE_SUBADMIN is a member.","parameters":[{"name":"id","in":"path","description":"ID of the Role to patch","required":true,"schema":{"type":"string","example":"2c91808a7813090a017814121e121518"}}],"requestBody":{"content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}},"examples":{"Make a Role Requestable and Enable it in One Call":{"description":"This example shows how multiple fields may be updated with a single patch call.","value":[{"op":"replace","path":"/requestable","value":true},{"op":"replace","path":"/enabled","value":true}]},"Assign a Role to a Segment":{"description":"This example illustrates the use of patch to assign a Role to a Segment by adding the Segment's ID to the Role's segments array.","value":[{"op":"add","path":"/segments/-","value":"f7b1b8a3-5fed-4fd4-ad29-82014e137e19"}]},"Set the Membership Selection Criteria to a List of Identities":{"description":"This example shows how to define a Role's membershp by providing a list of Identities, referenced by their IDs.","value":[{"op":"replace","path":"/membership","value":{"type":"IDENTITY_LIST","identities":[{"id":"2c91808973fe906c0174262092014ed9"},{"id":"2c918086262092014ed94fb8a47612f3"}]}}]},"Set the Membership Selection Criteria to a Standard Expression":{"description":"This example shows how to define a Role's membership using STANDARD criteria. In this case, the Role will be granted to all Identities which have the *Engineering* attribute from the indicated Source.","value":[{"op":"replace","path":"/membership","value":{"type":"STANDARD","criteria":{"operation":"OR","children":[{"operation":"EQUALS","key":{"type":"ENTITLEMENT","property":"attribute.memberOf","sourceId":"2c9180887701fb2014213e122092014e"},"stringValue":"Engineering"}]}}}]},"Add a New Clause as the Child of an Existing Standard Expression":{"description":"This example shows how to add a child clause to an existing STANDARD criteria expression.","value":[{"op":"add","path":"/membership/criteria/children/-","value":{"operation":"ENDS_WITH","key":{"type":"IDENTITY","property":"attribute.email"},"stringValue":"@identitynow.com"}}]}}}},"required":true},"responses":{"200":{"description":"Responds with the Role as updated.","content":{"application/json":{"schema":{"type":"object","description":"A Role","properties":{"id":{"type":"string","description":"The id of the Role. This field must be left null when creating an Role, otherwise a 400 Bad Request error will result.","example":"2c918086749d78830174a1a40e121518"},"name":{"type":"string","description":"The human-readable display name of the Role","maxLength":128,"example":"Role 2567"},"created":{"type":"string","description":"Date the Role was created","format":"date-time","example":"2021-03-01T22:32:58.104Z","readOnly":true},"modified":{"type":"string","description":"Date the Role was last modified.","format":"date-time","example":"2021-03-02T20:22:28.104Z","readOnly":true},"description":{"type":"string","nullable":true,"description":"A human-readable description of the Role","example":"Urna amet cursus pellentesque nisl orci maximus lorem nisl euismod fusce morbi placerat adipiscing maecenas nisi tristique et metus et lacus sed morbi nunc nisl maximus magna arcu varius sollicitudin elementum enim maecenas nisi id ipsum tempus fusce diam ipsum tortor."},"owner":{"type":"object","description":"The owner of this object.","properties":{"type":{"description":"Owner type. This field must be either left null or set to 'IDENTITY' on input, otherwise a 400 Bad Request error will result.","example":"IDENTITY","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"]},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of the owner. It may be left null or omitted in a POST or PATCH. If set, it must match the current value of the owner's display name, otherwise a 400 Bad Request error will result.","example":"support"}}},"accessProfiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the Access Profile","example":"ff808081751e6e129f1518161919ecca"},"type":{"type":"string","description":"Type of requested object. This field must be either left null or set to 'ACCESS_PROFILE' when creating an Access Profile, otherwise a 400 Bad Request error will result.","enum":["ACCESS_PROFILE"],"example":"ACCESS_PROFILE"},"name":{"type":"string","description":"Human-readable display name of the Access Profile. This field is ignored on input.","example":"Access Profile 2567"}}},"nullable":true},"membership":{"nullable":true,"type":"object","description":"When present, specifies that the Role is to be granted to Identities which either satisfy specific criteria or which are members of a given list of Identities.","properties":{"type":{"type":"string","enum":["STANDARD","IDENTITY_LIST"],"description":"This enum characterizes the type of a Role's membership selector. Only the following two are fully supported:\n\nSTANDARD: Indicates that Role membership is defined in terms of a criteria expression\n\nIDENTITY_LIST: Indicates that Role membership is conferred on the specific identities listed","example":"IDENTITY_LIST"},"criteria":{"nullable":true,"type":"object","description":"Defines STANDARD type Role membership","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","STARTS_WITH","ENDS_WITH","AND","OR"],"description":"An operation","example":"EQUALS"},"key":{"type":"object","description":"Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria","properties":{"type":{"type":"string","enum":["IDENTITY","ACCOUNT","ENTITLEMENT"],"description":"Indicates whether the associated criteria represents an expression on identity attributes, account attributes, or entitlements, respectively.","example":"ACCOUNT"},"property":{"type":"string","description":"The name of the attribute or entitlement to which the associated criteria applies.","example":"attribute.email"},"sourceId":{"type":"string","nullable":true,"description":"ID of the Source from which an account attribute or entitlement is drawn. Required if type is ACCOUNT or ENTITLEMENT","example":"2c9180867427f3a301745aec18211519"}},"required":["type","property"]},"stringValue":{"type":"string","description":"String value to test the Identity attribute, Account attribute, or Entitlement specified in the key w/r/t the specified operation. If this criteria is a leaf node, that is, if the operation is one of EQUALS, NOT_EQUALS, CONTAINS, STARTS_WITH, or ENDS_WITH, this field is required. Otherwise, specifying it is an error.","example":"carlee.cert1c9f9b6fd@mailinator.com"},"children":{"type":"array","items":{"type":"object","description":"Defines STANDARD type Role membership","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","STARTS_WITH","ENDS_WITH","AND","OR"],"description":"An operation","example":"EQUALS"},"key":{"type":"object","description":"Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria","properties":{"type":{"type":"string","enum":["IDENTITY","ACCOUNT","ENTITLEMENT"],"description":"Indicates whether the associated criteria represents an expression on identity attributes, account attributes, or entitlements, respectively.","example":"ACCOUNT"},"property":{"type":"string","description":"The name of the attribute or entitlement to which the associated criteria applies.","example":"attribute.email"},"sourceId":{"type":"string","nullable":true,"description":"ID of the Source from which an account attribute or entitlement is drawn. Required if type is ACCOUNT or ENTITLEMENT","example":"2c9180867427f3a301745aec18211519"}},"required":["type","property"]},"stringValue":{"type":"string","description":"String value to test the Identity attribute, Account attribute, or Entitlement specified in the key w/r/t the specified operation. If this criteria is a leaf node, that is, if the operation is one of EQUALS, NOT_EQUALS, CONTAINS, STARTS_WITH, or ENDS_WITH, this field is required. Otherwise, specifying it is an error.","example":"carlee.cert1c9f9b6fd@mailinator.com"},"children":{"type":"array","items":{"type":"object","description":"Defines STANDARD type Role membership","properties":{"operation":{"type":"string","enum":["EQUALS","NOT_EQUALS","CONTAINS","STARTS_WITH","ENDS_WITH","AND","OR"],"description":"An operation","example":"EQUALS"},"key":{"type":"object","description":"Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria","properties":{"type":{"type":"string","enum":["IDENTITY","ACCOUNT","ENTITLEMENT"],"description":"Indicates whether the associated criteria represents an expression on identity attributes, account attributes, or entitlements, respectively.","example":"ACCOUNT"},"property":{"type":"string","description":"The name of the attribute or entitlement to which the associated criteria applies.","example":"attribute.email"},"sourceId":{"type":"string","nullable":true,"description":"ID of the Source from which an account attribute or entitlement is drawn. Required if type is ACCOUNT or ENTITLEMENT","example":"2c9180867427f3a301745aec18211519"}},"required":["type","property"]},"stringValue":{"type":"string","description":"String value to test the Identity attribute, Account attribute, or Entitlement specified in the key w/r/t the specified operation. If this criteria is a leaf node, that is, if the operation is one of EQUALS, NOT_EQUALS, CONTAINS, STARTS_WITH, or ENDS_WITH, this field is required. Otherwise, specifying it is an error.","example":"carlee.cert1c9f9b6fd@mailinator.com"}}},"nullable":true,"description":"Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be children or OR nodes and vice-versa."}}},"nullable":true,"description":"Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be children or OR nodes and vice-versa."}}},"identities":{"type":"array","items":{"type":"object","description":"A reference to an Identity in an IDENTITY_LIST role membership criteria.","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY","nullable":true},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","nullable":true,"description":"Human-readable display name of the Identity.","example":"Thomas Edison"},"aliasName":{"type":"string","nullable":true,"description":"User name of the Identity","example":"t.edison"}}},"nullable":true,"description":"Defines role membership as being exclusive to the specified Identities, when type is IDENTITY_LIST."}}},"legacyMembershipInfo":{"type":"object","nullable":true,"description":"This field is not directly modifiable and is generally expected to be *null*. In very rare instances, some Roles may have been created using membership selection criteria that are no longer fully supported. While these Roles will still work, they should be migrated to STANDARD or IDENTITY_LIST selection criteria. This field exists for informational purposes as an aid to such migration.","example":{"type":"IDENTITY_LIST"},"additionalProperties":true},"enabled":{"type":"boolean","description":"Whether the Role is enabled or not. This field is false by default.","example":true},"requestable":{"type":"boolean","description":"Whether the Role can be the target of Access Requests. This field is false by default.","example":true},"accessRequestConfig":{"nullable":true,"description":"Access request configuration for this object","type":"object","properties":{"commentsRequired":{"type":"boolean","description":"Whether the requester of the containing object must provide comments justifying the request","example":true},"denialCommentsRequired":{"type":"boolean","description":"Whether an approver must provide comments when denying the request","example":true},"approvalSchemes":{"type":"array","description":"List describing the steps in approving the request","items":{"type":"object","properties":{"approverType":{"type":"string","enum":["OWNER","MANAGER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step. Values are as follows.\n\n**OWNER**: Owner of the associated Role\n\n**MANAGER**: Manager of the Identity making the request\n\n**GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field","example":"GOVERNANCE_GROUP"},"approverId":{"type":"string","description":"Id of the specific approver, used only when approverType is GOVERNANCE_GROUP","example":"46c79819-a69f-49a2-becb-12c971ae66c6"}}}}}},"revocationRequestConfig":{"nullable":true,"description":"Revocation request configuration for this object.","type":"object","properties":{"approvalSchemes":{"type":"array","description":"List describing the steps in approving the revocation request","items":{"type":"object","properties":{"approverType":{"type":"string","enum":["OWNER","SOURCE_OWNER","MANAGER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step. Values are as follows.\n\n**OWNER**: Owner of the associated Access Profile or Role\n\n**SOURCE_OWNER**: Owner of the Source associated with an Access Profile\n\n**MANAGER**: Manager of the Identity making the request\n\n**GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field","example":"GOVERNANCE_GROUP"},"approverId":{"type":"string","description":"Id of the specific approver, used only when approverType is GOVERNANCE_GROUP","example":"46c79819-a69f-49a2-becb-12c971ae66c6"}}}}}},"segments":{"type":"array","items":{"type":"string"},"nullable":true,"description":"List of IDs of segments, if any, to which this Role is assigned.","example":["f7b1b8a3-5fed-4fd4-ad29-82014e137e19","29cb6c06-1da8-43ea-8be4-b3125f248f2a"]}},"required":["name"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:role:update","idn:role-checked:update"]}],"method":"patch","path":"/roles/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Patch a specified Role","description":{"content":"This API updates an existing Role using [JSON Patch](https://tools.ietf.org/html/rfc6902) syntax.\n\nThe following fields are patchable: **name**, **description**, **enabled**, **owner**, **accessProfiles**, **membership**, **requestable**, **accessRequestConfig**, **revokeRequestConfig**, **segments**\n\nA token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to call this API. In addition, a token with ROLE_SUBADMIN authority may only call this API if all Access Profiles included in the Role are associated to Sources with management workgroups of which the ROLE_SUBADMIN is a member.","type":"text/plain"},"url":{"path":["roles",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the Role to patch","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Patch a specified Role + + + +This API updates an existing Role using [JSON Patch](https://tools.ietf.org/html/rfc6902) syntax. + +The following fields are patchable: **name**, **description**, **enabled**, **owner**, **accessProfiles**, **membership**, **requestable**, **accessRequestConfig**, **revokeRequestConfig**, **segments** + +A token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to call this API. In addition, a token with ROLE_SUBADMIN authority may only call this API if all Access Profiles included in the Role are associated to Sources with management workgroups of which the ROLE_SUBADMIN is a member. + +
    Path Parameters
    Request Body array required
      value object
      + +The value to be used for the operation, required for "add" and "replace" operations + +
    • anyOf
    • string
    • integer
    • anyOf
    • string
    • integer
    + +Responds with the Role as updated. + +
    Schema
      owner object
      + +The owner of this object. + +
      accessProfiles object[]
      membership object
      + +When present, specifies that the Role is to be granted to Identities which either satisfy specific criteria or which are members of a given list of Identities. + +
      criteria object
      + +Defines STANDARD type Role membership + +
      key object
      + +Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria + +
      children object[]
      + +Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be children or OR nodes and vice-versa. + +
      key object
      + +Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria + +
      children object[]
      + +Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be children or OR nodes and vice-versa. + +
      key object
      + +Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria + +
      identities object[]
      + +Defines role membership as being exclusive to the specified Identities, when type is IDENTITY_LIST. + +
      legacyMembershipInfo object
      + +This field is not directly modifiable and is generally expected to be *null*. In very rare instances, some Roles may have been created using membership selection criteria that are no longer fully supported. While these Roles will still work, they should be migrated to STANDARD or IDENTITY_LIST selection criteria. This field exists for informational purposes as an aid to such migration. + +
      accessRequestConfig object
      + +Access request configuration for this object + +
      approvalSchemes object[]
      + +List describing the steps in approving the request + +
      revocationRequestConfig object
      + +Revocation request configuration for this object. + +
      approvalSchemes object[]
      + +List describing the steps in approving the revocation request + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/patch-schema-attribute.api.mdx b/docs/sailpoint-api-beta/patch-schema-attribute.api.mdx new file mode 100644 index 000000000..de65f2002 --- /dev/null +++ b/docs/sailpoint-api-beta/patch-schema-attribute.api.mdx @@ -0,0 +1,100 @@ +--- +id: patch-schema-attribute +sidebar_label: Patch a Schema Attribute for Non-Employee Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"patchSchemaAttribute","tags":["Non-Employee Lifecycle Management"],"description":"This end-point patches a specific schema attribute for a non-employee SourceId.\n\nRequest will require a security scope of:\n\n'idn:nesr:update'\n","parameters":[{"in":"path","name":"attributeId","schema":{"type":"string"},"required":true,"description":"The Schema Attribute Id (UUID)"},{"in":"path","name":"sourceId","schema":{"type":"string"},"required":true,"description":"The Source id"}],"requestBody":{"description":"A list of schema attribute update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. The following properties are allowed for update ':' 'label', 'helpText', 'placeholder', 'required'.","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}},"example":[{"op":"replace","path":"/label","value":{"new attribute label":null}}]}},"required":true},"responses":{"200":{"description":"The Schema Attribute was successfully patched.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"UUID","example":"ac110005-7156-1150-8171-5b292e3e0084","description":"Schema Attribute Id"},"system":{"type":"boolean","description":"True if this schema attribute is mandatory on all non-employees sources.","example":true},"modified":{"type":"string","format":"date-time","description":"When the schema attribute was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the schema attribute was created.","example":"2019-08-23T18:40:35.772Z"},"type":{"type":"string","enum":["TEXT","DATE","IDENTITY"],"description":"Enum representing the type of data a schema attribute accepts."},"label":{"type":"string","description":"Label displayed on the UI for this schema attribute.","example":"Account Name"},"technicalName":{"type":"string","description":"The technical name of the attribute. Must be unique per source.","example":"account.name"},"helpText":{"type":"string","description":"help text displayed by UI.","example":"The unique identifier for the account"},"placeholder":{"type":"string","description":"Hint text that fills UI box.","example":"Enter a unique user name for this account."},"required":{"type":"boolean","description":"If true, the schema attribute is required for all non-employees in the source","example":true}},"required":["type","technicalName","label"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/non-employee-sources/{sourceId}/schema-attributes/{attributeId}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Patch a Schema Attribute for Non-Employee Source","description":{"content":"This end-point patches a specific schema attribute for a non-employee SourceId.\n\nRequest will require a security scope of:\n\n'idn:nesr:update'\n","type":"text/plain"},"url":{"path":["non-employee-sources",":sourceId","schema-attributes",":attributeId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Schema Attribute Id (UUID)","type":"text/plain"},"type":"any","value":"","key":"attributeId"},{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Patch a Schema Attribute for Non-Employee Source + + + +This end-point patches a specific schema attribute for a non-employee SourceId. + +Request will require a security scope of: + +'idn:nesr:update' + + +
    Path Parameters
    Request Body array required
    + +A list of schema attribute update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. The following properties are allowed for update ':' 'label', 'helpText', 'placeholder', 'required'. + +
      value object
      + +The value to be used for the operation, required for "add" and "replace" operations + +
    • anyOf
    • string
    • integer
    • anyOf
    • string
    • integer
    + +The Schema Attribute was successfully patched. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/patch-search-attribute-config.api.mdx b/docs/sailpoint-api-beta/patch-search-attribute-config.api.mdx new file mode 100644 index 000000000..15b07f230 --- /dev/null +++ b/docs/sailpoint-api-beta/patch-search-attribute-config.api.mdx @@ -0,0 +1,93 @@ +--- +id: patch-search-attribute-config +sidebar_label: Update the details of a specific extended search attribute in IdentityNow. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"patchSearchAttributeConfig","tags":["Search Attribute Configuration"],"description":"This API updates an existing Search Attribute Configuration. The following fields are patchable:\n**name**, **displayName**, **applicationAttributes**\nA token with ORG_ADMIN authority is required to call this API.","parameters":[{"name":"name","in":"path","description":"Name of the Search Attribute Configuration to patch.","required":true,"schema":{"type":"string","example":"promotedMailAttribute"}}],"requestBody":{"content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}},"example":[{"op":"replace","path":"/name","value":"newAttributeName"},{"op":"replace","path":"/displayName","value":"new attribute display name"},{"op":"add","path":"/applicationAttributes","value":{"2c91808b79fd2422017a0b35d30f3968":"employeeNumber"}}]}},"required":true},"responses":{"200":{"description":"Responds with the Search Attribute Configuration as updated.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Name of the new attribute","example":"newMailAttribute"},"displayName":{"type":"string","description":"The display name of the new attribute","example":"New Mail Attribute"},"applicationAttributes":{"type":"object","description":"Map of application id and their associated attribute.","example":{"2c91808b79fd2422017a0b35d30f3968":"employeeNumber","2c91808b79fd2422017a0b36008f396b":"employeeNumber"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/accounts/search-attribute-config/{name}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update the details of a specific extended search attribute in IdentityNow.","description":{"content":"This API updates an existing Search Attribute Configuration. The following fields are patchable:\n**name**, **displayName**, **applicationAttributes**\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts","search-attribute-config",":name"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Name of the Search Attribute Configuration to patch.","type":"text/plain"},"type":"any","value":"","key":"name"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update the details of a specific extended search attribute in IdentityNow. + + + +This API updates an existing Search Attribute Configuration. The following fields are patchable: +**name**, **displayName**, **applicationAttributes** +A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    Request Body array required
      value object
      + +The value to be used for the operation, required for "add" and "replace" operations + +
    • anyOf
    • string
    • integer
    • anyOf
    • string
    • integer
    + +Responds with the Search Attribute Configuration as updated. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/patch-segment.api.mdx b/docs/sailpoint-api-beta/patch-segment.api.mdx new file mode 100644 index 000000000..37dadfcda --- /dev/null +++ b/docs/sailpoint-api-beta/patch-segment.api.mdx @@ -0,0 +1,112 @@ +--- +id: patch-segment +sidebar_label: Update a Segment +hide_title: true +hide_table_of_contents: true +api: {"operationId":"patchSegment","tags":["Segments"],"description":"Allows updating Segment fields using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\n\nNote that changes to a segment may take some time to propagate to all identities, and that segments will have no effect if segmentation is not enabled for your org.\n\nA token with ORG_ADMIN or API authority is required to call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the Segment being modified.","example":"ef38f94347e94562b5bb8424a56397d8"}],"requestBody":{"required":true,"description":"A list of Segment update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\n\n\nThe following fields are patchable:\n* name\n* description\n* owner\n* visibilityCriteria\n* active\n","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object"}},"examples":{"Set Visibility Criteria":{"description":"Set the visibility criteria","value":[{"op":"replace","path":"/visibilityCriteria","value":{"expression":{"operator":"AND","children":[{"operator":"EQUALS","attribute":"location","value":{"type":"STRING","value":"Philadelphia"}},{"operator":"EQUALS","attribute":"department","value":{"type":"STRING","value":"HR"}}]}}}]}}}}},"responses":{"200":{"description":"Indicates the PATCH operation succeeded, and returns the Segment's new representation.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"name":{"type":"string","description":"Segment Business Name","example":"segment-xyz"},"created":{"type":"string","format":"date-time","description":"The time when this Segment is created","example":"2020-01-01T00:00:00.000000Z"},"modified":{"type":"string","format":"date-time","description":"The time when this Segment is modified","example":"2020-01-01T00:00:00.000000Z"},"description":{"type":"string","description":"Optional description of the Segment","example":"This segment represents xyz"},"owner":{"type":"object","description":"The owner of this object.","properties":{"type":{"description":"Owner type. This field must be either left null or set to 'IDENTITY' on input, otherwise a 400 Bad Request error will result.","example":"IDENTITY","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"]},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of the owner. It may be left null or omitted in a POST or PATCH. If set, it must match the current value of the owner's display name, otherwise a 400 Bad Request error will result.","example":"support"}}},"visibilityCriteria":{"type":"object","properties":{"expression":{"type":"object","properties":{"operator":{"type":"string","description":"Operator for the expression","enum":["AND","EQUALS"],"example":"EQUALS"},"attribute":{"type":"string","description":"Name for the attribute","example":"location"},"value":{"type":"object","properties":{"type":{"type":"string","description":"The type of attribute value","example":"STRING"},"value":{"type":"string","description":"The attribute value","example":"Austin"}}},"children":{"type":"array","description":"List of expressions","items":{"type":"object","properties":{"type":{"type":"string","description":"The type of attribute value","example":"STRING"},"value":{"type":"string","description":"The attribute value","example":"Austin"}}},"example":[]}}}}},"active":{"type":"boolean","description":"Whether the Segment is currently active. Inactive segments have no effect."}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/segments/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update a Segment","description":{"content":"Allows updating Segment fields using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\n\nNote that changes to a segment may take some time to propagate to all identities, and that segments will have no effect if segmentation is not enabled for your org.\n\nA token with ORG_ADMIN or API authority is required to call this API.","type":"text/plain"},"url":{"path":["segments",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the Segment being modified.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update a Segment + + + +Allows updating Segment fields using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + +Note that changes to a segment may take some time to propagate to all identities, and that segments will have no effect if segmentation is not enabled for your org. + +A token with ORG_ADMIN or API authority is required to call this API. + +
    Path Parameters
    Request Body array required
    + +A list of Segment update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + + +The following fields are patchable: +* name +* description +* owner +* visibilityCriteria +* active + + +
    + +Indicates the PATCH operation succeeded, and returns the Segment's new representation. + +
    Schema
      owner object
      + +The owner of this object. + +
      visibilityCriteria object
      expression object
      value object
      children object[]
      + +List of expressions + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/patch-service-desk-integration.api.mdx b/docs/sailpoint-api-beta/patch-service-desk-integration.api.mdx new file mode 100644 index 000000000..9e0b4c68c --- /dev/null +++ b/docs/sailpoint-api-beta/patch-service-desk-integration.api.mdx @@ -0,0 +1,133 @@ +--- +id: patch-service-desk-integration +sidebar_label: Service Desk Integration Update - PATCH +hide_title: true +hide_table_of_contents: true +api: {"operationId":"patchServiceDeskIntegration","tags":["Service Desk Integration"],"description":"Update an existing ServiceDeskIntegration by ID with a PATCH request.","parameters":[{"name":"id","in":"path","description":"ID of the Service Desk integration to update","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"anId"}}],"requestBody":{"required":true,"description":"A list of SDIM update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\n\nPATCH can only be applied to the following fields:\n * \"beforeProvisioningRule\"\n\nA 403 Forbidden Error indicates that you attempted to PATCH a field that is not allowed.\n","content":{"application/json-patch+json":{"schema":{"type":"object","description":"A JSONPatch document as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","properties":{"operations":{"description":"Operations to be applied","type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}}},"example":"[\n {\n\t \"op\": \"replace\",\n\t \"path\": \"/description\",\n\t \"value\": \"A new description\"\n }\n]"}}}},"responses":{"200":{"description":"ServiceDeskIntegrationDto as updated","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","format":"date-time","readOnly":true,"example":true},"modified":{"description":"Last modification date of the Object","type":"string","format":"date-time","readOnly":true,"example":true}}},{"type":"object","description":"Specification of a Service Desk integration","required":["description","type","attributes"],"properties":{"description":{"description":"Description of the Service Desk integration","type":"string","example":"A very nice Service Desk integration"},"type":{"description":"Type of the Service Desk integration","type":"string","default":"ServiceNowSDIM"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the identity that is the owner of this Service Desk integration","default":{"type":"IDENTITY"}},"clusterRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the source cluster for this Service Desk integration","default":{"type":"CLUSTER"}},"cluster":{"description":"ID of the cluster for the Service Desk integration (replaced by clusterRef, retained for backward compatibility)","type":"string","example":"xyzzy999","deprecated":true},"managedSources":{"description":"Source IDs for the Service Desk integration (replaced by provisioningConfig.managedSResourceRefs, but retained here for backward compatibility)","type":"array","items":{"type":"string"},"deprecated":true},"provisioningConfig":{"description":"The 'provisioningConfig' property specifies the configuration used to provision integrations.","type":"object","properties":{"universalManager":{"description":"Specifies whether this configuration is used to manage provisioning requests for all sources from the org. If true, no managedResourceRefs are allowed.","type":"boolean","readOnly":true},"managedResourceRefs":{"description":"References to sources for the Service Desk integration template. May only be specified if universalManager is false.","type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"default":{"type":"SOURCE"}}},"planInitializerScript":{"description":"This is a reference to a plan initializer script.","type":"object","properties":{"source":{"description":"This is a Rule that allows provisioning instruction changes.","type":"string"}}}}},"attributes":{"description":"Attributes of the Service Desk integration. Validation constraints enforced by the implementation.","type":"object","additionalProperties":true},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to beforeProvisioningRule for this Service Desk integration","default":{"type":"RULE"}}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:service-desk-admin:write","idn:service-desk-integration:write"]}],"method":"patch","path":"/service-desk-integrations/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":"[\n {\n\t \"op\": \"replace\",\n\t \"path\": \"/description\",\n\t \"value\": \"A new description\"\n }\n]","info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Service Desk Integration Update - PATCH","description":{"content":"Update an existing ServiceDeskIntegration by ID with a PATCH request.","type":"text/plain"},"url":{"path":["service-desk-integrations",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the Service Desk integration to update","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Service Desk Integration Update - PATCH + + + +Update an existing ServiceDeskIntegration by ID with a PATCH request. + +
    Path Parameters
    Request Body required
    + +A list of SDIM update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + +PATCH can only be applied to the following fields: + * "beforeProvisioningRule" + +A 403 Forbidden Error indicates that you attempted to PATCH a field that is not allowed. + + +
      operations object[]
      + +Operations to be applied + +
      value object
      + +The value to be used for the operation, required for "add" and "replace" operations + +
    • anyOf
    • string
    • integer
    • anyOf
    • string
    • integer
    + +ServiceDeskIntegrationDto as updated + +
    Schema
      ownerRef object
      + +Reference to the identity that is the owner of this Service Desk integration + +
      clusterRef object
      + +Reference to the source cluster for this Service Desk integration + +
      provisioningConfig object
      + +The 'provisioningConfig' property specifies the configuration used to provision integrations. + +
      managedResourceRefs object[]
      + +References to sources for the Service Desk integration template. May only be specified if universalManager is false. + +
      planInitializerScript object
      + +This is a reference to a plan initializer script. + +
      attributes object
      + +Attributes of the Service Desk integration. Validation constraints enforced by the implementation. + +
      beforeProvisioningRule object
      + +Reference to beforeProvisioningRule for this Service Desk integration + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/patch-sod-policy.api.mdx b/docs/sailpoint-api-beta/patch-sod-policy.api.mdx new file mode 100644 index 000000000..0207e2817 --- /dev/null +++ b/docs/sailpoint-api-beta/patch-sod-policy.api.mdx @@ -0,0 +1,114 @@ +--- +id: patch-sod-policy +sidebar_label: Update a SOD Policy +hide_title: true +hide_table_of_contents: true +api: {"operationId":"patchSodPolicy","tags":["SOD Policy"],"description":"Allows updating SOD Policy fields other than [\"id\",\"created\",\"creatorId\",\"policyQuery\",\"type\"] using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\nRequires role of ORG_ADMIN.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the SOD Policy being modified.","example":"2c9180835d191a86015d28455b4a2329"}],"requestBody":{"required":true,"description":"A list of SOD Policy update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\n\nThe following fields are patchable:\n* name\n* description\n* ownerRef\n* externalPolicyReference\n* compensatingControls\n* correctionAdvice\n* state\n* tags\n* violationOwnerAssignmentConfig\n* scheduled\n* conflictingAccessCriteria\n","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object"}},"examples":{"Conflicting Access Based Policy":{"value":[{"op":"replace","path":"/description","value":"Modified description"},{"op":"replace","path":"/conflictingAccessCriteria/leftCriteria/name","value":"money-in-modified"},{"op":"replace","path":"/conflictingAccessCriteria/rightCriteria","value":{"name":"money-out-modified","criteriaList":[{"type":"ENTITLEMENT","id":"2c918087682f9a86016839c0509c1ab2"}]}}]},"General Policy":{"value":[{"op":"replace","path":"/description","value":"Modified description"}]}}}}},"responses":{"200":{"description":"Indicates the PATCH operation succeeded, and returns the SOD policy's new representation.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Policy id","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"name":{"type":"string","description":"Policy Business Name","example":"policy-xyz"},"created":{"type":"string","format":"date-time","description":"The time when this SOD policy is created.","example":"2020-01-01T00:00:00.000000Z"},"modified":{"type":"string","format":"date-time","description":"The time when this SOD policy is modified.","example":"2020-01-01T00:00:00.000000Z"},"description":{"type":"string","description":"Optional description of the SOD policy","example":"This policy ensures compliance of xyz"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"externalPolicyReference":{"type":"string","description":"Optional External Policy Reference","example":"XYZ policy"},"policyQuery":{"type":"string","description":"Search query of the SOD policy","example":"@access(id:0f11f2a4-7c94-4bf3-a2bd-742580fe3bdg) AND @access(id:0f11f2a4-7c94-4bf3-a2bd-742580fe3bdf)"},"compensatingControls":{"type":"string","description":"Optional compensating controls(Mitigating Controls)","example":"Have a manager review the transaction decisions for their \"out of compliance\" employee"},"correctionAdvice":{"type":"string","description":"Optional correction advice","example":"Based on the role of the employee, managers should remove access that is not required for their job function."},"state":{"type":"string","description":"whether the policy is enforced or not","enum":["ENFORCED","NOT_ENFORCED"],"example":"ENFORCED"},"tags":{"type":"array","description":"tags for this policy object","example":["TAG1","TAG2"],"items":{"type":"string"}},"creatorId":{"type":"string","description":"Policy's creator ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"modifierId":{"type":"string","description":"Policy's modifier ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","nullable":true},"violationOwnerAssignmentConfig":{"nullable":true,"type":"object","properties":{"assignmentRule":{"type":"string","enum":["MANAGER","STATIC"],"description":"Details about the violations owner.\nMANAGER - identity's manager\nSTATIC - Governance Group or Identity","example":"MANAGER"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}}},"scheduled":{"type":"boolean","description":"defines whether a policy has been scheduled or not","example":true},"type":{"type":"string","description":"whether a policy is query based or conflicting access based","default":"GENERAL","enum":["GENERAL","CONFLICTING_ACCESS_BASED"],"example":"GENERAL"},"conflictingAccessCriteria":{"nullable":true,"type":"object","properties":{"leftCriteria":{"type":"object","properties":{"name":{"type":"string","description":"Business name for the access construct list","example":"money-in"},"criteriaList":{"type":"array","description":"List of criteria. There is a min of 1 and max of 50 items in the list.","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"example":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66","name":"Administrator"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67","name":"Administrator"}]}}},"rightCriteria":{"type":"object","properties":{"name":{"type":"string","description":"Business name for the access construct list","example":"money-in"},"criteriaList":{"type":"array","description":"List of criteria. There is a min of 1 and max of 50 items in the list.","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"example":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66","name":"Administrator"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67","name":"Administrator"}]}}}}}}},"examples":{"Conflicting Access Based Policy":{"value":{"id":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","name":"Conflicting-Policy-Name","created":"2020-01-01T00:00:00.000000Z","modified":"2020-01-01T00:00:00.000000Z","description":"Modified description","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"Owner Name"},"externalPolicyReference":"XYZ policy","policyQuery":"@access(id:2c9180866166b5b0016167c32ef31a66 OR id:2c9180866166b5b0016167c32ef31a67) AND @access(id:2c918087682f9a86016839c0509c1ab2)","compensatingControls":"Have a manager review the transaction decisions for their \"out of compliance\" employee","correctionAdvice":"Based on the role of the employee, managers should remove access that is not required for their job function.","state":"ENFORCED","tags":["string"],"creatorId":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","modifierId":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","violationOwnerAssignmentConfig":{"assignmentRule":"MANAGER","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"Violation Owner Name"}},"scheduled":true,"type":"CONFLICTING_ACCESS_BASED","conflictingAccessCriteria":{"leftCriteria":{"name":"money-in-modified","criteriaList":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67"}]},"rightCriteria":{"name":"money-out-modified","criteriaList":[{"type":"ENTITLEMENT","id":"2c918087682f9a86016839c0509c1ab2"}]}}}},"General Policy":{"value":{"description":"Modified description","ownerRef":{"type":"IDENTITY","id":"2c918087682f9a86016839c05e8f1aff","name":"Owner Name"},"externalPolicyReference":"New policy","policyQuery":"policy query implementation","compensatingControls":"Compensating controls","correctionAdvice":"Correction advice","tags":[],"state":"ENFORCED","scheduled":false,"creatorId":"2c918087682f9a86016839c05e8f1aff","modifierId":null,"violationOwnerAssignmentConfig":null,"type":"GENERAL","conflictingAccessCriteria":null,"id":"52c11db4-733e-4c31-949a-766c95ec95f1","name":"General-Policy-Name","created":"2020-05-12T19:47:38Z","modified":"2020-05-12T19:47:38Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/sod-policies/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update a SOD Policy","description":{"content":"Allows updating SOD Policy fields other than [\"id\",\"created\",\"creatorId\",\"policyQuery\",\"type\"] using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\nRequires role of ORG_ADMIN.","type":"text/plain"},"url":{"path":["sod-policies",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the SOD Policy being modified.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update a SOD Policy + + + +Allows updating SOD Policy fields other than ["id","created","creatorId","policyQuery","type"] using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. +Requires role of ORG_ADMIN. + +
    Path Parameters
    Request Body array required
    + +A list of SOD Policy update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + +The following fields are patchable: +* name +* description +* ownerRef +* externalPolicyReference +* compensatingControls +* correctionAdvice +* state +* tags +* violationOwnerAssignmentConfig +* scheduled +* conflictingAccessCriteria + + +
    + +Indicates the PATCH operation succeeded, and returns the SOD policy's new representation. + +
    Schema
      ownerRef object
      violationOwnerAssignmentConfig object
      ownerRef object
      conflictingAccessCriteria object
      leftCriteria object
      criteriaList object[]
      + +List of criteria. There is a min of 1 and max of 50 items in the list. + +
      rightCriteria object
      criteriaList object[]
      + +List of criteria. There is a min of 1 and max of 50 items in the list. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/patch-subscription.api.mdx b/docs/sailpoint-api-beta/patch-subscription.api.mdx new file mode 100644 index 000000000..ddd0de662 --- /dev/null +++ b/docs/sailpoint-api-beta/patch-subscription.api.mdx @@ -0,0 +1,109 @@ +--- +id: patch-subscription +sidebar_label: Patch a Subscription +hide_title: true +hide_table_of_contents: true +api: {"operationId":"patchSubscription","tags":["Triggers"],"description":"This API updates a trigger subscription in IdentityNow, using a set of instructions to modify a subscription partially. The following fields are patchable:\n\n**name**, **description**, **enabled**, **type**, **filter**, **responseDeadline**, **httpConfig**, **eventBridgeConfig**, **workflowConfig**","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"ID of the Subscription to patch","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"}],"requestBody":{"required":true,"content":{"application/json-patch+json":{"schema":{"description":"Operations to be applied","type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}},"example":[{"op":"replace","path":"/description","value":"A new description"},{"op":"replace","path":"/name","value":"A new name"}]}}}},"responses":{"200":{"description":"Updated subscription.","content":{"application/json":{"schema":{"type":"object","required":["id","triggerId","type","name","triggerName","enabled","responseDeadline"],"properties":{"id":{"type":"string","description":"Subscription ID.","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"name":{"type":"string","description":"Subscription name.","example":"Access request subscription"},"description":{"type":"string","description":"Subscription description.","example":"Access requested to site xyz"},"triggerId":{"type":"string","description":"ID of trigger subscribed to.","example":"idn:access-requested"},"triggerName":{"type":"string","description":"Trigger name of trigger subscribed to.","example":"Access Requested"},"type":{"type":"string","description":"Subscription type. **NOTE** If type is EVENTBRIDGE, then eventBridgeConfig is required. If type is HTTP, then httpConfig is required.","enum":["HTTP","EVENTBRIDGE"],"example":"HTTP"},"responseDeadline":{"type":"string","description":"Deadline for completing REQUEST_RESPONSE trigger invocation, represented in ISO-8601 duration format.","example":"PT1H","default":"PT1H"},"httpConfig":{"description":"Config required if HTTP subscription type is used.","type":"object","properties":{"url":{"type":"string","description":"URL of the external/custom integration.","example":"https://www.example.com"},"httpDispatchMode":{"type":"string","description":"HTTP response modes, i.e. SYNC, ASYNC, or DYNAMIC.","enum":["SYNC","ASYNC","DYNAMIC"],"example":"SYNC"},"httpAuthenticationType":{"type":"string","description":"Defines the HTTP Authentication type. Additional values may be added in the future.\n\nIf *NO_AUTH* is selected, no extra information will be in HttpConfig.\n\nIf *BASIC_AUTH* is selected, HttpConfig will include BasicAuthConfig with Username and Password as strings.\n\nIf *BEARER_TOKEN* is selected, HttpConfig will include BearerTokenAuthConfig with Token as string.","enum":["NO_AUTH","BASIC_AUTH","BEARER_TOKEN"],"default":"NO_AUTH","example":"BASIC_AUTH"},"basicAuthConfig":{"type":"object","properties":{"userName":{"type":"string","description":"The username to authenticate.","example":"user@example.com"},"password":{"type":"string","nullable":true,"description":"The password to authenticate. On response, this field is set to null as to not return secrets.","example":null}},"description":"Config required if BASIC_AUTH is used."},"bearerTokenAuthConfig":{"type":"object","properties":{"bearerToken":{"type":"string","nullable":true,"description":"Bearer token","example":null}},"description":"Config required if BEARER_TOKEN authentication is used. On response, this field is set to null as to not return secrets."}},"required":["url","httpDispatchMode"]},"eventBridgeConfig":{"description":"Config required if EVENTBRIDGE subscription type is used.","type":"object","properties":{"awsAccount":{"type":"string","description":"AWS Account Number (12-digit number) that has the EventBridge Partner Event Source Resource.","example":"123456789012"},"awsRegion":{"type":"string","description":"AWS Region that has the EventBridge Partner Event Source Resource. See https://docs.aws.amazon.com/general/latest/gr/rande.html for a full list of available values.","example":"us-west-1"}},"required":["awsAccount","awsRegion"]},"enabled":{"type":"boolean","description":"Whether subscription should receive real-time trigger invocations or not.\nTest trigger invocations are always enabled regardless of this option.","default":true,"example":true},"filter":{"type":"string","description":"JSONPath filter to conditionally invoke trigger when expression evaluates to true.","example":"$[?($.identityId == \"201327fda1c44704ac01181e963d463c\")]","externalDocs":{"description":"JSONPath filter documentation","url":"https://developer.sailpoint.com/triggers/filtering_event_triggers.html#filtering-event-triggers"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"oauth2":["idn:trigger-service-subscriptions:update"]}],"method":"patch","path":"/trigger-subscriptions/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"A new description"},{"op":"replace","path":"/name","value":"A new name"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Patch a Subscription","description":{"content":"This API updates a trigger subscription in IdentityNow, using a set of instructions to modify a subscription partially. The following fields are patchable:\n\n**name**, **description**, **enabled**, **type**, **filter**, **responseDeadline**, **httpConfig**, **eventBridgeConfig**, **workflowConfig**","type":"text/plain"},"url":{"path":["trigger-subscriptions",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the Subscription to patch","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}},"auth":{"type":"oauth2","oauth2":[]}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Patch a Subscription + + + +This API updates a trigger subscription in IdentityNow, using a set of instructions to modify a subscription partially. The following fields are patchable: + +**name**, **description**, **enabled**, **type**, **filter**, **responseDeadline**, **httpConfig**, **eventBridgeConfig**, **workflowConfig** + +
    Path Parameters
    Request Body array required
      value object
      + +The value to be used for the operation, required for "add" and "replace" operations + +
    • anyOf
    • string
    • integer
    • anyOf
    • string
    • integer
    + +Updated subscription. + +
    Schema
      httpConfig object
      + +Config required if HTTP subscription type is used. + +
      basicAuthConfig object
      + +Config required if BASIC_AUTH is used. + +
      bearerTokenAuthConfig object
      + +Config required if BEARER_TOKEN authentication is used. On response, this field is set to null as to not return secrets. + +
      eventBridgeConfig object
      + +Config required if EVENTBRIDGE subscription type is used. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/patch-workflow.api.mdx b/docs/sailpoint-api-beta/patch-workflow.api.mdx new file mode 100644 index 000000000..94c37b72e --- /dev/null +++ b/docs/sailpoint-api-beta/patch-workflow.api.mdx @@ -0,0 +1,103 @@ +--- +id: patch-workflow +sidebar_label: Patch Workflow +hide_title: true +hide_table_of_contents: true +api: {"operationId":"patchWorkflow","tags":["Workflows"],"description":"Partially update an existing Workflow using [JSON Patch](https://tools.ietf.org/html/rfc6902) syntax.","security":[{"bearerAuth":["sp:workflow:update"]}],"parameters":[{"name":"id","in":"path","description":"Id of the Workflow","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"c17bea3a-574d-453c-9e04-4365fbf5af0b"}}],"requestBody":{"required":true,"content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}},"examples":{"Update all patchable fields":{"description":"Demonstrate how to update each patchable field in one PATCH request.","value":[{"op":"replace","path":"/name","value":"Send Email"},{"op":"replace","path":"/owner","value":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}},{"op":"replace","path":"/description","value":"Send an email to the identity who's attributes changed."},{"op":"replace","path":"/enabled","value":false},{"op":"replace","path":"/definition","value":{"start":"Send Email Test","steps":{"Send Email":{"actionId":"sp:send-email","attributes":{"body":"This is a test","from":"sailpoint@sailpoint.com","recipientId.$":"$.identity.id","subject":"test"},"nextStep":"success","selectResult":null,"type":"action"},"success":{"type":"success"}}}},{"op":"replace","path":"/trigger","value":{"type":"EVENT","attributes":{"id":"idn:identity-attributes-changed"}}}]}}}}},"responses":{"200":{"description":"The Workflow object","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"id":{"type":"string","description":"Workflow ID. This is a UUID generated upon creation.","example":"d201c5e9-d37b-4aff-af14-66414f39d569"},"executionCount":{"type":"integer","format":"int32","description":"The number of times this workflow has been executed","example":2},"failureCount":{"type":"integer","format":"int32","description":"The number of times this workflow has failed during execution","example":0},"created":{"type":"string","format":"date-time","description":"The date and time the workflow was created","example":"2022-01-10T16:06:16.636381447Z"},"creator":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity that created the workflow.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}},"example":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}}}},{"type":"object","properties":{"name":{"type":"string","description":"The name of the workflow","example":"Send Email"},"owner":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity that owns the workflow. The owner's permissions in IDN will determine what actions the workflow is allowed to perform. Ownership can be changed by updating the owner in a PUT or PATCH request.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}},"example":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}},"description":{"type":"string","description":"Description of what the workflow accomplishes","example":"Send an email to the identity who's attributes changed."},"definition":{"type":"object","description":"The map of steps that the workflow will execute.","properties":{"start":{"type":"string","description":"The name of the starting step.","example":"Send Email Test"},"steps":{"type":"object","description":"One or more step objects that comprise this workflow. Please see the Workflow documentation to see the JSON schema for each step type.","additionalProperties":true,"example":{"Send Email":{"actionId":"sp:send-email","attributes":{"body":"This is a test","from":"sailpoint@sailpoint.com","recipientId.$":"$.identity.id","subject":"test"},"nextStep":"success","selectResult":null,"type":"action"},"success":{"type":"success"}}}}},"enabled":{"type":"boolean","description":"Enable or disable the workflow. Workflows cannot be created in an enabled state.","default":false,"example":false},"trigger":{"type":"object","description":"The trigger that starts the workflow","required":["type","attributes"],"properties":{"type":{"enum":["EVENT","EXTERNAL","SCHEDULED"],"example":"EVENT","description":"The trigger type"},"attributes":{"description":"Workflow Trigger Attributes.","oneOf":[{"title":"Event Trigger Attributes","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The unique ID of the trigger","example":"idn:identity-attributes-changed"},"filter":{"type":"string","description":"JSON path expression that will limit which events the trigger will fire on","example":"$.changes[?(@.attribute == 'manager')]"}}},{"title":"Scheduled Trigger Attributes","type":"object","required":["cronString"],"properties":{"cronString":{"type":"string","description":"A valid CRON expression","externalDocs":{"description":"CRON expression editor","url":"https://crontab.guru/"},"example":"0 * */3 */5 *"}}}]}}}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/workflows/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Patch Workflow","description":{"content":"Partially update an existing Workflow using [JSON Patch](https://tools.ietf.org/html/rfc6902) syntax.","type":"text/plain"},"url":{"path":["workflows",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Id of the Workflow","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Patch Workflow + + + +Partially update an existing Workflow using [JSON Patch](https://tools.ietf.org/html/rfc6902) syntax. + +
    Path Parameters
    Request Body array required
      value object
      + +The value to be used for the operation, required for "add" and "replace" operations + +
    • anyOf
    • string
    • integer
    • anyOf
    • string
    • integer
    + +The Workflow object + +
    Schema
      creator object
      + +The identity that created the workflow. + +
      owner object
      + +The identity that owns the workflow. The owner's permissions in IDN will determine what actions the workflow is allowed to perform. Ownership can be changed by updating the owner in a PUT or PATCH request. + +
      definition object
      + +The map of steps that the workflow will execute. + +
      steps object
      + +One or more step objects that comprise this workflow. Please see the Workflow documentation to see the JSON schema for each step type. + +
      trigger object
      + +The trigger that starts the workflow + +
      attributes object
      + +Workflow Trigger Attributes. + +
    • oneOf
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/peek-resource-objects.api.mdx b/docs/sailpoint-api-beta/peek-resource-objects.api.mdx new file mode 100644 index 000000000..78fca65a0 --- /dev/null +++ b/docs/sailpoint-api-beta/peek-resource-objects.api.mdx @@ -0,0 +1,92 @@ +--- +id: peek-resource-objects +sidebar_label: Peek resource objects from the source connector +hide_title: true +hide_table_of_contents: true +api: {"operationId":"peekResourceObjects","tags":["Sources"],"description":"Retrieves a sample of data returned from account and group aggregation requests.\nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:source-connector:write"]}],"parameters":[{"in":"path","name":"sourceId","schema":{"type":"string"},"required":true,"description":"The ID of the Source","example":"cef3ee201db947c5912551015ba0c679"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"example":{"objectType":"resource","maxCount":50},"type":"object","title":"Resource Objects Request","description":"Request model for peek resource objects from source connectors.","properties":{"objectType":{"type":"string","description":"The type of resource objects to iterate over.","default":"account","example":"group"},"maxCount":{"type":"integer","description":"The maximum number of resource objects to iterate over and return.","default":25,"example":100}}}}}},"responses":{"200":{"description":"List of resource objects that was fetched from the source connector.","content":{"application/json":{"schema":{"type":"object","title":"Resource Objects Response","description":"Response model for peek resource objects from source connectors.","properties":{"id":{"type":"string","description":"ID of the source","example":"2c91808568c529c60168cca6f90c1313","readOnly":true},"name":{"type":"string","description":"Name of the source","example":"ODS-AD-Test [source-999999]","readOnly":true},"objectCount":{"type":"integer","description":"The number of objects that were fetched by the connector.","example":25,"readOnly":true},"elapsedMillis":{"type":"integer","description":"The number of milliseconds spent on the entire request.","example":1055,"readOnly":true},"resourceObjects":{"type":"array","items":{"type":"object","title":"Resource Object","description":"Representation of the object which is returned from source connectors.","properties":{"instance":{"description":"Identifier of the specific instance where this object resides.","type":"string","readOnly":true},"identity":{"description":"Native identity of the object in the Source.","type":"string","example":"CN=Aaron Carr,OU=test1,DC=test2,DC=test","readOnly":true},"uuid":{"description":"Universal unique identifier of the object in the Source.","type":"string","example":"{abf7bd9b-68b4-4d21-9b70-870c58ebf844}","readOnly":true},"previousIdentity":{"description":"Native identity that the object has previously.","type":"string","readOnly":true},"name":{"description":"Display name for this object.","type":"string","example":"Aaron Carr","readOnly":true},"objectType":{"description":"Type of object.","type":"string","example":"account","readOnly":true},"incomplete":{"description":"A flag indicating that this is an incomplete object. Used in special cases where the connector has to return account information in several phases and the objects might not have a complete set of all account attributes. The attributes in this object will replace the corresponding attributes in the Link, but no other Link attributes will be changed.","type":"boolean","example":false,"readOnly":true},"incremental":{"description":"A flag indicating that this is an incremental change object. This is similar to incomplete but it also means that the values of any multi-valued attributes in this object should be merged with the existing values in the Link rather than replacing the existing Link value.","type":"boolean","example":false,"readOnly":true},"delete":{"description":"A flag indicating that this object has been deleted. This is set only when doing delta aggregation and the connector supports detection of native deletes.","type":"boolean","example":false,"readOnly":true},"remove":{"description":"A flag set indicating that the values in the attributes represent things to remove rather than things to add. Setting this implies incremental. The values which are always for multi-valued attributes are removed from the current values.","type":"boolean","example":false,"readOnly":true},"missing":{"description":"A list of attribute names that are not included in this object. This is only used with SMConnector and will only contain \"groups\".","type":"array","items":{"type":"string"},"example":["missFieldOne","missFieldTwo"],"readOnly":true},"attributes":{"description":"Attributes of this ResourceObject.","type":"object","example":{"telephoneNumber":"12-(345)678-9012","mail":"example@test.com","displayName":"Aaron Carr"},"readOnly":true},"finalUpdate":{"description":"In Aggregation, for sparse object the count for total accounts scanned identities updated is not incremented.","type":"boolean","example":false,"readOnly":true}}},"description":"Fetched objects from the source connector.","readOnly":true}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/sources/{sourceId}/connector/peek-resource-objects","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"objectType":"resource","maxCount":50},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Peek resource objects from the source connector","description":{"content":"Retrieves a sample of data returned from account and group aggregation requests.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":sourceId","connector","peek-resource-objects"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the Source","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Peek resource objects from the source connector + + + +Retrieves a sample of data returned from account and group aggregation requests. +A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    Request Body required
    + +List of resource objects that was fetched from the source connector. + +
    Schema
      resourceObjects object[]
      + +Fetched objects from the source connector. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/personal-access-tokens.tag.mdx b/docs/sailpoint-api-beta/personal-access-tokens.tag.mdx new file mode 100644 index 000000000..68480b481 --- /dev/null +++ b/docs/sailpoint-api-beta/personal-access-tokens.tag.mdx @@ -0,0 +1,15 @@ +--- +id: personal-access-tokens +title: Personal Access Tokens +description: Personal Access Tokens +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/ping-cluster.api.mdx b/docs/sailpoint-api-beta/ping-cluster.api.mdx new file mode 100644 index 000000000..d9a4d6576 --- /dev/null +++ b/docs/sailpoint-api-beta/ping-cluster.api.mdx @@ -0,0 +1,76 @@ +--- +id: ping-cluster +sidebar_label: Ping cluster for the source connector +hide_title: true +hide_table_of_contents: true +api: {"operationId":"pingCluster","tags":["Sources"],"description":"This endpoint validates that the cluster being used by the source is reachable from IdentityNow.\nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:source-connector:write"]}],"parameters":[{"in":"path","name":"sourceId","schema":{"type":"string"},"required":true,"description":"The ID of the Source","example":"cef3ee201db947c5912551015ba0c679"}],"responses":{"200":{"description":"The result of pinging connection with the source connector.","content":{"application/json":{"schema":{"type":"object","title":"Status Response","description":"Response model for connection check, configuration test and ping of source connectors.","properties":{"id":{"type":"string","description":"ID of the source","example":"2c91808568c529c60168cca6f90c1313","readOnly":true},"name":{"type":"string","description":"Name of the source","example":"ODS-AD-Test [source-999999]","readOnly":true},"status":{"type":"string","enum":["SUCCESS","FAILURE"],"description":"The status of the health check.","example":"SUCCESS","readOnly":true},"elapsedMillis":{"type":"integer","description":"The number of milliseconds spent on the entire request.","example":1000,"readOnly":true},"details":{"type":"object","description":"The document contains the results of the health check.\nThe schema of this document depends on the type of source used.\n","readOnly":true,"example":{"useTLSForIQService":false,"IQService":{"TLS Port":0,".NET CLR Version":"4.0.30319.42000","SecondaryServiceStatus":"Running","Port":5050,"Host":"AUTOMATION-AD","Name":"IQService","IQServiceStatus":"Running","SecondaryService":"IQService-Instance1-Secondary","Version":"IQService Sep-2020","secondaryPort":5051,"OS Architecture":"AMD64","Operating System":"Microsoft Windows Server 2012 R2 Standard","highestDotNetVersion":"4.8 or later","Build Time":"09/22/2020 06:34 AM -0500"},"IQServiceClientAuthEnabled":false,"requestProcessedOn":"1/19/2021 1:47:14 PM"}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/sources/{sourceId}/connector/ping-cluster","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Ping cluster for the source connector","description":{"content":"This endpoint validates that the cluster being used by the source is reachable from IdentityNow.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":sourceId","connector","ping-cluster"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the Source","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Ping cluster for the source connector + + + +This endpoint validates that the cluster being used by the source is reachable from IdentityNow. +A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    + +The result of pinging connection with the source connector. + +
    Schema
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/post-external-execute-workflow.api.mdx b/docs/sailpoint-api-beta/post-external-execute-workflow.api.mdx new file mode 100644 index 000000000..e8413e55a --- /dev/null +++ b/docs/sailpoint-api-beta/post-external-execute-workflow.api.mdx @@ -0,0 +1,75 @@ +--- +id: post-external-execute-workflow +sidebar_label: Execute Workflow via External Trigger +hide_title: true +hide_table_of_contents: true +api: {"operationId":"postExternalExecuteWorkflow","tags":["Workflows"],"description":"This endpoint allows a service outside of IdentityNow to initiate a workflow that uses the \"External Trigger\" step. The external service will invoke this endpoint with the input data it wants to send to the workflow in the body.","security":[{"bearerAuth":["sp:workflow:external-execute"]}],"parameters":[{"name":"id","in":"path","description":"Id of the workflow","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"c17bea3a-574d-453c-9e04-4365fbf5af0b"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"input":{"type":"object","description":"The input for the workflow","example":{"customAttribute1":"value1","customAttribute2":"value2"}}}}}}},"responses":{"200":{"description":"The Workflow object","content":{"application/json":{"schema":{"type":"object","properties":{"workflowExecutionId":{"type":"string","description":"The workflow execution id","example":"0e11cefa-96e7-4b67-90d0-065bc1da5753"},"message":{"type":"string","description":"An error message if any errors occurred","example":"Workflow was not executed externally. Check enabled flag on workflow definition"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/workflows/execute/external/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"input":{"customAttribute1":"value1","customAttribute2":"value2"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Execute Workflow via External Trigger","description":{"content":"This endpoint allows a service outside of IdentityNow to initiate a workflow that uses the \"External Trigger\" step. The external service will invoke this endpoint with the input data it wants to send to the workflow in the body.","type":"text/plain"},"url":{"path":["workflows","execute","external",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Id of the workflow","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Execute Workflow via External Trigger + + + +This endpoint allows a service outside of IdentityNow to initiate a workflow that uses the "External Trigger" step. The external service will invoke this endpoint with the input data it wants to send to the workflow in the body. + +
    Path Parameters
    Request Body
    + +The Workflow object + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/post-workflow-external-trigger.api.mdx b/docs/sailpoint-api-beta/post-workflow-external-trigger.api.mdx new file mode 100644 index 000000000..4521a27b4 --- /dev/null +++ b/docs/sailpoint-api-beta/post-workflow-external-trigger.api.mdx @@ -0,0 +1,75 @@ +--- +id: post-workflow-external-trigger +sidebar_label: Generate External Trigger OAuth Client +hide_title: true +hide_table_of_contents: true +api: {"operationId":"postWorkflowExternalTrigger","tags":["Workflows"],"description":"Create OAuth client ID, client secret, and callback URL for use in an external trigger. External triggers will need this information to generate an access token to authenticate to the callback URL and submit a trigger payload that will initiate the workflow.","security":[{"bearerAuth":["sp:workflow:update"]}],"parameters":[{"name":"id","in":"path","description":"Id of the workflow","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"c17bea3a-574d-453c-9e04-4365fbf5af0b"}}],"responses":{"200":{"description":"The OAuth Client object","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"OAuth client ID for the trigger. This is a UUID generated upon creation.","example":"1a58c03a6bf64dc2876f6988c6e2c7b7"},"secret":{"type":"string","description":"OAuthClient secret.","example":"00cc24a7fe810fe06a7cb38bc168ae104d703c7abb296f9944dc68e69ddb578b"},"url":{"type":"string","description":"URL for the external trigger to invoke","example":"https://{tenant}.api.identitynow.com/beta/workflows/execute/external/c17bea3a-574d-453c-9e04-4365fbf5af0b"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/workflows/{id}/external/oauth-clients","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Generate External Trigger OAuth Client","description":{"content":"Create OAuth client ID, client secret, and callback URL for use in an external trigger. External triggers will need this information to generate an access token to authenticate to the callback URL and submit a trigger payload that will initiate the workflow.","type":"text/plain"},"url":{"path":["workflows",":id","external","oauth-clients"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Id of the workflow","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Generate External Trigger OAuth Client + + + +Create OAuth client ID, client secret, and callback URL for use in an external trigger. External triggers will need this information to generate an access token to authenticate to the callback URL and submit a trigger payload that will initiate the workflow. + +
    Path Parameters
    + +The OAuth Client object + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/predict-violations.api.mdx b/docs/sailpoint-api-beta/predict-violations.api.mdx new file mode 100644 index 000000000..d0ede2c30 --- /dev/null +++ b/docs/sailpoint-api-beta/predict-violations.api.mdx @@ -0,0 +1,105 @@ +--- +id: predict-violations +sidebar_label: Predict SOD violations for the given identity if they were granted the given access. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"predictViolations","tags":["SOD Violations"],"description":"This API is used to check if granting some additional accesses would cause the subject to be in violation of any SOD policies. Returns the violations that would be caused.\n\nA token with ORG_ADMIN or API authority is required to call this API.","requestBody":{"required":true,"content":{"application/json":{"schema":{"description":"An identity with a set of access to be added","required":["identityId","accessRefs"],"type":"object","properties":{"identityId":{"description":"Identity id to be checked.","type":"string","example":"2c91808568c529c60168cca6f90c1313"},"accessRefs":{"description":"The list of ENTITLEMENTs to consider for calculating possible violations in a preventive check.","type":"array","items":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The types of objects supported for SOD violations","properties":{"type":{"enum":["ENTITLEMENT"],"example":"ENTITLEMENT","description":"The type of object that is referenced"}}},"example":[{"type":"ENTITLEMENT","id":"2c918087682f9a86016839c050861ab1","name":"CN=Information Access,OU=test,OU=test-service,DC=TestAD,DC=local"},{"type":"ENTITLEMENT","id":"2c918087682f9a86016839c0509c1ab2","name":"CN=Information Technology,OU=test,OU=test-service,DC=TestAD,DC=local"}]}}},"example":{"identityId":"2c91808568c529c60168cca6f90c1313","accessRefs":[{"type":"ENTITLEMENT","id":"2c918087682f9a86016839c050861ab1","name":"CN=Information Access,OU=test,OU=test-service,DC=TestAD,DC=local"},{"type":"ENTITLEMENT","id":"2c918087682f9a86016839c0509c1ab2","name":"CN=Information Technology,OU=test,OU=test-service,DC=TestAD,DC=local"}]}}}},"responses":{"200":{"description":"Violation Contexts","content":{"application/json":{"schema":{"description":"An object containing a listing of the SOD violation reasons detected by this check.","required":["requestId"],"type":"object","properties":{"violationContexts":{"type":"array","description":"List of Violation Contexts","items":{"type":"object","properties":{"policy":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object","properties":{"type":{"type":"string","example":"SOD_POLICY"},"name":{"type":"string","example":"A very cool policy name"}}}],"description":"The types of objects supported for SOD violations","properties":{"type":{"enum":["ENTITLEMENT"],"example":"ENTITLEMENT","description":"The type of object that is referenced"}}},"conflictingAccessCriteria":{"nullable":false,"type":"object","properties":{"leftCriteria":{"type":"object","properties":{"criteriaList":{"type":"array","description":"List of exception criteria. There is a min of 1 and max of 50 items in the list.","items":{"allOf":[{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"CN=HelpDesk,OU=test,OU=test-service,DC=TestAD,DC=local"},"existing":{"type":"boolean","description":"Whether the subject identity already had that access or not","example":true}},"description":"Access reference with addition of boolean existing flag to indicate whether the access was extant"}],"description":"The types of objects supported for SOD violations","properties":{"type":{"enum":["ENTITLEMENT"],"example":"ENTITLEMENT","description":"The type of object that is referenced"}}},"example":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66","existing":true},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67","existing":false}]}}},"rightCriteria":{"type":"object","properties":{"criteriaList":{"type":"array","description":"List of exception criteria. There is a min of 1 and max of 50 items in the list.","items":{"allOf":[{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"CN=HelpDesk,OU=test,OU=test-service,DC=TestAD,DC=local"},"existing":{"type":"boolean","description":"Whether the subject identity already had that access or not","example":true}},"description":"Access reference with addition of boolean existing flag to indicate whether the access was extant"}],"description":"The types of objects supported for SOD violations","properties":{"type":{"enum":["ENTITLEMENT"],"example":"ENTITLEMENT","description":"The type of object that is referenced"}}},"example":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66","existing":true},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67","existing":false}]}}}}}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/sod-violations/predict","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"identityId":"2c91808568c529c60168cca6f90c1313","accessRefs":[{"type":"ENTITLEMENT","id":"2c918087682f9a86016839c050861ab1","name":"CN=Information Access,OU=test,OU=test-service,DC=TestAD,DC=local"},{"type":"ENTITLEMENT","id":"2c918087682f9a86016839c0509c1ab2","name":"CN=Information Technology,OU=test,OU=test-service,DC=TestAD,DC=local"}]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Predict SOD violations for the given identity if they were granted the given access.","description":{"content":"This API is used to check if granting some additional accesses would cause the subject to be in violation of any SOD policies. Returns the violations that would be caused.\n\nA token with ORG_ADMIN or API authority is required to call this API.","type":"text/plain"},"url":{"path":["sod-violations","predict"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Predict SOD violations for the given identity if they were granted the given access. + + + +This API is used to check if granting some additional accesses would cause the subject to be in violation of any SOD policies. Returns the violations that would be caused. + +A token with ORG_ADMIN or API authority is required to call this API. + +
    Request Body required
      accessRefs object[]
      + +The list of ENTITLEMENTs to consider for calculating possible violations in a preventive check. + +
    + +Violation Contexts + +
    Schema
      violationContexts object[]
      + +List of Violation Contexts + +
      policy object
      conflictingAccessCriteria object
      leftCriteria object
      criteriaList object[]
      + +List of exception criteria. There is a min of 1 and max of 50 items in the list. + +
      rightCriteria object
      criteriaList object[]
      + +List of exception criteria. There is a min of 1 and max of 50 items in the list. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/public-identity-config.tag.mdx b/docs/sailpoint-api-beta/public-identity-config.tag.mdx new file mode 100644 index 000000000..25bc760a5 --- /dev/null +++ b/docs/sailpoint-api-beta/public-identity-config.tag.mdx @@ -0,0 +1,15 @@ +--- +id: public-identity-config +title: Public Identity Config +description: Public Identity Config +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/put-account.api.mdx b/docs/sailpoint-api-beta/put-account.api.mdx new file mode 100644 index 000000000..1b84b73a8 --- /dev/null +++ b/docs/sailpoint-api-beta/put-account.api.mdx @@ -0,0 +1,88 @@ +--- +id: put-account +sidebar_label: Update Account +hide_title: true +hide_table_of_contents: true +api: {"operationId":"putAccount","tags":["Accounts"],"description":"This API submits an account update task and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:account:update"]}],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The account ID","example":"ef38f94347e94562b5bb8424a56397d8"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["attributes"],"properties":{"attributes":{"description":"The schema attribute values for the account","type":"object","example":{"city":"Austin","displayName":"John Doe","userName":"jdoe","sAMAccountName":"jDoe","mail":"john.doe@sailpoint.com"}}}}}}},"responses":{"202":{"description":"Async task details","content":{"application/json":{"schema":{"description":"Accounts async response containing details on started async process","required":["id"],"type":"object","properties":{"id":{"description":"id of the task","type":"string","example":"2c91808474683da6017468693c260195"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/accounts/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"attributes":{"city":"Austin","displayName":"John Doe","userName":"jdoe","sAMAccountName":"jDoe","mail":"john.doe@sailpoint.com"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update Account","description":{"content":"This API submits an account update task and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The account ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Account + + + +This API submits an account update task and returns the task ID. +A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    Request Body required
    + +Async task details + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/put-notification-preference.api.mdx b/docs/sailpoint-api-beta/put-notification-preference.api.mdx new file mode 100644 index 000000000..4bcded864 --- /dev/null +++ b/docs/sailpoint-api-beta/put-notification-preference.api.mdx @@ -0,0 +1,81 @@ +--- +id: put-notification-preference +sidebar_label: Overwrite the preferences for the given notification key. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"putNotificationPreference","tags":["Notifications"],"description":"In the notification world, a notification flows through these salient stages - \n 1. Interest matching, \n 2. Preferences \n 3. Template Rendering. \n\nThe default notification preferences make up a part of the second stage, along with user preferences (which is a future goal). The expectation is for admins to be able to set default preferences for their org, like opting in to or out of certain notifications, and configuring future preferences as we tack on more features. The key in the Dto is not necessary but if it is provided and doesn't match the key in the URI, then a 400 will be thrown. \nRequest will require the following legacy roles: ORG_ADMIN and API","parameters":[{"in":"path","name":"key","required":true,"schema":{"type":"string"},"description":"The notification key."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Maps an Identity's attribute key to a list of preferred notification mediums.","properties":{"key":{"type":"string","description":"The template notification key.","example":"cloud_manual_work_item_summary"},"mediums":{"type":"array","description":"List of preferred notification mediums, i.e., the mediums (or method) for which notifications are enabled. More mediums may be added in the future.","items":{"type":"string","enum":["EMAIL","SMS","PHONE","SLACK","TEAMS"]},"example":["EMAIL"]},"modified":{"type":"string","description":"Modified date of preference","format":"date-time","example":"2020-05-15T14:37:06.909Z"}}}}}},"responses":{"200":{"description":"The preferences were successfully replaced, and an echo of the new preferences are sent back to caller.","content":{"application/json":{"schema":{"type":"object","description":"Maps an Identity's attribute key to a list of preferred notification mediums.","properties":{"key":{"type":"string","description":"The template notification key.","example":"cloud_manual_work_item_summary"},"mediums":{"type":"array","description":"List of preferred notification mediums, i.e., the mediums (or method) for which notifications are enabled. More mediums may be added in the future.","items":{"type":"string","enum":["EMAIL","SMS","PHONE","SLACK","TEAMS"]},"example":["EMAIL"]},"modified":{"type":"string","description":"Modified date of preference","format":"date-time","example":"2020-05-15T14:37:06.909Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}}},"method":"put","path":"/notification-preferences/{key}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"key":"cloud_manual_work_item_summary","mediums":["EMAIL"],"modified":"2020-05-15T14:37:06.909Z"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Overwrite the preferences for the given notification key.","description":{"content":"In the notification world, a notification flows through these salient stages - \n 1. Interest matching, \n 2. Preferences \n 3. Template Rendering. \n\nThe default notification preferences make up a part of the second stage, along with user preferences (which is a future goal). The expectation is for admins to be able to set default preferences for their org, like opting in to or out of certain notifications, and configuring future preferences as we tack on more features. The key in the Dto is not necessary but if it is provided and doesn't match the key in the URI, then a 400 will be thrown. \nRequest will require the following legacy roles: ORG_ADMIN and API","type":"text/plain"},"url":{"path":["notification-preferences",":key"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The notification key.","type":"text/plain"},"type":"any","value":"","key":"key"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Overwrite the preferences for the given notification key. + + + +In the notification world, a notification flows through these salient stages - + 1. Interest matching, + 2. Preferences + 3. Template Rendering. + +The default notification preferences make up a part of the second stage, along with user preferences (which is a future goal). The expectation is for admins to be able to set default preferences for their org, like opting in to or out of certain notifications, and configuring future preferences as we tack on more features. The key in the Dto is not necessary but if it is provided and doesn't match the key in the URI, then a 400 will be thrown. +Request will require the following legacy roles: ORG_ADMIN and API + +
    Path Parameters
    Request Body required
    + +The preferences were successfully replaced, and an echo of the new preferences are sent back to caller. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/put-source-attr-sync-config.api.mdx b/docs/sailpoint-api-beta/put-source-attr-sync-config.api.mdx new file mode 100644 index 000000000..bfcb4653e --- /dev/null +++ b/docs/sailpoint-api-beta/put-source-attr-sync-config.api.mdx @@ -0,0 +1,105 @@ +--- +id: put-source-attr-sync-config +sidebar_label: Update Attribute Sync Config +hide_title: true +hide_table_of_contents: true +api: {"operationId":"putSourceAttrSyncConfig","tags":["Sources"],"description":"Replaces the attribute synchronization configuration for the source specified by the given ID with the configuration provided in the request body. Only the \"enabled\" field of the values in the \"attributes\" array is mutable. Attempting to change other attributes or add new values to the \"attributes\" array will result in an error.\n \nA token with ORG_ADMIN authority is required to call this API.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The source id","example":"2c9180835d191a86015d28455b4a2329"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Specification of attribute sync configuration for a source","required":["source","attributes"],"properties":{"source":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the source which is the target of the attribute synchronization","example":[{"type":"SOURCE","id":"2c9180835d191a86015d28455b4b232a","name":"HR Active Directory"}]},"attributes":{"type":"array","description":"Attribute synchronization configuration for specific identity attributes in the context of a source","items":{"type":"object","description":"Specification of source attribute sync mapping configuration for an identity attribute","required":["name","displayName","enabled","target"],"properties":{"name":{"type":"string","description":"Name of the identity attribute","example":"email"},"displayName":{"type":"string","description":"Display name of the identity attribute","example":"Email"},"enabled":{"type":"boolean","description":"Determines whether or not the attribute is enabled for synchronization","example":true},"target":{"type":"string","description":"Name of the source account attribute to which the identity attribute value will be synchronized if enabled","example":"mail"}}},"example":[{"name":"email","displayName":"Email","enabled":true,"target":"mail"},{"name":"firstname","displayName":"First Name","enabled":false,"target":"givenName"}]}}}}}},"responses":{"200":{"description":"Updated attribute synchronization configuration for a source","content":{"application/json":{"schema":{"type":"object","description":"Specification of attribute sync configuration for a source","required":["source","attributes"],"properties":{"source":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the source which is the target of the attribute synchronization","example":[{"type":"SOURCE","id":"2c9180835d191a86015d28455b4b232a","name":"HR Active Directory"}]},"attributes":{"type":"array","description":"Attribute synchronization configuration for specific identity attributes in the context of a source","items":{"type":"object","description":"Specification of source attribute sync mapping configuration for an identity attribute","required":["name","displayName","enabled","target"],"properties":{"name":{"type":"string","description":"Name of the identity attribute","example":"email"},"displayName":{"type":"string","description":"Display name of the identity attribute","example":"Email"},"enabled":{"type":"boolean","description":"Determines whether or not the attribute is enabled for synchronization","example":true},"target":{"type":"string","description":"Name of the source account attribute to which the identity attribute value will be synchronized if enabled","example":"mail"}}},"example":[{"name":"email","displayName":"Email","enabled":true,"target":"mail"},{"name":"firstname","displayName":"First Name","enabled":false,"target":"givenName"}]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/sources/{id}/attribute-sync-config","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"source":[{"type":"SOURCE","id":"2c9180835d191a86015d28455b4b232a","name":"HR Active Directory"}],"attributes":[{"name":"email","displayName":"Email","enabled":true,"target":"mail"},{"name":"firstname","displayName":"First Name","enabled":false,"target":"givenName"}]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update Attribute Sync Config","description":{"content":"Replaces the attribute synchronization configuration for the source specified by the given ID with the configuration provided in the request body. Only the \"enabled\" field of the values in the \"attributes\" array is mutable. Attempting to change other attributes or add new values to the \"attributes\" array will result in an error.\n \nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":id","attribute-sync-config"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The source id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Attribute Sync Config + + + +Replaces the attribute synchronization configuration for the source specified by the given ID with the configuration provided in the request body. Only the "enabled" field of the values in the "attributes" array is mutable. Attempting to change other attributes or add new values to the "attributes" array will result in an error. + +A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    Request Body required
      source object
      + +Reference to the source which is the target of the attribute synchronization + +
      attributes object[]
      + +Attribute synchronization configuration for specific identity attributes in the context of a source + +
    + +Updated attribute synchronization configuration for a source + +
    Schema
      source object
      + +Reference to the source which is the target of the attribute synchronization + +
      attributes object[]
      + +Attribute synchronization configuration for specific identity attributes in the context of a source + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/query-password-info.api.mdx b/docs/sailpoint-api-beta/query-password-info.api.mdx new file mode 100644 index 000000000..86637c37c --- /dev/null +++ b/docs/sailpoint-api-beta/query-password-info.api.mdx @@ -0,0 +1,71 @@ +--- +id: query-password-info +sidebar_label: Query Password Info +hide_title: true +hide_table_of_contents: true +api: {"operationId":"queryPasswordInfo","tags":["Password Management"],"description":"This API is used to query password related information. A token with API authority is required to call this API.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"userName":{"type":"string","description":"The login name of the user","example":"Abby.Smith"},"sourceName":{"type":"string","description":"The display name of the source","example":"My-AD"}}},"example":{"userName":"Abby.Smith","sourceName":"My-AD"}}}},"responses":{"200":{"description":"Reference to the password info.","content":{"application/json":{"schema":{"type":"object","properties":{"identityId":{"type":"string","example":"2c918085744fec4301746f9a5bce4605"},"sourceId":{"type":"string","example":"2c918083746f642c01746f990884012a"},"publicKeyId":{"type":"string","example":"N2M1OTJiMGEtMDJlZS00ZWU3LTkyYTEtNjA5YmI5NWE3ZWVh"},"publicKey":{"type":"string","description":"User's public key with Base64 encoding","example":"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuGFkWi2J75TztpbaPKd36bJnIB3J8gZ6UcoS9oSDYsqBzPpTsfZXYaEf4Y4BKGgJIXmE/lwhwuj7mU1itdZ2qTSNFtnXA8Fn75c3UUkk+h+wdZbkuSmqlsJo3R1OnJkwkJggcAy9Jvk9jlcrNLWorpQ1w9raUvxtvfgkSdq153KxotenQ1HciSyZ0nA/Kw0UaucLnho8xdRowZs11afXGXA9IT9H6D8T6zUdtSxm0nAyH+mluma5LdTfaM50W3l/L8q56Vrqmx2pZIiwdx/0+g3Y++jV70zom0ZBkC1MmSoLMrQYG5OICNjr72f78B2PaGXfarQHqARLjKpMVt9YIQIDAQAB"},"accounts":{"type":"array","description":"Account info related to queried identity and source","items":{"type":"object","properties":{"accountId":{"type":"string","description":"Account ID of the account. This is specified per account schema in the source configuration. It is used to distinguish accounts. More info can be found here https://community.sailpoint.com/t5/IdentityNow-Connectors/How-do-I-designate-an-account-attribute-as-the-Account-ID-for-a/ta-p/80350","example":"CN=Abby Smith,OU=Austin,OU=Americas,OU=Demo,DC=seri,DC=acme,DC=com"},"accountName":{"type":"string","description":"Display name of the account. This is specified per account schema in the source configuration. It is used to display name of the account. More info can be found here https://community.sailpoint.com/t5/IdentityNow-Connectors/How-do-I-designate-an-account-attribute-as-the-Account-Name-for/ta-p/74008","example":"Abby.Smith"}}}},"policies":{"type":"array","description":"Password constraints","items":{"type":"string"},"example":["passwordRepeatedChar is 3","passwordMinAlpha is 1","passwordMinLength is 5","passwordMinNumeric is 1"]}}},"example":{"identityId":"2c918085744fec4301746f9a5bce4611","sourceId":"2c918083746f642c01746f9908840111","publicKeyId":"N2M1OTJiMGEtMDJlZS00ZWU3LTkyYTEtNjA5YmI5NWE3ZWVA","publicKey":"AIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuGFkWi2J75TztpbaPKd36bJnIB3J8gZ6UcoS9oSDYsqBzPpTsfZXYaEf4Y4BKGgJIXmE/lwhwuj7mU1itdZ2qTSNFtnXA8Fn75c3UUkk+h+wdZbkuSmqlsJo3R1OnJkwkJggcAy9Jvk9jlcrNLWorpQ1w9raUvxtvfgkSdq153KxotenQ1HciSyZ0nA/Kw0UaucLnho8xdRowZs11afXGXA9IT9H6D8T6zUdtSxm0nAyH+mluma5LdTfaM50W3l/L8q56Vrqmx2pZIiwdx/0+g3Y++jV70zom0ZBkC1MmSoLMrQYG5OICNjr72f78B2PaGXfarQHqARLjKpMVt9YIQIDAQAB","accounts":[{"accountId":"CN=Abby Smith,OU=Austin,OU=Americas,OU=Demo,DC=seri,DC=acme,DC=com","accountName":"Abby.Smith"}],"policies":["passwordRepeatedChar is 3","passwordMinAlpha is 1","passwordMinLength is 5","passwordMinNumeric is 1"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/query-password-info","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"userName":"Abby.Smith","sourceName":"My-AD"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Query Password Info","description":{"content":"This API is used to query password related information. A token with API authority is required to call this API.","type":"text/plain"},"url":{"path":["query-password-info"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Query Password Info + + + +This API is used to query password related information. A token with API authority is required to call this API. + +
    Request Body required
    + +Reference to the password info. + +
    Schema
      accounts object[]
      + +Account info related to queried identity and source + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/reassign-identity-certs-async.api.mdx b/docs/sailpoint-api-beta/reassign-identity-certs-async.api.mdx new file mode 100644 index 000000000..4883f5fe3 --- /dev/null +++ b/docs/sailpoint-api-beta/reassign-identity-certs-async.api.mdx @@ -0,0 +1,87 @@ +--- +id: reassign-identity-certs-async +sidebar_label: Reassign Certifications Asynchronously +hide_title: true +hide_table_of_contents: true +api: {"operationId":"reassignIdentityCertsAsync","tags":["Certifications"],"description":"This API initiates a task to reassign up to 500 identities or items in an identity campaign certification to another reviewer. The `certification-tasks` API can be used to get an updated status on the task and determine when the reassignment is complete. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The identity campaign certification ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reassign":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of item or identity being reassigned.","example":"ef38f94347e94562b5bb8424a56397d8"},"type":{"type":"string","enum":["TARGET_SUMMARY","ITEM","IDENTITY_SUMMARY"]}},"required":["id","type"]}},"reassignTo":{"type":"string","description":"The ID of the identity to which the certification is reassigned","example":"ef38f94347e94562b5bb8424a56397d8"},"reason":{"type":"string","description":"The reason comment for why the reassign was made","example":"reassigned for some reason"}},"required":["reassign","reassignTo","reason"]}}}},"responses":{"200":{"description":"A certification task object for the reassignment which can be queried for status.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The task id","example":"abcd-ef12-3456"},"certificationId":{"type":"string","description":"The certification id","example":"ef38f94347e94562b5bb8424a56397d8"},"type":{"type":"string","enum":["REASSIGN"]},"status":{"type":"string","enum":["QUEUED","IN_PROGRESS","SUCCESS","ERROR"]},"errors":{"type":"array","items":{"type":"string"},"description":"Any errors executing the task (Optional).","example":[]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/certifications/{id}/reassign-async","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"reassign":[{"id":"ef38f94347e94562b5bb8424a56397d8","type":"TARGET_SUMMARY"}],"reassignTo":"ef38f94347e94562b5bb8424a56397d8","reason":"reassigned for some reason"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Reassign Certifications Asynchronously","description":{"content":"This API initiates a task to reassign up to 500 identities or items in an identity campaign certification to another reviewer. The `certification-tasks` API can be used to get an updated status on the task and determine when the reassignment is complete. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API.","type":"text/plain"},"url":{"path":["certifications",":id","reassign-async"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The identity campaign certification ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Reassign Certifications Asynchronously + + + +This API initiates a task to reassign up to 500 identities or items in an identity campaign certification to another reviewer. The `certification-tasks` API can be used to get an updated status on the task and determine when the reassignment is complete. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. + +
    Path Parameters
    Request Body required
      reassign object[]
    + +A certification task object for the reassignment which can be queried for status. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/refresh-identity-profile.api.mdx b/docs/sailpoint-api-beta/refresh-identity-profile.api.mdx new file mode 100644 index 000000000..12efa12ec --- /dev/null +++ b/docs/sailpoint-api-beta/refresh-identity-profile.api.mdx @@ -0,0 +1,88 @@ +--- +id: refresh-identity-profile +sidebar_label: Refreshes all the identities under this profile +hide_title: true +hide_table_of_contents: true +api: {"operationId":"refreshIdentityProfile","tags":["Identity Profiles"],"description":"This refreshes all identities under the profile\nA token with ORG_ADMIN authority is required to call this API to refresh identities under this Identity Profile.","parameters":[{"in":"path","name":"identity-profile-id","schema":{"type":"string","format":"uuid"},"required":true,"description":"The Identity Profile ID to be refreshed","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:identity-profile:refresh"]}],"method":"post","path":"/identity-profiles/{identity-profile-id}/refresh-identities","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Refreshes all the identities under this profile","description":{"content":"This refreshes all identities under the profile\nA token with ORG_ADMIN authority is required to call this API to refresh identities under this Identity Profile.","type":"text/plain"},"url":{"path":["identity-profiles",":identity-profile-id","refresh-identities"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Identity Profile ID to be refreshed","type":"text/plain"},"type":"any","value":"","key":"identity-profile-id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Refreshes all the identities under this profile + + + +This refreshes all identities under the profile +A token with ORG_ADMIN authority is required to call this API to refresh identities under this Identity Profile. + +
    Path Parameters
    + +Accepted - Returned if the request was successfully accepted into the system. + +
    Schema
    • object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/reject-approval-item.api.mdx b/docs/sailpoint-api-beta/reject-approval-item.api.mdx new file mode 100644 index 000000000..e4b47512d --- /dev/null +++ b/docs/sailpoint-api-beta/reject-approval-item.api.mdx @@ -0,0 +1,67 @@ +--- +id: reject-approval-item +sidebar_label: Reject an Approval Item +hide_title: true +hide_table_of_contents: true +api: {"operationId":"rejectApprovalItem","tags":["Work Items"],"description":"This API rejects an Approval Item. Either an admin, or the owning/current user must make this request.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the work item","example":"ef38f94347e94562b5bb8424a56397d8"},{"in":"path","name":"approvalItemId","schema":{"type":"string"},"required":true,"description":"The ID of the approval item.","example":"1211bcaa32112bcef6122adb21cef1ac"}],"responses":{"200":{"description":"A work items details object.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the work item","example":"2c9180835d2e5168015d32f890ca1581"},"requesterId":{"type":"string","description":"ID of the requester","example":"2c9180835d2e5168015d32f890ca1581"},"requesterDisplayName":{"type":"string","description":"The displayname of the requester","example":"John Smith"},"ownerId":{"type":"string","description":"The ID of the owner","example":"2c9180835d2e5168015d32f890ca1581"},"ownerName":{"type":"string","description":"The name of the owner","example":"Jason Smith"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"description":{"type":"string","description":"The description of the work item","example":"Create account on source 'AD'"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"type":{"type":"string","enum":["UNKNOWN","GENERIC","CERTIFICATION","REMEDIATION","DELEGATION","APPROVAL","VIOLATIONREVIEW","FORM","POLICYVIOLATION","CHALLENGE","IMPACTANALYSIS","SIGNOFF","EVENT","MANUALACTION","TEST"]},"remediationItems":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the certification","example":"2c9180835d2e5168015d32f890ca1581"},"targetId":{"type":"string","description":"The ID of the certification target","example":"2c9180835d2e5168015d32f890ca1581"},"targetName":{"type":"string","description":"The name of the certification target","example":"john.smith"},"targetDisplayName":{"type":"string","description":"The display name of the certification target","example":"emailAddress"},"applicationName":{"type":"string","description":"The name of the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute being certified","example":"phoneNumber"},"attributeOperation":{"type":"string","description":"The operation of the certification on the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute being certified","example":"512-555-1212"},"nativeIdentity":{"type":"string","description":"The native identity of the target","example":"jason.smith2"}}},"approvalItems":{"type":"object","properties":{"id":{"type":"string","description":"ID of the approval item","example":"2c9180835d2e5168015d32f890ca1581"},"account":{"type":"string","description":"The account referenced by the approval item","example":"john.smith"},"application":{"type":"string","description":"The name the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute","example":"emailAddress"},"attributeOperation":{"type":"string","description":"The operation of the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute","example":"a@b.com"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]}}},"name":{"type":"string","description":"The work item name","example":"Account Create"},"completed":{"type":"string","format":"date-time","example":"2018-10-19T13:49:37.385Z"},"numItems":{"type":"integer","description":"The number of items in the work item","example":19},"errors":{"type":"array","items":{"type":"string"},"example":["The work item ID that was specified was not found."]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"method":"post","path":"/work-items/{id}/reject/{approvalItemId}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Reject an Approval Item","description":{"content":"This API rejects an Approval Item. Either an admin, or the owning/current user must make this request.","type":"text/plain"},"url":{"path":["work-items",":id","reject",":approvalItemId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the work item","type":"text/plain"},"type":"any","value":"","key":"id"},{"disabled":false,"description":{"content":"(Required) The ID of the approval item.","type":"text/plain"},"type":"any","value":"","key":"approvalItemId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Reject an Approval Item + + + +This API rejects an Approval Item. Either an admin, or the owning/current user must make this request. + +
    Path Parameters
    + +A work items details object. + +
    Schema
      remediationItems object
      approvalItems object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/reject-request.api.mdx b/docs/sailpoint-api-beta/reject-request.api.mdx new file mode 100644 index 000000000..f3f07f8e2 --- /dev/null +++ b/docs/sailpoint-api-beta/reject-request.api.mdx @@ -0,0 +1,91 @@ +--- +id: reject-request +sidebar_label: Rejects an access request approval. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"rejectRequest","tags":["Access Request Approvals"],"description":"This endpoint rejects an access request approval. Only the owner of the approval and admin users are allowed to perform this action.","parameters":[{"in":"path","name":"approvalId","schema":{"type":"string"},"required":true,"description":"The id of the approval.","example":"2c91808b7294bea301729568c68c002e"}],"requestBody":{"description":"Reviewer's comment.","required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"comment":{"type":"string"}}}}}},"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/access-request-approvals/{approvalId}/reject","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"comment":"string"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Rejects an access request approval.","description":{"content":"This endpoint rejects an access request approval. Only the owner of the approval and admin users are allowed to perform this action.","type":"text/plain"},"url":{"path":["access-request-approvals",":approvalId","reject"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The id of the approval.","type":"text/plain"},"type":"any","value":"","key":"approvalId"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Rejects an access request approval. + + + +This endpoint rejects an access request approval. Only the owner of the approval and admin users are allowed to perform this action. + +
    Path Parameters
    Request Body
    + +Reviewer's comment. + +
    + +Accepted - Returned if the request was successfully accepted into the system. + +
    Schema
    • object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/reload-account.api.mdx b/docs/sailpoint-api-beta/reload-account.api.mdx new file mode 100644 index 000000000..7bfef5e3b --- /dev/null +++ b/docs/sailpoint-api-beta/reload-account.api.mdx @@ -0,0 +1,88 @@ +--- +id: reload-account +sidebar_label: Reload Account +hide_title: true +hide_table_of_contents: true +api: {"operationId":"reloadAccount","tags":["Accounts"],"description":"This API asynchronously reloads the account directly from the connector and performs a one-time aggregation process. \nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:account:reload"]}],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The account id","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"202":{"description":"Async task details","content":{"application/json":{"schema":{"description":"Accounts async response containing details on started async process","required":["id"],"type":"object","properties":{"id":{"description":"id of the task","type":"string","example":"2c91808474683da6017468693c260195"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/accounts/{id}/reload","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Reload Account","description":{"content":"This API asynchronously reloads the account directly from the connector and performs a one-time aggregation process. \nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts",":id","reload"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The account id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Reload Account + + + +This API asynchronously reloads the account directly from the connector and performs a one-time aggregation process. +A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
    + +Async task details + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/remove-tags-to-many-object.api.mdx b/docs/sailpoint-api-beta/remove-tags-to-many-object.api.mdx new file mode 100644 index 000000000..8481341b5 --- /dev/null +++ b/docs/sailpoint-api-beta/remove-tags-to-many-object.api.mdx @@ -0,0 +1,81 @@ +--- +id: remove-tags-to-many-object +sidebar_label: Remove Tags from Multiple Objects +hide_title: true +hide_table_of_contents: true +api: {"operationId":"removeTagsToManyObject","tags":["Tagged Objects"],"description":"This API removes tags from multiple objects.\n\nA token with API, CERT_ADMIN, ORG_ADMIN, REPORT_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","requestBody":{"description":"Supported object types are ROLE, IDENTITY and SOD_POLICY.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"objectRefs":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}},"tags":{"type":"array","items":{"type":"string"},"description":"Label to be applied to an Object","example":["BU_FINANCE","PCI"]},"operation":{"type":"string","enum":["APPEND","MERGE"],"default":"APPEND","description":"If APPEND, tags are appended to the list of tags for the object. A 400 error is returned if this would add duplicate tags to the object.\n\nIf MERGE, tags are merged with the existing tags. Duplicate tags are silently ignored.","example":"MERGE"}}}}}},"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/tagged-objects/bulk-remove","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"objectRefs":[{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}],"tags":["BU_FINANCE","PCI"],"operation":"MERGE"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Remove Tags from Multiple Objects","description":{"content":"This API removes tags from multiple objects.\n\nA token with API, CERT_ADMIN, ORG_ADMIN, REPORT_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["tagged-objects","bulk-remove"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Remove Tags from Multiple Objects + + + +This API removes tags from multiple objects. + +A token with API, CERT_ADMIN, ORG_ADMIN, REPORT_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + +
    Request Body required
    + +Supported object types are ROLE, IDENTITY and SOD_POLICY. + +
      objectRefs object[]
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/replace-provisioning-policy.api.mdx b/docs/sailpoint-api-beta/replace-provisioning-policy.api.mdx new file mode 100644 index 000000000..38f303a3c --- /dev/null +++ b/docs/sailpoint-api-beta/replace-provisioning-policy.api.mdx @@ -0,0 +1,88 @@ +--- +id: replace-provisioning-policy +sidebar_label: Update Provisioning Policy by UsageType +hide_title: true +hide_table_of_contents: true +api: {"operationId":"replaceProvisioningPolicy","tags":["Sources"],"description":"This end-point updates the provisioning policy with the specified usage on the specified source in IdentityNow.\nA token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:provisioning-policy:update"]}],"parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source ID.","example":"2c9180835d191a86015d28455b4a2329"},{"in":"path","name":"usageType","required":true,"schema":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"description":"The type of ProvisioningPolicy usage."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"usageType":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"userName"},"transform":{"type":"object","description":"The transform to apply to the field","example":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"default":{}},"attributes":{"type":"object","description":"Attributes required for the transform","example":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"}},"type":{"type":"string","description":"The type of the attribute.","example":"string"},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","default":false,"example":false}}}}}}}}},"responses":{"200":{"description":"The ProvisioningPolicyDto was successfully replaced.","content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"usageType":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"userName"},"transform":{"type":"object","description":"The transform to apply to the field","example":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"default":{}},"attributes":{"type":"object","description":"Attributes required for the transform","example":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"}},"isRequired":{"type":"boolean","readOnly":true,"description":"Flag indicating whether or not the attribute is required.","default":false,"example":false},"type":{"type":"string","description":"The type of the attribute.","example":"string"},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","default":false,"example":false}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/sources/{sourceId}/provisioning-policies/{usageType}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"string","description":"string","usageType":"CREATE","fields":[{"name":"userName","transform":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"attributes":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"},"type":"string","isMultiValued":false}]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update Provisioning Policy by UsageType","description":{"content":"This end-point updates the provisioning policy with the specified usage on the specified source in IdentityNow.\nA token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":sourceId","provisioning-policies",":usageType"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source ID.","type":"text/plain"},"type":"any","value":"","key":"sourceId"},{"disabled":false,"description":{"content":"(Required) The type of ProvisioningPolicy usage.","type":"text/plain"},"type":"any","value":"","key":"usageType"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Provisioning Policy by UsageType + + + +This end-point updates the provisioning policy with the specified usage on the specified source in IdentityNow. +A token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + +
    Path Parameters
    Request Body required
      fields object[]
    + +The ProvisioningPolicyDto was successfully replaced. + +
    Schema
      fields object[]
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/replace-schema.api.mdx b/docs/sailpoint-api-beta/replace-schema.api.mdx new file mode 100644 index 000000000..10f4ab27f --- /dev/null +++ b/docs/sailpoint-api-beta/replace-schema.api.mdx @@ -0,0 +1,108 @@ +--- +id: replace-schema +sidebar_label: Update Source Schema (Full) +hide_title: true +hide_table_of_contents: true +api: {"operationId":"replaceSchema","tags":["Sources"],"description":"This API will completely replace an existing Schema with the submitted payload. Some fields of the Schema cannot be updated. These fields are listed below.\n* id\n* name\n* created\n* modified\nAny attempt to modify these fields will result in an error response with a status code of 400.","parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source ID.","example":"2c9180835d191a86015d28455b4a2329"},{"in":"path","name":"schemaId","schema":{"type":"string"},"required":true,"description":"The Schema ID.","example":"2c9180835d191a86015d28455b4a2329"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Schema.","example":"2c9180835d191a86015d28455b4a2329"},"name":{"type":"string","description":"The name of the Schema.","example":"account"},"nativeObjectType":{"type":"string","description":"The name of the object type on the native system that the schema represents.","example":"User"},"identityAttribute":{"type":"string","description":"The name of the attribute used to calculate the unique identifier for an object in the schema.","example":"sAMAccountName"},"displayAttribute":{"type":"string","description":"The name of the attribute used to calculate the display value for an object in the schema.","example":"distinguishedName"},"hierarchyAttribute":{"type":"string","description":"The name of the attribute whose values represent other objects in a hierarchy. Only relevant to group schemas.","example":"memberOf"},"includePermissions":{"type":"boolean","description":"Flag indicating whether or not the include permissions with the object data when aggregating the schema.","example":false},"features":{"type":"array","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"description":"The features that the schema supports.","example":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"]},"configuration":{"type":"object","description":"Holds any extra configuration data that the schema may require.","example":{"groupMemberAttribute":"member"}},"attributes":{"type":"array","description":"The attribute definitions which form the schema.","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"sAMAccountName"},"type":{"description":"The type of the attribute.","example":"string","type":"string","enum":["STRING","LONG","INT","BOOLEAN"]},"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"A reference to the schema on the source to which the values of the attribute map.","example":{"type":"CONNECTOR_SCHEMA","id":"2c9180866166b5b0016167c32ef31a66","name":"group"}},"description":{"type":"string","description":"A human-readable description of the attribute."},"isMulti":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","example":false},"isEntitlement":{"type":"boolean","description":"Flag indicating whether or not the attribute is an entitlement.","example":false}}},"example":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}]},"created":{"type":"string","description":"The date the Schema was created.","format":"date-time","example":"2019-12-24T22:32:58.104Z"},"modified":{"type":"string","description":"The date the Schema was last modified.","format":"date-time","example":"2019-12-31T20:22:28.104Z"}}}}}},"responses":{"200":{"description":"The Schema was successfully replaced.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Schema.","example":"2c9180835d191a86015d28455b4a2329"},"name":{"type":"string","description":"The name of the Schema.","example":"account"},"nativeObjectType":{"type":"string","description":"The name of the object type on the native system that the schema represents.","example":"User"},"identityAttribute":{"type":"string","description":"The name of the attribute used to calculate the unique identifier for an object in the schema.","example":"sAMAccountName"},"displayAttribute":{"type":"string","description":"The name of the attribute used to calculate the display value for an object in the schema.","example":"distinguishedName"},"hierarchyAttribute":{"type":"string","description":"The name of the attribute whose values represent other objects in a hierarchy. Only relevant to group schemas.","example":"memberOf"},"includePermissions":{"type":"boolean","description":"Flag indicating whether or not the include permissions with the object data when aggregating the schema.","example":false},"features":{"type":"array","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"description":"The features that the schema supports.","example":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"]},"configuration":{"type":"object","description":"Holds any extra configuration data that the schema may require.","example":{"groupMemberAttribute":"member"}},"attributes":{"type":"array","description":"The attribute definitions which form the schema.","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"sAMAccountName"},"type":{"description":"The type of the attribute.","example":"string","type":"string","enum":["STRING","LONG","INT","BOOLEAN"]},"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"A reference to the schema on the source to which the values of the attribute map.","example":{"type":"CONNECTOR_SCHEMA","id":"2c9180866166b5b0016167c32ef31a66","name":"group"}},"description":{"type":"string","description":"A human-readable description of the attribute."},"isMulti":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","example":false},"isEntitlement":{"type":"boolean","description":"Flag indicating whether or not the attribute is an entitlement.","example":false},"isGroup":{"type":"boolean","description":"Unmodifiable flag indicating whether or not the attribute represents a group.","example":false,"readOnly":true}}},"example":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}]},"created":{"type":"string","description":"The date the Schema was created.","format":"date-time","example":"2019-12-24T22:32:58.104Z"},"modified":{"type":"string","description":"The date the Schema was last modified.","format":"date-time","example":"2019-12-31T20:22:28.104Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/sources/{sourceId}/schemas/{schemaId}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"2c9180835d191a86015d28455b4a2329","name":"account","nativeObjectType":"User","identityAttribute":"sAMAccountName","displayAttribute":"distinguishedName","hierarchyAttribute":"memberOf","includePermissions":false,"features":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"],"configuration":{"groupMemberAttribute":"member"},"attributes":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}],"created":"2019-12-24T22:32:58.104Z","modified":"2019-12-31T20:22:28.104Z"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update Source Schema (Full)","description":{"content":"This API will completely replace an existing Schema with the submitted payload. Some fields of the Schema cannot be updated. These fields are listed below.\n* id\n* name\n* created\n* modified\nAny attempt to modify these fields will result in an error response with a status code of 400.","type":"text/plain"},"url":{"path":["sources",":sourceId","schemas",":schemaId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source ID.","type":"text/plain"},"type":"any","value":"","key":"sourceId"},{"disabled":false,"description":{"content":"(Required) The Schema ID.","type":"text/plain"},"type":"any","value":"","key":"schemaId"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Source Schema (Full) + + + +This API will completely replace an existing Schema with the submitted payload. Some fields of the Schema cannot be updated. These fields are listed below. +* id +* name +* created +* modified +Any attempt to modify these fields will result in an error response with a status code of 400. + +
    Path Parameters
    Request Body required
      attributes object[]
      + +The attribute definitions which form the schema. + +
      schema object
      + +A reference to the schema on the source to which the values of the attribute map. + +
    + +The Schema was successfully replaced. + +
    Schema
      attributes object[]
      + +The attribute definitions which form the schema. + +
      schema object
      + +A reference to the schema on the source to which the values of the attribute map. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/replace-source.api.mdx b/docs/sailpoint-api-beta/replace-source.api.mdx new file mode 100644 index 000000000..c4375ac70 --- /dev/null +++ b/docs/sailpoint-api-beta/replace-source.api.mdx @@ -0,0 +1,182 @@ +--- +id: replace-source +sidebar_label: Update Source (Full) +hide_title: true +hide_table_of_contents: true +api: {"operationId":"replaceSource","tags":["Sources"],"description":"This API updates a source in IdentityNow, using a full object representation. In other words, the existing Source\nconfiguration is completely replaced.\n\nSome fields are immutable and cannot be changed, such as:\n\n* id\n* type\n* authoritative\n* connector\n* connectorClass\n* passwordPolicies\n\nAttempts to modify these fields will result in a 400 error.\n\nA token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.\n","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The Source id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"the id of the Source","example":"2c91808568c529c60168cca6f90c1324"},"description":{"type":"string","description":"Human-readable description of the source","example":"This is the corporate directory."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to an owning Identity Object"},"cluster":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the associated Cluster","example":{"type":"CLUSTER","id":"2c9180866166b5b0016167c32ef31a66","name":"Corporate Cluster"}},"accountCorrelationConfig":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Correlation Config object","example":{"type":"ACCOUNT_CORRELATION_CONFIG","id":"2c9180855d191c59015d28583727245a","name":"Directory [source-62867] Account Correlation"}},"accountCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used."},"managerCorrelationMapping":{"description":"Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity","type":"object","properties":{"accountAttribute":{"type":"string","description":"Name of the attribute to use for manager correlation. The value found on the account attribute will be used to lookup the manager's identity.","example":"manager"},"identityAttribute":{"type":"string","description":"Name of the identity attribute to search when trying to find a manager using the value from the accountAttribute.","example":"manager"}}},"managerCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient."},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called."},"schemas":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to Schema objects","example":[{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232a","name":"account"},{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232b","name":"group"}]},"passwordPolicies":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to the associated PasswordPolicy objects.","example":[{"type":"PASSWORD_POLICY","id":"2c9180855d191c59015d291ceb053980","name":"Corporate Password Policy"}]},"features":{"type":"array","description":"Optional features that can be supported by a source.","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"example":["SYNC_PROVISIONING","MANAGER_LOOKUP","SEARCH","PROVISIONING","AUTHENTICATE","GROUP_PROVISIONING","PASSWORD"]},"type":{"type":"string","description":"Specifies the type of system being managed e.g. Active Directory, Workday, etc..","example":"OpenLDAP - Direct"},"connector":{"type":"string","description":"Connector script name.","example":"active-directory"},"connectorClass":{"type":"string","description":"The fully qualified name of the Java class that implements the connector interface.","example":"sailpoint.connector.LDAPConnector"},"connectorAttributes":{"type":"object","description":"Connector specific configuration; will differ from type to type.","example":{"healthCheckTimeout":30,"authSearchAttributes":["cn","uid","mail"]}},"deleteThreshold":{"type":"integer","format":"int32","description":"Number from 0 to 100 that specifies when to skip the delete phase.","example":10},"authoritative":{"type":"boolean","description":"When true indicates the source is referenced by an IdentityProfile.","example":false},"managementWorkgroup":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to Management Workgroup for this Source"},"healthy":{"type":"boolean","description":"When true indicates a healthy source","example":true},"status":{"type":"string","description":"A status identifier, giving specific information on why a source is healthy or not","example":"SOURCE_STATE_HEALTHY"},"since":{"type":"string","description":"Timestamp showing when a source health check was last performed","example":"2021-09-28T15:48:29.3801666300Z"},"connectorId":{"type":"string","description":"The id of connector","example":"active-directory"},"connectorName":{"type":"string","description":"The name of the connector that was chosen on source creation","example":"Active Directory"},"connectionType":{"type":"string","description":"The type of connection (direct or file)","example":"file"},"connectorImplementstionId":{"type":"string","description":"The connector implementstion id","example":"delimited-file"}}}}}},"responses":{"200":{"description":"Updated Source object. Any passwords will only show the the encrypted cipher-text, as they are not decrypt-able in IdentityNow cloud-based services, per IdentityNow security design.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"the id of the Source","example":"2c91808568c529c60168cca6f90c1324"},"description":{"type":"string","description":"Human-readable description of the source","example":"This is the corporate directory."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to an owning Identity Object"},"cluster":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the associated Cluster","example":{"type":"CLUSTER","id":"2c9180866166b5b0016167c32ef31a66","name":"Corporate Cluster"}},"accountCorrelationConfig":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Correlation Config object","example":{"type":"ACCOUNT_CORRELATION_CONFIG","id":"2c9180855d191c59015d28583727245a","name":"Directory [source-62867] Account Correlation"}},"accountCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used."},"managerCorrelationMapping":{"description":"Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity","type":"object","properties":{"accountAttribute":{"type":"string","description":"Name of the attribute to use for manager correlation. The value found on the account attribute will be used to lookup the manager's identity.","example":"manager"},"identityAttribute":{"type":"string","description":"Name of the identity attribute to search when trying to find a manager using the value from the accountAttribute.","example":"manager"}}},"managerCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient."},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called."},"schemas":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to Schema objects","example":[{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232a","name":"account"},{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232b","name":"group"}]},"passwordPolicies":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to the associated PasswordPolicy objects.","example":[{"type":"PASSWORD_POLICY","id":"2c9180855d191c59015d291ceb053980","name":"Corporate Password Policy"}]},"features":{"type":"array","description":"Optional features that can be supported by a source.","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"example":["SYNC_PROVISIONING","MANAGER_LOOKUP","SEARCH","PROVISIONING","AUTHENTICATE","GROUP_PROVISIONING","PASSWORD"]},"type":{"type":"string","description":"Specifies the type of system being managed e.g. Active Directory, Workday, etc..","example":"OpenLDAP - Direct"},"connector":{"type":"string","description":"Connector script name.","example":"active-directory"},"connectorClass":{"type":"string","description":"The fully qualified name of the Java class that implements the connector interface.","example":"sailpoint.connector.LDAPConnector"},"connectorAttributes":{"type":"object","description":"Connector specific configuration; will differ from type to type.","example":{"healthCheckTimeout":30,"authSearchAttributes":["cn","uid","mail"]}},"deleteThreshold":{"type":"integer","format":"int32","description":"Number from 0 to 100 that specifies when to skip the delete phase.","example":10},"authoritative":{"type":"boolean","description":"When true indicates the source is referenced by an IdentityProfile.","example":false},"managementWorkgroup":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to Management Workgroup for this Source"},"healthy":{"type":"boolean","description":"When true indicates a healthy source","example":true},"status":{"type":"string","description":"A status identifier, giving specific information on why a source is healthy or not","example":"SOURCE_STATE_HEALTHY"},"since":{"type":"string","description":"Timestamp showing when a source health check was last performed","example":"2021-09-28T15:48:29.3801666300Z"},"connectorId":{"type":"string","description":"The id of connector","example":"active-directory"},"connectorName":{"type":"string","description":"The name of the connector that was chosen on source creation","example":"Active Directory"},"connectionType":{"type":"string","description":"The type of connection (direct or file)","example":"file"},"connectorImplementstionId":{"type":"string","description":"The connector implementstion id","example":"delimited-file"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/sources/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"2c91808568c529c60168cca6f90c1324","description":"This is the corporate directory.","owner":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"cluster":{"type":"CLUSTER","id":"2c9180866166b5b0016167c32ef31a66","name":"Corporate Cluster"},"accountCorrelationConfig":{"type":"ACCOUNT_CORRELATION_CONFIG","id":"2c9180855d191c59015d28583727245a","name":"Directory [source-62867] Account Correlation"},"accountCorrelationRule":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"managerCorrelationMapping":{"accountAttribute":"manager","identityAttribute":"manager"},"managerCorrelationRule":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"beforeProvisioningRule":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"schemas":[{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232a","name":"account"},{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232b","name":"group"}],"passwordPolicies":[{"type":"PASSWORD_POLICY","id":"2c9180855d191c59015d291ceb053980","name":"Corporate Password Policy"}],"features":["SYNC_PROVISIONING","MANAGER_LOOKUP","SEARCH","PROVISIONING","AUTHENTICATE","GROUP_PROVISIONING","PASSWORD"],"type":"OpenLDAP - Direct","connector":"active-directory","connectorClass":"sailpoint.connector.LDAPConnector","connectorAttributes":{"healthCheckTimeout":30,"authSearchAttributes":["cn","uid","mail"]},"deleteThreshold":10,"authoritative":false,"managementWorkgroup":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"healthy":true,"status":"SOURCE_STATE_HEALTHY","since":"2021-09-28T15:48:29.3801666300Z","connectorId":"active-directory","connectorName":"Active Directory","connectionType":"file","connectorImplementstionId":"delimited-file"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update Source (Full)","description":{"content":"This API updates a source in IdentityNow, using a full object representation. In other words, the existing Source\nconfiguration is completely replaced.\n\nSome fields are immutable and cannot be changed, such as:\n\n* id\n* type\n* authoritative\n* connector\n* connectorClass\n* passwordPolicies\n\nAttempts to modify these fields will result in a 400 error.\n\nA token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.\n","type":"text/plain"},"url":{"path":["sources",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Source (Full) + + + +This API updates a source in IdentityNow, using a full object representation. In other words, the existing Source +configuration is completely replaced. + +Some fields are immutable and cannot be changed, such as: + +* id +* type +* authoritative +* connector +* connectorClass +* passwordPolicies + +Attempts to modify these fields will result in a 400 error. + +A token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + + +
    Path Parameters
    Request Body required
      owner object
      + +Reference to an owning Identity Object + +
      cluster object
      + +Reference to the associated Cluster + +
      accountCorrelationConfig object
      + +Reference to a Correlation Config object + +
      accountCorrelationRule object
      + +Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used. + +
      managerCorrelationMapping object
      + +Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity + +
      managerCorrelationRule object
      + +Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient. + +
      beforeProvisioningRule object
      + +Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called. + +
      schemas object[]
      + +List of references to Schema objects + +
      passwordPolicies object[]
      + +List of references to the associated PasswordPolicy objects. + +
      managementWorkgroup object
      + +Reference to Management Workgroup for this Source + +
    + +Updated Source object. Any passwords will only show the the encrypted cipher-text, as they are not decrypt-able in IdentityNow cloud-based services, per IdentityNow security design. + +
    Schema
      owner object
      + +Reference to an owning Identity Object + +
      cluster object
      + +Reference to the associated Cluster + +
      accountCorrelationConfig object
      + +Reference to a Correlation Config object + +
      accountCorrelationRule object
      + +Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used. + +
      managerCorrelationMapping object
      + +Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity + +
      managerCorrelationRule object
      + +Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient. + +
      beforeProvisioningRule object
      + +Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called. + +
      schemas object[]
      + +List of references to Schema objects + +
      passwordPolicies object[]
      + +List of references to the associated PasswordPolicy objects. + +
      managementWorkgroup object
      + +Reference to Management Workgroup for this Source + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/requestable-objects.tag.mdx b/docs/sailpoint-api-beta/requestable-objects.tag.mdx new file mode 100644 index 000000000..89c927c0b --- /dev/null +++ b/docs/sailpoint-api-beta/requestable-objects.tag.mdx @@ -0,0 +1,15 @@ +--- +id: requestable-objects +title: Requestable Objects +description: Requestable Objects +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/role-insights-requests.api.mdx b/docs/sailpoint-api-beta/role-insights-requests.api.mdx new file mode 100644 index 000000000..1b3e8db2a --- /dev/null +++ b/docs/sailpoint-api-beta/role-insights-requests.api.mdx @@ -0,0 +1,71 @@ +--- +id: role-insights-requests +sidebar_label: A request to generate insights for roles +hide_title: true +hide_table_of_contents: true +api: {"operationId":"roleInsightsRequests","tags":["Role Insights"],"description":"This submits a create role insights request to the role insights application. At this time there are no parameters. All business roles will be processed for the customer.","responses":{"201":{"description":"Submitted a role insights generation request","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Request Id for a role insight generation request","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},"createdDate":{"type":"string","format":"date-time","description":"The date-time role insights request was created.","example":"2020-09-16T18:49:32.150Z"},"lastGenerated":{"type":"string","format":"date-time","description":"The date-time role insights request was completed.","example":"2020-09-16T18:50:12.150Z"},"numberOfUpdates":{"type":"integer","description":"Total number of updates for this request. Starts with 0 and will have correct number when request is COMPLETED.","example":0},"roleIds":{"description":"The role IDs that are in this request.","type":"array","items":{"type":"string"}},"status":{"type":"string","description":"Request status","enum":["CREATED","IN PROGRESS","COMPLETED","FAILED"]}},"example":{"id":"c9aa02f7-86b0-4bc4-84bd-3116a6131e77","createdDate":"2020-09-16T18:49:32.150Z","lastGenerated":"2020-09-16T18:49:32.150Z","numberOfUpdates":0,"roleIds":["2c91808e720e94f8017253287c0a44f4","2c918087723ac2800172532191540e03","2c9180986e4c8592016e6b15eaef447c"],"status":"CREATED"}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/role-insights/requests","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"A request to generate insights for roles","description":{"content":"This submits a create role insights request to the role insights application. At this time there are no parameters. All business roles will be processed for the customer.","type":"text/plain"},"url":{"path":["role-insights","requests"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## A request to generate insights for roles + + + +This submits a create role insights request to the role insights application. At this time there are no parameters. All business roles will be processed for the customer. + +
    + +Submitted a role insights generation request + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/role-insights.tag.mdx b/docs/sailpoint-api-beta/role-insights.tag.mdx new file mode 100644 index 000000000..5c2ab48d3 --- /dev/null +++ b/docs/sailpoint-api-beta/role-insights.tag.mdx @@ -0,0 +1,15 @@ +--- +id: role-insights +title: Role Insights +description: Role Insights +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/role-mining-sessions.api.mdx b/docs/sailpoint-api-beta/role-mining-sessions.api.mdx new file mode 100644 index 000000000..2be5f999e --- /dev/null +++ b/docs/sailpoint-api-beta/role-mining-sessions.api.mdx @@ -0,0 +1,99 @@ +--- +id: role-mining-sessions +sidebar_label: Create a role mining session +hide_title: true +hide_table_of_contents: true +api: {"operationId":"roleMiningSessions","tags":["IAI Role Mining"],"description":"This submits a create role mining session request to the role mining application.","requestBody":{"description":"Role mining session parameters","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"scope":{"description":"The scope of identities for this role mining session","example":{"identityIds":[],"criteria":"source.name:DataScienceDataset","attributeFilterCriteria":{"displayName":{"untranslated":"Location: Miami"},"ariaLabel":{"untranslated":"Location: Miami"},"data":{"displayName":{"translateKey":"IDN.IDENTITY_ATTRIBUTES.LOCATION"},"name":"location","operator":"EQUALS","values":["Miami"]}}},"type":"object","properties":{"identityIds":{"type":"array","items":{"type":"string"},"description":"The list of identities for this role mining session.","example":["2c918090761a5aac0176215c46a62d58","2c918090761a5aac01722015c46a62d42"]},"criteria":{"type":"string","description":"The \"search\" criteria that produces the list of identities for this role mining session.","example":"source.name:DataScienceDataset"},"attributeFilterCriteria":{"type":"array","items":{"type":"object"},"description":"The filter criteria for this role mining session.","example":{"displayName":{"untranslated":"Location: Miami"},"ariaLabel":{"untranslated":"Location: Miami"},"data":{"displayName":{"translateKey":"IDN.IDENTITY_ATTRIBUTES.LOCATION"},"name":"location","operator":"EQUALS","values":["Miami"]}}}}},"pruneThreshold":{"type":"integer","description":"The prune threshold to be used or null to calculate prescribedPruneThreshold","example":5,"format":"int32"},"prescribedPruneThreshold":{"type":"integer","description":"The calculated prescribedPruneThreshold","example":10,"format":"int32"},"minNumIdentitiesInPotentialRole":{"type":"integer","description":"Minimum number of identities in a potential role","example":20,"format":"int32"},"potentialRoleCount":{"type":"integer","description":"Number of potential roles","example":0,"format":"int32"},"potentialRolesReadyCount":{"type":"integer","description":"Number of potential roles ready","example":0,"format":"int32"},"status":{"description":"The status of the role mining session","example":"CREATED","type":"object","properties":{"state":{"description":"The role mining session status. Can be one of these states - CREATED|UPDATED|IDENTITIES_OBTAINED|PRUNE_THRESHOLD_OBTAINED|POTENTIAL_ROLES_PROCESSING|POTENTIAL_ROLES_CREATED","type":"string","example":"CREATED"}}},"type":{"description":"Role mining session type","example":"SPECIALIZED","type":"string","enum":["SPECIALIZED","COMMON"]},"emailRecipientId":{"type":"string","description":"The id of the user who will receive an email about the role mining session","example":"2c918090761a5aac0176215c46a62d58"},"createdBy":{"description":"The session created by details","type":"object","properties":{"id":{"type":"string","description":"ID of the creator","example":"2c918090761a5aac0176215c46a62d58"},"displayName":{"type":"string","description":"The display name of the creator","example":"Ashley.Pierce"}}},"identityCount":{"type":"integer","description":"Number of identities in the population which meet the search criteria or identity list provided","example":0,"format":"int32"},"saved":{"type":"boolean","description":"The session's saved status","example":true},"name":{"type":"string","description":"The session's saved name","example":"Saved RM Session - 07/10"}}}}}},"responses":{"201":{"description":"Submitted a role mining session request","content":{"application/json":{"schema":{"type":"object","properties":{"scope":{"description":"The scope of identities for this role mining session","type":"object","properties":{"identityIds":{"type":"array","items":{"type":"string"},"description":"The list of identities for this role mining session.","example":["2c918090761a5aac0176215c46a62d58","2c918090761a5aac01722015c46a62d42"]},"criteria":{"type":"string","description":"The \"search\" criteria that produces the list of identities for this role mining session.","example":"source.name:DataScienceDataset"},"attributeFilterCriteria":{"type":"array","items":{"type":"object"},"description":"The filter criteria for this role mining session.","example":{"displayName":{"untranslated":"Location: Miami"},"ariaLabel":{"untranslated":"Location: Miami"},"data":{"displayName":{"translateKey":"IDN.IDENTITY_ATTRIBUTES.LOCATION"},"name":"location","operator":"EQUALS","values":["Miami"]}}}}},"minNumIdentitiesInPotentialRole":{"type":"integer","description":"Minimum number of identities in a potential role","example":20},"prescribedPruneThreshold":{"type":"integer","description":"The computed (or prescribed) prune threshold for this session","example":83},"pruneThreshold":{"type":"integer","description":"The prune threshold to be used for this role mining session","example":70},"potentialRoleCount":{"type":"integer","description":"The number of potential roles","example":8},"potentialRolesReadyCount":{"type":"integer","description":"The number of potential roles which have completed processing","example":4},"status":{"description":"The role mining session status","type":"object","properties":{"state":{"description":"The role mining session status. Can be one of these states - CREATED|UPDATED|IDENTITIES_OBTAINED|PRUNE_THRESHOLD_OBTAINED|POTENTIAL_ROLES_PROCESSING|POTENTIAL_ROLES_CREATED","type":"string","example":"CREATED"}}},"id":{"type":"string","description":"Session Id for this role mining session","example":"8c190e67-87aa-4ed9-a90b-d9d5344523fb"},"createdDate":{"type":"string","format":"date-time","description":"The date-time when this role mining session was created."},"modifiedDate":{"type":"string","format":"date-time","description":"The date-time when this role mining session was completed."},"type":{"description":"Role mining session type","type":"string","enum":["SPECIALIZED","COMMON"],"example":"SPECIALIZED"}},"example":{"scope":{"identityIds":[],"criteria":"source.name:DataScienceDataset"},"minNumIdentitiesInPotentialRole":20,"pruneThreshold":70,"prescribedPruneThreshold":83,"potentialRoleCount":8,"potentialRolesReadyCount":4,"status":{"state":"POTENTIAL_ROLES_PROCESSING"},"id":"602ba738-cf48-499b-a780-7b67b3fc1ecf","createdDate":"2021-09-08T16:11:05.348Z","modifiedDate":"2021-09-08T16:11:05.348Z","type":"SPECIALIZED"}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/role-mining-sessions","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"scope":{"identityIds":[],"criteria":"source.name:DataScienceDataset","attributeFilterCriteria":{"displayName":{"untranslated":"Location: Miami"},"ariaLabel":{"untranslated":"Location: Miami"},"data":{"displayName":{"translateKey":"IDN.IDENTITY_ATTRIBUTES.LOCATION"},"name":"location","operator":"EQUALS","values":["Miami"]}}},"pruneThreshold":5,"prescribedPruneThreshold":10,"minNumIdentitiesInPotentialRole":20,"potentialRoleCount":0,"potentialRolesReadyCount":0,"status":"CREATED","type":"SPECIALIZED","emailRecipientId":"2c918090761a5aac0176215c46a62d58","createdBy":{"id":"2c918090761a5aac0176215c46a62d58","displayName":"Ashley.Pierce"},"identityCount":0,"saved":true,"name":"Saved RM Session - 07/10"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Create a role mining session","description":{"content":"This submits a create role mining session request to the role mining application.","type":"text/plain"},"url":{"path":["role-mining-sessions"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create a role mining session + + + +This submits a create role mining session request to the role mining application. + +
    Request Body required
    + +Role mining session parameters + +
      scope object
      + +The scope of identities for this role mining session + +
      status object
      + +The status of the role mining session + +
      createdBy object
      + +The session created by details + +
    + +Submitted a role mining session request + +
    Schema
      scope object
      + +The scope of identities for this role mining session + +
      status object
      + +The role mining session status + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/roles.tag.mdx b/docs/sailpoint-api-beta/roles.tag.mdx new file mode 100644 index 000000000..3bbbe4f4d --- /dev/null +++ b/docs/sailpoint-api-beta/roles.tag.mdx @@ -0,0 +1,56 @@ +--- +id: roles +title: Roles +description: Roles +--- + + + +Use this API to implement and customize role functionality. +With this functionality in place, administrators can create roles and configure them for use throughout IdentityNow. +IdentityNow can use established criteria to automatically assign the roles to qualified users. This enables users to get all the access they need quickly and securely and administrators to spend their time on other tasks. + +Entitlements represent the most granular level of access in IdentityNow. +Access profiles represent the next level and often group entitlements. +Roles represent the broadest level of access and often group access profiles. + +For example, an Active Directory source in IdentityNow can have multiple entitlements: the first, 'Employees,' may represent the access all employees have at the organization, and a second, 'Developers,' may represent the access all developers have at the organization. + +An administrator can then create a broader set of access in the form of an access profile, 'AD Developers' grouping the 'Employees' entitlement with the 'Developers' entitlement. + +An administrator can then create an even broader set of access in the form of a role grouping the 'AD Developers' access profile with another profile, 'GitHub Developers,' grouping entitlements for the GitHub source. + +When users only need Active Directory employee access, they can request access to the 'Employees' entitlement. + +When users need both Active Directory employee and developer access, they can request access to the 'AD Developers' access profile. + +When users need both the 'AD Developers' access profile and the 'GitHub Developers' access profile, they can request access to the role grouping both. + +Roles often represent positions within organizations. +For example, an organization's accountant can access all the tools the organization's accountants need with the 'Accountant' role. +If the accountant switches to engineering, a qualified member of the organization can quickly revoke the accountant's 'Accountant' access and grant access to the 'Engineer' role instead, granting access to all the tools the organization's engineers need. + +In IdentityNow, adminstrators can use the Access drop-down menu and select Roles to view, configure, and delete existing roles, as well as create new ones. +Administrators can enable and disable the role, and they can also make the following configurations: + +- Manage Access: Manage the role's access by adding or removing access profiles. + +- Define Assignment: Define the criteria IdentityNow uses to assign the role to identities. +Use the first option, 'Standard Criteria,' to provide specific criteria for assignment like specific account attributes, entitlements, or identity attributes. +Use the second, 'Identity List,' to specify the identities for assignment. + +- Access Requests: Configure roles to be requestable and establish an approval process for any requests that the role be granted or revoked. +Do not configure a role to be requestable without establishing a secure access request approval process for that role first. + +Refer to the following link for more information about roles. + + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/run-all-policies-for-org.api.mdx b/docs/sailpoint-api-beta/run-all-policies-for-org.api.mdx new file mode 100644 index 000000000..9e5d662e0 --- /dev/null +++ b/docs/sailpoint-api-beta/run-all-policies-for-org.api.mdx @@ -0,0 +1,76 @@ +--- +id: run-all-policies-for-org +sidebar_label: Runs all policies for Org. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"runAllPoliciesForOrg","tags":["SOD Policy"],"description":"Runs multi policy report for the Org. If a policy reports more than 5000 violation, the report mentions Violation limit exceeded for that policy. If the request is empty, report will run for all policies. Otherwise, report will run only for the filtered policy list provided.\nRequires role of ORG_ADMIN.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"filteredPolicyList":{"type":"array","description":"Multi-policy report will be run for this list of ids","items":{"type":"string"}}}},"example":{"filteredPolicyList":["b868cd40-ffa4-4337-9c07-1a51846cfa94","63a07a7b-39a4-48aa-956d-50c827deba2a"]}}}},"responses":{"200":{"description":"Reference to the violation report run task.","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object","properties":{"status":{"type":"string","enum":["SUCCESS","WARNING","ERROR","TERMINATED","TEMP_ERROR","PENDING"]}}}]},"example":{"status":"PENDING","type":"REPORT_RESULT","id":"37b3b32a-f394-46f8-acad-b5223969fa68","name":"Multi Query Report"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/sod-violation-report/run","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"filteredPolicyList":["string"]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Runs all policies for Org.","description":{"content":"Runs multi policy report for the Org. If a policy reports more than 5000 violation, the report mentions Violation limit exceeded for that policy. If the request is empty, report will run for all policies. Otherwise, report will run only for the filtered policy list provided.\nRequires role of ORG_ADMIN.","type":"text/plain"},"url":{"path":["sod-violation-report","run"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Runs all policies for Org. + + + +Runs multi policy report for the Org. If a policy reports more than 5000 violation, the report mentions Violation limit exceeded for that policy. If the request is empty, report will run for all policies. Otherwise, report will run only for the filtered policy list provided. +Requires role of ORG_ADMIN. + +
    Request Body
    + +Reference to the violation report run task. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/run-campaign-remediation-scan.api.mdx b/docs/sailpoint-api-beta/run-campaign-remediation-scan.api.mdx new file mode 100644 index 000000000..0d7a2ded2 --- /dev/null +++ b/docs/sailpoint-api-beta/run-campaign-remediation-scan.api.mdx @@ -0,0 +1,88 @@ +--- +id: run-campaign-remediation-scan +sidebar_label: Run Campaign Remediation Scan +hide_title: true +hide_table_of_contents: true +api: {"operationId":"runCampaignRemediationScan","tags":["Certification Campaigns"],"description":"Kicks off remediation scan task for a certification campaign.\nRequires roles of CERT_ADMIN and ORG_ADMIN","parameters":[{"in":"path","name":"id","schema":{"type":"string","example":"2c91808571bcfcf80171c23e4b4221fc"},"required":true,"description":"The ID of the campaign for which remediation scan is being run."}],"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/campaigns/{id}/run-remediation-scan","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Run Campaign Remediation Scan","description":{"content":"Kicks off remediation scan task for a certification campaign.\nRequires roles of CERT_ADMIN and ORG_ADMIN","type":"text/plain"},"url":{"path":["campaigns",":id","run-remediation-scan"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the campaign for which remediation scan is being run.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Run Campaign Remediation Scan + + + +Kicks off remediation scan task for a certification campaign. +Requires roles of CERT_ADMIN and ORG_ADMIN + +
    Path Parameters
    + +Accepted - Returned if the request was successfully accepted into the system. + +
    Schema
    • object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/run-campaign-report.api.mdx b/docs/sailpoint-api-beta/run-campaign-report.api.mdx new file mode 100644 index 000000000..94fd4f801 --- /dev/null +++ b/docs/sailpoint-api-beta/run-campaign-report.api.mdx @@ -0,0 +1,88 @@ +--- +id: run-campaign-report +sidebar_label: Run Campaign Report +hide_title: true +hide_table_of_contents: true +api: {"operationId":"runCampaignReport","tags":["Certification Campaigns"],"description":"Runs a report for a certification campaign.\nRequires the following roles: CERT_ADMIN, DASHBOARD, ORG_ADMIN and REPORT_ADMIN.","parameters":[{"in":"path","name":"id","schema":{"type":"string","example":"2c91808571bcfcf80171c23e4b4221fc"},"required":true,"description":"The ID of the campaign for which report is being run."},{"in":"path","name":"type","schema":{"type":"string","enum":["CAMPAIGN_COMPOSITION_REPORT","CAMPAIGN_REMEDIATION_STATUS_REPORT","CAMPAIGN_STATUS_REPORT","CERTIFICATION_SIGNOFF_REPORT"]},"required":true,"description":"The type of the report to run."}],"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/campaigns/{id}/run-report/{type}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Run Campaign Report","description":{"content":"Runs a report for a certification campaign.\nRequires the following roles: CERT_ADMIN, DASHBOARD, ORG_ADMIN and REPORT_ADMIN.","type":"text/plain"},"url":{"path":["campaigns",":id","run-report",":type"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the campaign for which report is being run.","type":"text/plain"},"type":"any","value":"","key":"id"},{"disabled":false,"description":{"content":"(Required) The type of the report to run.","type":"text/plain"},"type":"any","value":"","key":"type"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Run Campaign Report + + + +Runs a report for a certification campaign. +Requires the following roles: CERT_ADMIN, DASHBOARD, ORG_ADMIN and REPORT_ADMIN. + +
    Path Parameters
    + +Accepted - Returned if the request was successfully accepted into the system. + +
    Schema
    • object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/run-sod-policy.api.mdx b/docs/sailpoint-api-beta/run-sod-policy.api.mdx new file mode 100644 index 000000000..deadd6254 --- /dev/null +++ b/docs/sailpoint-api-beta/run-sod-policy.api.mdx @@ -0,0 +1,88 @@ +--- +id: run-sod-policy +sidebar_label: Runs SOD Policy Violation Report +hide_title: true +hide_table_of_contents: true +api: {"operationId":"runSodPolicy","tags":["SOD Policy"],"description":"This invokes processing of violation report for given SOD Policy. If policy reports more than 5000 violations, the report returns with violation limit exceeded message.\nRequires role of ORG_ADMIN.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the SOD Policy to run.","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"Reference to the violation report run task.","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object","properties":{"status":{"type":"string","enum":["SUCCESS","WARNING","ERROR","TERMINATED","TEMP_ERROR","PENDING"]}}}]},"example":{"status":"PENDING","type":"REPORT_RESULT","id":"2e8d8180-24bc-4d21-91c6-7affdb473b0d","name":"policy-xyz"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/sod-policies/{id}/violation-report/run","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Runs SOD Policy Violation Report","description":{"content":"This invokes processing of violation report for given SOD Policy. If policy reports more than 5000 violations, the report returns with violation limit exceeded message.\nRequires role of ORG_ADMIN.","type":"text/plain"},"url":{"path":["sod-policies",":id","violation-report","run"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the SOD Policy to run.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Runs SOD Policy Violation Report + + + +This invokes processing of violation report for given SOD Policy. If policy reports more than 5000 violations, the report returns with violation limit exceeded message. +Requires role of ORG_ADMIN. + +
    Path Parameters
    + +Reference to the violation report run task. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/sail-point-beta-saa-s-api.info.mdx b/docs/sailpoint-api-beta/sail-point-beta-saa-s-api.info.mdx new file mode 100644 index 000000000..a162b544b --- /dev/null +++ b/docs/sailpoint-api-beta/sail-point-beta-saa-s-api.info.mdx @@ -0,0 +1,33 @@ +--- +id: sail-point-beta-saa-s-api +sidebar_label: Introduction +sidebar_position: 0 +hide_title: true +--- + +import ApiLogo from "@theme/ApiLogo"; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +Version: 3.1.0-beta + +# SailPoint - Beta SaaS API + + + +These are the public, beta APIs for SailPoint's SaaS services and are subject to change. + +

    Authentication

    + +OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information. +- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens) +- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow) +- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow) + +Which authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use) + +Learn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details) + + +
    Security Scheme Type:oauth2
    clientCredentials OAuth Flow:

    Token URL: https://tenant.api.identitynow.com/oauth/token

    Scopes:
    • sp:scopes:default: default scope
    • sp:scopes:all: access to all scopes
    authorizationCode OAuth Flow:

    Token URL: https://tenant.api.identitynow.com/oauth/token

    Authorization URL: https://tenant.identitynow.com/oauth/authorize

    Scopes:
    • sp:scopes:default: default scope
    • sp:scopes:all: access to all scopes
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/search-attribute-configuration.tag.mdx b/docs/sailpoint-api-beta/search-attribute-configuration.tag.mdx new file mode 100644 index 000000000..1f29b66e7 --- /dev/null +++ b/docs/sailpoint-api-beta/search-attribute-configuration.tag.mdx @@ -0,0 +1,15 @@ +--- +id: search-attribute-configuration +title: Search Attribute Configuration +description: Search Attribute Configuration +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/segments.tag.mdx b/docs/sailpoint-api-beta/segments.tag.mdx new file mode 100644 index 000000000..f04cac7aa --- /dev/null +++ b/docs/sailpoint-api-beta/segments.tag.mdx @@ -0,0 +1,15 @@ +--- +id: segments +title: Segments +description: Segments +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/send-test-notification.api.mdx b/docs/sailpoint-api-beta/send-test-notification.api.mdx new file mode 100644 index 000000000..90770d59f --- /dev/null +++ b/docs/sailpoint-api-beta/send-test-notification.api.mdx @@ -0,0 +1,87 @@ +--- +id: send-test-notification +sidebar_label: Send Test Notification +hide_title: true +hide_table_of_contents: true +api: {"operationId":"sendTestNotification","tags":["Notifications"],"description":"Send a Test Notification","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"The template notification key.","example":"cloud_manual_work_item_summary"},"medium":{"type":"string","description":"The notification medium. Has to be one of the following enum values.","enum":["EMAIL","SLACK","TEAMS"]},"context":{"type":"object","description":"A Json object that denotes the context specific to the template."}}},"example":{"key":"cloud_manual_work_item_summary","medium":"EMAIL","context":{"numberOfPendingTasks":"4","ownerId":"201327fda1c44704ac01181e963d463c"}}}}},"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/send-test-notification","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"key":"cloud_manual_work_item_summary","medium":"EMAIL","context":{}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Send Test Notification","description":{"content":"Send a Test Notification","type":"text/plain"},"url":{"path":["send-test-notification"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Send Test Notification + + + +Send a Test Notification + +
    Request Body required
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/service-desk-integration.tag.mdx b/docs/sailpoint-api-beta/service-desk-integration.tag.mdx new file mode 100644 index 000000000..e528df537 --- /dev/null +++ b/docs/sailpoint-api-beta/service-desk-integration.tag.mdx @@ -0,0 +1,19 @@ +--- +id: service-desk-integration +title: Service Desk Integration +description: Service Desk Integration +--- + + + +Operations for creating and accessing service desk integrations + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/set-campaign-reports-config.api.mdx b/docs/sailpoint-api-beta/set-campaign-reports-config.api.mdx new file mode 100644 index 000000000..de6ef0221 --- /dev/null +++ b/docs/sailpoint-api-beta/set-campaign-reports-config.api.mdx @@ -0,0 +1,80 @@ +--- +id: set-campaign-reports-config +sidebar_label: Set Campaign Reports Configuration +hide_title: true +hide_table_of_contents: true +api: {"operationId":"setCampaignReportsConfig","tags":["Certification Campaigns"],"description":"Overwrites configuration for campaign reports.\nRequires roles CERT_ADMIN and ORG_ADMIN.","requestBody":{"required":true,"description":"Campaign Report Configuration","content":{"application/json":{"schema":{"type":"object","title":"Campaign Reports Configuration","properties":{"identityAttributeColumns":{"type":"array","items":{"type":"string"},"example":["firstname","lastname"]}}}}}},"responses":{"200":{"description":"The persisted Campaign Report Configuration","content":{"application/json":{"schema":{"type":"object","title":"Campaign Reports Configuration","properties":{"identityAttributeColumns":{"type":"array","items":{"type":"string"},"example":["firstname","lastname"]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/campaigns/reports-configuration","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"identityAttributeColumns":["firstname","lastname"]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Set Campaign Reports Configuration","description":{"content":"Overwrites configuration for campaign reports.\nRequires roles CERT_ADMIN and ORG_ADMIN.","type":"text/plain"},"url":{"path":["campaigns","reports-configuration"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Set Campaign Reports Configuration + + + +Overwrites configuration for campaign reports. +Requires roles CERT_ADMIN and ORG_ADMIN. + +
    Request Body required
    + +Campaign Report Configuration + +
    + +The persisted Campaign Report Configuration + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/set-campaign-template-schedule.api.mdx b/docs/sailpoint-api-beta/set-campaign-template-schedule.api.mdx new file mode 100644 index 000000000..e7b6bf7cf --- /dev/null +++ b/docs/sailpoint-api-beta/set-campaign-template-schedule.api.mdx @@ -0,0 +1,159 @@ +--- +id: set-campaign-template-schedule +sidebar_label: Sets a Campaign Template's Schedule +hide_title: true +hide_table_of_contents: true +api: {"operationId":"setCampaignTemplateSchedule","tags":["Certification Campaigns"],"description":"Sets the schedule for a campaign template. If a schedule already exists, it will be overwritten with the new one.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the campaign template being scheduled."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Determines the overall schedule cadence. In general, all time period fields smaller than the chosen type can be configured. For example, a DAILY schedule can have 'hours' set, but not 'days'; a WEEKLY schedule can have both 'hours' and 'days' set.","enum":["DAILY","WEEKLY","MONTHLY","ANNUALLY","CALENDAR"]},"months":{"type":"object","description":"Specifies which months of a schedule are active. Only valid for ANNUALLY schedule types. Examples:\n\nOn February and March:\n* type LIST\n* values \"2\", \"3\"\n\nEvery 3 months, starting in January (quarterly):\n* type LIST\n* values \"1\"\n* interval 3\n\nEvery two months between July and December:\n* type RANGE\n* values \"7\", \"12\"\n* interval 2\n","properties":{"type":{"type":"string","enum":["LIST","RANGE"]},"values":{"type":"array","items":{"type":"string"}},"interval":{"type":"integer"}},"required":["type","values"]},"days":{"type":"object","description":"Specifies which day(s) a schedule is active for. This is required for all schedule types except DAILY.\nThe \"values\" field holds different data depending on the type of schedule:\n* WEEKLY: days of the week (1-7)\n* MONTHLY: days of the month (1-31, L, L-1...)\n* ANNUALLY: if the \"months\" field is also set: days of the month (1-31, L, L-1...); otherwise: ISO-8601 dates without year (\"--12-31\")\n* CALENDAR: ISO-8601 dates (\"2020-12-31\")\n\nNote that CALENDAR only supports the LIST type, and ANNUALLY does not support the RANGE type when provided\nwith ISO-8601 dates without year.\n\nExamples:\n\nOn Sundays:\n* type LIST\n* values \"1\"\n\nThe second to last day of the month:\n* type LIST\n* values \"L-1\"\n\nFrom the 20th to the last day of the month:\n* type RANGE\n* values \"20\", \"L\"\n\nEvery March 2nd:\n* type LIST\n* values \"--03-02\"\n\nOn March 2nd, 2021:\n* type: LIST\n* values \"2021-03-02\"\n","properties":{"type":{"type":"string","enum":["LIST","RANGE"]},"values":{"type":"array","items":{"type":"string"}},"interval":{"type":"integer"}},"required":["type","values"]},"hours":{"type":"object","description":"Specifies which hour(s) a schedule is active for. Examples:\n\nEvery three hours starting from 8AM, inclusive:\n* type LIST\n* values \"8\"\n* interval 3\n\nDuring business hours:\n* type RANGE\n* values \"9\", \"5\"\n\nAt 5AM, noon, and 5PM:\n* type LIST\n* values \"5\", \"12\", \"17\"\n","properties":{"type":{"type":"string","enum":["LIST","RANGE"]},"values":{"type":"array","items":{"type":"string"}},"interval":{"type":"integer"}},"required":["type","values"]},"expiration":{"type":"string","format":"date-time","description":"Specifies the time after which this schedule will no longer occur."},"timeZoneId":{"type":"string","description":"The time zone to use when running the schedule. For instance, if the schedule is a DAILY schedule that runs at 1AM, and this field is set to \"CST\", the schedule will run at 1AM CST."}},"required":["type","hours"],"example":{"type":"MONTHLY","hours":{"type":"LIST","values":["0"]},"days":{"type":"LIST","values":["1"]}}},"examples":{"Monthly":{"description":"Runs on the 15th and last day of the month, at 5PM.","value":{"type":"MONTHLY","hours":{"type":"LIST","values":["17"]},"days":{"type":"LIST","values":["15"]}}},"Once a year":{"description":"Runs every January 1st at midnight.","value":{"type":"ANNUALLY","hours":{"type":"LIST","values":["0"]},"days":{"type":"LIST","values":["--01-01"]}}},"Quarterly":{"description":"Runs once a quarter (every 3 months) on the first of the month at 1AM.","value":{"type":"ANNUALLY","hours":{"type":"LIST","values":["1"]},"days":{"type":"LIST","values":["1"]},"months":{"type":"LIST","values":["1"],"interval":3}}},"Yearly on Specific Days":{"description":"Runs on March 12 and December 5 at 1AM, every year.","value":{"type":"ANNUALLY","hours":{"type":"LIST","values":["1"]},"days":{"type":"LIST","values":["--03-12","--12-05"]}}},"On a Specific Date":{"description":"Runs at 1AM on February 18th, 2020","value":{"type":"CALENDAR","hours":{"type":"LIST","values":["1"]},"days":{"type":"LIST","values":["2020-02-18"]}}}}}}},"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/campaign-templates/{id}/schedule","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"type":"MONTHLY","hours":{"type":"LIST","values":["0"]},"days":{"type":"LIST","values":["1"]}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Sets a Campaign Template's Schedule","description":{"content":"Sets the schedule for a campaign template. If a schedule already exists, it will be overwritten with the new one.","type":"text/plain"},"url":{"path":["campaign-templates",":id","schedule"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the campaign template being scheduled.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Sets a Campaign Template's Schedule + + + +Sets the schedule for a campaign template. If a schedule already exists, it will be overwritten with the new one. + +
    Path Parameters
    Request Body
      months object
      + +Specifies which months of a schedule are active. Only valid for ANNUALLY schedule types. Examples: + +On February and March: +* type LIST +* values "2", "3" + +Every 3 months, starting in January (quarterly): +* type LIST +* values "1" +* interval 3 + +Every two months between July and December: +* type RANGE +* values "7", "12" +* interval 2 + + +
      days object
      + +Specifies which day(s) a schedule is active for. This is required for all schedule types except DAILY. +The "values" field holds different data depending on the type of schedule: +* WEEKLY: days of the week (1-7) +* MONTHLY: days of the month (1-31, L, L-1...) +* ANNUALLY: if the "months" field is also set: days of the month (1-31, L, L-1...); otherwise: ISO-8601 dates without year ("--12-31") +* CALENDAR: ISO-8601 dates ("2020-12-31") + +Note that CALENDAR only supports the LIST type, and ANNUALLY does not support the RANGE type when provided +with ISO-8601 dates without year. + +Examples: + +On Sundays: +* type LIST +* values "1" + +The second to last day of the month: +* type LIST +* values "L-1" + +From the 20th to the last day of the month: +* type RANGE +* values "20", "L" + +Every March 2nd: +* type LIST +* values "--03-02" + +On March 2nd, 2021: +* type: LIST +* values "2021-03-02" + + +
      hours object
      + +Specifies which hour(s) a schedule is active for. Examples: + +Every three hours starting from 8AM, inclusive: +* type LIST +* values "8" +* interval 3 + +During business hours: +* type RANGE +* values "9", "5" + +At 5AM, noon, and 5PM: +* type LIST +* values "5", "12", "17" + + +
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/set-mfa-config.api.mdx b/docs/sailpoint-api-beta/set-mfa-config.api.mdx new file mode 100644 index 000000000..8d99afb43 --- /dev/null +++ b/docs/sailpoint-api-beta/set-mfa-config.api.mdx @@ -0,0 +1,75 @@ +--- +id: set-mfa-config +sidebar_label: Set configuration of a MFA method +hide_title: true +hide_table_of_contents: true +api: {"operationId":"setMFAConfig","tags":["MFA Configuration"],"description":"This API sets the configuration of a given MFA method.
    A token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:mfa-config:write"]}],"parameters":[{"in":"path","name":"method","schema":{"type":"string","example":"okta-verify"},"required":true,"description":"The name of the MFA method.
    The currently supported method name is okta-verify."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean","description":"If MFA method is enabled."},"host":{"type":"string","description":"The server host name or IP address of the MFA provider.","example":"example.com"},"accessKey":{"type":"string","description":"The secret key for authenticating requests to the MFA provider."},"identityAttribute":{"type":"string","description":"Optional. The name of the attribute for mapping IdentityNow identity to the MFA provider.","example":"email"}}},"example":{"enabled":true,"host":"www.example.com","accessKey":"dk778Y3QlA5UqocYpdU3rEkzrK2D497y","identityAttribute":"email"}}}},"responses":{"200":{"description":"MFA configuration of a given method.","content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean","description":"If MFA method is enabled."},"host":{"type":"string","description":"The server host name or IP address of the MFA provider.","example":"example.com"},"accessKey":{"type":"string","description":"The secret key for authenticating requests to the MFA provider."},"identityAttribute":{"type":"string","description":"Optional. The name of the attribute for mapping IdentityNow identity to the MFA provider.","example":"email"}}},"example":{"enabled":true,"host":"www.example.com","accessKey":"dk778Y3QlA5UqocYpdU3rEkzrK2D497y","identityAttribute":"email"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/mfa/{method}/config","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"enabled":true,"host":"example.com","accessKey":"string","identityAttribute":"email"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Set configuration of a MFA method","description":{"content":"This API sets the configuration of a given MFA method.
    A token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["mfa",":method","config"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The name of the MFA method.
    The currently supported method name is okta-verify.","type":"text/plain"},"type":"any","value":"","key":"method"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Set configuration of a MFA method + + + +This API sets the configuration of a given MFA method. </br> A token with ORG_ADMIN authority is required to call this API. + +
    Path Parameters
      The currently supported method name is okta-verify."}}>
    Request Body required
    + +MFA configuration of a given method. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/set-password.api.mdx b/docs/sailpoint-api-beta/set-password.api.mdx new file mode 100644 index 000000000..509c55308 --- /dev/null +++ b/docs/sailpoint-api-beta/set-password.api.mdx @@ -0,0 +1,71 @@ +--- +id: set-password +sidebar_label: Set Identity's Password +hide_title: true +hide_table_of_contents: true +api: {"operationId":"setPassword","tags":["Password Management"],"description":"This API is used to set a password for an identity. The password can only be set by the actual identity owner or by a trusted API client application.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"identityId":{"type":"string","description":"The identity ID that requested the password change","example":"8a807d4c73c545510173c545f0a002ff"},"encryptedPassword":{"type":"string","description":"The RSA encrypted password","example":"XzN+YwKgr2C+InkMYFMBG3UtjMEw5ZIql/XFlXo8cJNeslmkplx6vn4kd4/43IF9STBk5RnzR6XmjpEO+FwHDoiBwYZAkAZK/Iswxk4OdybG6Y4MStJCOCiK8osKr35IMMSV/mbO4wAeltoCk7daTWzTGLiI6UaT5tf+F2EgdjJZ7YqM8W8r7aUWsm3p2Xt01Y46ZRx0QaM91QruiIx2rECFT2pUO0wr+7oQ77jypATyGWRtADsu3YcvCk/6U5MqCnXMzKBcRas7NnZdSL/d5H1GglVGz3VLPMaivG4/oL4chOMmFCRl/zVsGxZ9RhN8rxsRGFFKn+rhExTi+bax3A=="},"publicKeyId":{"type":"string","description":"The encryption key ID","example":"YWQ2NjQ4MTItZjY0NC00MWExLWFjMjktOGNmMzU3Y2VlNjk2"},"accountId":{"type":"string","description":"Account ID of the account This is specified per account schema in the source configuration. It is used to distinguish accounts. More info can be found here https://community.sailpoint.com/t5/IdentityNow-Connectors/How-do-I-designate-an-account-attribute-as-the-Account-ID-for-a/ta-p/80350","example":"CN=Abby Smith,OU=Austin,OU=Americas,OU=Demo,DC=seri,DC=acme,DC=com"},"sourceId":{"type":"string","description":"The ID of the source for which identity is requesting the password change","example":"8a807d4c73c545510173c545d4b60246"}}},"example":{"identityId":"8a807d4c73c545510173c545f0a002ff","encryptedPassword":"GIAP7TaAg7Y2EJtFojokBDvHQ/iXF3qk0z0+eLusqXMSkEhAfr34GydFLy+BM2uZB94cwbTYKi9rRrCRRdh8610VeqpRDjhuc28nOPYqTJOx09IGJdr8dl4mbhC1f21JCqMBBrFSA4VQQvd6OMVsceoXTjDI0aKahRYNjlMlsOuaIUZeNQxWBydLuR6vYG3qAKEPCzYZbvyYuBUylUWArfqwV4dgwKGDgDkTLBkQU9LVu3rssc+BXaex6l6JcBDiPg7wvKD1G3lZ+BaGrMknbx3j0T2Uivg+HxwTf7PmtAua6O9M7F984c79KM+sYFTU37MAdlWZu/cy+w2DdHVdCg==","publicKeyId":"YWQ2NjQ4MTItZjY0NC00MWExLWFjMjktOGNmMzU3Y2VlNjk2","accountId":"CN=Abby Smith,OU=Austin,OU=Americas,OU=Demo,DC=seri,DC=acme,DC=com","sourceId":"8a807d4c73c545510173c545d4b60246"}}}},"responses":{"202":{"description":"Reference to the password change.","content":{"application/json":{"schema":{"type":"object","properties":{"requestId":{"type":"string","nullable":true,"description":"The password change request ID","example":"089899f13a8f4da7824996191587bab9"},"state":{"type":"string","enum":["IN_PROGRESS","FINISHED","FAILED"],"description":"Password change state"}}},"examples":{"Password change is in progress":{"value":{"state":"IN_PROGRESS","requestId":"089899f13a8f4da7824996191587bab9"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/set-password","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"identityId":"8a807d4c73c545510173c545f0a002ff","encryptedPassword":"XzN+YwKgr2C+InkMYFMBG3UtjMEw5ZIql/XFlXo8cJNeslmkplx6vn4kd4/43IF9STBk5RnzR6XmjpEO+FwHDoiBwYZAkAZK/Iswxk4OdybG6Y4MStJCOCiK8osKr35IMMSV/mbO4wAeltoCk7daTWzTGLiI6UaT5tf+F2EgdjJZ7YqM8W8r7aUWsm3p2Xt01Y46ZRx0QaM91QruiIx2rECFT2pUO0wr+7oQ77jypATyGWRtADsu3YcvCk/6U5MqCnXMzKBcRas7NnZdSL/d5H1GglVGz3VLPMaivG4/oL4chOMmFCRl/zVsGxZ9RhN8rxsRGFFKn+rhExTi+bax3A==","publicKeyId":"YWQ2NjQ4MTItZjY0NC00MWExLWFjMjktOGNmMzU3Y2VlNjk2","accountId":"CN=Abby Smith,OU=Austin,OU=Americas,OU=Demo,DC=seri,DC=acme,DC=com","sourceId":"8a807d4c73c545510173c545d4b60246"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Set Identity's Password","description":{"content":"This API is used to set a password for an identity. The password can only be set by the actual identity owner or by a trusted API client application.","type":"text/plain"},"url":{"path":["set-password"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Set Identity's Password + + + +This API is used to set a password for an identity. The password can only be set by the actual identity owner or by a trusted API client application. + +
    Request Body required
    + +Reference to the password change. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/sidebar.js b/docs/sailpoint-api-beta/sidebar.js new file mode 100644 index 000000000..ee9b87f60 --- /dev/null +++ b/docs/sailpoint-api-beta/sidebar.js @@ -0,0 +1 @@ +module.exports = [{"type":"doc","id":"sailpoint-api-beta/sail-point-beta-saa-s-api"},{"type":"category","label":"Access Profiles","link":{"type":"doc","id":"sailpoint-api-beta/access-profiles"},"items":[{"type":"doc","id":"sailpoint-api-beta/list-access-profiles","label":"List Access Profiles","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/create-access-profile","label":"Create an Access Profile","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-access-profile","label":"Get an Access Profile","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/patch-access-profile","label":"Patch a specified Access Profile","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-beta/delete-access-profile","label":"Delete the specified Access Profile","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/bulk-delete-access-profiles","label":"Delete Access Profile(s)","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/list-access-profile-entitlements","label":"List Access Profile's Entitlements","className":"api-method get"}]},{"type":"category","label":"Access Request Approvals","link":{"type":"doc","id":"sailpoint-api-beta/access-request-approvals"},"items":[{"type":"doc","id":"sailpoint-api-beta/list-pending-approvals","label":"Pending Access Request Approvals List","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/list-completed-approvals","label":"Completed Access Request Approvals List","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/approve-request","label":"Approves an access request approval.","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/reject-request","label":"Rejects an access request approval.","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/forward-request","label":"Forwards an access request approval to a new owner.","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/approval-summary","label":"Get the number of pending, approved and rejected access requests approvals","className":"api-method get"}]},{"type":"category","label":"Access Requests","link":{"type":"doc","id":"sailpoint-api-beta/access-requests"},"items":[{"type":"doc","id":"sailpoint-api-beta/create-access-request","label":"Submit an Access Request","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/cancel-access-request","label":"Cancel Access Request","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-access-request-config","label":"Get Access Request Configuration","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/update-access-request-config","label":"Update Access Request Configuration","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/list-access-request-status","label":"Access Request Status","className":"api-method get"}]},{"type":"category","label":"Account Activities","link":{"type":"doc","id":"sailpoint-api-beta/account-activities"},"items":[{"type":"doc","id":"sailpoint-api-beta/list-account-activities","label":"List Account Activities","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-account-activity","label":"Get Account Activity","className":"api-method get"}]},{"type":"category","label":"Account Aggregations","link":{"type":"doc","id":"sailpoint-api-beta/account-aggregations"},"items":[{"type":"doc","id":"sailpoint-api-beta/get-account-aggregation-status","label":"In-progress Account Aggregation status","className":"api-method get"}]},{"type":"category","label":"Accounts","link":{"type":"doc","id":"sailpoint-api-beta/accounts"},"items":[{"type":"doc","id":"sailpoint-api-beta/list-accounts","label":"Accounts List","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/create-account","label":"Create Account","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-account","label":"Account Details","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/update-account","label":"Update Account","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-beta/put-account","label":"Update Account","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/delete-account","label":"Delete Account","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/get-account-entitlements","label":"Account Entitlements","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/reload-account","label":"Reload Account","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/enable-account","label":"Enable Account","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/disable-account","label":"Disable Account","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/unlock-account","label":"Unlock Account","className":"api-method post"}]},{"type":"category","label":"Certification Campaigns","link":{"type":"doc","id":"sailpoint-api-beta/certification-campaigns"},"items":[{"type":"doc","id":"sailpoint-api-beta/get-active-campaigns","label":"List Campaigns","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/create-campaign","label":"Create a campaign","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/delete-campaigns","label":"Deletes Campaigns","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-campaign","label":"Get a campaign","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/update-campaign","label":"Update a Campaign","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-beta/activate-campaign","label":"Activate a Campaign","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/complete-campaign","label":"Complete a Campaign","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/run-campaign-remediation-scan","label":"Run Campaign Remediation Scan","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/admin-reassign","label":"Reassign Certifications","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-campaign-reports","label":"Get Campaign Reports","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/run-campaign-report","label":"Run Campaign Report","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-campaign-reports-config","label":"Get Campaign Reports Configuration","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/set-campaign-reports-config","label":"Set Campaign Reports Configuration","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/list-campaign-templates","label":"List Campaign Templates","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/create-campaign-template","label":"Create a Campaign Template","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-campaign-template","label":"Get a Campaign Template","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/patch-campaign-template","label":"Update a Campaign Template","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-beta/delete-campaign-template","label":"Delete a Campaign Template","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/generate-campaign-template","label":"Generate a Campaign from Template","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-campaign-template-schedule","label":"Gets a Campaign Template's Schedule","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/set-campaign-template-schedule","label":"Sets a Campaign Template's Schedule","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/delete-campaign-template-schedule","label":"Deletes a Campaign Template's Schedule","className":"api-method delete"}]},{"type":"category","label":"Certifications","link":{"type":"doc","id":"sailpoint-api-beta/certifications"},"items":[{"type":"doc","id":"sailpoint-api-beta/reassign-identity-certs-async","label":"Reassign Certifications Asynchronously","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-identity-certification-task-status","label":"Certification Task Status","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-identity-certification-pending-tasks","label":"Pending Certification Tasks","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-identity-certification-item-permissions","label":"Permissions for Entitlement Certification Item","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/list-reviewers","label":"List of Reviewers for the certification","className":"api-method get"}]},{"type":"category","label":"Connector Rule Management","link":{"type":"doc","id":"sailpoint-api-beta/connector-rule-management"},"items":[{"type":"doc","id":"sailpoint-api-beta/get-connector-rule-list","label":"List Connector Rules","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/create-connector-rule","label":"Create Connector Rule","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-connector-rule","label":"Connector-Rule by ID","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/update-connector-rule","label":"Update a Connector Rule","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/delete-connector-rule","label":"Delete a Connector-Rule","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/validate-connector-rule","label":"Validate Connector Rule","className":"api-method post"}]},{"type":"category","label":"Connectors","link":{"type":"doc","id":"sailpoint-api-beta/connectors"},"items":[{"type":"doc","id":"sailpoint-api-beta/get-connector-list","label":"Gets connector list","className":"api-method get"}]},{"type":"category","label":"Custom Password Instructions","link":{"type":"doc","id":"sailpoint-api-beta/custom-password-instructions"},"items":[{"type":"doc","id":"sailpoint-api-beta/create-custom-password-instructions","label":"Create Custom Password Instructions","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-custom-password-instructions","label":"Get Custom Password Instructions by Page ID","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/delete-custom-password-instructions","label":"Delete Custom Password Instructions by page ID","className":"api-method delete"}]},{"type":"category","label":"Entitlements","link":{"type":"doc","id":"sailpoint-api-beta/entitlements"},"items":[{"type":"doc","id":"sailpoint-api-beta/list-entitlements","label":"Gets a list of entitlements.","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/patch-entitlement","label":"Patch a specified Entitlement","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-beta/get-entitlement","label":"Get an Entitlement","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/list-entitlement-parents","label":"List of entitlements parents","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/list-entitlementchildren","label":"List of entitlements children","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/entitlements-bulk-update","label":"Bulk update an entitlement list","className":"api-method post"}]},{"type":"category","label":"IAI Access Request Recommendations","link":{"type":"doc","id":"sailpoint-api-beta/iai-access-request-recommendations"},"items":[{"type":"doc","id":"sailpoint-api-beta/access-request-recommendations","label":"Identity Access Request Recommendations","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/add-access-request-recommendations-ignored-item","label":"Notification of Ignored Access Request Recommendations","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-access-request-recommendations-ignored-items","label":"List of Ignored Access Request Recommendations","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/add-access-request-recommendations-requested-item","label":"Notification of Requested Access Request Recommendations","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-access-request-recommendations-requested-items","label":"List of Requested Access Request Recommendations","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/add-access-request-recommendations-viewed-item","label":"Notification of Viewed Access Request Recommendations","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-access-request-recommendations-viewed-items","label":"List of Viewed Access Request Recommendations","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/add-access-request-recommendations-viewed-items","label":"Notification of Viewed Access Request Recommendations in Bulk","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-message-catalogs","label":"Get Message catalogs","className":"api-method get"}]},{"type":"category","label":"IAI Common Access","link":{"type":"doc","id":"sailpoint-api-beta/iai-common-access"},"items":[{"type":"doc","id":"sailpoint-api-beta/get-common-access","label":"Get a paginated list of common access","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/create-common-access","label":"Create common access items","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/common-access-bulk-update-status","label":"Bulk update common access status","className":"api-method post"}]},{"type":"category","label":"IAI Outliers","link":{"type":"doc","id":"sailpoint-api-beta/iai-outliers"},"items":[{"type":"doc","id":"sailpoint-api-beta/get-outlier-snapshots","label":"IAI Identity Outliers Summary","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-latest-outlier-snapshots","label":"IAI Identity Outliers Latest Summary","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-outliers","label":"IAI Get Identity Outliers","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/ignore-outliers","label":"IAI Identity Outliers Ignore","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/un-ignore-outliers","label":"IAI Identity Outliers Unignore","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/export-outliers-zip","label":"IAI Identity Outliers Export","className":"api-method get"}]},{"type":"category","label":"IAI Peer Group Strategies","link":{"type":"doc","id":"sailpoint-api-beta/iai-peer-group-strategies"},"items":[{"type":"doc","id":"sailpoint-api-beta/get-outliers","label":"Identity Outliers List","className":"api-method get"}]},{"type":"category","label":"IAI Recommendations","link":{"type":"doc","id":"sailpoint-api-beta/iai-recommendations"},"items":[{"type":"doc","id":"sailpoint-api-beta/get-recommendations","label":"Returns a Recommendation Based on Object","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-recommendations-config","label":"Get certification recommendation config values","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/update-recommendations-config","label":"Update certification recommendation config values","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/get-message-catalogs","label":"Get Message catalogs","className":"api-method get"}]},{"type":"category","label":"IAI Role Mining","link":{"type":"doc","id":"sailpoint-api-beta/iai-role-mining"},"items":[{"type":"doc","id":"sailpoint-api-beta/role-mining-sessions","label":"Create a role mining session","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-role-mining-sessions","label":"Retrieves all role mining sessions","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/patch-role-mining-session","label":"Patch a role mining session","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-beta/get-role-mining-session","label":"Get a role mining session","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-role-mining-session-status","label":"Get role mining session status state","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-potential-role-summaries","label":"Retrieves the potential role summaries for a role mining session","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-potential-role-summary","label":"Retrieves a specific potential role for a role mining session","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-potential-role-applications","label":"Retrieves the applications of a potential role for a role mining session","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-entitlements-potential-role","label":"Retrieves entitlements for a potential role in a role mining session","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-entitlement-distribution-potential-role","label":"Retrieves entitlement popularity distribution for a potential role in a role mining session","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/edit-entitlements-potential-role","label":"Edit entitlements for a potential role to exclude some entitlements","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-identities-potential-role","label":"Retrieves identities for a potential role in a role mining session","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/export-role-mining-potential-role","label":"Export (download) details for a potential role in a role mining session","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/export-role-mining-potential-role-async","label":"Asynchronously export details for a potential role in a role mining session and upload to S3","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/export-role-mining-potential-role-status","label":"Retrieve status of a potential role export job","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/download-role-mining-potential-role-zip","label":"Export (download) details for a potential role in a role mining session","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/create-potential-role-provision-request","label":"Create request to provision a potential role into an actual role.","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-excluded-entitlements-potential-role","label":"Retrieves excluded entitlements for a potential role in a role mining session","className":"api-method get"}]},{"type":"category","label":"Identities","link":{"type":"doc","id":"sailpoint-api-beta/identities"},"items":[{"type":"doc","id":"sailpoint-api-beta/synchronize-attributes-for-identity","label":"Attribute synchronization for single identity.","className":"api-method post"}]},{"type":"category","label":"Identity History","link":{"type":"doc","id":"sailpoint-api-beta/identity-history"},"items":[{"type":"doc","id":"sailpoint-api-beta/list-identities","label":"Lists all the identities","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-identity","label":"Gets the most recent snapshot of a specific identity","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/list-identity-access-items","label":"Gets a list of access items for the identity filtered by item type","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/list-identity-snapshots","label":"Lists all the snapshots for the identity","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-identity-snapshot-summary","label":"Gets the summary for the event count for a specific identity","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-identity-snapshot","label":"Gets an identity snapshot at a given date","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/list-identity-snapshot-access-items","label":"Gets the list of identity access items at a given date filterd by item type","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-events","label":"Lists all events for the given identity","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-start-date","label":"Gets the start date of the identity","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/compare-identity-snapshots","label":"Gets a difference of count for each access item types for the given identity between 2 snapshots","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/compare-identity-snapshots-access-type","label":"Gets a list of differences of specific accessType for the given identity between 2 snapshots","className":"api-method get"}]},{"type":"category","label":"Identity Profiles","link":{"type":"doc","id":"sailpoint-api-beta/identity-profiles"},"items":[{"type":"doc","id":"sailpoint-api-beta/list-identity-profiles","label":"Identity Profiles list","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/create-identity-profile","label":"Create an Identity Profile","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/delete-identity-profiles","label":"Delete Identity Profiles","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/export-identity-profiles","label":"Export Identity Profiles","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/import-identity-profiles","label":"Import Identity Profiles","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/generate-identity-preview","label":"Generate Identity Profile Preview","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-identity-profile","label":"Gets a single Identity Profile","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/delete-identity-profile","label":"Delete an Identity Profile","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/update-identity-profile","label":"Update the Identity Profile","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-beta/get-default-identity-attribute-config","label":"Gets the default identity attribute config","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/refresh-identity-profile","label":"Refreshes all the identities under this profile","className":"api-method post"}]},{"type":"category","label":"Lifecycle States","link":{"type":"doc","id":"sailpoint-api-beta/lifecycle-states"},"items":[{"type":"doc","id":"sailpoint-api-beta/list-lifecycle-states","label":"Lifecycle State","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/update-lifecycle-states","label":"Update Lifecycle State","className":"api-method patch"}]},{"type":"category","label":"Managed Clients","link":{"type":"doc","id":"sailpoint-api-beta/managed-clients"},"items":[{"type":"doc","id":"sailpoint-api-beta/get-client-status","label":"Get a specified Managed Client Status.","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/update-status","label":"Handle a status request from a client","className":"api-method post"}]},{"type":"category","label":"Managed Clusters","link":{"type":"doc","id":"sailpoint-api-beta/managed-clusters"},"items":[{"type":"doc","id":"sailpoint-api-beta/get-managed-cluster","label":"Get a specified ManagedCluster.","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-client-log-configuration","label":"get ManagedCluster Log Configuration for a specified cluster","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/update-client-log-configuration","label":"Update log configuration for a specified cluster.","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/get-managed-clusters","label":"Retrieve all Managed Clusters.","className":"api-method get"}]},{"type":"category","label":"MFA Configuration","link":{"type":"doc","id":"sailpoint-api-beta/mfa-configuration"},"items":[{"type":"doc","id":"sailpoint-api-beta/get-mfa-config","label":"Get configuration of a MFA method","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/set-mfa-config","label":"Set configuration of a MFA method","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/test-mfa-config","label":"Test configuration of a MFA method","className":"api-method get"}]},{"type":"category","label":"Non-Employee Lifecycle Management","link":{"type":"doc","id":"sailpoint-api-beta/non-employee-lifecycle-management"},"items":[{"type":"doc","id":"sailpoint-api-beta/non-employee-record-creation","label":"Create Non-Employee Record","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/non-employee-record-list","label":"List Non-Employee Records","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/non-employee-record-get","label":"Get a Non-Employee Record","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/non-employee-record-update","label":"Update Non-Employee Record","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/non-employee-record-patch","label":"Patch Non-Employee Record","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-beta/non-employee-record-delete","label":"Delete Non-Employee Record","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/non-employee-record-bulk-delete","label":"Delete Multiple Non-Employee Records","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/non-employee-request-creation","label":"Create Non-Employee Request","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/non-employee-request-list","label":"List Non-Employee Requests","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/non-employee-request-get","label":"Get a Non-Employee Request","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/non-employee-request-deletion","label":"Delete Non-Employee Request","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/non-employee-request-summary-get","label":"Get Summary of Non-Employee Requests","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/non-employee-sources-creation","label":"Create Non-Employee Source","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/non-employee-sources-list","label":"List Non-Employee Sources","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/non-employee-source-get","label":"Get a Non-Employee Source","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/non-employee-source-patch","label":"Patch a Non-Employee Source","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-beta/non-employee-source-delete","label":"Delete Non-Employee Source","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/non-employee-records-export","label":"Exports Non-Employee Records to CSV","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/non-employee-records-bulk-upload","label":"Imports, or Updates, Non-Employee Records","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/non-employee-bulk-upload-status","label":"Obtain the status of bulk upload on the source","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/non-employee-export-source-schema-template","label":"Exports Source Schema Template","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/non-employee-approval-list","label":"Get List of Non-Employee Approval Requests","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/non-employee-approval-get","label":"Get a non-employee approval item detail","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/non-employee-approve-request","label":"Approve a Non-Employee Request","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/non-employee-reject-request","label":"Reject a Non-Employee Request","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/non-employee-approval-summary","label":"Get Summary of Non-Employee Approval Requests","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-schema-attributes","label":"List Schema Attributes Non-Employee Source","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/create-schema-attribute","label":"Create a new Schema Attribute for Non-Employee Source","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/delete-schema-attributes","label":"Delete all custom schema attributes for Non-Employee Source","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/get-schema-attribute","label":"Get Schema Attribute Non-Employee Source","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/patch-schema-attribute","label":"Patch a Schema Attribute for Non-Employee Source","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-beta/delete-schema-attribute","label":"Delete a Schema Attribute for Non-Employee Source","className":"api-method delete"}]},{"type":"category","label":"Notifications","link":{"type":"doc","id":"sailpoint-api-beta/notifications"},"items":[{"type":"doc","id":"sailpoint-api-beta/list-notification-template-defaults","label":"List Notification Template Defaults","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/list-notification-templates","label":"List Notification Templates For Your Site","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/create-notification-template","label":"Create Notification Template","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-notification-template","label":"Get Notification Template By Id","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/bulk-delete-notification-templates","label":"Bulk Delete Notification Templates","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-notifications-template-context","label":"Get Notification Template Context","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-notification-preference","label":"Get Notification Preferences for tenant.","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/put-notification-preference","label":"Overwrite the preferences for the given notification key.","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/send-test-notification","label":"Send Test Notification","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/list-from-addresses","label":"List From Addresses","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/create-verified-from-address","label":"Create Verified From Address","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/delete-verified-from-address","label":"Delete Verified From Address","className":"api-method delete"}]},{"type":"category","label":"OAuth Clients","link":{"type":"doc","id":"sailpoint-api-beta/o-auth-clients"},"items":[{"type":"doc","id":"sailpoint-api-beta/list-oauth-clients","label":"List OAuth Clients","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/create-oauth-client","label":"Create OAuth Client","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-oauth-client","label":"Get OAuth Client","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/delete-oauth-client","label":"Delete OAuth Client","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/patch-oauth-client","label":"Patch OAuth Client","className":"api-method patch"}]},{"type":"category","label":"Org Config","link":{"type":"doc","id":"sailpoint-api-beta/org-config"},"items":[{"type":"doc","id":"sailpoint-api-beta/get-org-config","label":"Get Org configuration settings","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/patch-org-config","label":"Patch an Org configuration property","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-beta/get-valid-time-zones","label":"Get list of time zones","className":"api-method get"}]},{"type":"category","label":"Password Configuration","link":{"type":"doc","id":"sailpoint-api-beta/password-configuration"},"items":[{"type":"doc","id":"sailpoint-api-beta/get-password-org-config","label":"Get Password Org Config","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/update-password-org-config","label":"Update Password Org Config","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/create-password-org-config","label":"Create Password Org Config","className":"api-method post"}]},{"type":"category","label":"Password Dictionary","link":{"type":"doc","id":"sailpoint-api-beta/password-dictionary"},"items":[{"type":"doc","id":"sailpoint-api-beta/get-password-dictionary","label":"Get Password Dictionary","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-password-dictionary-file-status","label":"Get Password Dictionary Status","className":"api-method head"},{"type":"doc","id":"sailpoint-api-beta/update-password-dictionary","label":"Update Password Dictionary","className":"api-method put"}]},{"type":"category","label":"Password Management","link":{"type":"doc","id":"sailpoint-api-beta/password-management"},"items":[{"type":"doc","id":"sailpoint-api-beta/generate-digit-token","label":"Generate a digit token","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/query-password-info","label":"Query Password Info","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/set-password","label":"Set Identity's Password","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-password-change-status","label":"Get Password Change Request Status","className":"api-method get"}]},{"type":"category","label":"Password Sync Groups","link":{"type":"doc","id":"sailpoint-api-beta/password-sync-groups"},"items":[{"type":"doc","id":"sailpoint-api-beta/get-password-sync-groups","label":"Get Password Sync Group List","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/create-password-sync-group","label":"Create Password Sync Group","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-password-sync-group","label":"Get Password Sync Group by ID","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/update-password-sync-group","label":"Update Password Sync Group by ID","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/delete-password-sync-group","label":"Delete Password Sync Group by ID","className":"api-method delete"}]},{"type":"category","label":"Personal Access Tokens","link":{"type":"doc","id":"sailpoint-api-beta/personal-access-tokens"},"items":[{"type":"doc","id":"sailpoint-api-beta/list-personal-access-tokens","label":"List Personal Access Tokens","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/create-personal-access-token","label":"Create Personal Access Token","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/delete-personal-access-token","label":"Delete Personal Access Token","className":"api-method delete"}]},{"type":"category","label":"Public Identity Config","link":{"type":"doc","id":"sailpoint-api-beta/public-identity-config"},"items":[{"type":"doc","id":"sailpoint-api-beta/get-public-identity-config","label":"Get Public Identity Config","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/update-public-identity-config","label":"Update Public Identity Config","className":"api-method put"}]},{"type":"category","label":"Requestable Objects","link":{"type":"doc","id":"sailpoint-api-beta/requestable-objects"},"items":[{"type":"doc","id":"sailpoint-api-beta/list-requestable-objects","label":"Requestable Objects List","className":"api-method get"}]},{"type":"category","label":"Role Insights","link":{"type":"doc","id":"sailpoint-api-beta/role-insights"},"items":[{"type":"doc","id":"sailpoint-api-beta/role-insights-requests","label":"A request to generate insights for roles","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-role-insights-requests","label":"Returns the metadata for a request in order to generate insights for roles.","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-role-insights-summary","label":"Get role insights summary information","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-role-insights","label":"Get role insights","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-role-insight","label":"Get a single role insight","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-role-insights-entitlements-changes","label":"Get entitlement insights for a role","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/download-role-insights-entitlements-changes","label":"Download entitlement insights for a role","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-role-insights-current-entitlements","label":"Get current entitlement for a role","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-entitlement-changes-identities","label":"Get identities for a suggested entitlement (for a role)","className":"api-method get"}]},{"type":"category","label":"Roles","link":{"type":"doc","id":"sailpoint-api-beta/roles"},"items":[{"type":"doc","id":"sailpoint-api-beta/list-roles","label":"List Roles","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/create-role","label":"Create a Role","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-role","label":"Get a Role","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/patch-role","label":"Patch a specified Role","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-beta/delete-role","label":"Delete a Role","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/get-role-assigned-identities","label":"Get a list of Identities assigned a Role","className":"api-method get"}]},{"type":"category","label":"Search Attribute Configuration","link":{"type":"doc","id":"sailpoint-api-beta/search-attribute-configuration"},"items":[{"type":"doc","id":"sailpoint-api-beta/create-search-attribute-config","label":"Configure/create extended search attributes in IdentityNow.","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-search-attribute-config","label":"Retrieve a list of extended search attributes in IdentityNow.","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-single-search-attribute-config","label":"Get the details of a specific extended search attribute in IdentityNow.","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/delete-search-attribute-config","label":"Delete an extended search attribute in IdentityNow.","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/patch-search-attribute-config","label":"Update the details of a specific extended search attribute in IdentityNow.","className":"api-method patch"}]},{"type":"category","label":"Segments","link":{"type":"doc","id":"sailpoint-api-beta/segments"},"items":[{"type":"doc","id":"sailpoint-api-beta/create-segment","label":"Create Segment","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/list-segments","label":"List Segments","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-segment-by-id","label":"Get a Segment by its ID","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/delete-segment-by-id","label":"Delete Segment by ID","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/patch-segment","label":"Update a Segment","className":"api-method patch"}]},{"type":"category","label":"Service Desk Integration","link":{"type":"doc","id":"sailpoint-api-beta/service-desk-integration"},"items":[{"type":"doc","id":"sailpoint-api-beta/get-service-desk-integration-list","label":"List existing Service Desk Integrations","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/create-service-desk-integration","label":"Create a new Service Desk integration","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-service-desk-integration","label":"Get a Service Desk integration by ID","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/update-service-desk-integration","label":"Update a Service Desk integration by ID","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/delete-service-desk-integration","label":"Delete a Service Desk integration by ID","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/patch-service-desk-integration","label":"Service Desk Integration Update - PATCH","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-beta/get-service-desk-integration-types","label":"Service Desk Integration Types List.","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-service-desk-integration-template","label":"Service Desk integration template by scriptName.","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-status-check-details","label":"Get the time check configuration of queued SDIM tickets","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/update-status-check-details","label":"Update the time check configuration of queued SDIM tickets","className":"api-method put"}]},{"type":"category","label":"SOD Policy","link":{"type":"doc","id":"sailpoint-api-beta/sod-policy"},"items":[{"type":"doc","id":"sailpoint-api-beta/create-sod-policy","label":"Create SOD Policy","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/list-sod-policies","label":"List SOD Policies","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-sod-policy-by-id","label":"Get SOD Policy By ID","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/update-policy-by-id","label":"Update SOD Policy By ID","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/delete-sod-policy-by-id","label":"Delete SOD Policy by ID","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/patch-sod-policy","label":"Update a SOD Policy","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-beta/get-sod-policy-schedule-by-id","label":"Get SOD Policy Schedule","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/update-policy-schedule-by-id","label":"Update SOD Policy schedule","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/delete-sod-policy-schedule-by-id","label":"Delete SOD Policy Schedule","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/run-sod-policy","label":"Runs SOD Policy Violation Report","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-sod-violation-report-status","label":"Get SOD violation report status","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-sod-violation-report-run-status","label":"Get violation report run status","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/run-all-policies-for-org","label":"Runs all policies for Org.","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-sod-all-report-run-status","label":"Get multi-report run task status","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/download-default-violation-report","label":"Download violation report","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/download-custom-violation-report","label":"Download custom violation report","className":"api-method get"}]},{"type":"category","label":"SOD Violations","link":{"type":"doc","id":"sailpoint-api-beta/sod-violations"},"items":[{"type":"doc","id":"sailpoint-api-beta/predict-violations","label":"Predict SOD violations for the given identity if they were granted the given access.","className":"api-method post"}]},{"type":"category","label":"Sources","link":{"type":"doc","id":"sailpoint-api-beta/sources"},"items":[{"type":"doc","id":"sailpoint-api-beta/list-sources","label":"Lists all sources in IdentityNow.","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/create-source","label":"Creates a source in IdentityNow.","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-source","label":"Get Source by ID","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/replace-source","label":"Update Source (Full)","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/update-source","label":"Update Source (Partial)","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-beta/delete-source","label":"Delete Source by ID","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/get-source-attr-sync-config","label":"Attribute Sync Config","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/put-source-attr-sync-config","label":"Update Attribute Sync Config","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/check-connection","label":"Check connection for the source connector.","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/peek-resource-objects","label":"Peek resource objects from the source connector","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/ping-cluster","label":"Ping cluster for the source connector","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/test-configuration","label":"Test configuration for the source connector","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-source-config","label":"Gets source config with language translations","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/list-provisioning-policies","label":"Lists ProvisioningPolicies","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/create-provisioning-policy","label":"Create Provisioning Policy","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-provisioning-policy","label":"Get Provisioning Policy by UsageType","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/replace-provisioning-policy","label":"Update Provisioning Policy by UsageType","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/update-provisioning-policy","label":"Partial update of Provisioning Policy","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-beta/delete-provisioning-policy","label":"Delete Provisioning Policy by UsageType","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/bulk-update-provisioning-policies","label":"Bulk Update Provisioning Policies","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/list-schemas","label":"Lists the Schemas that exist on the specified Source in IdentityNow.","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/create-schema","label":"Creates a new Schema on the specified Source in IdentityNow.","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-schema","label":"Get Source Schema by ID","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/replace-schema","label":"Update Source Schema (Full)","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/update-schema","label":"Update Source Schema (Partial)","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-beta/delete-schema","label":"Delete Source Schema by ID","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/download-source-accounts-schema","label":"Downloads source accounts schema template","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/upload-source-accounts-schema","label":"Uploads source accounts schema template","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/download-source-entitlements-schema","label":"Downloads source entitlements schema template","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/upload-source-entitlements-schema","label":"Uploads source entitlements schema template","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/upload-connector-file","label":"Upload connector file to source","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/synchronize-attributes-for-source","label":"Synchronize single source attributes.","className":"api-method post"}]},{"type":"category","label":"SP-Config","link":{"type":"doc","id":"sailpoint-api-beta/sp-config"},"items":[{"type":"doc","id":"sailpoint-api-beta/sp-config-export","label":"Initiates Configuration Objects Export Job.","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/sp-config-export-job-status","label":"Get Status of Export Job","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/sp-config-export-download","label":"Download Result of Export Job","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/sp-config-import","label":"Initiates Configuration Objects Import Job.","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/sp-config-import-job-status","label":"Get Status of Import Job","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/sp-config-import-download","label":"Download Result of Import Job","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/sp-config-objects","label":"Get Config Object details","className":"api-method get"}]},{"type":"category","label":"Tagged Objects","link":{"type":"doc","id":"sailpoint-api-beta/tagged-objects"},"items":[{"type":"doc","id":"sailpoint-api-beta/list-tagged-objects","label":"List Tagged Objects","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/add-tag-to-object","label":"Add Tag to Object","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/list-tagged-objects-by-type","label":"List Tagged Objects","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-tagged-object-by-type-and-id","label":"Get Tagged Object","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/update-tagged-object-by-type-and-id","label":"Update Tagged Object","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/delete-tagged-object-by-type-and-id","label":"Delete Tagged Object","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/add-tags-to-many-objects","label":"Tag Multiple Objects","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/remove-tags-to-many-object","label":"Remove Tags from Multiple Objects","className":"api-method post"}]},{"type":"category","label":"Transforms","link":{"type":"doc","id":"sailpoint-api-beta/transforms"},"items":[{"type":"doc","id":"sailpoint-api-beta/get-transforms-list","label":"List transforms","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/create-transform","label":"Create transform","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/get-transform","label":"Transform by ID","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/update-transform","label":"Update a transform","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/delete-transform","label":"Delete a transform","className":"api-method delete"}]},{"type":"category","label":"Triggers","link":{"type":"doc","id":"sailpoint-api-beta/triggers"},"items":[{"type":"doc","id":"sailpoint-api-beta/list-triggers","label":"List Triggers","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/create-subscription","label":"Create a Subscription","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/list-subscriptions","label":"List Subscriptions","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/update-subscription","label":"Update a Subscription","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/patch-subscription","label":"Patch a Subscription","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-beta/delete-subscription","label":"Delete a Subscription","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/validate-filter","label":"Validate a Subscription Filter","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/list-invocation-status","label":"List Latest Invocation Statuses","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/complete-invocation","label":"Complete Trigger Invocation","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/start-test-invocation","label":"Start a Test Invocation","className":"api-method post"}]},{"type":"category","label":"Work Items","link":{"type":"doc","id":"sailpoint-api-beta/work-items"},"items":[{"type":"doc","id":"sailpoint-api-beta/list-work-items","label":"List Work Items","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/completed-work-items","label":"Completed Work Items","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/count-work-items","label":"Count Work Items","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/count-completed-work-items","label":"Count Completed Work Items","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/summary-work-items","label":"Work Items Summary","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-work-items","label":"Get a Work Item","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/complete-work-item","label":"Complete a Work Item","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/approve-approval-item","label":"Approve an Approval Item","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/reject-approval-item","label":"Reject an Approval Item","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/bulk-approve-approval-item","label":"Bulk approve Approval Items","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/bulk-reject-approval-item","label":"Bulk reject Approval Items","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/submit-account-selection","label":"Submit Account Selections","className":"api-method post"}]},{"type":"category","label":"Workflows","link":{"type":"doc","id":"sailpoint-api-beta/workflows"},"items":[{"type":"doc","id":"sailpoint-api-beta/create-workflow","label":"Create Workflow","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/list-workflows","label":"List Workflows","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-workflow","label":"Get Workflow By Id","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/update-workflow","label":"Update Workflow","className":"api-method put"},{"type":"doc","id":"sailpoint-api-beta/patch-workflow","label":"Patch Workflow","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-beta/delete-workflow","label":"Delete Workflow By Id","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-beta/test-workflow","label":"Test Workflow By Id","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/list-workflow-executions","label":"List Workflow Executions","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-workflow-execution","label":"Get a Workflow Execution","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/get-workflow-execution-history","label":"Get Workflow Execution History","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/cancel-workflow-execution","label":"Cancel Workflow Execution by ID","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/list-complete-workflow-library","label":"List Complete Workflow Library","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/list-workflow-library-actions","label":"List Workflow Library Actions","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/list-workflow-library-triggers","label":"List Workflow Library Triggers","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/list-workflow-library-operators","label":"List Workflow Library Operators","className":"api-method get"},{"type":"doc","id":"sailpoint-api-beta/post-workflow-external-trigger","label":"Generate External Trigger OAuth Client","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/post-external-execute-workflow","label":"Execute Workflow via External Trigger","className":"api-method post"},{"type":"doc","id":"sailpoint-api-beta/test-external-execute-workflow","label":"Test Workflow via External Trigger","className":"api-method post"}]}]; \ No newline at end of file diff --git a/docs/sailpoint-api-beta/sod-policy.tag.mdx b/docs/sailpoint-api-beta/sod-policy.tag.mdx new file mode 100644 index 000000000..01709f851 --- /dev/null +++ b/docs/sailpoint-api-beta/sod-policy.tag.mdx @@ -0,0 +1,19 @@ +--- +id: sod-policy +title: SOD Policy +description: SOD Policy +--- + + + +Operations for Creating & Executing SOD (Seperation of Duties) policies + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/sod-violations.tag.mdx b/docs/sailpoint-api-beta/sod-violations.tag.mdx new file mode 100644 index 000000000..f542ace1b --- /dev/null +++ b/docs/sailpoint-api-beta/sod-violations.tag.mdx @@ -0,0 +1,19 @@ +--- +id: sod-violations +title: SOD Violations +description: SOD Violations +--- + + + +Operations for Predicting SOD (Seperation of Duties) violations + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/sources.tag.mdx b/docs/sailpoint-api-beta/sources.tag.mdx new file mode 100644 index 000000000..488781026 --- /dev/null +++ b/docs/sailpoint-api-beta/sources.tag.mdx @@ -0,0 +1,15 @@ +--- +id: sources +title: Sources +description: Sources +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/sp-config-export-download.api.mdx b/docs/sailpoint-api-beta/sp-config-export-download.api.mdx new file mode 100644 index 000000000..9a8d6e795 --- /dev/null +++ b/docs/sailpoint-api-beta/sp-config-export-download.api.mdx @@ -0,0 +1,101 @@ +--- +id: sp-config-export-download +sidebar_label: Download Result of Export Job +hide_title: true +hide_table_of_contents: true +api: {"operationId":"spConfigExportDownload","tags":["SP-Config"],"description":"This gets export file resulting from the export job with the requested id and downloads it to a file.\nRequest will need the following security scope:\n'sp:config:export'","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the export job for which the results will be downloaded.","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"Exported JSON objects.","content":{"application/json":{"schema":{"type":"object","title":"Config Export Response Body","description":"Response model for config export download response.","properties":{"version":{"type":"integer","description":"Current version of the export results object.","example":1},"timestamp":{"type":"string","format":"date-time","description":"Time the export was completed.","example":"2021-05-11T22:23:16Z"},"tenant":{"type":"string","description":"Name of the tenant where this export originated.","example":"sample-tenant"},"description":{"type":"string","description":"Optional user defined description/name for export job.","example":"Export Job 1 Test"},"options":{"type":"object","properties":{"excludeTypes":{"description":"Object type names to be excluded from an sp-config export command.","type":"array","items":{"type":"string","example":"SOURCE"}},"includeTypes":{"description":"Object type names to be included in an sp-config export command. IncludeTypes takes precedence over excludeTypes.","type":"array","items":{"type":"string","example":"TRIGGER_SUBSCRIPTION"}},"objectOptions":{"description":"Additional options targeting specific objects related to each item in the includeTypes field","type":"object","additionalProperties":{"type":"object","properties":{"includedIds":{"description":"Object ids to be included in an import or export.","type":"array","items":{"type":"string","example":"be9e116d-08e1-49fc-ab7f-fa585e96c9e4"}},"includedNames":{"description":"Object names to be included in an import or export.","type":"array","items":{"type":"string","example":"Test Object"}}}},"example":{"TRIGGER_SUBSCRIPTION":{"includedIds":["be9e116d-08e1-49fc-ab7f-fa585e96c9e4"],"includedNames":["Test 2"]}}}},"description":"Options used to create this export."},"objects":{"type":"array","items":{"type":"object","title":"Config Object for Export and Import","description":"Config export and import format for individual object configurations.","properties":{"version":{"type":"integer","description":"Current version of configuration object.","example":1},"self":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"object":{"description":"Object details. Format dependant on the object type.","additionalProperties":true}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sp-config/export/{id}/download","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Download Result of Export Job","description":{"content":"This gets export file resulting from the export job with the requested id and downloads it to a file.\nRequest will need the following security scope:\n'sp:config:export'","type":"text/plain"},"url":{"path":["sp-config","export",":id","download"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the export job for which the results will be downloaded.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Download Result of Export Job + + + +This gets export file resulting from the export job with the requested id and downloads it to a file. +Request will need the following security scope: +'sp:config:export' + +
    Path Parameters
    + +Exported JSON objects. + +
    Schema
      options object
      + +Options used to create this export. + +
      objectOptions object
      + +Additional options targeting specific objects related to each item in the includeTypes field + +
    • property name* object
    • objects object[]
      self object
      object
      + +Object details. Format dependant on the object type. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/sp-config-export-job-status.api.mdx b/docs/sailpoint-api-beta/sp-config-export-job-status.api.mdx new file mode 100644 index 000000000..96cf18aa8 --- /dev/null +++ b/docs/sailpoint-api-beta/sp-config-export-job-status.api.mdx @@ -0,0 +1,89 @@ +--- +id: sp-config-export-job-status +sidebar_label: Get Status of Export Job +hide_title: true +hide_table_of_contents: true +api: {"operationId":"spConfigExportJobStatus","tags":["SP-Config"],"description":"This gets the status of the export job identified by the id parameter.\nRequest will need the following security scope:\n'sp:config:export'","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the export job for which status will be returned.","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"Export job status successfully returned.","content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string","description":"Unique id assigned to this job.","example":"3469b87d-48ca-439a-868f-2160001da8c1"},"status":{"type":"string","description":"Status of the job.","enum":["NOT_STARTED","IN_PROGRESS","COMPLETE","CANCELLED","FAILED"],"example":"COMPLETE"},"type":{"type":"string","description":"Type of the job, either export or import.","enum":["EXPORT","IMPORT"],"example":"IMPORT"},"message":{"type":"string","description":"This message contains additional information about the overall status of the job.","example":"Download import results for details."},"description":{"type":"string","description":"Optional user defined description/name for export job.","example":"ETS configuration objects from Acme-Solar sandbox"},"expiration":{"type":"string","format":"date-time","description":"The time until which the artifacts will be available for download.","example":"2021-05-11T22:23:16Z"},"created":{"type":"string","format":"date-time","description":"The time the job was started.","example":"2021-05-11T22:23:16Z"},"modified":{"type":"string","format":"date-time","description":"The time of the last update to the job.","example":"2021-05-11T22:23:16Z"},"completed":{"type":"string","format":"date-time","description":"The time the job was completed.","example":"2021-05-11T22:23:16Z"}},"required":["jobId","status","type","message","description","expiration","created","modified","completed"]},"example":{"jobId":"1e824aa0-4c6e-4f14-95e9-e7dc5234aa51","status":"COMPLETE","type":"EXPORT","message":null,"description":"Export Job 1 Test","expiration":"2021-05-20T15:04:24Z","created":"2021-05-13T15:04:24.112Z","modified":"2021-05-13T15:04:27.363Z","completed":"2021-05-13T15:04:27.358Z"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sp-config/export/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Status of Export Job","description":{"content":"This gets the status of the export job identified by the id parameter.\nRequest will need the following security scope:\n'sp:config:export'","type":"text/plain"},"url":{"path":["sp-config","export",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the export job for which status will be returned.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Status of Export Job + + + +This gets the status of the export job identified by the id parameter. +Request will need the following security scope: +'sp:config:export' + +
    Path Parameters
    + +Export job status successfully returned. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/sp-config-export.api.mdx b/docs/sailpoint-api-beta/sp-config-export.api.mdx new file mode 100644 index 000000000..0650ea509 --- /dev/null +++ b/docs/sailpoint-api-beta/sp-config-export.api.mdx @@ -0,0 +1,98 @@ +--- +id: sp-config-export +sidebar_label: Initiates Configuration Objects Export Job. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"spConfigExport","tags":["SP-Config"],"description":"This post will export objects from the tenant to a JSON configuration file.\nRequest will need the following security scope:\n'sp:config:export'","requestBody":{"description":"Export options control what will be included in the export.","required":true,"content":{"application/json":{"schema":{"type":"object","allOf":[{"type":"object","properties":{"excludeTypes":{"description":"Object type names to be excluded from an sp-config export command.","type":"array","items":{"type":"string","example":"SOURCE"}},"includeTypes":{"description":"Object type names to be included in an sp-config export command. IncludeTypes takes precedence over excludeTypes.","type":"array","items":{"type":"string","example":"TRIGGER_SUBSCRIPTION"}},"objectOptions":{"description":"Additional options targeting specific objects related to each item in the includeTypes field","type":"object","additionalProperties":{"type":"object","properties":{"includedIds":{"description":"Object ids to be included in an import or export.","type":"array","items":{"type":"string","example":"be9e116d-08e1-49fc-ab7f-fa585e96c9e4"}},"includedNames":{"description":"Object names to be included in an import or export.","type":"array","items":{"type":"string","example":"Test Object"}}}},"example":{"TRIGGER_SUBSCRIPTION":{"includedIds":["be9e116d-08e1-49fc-ab7f-fa585e96c9e4"],"includedNames":["Test 2"]}}}}}],"properties":{"description":{"type":"string","description":"Optional user defined description/name for export job.","example":"Export Job 1 Test"}}}}}},"responses":{"202":{"description":"Export job accepted and queued for processing.","content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string","description":"Unique id assigned to this job.","example":"3469b87d-48ca-439a-868f-2160001da8c1"},"status":{"type":"string","description":"Status of the job.","enum":["NOT_STARTED","IN_PROGRESS","COMPLETE","CANCELLED","FAILED"],"example":"COMPLETE"},"type":{"type":"string","description":"Type of the job, either export or import.","enum":["EXPORT","IMPORT"],"example":"IMPORT"},"message":{"type":"string","description":"This message contains additional information about the overall status of the job.","example":"Download import results for details."},"description":{"type":"string","description":"Optional user defined description/name for export job.","example":"ETS configuration objects from Acme-Solar sandbox"},"expiration":{"type":"string","format":"date-time","description":"The time until which the artifacts will be available for download.","example":"2021-05-11T22:23:16Z"},"created":{"type":"string","format":"date-time","description":"The time the job was started.","example":"2021-05-11T22:23:16Z"},"modified":{"type":"string","format":"date-time","description":"The time of the last update to the job.","example":"2021-05-11T22:23:16Z"},"completed":{"type":"string","format":"date-time","description":"The time the job was completed.","example":"2021-05-11T22:23:16Z"}},"required":["jobId","status","type","message","description","expiration","created","modified","completed"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.\n","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/sp-config/export","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"excludeTypes":["SOURCE"],"includeTypes":["TRIGGER_SUBSCRIPTION"],"objectOptions":{"TRIGGER_SUBSCRIPTION":{"includedIds":["be9e116d-08e1-49fc-ab7f-fa585e96c9e4"],"includedNames":["Test 2"]}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Initiates Configuration Objects Export Job.","description":{"content":"This post will export objects from the tenant to a JSON configuration file.\nRequest will need the following security scope:\n'sp:config:export'","type":"text/plain"},"url":{"path":["sp-config","export"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Initiates Configuration Objects Export Job. + + + +This post will export objects from the tenant to a JSON configuration file. +Request will need the following security scope: +'sp:config:export' + +
    Request Body required
    + +Export options control what will be included in the export. + +
      objectOptions object
      + +Additional options targeting specific objects related to each item in the includeTypes field + +
    • property name* object
    + +Export job accepted and queued for processing. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/sp-config-import-download.api.mdx b/docs/sailpoint-api-beta/sp-config-import-download.api.mdx new file mode 100644 index 000000000..f2a209a98 --- /dev/null +++ b/docs/sailpoint-api-beta/sp-config-import-download.api.mdx @@ -0,0 +1,93 @@ +--- +id: sp-config-import-download +sidebar_label: Download Result of Import Job +hide_title: true +hide_table_of_contents: true +api: {"operationId":"spConfigImportDownload","tags":["SP-Config"],"description":"This gets import file resulting from the import job with the requested id and downloads it to a file. The downloaded file will contain the results of the import operation, including any error, warning or informational messages associated with the import.\nRequest will need the following security scope:\n'sp:config:import'","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the import job for which the results will be downloaded.","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"Import Results JSON object, containing detailed results of the import operation.","content":{"application/json":{"schema":{"type":"object","title":"Config Import Response Body","description":"Response Body for Config Import command.","properties":{"results":{"type":"object","additionalProperties":{"type":"object","title":"Import Object Response Body","description":"Response model for import of a single object.","properties":{"infos":{"description":"Informational messages returned from the target service on import.","type":"array","items":{"type":"object","title":"Config Import/Export Message","description":"Message model for Config Import/Export.","properties":{"key":{"type":"string","description":"Message key.","example":"UNKNOWN_REFERENCE_RESOLVER"},"text":{"type":"string","description":"Message text.","example":"Unable to resolve reference for object [type: IDENTITY, id: 2c91808c746e9c9601747d6507332ecz, name: random identity]"},"details":{"type":"object","description":"Message details if any, in key:value pairs.","additionalProperties":{"type":"object"},"example":{"details":"message details"}}},"required":["key","text","details"]}},"warnings":{"description":"Warning messages returned from the target service on import.","type":"array","items":{"type":"object","title":"Config Import/Export Message","description":"Message model for Config Import/Export.","properties":{"key":{"type":"string","description":"Message key.","example":"UNKNOWN_REFERENCE_RESOLVER"},"text":{"type":"string","description":"Message text.","example":"Unable to resolve reference for object [type: IDENTITY, id: 2c91808c746e9c9601747d6507332ecz, name: random identity]"},"details":{"type":"object","description":"Message details if any, in key:value pairs.","additionalProperties":{"type":"object"},"example":{"details":"message details"}}},"required":["key","text","details"]}},"errors":{"description":"Error messages returned from the target service on import.","type":"array","items":{"type":"object","title":"Config Import/Export Message","description":"Message model for Config Import/Export.","properties":{"key":{"type":"string","description":"Message key.","example":"UNKNOWN_REFERENCE_RESOLVER"},"text":{"type":"string","description":"Message text.","example":"Unable to resolve reference for object [type: IDENTITY, id: 2c91808c746e9c9601747d6507332ecz, name: random identity]"},"details":{"type":"object","description":"Message details if any, in key:value pairs.","additionalProperties":{"type":"object"},"example":{"details":"message details"}}},"required":["key","text","details"]}},"importedObjects":{"description":"References to objects that were created or updated by the import.","type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}}},"required":["infos","warnings","errors","importedObjects"]},"description":"The results of an object configuration import job.","example":{"results":{"TRIGGER_SUBSCRIPTION":{"infos":[{"key":"IMPORT_PREVIEW","text":"Object to be imported: [c953134c-2224-42f2-a84e-fa5cbb395904, Test 2]","detail":null},{"key":"IMPORT_PREVIEW","text":"Object to be imported: [be9e116d-08e1-49fc-ab7f-fa585e96c9e4, Test 1]","detail":null}],"warnings":[],"errors":[],"importedObjects":[]}}}}},"required":["results"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sp-config/import/{id}/download","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Download Result of Import Job","description":{"content":"This gets import file resulting from the import job with the requested id and downloads it to a file. The downloaded file will contain the results of the import operation, including any error, warning or informational messages associated with the import.\nRequest will need the following security scope:\n'sp:config:import'","type":"text/plain"},"url":{"path":["sp-config","import",":id","download"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the import job for which the results will be downloaded.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Download Result of Import Job + + + +This gets import file resulting from the import job with the requested id and downloads it to a file. The downloaded file will contain the results of the import operation, including any error, warning or informational messages associated with the import. +Request will need the following security scope: +'sp:config:import' + +
    Path Parameters
    + +Import Results JSON object, containing detailed results of the import operation. + +
    Schema
      results object
      + +The results of an object configuration import job. + +
    • property name* object
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/sp-config-import-job-status.api.mdx b/docs/sailpoint-api-beta/sp-config-import-job-status.api.mdx new file mode 100644 index 000000000..65352f7df --- /dev/null +++ b/docs/sailpoint-api-beta/sp-config-import-job-status.api.mdx @@ -0,0 +1,89 @@ +--- +id: sp-config-import-job-status +sidebar_label: Get Status of Import Job +hide_title: true +hide_table_of_contents: true +api: {"operationId":"spConfigImportJobStatus","tags":["SP-Config"],"description":"This gets the status of the import job identified by the id parameter.\nRequest will need the following security scope:\n'sp:config:import'","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the import job for which status will be returned.","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"Import job status successfully returned.","content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string","description":"Unique id assigned to this job.","example":"3469b87d-48ca-439a-868f-2160001da8c1"},"status":{"type":"string","description":"Status of the job.","enum":["NOT_STARTED","IN_PROGRESS","COMPLETE","CANCELLED","FAILED"],"example":"COMPLETE"},"type":{"type":"string","description":"Type of the job, either export or import.","enum":["EXPORT","IMPORT"],"example":"IMPORT"},"message":{"type":"string","description":"This message contains additional information about the overall status of the job.","example":"Download import results for details."},"description":{"type":"string","description":"Optional user defined description/name for export job.","example":"ETS configuration objects from Acme-Solar sandbox"},"expiration":{"type":"string","format":"date-time","description":"The time until which the artifacts will be available for download.","example":"2021-05-11T22:23:16Z"},"created":{"type":"string","format":"date-time","description":"The time the job was started.","example":"2021-05-11T22:23:16Z"},"modified":{"type":"string","format":"date-time","description":"The time of the last update to the job.","example":"2021-05-11T22:23:16Z"},"completed":{"type":"string","format":"date-time","description":"The time the job was completed.","example":"2021-05-11T22:23:16Z"}},"required":["jobId","status","type","message","description","expiration","created","modified","completed"]},"example":{"jobId":"4fb10503-1c49-4603-8f8d-886e1f6aa47b","status":"COMPLETE","type":"IMPORT","message":"Download import results for details.","description":null,"expiration":"2021-05-20T16:42:39Z","created":"2021-05-13T16:42:39.333Z","modified":"2021-05-13T16:42:40.71Z","completed":"2021-05-13T16:42:40.705Z"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sp-config/import/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Status of Import Job","description":{"content":"This gets the status of the import job identified by the id parameter.\nRequest will need the following security scope:\n'sp:config:import'","type":"text/plain"},"url":{"path":["sp-config","import",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the import job for which status will be returned.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Status of Import Job + + + +This gets the status of the import job identified by the id parameter. +Request will need the following security scope: +'sp:config:import' + +
    Path Parameters
    + +Import job status successfully returned. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/sp-config-import.api.mdx b/docs/sailpoint-api-beta/sp-config-import.api.mdx new file mode 100644 index 000000000..7a941c6a6 --- /dev/null +++ b/docs/sailpoint-api-beta/sp-config-import.api.mdx @@ -0,0 +1,161 @@ +--- +id: sp-config-import +sidebar_label: Initiates Configuration Objects Import Job. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"spConfigImport","tags":["SP-Config"],"description":"This post will import objects from a JSON configuration file into a tenant.\nRequest will need the following security scope:\n'sp:config:import'","parameters":[{"in":"query","name":"preview","schema":{"type":"boolean","default":false},"required":false,"description":"This option is intended to give the user information about how an import operation would proceed, without having any affect on the target tenant. If true, no objects will be imported. Instead, the import process will pre-process the import file and attempt to resolve references within imported objects. The import result file will contain messages pertaining to how specific references were resolved, any errors associated with the preprocessing, and messages indicating which objects would be imported.","example":"true"}],"requestBody":{"description":"The form-data \"name\" attribute for the file content must be \"data\".\n\n__Example__\n\n data: \"config_export_0340b957-5caa-44f6-ada2-d3c4c5bd0b19.json\",\n options: {\n \"excludeTypes\": [],\n \"includeTypes\": [\"TRIGGER_SUBSCRIPTION\"],\n \"objectOptions\": {\n \"TRIGGER_SUBSCRIPTION\": {\n \"includedIds\": [ \"193446a1-c431-4326-8ba7-d6eebf922948\"],\n \"includedNames\":[]\n }\n },\n \"defaultReferences\": [\n {\n \"type\": \"TRIGGER_SUBSCRIPTION\",\n \"id\": \"be9e116d-08e1-49fc-ab7f-fa585e96c9e4\",\n \"name\": \"Test Trigger\"\n }\n ]\n }\n\n__Sample Import File__\n\n {\n \t\"version\": 1,\n \t\"timestamp\": \"2021-05-10T15:19:23.425041-05:00\",\n \t\"tenant\": \"sampleTenant\",\n \t\"options\": {\n \t\t\"excludeTypes\": [],\n \t\t\"includeTypes\": [\"TRIGGER_SUBSCRIPTION\"],\n \t\t\"objectOptions\": null\n \t},\n \t\"objects\": [{\n \t\t\t\"version\": 1,\n \t\t\t\"self\": {\n \t\t\t\t\"type\": \"TRIGGER_SUBSCRIPTION\",\n \t\t\t\t\"name\": \"test trigger\",\n \t\t\t\t\"id\": \"193446a1-c431-4326-8ba7-d6eebf922948\"\n \t\t\t},\n \t\t\t\"object\": {\n \t\t\t\t\"type\": \"HTTP\",\n \t\t\t\t\"enabled\": true,\n \t\t\t\t\"httpConfig\": {\n \t\t\t\t\t\"url\": \"https://localhost\",\n \t\t\t\t\t\"httpAuthenticationType\": \"NO_AUTH\",\n \t\t\t\t\t\"basicAuthConfig\": null,\n \t\t\t\t\t\"bearerTokenAuthConfig\": null,\n \t\t\t\t\t\"httpDispatchMode\": \"SYNC\"\n \t\t\t\t},\n \t\t\t\t\"triggerName\": \"Access Request Submitted\",\n \t\t\t\t\"responseDeadline\": \"PT1H\",\n \t\t\t\t\"name\": \"test trigger\",\n \t\t\t\t\"triggerId\": \"idn:access-request-pre-approval\"\n \t\t\t}\n \t\t}\n \t]\n }\n","required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"Name of JSON file containing the objects to be imported."},"options":{"type":"object","properties":{"excludeTypes":{"description":"Object type names to be excluded from an sp-config export command.","type":"array","items":{"type":"string","example":"SOURCE"}},"includeTypes":{"description":"Object type names to be included in an sp-config export command. IncludeTypes takes precedence over excludeTypes.","type":"array","items":{"type":"string","example":"TRIGGER_SUBSCRIPTION"}},"objectOptions":{"description":"Additional options targeting specific objects related to each item in the includeTypes field","type":"object","additionalProperties":{"type":"object","properties":{"includedIds":{"description":"Object ids to be included in an import or export.","type":"array","items":{"type":"string","example":"be9e116d-08e1-49fc-ab7f-fa585e96c9e4"}},"includedNames":{"description":"Object names to be included in an import or export.","type":"array","items":{"type":"string","example":"Test Object"}}}},"example":{"TRIGGER_SUBSCRIPTION":{"includedIds":["be9e116d-08e1-49fc-ab7f-fa585e96c9e4"],"includedNames":["Test 2"]}}},"defaultReferences":{"description":"List of BaseRefenceDtos that can be used to resolve references on import.","type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}}}}},"required":["data"]},"example":{"data":"config_export_0340b957-5caa-44f6-ada2-d3c4c5bd0b19.json","options":{"excludeTypes":[],"includeTypes":["TRIGGER_SUBSCRIPTION"],"objectOptions":{"TRIGGER_SUBSCRIPTION":{"includedIds":["be9e116d-08e1-49fc-ab7f-fa585e96c9e4"],"includedNames":["Lori Test 2"]}},"defaultReferences":[{"type":"TRIGGER_SUBSCRIPTION","id":"be9e116d-08e1-49fc-ab7f-fa585e96c9e4","name":"Test Trigger"}]}}}}},"responses":{"202":{"description":"Import job accepted and queued for processing.","content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string","description":"Unique id assigned to this job.","example":"3469b87d-48ca-439a-868f-2160001da8c1"},"status":{"type":"string","description":"Status of the job.","enum":["NOT_STARTED","IN_PROGRESS","COMPLETE","CANCELLED","FAILED"],"example":"COMPLETE"},"type":{"type":"string","description":"Type of the job, either export or import.","enum":["EXPORT","IMPORT"],"example":"IMPORT"},"message":{"type":"string","description":"This message contains additional information about the overall status of the job.","example":"Download import results for details."},"description":{"type":"string","description":"Optional user defined description/name for export job.","example":"ETS configuration objects from Acme-Solar sandbox"},"expiration":{"type":"string","format":"date-time","description":"The time until which the artifacts will be available for download.","example":"2021-05-11T22:23:16Z"},"created":{"type":"string","format":"date-time","description":"The time the job was started.","example":"2021-05-11T22:23:16Z"},"modified":{"type":"string","format":"date-time","description":"The time of the last update to the job.","example":"2021-05-11T22:23:16Z"},"completed":{"type":"string","format":"date-time","description":"The time the job was completed.","example":"2021-05-11T22:23:16Z"}},"required":["jobId","status","type","message","description","expiration","created","modified","completed"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.\n","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/sp-config/import","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Initiates Configuration Objects Import Job.","description":{"content":"This post will import objects from a JSON configuration file into a tenant.\nRequest will need the following security scope:\n'sp:config:import'","type":"text/plain"},"url":{"path":["sp-config","import"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"This option is intended to give the user information about how an import operation would proceed, without having any affect on the target tenant. If true, no objects will be imported. Instead, the import process will pre-process the import file and attempt to resolve references within imported objects. The import result file will contain messages pertaining to how specific references were resolved, any errors associated with the preprocessing, and messages indicating which objects would be imported.","type":"text/plain"},"key":"preview","value":""}],"variable":[]},"header":[{"key":"Content-Type","value":"multipart/form-data"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"formdata","formdata":[]}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Initiates Configuration Objects Import Job. + + + +This post will import objects from a JSON configuration file into a tenant. +Request will need the following security scope: +'sp:config:import' + +
    Query Parameters
    Request Body required
    + +The form-data "name" attribute for the file content must be "data". + +__Example__ + + data: "config_export_0340b957-5caa-44f6-ada2-d3c4c5bd0b19.json", + options: { + "excludeTypes": [], + "includeTypes": ["TRIGGER_SUBSCRIPTION"], + "objectOptions": { + "TRIGGER_SUBSCRIPTION": { + "includedIds": [ "193446a1-c431-4326-8ba7-d6eebf922948"], + "includedNames":[] + } + }, + "defaultReferences": [ + { + "type": "TRIGGER_SUBSCRIPTION", + "id": "be9e116d-08e1-49fc-ab7f-fa585e96c9e4", + "name": "Test Trigger" + } + ] + } + +__Sample Import File__ + + { + "version": 1, + "timestamp": "2021-05-10T15:19:23.425041-05:00", + "tenant": "sampleTenant", + "options": { + "excludeTypes": [], + "includeTypes": ["TRIGGER_SUBSCRIPTION"], + "objectOptions": null + }, + "objects": [{ + "version": 1, + "self": { + "type": "TRIGGER_SUBSCRIPTION", + "name": "test trigger", + "id": "193446a1-c431-4326-8ba7-d6eebf922948" + }, + "object": { + "type": "HTTP", + "enabled": true, + "httpConfig": { + "url": "https://localhost", + "httpAuthenticationType": "NO_AUTH", + "basicAuthConfig": null, + "bearerTokenAuthConfig": null, + "httpDispatchMode": "SYNC" + }, + "triggerName": "Access Request Submitted", + "responseDeadline": "PT1H", + "name": "test trigger", + "triggerId": "idn:access-request-pre-approval" + } + } + ] + } + + +
      options object
      objectOptions object
      + +Additional options targeting specific objects related to each item in the includeTypes field + +
    • property name* object
    • defaultReferences object[]
      + +List of BaseRefenceDtos that can be used to resolve references on import. + +
    + +Import job accepted and queued for processing. + +
    Schema
    + +Client Error - Returned if the request body is invalid. + + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/sp-config-objects.api.mdx b/docs/sailpoint-api-beta/sp-config-objects.api.mdx new file mode 100644 index 000000000..670802a7c --- /dev/null +++ b/docs/sailpoint-api-beta/sp-config-objects.api.mdx @@ -0,0 +1,97 @@ +--- +id: sp-config-objects +sidebar_label: Get Config Object details +hide_title: true +hide_table_of_contents: true +api: {"operationId":"spConfigObjects","tags":["SP-Config"],"description":"This gets the list of object configurations which are known to the tenant export/import service. Object configurations that contain \"importUrl\" and \"exportUrl\" are available for export/import.\nRequest will need the following security scope:\n'sp:config:export'","responses":{"200":{"description":"Object configurations returned successfully.","content":{"application/json":{"schema":{"type":"array","items":{"title":"Object Configuration Model","description":"Response model for get object configuration.","type":"object","properties":{"objectType":{"type":"string","description":"The object type this configuration is for."},"resolveByIdUrl":{"description":"Url and query parameters to be used to resolve this type of object by Id.","type":"object","title":"Resolver URL Format for Object Configuration.","properties":{"url":{"description":"URL for the target object endpoint.","type":"string"},"query":{"description":"Any query parameters that are needed for the URL.","type":"object"}}},"resolveByNameUrl":{"description":"Url and query parameters to be used to resolve this type of object by name.","type":"object","title":"Resolver URL Format for Object Configuration.","properties":{"url":{"description":"URL for the target object endpoint.","type":"string"},"query":{"description":"Any query parameters that are needed for the URL.","type":"object"}}},"exportUrl":{"type":"string","description":"Url to export this type of object."},"exportRight":{"type":"string","description":"Rights needed by the invoker of sp-config/export in order to export this type of object."},"exportLimit":{"type":"integer","description":"Pagination limit imposed by the target service for this object type."},"importUrl":{"type":"string","description":"Url to import this type of object."},"importRight":{"type":"string","description":"Rights needed by the invoker of sp-config/import in order to import this type of object."},"importLimit":{"type":"integer","description":"Pagination limit imposed by the target service for this object type."},"referenceExtractors":{"type":"array","description":"List of json paths within an exported object of this type that represent references that need to be resolved.","items":{"type":"string"}},"signatureRequired":{"type":"boolean","description":"If true, this type of object will be JWS signed and cannot be modified before import."}}}},"example":[{"objectType":"TRIGGER_SUBSCRIPTION","resolveByIdUrl":{"url":"ets://trigger-subscriptions/$id","query":null},"resolveByNameUrl":{"url":"ets://trigger-subscriptions/","query":{"filters":"name eq \"$name\""}},"exportUrl":"ets://trigger-subscriptions/export","exportRight":"idn:trigger-service-subscriptions:read","exportLimit":10,"importUrl":"ets://trigger-subscriptions/import","importRight":"idn:trigger-service-subscriptions:create","importLimit":10,"referenceExtractors":["$.owner"],"signatureRequired":false}]}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sp-config/config-objects","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Get Config Object details","description":{"content":"This gets the list of object configurations which are known to the tenant export/import service. Object configurations that contain \"importUrl\" and \"exportUrl\" are available for export/import.\nRequest will need the following security scope:\n'sp:config:export'","type":"text/plain"},"url":{"path":["sp-config","config-objects"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Config Object details + + + +This gets the list of object configurations which are known to the tenant export/import service. Object configurations that contain "importUrl" and "exportUrl" are available for export/import. +Request will need the following security scope: +'sp:config:export' + +
    + +Object configurations returned successfully. + +
    Schema array
      resolveByIdUrl object
      + +Url and query parameters to be used to resolve this type of object by Id. + +
      resolveByNameUrl object
      + +Url and query parameters to be used to resolve this type of object by name. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/sp-config.tag.mdx b/docs/sailpoint-api-beta/sp-config.tag.mdx new file mode 100644 index 000000000..f907915ca --- /dev/null +++ b/docs/sailpoint-api-beta/sp-config.tag.mdx @@ -0,0 +1,19 @@ +--- +id: sp-config +title: SP-Config +description: SP-Config +--- + + + +Import and export configuration for some objects between tenants. + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/start-test-invocation.api.mdx b/docs/sailpoint-api-beta/start-test-invocation.api.mdx new file mode 100644 index 000000000..4105fab3f --- /dev/null +++ b/docs/sailpoint-api-beta/start-test-invocation.api.mdx @@ -0,0 +1,79 @@ +--- +id: start-test-invocation +sidebar_label: Start a Test Invocation +hide_title: true +hide_table_of_contents: true +api: {"operationId":"startTestInvocation","tags":["Triggers"],"description":"Initiate a test event for all subscribers of the specified event trigger. If there are no subscribers to the specified trigger in the tenant, then no test event will be sent.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"triggerId":{"type":"string","example":"idn:access-request-post-approval","description":"Trigger ID"},"input":{"type":"object","example":{"identityId":"201327fda1c44704ac01181e963d463c"},"description":"Mock input to use for test invocation. This must adhere to the input schema defined in the trigger being invoked. If this property is omitted, then the default trigger sample payload will be sent."},"contentJson":{"type":"object","example":{"workflowId":1234},"description":"JSON map of invocation metadata."},"subscriptionIds":{"type":"array","items":{"type":"string"},"example":["0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"],"description":"Only send the test event to the subscription IDs listed. If omitted, the test event will be sent to all subscribers."}},"required":["triggerId","contentJson"]},"examples":{"Test Trigger with Mock Input":{"value":{"triggerId":"idn:access-requested","input":{"identityId":"201327fda1c44704ac01181e963d463c"},"contentJson":{"workflowId":1234}}},"Send Test to only One Subscriber":{"value":{"triggerId":"idn:access-requested","contentJson":{"workflowId":1234},"subscriptionIds":["0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"]}}}}}},"responses":{"200":{"description":"Test trigger invocations that have been started for specified subscription(s).","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Invocation ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"triggerId":{"type":"string","description":"Trigger ID","example":"idn:access-requested"},"secret":{"type":"string","description":"Unique invocation secret.","example":"0f979022-08be-44f2-b6f9-7393ec73ed9b"},"contentJson":{"type":"object","example":{"workflowId":1234},"description":"JSON map of invocation metadata."}}}}}}},"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"oauth2":["idn:trigger-service-invocation-test:create"]}],"method":"post","path":"/trigger-invocations/test","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"triggerId":"idn:access-request-post-approval","input":{"identityId":"201327fda1c44704ac01181e963d463c"},"contentJson":{"workflowId":1234},"subscriptionIds":["0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Start a Test Invocation","description":{"content":"Initiate a test event for all subscribers of the specified event trigger. If there are no subscribers to the specified trigger in the tenant, then no test event will be sent.","type":"text/plain"},"url":{"path":["trigger-invocations","test"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}},"auth":{"type":"oauth2","oauth2":[]}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Start a Test Invocation + + + +Initiate a test event for all subscribers of the specified event trigger. If there are no subscribers to the specified trigger in the tenant, then no test event will be sent. + +
    Request Body required
    + +Test trigger invocations that have been started for specified subscription(s). + +
    Schema array
    + +No content - indicates the request was successful but there is no content to be returned in the response. + +
    + +Client Error - Returned if the request body is invalid. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
    Schema
    + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
    Schema
    + +Internal Server Error - Returned if there is an unexpected error. + +
    Schema
      messages object[]
      + +Generic localized reason for error + +
      causes object[]
      + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
    + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/submit-account-selection.api.mdx b/docs/sailpoint-api-beta/submit-account-selection.api.mdx new file mode 100644 index 000000000..bb61124c2 --- /dev/null +++ b/docs/sailpoint-api-beta/submit-account-selection.api.mdx @@ -0,0 +1,71 @@ +--- +id: submit-account-selection +sidebar_label: Submit Account Selections +hide_title: true +hide_table_of_contents: true +api: {"operationId":"submitAccountSelection","tags":["Work Items"],"description":"This API submits account selections. Either an admin, or the owning/current user must make this request.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the work item","example":"ef38f94347e94562b5bb8424a56397d8"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"fieldName":"fieldValue"}}},"description":"Account Selection Data map, keyed on fieldName"},"responses":{"200":{"description":"A work items details object.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the work item","example":"2c9180835d2e5168015d32f890ca1581"},"requesterId":{"type":"string","description":"ID of the requester","example":"2c9180835d2e5168015d32f890ca1581"},"requesterDisplayName":{"type":"string","description":"The displayname of the requester","example":"John Smith"},"ownerId":{"type":"string","description":"The ID of the owner","example":"2c9180835d2e5168015d32f890ca1581"},"ownerName":{"type":"string","description":"The name of the owner","example":"Jason Smith"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"description":{"type":"string","description":"The description of the work item","example":"Create account on source 'AD'"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"type":{"type":"string","enum":["UNKNOWN","GENERIC","CERTIFICATION","REMEDIATION","DELEGATION","APPROVAL","VIOLATIONREVIEW","FORM","POLICYVIOLATION","CHALLENGE","IMPACTANALYSIS","SIGNOFF","EVENT","MANUALACTION","TEST"]},"remediationItems":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the certification","example":"2c9180835d2e5168015d32f890ca1581"},"targetId":{"type":"string","description":"The ID of the certification target","example":"2c9180835d2e5168015d32f890ca1581"},"targetName":{"type":"string","description":"The name of the certification target","example":"john.smith"},"targetDisplayName":{"type":"string","description":"The display name of the certification target","example":"emailAddress"},"applicationName":{"type":"string","description":"The name of the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute being certified","example":"phoneNumber"},"attributeOperation":{"type":"string","description":"The operation of the certification on the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute being certified","example":"512-555-1212"},"nativeIdentity":{"type":"string","description":"The native identity of the target","example":"jason.smith2"}}},"approvalItems":{"type":"object","properties":{"id":{"type":"string","description":"ID of the approval item","example":"2c9180835d2e5168015d32f890ca1581"},"account":{"type":"string","description":"The account referenced by the approval item","example":"john.smith"},"application":{"type":"string","description":"The name the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute","example":"emailAddress"},"attributeOperation":{"type":"string","description":"The operation of the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute","example":"a@b.com"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]}}},"name":{"type":"string","description":"The work item name","example":"Account Create"},"completed":{"type":"string","format":"date-time","example":"2018-10-19T13:49:37.385Z"},"numItems":{"type":"integer","description":"The number of items in the work item","example":19},"errors":{"type":"array","items":{"type":"string"},"example":["The work item ID that was specified was not found."]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"method":"post","path":"/work-items/{id}/submit-account-selection","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Submit Account Selections","description":{"content":"This API submits account selections. Either an admin, or the owning/current user must make this request.","type":"text/plain"},"url":{"path":["work-items",":id","submit-account-selection"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the work item","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Submit Account Selections + + + +This API submits account selections. Either an admin, or the owning/current user must make this request. + +
    Path Parameters
    Request Body required
    + +Account Selection Data map, keyed on fieldName + +
      + +A work items details object. + +
      Schema
        remediationItems object
        approvalItems object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/summary-work-items.api.mdx b/docs/sailpoint-api-beta/summary-work-items.api.mdx new file mode 100644 index 000000000..674124f82 --- /dev/null +++ b/docs/sailpoint-api-beta/summary-work-items.api.mdx @@ -0,0 +1,67 @@ +--- +id: summary-work-items +sidebar_label: Work Items Summary +hide_title: true +hide_table_of_contents: true +api: {"operationId":"summaryWorkItems","tags":["Work Items"],"description":"This gets a summary of work items belonging to either the specified user(admin required), or the current user.","parameters":[{"in":"query","name":"ownerId","schema":{"type":"string"},"description":"ID of the work item owner.","required":false}],"responses":{"200":{"description":"List of work items","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"open":{"type":"integer","description":"The count of open work items","example":29},"completed":{"type":"integer","description":"The count of completed work items","example":1},"total":{"type":"integer","description":"The count of total work items","example":30}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"method":"get","path":"/work-items/summary","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Work Items Summary","description":{"content":"This gets a summary of work items belonging to either the specified user(admin required), or the current user.","type":"text/plain"},"url":{"path":["work-items","summary"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"ID of the work item owner.","type":"text/plain"},"key":"ownerId","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Work Items Summary + + + +This gets a summary of work items belonging to either the specified user(admin required), or the current user. + +
      Query Parameters
      + +List of work items + +
      Schema array
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/synchronize-attributes-for-identity.api.mdx b/docs/sailpoint-api-beta/synchronize-attributes-for-identity.api.mdx new file mode 100644 index 000000000..71c132752 --- /dev/null +++ b/docs/sailpoint-api-beta/synchronize-attributes-for-identity.api.mdx @@ -0,0 +1,91 @@ +--- +id: synchronize-attributes-for-identity +sidebar_label: Attribute synchronization for single identity. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"synchronizeAttributesForIdentity","tags":["Identities"],"description":"This end-point performs attribute synchronization for a selected identity. The endpoint can be called once in 10 seconds per identity. A token with ORG_ADMIN or API authority is required to call this API.","parameters":[{"in":"path","name":"identityId","schema":{"type":"string"},"required":true,"description":"The Identity id"}],"responses":{"202":{"description":"An Identity Sync job","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Job ID.","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"status":{"type":"string","description":"The job status.","enum":["QUEUED","IN_PROGRESS","SUCCESS","ERROR"],"example":"IN_PROGRESS"},"payload":{"description":"Job payload.","example":{"type":"SYNCHRONIZE_IDENTITY_ATTRIBUTES","dataJson":"{\"identityId\":\"2c918083746f642c01746f990884012a\"}"},"type":"object","properties":{"type":{"type":"string","description":"Payload type.","example":"SYNCHRONIZE_IDENTITY_ATTRIBUTES"},"dataJson":{"type":"string","description":"Payload type.","example":"{\"identityId\":\"2c918083746f642c01746f990884012a\"}"}},"required":["type","dataJson"]}},"required":["id","status","payload"]},"example":{"id":"0f11f2a4-7c94-4bf3-a2bd-742580fe3dfc","status":"IN_PROGRESS","payload":{"type":"SYNCHRONIZE_IDENTITY_ATTRIBUTES","dataJson":"{\"identityId\":\"2c918083746f642c01746f990884012a\"}"}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/identities/{identityId}/synchronize-attributes","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Attribute synchronization for single identity.","description":{"content":"This end-point performs attribute synchronization for a selected identity. The endpoint can be called once in 10 seconds per identity. A token with ORG_ADMIN or API authority is required to call this API.","type":"text/plain"},"url":{"path":["identities",":identityId","synchronize-attributes"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Identity id","type":"text/plain"},"type":"any","value":"","key":"identityId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Attribute synchronization for single identity. + + + +This end-point performs attribute synchronization for a selected identity. The endpoint can be called once in 10 seconds per identity. A token with ORG_ADMIN or API authority is required to call this API. + +
      Path Parameters
      + +An Identity Sync job + +
      Schema
        payload object
        + +Job payload. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/synchronize-attributes-for-source.api.mdx b/docs/sailpoint-api-beta/synchronize-attributes-for-source.api.mdx new file mode 100644 index 000000000..92411c8dd --- /dev/null +++ b/docs/sailpoint-api-beta/synchronize-attributes-for-source.api.mdx @@ -0,0 +1,92 @@ +--- +id: synchronize-attributes-for-source +sidebar_label: Synchronize single source attributes. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"synchronizeAttributesForSource","tags":["Sources"],"description":"This end-point performs attribute synchronization for a selected source.\nA token with ORG_ADMIN or SOURCE_ADMIN authority is required to call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The Source id"}],"responses":{"202":{"description":"A Source Sync job","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Job ID.","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"status":{"type":"string","description":"The job status.","enum":["QUEUED","IN_PROGRESS","SUCCESS","ERROR"],"example":"IN_PROGRESS"},"payload":{"description":"Job payload.","example":{"type":"SYNCHRONIZE_SOURCE_ATTRIBUTES","dataJson":"{\"sourceId\":\"2c918083746f642c01746f990884012a\"}"},"type":"object","properties":{"type":{"type":"string","description":"Payload type.","example":"SYNCHRONIZE_SOURCE_ATTRIBUTES"},"dataJson":{"type":"string","description":"Payload type.","example":"{\"sourceId\":\"2c918083746f642c01746f990884012a\"}"}},"required":["type","dataJson"]}},"required":["id","status","payload"]},"example":{"id":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","status":"IN_PROGRESS","payload":{"type":"SYNCHRONIZE_SOURCE_ATTRIBUTES","dataJson":"{\"sourceId\":\"2c918083746f642c01746f990884012a\"}"}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/sources/{id}/synchronize-attributes","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Synchronize single source attributes.","description":{"content":"This end-point performs attribute synchronization for a selected source.\nA token with ORG_ADMIN or SOURCE_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":id","synchronize-attributes"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Synchronize single source attributes. + + + +This end-point performs attribute synchronization for a selected source. +A token with ORG_ADMIN or SOURCE_ADMIN authority is required to call this API. + +
      Path Parameters
      + +A Source Sync job + +
      Schema
        payload object
        + +Job payload. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/tagged-objects.tag.mdx b/docs/sailpoint-api-beta/tagged-objects.tag.mdx new file mode 100644 index 000000000..e00bd0649 --- /dev/null +++ b/docs/sailpoint-api-beta/tagged-objects.tag.mdx @@ -0,0 +1,15 @@ +--- +id: tagged-objects +title: Tagged Objects +description: Tagged Objects +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/test-configuration.api.mdx b/docs/sailpoint-api-beta/test-configuration.api.mdx new file mode 100644 index 000000000..bcc5e3817 --- /dev/null +++ b/docs/sailpoint-api-beta/test-configuration.api.mdx @@ -0,0 +1,76 @@ +--- +id: test-configuration +sidebar_label: Test configuration for the source connector +hide_title: true +hide_table_of_contents: true +api: {"operationId":"testConfiguration","tags":["Sources"],"description":"This endpoint performs a more detailed validation of the source's configuration that can take longer than the lighter weight credential validation performed by the checkConnection API.\nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:source-connector:write"]}],"parameters":[{"in":"path","name":"sourceId","schema":{"type":"string"},"required":true,"description":"The ID of the Source","example":"cef3ee201db947c5912551015ba0c679"}],"responses":{"200":{"description":"The result of testing source connector configuration with response from it.","content":{"application/json":{"schema":{"type":"object","title":"Status Response","description":"Response model for connection check, configuration test and ping of source connectors.","properties":{"id":{"type":"string","description":"ID of the source","example":"2c91808568c529c60168cca6f90c1313","readOnly":true},"name":{"type":"string","description":"Name of the source","example":"ODS-AD-Test [source-999999]","readOnly":true},"status":{"type":"string","enum":["SUCCESS","FAILURE"],"description":"The status of the health check.","example":"SUCCESS","readOnly":true},"elapsedMillis":{"type":"integer","description":"The number of milliseconds spent on the entire request.","example":1000,"readOnly":true},"details":{"type":"object","description":"The document contains the results of the health check.\nThe schema of this document depends on the type of source used.\n","readOnly":true,"example":{"useTLSForIQService":false,"IQService":{"TLS Port":0,".NET CLR Version":"4.0.30319.42000","SecondaryServiceStatus":"Running","Port":5050,"Host":"AUTOMATION-AD","Name":"IQService","IQServiceStatus":"Running","SecondaryService":"IQService-Instance1-Secondary","Version":"IQService Sep-2020","secondaryPort":5051,"OS Architecture":"AMD64","Operating System":"Microsoft Windows Server 2012 R2 Standard","highestDotNetVersion":"4.8 or later","Build Time":"09/22/2020 06:34 AM -0500"},"IQServiceClientAuthEnabled":false,"requestProcessedOn":"1/19/2021 1:47:14 PM"}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/sources/{sourceId}/connector/test-configuration","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Test configuration for the source connector","description":{"content":"This endpoint performs a more detailed validation of the source's configuration that can take longer than the lighter weight credential validation performed by the checkConnection API.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":sourceId","connector","test-configuration"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the Source","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Test configuration for the source connector + + + +This endpoint performs a more detailed validation of the source's configuration that can take longer than the lighter weight credential validation performed by the checkConnection API. +A token with ORG_ADMIN authority is required to call this API. + +
      Path Parameters
      + +The result of testing source connector configuration with response from it. + +
      Schema
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/test-external-execute-workflow.api.mdx b/docs/sailpoint-api-beta/test-external-execute-workflow.api.mdx new file mode 100644 index 000000000..61221c02f --- /dev/null +++ b/docs/sailpoint-api-beta/test-external-execute-workflow.api.mdx @@ -0,0 +1,75 @@ +--- +id: test-external-execute-workflow +sidebar_label: Test Workflow via External Trigger +hide_title: true +hide_table_of_contents: true +api: {"operationId":"testExternalExecuteWorkflow","tags":["Workflows"],"description":"Validate a workflow with an \"External Trigger\" can receive input. The response includes the input that the workflow received, which can be used to validate that the input is intact when it reaches the workflow.","security":[{"bearerAuth":["sp:workflow:external-execute"]}],"parameters":[{"name":"id","in":"path","description":"Id of the workflow","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"c17bea3a-574d-453c-9e04-4365fbf5af0b"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"input":{"type":"object","description":"The test input for the workflow","example":{"test":"hello world"}}}}}}},"responses":{"200":{"description":"Responds with the test input","content":{"application/json":{"schema":{"type":"object","properties":{"payload":{"type":"object","description":"The input that was received","example":{"test":"hello world"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/workflows/execute/external/{id}/test","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"input":{"test":"hello world"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Test Workflow via External Trigger","description":{"content":"Validate a workflow with an \"External Trigger\" can receive input. The response includes the input that the workflow received, which can be used to validate that the input is intact when it reaches the workflow.","type":"text/plain"},"url":{"path":["workflows","execute","external",":id","test"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Id of the workflow","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Test Workflow via External Trigger + + + +Validate a workflow with an "External Trigger" can receive input. The response includes the input that the workflow received, which can be used to validate that the input is intact when it reaches the workflow. + +
      Path Parameters
      Request Body
      + +Responds with the test input + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/test-mfa-config.api.mdx b/docs/sailpoint-api-beta/test-mfa-config.api.mdx new file mode 100644 index 000000000..1a532d3cc --- /dev/null +++ b/docs/sailpoint-api-beta/test-mfa-config.api.mdx @@ -0,0 +1,75 @@ +--- +id: test-mfa-config +sidebar_label: Test configuration of a MFA method +hide_title: true +hide_table_of_contents: true +api: {"operationId":"testMFAConfig","tags":["MFA Configuration"],"description":"This API validates that the configuration is valid and will properly authenticate with the MFA provider identified by the method path parameter.
      A token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:mfa-config:read"]}],"parameters":[{"in":"path","name":"method","schema":{"type":"string","example":"okta-verify"},"required":true,"description":"The name of the MFA method.
      The currently supported method name is okta-verify."}],"responses":{"200":{"description":"The result of configuration test for the MFA provider.","content":{"application/json":{"schema":{"description":"Response model for configuration test of a given MFA method","type":"object","properties":{"state":{"type":"string","enum":["SUCCESS","FAILED"],"description":"The configuration test result.","example":"SUCCESS","readOnly":true},"error":{"type":"string","example":"MFA Method is disabled.","description":"The error message to indicate the failure of configuration test.","readOnly":true}}},"example":{"state":"SUCCESS","error":null}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/mfa/{method}/test","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Test configuration of a MFA method","description":{"content":"This API validates that the configuration is valid and will properly authenticate with the MFA provider identified by the method path parameter.
      A token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["mfa",":method","test"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The name of the MFA method.
      The currently supported method name is okta-verify.","type":"text/plain"},"type":"any","value":"","key":"method"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Test configuration of a MFA method + + + +This API validates that the configuration is valid and will properly authenticate with the MFA provider identified by the method path parameter. </br> A token with ORG_ADMIN authority is required to call this API. + +
      Path Parameters
        The currently supported method name is okta-verify."}}>
      + +The result of configuration test for the MFA provider. + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/test-workflow.api.mdx b/docs/sailpoint-api-beta/test-workflow.api.mdx new file mode 100644 index 000000000..81a77e72d --- /dev/null +++ b/docs/sailpoint-api-beta/test-workflow.api.mdx @@ -0,0 +1,77 @@ +--- +id: test-workflow +sidebar_label: Test Workflow By Id +hide_title: true +hide_table_of_contents: true +api: {"operationId":"testWorkflow","tags":["Workflows"],"description":"Test a workflow with the provided input data. The input data should resemble the input that the trigger will send the workflow. See the [event trigger documentation](https://developer.sailpoint.com/triggers/available_event_triggers.html) for an example input for the trigger that initiates this workflow.\nThis endpoint will return an execution ID, which can be used to lookup more information about the execution using the `Get a Workflow Execution` endpoint.\n**This will cause a live run of the workflow, which could result in unintended modifications to your IDN tenant.**","security":[{"bearerAuth":["sp:workflow:execute"]}],"parameters":[{"name":"id","in":"path","description":"Id of the workflow","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"c17bea3a-574d-453c-9e04-4365fbf5af0b"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["input"],"properties":{"input":{"type":"object","description":"The test input for the workflow."}}},"examples":{"Identity Attributes Changed":{"description":"Identity Attributes Changed Trigger Input","value":{"input":{"identity":{"id":"ee769173319b41d19ccec6cea52f237b","name":"john.doe","type":"IDENTITY"},"changes":[{"attribute":"department","oldValue":"sales","newValue":"marketing"},{"attribute":"manager","oldValue":{"id":"ee769173319b41d19ccec6c235423237b","name":"nice.guy","type":"IDENTITY"},"newValue":{"id":"ee769173319b41d19ccec6c235423236c","name":"mean.guy","type":"IDENTITY"}},{"attribute":"email","oldValue":"john.doe@hotmail.com","newValue":"john.doe@gmail.com"}]}}}}}}},"responses":{"200":{"description":"The Workflow object","content":{"application/json":{"schema":{"type":"object","properties":{"workflowExecutionId":{"type":"string","description":"The workflow execution id","example":"0e11cefa-96e7-4b67-90d0-065bc1da5753"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/workflows/{id}/test","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"input":{}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Test Workflow By Id","description":{"content":"Test a workflow with the provided input data. The input data should resemble the input that the trigger will send the workflow. See the [event trigger documentation](https://developer.sailpoint.com/triggers/available_event_triggers.html) for an example input for the trigger that initiates this workflow.\nThis endpoint will return an execution ID, which can be used to lookup more information about the execution using the `Get a Workflow Execution` endpoint.\n**This will cause a live run of the workflow, which could result in unintended modifications to your IDN tenant.**","type":"text/plain"},"url":{"path":["workflows",":id","test"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Id of the workflow","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Test Workflow By Id + + + +Test a workflow with the provided input data. The input data should resemble the input that the trigger will send the workflow. See the [event trigger documentation](https://developer.sailpoint.com/triggers/available_event_triggers.html) for an example input for the trigger that initiates this workflow. +This endpoint will return an execution ID, which can be used to lookup more information about the execution using the `Get a Workflow Execution` endpoint. +**This will cause a live run of the workflow, which could result in unintended modifications to your IDN tenant.** + +
      Path Parameters
      Request Body required
      + +The Workflow object + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/transforms.tag.mdx b/docs/sailpoint-api-beta/transforms.tag.mdx new file mode 100644 index 000000000..4b008c100 --- /dev/null +++ b/docs/sailpoint-api-beta/transforms.tag.mdx @@ -0,0 +1,19 @@ +--- +id: transforms +title: Transforms +description: Transforms +--- + + + +Operations for creating, managing, and deleting transforms + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/triggers.tag.mdx b/docs/sailpoint-api-beta/triggers.tag.mdx new file mode 100644 index 000000000..a190aff5f --- /dev/null +++ b/docs/sailpoint-api-beta/triggers.tag.mdx @@ -0,0 +1,60 @@ +--- +id: triggers +title: Triggers +description: Triggers +--- + + + +Event Triggers provide real-time updates to changes in IdentityNow so you can take action as soon as an event occurs, rather than poll an API endpoint for updates. IdentityNow provides a user interface within the admin console to create and manage trigger subscriptions. These endpoints allow for programatically creating and managing trigger subscriptions. + +There are two types of event triggers: + * `FIRE_AND_FORGET`: This trigger type will send a payload to each subscriber without needing a response. Each trigger of this type has a limit of **50 subscriptions**. + * `REQUEST_RESPONSE`: This trigger type will send a payload to a subscriber and expect a response back. Each trigger of this type may only have **one subscription**. + +## Available Event Triggers +Production ready event triggers that are available in all tenants. + +| Name | ID | Type | Trigger condition | Schema(s) | +|-|-|-|-|-| +| [Access Request Dynamic Approver](https://developer.sailpoint.com/triggers/available-event-triggers/access-request-dynamic-approval-event-trigger.html) | idn:access-request-dynamic-approver | REQUEST_RESPONSE |After an access request is submitted. Expects the subscriber to respond with the ID of an identity or workgroup to add to the approval workflow. | [Input Schema](#section/Access-Request-Dynamic-Approver-Event-Trigger-Input) - [Output Schema](#section/Access-Request-Dynamic-Approver-Event-Trigger-Output) | +| [Access Request Decision](https://developer.sailpoint.com/triggers/available-event-triggers/access-request-postapproval-trigger.html) | idn:access-request-post-approval | FIRE_AND_FORGET | After an access request is approved. |[Input Schema](#section/Access-Request-Post-Approval-Event-Trigger-Input)| +| [Access Request Submitted](https://developer.sailpoint.com/triggers/available-event-triggers/access-request-preapproval-event-trigger.html) | idn:access-request-pre-approval | REQUEST_RESPONSE | After an access request is submitted. Expects the subscriber to respond with an approval decision. | [Input Schema](#section/Access-Request-Pre-Approval-Event-Trigger-Input) - [Output Schema](#section/Access-Request-Pre-Approval-Event-Trigger-Output) | +| Account Aggregation Completed | idn:account-aggregation-completed | FIRE_AND_FORGET | After an account aggregation completed, terminated, failed. | [Input Schema](#section/Account-Aggregation-Completed-Event-Trigger-Input) | +| Account Attributes Changed | idn:account-attributes-changed | FIRE_AND_FORGET | After an account aggregation, and one or more account attributes have changed. | [Input Schema](#section/Account-Attributes-Changed-Event-Trigger-Input) | +| Account Correlated | idn:account-correlated | FIRE_AND_FORGET | After an account is added to an identity. | [Input Schema](#section/Account-Correlated-Event-Trigger-Input) | +| [Accounts Collected for Aggregation](https://developer.sailpoint.com/triggers/available-event-triggers/account-aggregation-completed.html) | idn:aggregation-accounts-collected | FIRE_AND_FORGET | New, changed, and deleted accounts have been gathered during an aggregation and are being processed. | [Input Schema](#section/Accounts-Collected-for-Aggregation-Event-Trigger-Input) | +| Account Uncorrelated | idn:account-uncorrelated | FIRE_AND_FORGET | After an account is removed from an identity. | [Input Schema](#section/Account-Uncorrelated-Event-Trigger-Input) | +| Campaign Activated | idn:campaign-activated | FIRE_AND_FORGET | After a campaign is activated. | [Input Schema](#section/Campaign-Activated-Event-Trigger-Input) | +| Campaign Ended | idn:campaign-ended | FIRE_AND_FORGET | After a campaign ends. | [Input Schema](#section/Campaign-Ended-Event-Trigger-Input) | +| Campaign Generated | idn:campaign-generated | FIRE_AND_FORGET | After a campaign finishes generating. | [Input Schema](#section/Campaign-Generated-Event-Trigger-Input) | +| Certification Signed Off | idn:certification-signed-off | FIRE_AND_FORGET | After a certification is signed off by its reviewer. | [Input Schema](#section/Certification-Signed-Off-Event-Trigger-Input) | +| [Identity Attributes Changed](https://developer.sailpoint.com/triggers/available-event-triggers/identity-attribute-changed-event-trigger.html) | idn:identity-attributes-changed | FIRE_AND_FORGET | After One or more identity attributes changed. | [Input Schema](#section/Identity-Attributes-Changed-Event-Trigger-Input) | +| [Identity Created](https://developer.sailpoint.com/triggers/available-event-triggers/identity-created-event-trigger.html) | idn:identity-created | FIRE_AND_FORGET | After an identity is created. | [Input Schema](#section/Identity-Created-Event-Trigger-Input) | +| [Provisioning Completed](https://developer.sailpoint.com/triggers/available-event-triggers/provisioning-action-completed-trigger.html) | idn:post-provisioning | FIRE_AND_FORGET | After a provisioning action completed on a source. | [Input Schema](#section/Provisioning-Completed-Event-Trigger-Input) | +| [Saved Search Complete](https://developer.sailpoint.com/triggers/available-event-triggers/saved-search-completed.html) | idn:saved-search-complete | FIRE_AND_FORGET | After a scheduled search completed. | [Input Schema](#section/Saved-Search-Complete-Event-Trigger-Input) | +| [VA Cluster Status Changed Event](https://developer.sailpoint.com/triggers/available-event-triggers/va-cluster-status-change-event-trigger.html) | idn:va-cluster-status-change | FIRE_AND_FORGET | After the status of a VA cluster has changed. | [Input Schema](#section/VA-Cluster-Status-Change-Event-Event-Trigger-Input) | + +## Early Access Event Triggers +Triggers that are in-development and not ready for production use. Please contact support to enable these triggers in your tenant. + +| Name | ID | Type | Trigger condition | Schema(s) | +|-|-|-|-|-| +| [Identity Deleted](https://developer.sailpoint.com/triggers/early-access-event-triggers/identity-deleted-event-trigger.html) | idn:identity-deleted | FIRE_AND_FORGET | After an identity is deleted. | [Input Schema](#section/Identity-Deleted-Event-Trigger-Input) | +| [Source Account Created](https://developer.sailpoint.com/triggers/early-access-event-triggers/source-account-created-trigger.html) | idn:source-account-created | FIRE_AND_FORGET | After a source account is created. | [Input Schema](#section/Source-Account-Created-Event-Trigger-Input) | +| [Source Account Deleted](https://developer.sailpoint.com/triggers/early-access-event-triggers/source-account-deleted-trigger.html) | idn:source-account-deleted | FIRE_AND_FORGET | After a source account is deleted. | [Input Schema](#section/Source-Account-Deleted-Event-Trigger-Input) | +| [Source Account Updated](https://developer.sailpoint.com/triggers/early-access-event-triggers/source-account-updated-trigger.html) | idn:source-account-updated | FIRE_AND_FORGET | After a source account is changed. | [Input Schema](#section/Source-Account-Updated-Event-Trigger-Input) | +| [Source Created](https://developer.sailpoint.com/triggers/early-access-event-triggers/source-created-trigger.html) | idn:source-created | FIRE_AND_FORGET | After a source is created. | [Input Schema](#section/Source-Created-Event-Trigger-Input) | +| [Source Deleted](https://developer.sailpoint.com/triggers/early-access-event-triggers/source-deleted-trigger.html) | idn:source-deleted | FIRE_AND_FORGET | After a source is deleted. | [Input Schema](#section/Source-Deleted-Event-Trigger-Input) | +| [Source Updated](https://developer.sailpoint.com/triggers/early-access-event-triggers/source-updated-trigger.html) | idn:source-updated | FIRE_AND_FORGET | After configuration changes have been made to a source. | [Input Schema](#section/Source-Updated-Event-Trigger-Input) | + + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/un-ignore-outliers.api.mdx b/docs/sailpoint-api-beta/un-ignore-outliers.api.mdx new file mode 100644 index 000000000..692c506aa --- /dev/null +++ b/docs/sailpoint-api-beta/un-ignore-outliers.api.mdx @@ -0,0 +1,76 @@ +--- +id: un-ignore-outliers +sidebar_label: IAI Identity Outliers Unignore +hide_title: true +hide_table_of_contents: true +api: {"operationId":"unIgnoreOutliers","tags":["IAI Outliers"],"description":"This API receives a list of IdentityIDs in the request, changes the outliers to be un-ignored--returning a 204 if successful.\nRequires authorization scope of 'iai:outliers-management:update'","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"string"},"description":"List of identity IDs to un-ignore from outlier listing","example":["abc123def456","ghi789jkl012"]}}}},"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/outliers/unignore","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":["abc123def456","ghi789jkl012"],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"IAI Identity Outliers Unignore","description":{"content":"This API receives a list of IdentityIDs in the request, changes the outliers to be un-ignored--returning a 204 if successful.\nRequires authorization scope of 'iai:outliers-management:update'","type":"text/plain"},"url":{"path":["outliers","unignore"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## IAI Identity Outliers Unignore + + + +This API receives a list of IdentityIDs in the request, changes the outliers to be un-ignored--returning a 204 if successful. +Requires authorization scope of 'iai:outliers-management:update' + +
      Request Body array required
      • string
      + +No content - indicates the request was successful but there is no content to be returned in the response. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/unlock-account.api.mdx b/docs/sailpoint-api-beta/unlock-account.api.mdx new file mode 100644 index 000000000..1ff5c0568 --- /dev/null +++ b/docs/sailpoint-api-beta/unlock-account.api.mdx @@ -0,0 +1,88 @@ +--- +id: unlock-account +sidebar_label: Unlock Account +hide_title: true +hide_table_of_contents: true +api: {"operationId":"unlockAccount","tags":["Accounts"],"description":"This API submits a task to unlock an account and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:account:unlock"]}],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The account id","example":"ef38f94347e94562b5bb8424a56397d8"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"description":"Request used for account unlock","type":"object","properties":{"externalVerificationId":{"description":"If set, an external process validates that the user wants to proceed with this request.","type":"string","example":"3f9180835d2e5168015d32f890ca1581"},"unlockIDNAccount":{"description":"If set, the IDN account is unlocked after the workflow completes.","type":"boolean","example":false},"forceProvisioning":{"description":"If set, provisioning updates the account attribute at the source. This option is used when the account is not synced to ensure the attribute is updated.","type":"boolean","example":false}}}}}},"responses":{"202":{"description":"Async task details","content":{"application/json":{"schema":{"description":"Accounts async response containing details on started async process","required":["id"],"type":"object","properties":{"id":{"description":"id of the task","type":"string","example":"2c91808474683da6017468693c260195"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/accounts/{id}/unlock","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"externalVerificationId":"3f9180835d2e5168015d32f890ca1581","unlockIDNAccount":false,"forceProvisioning":false},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Unlock Account","description":{"content":"This API submits a task to unlock an account and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts",":id","unlock"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The account id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Unlock Account + + + +This API submits a task to unlock an account and returns the task ID. +A token with ORG_ADMIN authority is required to call this API. + +
      Path Parameters
      Request Body required
      + +Async task details + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-access-request-config.api.mdx b/docs/sailpoint-api-beta/update-access-request-config.api.mdx new file mode 100644 index 000000000..9bb784fc6 --- /dev/null +++ b/docs/sailpoint-api-beta/update-access-request-config.api.mdx @@ -0,0 +1,100 @@ +--- +id: update-access-request-config +sidebar_label: Update Access Request Configuration +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updateAccessRequestConfig","tags":["Access Requests"],"description":"This endpoint replaces the current access-request configuration.\nA token with ORG_ADMIN authority is required to call this API.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"approvalsMustBeExternal":{"type":"boolean","description":"If true, then approvals must be processed by external system.","example":true},"autoApprovalEnabled":{"type":"boolean","description":"If true and requester and reviewer are the same, then automatically approve the approval.","example":true},"requestOnBehalfOfConfig":{"description":"Request On Behalf Of Configuration.","type":"object","properties":{"allowRequestOnBehalfOfAnyoneByAnyone":{"type":"boolean","description":"If anyone can request access for anyone.","example":true},"allowRequestOnBehalfOfEmployeeByManager":{"type":"boolean","description":"If a manager can request access for his/her direct reports.","example":true}}},"approvalReminderAndEscalationConfig":{"description":"Approval Reminder and Escalation Configuration.","type":"object","properties":{"daysUntilEscalation":{"type":"integer","description":"Number of days to wait before the first reminder. If no reminders are configured, then this is the number of days to wait before escalation.","format":"int32","example":0},"daysBetweenReminders":{"type":"integer","description":"Number of days to wait between reminder notifications.","format":"int32","example":0},"maxReminders":{"type":"integer","description":"Maximum number of reminder notification to send to the reviewer before approval escalation.","format":"int32","example":0},"fallbackApproverRef":{"type":"object","nullable":true,"properties":{"type":{"type":"string","description":"The type can only be IDENTITY. This is read-only","example":"IDENTITY"},"id":{"type":"string","description":"Identity id.","example":"5168015d32f890ca15812c9180835d2e"},"name":{"type":"string","description":"Human-readable display name of identity. This is read-only","example":"Alison Ferguso"},"email":{"type":"string","description":"Email address of identity. This is read-only","example":"alison.ferguso@identitysoon.com"}}}}},"entitlementRequestConfig":{"description":"Entitlement Request Configuration.","type":"object","properties":{"allowEntitlementRequest":{"type":"boolean","description":"Flag for allowing entitlement request.","example":true},"requestCommentsRequired":{"type":"boolean","description":"Flag for requiring comments while submitting an entitlement request.","default":false,"example":false},"deniedCommentsRequired":{"type":"boolean","description":"Flag for requiring comments while rejecting an entitlement request.","default":false,"example":false},"grantRequestApprovalSchemes":{"type":"string","description":"Approval schemes for granting entitlement request. This can be empty if no approval is needed.\nMultiple schemes must be comma-separated. The valid schemes are \"sourceOwner\", \"manager\" and \"workgroup:{id}\".\nMultiple workgroups (governance groups) can be used.\n","default":"sourceOwner","example":"sourceOwner, manager, workgroup:2c918084660f45d6016617daa9210584"}}}}}}}},"responses":{"200":{"description":"Access Request Configuration Details.","content":{"application/json":{"schema":{"type":"object","properties":{"approvalsMustBeExternal":{"type":"boolean","description":"If true, then approvals must be processed by external system.","example":true},"autoApprovalEnabled":{"type":"boolean","description":"If true and requester and reviewer are the same, then automatically approve the approval.","example":true},"requestOnBehalfOfConfig":{"description":"Request On Behalf Of Configuration.","type":"object","properties":{"allowRequestOnBehalfOfAnyoneByAnyone":{"type":"boolean","description":"If anyone can request access for anyone.","example":true},"allowRequestOnBehalfOfEmployeeByManager":{"type":"boolean","description":"If a manager can request access for his/her direct reports.","example":true}}},"approvalReminderAndEscalationConfig":{"description":"Approval Reminder and Escalation Configuration.","type":"object","properties":{"daysUntilEscalation":{"type":"integer","description":"Number of days to wait before the first reminder. If no reminders are configured, then this is the number of days to wait before escalation.","format":"int32","example":0},"daysBetweenReminders":{"type":"integer","description":"Number of days to wait between reminder notifications.","format":"int32","example":0},"maxReminders":{"type":"integer","description":"Maximum number of reminder notification to send to the reviewer before approval escalation.","format":"int32","example":0},"fallbackApproverRef":{"type":"object","nullable":true,"properties":{"type":{"type":"string","description":"The type can only be IDENTITY. This is read-only","example":"IDENTITY"},"id":{"type":"string","description":"Identity id.","example":"5168015d32f890ca15812c9180835d2e"},"name":{"type":"string","description":"Human-readable display name of identity. This is read-only","example":"Alison Ferguso"},"email":{"type":"string","description":"Email address of identity. This is read-only","example":"alison.ferguso@identitysoon.com"}}}}},"entitlementRequestConfig":{"description":"Entitlement Request Configuration.","type":"object","properties":{"allowEntitlementRequest":{"type":"boolean","description":"Flag for allowing entitlement request.","example":true},"requestCommentsRequired":{"type":"boolean","description":"Flag for requiring comments while submitting an entitlement request.","default":false,"example":false},"deniedCommentsRequired":{"type":"boolean","description":"Flag for requiring comments while rejecting an entitlement request.","default":false,"example":false},"grantRequestApprovalSchemes":{"type":"string","description":"Approval schemes for granting entitlement request. This can be empty if no approval is needed.\nMultiple schemes must be comma-separated. The valid schemes are \"sourceOwner\", \"manager\" and \"workgroup:{id}\".\nMultiple workgroups (governance groups) can be used.\n","default":"sourceOwner","example":"sourceOwner, manager, workgroup:2c918084660f45d6016617daa9210584"}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/access-request-config","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"approvalsMustBeExternal":true,"autoApprovalEnabled":true,"requestOnBehalfOfConfig":{"allowRequestOnBehalfOfAnyoneByAnyone":true,"allowRequestOnBehalfOfEmployeeByManager":true},"approvalReminderAndEscalationConfig":{"daysUntilEscalation":0,"daysBetweenReminders":0,"maxReminders":0,"fallbackApproverRef":{"type":"IDENTITY","id":"5168015d32f890ca15812c9180835d2e","name":"Alison Ferguso","email":"alison.ferguso@identitysoon.com"}},"entitlementRequestConfig":{"allowEntitlementRequest":true,"requestCommentsRequired":false,"deniedCommentsRequired":false,"grantRequestApprovalSchemes":"sourceOwner, manager, workgroup:2c918084660f45d6016617daa9210584"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update Access Request Configuration","description":{"content":"This endpoint replaces the current access-request configuration.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["access-request-config"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Access Request Configuration + + + +This endpoint replaces the current access-request configuration. +A token with ORG_ADMIN authority is required to call this API. + +
      Request Body required
        requestOnBehalfOfConfig object
        + +Request On Behalf Of Configuration. + +
        approvalReminderAndEscalationConfig object
        + +Approval Reminder and Escalation Configuration. + +
        fallbackApproverRef object
        entitlementRequestConfig object
        + +Entitlement Request Configuration. + +
      + +Access Request Configuration Details. + +
      Schema
        requestOnBehalfOfConfig object
        + +Request On Behalf Of Configuration. + +
        approvalReminderAndEscalationConfig object
        + +Approval Reminder and Escalation Configuration. + +
        fallbackApproverRef object
        entitlementRequestConfig object
        + +Entitlement Request Configuration. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-account.api.mdx b/docs/sailpoint-api-beta/update-account.api.mdx new file mode 100644 index 000000000..7c533ad21 --- /dev/null +++ b/docs/sailpoint-api-beta/update-account.api.mdx @@ -0,0 +1,92 @@ +--- +id: update-account +sidebar_label: Update Account +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updateAccount","tags":["Accounts"],"description":"This updates account details. \nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:account:update"]}],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The account ID","example":"ef38f94347e94562b5bb8424a56397d8"}],"requestBody":{"required":true,"description":"A list of account update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object"}},"example":[{"op":"replace","path":"/identityId","value":"2c9180845d1edece015d27a975983e21"}]}}},"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/accounts/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update Account","description":{"content":"This updates account details. \nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The account ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Account + + + +This updates account details. +A token with ORG_ADMIN authority is required to call this API. + +
      Path Parameters
      Request Body array required
      + +A list of account update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + +
      + +Accepted - Returned if the request was successfully accepted into the system. + +
      Schema
      • object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-campaign.api.mdx b/docs/sailpoint-api-beta/update-campaign.api.mdx new file mode 100644 index 000000000..8a5de7a1d --- /dev/null +++ b/docs/sailpoint-api-beta/update-campaign.api.mdx @@ -0,0 +1,104 @@ +--- +id: update-campaign +sidebar_label: Update a Campaign +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updateCampaign","tags":["Certification Campaigns"],"description":"Allows updating individual fields on a campaign using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the campaign template being modified.","example":"2c91808571bcfcf80171c23e4b4221fc"}],"requestBody":{"required":true,"description":"A list of campaign update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\nThe fields that can be patched differ based on the status of the campaign.\n\nIn the *STAGED* status, the following fields can be patched:\n* name\n* description\n* recommendationsEnabled\n* deadline\n* emailNotificationEnabled\n* autoRevokeAllowed\n\nIn the *ACTIVE* status, the following fields can be patched:\n* deadline\n","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object"}},"example":[{"op":"replace","path":"/name","value":"This field has been updated!"},{"op":"copy","from":"/name","path":"/description"}]}}},"responses":{"200":{"description":"Indicates the PATCH operation succeeded, and returns the campaign's new representation.","content":{"application/json":{"schema":{"type":"object","title":"Slim Campaign","required":["name","description","type"],"properties":{"id":{"type":"string","readOnly":true},"name":{"description":"The campaign name. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details.","type":"string"},"description":{"type":"string","description":"The campaign description. If this object is part of a template, special formatting applies; see the `/campaign-templates/{id}/generate` endpoint documentation for details."},"deadline":{"type":"string","format":"date-time","description":"The campaign's completion deadline."},"type":{"type":"string","description":"The type of campaign. Could be extended in the future.","enum":["MANAGER","SOURCE_OWNER","SEARCH","ROLE_COMPOSITION"]},"emailNotificationEnabled":{"type":"boolean"},"autoRevokeAllowed":{"type":"boolean"},"recommendationsEnabled":{"type":"boolean","description":"Enables IAI for this campaign. Accepts true even if the IAI product feature is off. If IAI is turned off then campaigns generated from this template will indicate false. The real value will then be returned if IAI is ever enabled for the org in the future."},"status":{"type":"string","description":"The campaign's current status.","readOnly":true,"enum":["PENDING","STAGED","CANCELING","ACTIVATING","ACTIVE","COMPLETING","COMPLETED","ERROR","ARCHIVED"]}},"example":{"id":"2c9079b270a266a60170a2779fcb0007","name":"Manager Campaign","description":"Everyone needs to be reviewed by their manager.","deadline":"2020-03-15T10:00:01.456Z","type":"MANAGER","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false,"status":"ACTIVE"}},"examples":{"Manager":{"value":{"id":"2c918086719eec070171a7e3355a360a","name":"Manager Review","description":"A review of everyone's access by their manager.","deadline":"2020-12-25T06:00:00.123Z","type":"MANAGER","status":"ACTIVE","emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false}},"Search":{"value":{"id":"7e1a731e3fb845cfbe58112ba4673ee4","name":"Search Campaign","description":"Search Campaign Info","deadline":"2022-07-26T15:42:44Z","type":"SEARCH","status":"ACTIVE","emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false}},"Source Owner":{"value":{"id":"2c918086719eec070171a7e3355a412b","name":"AD Source Review","description":"A review of our AD source.","deadline":"2020-12-25T06:00:00.123Z","type":"SOURCE_OWNER","status":"STAGED","emailNotificationEnabled":true,"autoRevokeAllowed":false,"recommendationsEnabled":false}},"RoleComposition":{"value":{"id":"3b2e2e5821e84127b6d693d41c40623b","name":"Role Composition Campaign","description":"A review done by a role owner.","deadline":"2020-12-25T06:00:00.468Z","type":"ROLE_COMPOSITION","status":"ACTIVE","emailNotificationEnabled":false,"autoRevokeAllowed":false,"recommendationsEnabled":false}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/campaigns/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update a Campaign","description":{"content":"Allows updating individual fields on a campaign using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.","type":"text/plain"},"url":{"path":["campaigns",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the campaign template being modified.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update a Campaign + + + +Allows updating individual fields on a campaign using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + +
      Path Parameters
      Request Body array required
      + +A list of campaign update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. +The fields that can be patched differ based on the status of the campaign. + +In the *STAGED* status, the following fields can be patched: +* name +* description +* recommendationsEnabled +* deadline +* emailNotificationEnabled +* autoRevokeAllowed + +In the *ACTIVE* status, the following fields can be patched: +* deadline + + +
      + +Indicates the PATCH operation succeeded, and returns the campaign's new representation. + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-client-log-configuration.api.mdx b/docs/sailpoint-api-beta/update-client-log-configuration.api.mdx new file mode 100644 index 000000000..b1e1b07ec --- /dev/null +++ b/docs/sailpoint-api-beta/update-client-log-configuration.api.mdx @@ -0,0 +1,87 @@ +--- +id: update-client-log-configuration +sidebar_label: Update log configuration for a specified cluster. +hide_title: true +hide_table_of_contents: true +api: {"tags":["Managed Clusters"],"description":"Update log configuration for a managed cluster.","operationId":"updateClientLogConfiguration","parameters":[{"name":"id","in":"path","description":"ID of the ManagedCluster to update log configuration for","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"aClusterId"}}],"requestBody":{"description":"ClientLogConfiguration for the given ManagedCluster","content":{"application/json":{"schema":{"description":"Client Runtime Logging Configuration","type":"object","required":["durationMinutes","rootLevel"],"properties":{"clientId":{"description":"client ID of the Log configuration","type":"string","example":"aClientId"},"durationMinutes":{"description":"duration in minutes for the log configuration to remain in effect before resetting to defaults","type":"integer","format":"int32","example":120,"default":240,"minimum":5,"maximum":1440},"expiration":{"description":"Expiration date-time of the log configuration request","example":120,"type":"string","format":"date-time"},"rootLevel":{"description":"Root Log level to apply","default":"INFO","example":"TRACE","type":"string","enum":["OFF","FATAL","ERROR","WARN","INFO","DEBUG","TRACE"]},"logLevels":{"description":"Map of LogLevel by key","example":"{ level:WARN }","type":"object","additionalProperties":{"default":"INFO","example":"TRACE","description":"Standard Log4j log level","type":"string","enum":["OFF","FATAL","ERROR","WARN","INFO","DEBUG","TRACE"]}}}}}},"required":true},"responses":{"200":{"description":"Responds with updated ClientLogConfiguration for the given ManagedCluster.","content":{"application/json":{"schema":{"description":"Client Runtime Logging Configuration","type":"object","required":["durationMinutes","rootLevel"],"properties":{"clientId":{"description":"client ID of the Log configuration","type":"string","example":"aClientId"},"durationMinutes":{"description":"duration in minutes for the log configuration to remain in effect before resetting to defaults","type":"integer","format":"int32","example":120,"default":240,"minimum":5,"maximum":1440},"expiration":{"description":"Expiration date-time of the log configuration request","example":120,"type":"string","format":"date-time"},"rootLevel":{"description":"Root Log level to apply","default":"INFO","example":"TRACE","type":"string","enum":["OFF","FATAL","ERROR","WARN","INFO","DEBUG","TRACE"]},"logLevels":{"description":"Map of LogLevel by key","example":"{ level:WARN }","type":"object","additionalProperties":{"default":"INFO","example":"TRACE","description":"Standard Log4j log level","type":"string","enum":["OFF","FATAL","ERROR","WARN","INFO","DEBUG","TRACE"]}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"security":[{"bearerAuth":["idn:managed-cluster-log-config:write"]}],"method":"put","path":"/managed-clusters/{id}/log-config","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"clientId":"aClientId","durationMinutes":120,"expiration":120,"rootLevel":"TRACE","logLevels":"{ level:WARN }"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update log configuration for a specified cluster.","description":{"content":"Update log configuration for a managed cluster.","type":"text/plain"},"url":{"path":["managed-clusters",":id","log-config"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the ManagedCluster to update log configuration for","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update log configuration for a specified cluster. + + + +Update log configuration for a managed cluster. + +
      Path Parameters
      Request Body required
      + +ClientLogConfiguration for the given ManagedCluster + +
        = 5` and `<= 1440`"} defaultValue={240}>
        logLevels object
        + +Map of LogLevel by key + +
      • property name* string
        + +**Possible values:** [`OFF`, `FATAL`, `ERROR`, `WARN`, `INFO`, `DEBUG`, `TRACE`] + +
      + +Responds with updated ClientLogConfiguration for the given ManagedCluster. + +
      Schema
        = 5` and `<= 1440`"} defaultValue={240}>
        logLevels object
        + +Map of LogLevel by key + +
      • property name* string
        + +**Possible values:** [`OFF`, `FATAL`, `ERROR`, `WARN`, `INFO`, `DEBUG`, `TRACE`] + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-connector-rule.api.mdx b/docs/sailpoint-api-beta/update-connector-rule.api.mdx new file mode 100644 index 000000000..58425d0f9 --- /dev/null +++ b/docs/sailpoint-api-beta/update-connector-rule.api.mdx @@ -0,0 +1,104 @@ +--- +id: update-connector-rule +sidebar_label: Update a Connector Rule +hide_title: true +hide_table_of_contents: true +api: {"tags":["Connector Rule Management"],"description":"Updates an existing connector rule with the one provided in the request body. Note that the fields 'id', 'name', and 'type' are immutable.\nA token with ORG_ADMIN authority is required to call this API.","operationId":"updateConnectorRule","parameters":[{"name":"id","in":"path","description":"ID of the connector rule to update","required":true,"style":"simple","explode":false,"schema":{"type":"string"}}],"requestBody":{"description":"The connector rule with updated data","content":{"application/json":{"schema":{"description":"ConnectorRuleUpdateRequest","allOf":[{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"the ID of the rule to update","example":"8113d48c0b914f17b4c6072d4dcb9dfe"}}},{"description":"ConnectorRuleCreateRequest","type":"object","required":["name","type","sourceCode"],"properties":{"name":{"type":"string","description":"the name of the rule","example":"WebServiceBeforeOperationRule"},"description":{"type":"string","description":"a description of the rule's purpose","example":"This rule does that"},"type":{"type":"string","enum":["BuildMap","ConnectorAfterCreate","ConnectorAfterDelete","ConnectorAfterModify","ConnectorBeforeCreate","ConnectorBeforeDelete","ConnectorBeforeModify","JDBCBuildMap","JDBCOperationProvisioning","JDBCProvision","PeopleSoftHRMSBuildMap","PeopleSoftHRMSOperationProvisioning","PeopleSoftHRMSProvision","RACFPermissionCustomization","SAPBuildMap","SapHrManagerRule","SapHrOperationProvisioning","SapHrProvision","SuccessFactorsOperationProvisioning","WebServiceAfterOperationRule","WebServiceBeforeOperationRule"],"description":"the type of rule","example":"BuildMap"},"signature":{"description":"The rule's function signature. Describes the rule's input arguments and output (if any)","type":"object","required":["input"],"properties":{"input":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"the name of the argument","example":"firstName"},"description":{"type":"string","description":"the description of the argument","example":"the first name of the identity"},"type":{"type":"string","description":"the programmatic type of the argument","example":"String"}},"required":["name"]}},"output":{"type":"object","properties":{"name":{"type":"string","description":"the name of the argument","example":"firstName"},"description":{"type":"string","description":"the description of the argument","example":"the first name of the identity"},"type":{"type":"string","description":"the programmatic type of the argument","example":"String"}},"required":["name"]}}},"sourceCode":{"description":"SourceCode","type":"object","required":["version","script"],"properties":{"version":{"type":"string","description":"the version of the code","example":"1.0"},"script":{"type":"string","description":"The code","example":"return \"Mr. \" + firstName;"}}},"attributes":{"type":"object","description":"a map of string to objects"}}}]}}}},"responses":{"200":{"description":"The updated connector rule","content":{"application/json":{"schema":{"description":"ConnectorRuleResponse","allOf":[{"description":"ConnectorRuleCreateRequest","type":"object","required":["name","type","sourceCode"],"properties":{"name":{"type":"string","description":"the name of the rule","example":"WebServiceBeforeOperationRule"},"description":{"type":"string","description":"a description of the rule's purpose","example":"This rule does that"},"type":{"type":"string","enum":["BuildMap","ConnectorAfterCreate","ConnectorAfterDelete","ConnectorAfterModify","ConnectorBeforeCreate","ConnectorBeforeDelete","ConnectorBeforeModify","JDBCBuildMap","JDBCOperationProvisioning","JDBCProvision","PeopleSoftHRMSBuildMap","PeopleSoftHRMSOperationProvisioning","PeopleSoftHRMSProvision","RACFPermissionCustomization","SAPBuildMap","SapHrManagerRule","SapHrOperationProvisioning","SapHrProvision","SuccessFactorsOperationProvisioning","WebServiceAfterOperationRule","WebServiceBeforeOperationRule"],"description":"the type of rule","example":"BuildMap"},"signature":{"description":"The rule's function signature. Describes the rule's input arguments and output (if any)","type":"object","required":["input"],"properties":{"input":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"the name of the argument","example":"firstName"},"description":{"type":"string","description":"the description of the argument","example":"the first name of the identity"},"type":{"type":"string","description":"the programmatic type of the argument","example":"String"}},"required":["name"]}},"output":{"type":"object","properties":{"name":{"type":"string","description":"the name of the argument","example":"firstName"},"description":{"type":"string","description":"the description of the argument","example":"the first name of the identity"},"type":{"type":"string","description":"the programmatic type of the argument","example":"String"}},"required":["name"]}}},"sourceCode":{"description":"SourceCode","type":"object","required":["version","script"],"properties":{"version":{"type":"string","description":"the version of the code","example":"1.0"},"script":{"type":"string","description":"The code","example":"return \"Mr. \" + firstName;"}}},"attributes":{"type":"object","description":"a map of string to objects"}}},{"type":"object","required":["id","created"],"properties":{"id":{"type":"string","description":"the ID of the rule","example":"8113d48c0b914f17b4c6072d4dcb9dfe"},"created":{"type":"string","description":"an ISO 8601 UTC timestamp when this rule was created","example":"021-07-22T15:59:23Z"},"modified":{"type":"string","description":"an ISO 8601 UTC timestamp when this rule was last modified","example":"021-07-22T15:59:23Z"}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:connector-rule:write"]}],"method":"put","path":"/connector-rules/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"8113d48c0b914f17b4c6072d4dcb9dfe","name":"WebServiceBeforeOperationRule","description":"This rule does that","type":"BuildMap","signature":{"input":[{"name":"firstName","description":"the first name of the identity","type":"String"}],"output":{"name":"firstName","description":"the first name of the identity","type":"String"}},"sourceCode":{"version":"1.0","script":"return \"Mr. \" + firstName;"},"attributes":{}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update a Connector Rule","description":{"content":"Updates an existing connector rule with the one provided in the request body. Note that the fields 'id', 'name', and 'type' are immutable.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["connector-rules",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the connector rule to update","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update a Connector Rule + + + +Updates an existing connector rule with the one provided in the request body. Note that the fields 'id', 'name', and 'type' are immutable. +A token with ORG_ADMIN authority is required to call this API. + +
      Path Parameters
      Request Body
      + +The connector rule with updated data + +
        signature object
        + +The rule's function signature. Describes the rule's input arguments and output (if any) + +
        input object[]
        output object
        sourceCode object
        + +SourceCode + +
      + +The updated connector rule + +
      Schema
        signature object
        + +The rule's function signature. Describes the rule's input arguments and output (if any) + +
        input object[]
        output object
        sourceCode object
        + +SourceCode + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-identity-profile.api.mdx b/docs/sailpoint-api-beta/update-identity-profile.api.mdx new file mode 100644 index 000000000..5603a86a7 --- /dev/null +++ b/docs/sailpoint-api-beta/update-identity-profile.api.mdx @@ -0,0 +1,116 @@ +--- +id: update-identity-profile +sidebar_label: Update the Identity Profile +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updateIdentityProfile","tags":["Identity Profiles"],"description":"This updates the specified Identity Profile.\nA token with ORG_ADMIN authority is required to call this API to update the Identity Profile. Some fields of the Schema cannot be updated. These fields are listed below.\n* id\n* name\n* created\n* modified","parameters":[{"in":"path","name":"identity-profile-id","schema":{"type":"string","format":"uuid"},"required":true,"description":"The Identity Profile ID","example":"ef38f94347e94562b5bb8424a56397d8"}],"requestBody":{"required":true,"description":"A list of Identity Profile update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}},"example":[{"op":"replace","path":"/description","value":"Updated description!"}]}}},"responses":{"200":{"description":"The updated Identity Profile.","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","format":"date-time","readOnly":true,"example":true},"modified":{"description":"Last modification date of the Object","type":"string","format":"date-time","readOnly":true,"example":true}}},{"type":"object","properties":{"description":{"type":"string","description":"The description of the Identity Profile.","example":"My custom flat file profile"},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The owner of the Identity Profile."},"priority":{"type":"integer","format":"int64","description":"The priority for an Identity Profile.","example":10},"authoritativeSource":{"type":"object","properties":{"type":{"type":"string","enum":["SOURCE"],"description":"Type of the object to which this reference applies","example":"SOURCE"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c9180835d191a86015d28455b4b232a"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"HR Active Directory"}},"description":"The authoritative source for this Identity Profile."},"identityRefreshRequired":{"type":"boolean","description":"True if a identity refresh is needed. Typically triggered when a change on the source has been made","example":true},"identityCount":{"type":"integer","description":"The number of identities that belong to the Identity Profile.","format":"int32","example":8},"identityAttributeConfig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"If the profile or mapping is enabled","example":true},"attributeTransforms":{"type":"array","items":{"type":"object","properties":{"identityAttributeName":{"type":"string","description":"Name of the identity attribute","example":"email"},"transformDefinition":{"description":"The seaspray transformation definition","type":"object","properties":{"type":{"type":"string","description":"The type of the transform definition.","example":"accountAttribute"},"attributes":{"type":"object","additionalProperties":{"type":"object"},"description":"Arbitrary key-value pairs to store any metadata for the object","example":{"attributeName":"e-mail","sourceName":"MySource","sourceId":"2c9180877a826e68017a8c0b03da1a53"}}}}}}}}},"identityExceptionReportReference":{"type":"object","properties":{"taskResultId":{"type":"string","format":"uuid","description":"The id of the task result","example":"2c918086795cd09201795d5f7d7533df"},"reportName":{"type":"string","example":"My annual report","description":"The name of the report"}}},"hasTimeBasedAttr":{"description":"Indicates the value of requiresPeriodicRefresh attribute for the Identity Profile.","type":"boolean","example":true}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:identity-profile:update"]}],"method":"patch","path":"/identity-profiles/{identity-profile-id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update the Identity Profile","description":{"content":"This updates the specified Identity Profile.\nA token with ORG_ADMIN authority is required to call this API to update the Identity Profile. Some fields of the Schema cannot be updated. These fields are listed below.\n* id\n* name\n* created\n* modified","type":"text/plain"},"url":{"path":["identity-profiles",":identity-profile-id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Identity Profile ID","type":"text/plain"},"type":"any","value":"","key":"identity-profile-id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update the Identity Profile + + + +This updates the specified Identity Profile. +A token with ORG_ADMIN authority is required to call this API to update the Identity Profile. Some fields of the Schema cannot be updated. These fields are listed below. +* id +* name +* created +* modified + +
      Path Parameters
      Request Body array required
      + +A list of Identity Profile update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + +
        value object
        + +The value to be used for the operation, required for "add" and "replace" operations + +
      • anyOf
      • string
      • integer
      • anyOf
      • string
      • integer
      + +The updated Identity Profile. + +
      Schema
        owner object
        + +The owner of the Identity Profile. + +
        authoritativeSource object
        + +The authoritative source for this Identity Profile. + +
        identityAttributeConfig object
        attributeTransforms object[]
        transformDefinition object
        + +The seaspray transformation definition + +
        attributes object
        + +Arbitrary key-value pairs to store any metadata for the object + +
      • property name* object
      • identityExceptionReportReference object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-lifecycle-states.api.mdx b/docs/sailpoint-api-beta/update-lifecycle-states.api.mdx new file mode 100644 index 000000000..f02ce40ab --- /dev/null +++ b/docs/sailpoint-api-beta/update-lifecycle-states.api.mdx @@ -0,0 +1,94 @@ +--- +id: update-lifecycle-states +sidebar_label: Update Lifecycle State +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updateLifecycleStates","tags":["Lifecycle States"],"description":"This API updates individual lifecycle state fields using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\n\nA token with ORG_ADMIN or API authority is required to call this API.\n","parameters":[{"in":"path","name":"identity-profile-id","description":"Identity Profile ID","required":true,"schema":{"type":"string"}},{"in":"path","name":"lifecycle-state-id","description":"Lifecycle State ID","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"A list of lifecycle state update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\n\nThe following fields can be updated:\n* enabled\n* description\n* accountActions\n* accessProfileIds\n* emailNotificationOption\n","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}},"example":[{"op":"replace","path":"/description","value":"Updated description!"},{"op":"replace","path":"/accessProfileIds","value":["2c918087742bab150174407a80f3125e","2c918087742bab150174407a80f3124f"]},{"op":"replace","path":"/accountActions","value":[{"action":"ENABLE","sourceIds":["2c9180846a2f82fb016a481c1b1560c5","2c9180846a2f82fb016a481c1b1560cc"]},{"action":"DISABLE","sourceIds":["2c91808869a0c9980169a207258513fb"]}]},{"op":"replace","path":"/emailNotificationOption","value":{"notifyManagers":true,"notifyAllAdmins":false,"notifySpecificUsers":false,"emailAddressList":[]}}]}}},"responses":{"200":{"description":"Updated lifecycle-state.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"example":"2c9180835d2e5168015d32f890ca1581","description":"lifecycle stat id."},"name":{"type":"string","readOnly":true,"example":"Lifecycle Name","description":"Lifecycle-state name."},"technicalName":{"type":"string","readOnly":true,"example":"lifecycleTechnicalName","description":"The technical name for lifecycle state. This is for internal use."},"description":{"type":"string","example":"LifecycleDescription","description":"Lifecycle state description."},"created":{"type":"string","readOnly":true,"format":"date-time","example":"2015-05-28T14:07:17Z","description":"Lifecycle state created date."},"modified":{"type":"string","readOnly":true,"format":"date-time","example":"2015-05-28T14:07:17Z","description":"Lifecycle state modified date."},"enabled":{"type":"boolean","example":true,"description":"Whether the lifecycle state is enabled or disabled."},"identityCount":{"type":"integer","format":"int32","readOnly":true,"example":12,"description":"Number of identities that have the lifecycle state."},"emailNotificationOption":{"type":"object","properties":{"notifyManagers":{"type":"boolean","example":true,"description":"If true, then the manager is notified of the lifecycle state change."},"notifyAllAdmins":{"type":"boolean","example":true,"description":"If true, then all the admins are notified of the lifecycle state change."},"notifySpecificUsers":{"type":"boolean","example":true,"description":"If true, then the users specified in \"emailAddressList\" below are notified of lifecycle state change."},"emailAddressList":{"type":"array","example":["test@test.com","test2@test.com"],"items":{"type":"string"},"description":"List of user email addresses. If \"notifySpecificUsers\" option is true, then these users are notified of lifecycle state change."}}},"accountActions":{"type":"array","items":{"type":"object","properties":{"action":{"type":"string","example":"ENABLE","description":"Describes if action will be enabled or disabled","enum":["ENABLE","DISABLE"]},"sourceIds":{"type":"array","items":{"example":"2c918084660f45d6016617daa9210584","description":"Source Id","type":"string"},"example":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"],"description":"List of source IDs. The sources must have the ENABLE feature or flat file source. See \"/sources\" endpoint for source features."}}}},"accessProfileIds":{"type":"array","items":{"type":"string"},"example":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"],"description":"List of access-profile IDs that are associated with the lifecycle state."}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/identity-profiles/{identity-profile-id}/lifecycle-states/{lifecycle-state-id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update Lifecycle State","description":{"content":"This API updates individual lifecycle state fields using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\n\nA token with ORG_ADMIN or API authority is required to call this API.\n","type":"text/plain"},"url":{"path":["identity-profiles",":identity-profile-id","lifecycle-states",":lifecycle-state-id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Identity Profile ID","type":"text/plain"},"type":"any","value":"","key":"identity-profile-id"},{"disabled":false,"description":{"content":"(Required) Lifecycle State ID","type":"text/plain"},"type":"any","value":"","key":"lifecycle-state-id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Lifecycle State + + + +This API updates individual lifecycle state fields using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + +A token with ORG_ADMIN or API authority is required to call this API. + + +
      Path Parameters
      Request Body array required
      + +A list of lifecycle state update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + +The following fields can be updated: +* enabled +* description +* accountActions +* accessProfileIds +* emailNotificationOption + + +
        value object
        + +The value to be used for the operation, required for "add" and "replace" operations + +
      • anyOf
      • string
      • integer
      • anyOf
      • string
      • integer
      + +Updated lifecycle-state. + +
      Schema
        emailNotificationOption object
        accountActions object[]
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-password-dictionary.api.mdx b/docs/sailpoint-api-beta/update-password-dictionary.api.mdx new file mode 100644 index 000000000..dfd45ae61 --- /dev/null +++ b/docs/sailpoint-api-beta/update-password-dictionary.api.mdx @@ -0,0 +1,100 @@ +--- +id: update-password-dictionary +sidebar_label: Update Password Dictionary +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updatePasswordDictionary","tags":["Password Dictionary"],"description":"This updates password dictionary for the organization.\nA token with ORG_ADMIN authority is required to call this API.","requestBody":{"required":true,"description":"\nThe password dictionary file can contain lines that are:\n1. comment lines - the first character is '#', can be 128 Unicode codepoints in length, and are ignored during processing\n2. empty lines\n3. locale line - the first line that starts with \"locale=\" is considered to be locale line, the rest are treated as normal content lines\n4. line containing the password dictionary word - it must start with non-whitespace character and only non-whitespace characters are allowed;\n maximum length of the line is 128 Unicode codepoints\n\n\nPassword dictionary file may not contain more than 2,500 lines (not counting whitespace lines, comment lines and locale line).\n Password dict file must contain UTF-8 characters only.\n\n# Sample password text file\n\n```\n\n# Password dictionary small test file\n\nlocale=en_US\n\n# Password dictionary prohibited words\n\nqwerty\nabcd\naaaaa\npassword\nqazxsws\n\n```","content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"Successfully updated."},"201":{"description":"Created."},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/password-dictionary","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update Password Dictionary","description":{"content":"This updates password dictionary for the organization.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["password-dictionary"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"multipart/form-data"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"formdata","formdata":[]}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Password Dictionary + + + +This updates password dictionary for the organization. +A token with ORG_ADMIN authority is required to call this API. + +
      Request Body required
      + + +The password dictionary file can contain lines that are: +1. comment lines - the first character is '#', can be 128 Unicode codepoints in length, and are ignored during processing +2. empty lines +3. locale line - the first line that starts with "locale=" is considered to be locale line, the rest are treated as normal content lines +4. line containing the password dictionary word - it must start with non-whitespace character and only non-whitespace characters are allowed; + maximum length of the line is 128 Unicode codepoints + + +Password dictionary file may not contain more than 2,500 lines (not counting whitespace lines, comment lines and locale line). + Password dict file must contain UTF-8 characters only. + +# Sample password text file + +``` + +# Password dictionary small test file + +locale=en_US + +# Password dictionary prohibited words + +qwerty +abcd +aaaaa +password +qazxsws + +``` + +
      + +Successfully updated. + +
      + +Created. + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-password-org-config.api.mdx b/docs/sailpoint-api-beta/update-password-org-config.api.mdx new file mode 100644 index 000000000..6be1addef --- /dev/null +++ b/docs/sailpoint-api-beta/update-password-org-config.api.mdx @@ -0,0 +1,55 @@ +--- +id: update-password-org-config +sidebar_label: Update Password Org Config +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updatePasswordOrgConfig","tags":["Password Configuration"],"description":"This API updates the password org config for specified fields. Other fields will keep original value. Requires ORG_ADMIN, API role or authorization scope of 'idn:password-org-config:write'","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"customInstructionsEnabled":{"type":"boolean","description":"Indicator whether custom password instructions feature is enabled. The default value is false."},"digitTokenEnabled":{"type":"boolean","description":"Indicator whether \"digit token\" feature is enabled. The default value is false.","example":true},"digitTokenDurationMinutes":{"type":"integer","description":"The duration of \"digit token\" in minutes. The default value is 5.","example":10},"digitTokenLength":{"type":"integer","description":"The length of \"digit token\". The default value is 6.","example":9}}},"example":{"digitTokenEnabled":true,"digitTokenDurationMinutes":12}}}},"responses":{"200":{"description":"Reference to the password org config.","content":{"application/json":{"schema":{"type":"object","properties":{"customInstructionsEnabled":{"type":"boolean","description":"Indicator whether custom password instructions feature is enabled. The default value is false."},"digitTokenEnabled":{"type":"boolean","description":"Indicator whether \"digit token\" feature is enabled. The default value is false.","example":true},"digitTokenDurationMinutes":{"type":"integer","description":"The duration of \"digit token\" in minutes. The default value is 5.","example":10},"digitTokenLength":{"type":"integer","description":"The length of \"digit token\". The default value is 6.","example":9}}},"example":{"customInstructionsEnabled":true,"digitTokenDurationMinutes":12,"digitTokenEnabled":true,"digitTokenLength":6}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/password-org-config","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"customInstructionsEnabled":true,"digitTokenEnabled":true,"digitTokenDurationMinutes":10,"digitTokenLength":9},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update Password Org Config","description":{"content":"This API updates the password org config for specified fields. Other fields will keep original value. Requires ORG_ADMIN, API role or authorization scope of 'idn:password-org-config:write'","type":"text/plain"},"url":{"path":["password-org-config"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Password Org Config + + + +This API updates the password org config for specified fields. Other fields will keep original value. Requires ORG_ADMIN, API role or authorization scope of 'idn:password-org-config:write' + +
      Request Body required
      + +Reference to the password org config. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-password-sync-group.api.mdx b/docs/sailpoint-api-beta/update-password-sync-group.api.mdx new file mode 100644 index 000000000..bc1790cae --- /dev/null +++ b/docs/sailpoint-api-beta/update-password-sync-group.api.mdx @@ -0,0 +1,79 @@ +--- +id: update-password-sync-group +sidebar_label: Update Password Sync Group by ID +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updatePasswordSyncGroup","tags":["Password Sync Groups"],"description":"This API updates the specified password sync group. A token with ORG_ADMIN authority is required to call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of password sync group to update.","example":"6881f631-3bd5-4213-9c75-8e05cc3e35dd"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the sync group","example":"6881f631-3bd5-4213-9c75-8e05cc3e35dd"},"name":{"description":"Name of the sync group","type":"string","example":"Password Sync Group 1"},"passwordPolicyId":{"type":"string","example":"2c91808d744ba0ce01746f93b6204501"},"sourceIds":{"type":"array","description":"List of password managed sources IDs","items":{"type":"string"},"example":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"]}}},"example":{"id":"6881f631-3bd5-4213-9c75-8e05cc3e35dd","name":"Password Sync Group 2","passwordPolicyId":"2c91808d744ba0ce01746f93b6204501","sourceIds":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"]}}}},"responses":{"200":{"description":"Reference to the password sync group.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the sync group","example":"6881f631-3bd5-4213-9c75-8e05cc3e35dd"},"name":{"description":"Name of the sync group","type":"string","example":"Password Sync Group 1"},"passwordPolicyId":{"type":"string","example":"2c91808d744ba0ce01746f93b6204501"},"sourceIds":{"type":"array","description":"List of password managed sources IDs","items":{"type":"string"},"example":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"]}}},"example":{"id":"6881f631-3bd5-4213-9c75-8e05cc3e35dd","name":"Password Sync Group 2","passwordPolicyId":"2c91808d744ba0ce01746f93b6204501","sourceIds":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/password-sync-groups/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"6881f631-3bd5-4213-9c75-8e05cc3e35dd","name":"Password Sync Group 1","passwordPolicyId":"2c91808d744ba0ce01746f93b6204501","sourceIds":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update Password Sync Group by ID","description":{"content":"This API updates the specified password sync group. A token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["password-sync-groups",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of password sync group to update.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Password Sync Group by ID + + + +This API updates the specified password sync group. A token with ORG_ADMIN authority is required to call this API. + +
      Path Parameters
      Request Body required
      + +Reference to the password sync group. + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-policy-by-id.api.mdx b/docs/sailpoint-api-beta/update-policy-by-id.api.mdx new file mode 100644 index 000000000..799c830d8 --- /dev/null +++ b/docs/sailpoint-api-beta/update-policy-by-id.api.mdx @@ -0,0 +1,104 @@ +--- +id: update-policy-by-id +sidebar_label: Update SOD Policy By ID +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updatePolicyById","tags":["SOD Policy"],"description":"This updates a specified SOD policy.\nRequires role of ORG_ADMIN.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the SOD policy to update.","example":"ef38f94347e94562b5bb8424a56397d8"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Policy id","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"name":{"type":"string","description":"Policy Business Name","example":"policy-xyz"},"created":{"type":"string","format":"date-time","description":"The time when this SOD policy is created.","example":"2020-01-01T00:00:00.000000Z"},"modified":{"type":"string","format":"date-time","description":"The time when this SOD policy is modified.","example":"2020-01-01T00:00:00.000000Z"},"description":{"type":"string","description":"Optional description of the SOD policy","example":"This policy ensures compliance of xyz"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"externalPolicyReference":{"type":"string","description":"Optional External Policy Reference","example":"XYZ policy"},"policyQuery":{"type":"string","description":"Search query of the SOD policy","example":"@access(id:0f11f2a4-7c94-4bf3-a2bd-742580fe3bdg) AND @access(id:0f11f2a4-7c94-4bf3-a2bd-742580fe3bdf)"},"compensatingControls":{"type":"string","description":"Optional compensating controls(Mitigating Controls)","example":"Have a manager review the transaction decisions for their \"out of compliance\" employee"},"correctionAdvice":{"type":"string","description":"Optional correction advice","example":"Based on the role of the employee, managers should remove access that is not required for their job function."},"state":{"type":"string","description":"whether the policy is enforced or not","enum":["ENFORCED","NOT_ENFORCED"],"example":"ENFORCED"},"tags":{"type":"array","description":"tags for this policy object","example":["TAG1","TAG2"],"items":{"type":"string"}},"creatorId":{"type":"string","description":"Policy's creator ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"modifierId":{"type":"string","description":"Policy's modifier ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","nullable":true},"violationOwnerAssignmentConfig":{"nullable":true,"type":"object","properties":{"assignmentRule":{"type":"string","enum":["MANAGER","STATIC"],"description":"Details about the violations owner.\nMANAGER - identity's manager\nSTATIC - Governance Group or Identity","example":"MANAGER"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}}},"scheduled":{"type":"boolean","description":"defines whether a policy has been scheduled or not","example":true},"type":{"type":"string","description":"whether a policy is query based or conflicting access based","default":"GENERAL","enum":["GENERAL","CONFLICTING_ACCESS_BASED"],"example":"GENERAL"},"conflictingAccessCriteria":{"nullable":true,"type":"object","properties":{"leftCriteria":{"type":"object","properties":{"name":{"type":"string","description":"Business name for the access construct list","example":"money-in"},"criteriaList":{"type":"array","description":"List of criteria. There is a min of 1 and max of 50 items in the list.","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"example":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66","name":"Administrator"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67","name":"Administrator"}]}}},"rightCriteria":{"type":"object","properties":{"name":{"type":"string","description":"Business name for the access construct list","example":"money-in"},"criteriaList":{"type":"array","description":"List of criteria. There is a min of 1 and max of 50 items in the list.","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"example":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66","name":"Administrator"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67","name":"Administrator"}]}}}}}}},"examples":{"Conflicting Access Based Policy":{"value":{"id":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","name":"Conflicting-Policy-Name","created":"2020-01-01T00:00:00.000000Z","modified":"2020-01-01T00:00:00.000000Z","description":"Modified Description","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"Owner Name"},"externalPolicyReference":"XYZ policy","compensatingControls":"Have a manager review the transaction decisions for their \"out of compliance\" employee","correctionAdvice":"Based on the role of the employee, managers should remove access that is not required for their job function.","state":"ENFORCED","tags":["string"],"creatorId":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","modifierId":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","violationOwnerAssignmentConfig":{"assignmentRule":"MANAGER","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"Violation Owner Name"}},"scheduled":true,"type":"CONFLICTING_ACCESS_BASED","conflictingAccessCriteria":{"leftCriteria":{"name":"money-in","criteriaList":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67"}]},"rightCriteria":{"name":"money-out","criteriaList":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a68"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a69"}]}}}},"General Policy":{"value":{"description":"Modified Description","ownerRef":{"type":"IDENTITY","id":"2c918087682f9a86016839c05e8f1aff","name":"Owner Name"},"externalPolicyReference":"New policy","policyQuery":"policy query implementation","compensatingControls":"Compensating controls","correctionAdvice":"Correction advice","tags":[],"state":"ENFORCED","scheduled":false,"creatorId":"2c918087682f9a86016839c05e8f1aff","modifierId":null,"violationOwnerAssignmentConfig":null,"type":"GENERAL","conflictingAccessCriteria":null,"id":"52c11db4-733e-4c31-949a-766c95ec95f1","name":"General-Policy-Name","created":"2020-05-12T19:47:38Z","modified":"2020-05-12T19:47:38Z"}}}}}},"responses":{"200":{"description":"SOD Policy by ID.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Policy id","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"name":{"type":"string","description":"Policy Business Name","example":"policy-xyz"},"created":{"type":"string","format":"date-time","description":"The time when this SOD policy is created.","example":"2020-01-01T00:00:00.000000Z"},"modified":{"type":"string","format":"date-time","description":"The time when this SOD policy is modified.","example":"2020-01-01T00:00:00.000000Z"},"description":{"type":"string","description":"Optional description of the SOD policy","example":"This policy ensures compliance of xyz"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"externalPolicyReference":{"type":"string","description":"Optional External Policy Reference","example":"XYZ policy"},"policyQuery":{"type":"string","description":"Search query of the SOD policy","example":"@access(id:0f11f2a4-7c94-4bf3-a2bd-742580fe3bdg) AND @access(id:0f11f2a4-7c94-4bf3-a2bd-742580fe3bdf)"},"compensatingControls":{"type":"string","description":"Optional compensating controls(Mitigating Controls)","example":"Have a manager review the transaction decisions for their \"out of compliance\" employee"},"correctionAdvice":{"type":"string","description":"Optional correction advice","example":"Based on the role of the employee, managers should remove access that is not required for their job function."},"state":{"type":"string","description":"whether the policy is enforced or not","enum":["ENFORCED","NOT_ENFORCED"],"example":"ENFORCED"},"tags":{"type":"array","description":"tags for this policy object","example":["TAG1","TAG2"],"items":{"type":"string"}},"creatorId":{"type":"string","description":"Policy's creator ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"modifierId":{"type":"string","description":"Policy's modifier ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","nullable":true},"violationOwnerAssignmentConfig":{"nullable":true,"type":"object","properties":{"assignmentRule":{"type":"string","enum":["MANAGER","STATIC"],"description":"Details about the violations owner.\nMANAGER - identity's manager\nSTATIC - Governance Group or Identity","example":"MANAGER"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}}},"scheduled":{"type":"boolean","description":"defines whether a policy has been scheduled or not","example":true},"type":{"type":"string","description":"whether a policy is query based or conflicting access based","default":"GENERAL","enum":["GENERAL","CONFLICTING_ACCESS_BASED"],"example":"GENERAL"},"conflictingAccessCriteria":{"nullable":true,"type":"object","properties":{"leftCriteria":{"type":"object","properties":{"name":{"type":"string","description":"Business name for the access construct list","example":"money-in"},"criteriaList":{"type":"array","description":"List of criteria. There is a min of 1 and max of 50 items in the list.","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"example":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66","name":"Administrator"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67","name":"Administrator"}]}}},"rightCriteria":{"type":"object","properties":{"name":{"type":"string","description":"Business name for the access construct list","example":"money-in"},"criteriaList":{"type":"array","description":"List of criteria. There is a min of 1 and max of 50 items in the list.","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"example":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66","name":"Administrator"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67","name":"Administrator"}]}}}}}}},"examples":{"Conflicting Access Based Policy":{"value":{"id":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","name":"Conflicting-Policy-Name","created":"2020-01-01T00:00:00.000000Z","modified":"2020-01-01T00:00:00.000000Z","description":"Modified description","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"Owner Name"},"externalPolicyReference":"XYZ policy","policyQuery":"@access(id:2c9180866166b5b0016167c32ef31a66 OR id:2c9180866166b5b0016167c32ef31a67) AND @access(id:2c9180866166b5b0016167c32ef31a68 OR id:2c9180866166b5b0016167c32ef31a69)","compensatingControls":"Have a manager review the transaction decisions for their \"out of compliance\" employee","correctionAdvice":"Based on the role of the employee, managers should remove access that is not required for their job function.","state":"ENFORCED","tags":["string"],"creatorId":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","modifierId":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","violationOwnerAssignmentConfig":{"assignmentRule":"MANAGER","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"Violation Owner Name"}},"scheduled":true,"type":"CONFLICTING_ACCESS_BASED","conflictingAccessCriteria":{"leftCriteria":{"name":"money-in","criteriaList":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67"}]},"rightCriteria":{"name":"money-out","criteriaList":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a68"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a69"}]}}}},"General Policy":{"value":{"description":"Modified Description","ownerRef":{"type":"IDENTITY","id":"2c918087682f9a86016839c05e8f1aff","name":"Owner Name"},"externalPolicyReference":"New policy","policyQuery":"policy query implementation","compensatingControls":"Compensating controls","correctionAdvice":"Correction advice","tags":[],"state":"ENFORCED","scheduled":false,"creatorId":"2c918087682f9a86016839c05e8f1aff","modifierId":null,"violationOwnerAssignmentConfig":null,"type":"GENERAL","conflictingAccessCriteria":null,"id":"52c11db4-733e-4c31-949a-766c95ec95f1","name":"General-Policy-Name","created":"2020-05-12T19:47:38Z","modified":"2020-05-12T19:47:38Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/sod-policies/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","name":"policy-xyz","created":"2020-01-01T00:00:00.000000Z","modified":"2020-01-01T00:00:00.000000Z","description":"This policy ensures compliance of xyz","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"externalPolicyReference":"XYZ policy","policyQuery":"@access(id:0f11f2a4-7c94-4bf3-a2bd-742580fe3bdg) AND @access(id:0f11f2a4-7c94-4bf3-a2bd-742580fe3bdf)","compensatingControls":"Have a manager review the transaction decisions for their \"out of compliance\" employee","correctionAdvice":"Based on the role of the employee, managers should remove access that is not required for their job function.","state":"ENFORCED","tags":["TAG1","TAG2"],"creatorId":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","modifierId":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","violationOwnerAssignmentConfig":{"assignmentRule":"MANAGER","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}},"scheduled":true,"type":"GENERAL","conflictingAccessCriteria":{"leftCriteria":{"name":"money-in","criteriaList":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66","name":"Administrator"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67","name":"Administrator"}]},"rightCriteria":{"name":"money-in","criteriaList":[{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a66","name":"Administrator"},{"type":"ENTITLEMENT","id":"2c9180866166b5b0016167c32ef31a67","name":"Administrator"}]}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update SOD Policy By ID","description":{"content":"This updates a specified SOD policy.\nRequires role of ORG_ADMIN.","type":"text/plain"},"url":{"path":["sod-policies",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the SOD policy to update.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update SOD Policy By ID + + + +This updates a specified SOD policy. +Requires role of ORG_ADMIN. + +
      Path Parameters
      Request Body required
        ownerRef object
        violationOwnerAssignmentConfig object
        ownerRef object
        conflictingAccessCriteria object
        leftCriteria object
        criteriaList object[]
        + +List of criteria. There is a min of 1 and max of 50 items in the list. + +
        rightCriteria object
        criteriaList object[]
        + +List of criteria. There is a min of 1 and max of 50 items in the list. + +
      + +SOD Policy by ID. + +
      Schema
        ownerRef object
        violationOwnerAssignmentConfig object
        ownerRef object
        conflictingAccessCriteria object
        leftCriteria object
        criteriaList object[]
        + +List of criteria. There is a min of 1 and max of 50 items in the list. + +
        rightCriteria object
        criteriaList object[]
        + +List of criteria. There is a min of 1 and max of 50 items in the list. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-policy-schedule-by-id.api.mdx b/docs/sailpoint-api-beta/update-policy-schedule-by-id.api.mdx new file mode 100644 index 000000000..64ef037e2 --- /dev/null +++ b/docs/sailpoint-api-beta/update-policy-schedule-by-id.api.mdx @@ -0,0 +1,114 @@ +--- +id: update-policy-schedule-by-id +sidebar_label: Update SOD Policy schedule +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updatePolicyScheduleById","tags":["SOD Policy"],"description":"This updates schedule for a specified SOD policy.\nRequires role of ORG_ADMIN","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the SOD policy to update its schedule.","example":"ef38f94347e94562b5bb8424a56397d8"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"SOD Policy schedule name","example":"SCH-1584312283015"},"created":{"type":"string","format":"date-time","description":"The time when this SOD policy schedule is created.","example":"2020-01-01T00:00:00.000000Z"},"modified":{"type":"string","format":"date-time","description":"The time when this SOD policy schedule is modified.","example":"2020-01-01T00:00:00.000000Z"},"description":{"type":"string","description":"SOD Policy schedule description","example":"Schedule for policy xyz"},"schedule":{"type":"object","description":"The schedule information.\n","properties":{"type":{"description":"Enum representing the currently supported schedule types.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["DAILY","WEEKLY","MONTHLY","CALENDAR"],"example":"WEEKLY"},"months":{"description":"The months selected.","type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"days":{"description":"The days selected.\n","example":{"type":"LIST","values":["MON","WED","FRI"]},"type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"hours":{"description":"The hours selected.\n","example":{"type":"RANGE","values":["9","18"],"interval":3},"type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"expiration":{"description":"The schedule expiration date. Latest possible expiration date is '2038-01-19T03:14:07+0000'\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"timeZoneId":{"description":"The ID of the time zone for the schedule.\n","type":"string","example":"GMT-06:00"}},"required":["type","hours"]},"recipients":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}},"emailEmptyResults":{"type":"boolean","description":"Indicates if empty results need to be emailed","example":false},"creatorId":{"type":"string","description":"Policy's creator ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"modifierId":{"type":"string","description":"Policy's modifier ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"}}}}}},"responses":{"200":{"description":"SOD Policy by ID.","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"SOD Policy schedule name","example":"SCH-1584312283015"},"created":{"type":"string","format":"date-time","description":"The time when this SOD policy schedule is created.","example":"2020-01-01T00:00:00.000000Z"},"modified":{"type":"string","format":"date-time","description":"The time when this SOD policy schedule is modified.","example":"2020-01-01T00:00:00.000000Z"},"description":{"type":"string","description":"SOD Policy schedule description","example":"Schedule for policy xyz"},"schedule":{"type":"object","description":"The schedule information.\n","properties":{"type":{"description":"Enum representing the currently supported schedule types.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["DAILY","WEEKLY","MONTHLY","CALENDAR"],"example":"WEEKLY"},"months":{"description":"The months selected.","type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"days":{"description":"The days selected.\n","example":{"type":"LIST","values":["MON","WED","FRI"]},"type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"hours":{"description":"The hours selected.\n","example":{"type":"RANGE","values":["9","18"],"interval":3},"type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"expiration":{"description":"The schedule expiration date. Latest possible expiration date is '2038-01-19T03:14:07+0000'\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"timeZoneId":{"description":"The ID of the time zone for the schedule.\n","type":"string","example":"GMT-06:00"}},"required":["type","hours"]},"recipients":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}},"emailEmptyResults":{"type":"boolean","description":"Indicates if empty results need to be emailed","example":false},"creatorId":{"type":"string","description":"Policy's creator ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"modifierId":{"type":"string","description":"Policy's modifier ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/sod-policies/{id}/schedule","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"SCH-1584312283015","created":"2020-01-01T00:00:00.000000Z","modified":"2020-01-01T00:00:00.000000Z","description":"Schedule for policy xyz","schedule":{"type":"WEEKLY","months":{"type":"LIST","values":["MON","WED"],"interval":3},"days":{"type":"LIST","values":["MON","WED","FRI"]},"hours":{"type":"RANGE","values":["9","18"],"interval":3},"expiration":"2018-06-25T20:22:28.104Z","timeZoneId":"GMT-06:00"},"recipients":[{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}],"emailEmptyResults":false,"creatorId":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde","modifierId":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update SOD Policy schedule","description":{"content":"This updates schedule for a specified SOD policy.\nRequires role of ORG_ADMIN","type":"text/plain"},"url":{"path":["sod-policies",":id","schedule"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the SOD policy to update its schedule.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update SOD Policy schedule + + + +This updates schedule for a specified SOD policy. +Requires role of ORG_ADMIN + +
      Path Parameters
      Request Body required
        schedule object
        + +The schedule information. + + +
        months object
        + +The months selected. + +
        days object
        + +The days selected. + + +
        hours object
        + +The hours selected. + + +
        recipients object[]
      + +SOD Policy by ID. + +
      Schema
        schedule object
        + +The schedule information. + + +
        months object
        + +The months selected. + +
        days object
        + +The days selected. + + +
        hours object
        + +The hours selected. + + +
        recipients object[]
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-provisioning-policy.api.mdx b/docs/sailpoint-api-beta/update-provisioning-policy.api.mdx new file mode 100644 index 000000000..218ead801 --- /dev/null +++ b/docs/sailpoint-api-beta/update-provisioning-policy.api.mdx @@ -0,0 +1,96 @@ +--- +id: update-provisioning-policy +sidebar_label: Partial update of Provisioning Policy +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updateProvisioningPolicy","tags":["Sources"],"description":"This API selectively updates an existing Provisioning Policy using a JSONPatch payload.\nA token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:provisioning-policy:update"]}],"parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source id.","example":"2c9180835d191a86015d28455b4a2329"},{"in":"path","name":"usageType","required":true,"schema":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"description":"The type of ProvisioningPolicy usage."}],"requestBody":{"required":true,"description":"The JSONPatch payload used to update the schema.","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}}}}},"responses":{"200":{"description":"The ProvisioningPolicyDto was successfully updated.","content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"usageType":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"userName"},"transform":{"type":"object","description":"The transform to apply to the field","example":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"default":{}},"attributes":{"type":"object","description":"Attributes required for the transform","example":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"}},"isRequired":{"type":"boolean","readOnly":true,"description":"Flag indicating whether or not the attribute is required.","default":false,"example":false},"type":{"type":"string","description":"The type of the attribute.","example":"string"},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","default":false,"example":false}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/sources/{sourceId}/provisioning-policies/{usageType}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Partial update of Provisioning Policy","description":{"content":"This API selectively updates an existing Provisioning Policy using a JSONPatch payload.\nA token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":sourceId","provisioning-policies",":usageType"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id.","type":"text/plain"},"type":"any","value":"","key":"sourceId"},{"disabled":false,"description":{"content":"(Required) The type of ProvisioningPolicy usage.","type":"text/plain"},"type":"any","value":"","key":"usageType"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Partial update of Provisioning Policy + + + +This API selectively updates an existing Provisioning Policy using a JSONPatch payload. +A token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + +
      Path Parameters
      Request Body array required
      + +The JSONPatch payload used to update the schema. + +
        value object
        + +The value to be used for the operation, required for "add" and "replace" operations + +
      • anyOf
      • string
      • integer
      • anyOf
      • string
      • integer
      + +The ProvisioningPolicyDto was successfully updated. + +
      Schema
        fields object[]
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-public-identity-config.api.mdx b/docs/sailpoint-api-beta/update-public-identity-config.api.mdx new file mode 100644 index 000000000..9730cd19b --- /dev/null +++ b/docs/sailpoint-api-beta/update-public-identity-config.api.mdx @@ -0,0 +1,71 @@ +--- +id: update-public-identity-config +sidebar_label: Update Public Identity Config +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updatePublicIdentityConfig","tags":["Public Identity Config"],"description":"This updates the details of public identity config.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Details of up to 5 Identity attributes that will be publicly accessible for all Identities to anyone in the org","properties":{"attributes":{"type":"array","items":{"type":"object","description":"Used to map an attribute key for an Identity to its display name.","properties":{"key":{"type":"string","description":"the key of the attribute","example":"country"},"name":{"type":"string","description":"the display name of the attribute","example":"Country"}}}},"modifiedBy":{"type":"object","nullable":true,"description":"The manager for the identity.","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of identity.","example":"Thomas Edison"}}},"modified":{"type":"string","description":"the date/time of the modification","format":"date-time","example":"2018-06-25T20:22:28.104Z"}}}}}},"responses":{"200":{"description":"Request succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Details of up to 5 Identity attributes that will be publicly accessible for all Identities to anyone in the org","properties":{"attributes":{"type":"array","items":{"type":"object","description":"Used to map an attribute key for an Identity to its display name.","properties":{"key":{"type":"string","description":"the key of the attribute","example":"country"},"name":{"type":"string","description":"the display name of the attribute","example":"Country"}}}},"modifiedBy":{"type":"object","nullable":true,"description":"The manager for the identity.","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of identity.","example":"Thomas Edison"}}},"modified":{"type":"string","description":"the date/time of the modification","format":"date-time","example":"2018-06-25T20:22:28.104Z"}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/public-identities-config","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"attributes":[{"key":"country","name":"Country"}],"modifiedBy":{"type":"IDENTITY","id":"2c9180a46faadee4016fb4e018c20639","name":"Thomas Edison"},"modified":"2018-06-25T20:22:28.104Z"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update Public Identity Config","description":{"content":"This updates the details of public identity config.","type":"text/plain"},"url":{"path":["public-identities-config"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Public Identity Config + + + +This updates the details of public identity config. + +
      Request Body required
        attributes object[]
        modifiedBy object
        + +The manager for the identity. + +
      + +Request succeeded. + +
      Schema
        attributes object[]
        modifiedBy object
        + +The manager for the identity. + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-recommendations-config.api.mdx b/docs/sailpoint-api-beta/update-recommendations-config.api.mdx new file mode 100644 index 000000000..0db1d66e2 --- /dev/null +++ b/docs/sailpoint-api-beta/update-recommendations-config.api.mdx @@ -0,0 +1,71 @@ +--- +id: update-recommendations-config +sidebar_label: Update certification recommendation config values +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updateRecommendationsConfig","tags":["IAI Recommendations"],"description":"Updates configuration attributes used by certification recommendations.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"recommenderFeatures":{"type":"array","items":{"type":"string"},"description":"List of identity attributes to use for calculating certification recommendations","example":["jobTitle","location","peer_group","department","active"]},"peerGroupPercentageThreshold":{"type":"number","description":"The percent value that the recommendation calculation must surpass to produce a YES recommendation","minimum":0,"maximum":1,"example":0.5},"forceRefresh":{"type":"boolean","description":"If true, rulesRecommenderConfig will be refreshed with new programatically selected attribute and threshold values on the next pipeline run","example":false}}}}}},"responses":{"200":{"description":"Cert recommendation configuration attributes after update","content":{"application/json":{"schema":{"type":"object","properties":{"recommenderFeatures":{"type":"array","items":{"type":"string"},"description":"List of identity attributes to use for calculating certification recommendations","example":["jobTitle","location","peer_group","department","active"]},"peerGroupPercentageThreshold":{"type":"number","description":"The percent value that the recommendation calculation must surpass to produce a YES recommendation","minimum":0,"maximum":1,"example":0.5},"forceRefresh":{"type":"boolean","description":"If true, rulesRecommenderConfig will be refreshed with new programatically selected attribute and threshold values on the next pipeline run","example":false}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":[]}],"method":"put","path":"/recommendations/config","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"recommenderFeatures":["jobTitle","location","peer_group","department","active"],"peerGroupPercentageThreshold":0.5,"forceRefresh":false},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update certification recommendation config values","description":{"content":"Updates configuration attributes used by certification recommendations.","type":"text/plain"},"url":{"path":["recommendations","config"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update certification recommendation config values + + + +Updates configuration attributes used by certification recommendations. + +
      Request Body required
      + +Cert recommendation configuration attributes after update + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-schema.api.mdx b/docs/sailpoint-api-beta/update-schema.api.mdx new file mode 100644 index 000000000..f35b6e50c --- /dev/null +++ b/docs/sailpoint-api-beta/update-schema.api.mdx @@ -0,0 +1,107 @@ +--- +id: update-schema +sidebar_label: Update Source Schema (Partial) +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updateSchema","tags":["Sources"],"description":"This API can be used to selectively update an existing Schema using a JSONPatch payload. Some fields of the Schema cannot be updated. These fields are listed below.\n* id\n* name\n* created\n* modified","parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source id.","example":"2c9180835d191a86015d28455b4a2329"},{"in":"path","name":"schemaId","schema":{"type":"string"},"required":true,"description":"The Schema id.","example":"2c9180835d191a86015d28455b4a2329"}],"requestBody":{"required":true,"description":"The JSONPatch payload used to update the schema.","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}},"example":[{"op":"replace","path":"/displayAttribute","value":{"new-display-attribute":null}}]}}},"responses":{"200":{"description":"The Schema was successfully updated.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Schema.","example":"2c9180835d191a86015d28455b4a2329"},"name":{"type":"string","description":"The name of the Schema.","example":"account"},"nativeObjectType":{"type":"string","description":"The name of the object type on the native system that the schema represents.","example":"User"},"identityAttribute":{"type":"string","description":"The name of the attribute used to calculate the unique identifier for an object in the schema.","example":"sAMAccountName"},"displayAttribute":{"type":"string","description":"The name of the attribute used to calculate the display value for an object in the schema.","example":"distinguishedName"},"hierarchyAttribute":{"type":"string","description":"The name of the attribute whose values represent other objects in a hierarchy. Only relevant to group schemas.","example":"memberOf"},"includePermissions":{"type":"boolean","description":"Flag indicating whether or not the include permissions with the object data when aggregating the schema.","example":false},"features":{"type":"array","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"description":"The features that the schema supports.","example":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"]},"configuration":{"type":"object","description":"Holds any extra configuration data that the schema may require.","example":{"groupMemberAttribute":"member"}},"attributes":{"type":"array","description":"The attribute definitions which form the schema.","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"sAMAccountName"},"type":{"description":"The type of the attribute.","example":"string","type":"string","enum":["STRING","LONG","INT","BOOLEAN"]},"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"A reference to the schema on the source to which the values of the attribute map.","example":{"type":"CONNECTOR_SCHEMA","id":"2c9180866166b5b0016167c32ef31a66","name":"group"}},"description":{"type":"string","description":"A human-readable description of the attribute."},"isMulti":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","example":false},"isEntitlement":{"type":"boolean","description":"Flag indicating whether or not the attribute is an entitlement.","example":false},"isGroup":{"type":"boolean","description":"Unmodifiable flag indicating whether or not the attribute represents a group.","example":false,"readOnly":true}}},"example":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}]},"created":{"type":"string","description":"The date the Schema was created.","format":"date-time","example":"2019-12-24T22:32:58.104Z"},"modified":{"type":"string","description":"The date the Schema was last modified.","format":"date-time","example":"2019-12-31T20:22:28.104Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/sources/{sourceId}/schemas/{schemaId}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update Source Schema (Partial)","description":{"content":"This API can be used to selectively update an existing Schema using a JSONPatch payload. Some fields of the Schema cannot be updated. These fields are listed below.\n* id\n* name\n* created\n* modified","type":"text/plain"},"url":{"path":["sources",":sourceId","schemas",":schemaId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id.","type":"text/plain"},"type":"any","value":"","key":"sourceId"},{"disabled":false,"description":{"content":"(Required) The Schema id.","type":"text/plain"},"type":"any","value":"","key":"schemaId"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Source Schema (Partial) + + + +This API can be used to selectively update an existing Schema using a JSONPatch payload. Some fields of the Schema cannot be updated. These fields are listed below. +* id +* name +* created +* modified + +
      Path Parameters
      Request Body array required
      + +The JSONPatch payload used to update the schema. + +
        value object
        + +The value to be used for the operation, required for "add" and "replace" operations + +
      • anyOf
      • string
      • integer
      • anyOf
      • string
      • integer
      + +The Schema was successfully updated. + +
      Schema
        attributes object[]
        + +The attribute definitions which form the schema. + +
        schema object
        + +A reference to the schema on the source to which the values of the attribute map. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-service-desk-integration.api.mdx b/docs/sailpoint-api-beta/update-service-desk-integration.api.mdx new file mode 100644 index 000000000..41aeb5aa9 --- /dev/null +++ b/docs/sailpoint-api-beta/update-service-desk-integration.api.mdx @@ -0,0 +1,147 @@ +--- +id: update-service-desk-integration +sidebar_label: Update a Service Desk integration by ID +hide_title: true +hide_table_of_contents: true +api: {"tags":["Service Desk Integration"],"description":"Update an existing Service Desk integration by ID with updated value in JSON form as the request body. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","operationId":"updateServiceDeskIntegration","parameters":[{"name":"id","in":"path","description":"ID of the Service Desk integration to update","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"anId"}}],"requestBody":{"description":"The specifics of the integration to update","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","format":"date-time","readOnly":true,"example":true},"modified":{"description":"Last modification date of the Object","type":"string","format":"date-time","readOnly":true,"example":true}}},{"type":"object","description":"Specification of a Service Desk integration","required":["description","type","attributes"],"properties":{"description":{"description":"Description of the Service Desk integration","type":"string","example":"A very nice Service Desk integration"},"type":{"description":"Type of the Service Desk integration","type":"string","default":"ServiceNowSDIM"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the identity that is the owner of this Service Desk integration","default":{"type":"IDENTITY"}},"clusterRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the source cluster for this Service Desk integration","default":{"type":"CLUSTER"}},"cluster":{"description":"ID of the cluster for the Service Desk integration (replaced by clusterRef, retained for backward compatibility)","type":"string","example":"xyzzy999","deprecated":true},"managedSources":{"description":"Source IDs for the Service Desk integration (replaced by provisioningConfig.managedSResourceRefs, but retained here for backward compatibility)","type":"array","items":{"type":"string"},"deprecated":true},"provisioningConfig":{"description":"The 'provisioningConfig' property specifies the configuration used to provision integrations.","type":"object","properties":{"universalManager":{"description":"Specifies whether this configuration is used to manage provisioning requests for all sources from the org. If true, no managedResourceRefs are allowed.","type":"boolean","readOnly":true},"managedResourceRefs":{"description":"References to sources for the Service Desk integration template. May only be specified if universalManager is false.","type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"default":{"type":"SOURCE"}}},"planInitializerScript":{"description":"This is a reference to a plan initializer script.","type":"object","properties":{"source":{"description":"This is a Rule that allows provisioning instruction changes.","type":"string"}}}}},"attributes":{"description":"Attributes of the Service Desk integration. Validation constraints enforced by the implementation.","type":"object","additionalProperties":true},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to beforeProvisioningRule for this Service Desk integration","default":{"type":"RULE"}}}}]}}},"required":true},"responses":{"200":{"description":"ServiceDeskIntegrationDto as updated","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","format":"date-time","readOnly":true,"example":true},"modified":{"description":"Last modification date of the Object","type":"string","format":"date-time","readOnly":true,"example":true}}},{"type":"object","description":"Specification of a Service Desk integration","required":["description","type","attributes"],"properties":{"description":{"description":"Description of the Service Desk integration","type":"string","example":"A very nice Service Desk integration"},"type":{"description":"Type of the Service Desk integration","type":"string","default":"ServiceNowSDIM"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the identity that is the owner of this Service Desk integration","default":{"type":"IDENTITY"}},"clusterRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the source cluster for this Service Desk integration","default":{"type":"CLUSTER"}},"cluster":{"description":"ID of the cluster for the Service Desk integration (replaced by clusterRef, retained for backward compatibility)","type":"string","example":"xyzzy999","deprecated":true},"managedSources":{"description":"Source IDs for the Service Desk integration (replaced by provisioningConfig.managedSResourceRefs, but retained here for backward compatibility)","type":"array","items":{"type":"string"},"deprecated":true},"provisioningConfig":{"description":"The 'provisioningConfig' property specifies the configuration used to provision integrations.","type":"object","properties":{"universalManager":{"description":"Specifies whether this configuration is used to manage provisioning requests for all sources from the org. If true, no managedResourceRefs are allowed.","type":"boolean","readOnly":true},"managedResourceRefs":{"description":"References to sources for the Service Desk integration template. May only be specified if universalManager is false.","type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"default":{"type":"SOURCE"}}},"planInitializerScript":{"description":"This is a reference to a plan initializer script.","type":"object","properties":{"source":{"description":"This is a Rule that allows provisioning instruction changes.","type":"string"}}}}},"attributes":{"description":"Attributes of the Service Desk integration. Validation constraints enforced by the implementation.","type":"object","additionalProperties":true},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to beforeProvisioningRule for this Service Desk integration","default":{"type":"RULE"}}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:service-desk-admin:write","idn:service-desk-integration:write"]}],"method":"put","path":"/service-desk-integrations/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"aName","description":"A very nice Service Desk integration","type":"ServiceNowSDIM","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"clusterRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"provisioningConfig":{"managedResourceRefs":[{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}],"planInitializerScript":{"source":"string"}},"attributes":{},"beforeProvisioningRule":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update a Service Desk integration by ID","description":{"content":"Update an existing Service Desk integration by ID with updated value in JSON form as the request body. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","type":"text/plain"},"url":{"path":["service-desk-integrations",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the Service Desk integration to update","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update a Service Desk integration by ID + + + +Update an existing Service Desk integration by ID with updated value in JSON form as the request body. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + +
      Path Parameters
      Request Body required
      + +The specifics of the integration to update + +
        ownerRef object
        + +Reference to the identity that is the owner of this Service Desk integration + +
        clusterRef object
        + +Reference to the source cluster for this Service Desk integration + +
        provisioningConfig object
        + +The 'provisioningConfig' property specifies the configuration used to provision integrations. + +
        managedResourceRefs object[]
        + +References to sources for the Service Desk integration template. May only be specified if universalManager is false. + +
        planInitializerScript object
        + +This is a reference to a plan initializer script. + +
        attributes object
        + +Attributes of the Service Desk integration. Validation constraints enforced by the implementation. + +
        beforeProvisioningRule object
        + +Reference to beforeProvisioningRule for this Service Desk integration + +
      + +ServiceDeskIntegrationDto as updated + +
      Schema
        ownerRef object
        + +Reference to the identity that is the owner of this Service Desk integration + +
        clusterRef object
        + +Reference to the source cluster for this Service Desk integration + +
        provisioningConfig object
        + +The 'provisioningConfig' property specifies the configuration used to provision integrations. + +
        managedResourceRefs object[]
        + +References to sources for the Service Desk integration template. May only be specified if universalManager is false. + +
        planInitializerScript object
        + +This is a reference to a plan initializer script. + +
        attributes object
        + +Attributes of the Service Desk integration. Validation constraints enforced by the implementation. + +
        beforeProvisioningRule object
        + +Reference to beforeProvisioningRule for this Service Desk integration + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-source.api.mdx b/docs/sailpoint-api-beta/update-source.api.mdx new file mode 100644 index 000000000..ff7de7e4c --- /dev/null +++ b/docs/sailpoint-api-beta/update-source.api.mdx @@ -0,0 +1,152 @@ +--- +id: update-source +sidebar_label: Update Source (Partial) +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updateSource","tags":["Sources"],"description":"This API partially updates a source in IdentityNow, using a list of patch operations according to the\n[JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\n\nSome fields are immutable and cannot be changed, such as:\n\n* id\n* type\n* authoritative\n* created\n* modified\n* connector\n* connectorClass\n* passwordPolicies\n\nAttempts to modify these fields will result in a 400 error.\n\nA token with ORG_ADMIN, SOURCE_ADMIN, SOURCE_SUBADMIN, or API authority is required to call this API.\n","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The Source id","example":"2c9180835d191a86015d28455b4a2329"}],"requestBody":{"required":true,"description":"A list of account update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. Any password changes are submitted as plain-text and encrypted upon receipt in IdentityNow.","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}},"examples":{"Edit the source description":{"description":"This example shows how to edit a source description.","value":[{"op":"replace","path":"/description","value":"new description"}]},"Edit the source cluster":{"description":"This example shows how to edit a source cluster by id.","value":[{"op":"replace","path":"/cluster/id","value":"2c918087813a902001813f3f85736b45"}]},"Edit source features":{"description":"This example illustrates how you can update source supported features","value":[{"op":"replace","path":"/features","value":["PASSWORD","PROVISIONING","ENABLE","AUTHENTICATE"]}]},"Change a source description and cluster in One Call":{"description":"This example shows how multiple fields may be updated with a single patch call.","value":[{"op":"replace","path":"/description","value":"new description"},{"op":"replace","path":"/cluster/id","value":"2c918087813a902001813f3f85736b45"}]},"Add a filter string to the connector":{"description":"This example shows how you can add a filter to incoming accounts during the account aggregation process. In the example below, any account that does not have an \"m\" or \"d\" in the id will be aggregated.","value":[{"op":"add","path":"/connectorAttributes/filterString","value":"!( id.contains( \"m\" ) ) || !( id.contains( \"d\" ) )"}]},"Update connector attribute for specific operation type":{"description":"This example shows how you can update the 3rd object in the connection parameters operationType. This will change it from a standard group aggregation to a group aggregation on the \"test\" entitlement type","value":[{"op":"replace","path":"/connectorAttributes/connectionParameters/2/operationType","value":"Group Aggregation-test"}]}}}}},"responses":{"200":{"description":"Updated Source object. Any passwords will only show the the encrypted cipher-text, as they are not decrypt-able in IdentityNow cloud-based services, per IdentityNow security design.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"the id of the Source","example":"2c91808568c529c60168cca6f90c1324"},"description":{"type":"string","description":"Human-readable description of the source","example":"This is the corporate directory."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to an owning Identity Object"},"cluster":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the associated Cluster","example":{"type":"CLUSTER","id":"2c9180866166b5b0016167c32ef31a66","name":"Corporate Cluster"}},"accountCorrelationConfig":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Correlation Config object","example":{"type":"ACCOUNT_CORRELATION_CONFIG","id":"2c9180855d191c59015d28583727245a","name":"Directory [source-62867] Account Correlation"}},"accountCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used."},"managerCorrelationMapping":{"description":"Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity","type":"object","properties":{"accountAttribute":{"type":"string","description":"Name of the attribute to use for manager correlation. The value found on the account attribute will be used to lookup the manager's identity.","example":"manager"},"identityAttribute":{"type":"string","description":"Name of the identity attribute to search when trying to find a manager using the value from the accountAttribute.","example":"manager"}}},"managerCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient."},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called."},"schemas":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to Schema objects","example":[{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232a","name":"account"},{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232b","name":"group"}]},"passwordPolicies":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to the associated PasswordPolicy objects.","example":[{"type":"PASSWORD_POLICY","id":"2c9180855d191c59015d291ceb053980","name":"Corporate Password Policy"}]},"features":{"type":"array","description":"Optional features that can be supported by a source.","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"example":["SYNC_PROVISIONING","MANAGER_LOOKUP","SEARCH","PROVISIONING","AUTHENTICATE","GROUP_PROVISIONING","PASSWORD"]},"type":{"type":"string","description":"Specifies the type of system being managed e.g. Active Directory, Workday, etc..","example":"OpenLDAP - Direct"},"connector":{"type":"string","description":"Connector script name.","example":"active-directory"},"connectorClass":{"type":"string","description":"The fully qualified name of the Java class that implements the connector interface.","example":"sailpoint.connector.LDAPConnector"},"connectorAttributes":{"type":"object","description":"Connector specific configuration; will differ from type to type.","example":{"healthCheckTimeout":30,"authSearchAttributes":["cn","uid","mail"]}},"deleteThreshold":{"type":"integer","format":"int32","description":"Number from 0 to 100 that specifies when to skip the delete phase.","example":10},"authoritative":{"type":"boolean","description":"When true indicates the source is referenced by an IdentityProfile.","example":false},"managementWorkgroup":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to Management Workgroup for this Source"},"healthy":{"type":"boolean","description":"When true indicates a healthy source","example":true},"status":{"type":"string","description":"A status identifier, giving specific information on why a source is healthy or not","example":"SOURCE_STATE_HEALTHY"},"since":{"type":"string","description":"Timestamp showing when a source health check was last performed","example":"2021-09-28T15:48:29.3801666300Z"},"connectorId":{"type":"string","description":"The id of connector","example":"active-directory"},"connectorName":{"type":"string","description":"The name of the connector that was chosen on source creation","example":"Active Directory"},"connectionType":{"type":"string","description":"The type of connection (direct or file)","example":"file"},"connectorImplementstionId":{"type":"string","description":"The connector implementstion id","example":"delimited-file"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/sources/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update Source (Partial)","description":{"content":"This API partially updates a source in IdentityNow, using a list of patch operations according to the\n[JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\n\nSome fields are immutable and cannot be changed, such as:\n\n* id\n* type\n* authoritative\n* created\n* modified\n* connector\n* connectorClass\n* passwordPolicies\n\nAttempts to modify these fields will result in a 400 error.\n\nA token with ORG_ADMIN, SOURCE_ADMIN, SOURCE_SUBADMIN, or API authority is required to call this API.\n","type":"text/plain"},"url":{"path":["sources",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Source (Partial) + + + +This API partially updates a source in IdentityNow, using a list of patch operations according to the +[JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + +Some fields are immutable and cannot be changed, such as: + +* id +* type +* authoritative +* created +* modified +* connector +* connectorClass +* passwordPolicies + +Attempts to modify these fields will result in a 400 error. + +A token with ORG_ADMIN, SOURCE_ADMIN, SOURCE_SUBADMIN, or API authority is required to call this API. + + +
      Path Parameters
      Request Body array required
      + +A list of account update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. Any password changes are submitted as plain-text and encrypted upon receipt in IdentityNow. + +
        value object
        + +The value to be used for the operation, required for "add" and "replace" operations + +
      • anyOf
      • string
      • integer
      • anyOf
      • string
      • integer
      + +Updated Source object. Any passwords will only show the the encrypted cipher-text, as they are not decrypt-able in IdentityNow cloud-based services, per IdentityNow security design. + +
      Schema
        owner object
        + +Reference to an owning Identity Object + +
        cluster object
        + +Reference to the associated Cluster + +
        accountCorrelationConfig object
        + +Reference to a Correlation Config object + +
        accountCorrelationRule object
        + +Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used. + +
        managerCorrelationMapping object
        + +Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity + +
        managerCorrelationRule object
        + +Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient. + +
        beforeProvisioningRule object
        + +Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called. + +
        schemas object[]
        + +List of references to Schema objects + +
        passwordPolicies object[]
        + +List of references to the associated PasswordPolicy objects. + +
        managementWorkgroup object
        + +Reference to Management Workgroup for this Source + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-status-check-details.api.mdx b/docs/sailpoint-api-beta/update-status-check-details.api.mdx new file mode 100644 index 000000000..6fce8d883 --- /dev/null +++ b/docs/sailpoint-api-beta/update-status-check-details.api.mdx @@ -0,0 +1,91 @@ +--- +id: update-status-check-details +sidebar_label: Update the time check configuration of queued SDIM tickets +hide_title: true +hide_table_of_contents: true +api: {"tags":["Service Desk Integration"],"description":"Update the time check configuration of queued SDIM tickets. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","operationId":"updateStatusCheckDetails","requestBody":{"description":"the modified time check configuration","content":{"application/json":{"schema":{"description":"Configuration of maximum number days and interval for checking Service Desk integration queue status","required":["provisioningStatusCheckIntervalMinutes","provisioningMaxStatusCheckDays"],"type":"object","properties":{"provisioningStatusCheckIntervalMinutes":{"description":"interval in minutes between status checks","type":"string","example":30},"provisioningMaxStatusCheckDays":{"description":"maximum number of days to check","type":"string","example":2}}}}},"required":true},"responses":{"200":{"description":"QueuedCheckConfigDetails as updated","content":{"application/json":{"schema":{"description":"Configuration of maximum number days and interval for checking Service Desk integration queue status","required":["provisioningStatusCheckIntervalMinutes","provisioningMaxStatusCheckDays"],"type":"object","properties":{"provisioningStatusCheckIntervalMinutes":{"description":"interval in minutes between status checks","type":"string","example":30},"provisioningMaxStatusCheckDays":{"description":"maximum number of days to check","type":"string","example":2}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:service-desk-admin:write","idn:service-desk-integration:write"]}],"method":"put","path":"/service-desk-integrations/status-check-configuration","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"provisioningStatusCheckIntervalMinutes":30,"provisioningMaxStatusCheckDays":2},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update the time check configuration of queued SDIM tickets","description":{"content":"Update the time check configuration of queued SDIM tickets. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","type":"text/plain"},"url":{"path":["service-desk-integrations","status-check-configuration"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update the time check configuration of queued SDIM tickets + + + +Update the time check configuration of queued SDIM tickets. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + +
      Request Body required
      + +the modified time check configuration + +
      + +QueuedCheckConfigDetails as updated + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-status.api.mdx b/docs/sailpoint-api-beta/update-status.api.mdx new file mode 100644 index 000000000..dcd68b3b5 --- /dev/null +++ b/docs/sailpoint-api-beta/update-status.api.mdx @@ -0,0 +1,87 @@ +--- +id: update-status +sidebar_label: Handle a status request from a client +hide_title: true +hide_table_of_contents: true +api: {"tags":["Managed Clients"],"description":"Update a status detail passed in from the client","operationId":"updateStatus","parameters":[{"name":"id","in":"path","description":"ID of the Managed Client Status to update","required":true,"schema":{"type":"string","example":"aClientId"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"description":"Managed Client Status","type":"object","required":["body","status","type","timestamp"],"properties":{"body":{"description":"ManagedClientStatus body information","type":"object","example":{"alertKey":"","id":"5678","clusterId":"1234","ccg_etag":"ccg_etag123xyz456","ccg_pin":"NONE","cookbook_etag":"20210420125956-20210511144538","hostname":"megapod-useast1-secret-hostname.sailpoint.com","internal_ip":"127.0.0.1","lastSeen":"1620843964604","sinceSeen":"14708","sinceSeenMillis":"14708","localDev":false,"stacktrace":"","state":null,"status":"NORMAL","uuid":null,"product":"idn","va_version":null,"platform_version":"2","os_version":"2345.3.1","os_type":"flatcar","hypervisor":"unknown"}},"status":{"type":"string","enum":["NORMAL","UNDEFINED","NOT_CONFIGURED","CONFIGURING","WARNING","ERROR","FAILED"],"description":"status of the Managed Client"},"type":{"description":"type of the Managed Client","type":"string","example":"CCG","enum":["CCG","VA","INTERNAL"]},"timestamp":{"description":"timestamp on the Client Status update","type":"string","format":"date-time","example":"2020-01-01T00:00:00.000000Z"}}}}}},"responses":{"200":{"description":"Responds with the updated Managed Client Status.","content":{"application/json":{"schema":{"description":"Managed Client Status","type":"object","required":["body","status","type","timestamp"],"properties":{"body":{"description":"ManagedClientStatus body information","type":"object","example":{"body":{"id":"1528","clientId":"1528","clusterId":"1533","orgType":"test","vaDownloadUrl":"https://sptcbu-va-images.s3.amazonaws.com/va-latest.zip","clusterJobCount":1,"configuration":{"clusterType":"sqsCluster","clusterExternalId":"2c91808876dd79120176f758af765c58","debug":"false","failureThreshold":"0","gmtOffset":"-6","scheduleUpgrade":"false","va_version":"va-megapod-useast1-595-1627543540","jobType":"VA_UPGRADE","cookbook":"va-megapod-useast1-595-1627543540"},"connectorServices":[{"id":"540696","name":"EndToEnd-ADSource","connector_host":"host.example.com","connector_port":"389","connector_(boolean)useSSL":false,"connectorFileUploadHistory":null},{"id":"540698","name":"EndToEnd-AzureADSource","connector_host":null,"connector_port":null,"connector_(boolean)useSSL":null,"connectorFileUploadHistory":null},{"id":"540710","name":"EndToEnd-OpenLDAP","connector_host":"10.0.2.64","connector_port":"389","connector_(boolean)useSSL":false,"connectorFileUploadHistory":null},{"id":"540713","name":"Dynamic-ADSource","connector_host":"host.example.com","connector_port":"389","connector_(boolean)useSSL":false,"connectorFileUploadHistory":null},{"id":"540716","name":"EndToEnd-JdbcADSource","connector_host":"10.0.5.187","connector_port":"389","connector_(boolean)useSSL":false,"connectorFileUploadHistory":null},{"id":"540717","name":"EndToEnd-JdbcSource","connector_host":null,"connector_port":null,"connector_(boolean)useSSL":null,"connectorFileUploadHistory":[{"serviceId":"540717","date":"2021-02-05T22:58:15Z","file":"temp7081703651350031905mysql-connector-java-8.0.11.jar"}]}],"jobs":[{"uuid":"872b622f-5ab5-4836-9172-e3bb77f05b2c","cookbook":"872b622f-5ab5-4836-9172-e3bb77f05b2c","state":"FINISHED","type":"VA_UPGRADE","targetId":"1528","managedProcessConfiguration":{"charon":{"version":"345","path":"sailpoint/charon","description":null,"dependencies":null},"ccg":{"version":"415_583_79.0.0","path":"sailpoint/ccg","description":null,"dependencies":null},"toolbox":{"version":"6","path":"sailpoint/toolbox","description":null,"dependencies":null},"fluent":{"version":"50","path":"fluent/va","description":null,"dependencies":null},"va_agent":{"version":"89","path":"sailpoint/va_agent","description":null,"dependencies":null}}}],"queue":{"name":"megapod-useast1-denali-lwt-cluster-1533","region":"us-east-1"},"maintenance":{"window":"true","windowStartTime":"2021-07-29T00:00:00Z","windowClusterTime":"2021-07-29T01:35:24Z","windowFinishTime":"2021-07-29T04:00:00Z"}}}},"status":{"type":"string","enum":["NORMAL","UNDEFINED","NOT_CONFIGURED","CONFIGURING","WARNING","ERROR","FAILED"],"description":"status of the Managed Client"},"type":{"description":"type of the Managed Client","type":"string","example":"CCG","enum":["CCG","VA","INTERNAL"]},"timestamp":{"description":"timestamp on the Client Status update","type":"string","format":"date-time","example":"2020-01-01T00:00:00.000000Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:managed-client-status:update"]}],"method":"post","path":"/managed-clients/{id}/status","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"body":{"alertKey":"","id":"5678","clusterId":"1234","ccg_etag":"ccg_etag123xyz456","ccg_pin":"NONE","cookbook_etag":"20210420125956-20210511144538","hostname":"megapod-useast1-secret-hostname.sailpoint.com","internal_ip":"127.0.0.1","lastSeen":"1620843964604","sinceSeen":"14708","sinceSeenMillis":"14708","localDev":false,"stacktrace":"","state":null,"status":"NORMAL","uuid":null,"product":"idn","va_version":null,"platform_version":"2","os_version":"2345.3.1","os_type":"flatcar","hypervisor":"unknown"},"status":"NORMAL","type":"CCG","timestamp":"2020-01-01T00:00:00.000000Z"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Handle a status request from a client","description":{"content":"Update a status detail passed in from the client","type":"text/plain"},"url":{"path":["managed-clients",":id","status"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the Managed Client Status to update","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Handle a status request from a client + + + +Update a status detail passed in from the client + +
      Path Parameters
      Request Body required
      + +Responds with the updated Managed Client Status. + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-subscription.api.mdx b/docs/sailpoint-api-beta/update-subscription.api.mdx new file mode 100644 index 000000000..671977169 --- /dev/null +++ b/docs/sailpoint-api-beta/update-subscription.api.mdx @@ -0,0 +1,128 @@ +--- +id: update-subscription +sidebar_label: Update a Subscription +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updateSubscription","tags":["Triggers"],"description":"This API updates a trigger subscription in IdentityNow, using a full object representation. In other words, the existing\n Subscription is completely replaced. The following fields are immutable:\n\n\n * id\n\n * triggerId\n\n\n Attempts to modify these fields result in 400.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"Subscription ID","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Subscription name.","example":"Access request subscription"},"description":{"type":"string","description":"Subscription description.","example":"Access requested to site xyz"},"type":{"type":"string","description":"Subscription type. **NOTE** If type is EVENTBRIDGE, then eventBridgeConfig is required. If type is HTTP, then httpConfig is required.","enum":["HTTP","EVENTBRIDGE"],"example":"HTTP"},"responseDeadline":{"type":"string","description":"Deadline for completing REQUEST_RESPONSE trigger invocation, represented in ISO-8601 duration format.","example":"PT1H","default":"PT1H"},"httpConfig":{"description":"Config required if HTTP subscription type is used.","type":"object","properties":{"url":{"type":"string","description":"URL of the external/custom integration.","example":"https://www.example.com"},"httpDispatchMode":{"type":"string","description":"HTTP response modes, i.e. SYNC, ASYNC, or DYNAMIC.","enum":["SYNC","ASYNC","DYNAMIC"],"example":"SYNC"},"httpAuthenticationType":{"type":"string","description":"Defines the HTTP Authentication type. Additional values may be added in the future.\n\nIf *NO_AUTH* is selected, no extra information will be in HttpConfig.\n\nIf *BASIC_AUTH* is selected, HttpConfig will include BasicAuthConfig with Username and Password as strings.\n\nIf *BEARER_TOKEN* is selected, HttpConfig will include BearerTokenAuthConfig with Token as string.","enum":["NO_AUTH","BASIC_AUTH","BEARER_TOKEN"],"default":"NO_AUTH","example":"BASIC_AUTH"},"basicAuthConfig":{"type":"object","properties":{"userName":{"type":"string","description":"The username to authenticate.","example":"user@example.com"},"password":{"type":"string","nullable":true,"description":"The password to authenticate. On response, this field is set to null as to not return secrets.","example":null}},"description":"Config required if BASIC_AUTH is used."},"bearerTokenAuthConfig":{"type":"object","properties":{"bearerToken":{"type":"string","nullable":true,"description":"Bearer token","example":null}},"description":"Config required if BEARER_TOKEN authentication is used. On response, this field is set to null as to not return secrets."}},"required":["url","httpDispatchMode"]},"eventBridgeConfig":{"description":"Config required if EVENTBRIDGE subscription type is used.","type":"object","properties":{"awsAccount":{"type":"string","description":"AWS Account Number (12-digit number) that has the EventBridge Partner Event Source Resource.","example":"123456789012"},"awsRegion":{"type":"string","description":"AWS Region that has the EventBridge Partner Event Source Resource. See https://docs.aws.amazon.com/general/latest/gr/rande.html for a full list of available values.","example":"us-west-1"}},"required":["awsAccount","awsRegion"]},"enabled":{"type":"boolean","description":"Whether subscription should receive real-time trigger invocations or not.\n\nTest trigger invocations are always enabled regardless of this option.","default":true,"example":true},"filter":{"type":"string","description":"JSONPath filter to conditionally invoke trigger when expression evaluates to true.","example":"$[?($.identityId == \"201327fda1c44704ac01181e963d463c\")]","externalDocs":{"description":"JSONPath filter documentation","url":"https://developer.sailpoint.com/triggers/filtering_event_triggers.html#filtering-event-triggers"}}}},"examples":{"HTTP Subscription":{"value":{"name":"Access request subscription","description":"Access requested to site xyz","type":"HTTP","httpConfig":{"url":"https://www.example.com","httpDispatchMode":"SYNC","httpAuthenticationType":"BASIC_AUTH","basicAuthConfig":{"userName":"user@example.com","password":"eRtg4%6yuI!"}},"enabled":true,"filter":"$[?($.identityId == \"201327fda1c44704ac01181e963d463c\")]"}},"HTTP Async Subscription":{"value":{"name":"Access request subscription","description":"Access requested to site xyz","type":"HTTP","responseDeadline":"PT1H","httpConfig":{"url":"https://www.example.com","httpDispatchMode":"ASYNC","httpAuthenticationType":"BASIC_AUTH","basicAuthConfig":{"userName":"user@example.com","password":"eRtg4%6yuI!"}},"enabled":true,"filter":"$[?($.identityId == \"201327fda1c44704ac01181e963d463c\")]"}},"EventBridge Subscription":{"value":{"name":"Access request subscription","description":"Access requested to site xyz","type":"EVENTBRIDGE","eventBridgeConfig":{"awsAccount":"123456789012","awsRegion":"us-west-1"},"enabled":true,"filter":"$[?($.identityId == \"201327fda1c44704ac01181e963d463c\")]"}}}}}},"responses":{"200":{"description":"Updated subscription.","content":{"application/json":{"schema":{"type":"object","required":["id","triggerId","type","name","triggerName","enabled","responseDeadline"],"properties":{"id":{"type":"string","description":"Subscription ID.","example":"0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"},"name":{"type":"string","description":"Subscription name.","example":"Access request subscription"},"description":{"type":"string","description":"Subscription description.","example":"Access requested to site xyz"},"triggerId":{"type":"string","description":"ID of trigger subscribed to.","example":"idn:access-requested"},"triggerName":{"type":"string","description":"Trigger name of trigger subscribed to.","example":"Access Requested"},"type":{"type":"string","description":"Subscription type. **NOTE** If type is EVENTBRIDGE, then eventBridgeConfig is required. If type is HTTP, then httpConfig is required.","enum":["HTTP","EVENTBRIDGE"],"example":"HTTP"},"responseDeadline":{"type":"string","description":"Deadline for completing REQUEST_RESPONSE trigger invocation, represented in ISO-8601 duration format.","example":"PT1H","default":"PT1H"},"httpConfig":{"description":"Config required if HTTP subscription type is used.","type":"object","properties":{"url":{"type":"string","description":"URL of the external/custom integration.","example":"https://www.example.com"},"httpDispatchMode":{"type":"string","description":"HTTP response modes, i.e. SYNC, ASYNC, or DYNAMIC.","enum":["SYNC","ASYNC","DYNAMIC"],"example":"SYNC"},"httpAuthenticationType":{"type":"string","description":"Defines the HTTP Authentication type. Additional values may be added in the future.\n\nIf *NO_AUTH* is selected, no extra information will be in HttpConfig.\n\nIf *BASIC_AUTH* is selected, HttpConfig will include BasicAuthConfig with Username and Password as strings.\n\nIf *BEARER_TOKEN* is selected, HttpConfig will include BearerTokenAuthConfig with Token as string.","enum":["NO_AUTH","BASIC_AUTH","BEARER_TOKEN"],"default":"NO_AUTH","example":"BASIC_AUTH"},"basicAuthConfig":{"type":"object","properties":{"userName":{"type":"string","description":"The username to authenticate.","example":"user@example.com"},"password":{"type":"string","nullable":true,"description":"The password to authenticate. On response, this field is set to null as to not return secrets.","example":null}},"description":"Config required if BASIC_AUTH is used."},"bearerTokenAuthConfig":{"type":"object","properties":{"bearerToken":{"type":"string","nullable":true,"description":"Bearer token","example":null}},"description":"Config required if BEARER_TOKEN authentication is used. On response, this field is set to null as to not return secrets."}},"required":["url","httpDispatchMode"]},"eventBridgeConfig":{"description":"Config required if EVENTBRIDGE subscription type is used.","type":"object","properties":{"awsAccount":{"type":"string","description":"AWS Account Number (12-digit number) that has the EventBridge Partner Event Source Resource.","example":"123456789012"},"awsRegion":{"type":"string","description":"AWS Region that has the EventBridge Partner Event Source Resource. See https://docs.aws.amazon.com/general/latest/gr/rande.html for a full list of available values.","example":"us-west-1"}},"required":["awsAccount","awsRegion"]},"enabled":{"type":"boolean","description":"Whether subscription should receive real-time trigger invocations or not.\nTest trigger invocations are always enabled regardless of this option.","default":true,"example":true},"filter":{"type":"string","description":"JSONPath filter to conditionally invoke trigger when expression evaluates to true.","example":"$[?($.identityId == \"201327fda1c44704ac01181e963d463c\")]","externalDocs":{"description":"JSONPath filter documentation","url":"https://developer.sailpoint.com/triggers/filtering_event_triggers.html#filtering-event-triggers"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"oauth2":["idn:trigger-service-subscriptions:update"]}],"method":"put","path":"/trigger-subscriptions/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"Access request subscription","description":"Access requested to site xyz","type":"HTTP","responseDeadline":"PT1H","httpConfig":{"url":"https://www.example.com","httpDispatchMode":"SYNC","httpAuthenticationType":"BASIC_AUTH","basicAuthConfig":{"userName":"user@example.com","password":null},"bearerTokenAuthConfig":{"bearerToken":null}},"eventBridgeConfig":{"awsAccount":"123456789012","awsRegion":"us-west-1"},"enabled":true,"filter":"$[?($.identityId == \"201327fda1c44704ac01181e963d463c\")]"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update a Subscription","description":{"content":"This API updates a trigger subscription in IdentityNow, using a full object representation. In other words, the existing\n Subscription is completely replaced. The following fields are immutable:\n\n\n * id\n\n * triggerId\n\n\n Attempts to modify these fields result in 400.","type":"text/plain"},"url":{"path":["trigger-subscriptions",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Subscription ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}},"auth":{"type":"oauth2","oauth2":[]}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update a Subscription + + + +This API updates a trigger subscription in IdentityNow, using a full object representation. In other words, the existing + Subscription is completely replaced. The following fields are immutable: + + + * id + + * triggerId + + + Attempts to modify these fields result in 400. + +
      Path Parameters
      Request Body required
        httpConfig object
        + +Config required if HTTP subscription type is used. + +
        basicAuthConfig object
        + +Config required if BASIC_AUTH is used. + +
        bearerTokenAuthConfig object
        + +Config required if BEARER_TOKEN authentication is used. On response, this field is set to null as to not return secrets. + +
        eventBridgeConfig object
        + +Config required if EVENTBRIDGE subscription type is used. + +
      + +Updated subscription. + +
      Schema
        httpConfig object
        + +Config required if HTTP subscription type is used. + +
        basicAuthConfig object
        + +Config required if BASIC_AUTH is used. + +
        bearerTokenAuthConfig object
        + +Config required if BEARER_TOKEN authentication is used. On response, this field is set to null as to not return secrets. + +
        eventBridgeConfig object
        + +Config required if EVENTBRIDGE subscription type is used. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-tagged-object-by-type-and-id.api.mdx b/docs/sailpoint-api-beta/update-tagged-object-by-type-and-id.api.mdx new file mode 100644 index 000000000..9bbe35458 --- /dev/null +++ b/docs/sailpoint-api-beta/update-tagged-object-by-type-and-id.api.mdx @@ -0,0 +1,75 @@ +--- +id: update-tagged-object-by-type-and-id +sidebar_label: Update Tagged Object +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updateTaggedObjectByTypeAndId","tags":["Tagged Objects"],"description":"This updates a tagged object for the specified type.","parameters":[{"in":"path","name":"type","schema":{"type":"string","enum":["ROLE","IDENTITY","SOD_POLICY"]},"required":true,"description":"The type of tagged object to update."},{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the object reference to update.","example":"ef38f94347e94562b5bb8424a56397d8"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"objectRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"tags":{"type":"array","items":{"type":"string"},"description":"Labels to be applied to an Object","example":["BU_FINANCE","PCI"]}}}}}},"responses":{"200":{"description":"Tagged object by type and ID.","content":{"application/json":{"schema":{"type":"object","properties":{"objectRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"tags":{"type":"array","items":{"type":"string"},"description":"Labels to be applied to an Object","example":["BU_FINANCE","PCI"]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/tagged-objects/{type}/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"objectRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"tags":["BU_FINANCE","PCI"]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update Tagged Object","description":{"content":"This updates a tagged object for the specified type.","type":"text/plain"},"url":{"path":["tagged-objects",":type",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The type of tagged object to update.","type":"text/plain"},"type":"any","value":"","key":"type"},{"disabled":false,"description":{"content":"(Required) The ID of the object reference to update.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Tagged Object + + + +This updates a tagged object for the specified type. + +
      Path Parameters
      Request Body required
        objectRef object
      + +Tagged object by type and ID. + +
      Schema
        objectRef object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-transform.api.mdx b/docs/sailpoint-api-beta/update-transform.api.mdx new file mode 100644 index 000000000..41cf17382 --- /dev/null +++ b/docs/sailpoint-api-beta/update-transform.api.mdx @@ -0,0 +1,80 @@ +--- +id: update-transform +sidebar_label: Update a transform +hide_title: true +hide_table_of_contents: true +api: {"tags":["Transforms"],"description":"Replaces the transform specified by the given ID with the transform provided in the request body. Only the \"attributes\" field is mutable. Attempting to change other attributes will result in an error.\nA token with transform write authority is required to call this API.","operationId":"updateTransform","parameters":[{"name":"id","in":"path","description":"ID of the transform to update","required":true,"style":"simple","explode":false,"schema":{"type":"string"}}],"requestBody":{"description":"The updated transform object (must include \"name\", \"type\", and \"attributes\" fields).","content":{"application/json":{"schema":{"type":"object","description":"DTO for representing an internally- or customer-defined transform.","required":["name","type","attributes"],"properties":{"id":{"type":"string","readOnly":true,"description":"Unique ID of this transform","example":"2cd78adghjkja34jh2b1hkjhasuecd"},"name":{"type":"string","readOnly":true,"description":"Unique name of this transform","example":"Timestamp To Date"},"type":{"type":"string","readOnly":true,"description":"The transform type (see [Transformations in IdentityNow Using Seaspray](https://community.sailpoint.com/docs/DOC-4629)).","example":"concat"},"attributes":{"type":"object","description":"Meta-data about the transform. Values in this list are specific to the type of transform to be executed.","additionalProperties":true,"example":{"inputFormat":"MMM dd yyyy, HH:mm:ss.SSS","outputFormat":"yyyy/dd/MM"}},"internal":{"type":"boolean","readOnly":true,"description":"Indicates whether this is an internal SailPoint-created transform or a customer-created transform","example":false}}},"example":{"name":"Timestamp To Date","type":"dateFormat","attributes":{"inputFormat":"MMM-dd-yyyy, HH:mm:ss.SSS","outputFormat":"yyyy/dd/MM"}}}}},"responses":{"200":{"description":"Indicates the transform was successfully updated and returns its new representation.","content":{"application/json":{"schema":{"type":"object","description":"DTO for representing an internally- or customer-defined transform.","required":["name","type","attributes"],"properties":{"id":{"type":"string","readOnly":true,"description":"Unique ID of this transform","example":"2cd78adghjkja34jh2b1hkjhasuecd"},"name":{"type":"string","readOnly":true,"description":"Unique name of this transform","example":"Timestamp To Date"},"type":{"type":"string","readOnly":true,"description":"The transform type (see [Transformations in IdentityNow Using Seaspray](https://community.sailpoint.com/docs/DOC-4629)).","example":"concat"},"attributes":{"type":"object","description":"Meta-data about the transform. Values in this list are specific to the type of transform to be executed.","additionalProperties":true,"example":{"inputFormat":"MMM dd yyyy, HH:mm:ss.SSS","outputFormat":"yyyy/dd/MM"}},"internal":{"type":"boolean","readOnly":true,"description":"Indicates whether this is an internal SailPoint-created transform or a customer-created transform","example":false}}},"example":{"id":"2cd78adghjkja34jh2b1hkjhasuecd","name":"Timestamp To Date","type":"dateFormat","attributes":{"inputFormat":"MMM-dd-yyyy, HH:mm:ss.SSS","outputFormat":"yyyy/dd/MM"},"internal":false}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"security":[{"bearerAuth":["idn:transforms:write"]}],"method":"put","path":"/transforms/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"2cd78adghjkja34jh2b1hkjhasuecd","name":"Timestamp To Date","type":"concat","attributes":{"inputFormat":"MMM dd yyyy, HH:mm:ss.SSS","outputFormat":"yyyy/dd/MM"},"internal":false},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update a transform","description":{"content":"Replaces the transform specified by the given ID with the transform provided in the request body. Only the \"attributes\" field is mutable. Attempting to change other attributes will result in an error.\nA token with transform write authority is required to call this API.","type":"text/plain"},"url":{"path":["transforms",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the transform to update","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update a transform + + + +Replaces the transform specified by the given ID with the transform provided in the request body. Only the "attributes" field is mutable. Attempting to change other attributes will result in an error. +A token with transform write authority is required to call this API. + +
      Path Parameters
      Request Body
      + +The updated transform object (must include "name", "type", and "attributes" fields). + +
        attributes object
        + +Meta-data about the transform. Values in this list are specific to the type of transform to be executed. + +
      + +Indicates the transform was successfully updated and returns its new representation. + +
      Schema
        attributes object
        + +Meta-data about the transform. Values in this list are specific to the type of transform to be executed. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/update-workflow.api.mdx b/docs/sailpoint-api-beta/update-workflow.api.mdx new file mode 100644 index 000000000..5a0bd55a5 --- /dev/null +++ b/docs/sailpoint-api-beta/update-workflow.api.mdx @@ -0,0 +1,115 @@ +--- +id: update-workflow +sidebar_label: Update Workflow +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updateWorkflow","tags":["Workflows"],"description":"Perform a full update of a workflow. The updated workflow object is returned in the response.","security":[{"bearerAuth":["sp:workflow:update"]}],"parameters":[{"name":"id","in":"path","description":"Id of the Workflow","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"c17bea3a-574d-453c-9e04-4365fbf5af0b"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The name of the workflow","example":"Send Email"},"owner":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity that owns the workflow. The owner's permissions in IDN will determine what actions the workflow is allowed to perform. Ownership can be changed by updating the owner in a PUT or PATCH request.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}},"example":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}},"description":{"type":"string","description":"Description of what the workflow accomplishes","example":"Send an email to the identity who's attributes changed."},"definition":{"type":"object","description":"The map of steps that the workflow will execute.","properties":{"start":{"type":"string","description":"The name of the starting step.","example":"Send Email Test"},"steps":{"type":"object","description":"One or more step objects that comprise this workflow. Please see the Workflow documentation to see the JSON schema for each step type.","additionalProperties":true,"example":{"Send Email":{"actionId":"sp:send-email","attributes":{"body":"This is a test","from":"sailpoint@sailpoint.com","recipientId.$":"$.identity.id","subject":"test"},"nextStep":"success","selectResult":null,"type":"action"},"success":{"type":"success"}}}}},"enabled":{"type":"boolean","description":"Enable or disable the workflow. Workflows cannot be created in an enabled state.","default":false,"example":false},"trigger":{"type":"object","description":"The trigger that starts the workflow","required":["type","attributes"],"properties":{"type":{"enum":["EVENT","EXTERNAL","SCHEDULED"],"example":"EVENT","description":"The trigger type"},"attributes":{"description":"Workflow Trigger Attributes.","oneOf":[{"title":"Event Trigger Attributes","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The unique ID of the trigger","example":"idn:identity-attributes-changed"},"filter":{"type":"string","description":"JSON path expression that will limit which events the trigger will fire on","example":"$.changes[?(@.attribute == 'manager')]"}}},{"title":"Scheduled Trigger Attributes","type":"object","required":["cronString"],"properties":{"cronString":{"type":"string","description":"A valid CRON expression","externalDocs":{"description":"CRON expression editor","url":"https://crontab.guru/"},"example":"0 * */3 */5 *"}}}]}}}}}}}},"responses":{"200":{"description":"The Workflow object","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"id":{"type":"string","description":"Workflow ID. This is a UUID generated upon creation.","example":"d201c5e9-d37b-4aff-af14-66414f39d569"},"executionCount":{"type":"integer","format":"int32","description":"The number of times this workflow has been executed","example":2},"failureCount":{"type":"integer","format":"int32","description":"The number of times this workflow has failed during execution","example":0},"created":{"type":"string","format":"date-time","description":"The date and time the workflow was created","example":"2022-01-10T16:06:16.636381447Z"},"creator":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity that created the workflow.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}},"example":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}}}},{"type":"object","properties":{"name":{"type":"string","description":"The name of the workflow","example":"Send Email"},"owner":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}],"description":"The identity that owns the workflow. The owner's permissions in IDN will determine what actions the workflow is allowed to perform. Ownership can be changed by updating the owner in a PUT or PATCH request.","properties":{"type":{"enum":["IDENTITY"],"example":"IDENTITY","description":"The type of object that is referenced"}},"example":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}},"description":{"type":"string","description":"Description of what the workflow accomplishes","example":"Send an email to the identity who's attributes changed."},"definition":{"type":"object","description":"The map of steps that the workflow will execute.","properties":{"start":{"type":"string","description":"The name of the starting step.","example":"Send Email Test"},"steps":{"type":"object","description":"One or more step objects that comprise this workflow. Please see the Workflow documentation to see the JSON schema for each step type.","additionalProperties":true,"example":{"Send Email":{"actionId":"sp:send-email","attributes":{"body":"This is a test","from":"sailpoint@sailpoint.com","recipientId.$":"$.identity.id","subject":"test"},"nextStep":"success","selectResult":null,"type":"action"},"success":{"type":"success"}}}}},"enabled":{"type":"boolean","description":"Enable or disable the workflow. Workflows cannot be created in an enabled state.","default":false,"example":false},"trigger":{"type":"object","description":"The trigger that starts the workflow","required":["type","attributes"],"properties":{"type":{"enum":["EVENT","EXTERNAL","SCHEDULED"],"example":"EVENT","description":"The trigger type"},"attributes":{"description":"Workflow Trigger Attributes.","oneOf":[{"title":"Event Trigger Attributes","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The unique ID of the trigger","example":"idn:identity-attributes-changed"},"filter":{"type":"string","description":"JSON path expression that will limit which events the trigger will fire on","example":"$.changes[?(@.attribute == 'manager')]"}}},{"title":"Scheduled Trigger Attributes","type":"object","required":["cronString"],"properties":{"cronString":{"type":"string","description":"A valid CRON expression","externalDocs":{"description":"CRON expression editor","url":"https://crontab.guru/"},"example":"0 * */3 */5 *"}}}]}}}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/workflows/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"Send Email","owner":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"description":"Send an email to the identity who's attributes changed.","definition":{"start":"Send Email Test","steps":{"Send Email":{"actionId":"sp:send-email","attributes":{"body":"This is a test","from":"sailpoint@sailpoint.com","recipientId.$":"$.identity.id","subject":"test"},"nextStep":"success","selectResult":null,"type":"action"},"success":{"type":"success"}}},"enabled":false,"trigger":{"type":"EVENT"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Update Workflow","description":{"content":"Perform a full update of a workflow. The updated workflow object is returned in the response.","type":"text/plain"},"url":{"path":["workflows",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Id of the Workflow","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Workflow + + + +Perform a full update of a workflow. The updated workflow object is returned in the response. + +
      Path Parameters
      Request Body required
        owner object
        definition object
        + +The map of steps that the workflow will execute. + +
        steps object
        + +One or more step objects that comprise this workflow. Please see the Workflow documentation to see the JSON schema for each step type. + +
        trigger object
        + +The trigger that starts the workflow + +
        attributes object
        + +Workflow Trigger Attributes. + +
      • oneOf
      + +The Workflow object + +
      Schema
        creator object
        + +The identity that created the workflow. + +
        owner object
        + +The identity that owns the workflow. The owner's permissions in IDN will determine what actions the workflow is allowed to perform. Ownership can be changed by updating the owner in a PUT or PATCH request. + +
        definition object
        + +The map of steps that the workflow will execute. + +
        steps object
        + +One or more step objects that comprise this workflow. Please see the Workflow documentation to see the JSON schema for each step type. + +
        trigger object
        + +The trigger that starts the workflow + +
        attributes object
        + +Workflow Trigger Attributes. + +
      • oneOf
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/upload-connector-file.api.mdx b/docs/sailpoint-api-beta/upload-connector-file.api.mdx new file mode 100644 index 000000000..b3f804282 --- /dev/null +++ b/docs/sailpoint-api-beta/upload-connector-file.api.mdx @@ -0,0 +1,116 @@ +--- +id: upload-connector-file +sidebar_label: Upload connector file to source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"uploadConnectorFile","tags":["Sources"],"description":"This uploads a supplemental source connector file (like jdbc driver jars) to a source's S3 bucket. This also sends ETS and Audit events.\nA token with ORG_ADMIN authority is required to call this API.","parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source id","example":"8c190e6787aa4ed9a90bd9d5344523fb"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"Uploaded the file successfully and sent all post-upload events","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"the id of the Source","example":"2c91808568c529c60168cca6f90c1324"},"description":{"type":"string","description":"Human-readable description of the source","example":"This is the corporate directory."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to an owning Identity Object"},"cluster":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the associated Cluster","example":{"type":"CLUSTER","id":"2c9180866166b5b0016167c32ef31a66","name":"Corporate Cluster"}},"accountCorrelationConfig":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Correlation Config object","example":{"type":"ACCOUNT_CORRELATION_CONFIG","id":"2c9180855d191c59015d28583727245a","name":"Directory [source-62867] Account Correlation"}},"accountCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used."},"managerCorrelationMapping":{"description":"Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity","type":"object","properties":{"accountAttribute":{"type":"string","description":"Name of the attribute to use for manager correlation. The value found on the account attribute will be used to lookup the manager's identity.","example":"manager"},"identityAttribute":{"type":"string","description":"Name of the identity attribute to search when trying to find a manager using the value from the accountAttribute.","example":"manager"}}},"managerCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient."},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called."},"schemas":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to Schema objects","example":[{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232a","name":"account"},{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232b","name":"group"}]},"passwordPolicies":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to the associated PasswordPolicy objects.","example":[{"type":"PASSWORD_POLICY","id":"2c9180855d191c59015d291ceb053980","name":"Corporate Password Policy"}]},"features":{"type":"array","description":"Optional features that can be supported by a source.","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"example":["SYNC_PROVISIONING","MANAGER_LOOKUP","SEARCH","PROVISIONING","AUTHENTICATE","GROUP_PROVISIONING","PASSWORD"]},"type":{"type":"string","description":"Specifies the type of system being managed e.g. Active Directory, Workday, etc..","example":"OpenLDAP - Direct"},"connector":{"type":"string","description":"Connector script name.","example":"active-directory"},"connectorClass":{"type":"string","description":"The fully qualified name of the Java class that implements the connector interface.","example":"sailpoint.connector.LDAPConnector"},"connectorAttributes":{"type":"object","description":"Connector specific configuration; will differ from type to type.","example":{"healthCheckTimeout":30,"authSearchAttributes":["cn","uid","mail"]}},"deleteThreshold":{"type":"integer","format":"int32","description":"Number from 0 to 100 that specifies when to skip the delete phase.","example":10},"authoritative":{"type":"boolean","description":"When true indicates the source is referenced by an IdentityProfile.","example":false},"managementWorkgroup":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to Management Workgroup for this Source"},"healthy":{"type":"boolean","description":"When true indicates a healthy source","example":true},"status":{"type":"string","description":"A status identifier, giving specific information on why a source is healthy or not","example":"SOURCE_STATE_HEALTHY"},"since":{"type":"string","description":"Timestamp showing when a source health check was last performed","example":"2021-09-28T15:48:29.3801666300Z"},"connectorId":{"type":"string","description":"The id of connector","example":"active-directory"},"connectorName":{"type":"string","description":"The name of the connector that was chosen on source creation","example":"Active Directory"},"connectionType":{"type":"string","description":"The type of connection (direct or file)","example":"file"},"connectorImplementstionId":{"type":"string","description":"The connector implementstion id","example":"delimited-file"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/sources/{sourceId}/upload-connector-file","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Upload connector file to source","description":{"content":"This uploads a supplemental source connector file (like jdbc driver jars) to a source's S3 bucket. This also sends ETS and Audit events.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":sourceId","upload-connector-file"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Content-Type","value":"multipart/form-data"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"formdata","formdata":[]}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Upload connector file to source + + + +This uploads a supplemental source connector file (like jdbc driver jars) to a source's S3 bucket. This also sends ETS and Audit events. +A token with ORG_ADMIN authority is required to call this API. + +
      Path Parameters
      Request Body required
      + +Uploaded the file successfully and sent all post-upload events + +
      Schema
        owner object
        + +Reference to an owning Identity Object + +
        cluster object
        + +Reference to the associated Cluster + +
        accountCorrelationConfig object
        + +Reference to a Correlation Config object + +
        accountCorrelationRule object
        + +Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used. + +
        managerCorrelationMapping object
        + +Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity + +
        managerCorrelationRule object
        + +Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient. + +
        beforeProvisioningRule object
        + +Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called. + +
        schemas object[]
        + +List of references to Schema objects + +
        passwordPolicies object[]
        + +List of references to the associated PasswordPolicy objects. + +
        managementWorkgroup object
        + +Reference to Management Workgroup for this Source + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/upload-source-accounts-schema.api.mdx b/docs/sailpoint-api-beta/upload-source-accounts-schema.api.mdx new file mode 100644 index 000000000..0070b3caa --- /dev/null +++ b/docs/sailpoint-api-beta/upload-source-accounts-schema.api.mdx @@ -0,0 +1,83 @@ +--- +id: upload-source-accounts-schema +sidebar_label: Uploads source accounts schema template +hide_title: true +hide_table_of_contents: true +api: {"tags":["Sources"],"description":"This API uploads a source schema template file to configure a source's account attributes.","operationId":"uploadSourceAccountsSchema","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The Source id","example":"8c190e6787aa4ed9a90bd9d5344523fb"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"Successfully uploaded the file","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Schema.","example":"2c9180835d191a86015d28455b4a2329"},"name":{"type":"string","description":"The name of the Schema.","example":"account"},"nativeObjectType":{"type":"string","description":"The name of the object type on the native system that the schema represents.","example":"User"},"identityAttribute":{"type":"string","description":"The name of the attribute used to calculate the unique identifier for an object in the schema.","example":"sAMAccountName"},"displayAttribute":{"type":"string","description":"The name of the attribute used to calculate the display value for an object in the schema.","example":"distinguishedName"},"hierarchyAttribute":{"type":"string","description":"The name of the attribute whose values represent other objects in a hierarchy. Only relevant to group schemas.","example":"memberOf"},"includePermissions":{"type":"boolean","description":"Flag indicating whether or not the include permissions with the object data when aggregating the schema.","example":false},"features":{"type":"array","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"description":"The features that the schema supports.","example":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"]},"configuration":{"type":"object","description":"Holds any extra configuration data that the schema may require.","example":{"groupMemberAttribute":"member"}},"attributes":{"type":"array","description":"The attribute definitions which form the schema.","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"sAMAccountName"},"type":{"description":"The type of the attribute.","example":"string","type":"string","enum":["STRING","LONG","INT","BOOLEAN"]},"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"A reference to the schema on the source to which the values of the attribute map.","example":{"type":"CONNECTOR_SCHEMA","id":"2c9180866166b5b0016167c32ef31a66","name":"group"}},"description":{"type":"string","description":"A human-readable description of the attribute."},"isMulti":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","example":false},"isEntitlement":{"type":"boolean","description":"Flag indicating whether or not the attribute is an entitlement.","example":false},"isGroup":{"type":"boolean","description":"Unmodifiable flag indicating whether or not the attribute represents a group.","example":false,"readOnly":true}}},"example":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}]},"created":{"type":"string","description":"The date the Schema was created.","format":"date-time","example":"2019-12-24T22:32:58.104Z"},"modified":{"type":"string","description":"The date the Schema was last modified.","format":"date-time","example":"2019-12-31T20:22:28.104Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:source-schema:update"]}],"method":"post","path":"/sources/{id}/schemas/accounts","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Uploads source accounts schema template","description":{"content":"This API uploads a source schema template file to configure a source's account attributes.","type":"text/plain"},"url":{"path":["sources",":id","schemas","accounts"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"multipart/form-data"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"formdata","formdata":[]}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Uploads source accounts schema template + + + +This API uploads a source schema template file to configure a source's account attributes. + +
      Path Parameters
      Request Body required
      + +Successfully uploaded the file + +
      Schema
        attributes object[]
        + +The attribute definitions which form the schema. + +
        schema object
        + +A reference to the schema on the source to which the values of the attribute map. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/upload-source-entitlements-schema.api.mdx b/docs/sailpoint-api-beta/upload-source-entitlements-schema.api.mdx new file mode 100644 index 000000000..d2f053aaa --- /dev/null +++ b/docs/sailpoint-api-beta/upload-source-entitlements-schema.api.mdx @@ -0,0 +1,83 @@ +--- +id: upload-source-entitlements-schema +sidebar_label: Uploads source entitlements schema template +hide_title: true +hide_table_of_contents: true +api: {"tags":["Sources"],"description":"This API uploads a source schema template file to configure a source's entitlement attributes.","operationId":"uploadSourceEntitlementsSchema","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The Source id","example":"8c190e6787aa4ed9a90bd9d5344523fb"},{"in":"query","name":"schemaName","schema":{"type":"string"},"description":"Name of entitlement schema","example":"?schemaName=group"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"Successfully uploaded the file","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Schema.","example":"2c9180835d191a86015d28455b4a2329"},"name":{"type":"string","description":"The name of the Schema.","example":"account"},"nativeObjectType":{"type":"string","description":"The name of the object type on the native system that the schema represents.","example":"User"},"identityAttribute":{"type":"string","description":"The name of the attribute used to calculate the unique identifier for an object in the schema.","example":"sAMAccountName"},"displayAttribute":{"type":"string","description":"The name of the attribute used to calculate the display value for an object in the schema.","example":"distinguishedName"},"hierarchyAttribute":{"type":"string","description":"The name of the attribute whose values represent other objects in a hierarchy. Only relevant to group schemas.","example":"memberOf"},"includePermissions":{"type":"boolean","description":"Flag indicating whether or not the include permissions with the object data when aggregating the schema.","example":false},"features":{"type":"array","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"description":"The features that the schema supports.","example":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"]},"configuration":{"type":"object","description":"Holds any extra configuration data that the schema may require.","example":{"groupMemberAttribute":"member"}},"attributes":{"type":"array","description":"The attribute definitions which form the schema.","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"sAMAccountName"},"type":{"description":"The type of the attribute.","example":"string","type":"string","enum":["STRING","LONG","INT","BOOLEAN"]},"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"A reference to the schema on the source to which the values of the attribute map.","example":{"type":"CONNECTOR_SCHEMA","id":"2c9180866166b5b0016167c32ef31a66","name":"group"}},"description":{"type":"string","description":"A human-readable description of the attribute."},"isMulti":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","example":false},"isEntitlement":{"type":"boolean","description":"Flag indicating whether or not the attribute is an entitlement.","example":false},"isGroup":{"type":"boolean","description":"Unmodifiable flag indicating whether or not the attribute represents a group.","example":false,"readOnly":true}}},"example":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}]},"created":{"type":"string","description":"The date the Schema was created.","format":"date-time","example":"2019-12-24T22:32:58.104Z"},"modified":{"type":"string","description":"The date the Schema was last modified.","format":"date-time","example":"2019-12-31T20:22:28.104Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:source-schema:update"]}],"method":"post","path":"/sources/{id}/schemas/entitlements","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Uploads source entitlements schema template","description":{"content":"This API uploads a source schema template file to configure a source's entitlement attributes.","type":"text/plain"},"url":{"path":["sources",":id","schemas","entitlements"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Name of entitlement schema","type":"text/plain"},"key":"schemaName","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"multipart/form-data"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"formdata","formdata":[]}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Uploads source entitlements schema template + + + +This API uploads a source schema template file to configure a source's entitlement attributes. + +
      Path Parameters
      Query Parameters
      Request Body required
      + +Successfully uploaded the file + +
      Schema
        attributes object[]
        + +The attribute definitions which form the schema. + +
        schema object
        + +A reference to the schema on the source to which the values of the attribute map. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/validate-connector-rule.api.mdx b/docs/sailpoint-api-beta/validate-connector-rule.api.mdx new file mode 100644 index 000000000..72b047dc9 --- /dev/null +++ b/docs/sailpoint-api-beta/validate-connector-rule.api.mdx @@ -0,0 +1,68 @@ +--- +id: validate-connector-rule +sidebar_label: Validate Connector Rule +hide_title: true +hide_table_of_contents: true +api: {"tags":["Connector Rule Management"],"operationId":"validateConnectorRule","description":"Returns a list of issues within the code to fix, if any.\nA token with ORG_ADMIN authority is required to call this API.","requestBody":{"required":true,"description":"The code to validate","content":{"application/json":{"schema":{"description":"SourceCode","type":"object","required":["version","script"],"properties":{"version":{"type":"string","description":"the version of the code","example":"1.0"},"script":{"type":"string","description":"The code","example":"return \"Mr. \" + firstName;"}}}}}},"responses":{"200":{"description":"The status of the code's eligibility as a connector rule","content":{"application/json":{"schema":{"description":"ConnectorRuleValidationResponse","type":"object","required":["state","details"],"properties":{"state":{"type":"string","enum":["OK","ERROR"],"example":"ERROR"},"details":{"type":"array","items":{"description":"CodeErrorDetail","type":"object","required":["line","column","message"],"properties":{"line":{"type":"integer","description":"The line number where the issue occurred","example":2},"column":{"type":"integer","description":"the column number where the issue occurred","example":5},"messsage":{"type":"string","description":"a description of the issue in the code","example":"Remove reference to .decrypt("}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:connector-rule:read"]}],"method":"post","path":"/connector-rules/validate","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"version":"1.0","script":"return \"Mr. \" + firstName;"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Validate Connector Rule","description":{"content":"Returns a list of issues within the code to fix, if any.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["connector-rules","validate"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Validate Connector Rule + + + +Returns a list of issues within the code to fix, if any. +A token with ORG_ADMIN authority is required to call this API. + +
      Request Body required
      + +The code to validate + +
      + +The status of the code's eligibility as a connector rule + +
      Schema
        details object[]
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/validate-filter.api.mdx b/docs/sailpoint-api-beta/validate-filter.api.mdx new file mode 100644 index 000000000..65a4248b2 --- /dev/null +++ b/docs/sailpoint-api-beta/validate-filter.api.mdx @@ -0,0 +1,76 @@ +--- +id: validate-filter +sidebar_label: Validate a Subscription Filter +hide_title: true +hide_table_of_contents: true +api: {"operationId":"validateFilter","tags":["Triggers"],"description":"Validates a JSONPath filter expression against a provided mock input.\nRequest requires a security scope of: ","requestBody":{"required":true,"content":{"application/json":{"schema":{"required":["input","filter"],"type":"object","properties":{"input":{"type":"object","description":"Mock input to evaluate filter expression against.","example":{"identityId":"201327fda1c44704ac01181e963d463c"}},"filter":{"type":"string","description":"JSONPath filter to conditionally invoke trigger when expression evaluates to true.","example":"$[?($.identityId == \"201327fda1c44704ac01181e963d463c\")]","externalDocs":{"description":"JSONPath filter documentation","url":"https://developer.sailpoint.com/triggers/filtering_event_triggers.html#filtering-event-triggers"}}}},"example":{"input":{"identityId":"201327fda1c44704ac01181e963d463c"},"filter":"$[?($.identityId == \"201327fda1c44704ac01181e963d463c\")]"}}}},"responses":{"200":{"description":"Boolean whether specified filter expression is valid against the input.","content":{"application/json":{"schema":{"type":"object","properties":{"isValid":{"type":"boolean","description":"True if specified filter expression is valid against the input, false otherwise."}}},"example":{"isValid":true}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"oauth2":["idn:trigger-service-subscriptions-validate-filter:create"]}],"method":"post","path":"/trigger-subscriptions/validate-filter","servers":[{"url":"https://{tenant}.api.identitynow.com/beta","description":"This is the beta API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"input":{"identityId":"201327fda1c44704ac01181e963d463c"},"filter":"$[?($.identityId == \"201327fda1c44704ac01181e963d463c\")]"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public, beta APIs for SailPoint's SaaS services and are subject to change.","title":"SailPoint - Beta SaaS API","version":"3.1.0-beta"},"postman":{"name":"Validate a Subscription Filter","description":{"content":"Validates a JSONPath filter expression against a provided mock input.\nRequest requires a security scope of: ","type":"text/plain"},"url":{"path":["trigger-subscriptions","validate-filter"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}},"auth":{"type":"oauth2","oauth2":[]}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-beta/sail-point-beta-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Validate a Subscription Filter + + + +Validates a JSONPath filter expression against a provided mock input. +Request requires a security scope of: + +
      Request Body required
      + +Boolean whether specified filter expression is valid against the input. + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/work-items.tag.mdx b/docs/sailpoint-api-beta/work-items.tag.mdx new file mode 100644 index 000000000..a815759e5 --- /dev/null +++ b/docs/sailpoint-api-beta/work-items.tag.mdx @@ -0,0 +1,19 @@ +--- +id: work-items +title: Work Items +description: Work Items +--- + + + +Operations for retrieving and modifying details relating to Work Items. + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-beta/workflows.tag.mdx b/docs/sailpoint-api-beta/workflows.tag.mdx new file mode 100644 index 000000000..38aa52bdf --- /dev/null +++ b/docs/sailpoint-api-beta/workflows.tag.mdx @@ -0,0 +1,24 @@ +--- +id: workflows +title: Workflows +description: Workflows +--- + + + +Workflows allow administrators to create custom automation scripts directly within IdentityNow. These automation scripts respond to [event triggers](https://developer.sailpoint.com/triggers/getting_started.html) and perform a series of actions to perform tasks that are either too cumbersome or not available in the IdentityNow UI. Workflows can be configured via a graphical user interface within IdentityNow, or by creating and uploading a JSON formatted script to the Workflow service. The Workflows API collection provides the necessary functionality to create, manage, and test your workflows via REST. + +Workflows is currently in Beta, and is not generally available to all customer tenants. If you would like to participate in the beta program, please [submit an application](https://app.smartsheet.com/b/form/e758ab109dc649589f57b4b5c41d4373). You must be a customer or partner to participate. + +For more information about how to build a workflow in the visual builder in the IdentityNow UI, use the documentation in the following link: + + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/access-request-approvals.tag.mdx b/docs/sailpoint-api-v3/access-request-approvals.tag.mdx new file mode 100644 index 000000000..eb3c7bfa7 --- /dev/null +++ b/docs/sailpoint-api-v3/access-request-approvals.tag.mdx @@ -0,0 +1,36 @@ +--- +id: access-request-approvals +title: Access Request Approvals +description: Access Request Approvals +--- + + + +Use this API to implement and customize access request approval functionality. +With this functionality in place, administrators can delegate qualified users to review users' requests for access or managers' requests to revoke team members' access to applications, entitlements, or roles. +This enables more qualified users to review access requests and the others to spend their time on other tasks. + +In IdentityNow, users can request access to applications, entitlements, and roles, and managers can request that team members' access be revoked. +For applications and entitlements, administrators can set access profiles to require approval from the access profile owner, the application owner, the source owner, the requesting user's manager, or a governance group for access to be granted or revoked. +For roles, administrators can also set roles to allow access requests and require approval from the role owner, the requesting user's manager, or a governance group for access to be granted or revoked. +If the administrator designates a governance group as the required approver, any governance group member can approve the requests. + +When a user submits an access request, IdentityNow sends the first required approver in the queue an email notification, based on the access request configuration's approval and reminder escalation configuration. + +In Approvals in IdentityNow, required approvers can view pending access requests under the Requested tab and approve or deny them, or the approvers can reassign the requests to different reviewers for approval. +If the required approver approves the request and is the only reviewer required, IdentityNow grants or revokes access, based on the request. +If multiple reviewers are required, IdentityNow sends the request to the next reviewer in the queue, based on the access request configuration's approval reminder and escalation configuration. +The required approver can then view any completed access requests under the Reviewed tab. + +Refer to the following link for more information about access request approvals. + + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/access-requests.tag.mdx b/docs/sailpoint-api-v3/access-requests.tag.mdx new file mode 100644 index 000000000..a6e8d13aa --- /dev/null +++ b/docs/sailpoint-api-v3/access-requests.tag.mdx @@ -0,0 +1,32 @@ +--- +id: access-requests +title: Access Requests +description: Access Requests +--- + + + +Use this API to implement and customize access request functionality. +With this functionality in place, users can request access to applications, entitlements, or roles, and managers can request that team members' access be revoked. +This allows users to get access to the tools they need quickly and securely, and it allows managers to take away access to those tools. + +In the Request Center in IdentityNow, users can view available applications, roles, and entitlements and request access to them. +If the requested tools requires approval, the requests appear as 'Pending' under the My Requests tab until the required approver approves, rejects, or cancels them. + +Users can use My Requests to track and/or cancel the requests. + +In My Team on the IdentityNow Home, managers can submit requests to revoke their team members' access. +They can use the My Requests tab under Request Center to track and/or cancel the requests. + +Refer to the following link for more information about access requests. + + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/account-activities.tag.mdx b/docs/sailpoint-api-v3/account-activities.tag.mdx new file mode 100644 index 000000000..0f31a6165 --- /dev/null +++ b/docs/sailpoint-api-v3/account-activities.tag.mdx @@ -0,0 +1,15 @@ +--- +id: account-activities +title: Account Activities +description: Account Activities +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/accounts.tag.mdx b/docs/sailpoint-api-v3/accounts.tag.mdx new file mode 100644 index 000000000..2931ec9ff --- /dev/null +++ b/docs/sailpoint-api-v3/accounts.tag.mdx @@ -0,0 +1,15 @@ +--- +id: accounts +title: Accounts +description: Accounts +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/approval-summary.api.mdx b/docs/sailpoint-api-v3/approval-summary.api.mdx new file mode 100644 index 000000000..dda937318 --- /dev/null +++ b/docs/sailpoint-api-v3/approval-summary.api.mdx @@ -0,0 +1,75 @@ +--- +id: approval-summary +sidebar_label: Get the number of access-requests-approvals +hide_title: true +hide_table_of_contents: true +api: {"operationId":"approvalSummary","tags":["Access Request Approvals"],"description":"This endpoint returns the number of pending, approved and rejected access requests approvals. See \"owner-id\" query parameter below for authorization info.","parameters":[{"in":"query","name":"owner-id","schema":{"type":"string"},"description":"The id of the owner or approver identity of the approvals. If present, the value returns approval summary for the specified identity.\n * ORG_ADMIN users can call this with any identity ID value.\n * ORG_ADMIN user can also fetch all the approvals in the org, when owner-id is not used.\n * Non ORG_ADMIN users can only specify *me* or pass their own identity ID value.","example":"2c91808568c529c60168cca6f90c1313"},{"in":"query","name":"from-date","schema":{"type":"string"},"description":"From date is the date and time from which the results will be shown. It should be in a valid ISO-8601 format","example":"from-date=2020-03-19T19:59:11Z"}],"responses":{"200":{"description":"Number of pending, approved, rejected access request approvals.","content":{"application/json":{"schema":{"type":"object","properties":{"pending":{"type":"integer","description":"The number of pending access requests approvals.","format":"int32","example":0},"approved":{"type":"integer","description":"The number of approved access requests approvals.","format":"int32","example":0},"rejected":{"type":"integer","description":"The number of rejected access requests approvals.","format":"int32","example":0}}}}}},"400":{"description":"Client Error - Returned if the query parameter is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/access-request-approvals/approval-summary","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get the number of access-requests-approvals","description":{"content":"This endpoint returns the number of pending, approved and rejected access requests approvals. See \"owner-id\" query parameter below for authorization info.","type":"text/plain"},"url":{"path":["access-request-approvals","approval-summary"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The id of the owner or approver identity of the approvals. If present, the value returns approval summary for the specified identity.\n * ORG_ADMIN users can call this with any identity ID value.\n * ORG_ADMIN user can also fetch all the approvals in the org, when owner-id is not used.\n * Non ORG_ADMIN users can only specify *me* or pass their own identity ID value.","type":"text/plain"},"key":"owner-id","value":""},{"disabled":false,"description":{"content":"From date is the date and time from which the results will be shown. It should be in a valid ISO-8601 format","type":"text/plain"},"key":"from-date","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get the number of access-requests-approvals + + + +This endpoint returns the number of pending, approved and rejected access requests approvals. See "owner-id" query parameter below for authorization info. + +
      Query Parameters
      + +Number of pending, approved, rejected access request approvals. + +
      Schema
      + +Client Error - Returned if the query parameter is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/approve-approval-item.api.mdx b/docs/sailpoint-api-v3/approve-approval-item.api.mdx new file mode 100644 index 000000000..e5dd79019 --- /dev/null +++ b/docs/sailpoint-api-v3/approve-approval-item.api.mdx @@ -0,0 +1,87 @@ +--- +id: approve-approval-item +sidebar_label: Approve an Approval Item +hide_title: true +hide_table_of_contents: true +api: {"operationId":"approveApprovalItem","tags":["Work Items"],"description":"This API approves an Approval Item. Either an admin, or the owning/current user must make this request.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the work item","example":"ef38f94347e94562b5bb8424a56397d8"},{"in":"path","name":"approvalItemId","schema":{"type":"string"},"required":true,"description":"The ID of the approval item.","example":"1211bcaa32112bcef6122adb21cef1ac"}],"responses":{"200":{"description":"A work items details object.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the work item","example":"2c9180835d2e5168015d32f890ca1581"},"requesterId":{"type":"string","description":"ID of the requester","example":"2c9180835d2e5168015d32f890ca1581"},"requesterDisplayName":{"type":"string","description":"The displayname of the requester","example":"John Smith"},"ownerId":{"type":"string","description":"The ID of the owner","example":"2c9180835d2e5168015d32f890ca1581"},"ownerName":{"type":"string","description":"The name of the owner","example":"Jason Smith"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"description":{"type":"string","description":"The description of the work item","example":"Create account on source 'AD'"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"type":{"type":"string","enum":["UNKNOWN","GENERIC","CERTIFICATION","REMEDIATION","DELEGATION","APPROVAL","VIOLATIONREVIEW","FORM","POLICYVIOLATION","CHALLENGE","IMPACTANALYSIS","SIGNOFF","EVENT","MANUALACTION","TEST"]},"remediationItems":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the certification","example":"2c9180835d2e5168015d32f890ca1581"},"targetId":{"type":"string","description":"The ID of the certification target","example":"2c9180835d2e5168015d32f890ca1581"},"targetName":{"type":"string","description":"The name of the certification target","example":"john.smith"},"targetDisplayName":{"type":"string","description":"The display name of the certification target","example":"emailAddress"},"applicationName":{"type":"string","description":"The name of the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute being certified","example":"phoneNumber"},"attributeOperation":{"type":"string","description":"The operation of the certification on the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute being certified","example":"512-555-1212"},"nativeIdentity":{"type":"string","description":"The native identity of the target","example":"jason.smith2"}}},"approvalItems":{"type":"object","properties":{"id":{"type":"string","description":"ID of the approval item","example":"2c9180835d2e5168015d32f890ca1581"},"account":{"type":"string","description":"The account referenced by the approval item","example":"john.smith"},"application":{"type":"string","description":"The name the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute","example":"emailAddress"},"attributeOperation":{"type":"string","description":"The operation of the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute","example":"a@b.com"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]}}},"name":{"type":"string","description":"The work item name","example":"Account Create"},"completed":{"type":"string","format":"date-time","example":"2018-10-19T13:49:37.385Z"},"numItems":{"type":"integer","description":"The number of items in the work item","example":19},"form":{"type":"object","properties":{"id":{"type":"string","description":"ID of the form","example":"2c9180835d2e5168015d32f890ca1581"},"name":{"type":"string","description":"Name of the form","example":"AccountSelection Form"},"title":{"type":"string","description":"The form title","example":"Account Selection for John.Doe"},"subtitle":{"type":"string","description":"The form subtitle.","example":"Please select from the following"},"targetUser":{"type":"string","description":"The name of the user that should be shown this form","example":"Jane.Doe"},"sections":{"type":"object","allOf":[{"type":"object","properties":{"name":{"type":"string","description":"Name of the FormItem","example":"Field1"}}},{"type":"object","properties":{"label":{"type":"string","description":"Label of the section","example":"Section 1"},"formItems":{"type":"array","items":{"type":"object"},"description":"List of FormItems. FormItems can be SectionDetails and/or FieldDetails","example":[]}}}]}}},"errors":{"type":"array","items":{"type":"string"},"example":["The work item ID that was specified was not found."]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/work-items/{id}/approve/{approvalItemId}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Approve an Approval Item","description":{"content":"This API approves an Approval Item. Either an admin, or the owning/current user must make this request.","type":"text/plain"},"url":{"path":["work-items",":id","approve",":approvalItemId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the work item","type":"text/plain"},"type":"any","value":"","key":"id"},{"disabled":false,"description":{"content":"(Required) The ID of the approval item.","type":"text/plain"},"type":"any","value":"","key":"approvalItemId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Approve an Approval Item + + + +This API approves an Approval Item. Either an admin, or the owning/current user must make this request. + +
      Path Parameters
      + +A work items details object. + +
      Schema
        remediationItems object
        approvalItems object
        form object
        sections object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/approve-request.api.mdx b/docs/sailpoint-api-v3/approve-request.api.mdx new file mode 100644 index 000000000..71f61e637 --- /dev/null +++ b/docs/sailpoint-api-v3/approve-request.api.mdx @@ -0,0 +1,91 @@ +--- +id: approve-request +sidebar_label: Approves an access request approval. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"approveRequest","tags":["Access Request Approvals"],"description":"This endpoint approves an access request approval. Only the owner of the approval and ORG_ADMIN users are allowed to perform this action.","parameters":[{"in":"path","name":"approvalId","schema":{"type":"string"},"required":true,"description":"The id of the approval.","example":"2c91808b7294bea301729568c68c002e"}],"requestBody":{"description":"Reviewer's comment.","required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"comment":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat"},"author":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"ID of the author","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"}}},"created":{"type":"string","format":"date-time","description":"Date and time comment was created","example":"2017-07-11T18:45:37.098Z"}}}}}},"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/access-request-approvals/{approvalId}/approve","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"comment":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat","author":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"Adam Kennedy"},"created":"2017-07-11T18:45:37.098Z"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Approves an access request approval.","description":{"content":"This endpoint approves an access request approval. Only the owner of the approval and ORG_ADMIN users are allowed to perform this action.","type":"text/plain"},"url":{"path":["access-request-approvals",":approvalId","approve"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The id of the approval.","type":"text/plain"},"type":"any","value":"","key":"approvalId"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Approves an access request approval. + + + +This endpoint approves an access request approval. Only the owner of the approval and ORG_ADMIN users are allowed to perform this action. + +
      Path Parameters
      Request Body
      + +Reviewer's comment. + +
        author object
      + +Accepted - Returned if the request was successfully accepted into the system. + +
      Schema
      • object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/bulk-approve-approval-item.api.mdx b/docs/sailpoint-api-v3/bulk-approve-approval-item.api.mdx new file mode 100644 index 000000000..09b6b8c44 --- /dev/null +++ b/docs/sailpoint-api-v3/bulk-approve-approval-item.api.mdx @@ -0,0 +1,87 @@ +--- +id: bulk-approve-approval-item +sidebar_label: Bulk approve Approval Items +hide_title: true +hide_table_of_contents: true +api: {"operationId":"bulkApproveApprovalItem","tags":["Work Items"],"description":"This API bulk approves Approval Items. Either an admin, or the owning/current user must make this request.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the work item","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"A work items details object.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the work item","example":"2c9180835d2e5168015d32f890ca1581"},"requesterId":{"type":"string","description":"ID of the requester","example":"2c9180835d2e5168015d32f890ca1581"},"requesterDisplayName":{"type":"string","description":"The displayname of the requester","example":"John Smith"},"ownerId":{"type":"string","description":"The ID of the owner","example":"2c9180835d2e5168015d32f890ca1581"},"ownerName":{"type":"string","description":"The name of the owner","example":"Jason Smith"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"description":{"type":"string","description":"The description of the work item","example":"Create account on source 'AD'"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"type":{"type":"string","enum":["UNKNOWN","GENERIC","CERTIFICATION","REMEDIATION","DELEGATION","APPROVAL","VIOLATIONREVIEW","FORM","POLICYVIOLATION","CHALLENGE","IMPACTANALYSIS","SIGNOFF","EVENT","MANUALACTION","TEST"]},"remediationItems":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the certification","example":"2c9180835d2e5168015d32f890ca1581"},"targetId":{"type":"string","description":"The ID of the certification target","example":"2c9180835d2e5168015d32f890ca1581"},"targetName":{"type":"string","description":"The name of the certification target","example":"john.smith"},"targetDisplayName":{"type":"string","description":"The display name of the certification target","example":"emailAddress"},"applicationName":{"type":"string","description":"The name of the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute being certified","example":"phoneNumber"},"attributeOperation":{"type":"string","description":"The operation of the certification on the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute being certified","example":"512-555-1212"},"nativeIdentity":{"type":"string","description":"The native identity of the target","example":"jason.smith2"}}},"approvalItems":{"type":"object","properties":{"id":{"type":"string","description":"ID of the approval item","example":"2c9180835d2e5168015d32f890ca1581"},"account":{"type":"string","description":"The account referenced by the approval item","example":"john.smith"},"application":{"type":"string","description":"The name the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute","example":"emailAddress"},"attributeOperation":{"type":"string","description":"The operation of the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute","example":"a@b.com"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]}}},"name":{"type":"string","description":"The work item name","example":"Account Create"},"completed":{"type":"string","format":"date-time","example":"2018-10-19T13:49:37.385Z"},"numItems":{"type":"integer","description":"The number of items in the work item","example":19},"form":{"type":"object","properties":{"id":{"type":"string","description":"ID of the form","example":"2c9180835d2e5168015d32f890ca1581"},"name":{"type":"string","description":"Name of the form","example":"AccountSelection Form"},"title":{"type":"string","description":"The form title","example":"Account Selection for John.Doe"},"subtitle":{"type":"string","description":"The form subtitle.","example":"Please select from the following"},"targetUser":{"type":"string","description":"The name of the user that should be shown this form","example":"Jane.Doe"},"sections":{"type":"object","allOf":[{"type":"object","properties":{"name":{"type":"string","description":"Name of the FormItem","example":"Field1"}}},{"type":"object","properties":{"label":{"type":"string","description":"Label of the section","example":"Section 1"},"formItems":{"type":"array","items":{"type":"object"},"description":"List of FormItems. FormItems can be SectionDetails and/or FieldDetails","example":[]}}}]}}},"errors":{"type":"array","items":{"type":"string"},"example":["The work item ID that was specified was not found."]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/work-items/bulk-approve/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Bulk approve Approval Items","description":{"content":"This API bulk approves Approval Items. Either an admin, or the owning/current user must make this request.","type":"text/plain"},"url":{"path":["work-items","bulk-approve",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the work item","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Bulk approve Approval Items + + + +This API bulk approves Approval Items. Either an admin, or the owning/current user must make this request. + +
      Path Parameters
      + +A work items details object. + +
      Schema
        remediationItems object
        approvalItems object
        form object
        sections object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/bulk-reject-approval-item.api.mdx b/docs/sailpoint-api-v3/bulk-reject-approval-item.api.mdx new file mode 100644 index 000000000..baded7a49 --- /dev/null +++ b/docs/sailpoint-api-v3/bulk-reject-approval-item.api.mdx @@ -0,0 +1,87 @@ +--- +id: bulk-reject-approval-item +sidebar_label: Bulk reject Approval Items +hide_title: true +hide_table_of_contents: true +api: {"operationId":"bulkRejectApprovalItem","tags":["Work Items"],"description":"This API bulk rejects Approval Items. Either an admin, or the owning/current user must make this request.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the work item","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"A work items details object.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the work item","example":"2c9180835d2e5168015d32f890ca1581"},"requesterId":{"type":"string","description":"ID of the requester","example":"2c9180835d2e5168015d32f890ca1581"},"requesterDisplayName":{"type":"string","description":"The displayname of the requester","example":"John Smith"},"ownerId":{"type":"string","description":"The ID of the owner","example":"2c9180835d2e5168015d32f890ca1581"},"ownerName":{"type":"string","description":"The name of the owner","example":"Jason Smith"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"description":{"type":"string","description":"The description of the work item","example":"Create account on source 'AD'"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"type":{"type":"string","enum":["UNKNOWN","GENERIC","CERTIFICATION","REMEDIATION","DELEGATION","APPROVAL","VIOLATIONREVIEW","FORM","POLICYVIOLATION","CHALLENGE","IMPACTANALYSIS","SIGNOFF","EVENT","MANUALACTION","TEST"]},"remediationItems":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the certification","example":"2c9180835d2e5168015d32f890ca1581"},"targetId":{"type":"string","description":"The ID of the certification target","example":"2c9180835d2e5168015d32f890ca1581"},"targetName":{"type":"string","description":"The name of the certification target","example":"john.smith"},"targetDisplayName":{"type":"string","description":"The display name of the certification target","example":"emailAddress"},"applicationName":{"type":"string","description":"The name of the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute being certified","example":"phoneNumber"},"attributeOperation":{"type":"string","description":"The operation of the certification on the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute being certified","example":"512-555-1212"},"nativeIdentity":{"type":"string","description":"The native identity of the target","example":"jason.smith2"}}},"approvalItems":{"type":"object","properties":{"id":{"type":"string","description":"ID of the approval item","example":"2c9180835d2e5168015d32f890ca1581"},"account":{"type":"string","description":"The account referenced by the approval item","example":"john.smith"},"application":{"type":"string","description":"The name the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute","example":"emailAddress"},"attributeOperation":{"type":"string","description":"The operation of the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute","example":"a@b.com"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]}}},"name":{"type":"string","description":"The work item name","example":"Account Create"},"completed":{"type":"string","format":"date-time","example":"2018-10-19T13:49:37.385Z"},"numItems":{"type":"integer","description":"The number of items in the work item","example":19},"form":{"type":"object","properties":{"id":{"type":"string","description":"ID of the form","example":"2c9180835d2e5168015d32f890ca1581"},"name":{"type":"string","description":"Name of the form","example":"AccountSelection Form"},"title":{"type":"string","description":"The form title","example":"Account Selection for John.Doe"},"subtitle":{"type":"string","description":"The form subtitle.","example":"Please select from the following"},"targetUser":{"type":"string","description":"The name of the user that should be shown this form","example":"Jane.Doe"},"sections":{"type":"object","allOf":[{"type":"object","properties":{"name":{"type":"string","description":"Name of the FormItem","example":"Field1"}}},{"type":"object","properties":{"label":{"type":"string","description":"Label of the section","example":"Section 1"},"formItems":{"type":"array","items":{"type":"object"},"description":"List of FormItems. FormItems can be SectionDetails and/or FieldDetails","example":[]}}}]}}},"errors":{"type":"array","items":{"type":"string"},"example":["The work item ID that was specified was not found."]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/work-items/bulk-reject/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Bulk reject Approval Items","description":{"content":"This API bulk rejects Approval Items. Either an admin, or the owning/current user must make this request.","type":"text/plain"},"url":{"path":["work-items","bulk-reject",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the work item","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Bulk reject Approval Items + + + +This API bulk rejects Approval Items. Either an admin, or the owning/current user must make this request. + +
      Path Parameters
      + +A work items details object. + +
      Schema
        remediationItems object
        approvalItems object
        form object
        sections object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/bulk-update-provisioning-policies.api.mdx b/docs/sailpoint-api-v3/bulk-update-provisioning-policies.api.mdx new file mode 100644 index 000000000..85620d372 --- /dev/null +++ b/docs/sailpoint-api-v3/bulk-update-provisioning-policies.api.mdx @@ -0,0 +1,88 @@ +--- +id: bulk-update-provisioning-policies +sidebar_label: Bulk Update Provisioning Policies +hide_title: true +hide_table_of_contents: true +api: {"operationId":"bulkUpdateProvisioningPolicies","tags":["Sources"],"description":"This end-point updates a list of provisioning policies on the specified source in IdentityNow.\nA token with API, or ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:provisioning-policy-bulk:update"]}],"parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source id.","example":"2c9180835d191a86015d28455b4a2329"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"usageType":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"userName"},"transform":{"type":"object","description":"The transform to apply to the field","example":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"default":{}},"attributes":{"type":"object","description":"Attributes required for the transform","example":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"}},"type":{"type":"string","description":"The type of the attribute.","example":"string"},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","default":false,"example":false}}}}}}}}}},"responses":{"200":{"description":"A list of the ProvisioningPolicyDto was successfully replaced.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"usageType":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"userName"},"transform":{"type":"object","description":"The transform to apply to the field","example":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"default":{}},"attributes":{"type":"object","description":"Attributes required for the transform","example":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"}},"isRequired":{"type":"boolean","readOnly":true,"description":"Flag indicating whether or not the attribute is required.","default":false,"example":false},"type":{"type":"string","description":"The type of the attribute.","example":"string"},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","default":false,"example":false}}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/sources/{sourceId}/provisioning-policies/bulk-update","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"name":"string","description":"string","usageType":"CREATE","fields":[{"name":"userName","transform":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"attributes":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"},"type":"string","isMultiValued":false}]}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Bulk Update Provisioning Policies","description":{"content":"This end-point updates a list of provisioning policies on the specified source in IdentityNow.\nA token with API, or ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":sourceId","provisioning-policies","bulk-update"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id.","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Bulk Update Provisioning Policies + + + +This end-point updates a list of provisioning policies on the specified source in IdentityNow. +A token with API, or ORG_ADMIN authority is required to call this API. + +
      Path Parameters
      Request Body array required
        fields object[]
      + +A list of the ProvisioningPolicyDto was successfully replaced. + +
      Schema array
        fields object[]
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/cancel-access-request.api.mdx b/docs/sailpoint-api-v3/cancel-access-request.api.mdx new file mode 100644 index 000000000..f80382b22 --- /dev/null +++ b/docs/sailpoint-api-v3/cancel-access-request.api.mdx @@ -0,0 +1,88 @@ +--- +id: cancel-access-request +sidebar_label: Cancel Access Request +hide_title: true +hide_table_of_contents: true +api: {"operationId":"cancelAccessRequest","tags":["Access Requests"],"description":"This API endpoint cancels a pending access request. An access request can be cancelled only if it has not passed the approval step.\nAny token with ORG_ADMIN authority or token of the user who originally requested the access request is required to cancel it.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body payload for cancel access request endpoint.","required":["accountActivityId","comment"],"properties":{"accountActivityId":{"type":"string","description":"ID of the account activity object corresponding to the access request.","example":"2c9180835d2e5168015d32f890ca1581"},"comment":{"type":"string","description":"Reason for cancelling the pending access request.","example":"I requested this role by mistake."}}},"example":{"accountActivityId":"2c91808568c529c60168cca6f90c1313","comment":"I requested this role by mistake."}}}},"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/access-requests/cancel","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"accountActivityId":"2c9180835d2e5168015d32f890ca1581","comment":"I requested this role by mistake."},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Cancel Access Request","description":{"content":"This API endpoint cancels a pending access request. An access request can be cancelled only if it has not passed the approval step.\nAny token with ORG_ADMIN authority or token of the user who originally requested the access request is required to cancel it.","type":"text/plain"},"url":{"path":["access-requests","cancel"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Cancel Access Request + + + +This API endpoint cancels a pending access request. An access request can be cancelled only if it has not passed the approval step. +Any token with ORG_ADMIN authority or token of the user who originally requested the access request is required to cancel it. + +
      Request Body required
      + +Accepted - Returned if the request was successfully accepted into the system. + +
      Schema
      • object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/certification-summaries.tag.mdx b/docs/sailpoint-api-v3/certification-summaries.tag.mdx new file mode 100644 index 000000000..f0496e100 --- /dev/null +++ b/docs/sailpoint-api-v3/certification-summaries.tag.mdx @@ -0,0 +1,15 @@ +--- +id: certification-summaries +title: Certification Summaries +description: Certification Summaries +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/certifications.tag.mdx b/docs/sailpoint-api-v3/certifications.tag.mdx new file mode 100644 index 000000000..f69195d90 --- /dev/null +++ b/docs/sailpoint-api-v3/certifications.tag.mdx @@ -0,0 +1,15 @@ +--- +id: certifications +title: Certifications +description: Certifications +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/complete-work-item.api.mdx b/docs/sailpoint-api-v3/complete-work-item.api.mdx new file mode 100644 index 000000000..35d466aca --- /dev/null +++ b/docs/sailpoint-api-v3/complete-work-item.api.mdx @@ -0,0 +1,87 @@ +--- +id: complete-work-item +sidebar_label: Complete a Work Item +hide_title: true +hide_table_of_contents: true +api: {"operationId":"completeWorkItem","tags":["Work Items"],"description":"This API completes a work item. Either an admin, or the owning/current user must make this request.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the work item","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"A WorkItems object","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the work item","example":"2c9180835d2e5168015d32f890ca1581"},"requesterId":{"type":"string","description":"ID of the requester","example":"2c9180835d2e5168015d32f890ca1581"},"requesterDisplayName":{"type":"string","description":"The displayname of the requester","example":"John Smith"},"ownerId":{"type":"string","description":"The ID of the owner","example":"2c9180835d2e5168015d32f890ca1581"},"ownerName":{"type":"string","description":"The name of the owner","example":"Jason Smith"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"description":{"type":"string","description":"The description of the work item","example":"Create account on source 'AD'"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"type":{"type":"string","enum":["UNKNOWN","GENERIC","CERTIFICATION","REMEDIATION","DELEGATION","APPROVAL","VIOLATIONREVIEW","FORM","POLICYVIOLATION","CHALLENGE","IMPACTANALYSIS","SIGNOFF","EVENT","MANUALACTION","TEST"]},"remediationItems":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the certification","example":"2c9180835d2e5168015d32f890ca1581"},"targetId":{"type":"string","description":"The ID of the certification target","example":"2c9180835d2e5168015d32f890ca1581"},"targetName":{"type":"string","description":"The name of the certification target","example":"john.smith"},"targetDisplayName":{"type":"string","description":"The display name of the certification target","example":"emailAddress"},"applicationName":{"type":"string","description":"The name of the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute being certified","example":"phoneNumber"},"attributeOperation":{"type":"string","description":"The operation of the certification on the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute being certified","example":"512-555-1212"},"nativeIdentity":{"type":"string","description":"The native identity of the target","example":"jason.smith2"}}},"approvalItems":{"type":"object","properties":{"id":{"type":"string","description":"ID of the approval item","example":"2c9180835d2e5168015d32f890ca1581"},"account":{"type":"string","description":"The account referenced by the approval item","example":"john.smith"},"application":{"type":"string","description":"The name the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute","example":"emailAddress"},"attributeOperation":{"type":"string","description":"The operation of the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute","example":"a@b.com"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]}}},"name":{"type":"string","description":"The work item name","example":"Account Create"},"completed":{"type":"string","format":"date-time","example":"2018-10-19T13:49:37.385Z"},"numItems":{"type":"integer","description":"The number of items in the work item","example":19},"form":{"type":"object","properties":{"id":{"type":"string","description":"ID of the form","example":"2c9180835d2e5168015d32f890ca1581"},"name":{"type":"string","description":"Name of the form","example":"AccountSelection Form"},"title":{"type":"string","description":"The form title","example":"Account Selection for John.Doe"},"subtitle":{"type":"string","description":"The form subtitle.","example":"Please select from the following"},"targetUser":{"type":"string","description":"The name of the user that should be shown this form","example":"Jane.Doe"},"sections":{"type":"object","allOf":[{"type":"object","properties":{"name":{"type":"string","description":"Name of the FormItem","example":"Field1"}}},{"type":"object","properties":{"label":{"type":"string","description":"Label of the section","example":"Section 1"},"formItems":{"type":"array","items":{"type":"object"},"description":"List of FormItems. FormItems can be SectionDetails and/or FieldDetails","example":[]}}}]}}},"errors":{"type":"array","items":{"type":"string"},"example":["The work item ID that was specified was not found."]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/work-items/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Complete a Work Item","description":{"content":"This API completes a work item. Either an admin, or the owning/current user must make this request.","type":"text/plain"},"url":{"path":["work-items",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the work item","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Complete a Work Item + + + +This API completes a work item. Either an admin, or the owning/current user must make this request. + +
      Path Parameters
      + +A WorkItems object + +
      Schema
        remediationItems object
        approvalItems object
        form object
        sections object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/completed-work-items.api.mdx b/docs/sailpoint-api-v3/completed-work-items.api.mdx new file mode 100644 index 000000000..62fb5f104 --- /dev/null +++ b/docs/sailpoint-api-v3/completed-work-items.api.mdx @@ -0,0 +1,75 @@ +--- +id: completed-work-items +sidebar_label: Completed Work Items +hide_title: true +hide_table_of_contents: true +api: {"operationId":"completedWorkItems","tags":["Work Items"],"description":"This gets a collection of completed work items belonging to either the specified user(admin required), or the current user.","parameters":[{"in":"query","name":"ownerId","schema":{"type":"string"},"description":"The id of the owner of the work item list being requested. Either an admin, or the owning/current user must make this request.","required":false},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"List of completed work items.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the work item","example":"2c9180835d2e5168015d32f890ca1581"},"requesterId":{"type":"string","description":"ID of the requester","example":"2c9180835d2e5168015d32f890ca1581"},"requesterDisplayName":{"type":"string","description":"The displayname of the requester","example":"John Smith"},"ownerId":{"type":"string","description":"The ID of the owner","example":"2c9180835d2e5168015d32f890ca1581"},"ownerName":{"type":"string","description":"The name of the owner","example":"Jason Smith"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"description":{"type":"string","description":"The description of the work item","example":"Create account on source 'AD'"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"type":{"type":"string","enum":["UNKNOWN","GENERIC","CERTIFICATION","REMEDIATION","DELEGATION","APPROVAL","VIOLATIONREVIEW","FORM","POLICYVIOLATION","CHALLENGE","IMPACTANALYSIS","SIGNOFF","EVENT","MANUALACTION","TEST"]},"remediationItems":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the certification","example":"2c9180835d2e5168015d32f890ca1581"},"targetId":{"type":"string","description":"The ID of the certification target","example":"2c9180835d2e5168015d32f890ca1581"},"targetName":{"type":"string","description":"The name of the certification target","example":"john.smith"},"targetDisplayName":{"type":"string","description":"The display name of the certification target","example":"emailAddress"},"applicationName":{"type":"string","description":"The name of the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute being certified","example":"phoneNumber"},"attributeOperation":{"type":"string","description":"The operation of the certification on the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute being certified","example":"512-555-1212"},"nativeIdentity":{"type":"string","description":"The native identity of the target","example":"jason.smith2"}}},"approvalItems":{"type":"object","properties":{"id":{"type":"string","description":"ID of the approval item","example":"2c9180835d2e5168015d32f890ca1581"},"account":{"type":"string","description":"The account referenced by the approval item","example":"john.smith"},"application":{"type":"string","description":"The name the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute","example":"emailAddress"},"attributeOperation":{"type":"string","description":"The operation of the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute","example":"a@b.com"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]}}},"name":{"type":"string","description":"The work item name","example":"Account Create"},"completed":{"type":"string","format":"date-time","example":"2018-10-19T13:49:37.385Z"},"numItems":{"type":"integer","description":"The number of items in the work item","example":19},"form":{"type":"object","properties":{"id":{"type":"string","description":"ID of the form","example":"2c9180835d2e5168015d32f890ca1581"},"name":{"type":"string","description":"Name of the form","example":"AccountSelection Form"},"title":{"type":"string","description":"The form title","example":"Account Selection for John.Doe"},"subtitle":{"type":"string","description":"The form subtitle.","example":"Please select from the following"},"targetUser":{"type":"string","description":"The name of the user that should be shown this form","example":"Jane.Doe"},"sections":{"type":"object","allOf":[{"type":"object","properties":{"name":{"type":"string","description":"Name of the FormItem","example":"Field1"}}},{"type":"object","properties":{"label":{"type":"string","description":"Label of the section","example":"Section 1"},"formItems":{"type":"array","items":{"type":"object"},"description":"List of FormItems. FormItems can be SectionDetails and/or FieldDetails","example":[]}}}]}}},"errors":{"type":"array","items":{"type":"string"},"example":["The work item ID that was specified was not found."]}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/work-items/completed","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Completed Work Items","description":{"content":"This gets a collection of completed work items belonging to either the specified user(admin required), or the current user.","type":"text/plain"},"url":{"path":["work-items","completed"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The id of the owner of the work item list being requested. Either an admin, or the owning/current user must make this request.","type":"text/plain"},"key":"ownerId","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Completed Work Items + + + +This gets a collection of completed work items belonging to either the specified user(admin required), or the current user. + +
      Query Parameters
      + +List of completed work items. + +
      Schema array
        remediationItems object
        approvalItems object
        form object
        sections object
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/count-completed-work-items.api.mdx b/docs/sailpoint-api-v3/count-completed-work-items.api.mdx new file mode 100644 index 000000000..4bff4ea8e --- /dev/null +++ b/docs/sailpoint-api-v3/count-completed-work-items.api.mdx @@ -0,0 +1,75 @@ +--- +id: count-completed-work-items +sidebar_label: Count Completed Work Items +hide_title: true +hide_table_of_contents: true +api: {"operationId":"countCompletedWorkItems","tags":["Work Items"],"description":"This gets a count of completed work items belonging to either the specified user(admin required), or the current user.","parameters":[{"in":"query","name":"ownerId","schema":{"type":"string"},"description":"ID of the work item owner.","required":false}],"responses":{"200":{"description":"List of work items","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer","description":"The count of work items","example":29}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/work-items/completed/count","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Count Completed Work Items","description":{"content":"This gets a count of completed work items belonging to either the specified user(admin required), or the current user.","type":"text/plain"},"url":{"path":["work-items","completed","count"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"ID of the work item owner.","type":"text/plain"},"key":"ownerId","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Count Completed Work Items + + + +This gets a count of completed work items belonging to either the specified user(admin required), or the current user. + +
      Query Parameters
      + +List of work items + +
      Schema
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/count-work-items.api.mdx b/docs/sailpoint-api-v3/count-work-items.api.mdx new file mode 100644 index 000000000..2aa3f6da6 --- /dev/null +++ b/docs/sailpoint-api-v3/count-work-items.api.mdx @@ -0,0 +1,75 @@ +--- +id: count-work-items +sidebar_label: Count Work Items +hide_title: true +hide_table_of_contents: true +api: {"operationId":"countWorkItems","tags":["Work Items"],"description":"This gets a count of work items belonging to either the specified user(admin required), or the current user.","parameters":[{"in":"query","name":"ownerId","schema":{"type":"string"},"description":"ID of the work item owner.","required":false}],"responses":{"200":{"description":"List of work items","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer","description":"The count of work items","example":29}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/work-items/count","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Count Work Items","description":{"content":"This gets a count of work items belonging to either the specified user(admin required), or the current user.","type":"text/plain"},"url":{"path":["work-items","count"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"ID of the work item owner.","type":"text/plain"},"key":"ownerId","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Count Work Items + + + +This gets a count of work items belonging to either the specified user(admin required), or the current user. + +
      Query Parameters
      + +List of work items + +
      Schema
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/create-access-request.api.mdx b/docs/sailpoint-api-v3/create-access-request.api.mdx new file mode 100644 index 000000000..53481795d --- /dev/null +++ b/docs/sailpoint-api-v3/create-access-request.api.mdx @@ -0,0 +1,112 @@ +--- +id: create-access-request +sidebar_label: Submit an Access Request +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createAccessRequest","tags":["Access Requests"],"description":"This submits the access request into IdentityNow, where it will follow any IdentityNow approval processes.\n\nAccess requests are processed asynchronously by IdentityNow. A success response from this endpoint means the request\nhas been submitted to IDN and is queued for processing. Because this endpoint is asynchronous, it will not return an error\nif you submit duplicate access requests in quick succession, or you submit an access request for access that is already in progress, approved, or rejected.\nIt is best practice to check for any existing access requests that reference the same access items before submitting a new access request. This can\nbe accomplished by using the [access request status](https://developer.sailpoint.com/apis/v3/#operation/listAccessRequestStatus) endpoint. You can also\nuse the [search API](https://developer.sailpoint.com/apis/v3/#operation/search) to check the existing access items that an identity has before submitting\nan access request to ensure you are not requesting access that is already granted.\n\nThere are two types of access request:\n\n__GRANT_ACCESS__\n* Can be requested for multiple identities in a single request.\n* Supports self request and request on behalf of other users, see '/beta/access-request-config' endpoint for request configuration options. \n* Allows any authenticated token (except API) to call this endpoint to request to grant access to themselves. Depending on the configuration, a user can request access for others.\n* Roles, Access Profiles and Entitlements can be requested.\n* While requesting entitlements, maximum of 5 entitlements and 10 recipients are allowed in a request.\n \n__REVOKE_ACCESS__\n* Can only be requested for a single identity at a time.\n* Does not support self request. Only manager can request to revoke access for their directly managed employees.\n* If removeDate is specified, then the access will be removed on that date and time.\n* Allows a manager to request to revoke access for direct employees. A token with ORG_ADMIN authority can also request to revoke access from anyone.\n* Roles and Access Profiles can be requested for revocation. Revoke request for entitlements are not supported currently.\n\nNOTE: There is no indication to the approver in the IdentityNow UI that the approval request is for a revoke action. Take this into consideration when calling this API.\n\nA token with API authority cannot be used to call this endpoint. \n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"requestedFor":{"description":"A list of Identity IDs for whom the Access is requested. If it's a Revoke request, there can only be one Identity ID.","type":"array","items":{"type":"string","example":"2c918084660f45d6016617daa9210584"}},"requestType":{"type":"string","enum":["GRANT_ACCESS","REVOKE_ACCESS"],"description":"Access request type. Defaults to GRANT_ACCESS. REVOKE_ACCESS type can only have a single Identity ID in the requestedFor field. Currently REVOKE_ACCESS is not supported for entitlements.","example":"GRANT_ACCESS"},"requestedItems":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE","ENTITLEMENT"],"description":"The type of the item being requested.","example":"ACCESS_PROFILE"},"id":{"type":"string","description":"ID of Role, Access Profile or Entitlement being requested.","example":"2c9180835d2e5168015d32f890ca1581"},"comment":{"type":"string","description":"Comment provided by requester.\n* Comment is required when the request is of type Revoke Access.\n","example":"Requesting access profile for John Doe"},"clientMetadata":{"type":"object","additionalProperties":{"type":"string","example":{"requestedAppId":"2c91808f7892918f0178b78da4a305a1","requestedAppName":"test-app"}},"example":{"requestedAppName":"test-app","requestedAppId":"2c91808f7892918f0178b78da4a305a1"},"description":"Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on associated APIs such as /account-activities."},"removeDate":{"type":"string","description":"The date the role or access profile is no longer assigned to the specified identity.\n* Specify a date in the future.\n* The current SLA for the deprovisioning is 24 hours.\n* This date can be modified to either extend or decrease the duration of access item assignments for the specified identity.\n* Currently it is not supported for entitlements.\n","format":"date-time","example":"2020-07-11T21:23:15.000Z"}},"required":["id","type"]}},"clientMetadata":{"type":"object","additionalProperties":{"type":"string","example":{"requestedAppId":"2c91808f7892918f0178b78da4a305a1","requestedAppName":"test-app"}},"example":{"requestedAppId":"2c91808f7892918f0178b78da4a305a1","requestedAppName":"test-app"},"description":"Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on associated APIs such as /account-activities."}},"required":["requestedFor","requestedItems"]}}}},"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/access-requests","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"requestedFor":["2c918084660f45d6016617daa9210584"],"requestType":"GRANT_ACCESS","requestedItems":[{"type":"ACCESS_PROFILE","id":"2c9180835d2e5168015d32f890ca1581","comment":"Requesting access profile for John Doe","clientMetadata":{"requestedAppName":"test-app","requestedAppId":"2c91808f7892918f0178b78da4a305a1"},"removeDate":"2020-07-11T21:23:15.000Z"}],"clientMetadata":{"requestedAppId":"2c91808f7892918f0178b78da4a305a1","requestedAppName":"test-app"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Submit an Access Request","description":{"content":"This submits the access request into IdentityNow, where it will follow any IdentityNow approval processes.\n\nAccess requests are processed asynchronously by IdentityNow. A success response from this endpoint means the request\nhas been submitted to IDN and is queued for processing. Because this endpoint is asynchronous, it will not return an error\nif you submit duplicate access requests in quick succession, or you submit an access request for access that is already in progress, approved, or rejected.\nIt is best practice to check for any existing access requests that reference the same access items before submitting a new access request. This can\nbe accomplished by using the [access request status](https://developer.sailpoint.com/apis/v3/#operation/listAccessRequestStatus) endpoint. You can also\nuse the [search API](https://developer.sailpoint.com/apis/v3/#operation/search) to check the existing access items that an identity has before submitting\nan access request to ensure you are not requesting access that is already granted.\n\nThere are two types of access request:\n\n__GRANT_ACCESS__\n* Can be requested for multiple identities in a single request.\n* Supports self request and request on behalf of other users, see '/beta/access-request-config' endpoint for request configuration options. \n* Allows any authenticated token (except API) to call this endpoint to request to grant access to themselves. Depending on the configuration, a user can request access for others.\n* Roles, Access Profiles and Entitlements can be requested.\n* While requesting entitlements, maximum of 5 entitlements and 10 recipients are allowed in a request.\n \n__REVOKE_ACCESS__\n* Can only be requested for a single identity at a time.\n* Does not support self request. Only manager can request to revoke access for their directly managed employees.\n* If removeDate is specified, then the access will be removed on that date and time.\n* Allows a manager to request to revoke access for direct employees. A token with ORG_ADMIN authority can also request to revoke access from anyone.\n* Roles and Access Profiles can be requested for revocation. Revoke request for entitlements are not supported currently.\n\nNOTE: There is no indication to the approver in the IdentityNow UI that the approval request is for a revoke action. Take this into consideration when calling this API.\n\nA token with API authority cannot be used to call this endpoint. \n","type":"text/plain"},"url":{"path":["access-requests"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Submit an Access Request + + + +This submits the access request into IdentityNow, where it will follow any IdentityNow approval processes. + +Access requests are processed asynchronously by IdentityNow. A success response from this endpoint means the request +has been submitted to IDN and is queued for processing. Because this endpoint is asynchronous, it will not return an error +if you submit duplicate access requests in quick succession, or you submit an access request for access that is already in progress, approved, or rejected. +It is best practice to check for any existing access requests that reference the same access items before submitting a new access request. This can +be accomplished by using the [access request status](https://developer.sailpoint.com/apis/v3/#operation/listAccessRequestStatus) endpoint. You can also +use the [search API](https://developer.sailpoint.com/apis/v3/#operation/search) to check the existing access items that an identity has before submitting +an access request to ensure you are not requesting access that is already granted. + +There are two types of access request: + +__GRANT_ACCESS__ +* Can be requested for multiple identities in a single request. +* Supports self request and request on behalf of other users, see '/beta/access-request-config' endpoint for request configuration options. +* Allows any authenticated token (except API) to call this endpoint to request to grant access to themselves. Depending on the configuration, a user can request access for others. +* Roles, Access Profiles and Entitlements can be requested. +* While requesting entitlements, maximum of 5 entitlements and 10 recipients are allowed in a request. + +__REVOKE_ACCESS__ +* Can only be requested for a single identity at a time. +* Does not support self request. Only manager can request to revoke access for their directly managed employees. +* If removeDate is specified, then the access will be removed on that date and time. +* Allows a manager to request to revoke access for direct employees. A token with ORG_ADMIN authority can also request to revoke access from anyone. +* Roles and Access Profiles can be requested for revocation. Revoke request for entitlements are not supported currently. + +NOTE: There is no indication to the approver in the IdentityNow UI that the approval request is for a revoke action. Take this into consideration when calling this API. + +A token with API authority cannot be used to call this endpoint. + + +
      Request Body required
        requestedItems object[]
        clientMetadata object
        + +Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on associated APIs such as /account-activities. + +
      • property name* string
      • clientMetadata object
        + +Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on associated APIs such as /account-activities. + +
      • property name* string
      + +Accepted - Returned if the request was successfully accepted into the system. + +
      Schema
      • object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/create-account.api.mdx b/docs/sailpoint-api-v3/create-account.api.mdx new file mode 100644 index 000000000..2c6a7b643 --- /dev/null +++ b/docs/sailpoint-api-v3/create-account.api.mdx @@ -0,0 +1,80 @@ +--- +id: create-account +sidebar_label: Create Account +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createAccount","tags":["Accounts"],"description":"This API submits an account creation task and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:account:create"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["attributes"],"properties":{"attributes":{"description":"The schema attribute values for the account","type":"object","required":["sourceId"],"properties":{"sourceId":{"type":"string","description":"Target source to create an account","example":"34bfcbe116c9407464af37acbaf7a4dc"}},"additionalProperties":{"type":"string"},"example":{"sourceId":"34bfcbe116c9407464af37acbaf7a4dc","city":"Austin","displayName":"John Doe","userName":"jdoe","sAMAccountName":"jDoe","mail":"john.doe@sailpoint.com"}}}}}}},"responses":{"202":{"description":"Async task details","content":{"application/json":{"schema":{"description":"Accounts async response containing details on started async process","required":["id"],"type":"object","properties":{"id":{"description":"id of the task","type":"string","example":"2c91808474683da6017468693c260195"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/accounts","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"attributes":{"sourceId":"34bfcbe116c9407464af37acbaf7a4dc","city":"Austin","displayName":"John Doe","userName":"jdoe","sAMAccountName":"jDoe","mail":"john.doe@sailpoint.com"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Create Account","description":{"content":"This API submits an account creation task and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Account + + + +This API submits an account creation task and returns the task ID. +A token with ORG_ADMIN authority is required to call this API. + +
      Request Body required
        attributes object
        + +The schema attribute values for the account + +
      + +Async task details + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/create-lifecycle-state.api.mdx b/docs/sailpoint-api-v3/create-lifecycle-state.api.mdx new file mode 100644 index 000000000..c8d1052b9 --- /dev/null +++ b/docs/sailpoint-api-v3/create-lifecycle-state.api.mdx @@ -0,0 +1,88 @@ +--- +id: create-lifecycle-state +sidebar_label: Create Lifecycle State +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createLifecycleState","tags":["Lifecycle States"],"description":"This API creates a new Lifecycle State.\nA token with ORG_ADMIN or API authority is required to call this API.","security":[{"bearerAuth":["idn:identity-profile-lifecycle-state:create"]}],"parameters":[{"in":"path","name":"identity-profile-id","description":"Identity Profile ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Lifecycle State","required":true,"content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true},"modified":{"description":"Last modification date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true}}},{"type":"object","required":["technicalName"],"properties":{"enabled":{"type":"boolean","example":true,"description":"Whether the lifecycle state is enabled or disabled."},"technicalName":{"type":"string","example":"Technical Name","description":"The technical name for lifecycle state. This is for internal use."},"description":{"type":"string","example":"Lifecycle description","description":"Lifecycle state description."},"identityCount":{"type":"integer","format":"int32","example":42,"readOnly":true,"description":"Number of identities that have the lifecycle state."},"emailNotificationOption":{"type":"object","description":"This is used for representing email configuration for a lifecycle state","properties":{"notifyManagers":{"type":"boolean","example":true,"description":"If true, then the manager is notified of the lifecycle state change."},"notifyAllAdmins":{"type":"boolean","example":true,"description":"If true, then all the admins are notified of the lifecycle state change."},"notifySpecificUsers":{"type":"boolean","example":true,"description":"If true, then the users specified in \"emailAddressList\" below are notified of lifecycle state change."},"emailAddressList":{"type":"array","example":["test@test.com","test2@test.com"],"items":{"type":"string"},"description":"List of user email addresses. If \"notifySpecificUsers\" option is true, then these users are notified of lifecycle state change."}}},"accountActions":{"type":"array","items":{"type":"object","description":"Object for specifying Actions to be performed on a specified list of sources' account.","properties":{"action":{"example":"ENABLE","type":"string","description":"Describes if action will be enabled or disabled","enum":["ENABLE","DISABLE"]},"sourceIds":{"type":"array","items":{"type":"string"},"uniqueItems":true,"example":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"],"description":"List of unique source IDs. The sources must have the ENABLE feature or flat file source. See \"/sources\" endpoint for source features."}}}},"accessProfileIds":{"type":"array","items":{"type":"string"},"uniqueItems":true,"example":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"],"description":"List of unique access-profile IDs that are associated with the lifecycle state."}}}]}}}},"responses":{"201":{"description":"Created LifecycleState object.","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true},"modified":{"description":"Last modification date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true}}},{"type":"object","required":["technicalName"],"properties":{"enabled":{"type":"boolean","example":true,"description":"Whether the lifecycle state is enabled or disabled."},"technicalName":{"type":"string","example":"Technical Name","description":"The technical name for lifecycle state. This is for internal use."},"description":{"type":"string","example":"Lifecycle description","description":"Lifecycle state description."},"identityCount":{"type":"integer","format":"int32","example":42,"readOnly":true,"description":"Number of identities that have the lifecycle state."},"emailNotificationOption":{"type":"object","description":"This is used for representing email configuration for a lifecycle state","properties":{"notifyManagers":{"type":"boolean","example":true,"description":"If true, then the manager is notified of the lifecycle state change."},"notifyAllAdmins":{"type":"boolean","example":true,"description":"If true, then all the admins are notified of the lifecycle state change."},"notifySpecificUsers":{"type":"boolean","example":true,"description":"If true, then the users specified in \"emailAddressList\" below are notified of lifecycle state change."},"emailAddressList":{"type":"array","example":["test@test.com","test2@test.com"],"items":{"type":"string"},"description":"List of user email addresses. If \"notifySpecificUsers\" option is true, then these users are notified of lifecycle state change."}}},"accountActions":{"type":"array","items":{"type":"object","description":"Object for specifying Actions to be performed on a specified list of sources' account.","properties":{"action":{"example":"ENABLE","type":"string","description":"Describes if action will be enabled or disabled","enum":["ENABLE","DISABLE"]},"sourceIds":{"type":"array","items":{"type":"string"},"uniqueItems":true,"example":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"],"description":"List of unique source IDs. The sources must have the ENABLE feature or flat file source. See \"/sources\" endpoint for source features."}}}},"accessProfileIds":{"type":"array","items":{"type":"string"},"uniqueItems":true,"example":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"],"description":"List of unique access-profile IDs that are associated with the lifecycle state."}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/identity-profiles/{identity-profile-id}/lifecycle-states","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"aName","enabled":true,"technicalName":"Technical Name","description":"Lifecycle description","emailNotificationOption":{"notifyManagers":true,"notifyAllAdmins":true,"notifySpecificUsers":true,"emailAddressList":["test@test.com","test2@test.com"]},"accountActions":[{"action":"ENABLE","sourceIds":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"]}],"accessProfileIds":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Create Lifecycle State","description":{"content":"This API creates a new Lifecycle State.\nA token with ORG_ADMIN or API authority is required to call this API.","type":"text/plain"},"url":{"path":["identity-profiles",":identity-profile-id","lifecycle-states"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Identity Profile ID","type":"text/plain"},"type":"any","value":"","key":"identity-profile-id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Lifecycle State + + + +This API creates a new Lifecycle State. +A token with ORG_ADMIN or API authority is required to call this API. + +
      Path Parameters
      Request Body required
      + +Lifecycle State + +
        emailNotificationOption object
        + +This is used for representing email configuration for a lifecycle state + +
        accountActions object[]
      + +Created LifecycleState object. + +
      Schema
        emailNotificationOption object
        + +This is used for representing email configuration for a lifecycle state + +
        accountActions object[]
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/create-oauth-client.api.mdx b/docs/sailpoint-api-v3/create-oauth-client.api.mdx new file mode 100644 index 000000000..8f5925e30 --- /dev/null +++ b/docs/sailpoint-api-v3/create-oauth-client.api.mdx @@ -0,0 +1,77 @@ +--- +id: create-oauth-client +sidebar_label: Create OAuth Client +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createOauthClient","tags":["OAuth Clients"],"description":"This creates an OAuth client.\nRequest will require the following security scope:\n- 'idn:oathkeeper-client:create' - 'idn:oathkeeper-internal-client:create'","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"businessName":{"type":"string","description":"The name of the business the API Client should belong to","example":"Acme-Solar"},"homepageUrl":{"type":"string","description":"The homepage URL associated with the owner of the API Client","example":"http://localhost:12345"},"name":{"type":"string","description":"A human-readable name for the API Client","example":"Demo API Client"},"description":{"type":"string","description":"A description of the API Client","example":"An API client used for the authorization_code, refresh_token, and client_credentials flows"},"accessTokenValiditySeconds":{"type":"string","description":"The number of seconds an access token generated for this API Client is valid for","example":750},"refreshTokenValiditySeconds":{"type":"string","description":"The number of seconds a refresh token generated for this API Client is valid for","example":86400},"redirectUris":{"type":"array","items":{"type":"string"},"description":"A list of the approved redirect URIs. Provide one or more URIs when assigning the AUTHORIZATION_CODE grant type to a new OAuth Client.","example":["http://localhost:12345"]},"grantTypes":{"type":"array","items":{"description":"OAuth2 Grant Type","type":"string","example":"CLIENT_CREDENTIALS","enum":["CLIENT_CREDENTIALS","AUTHORIZATION_CODE","REFRESH_TOKEN"]},"description":"A list of OAuth 2.0 grant types this API Client can be used with","example":["AUTHORIZATION_CODE","CLIENT_CREDENTIALS","REFRESH_TOKEN"]},"accessType":{"description":"The access type (online or offline) of this API Client","example":"OFFLINE","type":"string","enum":["ONLINE","OFFLINE"]},"type":{"description":"The type of the API Client (public or confidential)","example":"CONFIDENTIAL","type":"string","enum":["CONFIDENTIAL","PUBLIC"]},"internal":{"type":"boolean","description":"An indicator of whether the API Client can be used for requests internal within the product.","example":false},"enabled":{"type":"boolean","description":"An indicator of whether the API Client is enabled for use","example":true},"strongAuthSupported":{"type":"boolean","description":"An indicator of whether the API Client supports strong authentication","example":false},"claimsSupported":{"type":"boolean","description":"An indicator of whether the API Client supports the serialization of SAML claims when used with the authorization_code flow","example":false}},"required":["name","description","accessTokenValiditySeconds","grantTypes","accessType","enabled"]}}}},"responses":{"200":{"description":"Request succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the OAuth client","example":"2c9180835d2e5168015d32f890ca1581"},"secret":{"type":"string","description":"Secret of the OAuth client (This field is only returned on the intial create call.)","example":"5c32dd9b21adb51c77794d46e71de117a1d0ddb36a7ff941fa28014ab7de2cf3"},"businessName":{"type":"string","description":"The name of the business the API Client should belong to","example":"Acme-Solar"},"homepageUrl":{"type":"string","description":"The homepage URL associated with the owner of the API Client","example":"http://localhost:12345"},"name":{"type":"string","description":"A human-readable name for the API Client","example":"Demo API Client"},"description":{"type":"string","description":"A description of the API Client","example":"An API client used for the authorization_code, refresh_token, and client_credentials flows"},"accessTokenValiditySeconds":{"type":"string","description":"The number of seconds an access token generated for this API Client is valid for","example":750},"refreshTokenValiditySeconds":{"type":"string","description":"The number of seconds a refresh token generated for this API Client is valid for","example":86400},"redirectUris":{"type":"array","items":{"type":"string"},"description":"A list of the approved redirect URIs used with the authorization_code flow","example":["http://localhost:12345"]},"grantTypes":{"type":"array","items":{"description":"OAuth2 Grant Type","type":"string","example":"CLIENT_CREDENTIALS","enum":["CLIENT_CREDENTIALS","AUTHORIZATION_CODE","REFRESH_TOKEN"]},"description":"A list of OAuth 2.0 grant types this API Client can be used with","example":["AUTHORIZATION_CODE","CLIENT_CREDENTIALS","REFRESH_TOKEN"]},"accessType":{"description":"The access type (online or offline) of this API Client","example":"OFFLINE","type":"string","enum":["ONLINE","OFFLINE"]},"type":{"description":"The type of the API Client (public or confidential)","example":"CONFIDENTIAL","type":"string","enum":["CONFIDENTIAL","PUBLIC"]},"internal":{"type":"boolean","description":"An indicator of whether the API Client can be used for requests internal to IDN","example":false},"enabled":{"type":"boolean","description":"An indicator of whether the API Client is enabled for use","example":true},"strongAuthSupported":{"type":"boolean","description":"An indicator of whether the API Client supports strong authentication","example":false},"claimsSupported":{"type":"boolean","description":"An indicator of whether the API Client supports the serialization of SAML claims when used with the authorization_code flow","example":false},"created":{"type":"string","format":"date-time","description":"The date and time, down to the millisecond, when the API Client was created","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","description":"The date and time, down to the millisecond, when the API Client was last updated","example":"2018-06-25T20:22:28.104Z"}},"required":["id","secret","businessName","homepageUrl","name","description","accessTokenValiditySeconds","refreshTokenValiditySeconds","redirectUris","grantTypes","accessType","type","internal","enabled","strongAuthSupported","claimsSupported","created","modified"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/oauth-clients","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"businessName":"Acme-Solar","homepageUrl":"http://localhost:12345","name":"Demo API Client","description":"An API client used for the authorization_code, refresh_token, and client_credentials flows","accessTokenValiditySeconds":750,"refreshTokenValiditySeconds":86400,"redirectUris":["http://localhost:12345"],"grantTypes":["AUTHORIZATION_CODE","CLIENT_CREDENTIALS","REFRESH_TOKEN"],"accessType":"OFFLINE","type":"CONFIDENTIAL","internal":false,"enabled":true,"strongAuthSupported":false,"claimsSupported":false},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Create OAuth Client","description":{"content":"This creates an OAuth client.\nRequest will require the following security scope:\n- 'idn:oathkeeper-client:create' - 'idn:oathkeeper-internal-client:create'","type":"text/plain"},"url":{"path":["oauth-clients"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create OAuth Client + + + +This creates an OAuth client. +Request will require the following security scope: +- 'idn:oathkeeper-client:create' - 'idn:oathkeeper-internal-client:create' + +
      Request Body required
      + +Request succeeded. + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/create-personal-access-token.api.mdx b/docs/sailpoint-api-v3/create-personal-access-token.api.mdx new file mode 100644 index 000000000..20771ce99 --- /dev/null +++ b/docs/sailpoint-api-v3/create-personal-access-token.api.mdx @@ -0,0 +1,87 @@ +--- +id: create-personal-access-token +sidebar_label: Create Personal Access Token +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createPersonalAccessToken","tags":["Personal Access Tokens"],"description":"This creates a personal access token.

      Any of the following rights are required to access this resource:
        \n
      • idn:my-personal-access-tokens:create
      • \n
      • idn:all-personal-access-tokens:create
      • \n
      • idn:managed-personal-access-tokens:create
      • \n
      ","requestBody":{"description":"Name and scope of personal access token.","required":true,"content":{"application/json":{"schema":{"type":"object","description":"Object for specifying the name of a personal access token to create","properties":{"name":{"type":"string","description":"The name of the personal access token (PAT) to be created. Cannot be the same as another PAT owned by the user for whom this PAT is being created.","example":"NodeJS Integration"}},"required":["name"]}}}},"responses":{"200":{"description":"Created. Note - this is the only time Personal Access Tokens' secret attribute will be displayed.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the personal access token (to be used as the username for Basic Auth).","example":"86f1dc6fe8f54414950454cbb11278fa"},"secret":{"type":"string","description":"The secret of the personal access token (to be used as the password for Basic Auth).","example":"1d1bef2b9f426383447f64f69349fc7cac176042578d205c256ba3f37c59adb9"},"name":{"type":"string","description":"The name of the personal access token. Cannot be the same as other personal access tokens owned by a user.","example":"NodeJS Integration"},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Details about the owner of the personal access token."},"created":{"type":"string","format":"date-time","description":"The date and time, down to the millisecond, when this personal access token was created.","example":"2017-07-11T18:45:37.098Z"}},"required":["id","secret","name","owner","created"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/personal-access-tokens","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"NodeJS Integration"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Create Personal Access Token","description":{"content":"This creates a personal access token.

      Any of the following rights are required to access this resource:
        \n
      • idn:my-personal-access-tokens:create
      • \n
      • idn:all-personal-access-tokens:create
      • \n
      • idn:managed-personal-access-tokens:create
      • \n
      ","type":"text/plain"},"url":{"path":["personal-access-tokens"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Personal Access Token + + + +This creates a personal access token. </br> </br> Any of the following rights are required to access this resource: <ul> + <li>idn:my-personal-access-tokens:create</li> + <li>idn:all-personal-access-tokens:create</li> + <li>idn:managed-personal-access-tokens:create</li> +</ul> + +
      Request Body required
      + +Name and scope of personal access token. + +
      + +Created. Note - this is the only time Personal Access Tokens' secret attribute will be displayed. + +
      Schema
        owner object
        + +Details about the owner of the personal access token. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/create-provisioning-policy.api.mdx b/docs/sailpoint-api-v3/create-provisioning-policy.api.mdx new file mode 100644 index 000000000..3480df5ef --- /dev/null +++ b/docs/sailpoint-api-v3/create-provisioning-policy.api.mdx @@ -0,0 +1,88 @@ +--- +id: create-provisioning-policy +sidebar_label: Create Provisioning Policy +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createProvisioningPolicy","tags":["Sources"],"description":"This API generates a create policy/template based on field value transforms. This API is intended for use when setting up JDBC Provisioning type sources, but it will also work on other source types.\nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:provisioning-policy:create"]}],"parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source id","example":"2c9180835d191a86015d28455b4a2329"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"usageType":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"userName"},"transform":{"type":"object","description":"The transform to apply to the field","example":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"default":{}},"attributes":{"type":"object","description":"Attributes required for the transform","example":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"}},"type":{"type":"string","description":"The type of the attribute.","example":"string"},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","default":false,"example":false}}}}}},"examples":{"Create Account Provisioning Policy":{"value":{"name":"Account","description":"Account Provisioning Policy","usageType":"CREATE","fields":[{"name":"displayName","transform":{"type":"identityAttribute","attributes":{"name":"displayName"}},"attributes":{},"isRequired":false,"type":"string","isMultiValued":false},{"name":"distinguishedName","transform":{"type":"usernameGenerator","attributes":{"sourceCheck":true,"patterns":["CN=$fi $ln,OU=zzUsers,OU=Demo,DC=seri,DC=sailpointdemo,DC=com","CN=$fti $ln,OU=zzUsers,OU=Demo,DC=seri,DC=sailpointdemo,DC=com","CN=$fn $ln,OU=zzUsers,OU=Demo,DC=seri,DC=sailpointdemo,DC=com","CN=$fn$ln${uniqueCounter},OU=zzUsers,OU=Demo,DC=seri,DC=sailpointdemo,DC=com"],"fn":{"type":"identityAttribute","attributes":{"name":"firstname"}},"ln":{"type":"identityAttribute","attributes":{"name":"lastname"}},"fi":{"type":"substring","attributes":{"input":{"type":"identityAttribute","attributes":{"name":"firstname"}},"begin":0,"end":1}},"fti":{"type":"substring","attributes":{"input":{"type":"identityAttribute","attributes":{"name":"firstname"}},"begin":0,"end":2}}}},"attributes":{"cloudMaxUniqueChecks":"5","cloudMaxSize":"100","cloudRequired":"true"},"isRequired":false,"type":"","isMultiValued":false},{"name":"description","transform":{"type":"static","attributes":{"value":""}},"attributes":{},"isRequired":false,"type":"string","isMultiValued":false}]}}}}}},"responses":{"201":{"description":"Created ProvisioningPolicyDto object","content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"usageType":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"userName"},"transform":{"type":"object","description":"The transform to apply to the field","example":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"default":{}},"attributes":{"type":"object","description":"Attributes required for the transform","example":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"}},"isRequired":{"type":"boolean","readOnly":true,"description":"Flag indicating whether or not the attribute is required.","default":false,"example":false},"type":{"type":"string","description":"The type of the attribute.","example":"string"},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","default":false,"example":false}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/sources/{sourceId}/provisioning-policies","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"string","description":"string","usageType":"CREATE","fields":[{"name":"userName","transform":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"attributes":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"},"type":"string","isMultiValued":false}]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Create Provisioning Policy","description":{"content":"This API generates a create policy/template based on field value transforms. This API is intended for use when setting up JDBC Provisioning type sources, but it will also work on other source types.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":sourceId","provisioning-policies"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Provisioning Policy + + + +This API generates a create policy/template based on field value transforms. This API is intended for use when setting up JDBC Provisioning type sources, but it will also work on other source types. +A token with ORG_ADMIN authority is required to call this API. + +
      Path Parameters
      Request Body required
        fields object[]
      + +Created ProvisioningPolicyDto object + +
      Schema
        fields object[]
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/create-schema-attribute.api.mdx b/docs/sailpoint-api-v3/create-schema-attribute.api.mdx new file mode 100644 index 000000000..d097e9c08 --- /dev/null +++ b/docs/sailpoint-api-v3/create-schema-attribute.api.mdx @@ -0,0 +1,76 @@ +--- +id: create-schema-attribute +sidebar_label: Create a new Schema Attribute for Non-Employee Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createSchemaAttribute","tags":["Non-Employee Lifecycle Management"],"description":"This API creates a new schema attribute for Non-Employee Source. The schema technical name must be unique in the source. Attempts to create a schema attribute with an existing name will result in a \"400.1.409 Reference conflict\" response. At most, 10 custom attributes can be created per schema. Attempts to create more than 10 will result in a \"400.1.4 Limit violation\" response.

      \nRequires role context of `idn:nesr:create`","parameters":[{"in":"path","name":"sourceId","schema":{"type":"string"},"required":true,"description":"The Source id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Type of the attribute. Only type 'TEXT' is supported for custom attributes.","example":"TEXT"},"label":{"type":"string","description":"Label displayed on the UI for this schema attribute.","example":"Account Name"},"technicalName":{"type":"string","description":"The technical name of the attribute. Must be unique per source.","example":"account.name"},"helpText":{"type":"string","description":"help text displayed by UI.","example":"The unique identifier for the account"},"placeholder":{"type":"string","description":"Hint text that fills UI box.","example":"Enter a unique user name for this account."},"required":{"type":"boolean","description":"If true, the schema attribute is required for all non-employees in the source","example":true}},"required":["type","technicalName","label"]}}}},"responses":{"200":{"description":"Schema Attribute created.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"UUID","example":"ac110005-7156-1150-8171-5b292e3e0084","description":"Schema Attribute Id"},"system":{"type":"boolean","description":"True if this schema attribute is mandatory on all non-employees sources.","example":true},"modified":{"type":"string","format":"date-time","description":"When the schema attribute was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the schema attribute was created.","example":"2019-08-23T18:40:35.772Z"},"type":{"type":"string","enum":["TEXT","DATE","IDENTITY"],"description":"Enum representing the type of data a schema attribute accepts."},"label":{"type":"string","description":"Label displayed on the UI for this schema attribute.","example":"Account Name"},"technicalName":{"type":"string","description":"The technical name of the attribute. Must be unique per source.","example":"account.name"},"helpText":{"type":"string","description":"help text displayed by UI.","example":"The unique identifier for the account"},"placeholder":{"type":"string","description":"Hint text that fills UI box.","example":"Enter a unique user name for this account."},"required":{"type":"boolean","description":"If true, the schema attribute is required for all non-employees in the source","example":true}},"required":["type","technicalName","label"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/non-employee-sources/{sourceId}/schema-attributes","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"type":"TEXT","label":"Account Name","technicalName":"account.name","helpText":"The unique identifier for the account","placeholder":"Enter a unique user name for this account.","required":true},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Create a new Schema Attribute for Non-Employee Source","description":{"content":"This API creates a new schema attribute for Non-Employee Source. The schema technical name must be unique in the source. Attempts to create a schema attribute with an existing name will result in a \"400.1.409 Reference conflict\" response. At most, 10 custom attributes can be created per schema. Attempts to create more than 10 will result in a \"400.1.4 Limit violation\" response.

      \nRequires role context of `idn:nesr:create`","type":"text/plain"},"url":{"path":["non-employee-sources",":sourceId","schema-attributes"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create a new Schema Attribute for Non-Employee Source + + + +This API creates a new schema attribute for Non-Employee Source. The schema technical name must be unique in the source. Attempts to create a schema attribute with an existing name will result in a "400.1.409 Reference conflict" response. At most, 10 custom attributes can be created per schema. Attempts to create more than 10 will result in a "400.1.4 Limit violation" response.<br><br> +Requires role context of `idn:nesr:create` + +
      Path Parameters
      Request Body required
      + +Schema Attribute created. + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/create-schema.api.mdx b/docs/sailpoint-api-v3/create-schema.api.mdx new file mode 100644 index 000000000..25b075af2 --- /dev/null +++ b/docs/sailpoint-api-v3/create-schema.api.mdx @@ -0,0 +1,92 @@ +--- +id: create-schema +sidebar_label: Create Schema on a Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createSchema","tags":["Sources"],"description":"Creates a new Schema on the specified Source in IdentityNow.\n","parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source id.","example":"2c9180835d191a86015d28455b4a2329"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Schema.","example":"2c9180835d191a86015d28455b4a2329"},"name":{"type":"string","description":"The name of the Schema.","example":"account"},"nativeObjectType":{"type":"string","description":"The name of the object type on the native system that the schema represents.","example":"User"},"identityAttribute":{"type":"string","description":"The name of the attribute used to calculate the unique identifier for an object in the schema.","example":"sAMAccountName"},"displayAttribute":{"type":"string","description":"The name of the attribute used to calculate the display value for an object in the schema.","example":"distinguishedName"},"hierarchyAttribute":{"type":"string","description":"The name of the attribute whose values represent other objects in a hierarchy. Only relevant to group schemas.","example":"memberOf"},"includePermissions":{"type":"boolean","description":"Flag indicating whether or not the include permissions with the object data when aggregating the schema.","example":false},"features":{"type":"array","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"description":"The features that the schema supports.","example":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"]},"configuration":{"type":"object","description":"Holds any extra configuration data that the schema may require.","example":{"groupMemberAttribute":"member"}},"attributes":{"type":"array","description":"The attribute definitions which form the schema.","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"sAMAccountName"},"type":{"description":"The type of the attribute.","example":"string","type":"string","enum":["STRING","LONG","INT","BOOLEAN"]},"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"A reference to the schema on the source to which the values of the attribute map.","example":{"type":"CONNECTOR_SCHEMA","id":"2c9180866166b5b0016167c32ef31a66","name":"group"}},"description":{"type":"string","description":"A human-readable description of the attribute."},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","example":false},"isEntitlement":{"type":"boolean","description":"Flag indicating whether or not the attribute is an entitlement.","example":false}}},"example":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}]},"created":{"type":"string","description":"The date the Schema was created.","format":"date-time","example":"2019-12-24T22:32:58.104Z"},"modified":{"type":"string","description":"The date the Schema was last modified.","format":"date-time","example":"2019-12-31T20:22:28.104Z"}}}}}},"responses":{"201":{"description":"The Schema was successfully created on the specified Source.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Schema.","example":"2c9180835d191a86015d28455b4a2329"},"name":{"type":"string","description":"The name of the Schema.","example":"account"},"nativeObjectType":{"type":"string","description":"The name of the object type on the native system that the schema represents.","example":"User"},"identityAttribute":{"type":"string","description":"The name of the attribute used to calculate the unique identifier for an object in the schema.","example":"sAMAccountName"},"displayAttribute":{"type":"string","description":"The name of the attribute used to calculate the display value for an object in the schema.","example":"distinguishedName"},"hierarchyAttribute":{"type":"string","description":"The name of the attribute whose values represent other objects in a hierarchy. Only relevant to group schemas.","example":"memberOf"},"includePermissions":{"type":"boolean","description":"Flag indicating whether or not the include permissions with the object data when aggregating the schema.","example":false},"features":{"type":"array","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"description":"The features that the schema supports.","example":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"]},"configuration":{"type":"object","description":"Holds any extra configuration data that the schema may require.","example":{"groupMemberAttribute":"member"}},"attributes":{"type":"array","description":"The attribute definitions which form the schema.","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"sAMAccountName"},"type":{"description":"The type of the attribute.","example":"string","type":"string","enum":["STRING","LONG","INT","BOOLEAN"]},"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"A reference to the schema on the source to which the values of the attribute map.","example":{"type":"CONNECTOR_SCHEMA","id":"2c9180866166b5b0016167c32ef31a66","name":"group"}},"description":{"type":"string","description":"A human-readable description of the attribute."},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","example":false},"isEntitlement":{"type":"boolean","description":"Flag indicating whether or not the attribute is an entitlement.","example":false},"isGroup":{"type":"boolean","description":"Flag indicating whether or not the attribute represents a group.","example":false,"readOnly":true}}},"example":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}]},"created":{"type":"string","description":"The date the Schema was created.","format":"date-time","example":"2019-12-24T22:32:58.104Z"},"modified":{"type":"string","description":"The date the Schema was last modified.","format":"date-time","example":"2019-12-31T20:22:28.104Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/sources/{sourceId}/schemas","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"2c9180835d191a86015d28455b4a2329","name":"account","nativeObjectType":"User","identityAttribute":"sAMAccountName","displayAttribute":"distinguishedName","hierarchyAttribute":"memberOf","includePermissions":false,"features":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"],"configuration":{"groupMemberAttribute":"member"},"attributes":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}],"created":"2019-12-24T22:32:58.104Z","modified":"2019-12-31T20:22:28.104Z"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Create Schema on a Source","description":{"content":"Creates a new Schema on the specified Source in IdentityNow.\n","type":"text/plain"},"url":{"path":["sources",":sourceId","schemas"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id.","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Schema on a Source + + + +Creates a new Schema on the specified Source in IdentityNow. + + +
      Path Parameters
      Request Body required
        attributes object[]
        + +The attribute definitions which form the schema. + +
        schema object
        + +A reference to the schema on the source to which the values of the attribute map. + +
      + +The Schema was successfully created on the specified Source. + +
      Schema
        attributes object[]
        + +The attribute definitions which form the schema. + +
        schema object
        + +A reference to the schema on the source to which the values of the attribute map. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/create-service-desk-integration.api.mdx b/docs/sailpoint-api-v3/create-service-desk-integration.api.mdx new file mode 100644 index 000000000..dbaefda94 --- /dev/null +++ b/docs/sailpoint-api-v3/create-service-desk-integration.api.mdx @@ -0,0 +1,147 @@ +--- +id: create-service-desk-integration +sidebar_label: Create a new Service Desk integration +hide_title: true +hide_table_of_contents: true +api: {"tags":["Service Desk Integration"],"description":"Create a new Service Desk Integrations. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","operationId":"createServiceDeskIntegration","requestBody":{"description":"The specifics of a new integration to create","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true},"modified":{"description":"Last modification date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true}}},{"type":"object","description":"Specification of a Service Desk integration","required":["description","type","attributes"],"properties":{"description":{"description":"Description of the Service Desk integration","type":"string","example":"A very nice Service Desk integration"},"type":{"description":"Type of the Service Desk integration","type":"string","default":"ServiceNowSDIM"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the identity that is the owner of this Service Desk integration","default":{"type":"IDENTITY"}},"clusterRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the source cluster for this Service Desk integration","default":{"type":"CLUSTER"}},"cluster":{"description":"ID of the cluster for the Service Desk integration (replaced by clusterRef, retained for backward compatibility)","type":"string","example":"xyzzy999","deprecated":true},"managedSources":{"description":"Source IDs for the Service Desk integration (replaced by provisioningConfig.managedSResourceRefs, but retained here for backward compatibility)","type":"array","items":{"type":"string"},"deprecated":true},"provisioningConfig":{"description":"The 'provisioningConfig' property specifies the configuration used to provision integrations.","type":"object","properties":{"universalManager":{"description":"Specifies whether this configuration is used to manage provisioning requests for all sources from the org. If true, no managedResourceRefs are allowed.","type":"boolean","readOnly":true},"managedResourceRefs":{"description":"References to sources for the Service Desk integration template. May only be specified if universalManager is false.","type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"default":{"type":"SOURCE"}}},"planInitializerScript":{"description":"This is a reference to a plan initializer script.","type":"object","properties":{"source":{"description":"This is a Rule that allows provisioning instruction changes.","type":"string"}}}}},"attributes":{"description":"Attributes of the Service Desk integration. Validation constraints enforced by the implementation.","type":"object","additionalProperties":true},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to beforeProvisioningRule for this Service Desk integration","default":{"type":"RULE"}}}}]}}},"required":true},"responses":{"200":{"description":"details of the created integration","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true},"modified":{"description":"Last modification date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true}}},{"type":"object","description":"Specification of a Service Desk integration","required":["description","type","attributes"],"properties":{"description":{"description":"Description of the Service Desk integration","type":"string","example":"A very nice Service Desk integration"},"type":{"description":"Type of the Service Desk integration","type":"string","default":"ServiceNowSDIM"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the identity that is the owner of this Service Desk integration","default":{"type":"IDENTITY"}},"clusterRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the source cluster for this Service Desk integration","default":{"type":"CLUSTER"}},"cluster":{"description":"ID of the cluster for the Service Desk integration (replaced by clusterRef, retained for backward compatibility)","type":"string","example":"xyzzy999","deprecated":true},"managedSources":{"description":"Source IDs for the Service Desk integration (replaced by provisioningConfig.managedSResourceRefs, but retained here for backward compatibility)","type":"array","items":{"type":"string"},"deprecated":true},"provisioningConfig":{"description":"The 'provisioningConfig' property specifies the configuration used to provision integrations.","type":"object","properties":{"universalManager":{"description":"Specifies whether this configuration is used to manage provisioning requests for all sources from the org. If true, no managedResourceRefs are allowed.","type":"boolean","readOnly":true},"managedResourceRefs":{"description":"References to sources for the Service Desk integration template. May only be specified if universalManager is false.","type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"default":{"type":"SOURCE"}}},"planInitializerScript":{"description":"This is a reference to a plan initializer script.","type":"object","properties":{"source":{"description":"This is a Rule that allows provisioning instruction changes.","type":"string"}}}}},"attributes":{"description":"Attributes of the Service Desk integration. Validation constraints enforced by the implementation.","type":"object","additionalProperties":true},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to beforeProvisioningRule for this Service Desk integration","default":{"type":"RULE"}}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:service-desk-admin:write","idn:service-desk-integration:write"]}],"method":"post","path":"/service-desk-integrations","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"aName","description":"A very nice Service Desk integration","type":"ServiceNowSDIM","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"clusterRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"provisioningConfig":{"managedResourceRefs":[{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}],"planInitializerScript":{"source":"string"}},"attributes":{},"beforeProvisioningRule":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Create a new Service Desk integration","description":{"content":"Create a new Service Desk Integrations. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","type":"text/plain"},"url":{"path":["service-desk-integrations"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create a new Service Desk integration + + + +Create a new Service Desk Integrations. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + +
      Request Body required
      + +The specifics of a new integration to create + +
        ownerRef object
        + +Reference to the identity that is the owner of this Service Desk integration + +
        clusterRef object
        + +Reference to the source cluster for this Service Desk integration + +
        provisioningConfig object
        + +The 'provisioningConfig' property specifies the configuration used to provision integrations. + +
        managedResourceRefs object[]
        + +References to sources for the Service Desk integration template. May only be specified if universalManager is false. + +
        planInitializerScript object
        + +This is a reference to a plan initializer script. + +
        attributes object
        + +Attributes of the Service Desk integration. Validation constraints enforced by the implementation. + +
        beforeProvisioningRule object
        + +Reference to beforeProvisioningRule for this Service Desk integration + +
      + +details of the created integration + +
      Schema
        ownerRef object
        + +Reference to the identity that is the owner of this Service Desk integration + +
        clusterRef object
        + +Reference to the source cluster for this Service Desk integration + +
        provisioningConfig object
        + +The 'provisioningConfig' property specifies the configuration used to provision integrations. + +
        managedResourceRefs object[]
        + +References to sources for the Service Desk integration template. May only be specified if universalManager is false. + +
        planInitializerScript object
        + +This is a reference to a plan initializer script. + +
        attributes object
        + +Attributes of the Service Desk integration. Validation constraints enforced by the implementation. + +
        beforeProvisioningRule object
        + +Reference to beforeProvisioningRule for this Service Desk integration + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/create-source.api.mdx b/docs/sailpoint-api-v3/create-source.api.mdx new file mode 100644 index 000000000..5f627c338 --- /dev/null +++ b/docs/sailpoint-api-v3/create-source.api.mdx @@ -0,0 +1,156 @@ +--- +id: create-source +sidebar_label: Creates a source in IdentityNow. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"createSource","tags":["Sources"],"description":"This creates a specific source with a full source JSON representation. Any passwords are submitted as plain-text and encrypted upon receipt in IdentityNow.\nA token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","parameters":[{"in":"query","name":"provisionAsCsv","description":"Configures the source as a DelimitedFile type of source.","schema":{"type":"boolean"},"required":false}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"the id of the Source","example":"2c91808568c529c60168cca6f90c1324"},"description":{"type":"string","description":"Human-readable description of the source","example":"This is the corporate directory."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to an owning Identity Object"},"cluster":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the associated Cluster","example":{"type":"CLUSTER","id":"2c9180866166b5b0016167c32ef31a66","name":"Corporate Cluster"}},"accountCorrelationConfig":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Correlation Config object","example":{"type":"ACCOUNT_CORRELATION_CONFIG","id":"2c9180855d191c59015d28583727245a","name":"Directory [source-62867] Account Correlation"}},"accountCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used."},"managerCorrelationMapping":{"description":"Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity","type":"object","properties":{"accountAttribute":{"type":"string","description":"Name of the attribute to use for manager correlation. The value found on the account attribute will be used to lookup the manager's identity.","example":"manager"},"identityAttribute":{"type":"string","description":"Name of the identity attribute to search when trying to find a manager using the value from the accountAttribute.","example":"manager"}}},"managerCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient."},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called."},"schemas":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to Schema objects","example":[{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232a","name":"account"},{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232b","name":"group"}]},"passwordPolicies":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to the associated PasswordPolicy objects.","example":[{"type":"PASSWORD_POLICY","id":"2c9180855d191c59015d291ceb053980","name":"Corporate Password Policy"}]},"features":{"type":"array","description":"Optional features that can be supported by a source.","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"example":["SYNC_PROVISIONING","MANAGER_LOOKUP","SEARCH","PROVISIONING","AUTHENTICATE","GROUP_PROVISIONING","PASSWORD"]},"type":{"type":"string","description":"Specifies the type of system being managed e.g. Active Directory, Workday, etc..","example":"OpenLDAP - Direct"},"connector":{"type":"string","description":"Connector script name.","example":"active-directory"},"connectorClass":{"type":"string","description":"The fully qualified name of the Java class that implements the connector interface.","example":"sailpoint.connector.LDAPConnector"},"connectorAttributes":{"type":"object","description":"Connector specific configuration; will differ from type to type.","example":{"healthCheckTimeout":30,"authSearchAttributes":["cn","uid","mail"]}},"deleteThreshold":{"type":"integer","format":"int32","description":"Number from 0 to 100 that specifies when to skip the delete phase.","example":10},"authoritative":{"type":"boolean","description":"When true indicates the source is referenced by an IdentityProfile.","example":false},"managementWorkgroup":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to Management Workgroup for this Source"},"healthy":{"type":"boolean","description":"When true indicates a healthy source","example":true},"status":{"type":"string","description":"A status identifier, giving specific information on why a source is healthy or not","example":"SOURCE_STATE_HEALTHY"},"since":{"type":"string","description":"Timestamp showing when a source health check was last performed","example":"2021-09-28T15:48:29.3801666300Z"},"connectorId":{"type":"string","description":"The id of connector","example":"active-directory"},"connectorName":{"type":"string","description":"The name of the connector that was chosen on source creation","example":"Active Directory"},"connectionType":{"type":"string","description":"The type of connection (direct or file)","example":"file"},"connectorImplementstionId":{"type":"string","description":"The connector implementstion id","example":"delimited-file"}}}}}},"responses":{"201":{"description":"Created Source object. Any passwords will only show the the encrypted cipher-text, as they are not decrypt-able in IdentityNow cloud-based services, per IdentityNow security design.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"the id of the Source","example":"2c91808568c529c60168cca6f90c1324"},"description":{"type":"string","description":"Human-readable description of the source","example":"This is the corporate directory."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to an owning Identity Object"},"cluster":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the associated Cluster","example":{"type":"CLUSTER","id":"2c9180866166b5b0016167c32ef31a66","name":"Corporate Cluster"}},"accountCorrelationConfig":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Correlation Config object","example":{"type":"ACCOUNT_CORRELATION_CONFIG","id":"2c9180855d191c59015d28583727245a","name":"Directory [source-62867] Account Correlation"}},"accountCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used."},"managerCorrelationMapping":{"description":"Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity","type":"object","properties":{"accountAttribute":{"type":"string","description":"Name of the attribute to use for manager correlation. The value found on the account attribute will be used to lookup the manager's identity.","example":"manager"},"identityAttribute":{"type":"string","description":"Name of the identity attribute to search when trying to find a manager using the value from the accountAttribute.","example":"manager"}}},"managerCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient."},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called."},"schemas":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to Schema objects","example":[{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232a","name":"account"},{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232b","name":"group"}]},"passwordPolicies":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to the associated PasswordPolicy objects.","example":[{"type":"PASSWORD_POLICY","id":"2c9180855d191c59015d291ceb053980","name":"Corporate Password Policy"}]},"features":{"type":"array","description":"Optional features that can be supported by a source.","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"example":["SYNC_PROVISIONING","MANAGER_LOOKUP","SEARCH","PROVISIONING","AUTHENTICATE","GROUP_PROVISIONING","PASSWORD"]},"type":{"type":"string","description":"Specifies the type of system being managed e.g. Active Directory, Workday, etc..","example":"OpenLDAP - Direct"},"connector":{"type":"string","description":"Connector script name.","example":"active-directory"},"connectorClass":{"type":"string","description":"The fully qualified name of the Java class that implements the connector interface.","example":"sailpoint.connector.LDAPConnector"},"connectorAttributes":{"type":"object","description":"Connector specific configuration; will differ from type to type.","example":{"healthCheckTimeout":30,"authSearchAttributes":["cn","uid","mail"]}},"deleteThreshold":{"type":"integer","format":"int32","description":"Number from 0 to 100 that specifies when to skip the delete phase.","example":10},"authoritative":{"type":"boolean","description":"When true indicates the source is referenced by an IdentityProfile.","example":false},"managementWorkgroup":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to Management Workgroup for this Source"},"healthy":{"type":"boolean","description":"When true indicates a healthy source","example":true},"status":{"type":"string","description":"A status identifier, giving specific information on why a source is healthy or not","example":"SOURCE_STATE_HEALTHY"},"since":{"type":"string","description":"Timestamp showing when a source health check was last performed","example":"2021-09-28T15:48:29.3801666300Z"},"connectorId":{"type":"string","description":"The id of connector","example":"active-directory"},"connectorName":{"type":"string","description":"The name of the connector that was chosen on source creation","example":"Active Directory"},"connectionType":{"type":"string","description":"The type of connection (direct or file)","example":"file"},"connectorImplementstionId":{"type":"string","description":"The connector implementstion id","example":"delimited-file"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/sources","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"2c91808568c529c60168cca6f90c1324","description":"This is the corporate directory.","owner":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"cluster":{"type":"CLUSTER","id":"2c9180866166b5b0016167c32ef31a66","name":"Corporate Cluster"},"accountCorrelationConfig":{"type":"ACCOUNT_CORRELATION_CONFIG","id":"2c9180855d191c59015d28583727245a","name":"Directory [source-62867] Account Correlation"},"accountCorrelationRule":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"managerCorrelationMapping":{"accountAttribute":"manager","identityAttribute":"manager"},"managerCorrelationRule":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"beforeProvisioningRule":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"schemas":[{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232a","name":"account"},{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232b","name":"group"}],"passwordPolicies":[{"type":"PASSWORD_POLICY","id":"2c9180855d191c59015d291ceb053980","name":"Corporate Password Policy"}],"features":["SYNC_PROVISIONING","MANAGER_LOOKUP","SEARCH","PROVISIONING","AUTHENTICATE","GROUP_PROVISIONING","PASSWORD"],"type":"OpenLDAP - Direct","connector":"active-directory","connectorClass":"sailpoint.connector.LDAPConnector","connectorAttributes":{"healthCheckTimeout":30,"authSearchAttributes":["cn","uid","mail"]},"deleteThreshold":10,"authoritative":false,"managementWorkgroup":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"healthy":true,"status":"SOURCE_STATE_HEALTHY","since":"2021-09-28T15:48:29.3801666300Z","connectorId":"active-directory","connectorName":"Active Directory","connectionType":"file","connectorImplementstionId":"delimited-file"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Creates a source in IdentityNow.","description":{"content":"This creates a specific source with a full source JSON representation. Any passwords are submitted as plain-text and encrypted upon receipt in IdentityNow.\nA token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Configures the source as a DelimitedFile type of source.","type":"text/plain"},"key":"provisionAsCsv","value":""}],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Creates a source in IdentityNow. + + + +This creates a specific source with a full source JSON representation. Any passwords are submitted as plain-text and encrypted upon receipt in IdentityNow. +A token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + +
      Query Parameters
      Request Body required
        owner object
        + +Reference to an owning Identity Object + +
        cluster object
        + +Reference to the associated Cluster + +
        accountCorrelationConfig object
        + +Reference to a Correlation Config object + +
        accountCorrelationRule object
        + +Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used. + +
        managerCorrelationMapping object
        + +Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity + +
        managerCorrelationRule object
        + +Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient. + +
        beforeProvisioningRule object
        + +Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called. + +
        schemas object[]
        + +List of references to Schema objects + +
        passwordPolicies object[]
        + +List of references to the associated PasswordPolicy objects. + +
        managementWorkgroup object
        + +Reference to Management Workgroup for this Source + +
      + +Created Source object. Any passwords will only show the the encrypted cipher-text, as they are not decrypt-able in IdentityNow cloud-based services, per IdentityNow security design. + +
      Schema
        owner object
        + +Reference to an owning Identity Object + +
        cluster object
        + +Reference to the associated Cluster + +
        accountCorrelationConfig object
        + +Reference to a Correlation Config object + +
        accountCorrelationRule object
        + +Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used. + +
        managerCorrelationMapping object
        + +Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity + +
        managerCorrelationRule object
        + +Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient. + +
        beforeProvisioningRule object
        + +Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called. + +
        schemas object[]
        + +List of references to Schema objects + +
        passwordPolicies object[]
        + +List of references to the associated PasswordPolicy objects. + +
        managementWorkgroup object
        + +Reference to Management Workgroup for this Source + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/create-transform.api.mdx b/docs/sailpoint-api-v3/create-transform.api.mdx new file mode 100644 index 000000000..18bfd6003 --- /dev/null +++ b/docs/sailpoint-api-v3/create-transform.api.mdx @@ -0,0 +1,903 @@ +--- +id: create-transform +sidebar_label: Create transform +hide_title: true +hide_table_of_contents: true +api: {"tags":["Transforms"],"description":"Creates a new transform object immediately. By default, the internal flag is set to false to indicate that this is a custom transform. Only SailPoint employees have the ability to create a transform with internal set to true. Newly created Transforms can be used in the Identity Profile mappings within the UI. A token with transform write authority is required to call this API.","operationId":"createTransform","requestBody":{"required":true,"description":"The transform to be created.","content":{"application/json":{"schema":{"type":"object","description":"The representation of an internally- or customer-defined transform.","required":["name","type","attributes"],"properties":{"id":{"type":"string","readOnly":true,"description":"Unique ID of this transform","example":"2cd78adghjkja34jh2b1hkjhasuecd"},"name":{"type":"string","description":"Unique name of this transform","example":"Timestamp To Date"},"type":{"type":"string","description":"The type of transform operation","enum":["accountAttribute","base64Decode","base64Encode","concat","conditional","dateCompare","dateFormat","dateMath","decomposeDiacriticalMarks","e164phone","firstValid","rule","identityAttribute","indexOf","iso3166","lastIndexOf","leftPad","lookup","lower","normalizeNames","randomAlphaNumeric","randomNumeric","reference","replaceAll","replace","rightPad","split","static","substring","trim","upper","usernameGenerator","uuid"],"example":"dateFormat","externalDocs":{"description":"Transform Operations","url":"https://developer.sailpoint.com/docs/transforms/transform_operations/transform_operations.html#transform-operations"}},"attributes":{"description":"Meta-data about the transform. Values in this list are specific to the type of transform to be executed.","oneOf":[{"title":"accountAttribute","type":"object","required":["sourceName","attributeName"],"properties":{"sourceName":{"type":"string","description":"A reference to the source to search for the account","example":"Workday"},"attributeName":{"type":"string","description":"The name of the attribute on the account to return. This should match the name of the account attribute name visible in the user interface, or on the source schema.","example":"DEPARTMENT"},"accountSortAttribute":{"type":"string","description":"The value of this configuration is a string name of the attribute to use when determining the ordering of returned accounts when there are multiple entries","example":"created"},"accountSortDescending":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls the order of the sort when there are multiple accounts. If not defined, the transform will default to false (ascending order)","example":false},"accountReturnFirstLink":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls which account to source a value from for an attribute. If this flag is set to true, the transform returns the value from the first account in the list, even if it is null. If it is set to false, the transform returns the first non-null value. If not defined, the transform will default to false","example":false},"accountFilter":{"type":"string","description":"This expression queries the database to narrow search results. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the database. The default filter will always include the source and identity, and any subsequent expressions will be combined in an AND operation to the existing search criteria.\n\nOnly certain searchable attributes are available:
      - `nativeIdentity` - the Account ID
      - `displayName` - the Account Name
      - `entitlements` - a boolean value to determine if the account has entitlements","example":"!(nativeIdentity.startsWith(\"*DELETED*\"))"},"accountPropertyFilter":{"type":"string","description":"This expression is used to search and filter accounts in memory. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the returned resultset.\n\nAll account attributes are available for filtering as this operation is performed in memory.","example":"(groups.containsAll({'Admin'}) || location == 'Austin')"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"base64Decode","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"base64Encode","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"concat","type":"object","required":["values"],"properties":{"values":{"type":"array","items":{"type":"object"},"description":"An array of items to join together","example":["John"," ","Smith"]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"conditional","type":"object","required":["expression","positiveCondition","negativeCondition"],"properties":{"expression":{"type":"string","description":"A comparison statement that follows the structure of `ValueA eq ValueB` where `ValueA` and `ValueB` are static strings or outputs of other transforms. \n\nThe `eq` operator is the only valid comparison","example":"ValueA eq ValueB"},"positiveCondition":{"type":"string","description":"The output of the transform if the expression evalutes to true","example":"true"},"negativeCondition":{"type":"string","description":"The output of the transform if the expression evalutes to false","example":"false"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateCompare","type":"object","required":["firstDate","secondDate","operator","positiveCondition","negativeCondition"],"properties":{"firstDate":{"description":"This is the first date to consider (The date that would be on the left hand side of the comparison operation).","oneOf":[{"title":"accountAttribute","type":"object","required":["sourceName","attributeName"],"properties":{"sourceName":{"type":"string","description":"A reference to the source to search for the account","example":"Workday"},"attributeName":{"type":"string","description":"The name of the attribute on the account to return. This should match the name of the account attribute name visible in the user interface, or on the source schema.","example":"DEPARTMENT"},"accountSortAttribute":{"type":"string","description":"The value of this configuration is a string name of the attribute to use when determining the ordering of returned accounts when there are multiple entries","example":"created"},"accountSortDescending":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls the order of the sort when there are multiple accounts. If not defined, the transform will default to false (ascending order)","example":false},"accountReturnFirstLink":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls which account to source a value from for an attribute. If this flag is set to true, the transform returns the value from the first account in the list, even if it is null. If it is set to false, the transform returns the first non-null value. If not defined, the transform will default to false","example":false},"accountFilter":{"type":"string","description":"This expression queries the database to narrow search results. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the database. The default filter will always include the source and identity, and any subsequent expressions will be combined in an AND operation to the existing search criteria.\n\nOnly certain searchable attributes are available:
      - `nativeIdentity` - the Account ID
      - `displayName` - the Account Name
      - `entitlements` - a boolean value to determine if the account has entitlements","example":"!(nativeIdentity.startsWith(\"*DELETED*\"))"},"accountPropertyFilter":{"type":"string","description":"This expression is used to search and filter accounts in memory. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the returned resultset.\n\nAll account attributes are available for filtering as this operation is performed in memory.","example":"(groups.containsAll({'Admin'}) || location == 'Austin')"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateFormat","type":"object","properties":{"inputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"outputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}}]},"secondDate":{"description":"This is the second date to consider (The date that would be on the right hand side of the comparison operation).","oneOf":[{"title":"accountAttribute","type":"object","required":["sourceName","attributeName"],"properties":{"sourceName":{"type":"string","description":"A reference to the source to search for the account","example":"Workday"},"attributeName":{"type":"string","description":"The name of the attribute on the account to return. This should match the name of the account attribute name visible in the user interface, or on the source schema.","example":"DEPARTMENT"},"accountSortAttribute":{"type":"string","description":"The value of this configuration is a string name of the attribute to use when determining the ordering of returned accounts when there are multiple entries","example":"created"},"accountSortDescending":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls the order of the sort when there are multiple accounts. If not defined, the transform will default to false (ascending order)","example":false},"accountReturnFirstLink":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls which account to source a value from for an attribute. If this flag is set to true, the transform returns the value from the first account in the list, even if it is null. If it is set to false, the transform returns the first non-null value. If not defined, the transform will default to false","example":false},"accountFilter":{"type":"string","description":"This expression queries the database to narrow search results. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the database. The default filter will always include the source and identity, and any subsequent expressions will be combined in an AND operation to the existing search criteria.\n\nOnly certain searchable attributes are available:
      - `nativeIdentity` - the Account ID
      - `displayName` - the Account Name
      - `entitlements` - a boolean value to determine if the account has entitlements","example":"!(nativeIdentity.startsWith(\"*DELETED*\"))"},"accountPropertyFilter":{"type":"string","description":"This expression is used to search and filter accounts in memory. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the returned resultset.\n\nAll account attributes are available for filtering as this operation is performed in memory.","example":"(groups.containsAll({'Admin'}) || location == 'Austin')"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateFormat","type":"object","properties":{"inputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"outputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}}]},"operator":{"type":"string","description":"This is the comparison to perform.\n| Operation | Description |\n| --------- | ------- |\n| LT | Strictly less than: firstDate < secondDate |\n| LTE | Less than or equal to: firstDate <= secondDate |\n| GT | Strictly greater than: firstDate > secondDate |\n| GTE | Greater than or equal to: firstDate >= secondDate |\n","enum":["LT","LTE","GT","GTE"],"example":"LT"},"positiveCondition":{"type":"string","description":"The output of the transform if the expression evalutes to true","example":"true"},"negativeCondition":{"type":"string","description":"The output of the transform if the expression evalutes to false","example":false},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateFormat","type":"object","properties":{"inputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"outputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateMath","type":"object","required":["expression"],"properties":{"expression":{"type":"string","description":"A string value of the date and time components to operation on, along with the math operations to execute.\n","externalDocs":{"description":"Date Math Expressions","url":"https://developer.sailpoint.com/docs/transforms/transform_operations/operations/date_math.html#transform-structure"},"example":"now+1w"},"roundUp":{"type":"boolean","description":"A boolean value to indicate whether the transform should round up or down when a rounding `/` operation is defined in the expression. \n\n\nIf not provided, the transform will default to `false`\n\n\n`true` indicates the transform should round up (i.e., truncate the fractional date/time component indicated and then add one unit of that component)\n\n\n`false` indicates the transform should round down (i.e., truncate the fractional date/time component indicated)\n","example":false},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"decomposeDiacriticalMarks","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"e164phone","type":"object","properties":{"defaultRegion":{"type":"string","description":"This is an optional attribute that can be used to define the region of the phone number to format into.\n\n\nIf defaultRegion is not provided, it will take US as the default country.\n\n\nThe format of the country code should be in [ISO 3166-1 alpha-2 format](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)\n","example":"US"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"firstValid","type":"object","required":["values"],"properties":{"values":{"type":"array","items":{"type":"object"},"description":"An array of attributes to evaluate for existence.","example":[{"attributes":{"sourceName":"Active Directory","attributeName":"sAMAccountName"},"type":"accountAttribute"},{"attributes":{"sourceName":"Okta","attributeName":"login"},"type":"accountAttribute"},{"attributes":{"sourceName":"HR Source","attributeName":"employeeID"},"type":"accountAttribute"}]},"ignoreErrors":{"type":"boolean","description":"a true or false value representing to move on to the next option if an error (like an Null Pointer Exception) were to occur.","example":false},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false}}},{"title":"rule","oneOf":[{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"This is the name of the Generic rule that needs to be invoked by the transform","example":"Generic Calculation Rule"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false}}},{"type":"object","required":["name","operation","includeNumbers","includeSpecialChars","length"],"properties":{"name":{"type":"string","description":"This must always be set to \"Cloud Services Deployment Utility\"","example":"Cloud Services Deployment Utility"},"operation":{"type":"string","description":"The operation to perform `generateRandomString`","example":"generateRandomString"},"includeNumbers":{"type":"boolean","description":"This must be either \"true\" or \"false\" to indicate whether the generator logic should include numbers","example":true},"includeSpecialChars":{"type":"boolean","description":"This must be either \"true\" or \"false\" to indicate whether the generator logic should include special characters","example":true},"length":{"type":"string","description":"This specifies how long the randomly generated string needs to be\n\n\n>NOTE Due to identity attribute data constraints, the maximum allowable value is 450 characters\n","example":"10"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false}}},{"type":"object","required":["name","operation","uid"],"properties":{"name":{"type":"string","description":"This must always be set to \"Cloud Services Deployment Utility\"","example":"Cloud Services Deployment Utility"},"operation":{"type":"string","description":"The operation to perform `getReferenceIdentityAttribute`","example":"getReferenceIdentityAttribute"},"uid":{"type":"string","description":"This is the SailPoint User Name (uid) value of the identity whose attribute is desired\n\nAs a convenience feature, you can use the `manager` keyword to dynamically look up the user's manager and then get that manager's identity attribute.\n","example":"2c91808570313110017040b06f344ec9"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false}}}]},{"title":"identityAttribute","type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The system (camel-cased) name of the identity attribute to bring in","example":"email"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"indexOf","type":"object","required":["substring"],"properties":{"substring":{"type":"string","description":"A substring to search for, searches the entire calling string, and returns the index of the first occurrence of the specified substring.","example":"admin_"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"iso3166","type":"object","properties":{"format":{"type":"string","description":"An optional value to denote which ISO 3166 format to return. Valid values are:\n\n\n`alpha2` - Two-character country code (e.g., \"US\"); this is the default value if no format is supplied\n\n\n`alpha3` - Three-character country code (e.g., \"USA\")\n\n\n`numeric` - The numeric country code (e.g., \"840\")\n","example":"alpha2"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"leftPad","type":"object","required":["length"],"properties":{"length":{"type":"string","description":"An integer value for the desired length of the final output string","example":"4"},"padding":{"type":"string","description":"A string value representing the character that the incoming data should be padded with to get to the desired length\n\n\nIf not provided, the transform will default to a single space (\" \") character for padding\n","example":"0"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"lookup","type":"object","required":["table"],"properties":{"table":{"type":"object","additionalProperties":true,"description":"This is a JSON object of key-value pairs. The key is the string that will attempt to be matched to the input, and the value is the output string that should be returned if the key is matched\n\n\n>**Note** the use of the optional default key value here; if none of the three countries in the above example match the input string, the transform will return \"Unknown Region\" for the attribute that is mapped to this transform.\n","example":{"USA":"Americas","FRA":"EMEA","AUS":"APAC","default":"Unknown Region"}},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"lower","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"nameNormalizer","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"randomAlphaNumeric","type":"object","properties":{"length":{"type":"string","description":"This is an integer value specifying the size/number of characters the random string must contain\n\n\n* This value must be a positive number and cannot be blank\n\n\n* If no length is provided, the transform will default to a value of `32`\n\n\n* Due to identity attribute data constraints, the maximum allowable value is `450` characters\n","example":"10"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"randomNumeric","type":"object","properties":{"length":{"type":"string","description":"This is an integer value specifying the size/number of characters the random string must contain\n\n\n* This value must be a positive number and cannot be blank\n\n\n* If no length is provided, the transform will default to a value of `32`\n\n\n* Due to identity attribute data constraints, the maximum allowable value is `450` characters\n","example":"10"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"reference","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"This ID specifies the name of the pre-existing transform which you want to use within your current transform","example":"Existing Transform"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"replaceAll","type":"object","required":["table"],"properties":{"table":{"type":"object","additionalProperties":true,"description":"An attribute of key-value pairs. Each pair identifies the pattern to search for as its key, and the replacement string as its value.","example":{"-":" ","\"":"'","ñ":"n"}},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"replace","type":"object","required":["regex","replacement"],"properties":{"regex":{"type":"string","description":"This can be a string or a regex pattern in which you want to replace.","example":"[^a-zA-Z]","externalDocs":{"description":"Regex Builder","url":"https://regex101.com/"}},"replacement":{"type":"string","description":"This is the replacement string that should be substituded wherever the string or pattern is found.","example":" "},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"rightPad","type":"object","required":["length"],"properties":{"length":{"type":"string","description":"An integer value for the desired length of the final output string","example":"4"},"padding":{"type":"string","description":"A string value representing the character that the incoming data should be padded with to get to the desired length\n\n\nIf not provided, the transform will default to a single space (\" \") character for padding\n","example":"0"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"split","type":"object","required":["delimiter","index"],"properties":{"delimiter":{"type":"string","description":"This can be either a single character or a regex expression, and is used by the transform to identify the break point between two substrings in the incoming data","example":","},"index":{"type":"string","description":"An integer value for the desired array element after the incoming data has been split into a list; the array is a 0-based object, so the first array element would be index 0, the second element would be index 1, etc.","example":"5"},"throws":{"type":"boolean","description":"A boolean (true/false) value which indicates whether an exception should be thrown and returned as an output when an index is out of bounds with the resultant array (i.e., the provided index value is larger than the size of the array)\n\n\n`true` - The transform should return \"IndexOutOfBoundsException\"\n\n\n`false` - The transform should return null\n\n\nIf not provided, the transform will default to false and return a null\n","example":true},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"static","type":"object","required":["values"],"properties":{"values":{"type":"string","description":"This must evaluate to a JSON string, either through a fixed value or through conditional logic using the Apache Velocity Template Language.","example":"string$variable","externalDocs":{"description":"Static Transform Documentation","url":"https://developer.sailpoint.com/docs/transforms/transform_operations/operations/static.html"}},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false}}},{"title":"substring","type":"object","required":["begin"],"properties":{"begin":{"type":"integer","description":"The index of the first character to include in the returned substring.\n\n\nIf `begin` is set to -1, the transform will begin at character 0 of the input data\n","example":1,"format":"int32"},"beginOffset":{"type":"integer","description":"This integer value is the number of characters to add to the begin attribute when returning a substring. \n\nThis attribute is only used if begin is not -1.\n","example":3,"format":"int32"},"end":{"type":"integer","description":"The index of the first character to exclude from the returned substring.\n\nIf end is -1 or not provided at all, the substring transform will return everything up to the end of the input string.\n","example":6,"format":"int32"},"endOffset":{"type":"integer","description":"This integer value is the number of characters to add to the end attribute when returning a substring. \n\nThis attribute is only used if end is provided and is not -1.\n","example":1,"format":"int32"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"trim","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"upper","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"uuid","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false}}}]},"internal":{"type":"boolean","readOnly":true,"description":"Indicates whether this is an internal SailPoint-created transform or a customer-created transform","example":false}}},"example":{"name":"Timestamp To Date","type":"dateFormat","attributes":{"inputFormat":"MMM dd yyyy, HH:mm:ss.SSS","outputFormat":"yyyy/dd/MM"}}}}},"responses":{"201":{"description":"Indicates the transform was successfully created and returns its representation.","content":{"application/json":{"schema":{"type":"object","description":"The representation of an internally- or customer-defined transform.","required":["name","type","attributes"],"properties":{"id":{"type":"string","readOnly":true,"description":"Unique ID of this transform","example":"2cd78adghjkja34jh2b1hkjhasuecd"},"name":{"type":"string","description":"Unique name of this transform","example":"Timestamp To Date"},"type":{"type":"string","description":"The type of transform operation","enum":["accountAttribute","base64Decode","base64Encode","concat","conditional","dateCompare","dateFormat","dateMath","decomposeDiacriticalMarks","e164phone","firstValid","rule","identityAttribute","indexOf","iso3166","lastIndexOf","leftPad","lookup","lower","normalizeNames","randomAlphaNumeric","randomNumeric","reference","replaceAll","replace","rightPad","split","static","substring","trim","upper","usernameGenerator","uuid"],"example":"dateFormat","externalDocs":{"description":"Transform Operations","url":"https://developer.sailpoint.com/docs/transforms/transform_operations/transform_operations.html#transform-operations"}},"attributes":{"description":"Meta-data about the transform. Values in this list are specific to the type of transform to be executed.","oneOf":[{"title":"accountAttribute","type":"object","required":["sourceName","attributeName"],"properties":{"sourceName":{"type":"string","description":"A reference to the source to search for the account","example":"Workday"},"attributeName":{"type":"string","description":"The name of the attribute on the account to return. This should match the name of the account attribute name visible in the user interface, or on the source schema.","example":"DEPARTMENT"},"accountSortAttribute":{"type":"string","description":"The value of this configuration is a string name of the attribute to use when determining the ordering of returned accounts when there are multiple entries","example":"created"},"accountSortDescending":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls the order of the sort when there are multiple accounts. If not defined, the transform will default to false (ascending order)","example":false},"accountReturnFirstLink":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls which account to source a value from for an attribute. If this flag is set to true, the transform returns the value from the first account in the list, even if it is null. If it is set to false, the transform returns the first non-null value. If not defined, the transform will default to false","example":false},"accountFilter":{"type":"string","description":"This expression queries the database to narrow search results. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the database. The default filter will always include the source and identity, and any subsequent expressions will be combined in an AND operation to the existing search criteria.\n\nOnly certain searchable attributes are available:
      - `nativeIdentity` - the Account ID
      - `displayName` - the Account Name
      - `entitlements` - a boolean value to determine if the account has entitlements","example":"!(nativeIdentity.startsWith(\"*DELETED*\"))"},"accountPropertyFilter":{"type":"string","description":"This expression is used to search and filter accounts in memory. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the returned resultset.\n\nAll account attributes are available for filtering as this operation is performed in memory.","example":"(groups.containsAll({'Admin'}) || location == 'Austin')"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"base64Decode","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"base64Encode","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"concat","type":"object","required":["values"],"properties":{"values":{"type":"array","items":{"type":"object"},"description":"An array of items to join together","example":["John"," ","Smith"]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"conditional","type":"object","required":["expression","positiveCondition","negativeCondition"],"properties":{"expression":{"type":"string","description":"A comparison statement that follows the structure of `ValueA eq ValueB` where `ValueA` and `ValueB` are static strings or outputs of other transforms. \n\nThe `eq` operator is the only valid comparison","example":"ValueA eq ValueB"},"positiveCondition":{"type":"string","description":"The output of the transform if the expression evalutes to true","example":"true"},"negativeCondition":{"type":"string","description":"The output of the transform if the expression evalutes to false","example":"false"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateCompare","type":"object","required":["firstDate","secondDate","operator","positiveCondition","negativeCondition"],"properties":{"firstDate":{"description":"This is the first date to consider (The date that would be on the left hand side of the comparison operation).","oneOf":[{"title":"accountAttribute","type":"object","required":["sourceName","attributeName"],"properties":{"sourceName":{"type":"string","description":"A reference to the source to search for the account","example":"Workday"},"attributeName":{"type":"string","description":"The name of the attribute on the account to return. This should match the name of the account attribute name visible in the user interface, or on the source schema.","example":"DEPARTMENT"},"accountSortAttribute":{"type":"string","description":"The value of this configuration is a string name of the attribute to use when determining the ordering of returned accounts when there are multiple entries","example":"created"},"accountSortDescending":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls the order of the sort when there are multiple accounts. If not defined, the transform will default to false (ascending order)","example":false},"accountReturnFirstLink":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls which account to source a value from for an attribute. If this flag is set to true, the transform returns the value from the first account in the list, even if it is null. If it is set to false, the transform returns the first non-null value. If not defined, the transform will default to false","example":false},"accountFilter":{"type":"string","description":"This expression queries the database to narrow search results. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the database. The default filter will always include the source and identity, and any subsequent expressions will be combined in an AND operation to the existing search criteria.\n\nOnly certain searchable attributes are available:
      - `nativeIdentity` - the Account ID
      - `displayName` - the Account Name
      - `entitlements` - a boolean value to determine if the account has entitlements","example":"!(nativeIdentity.startsWith(\"*DELETED*\"))"},"accountPropertyFilter":{"type":"string","description":"This expression is used to search and filter accounts in memory. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the returned resultset.\n\nAll account attributes are available for filtering as this operation is performed in memory.","example":"(groups.containsAll({'Admin'}) || location == 'Austin')"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateFormat","type":"object","properties":{"inputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"outputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}}]},"secondDate":{"description":"This is the second date to consider (The date that would be on the right hand side of the comparison operation).","oneOf":[{"title":"accountAttribute","type":"object","required":["sourceName","attributeName"],"properties":{"sourceName":{"type":"string","description":"A reference to the source to search for the account","example":"Workday"},"attributeName":{"type":"string","description":"The name of the attribute on the account to return. This should match the name of the account attribute name visible in the user interface, or on the source schema.","example":"DEPARTMENT"},"accountSortAttribute":{"type":"string","description":"The value of this configuration is a string name of the attribute to use when determining the ordering of returned accounts when there are multiple entries","example":"created"},"accountSortDescending":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls the order of the sort when there are multiple accounts. If not defined, the transform will default to false (ascending order)","example":false},"accountReturnFirstLink":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls which account to source a value from for an attribute. If this flag is set to true, the transform returns the value from the first account in the list, even if it is null. If it is set to false, the transform returns the first non-null value. If not defined, the transform will default to false","example":false},"accountFilter":{"type":"string","description":"This expression queries the database to narrow search results. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the database. The default filter will always include the source and identity, and any subsequent expressions will be combined in an AND operation to the existing search criteria.\n\nOnly certain searchable attributes are available:
      - `nativeIdentity` - the Account ID
      - `displayName` - the Account Name
      - `entitlements` - a boolean value to determine if the account has entitlements","example":"!(nativeIdentity.startsWith(\"*DELETED*\"))"},"accountPropertyFilter":{"type":"string","description":"This expression is used to search and filter accounts in memory. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the returned resultset.\n\nAll account attributes are available for filtering as this operation is performed in memory.","example":"(groups.containsAll({'Admin'}) || location == 'Austin')"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateFormat","type":"object","properties":{"inputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"outputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}}]},"operator":{"type":"string","description":"This is the comparison to perform.\n| Operation | Description |\n| --------- | ------- |\n| LT | Strictly less than: firstDate < secondDate |\n| LTE | Less than or equal to: firstDate <= secondDate |\n| GT | Strictly greater than: firstDate > secondDate |\n| GTE | Greater than or equal to: firstDate >= secondDate |\n","enum":["LT","LTE","GT","GTE"],"example":"LT"},"positiveCondition":{"type":"string","description":"The output of the transform if the expression evalutes to true","example":"true"},"negativeCondition":{"type":"string","description":"The output of the transform if the expression evalutes to false","example":false},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateFormat","type":"object","properties":{"inputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"outputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateMath","type":"object","required":["expression"],"properties":{"expression":{"type":"string","description":"A string value of the date and time components to operation on, along with the math operations to execute.\n","externalDocs":{"description":"Date Math Expressions","url":"https://developer.sailpoint.com/docs/transforms/transform_operations/operations/date_math.html#transform-structure"},"example":"now+1w"},"roundUp":{"type":"boolean","description":"A boolean value to indicate whether the transform should round up or down when a rounding `/` operation is defined in the expression. \n\n\nIf not provided, the transform will default to `false`\n\n\n`true` indicates the transform should round up (i.e., truncate the fractional date/time component indicated and then add one unit of that component)\n\n\n`false` indicates the transform should round down (i.e., truncate the fractional date/time component indicated)\n","example":false},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"decomposeDiacriticalMarks","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"e164phone","type":"object","properties":{"defaultRegion":{"type":"string","description":"This is an optional attribute that can be used to define the region of the phone number to format into.\n\n\nIf defaultRegion is not provided, it will take US as the default country.\n\n\nThe format of the country code should be in [ISO 3166-1 alpha-2 format](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)\n","example":"US"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"firstValid","type":"object","required":["values"],"properties":{"values":{"type":"array","items":{"type":"object"},"description":"An array of attributes to evaluate for existence.","example":[{"attributes":{"sourceName":"Active Directory","attributeName":"sAMAccountName"},"type":"accountAttribute"},{"attributes":{"sourceName":"Okta","attributeName":"login"},"type":"accountAttribute"},{"attributes":{"sourceName":"HR Source","attributeName":"employeeID"},"type":"accountAttribute"}]},"ignoreErrors":{"type":"boolean","description":"a true or false value representing to move on to the next option if an error (like an Null Pointer Exception) were to occur.","example":false},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false}}},{"title":"rule","oneOf":[{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"This is the name of the Generic rule that needs to be invoked by the transform","example":"Generic Calculation Rule"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false}}},{"type":"object","required":["name","operation","includeNumbers","includeSpecialChars","length"],"properties":{"name":{"type":"string","description":"This must always be set to \"Cloud Services Deployment Utility\"","example":"Cloud Services Deployment Utility"},"operation":{"type":"string","description":"The operation to perform `generateRandomString`","example":"generateRandomString"},"includeNumbers":{"type":"boolean","description":"This must be either \"true\" or \"false\" to indicate whether the generator logic should include numbers","example":true},"includeSpecialChars":{"type":"boolean","description":"This must be either \"true\" or \"false\" to indicate whether the generator logic should include special characters","example":true},"length":{"type":"string","description":"This specifies how long the randomly generated string needs to be\n\n\n>NOTE Due to identity attribute data constraints, the maximum allowable value is 450 characters\n","example":"10"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false}}},{"type":"object","required":["name","operation","uid"],"properties":{"name":{"type":"string","description":"This must always be set to \"Cloud Services Deployment Utility\"","example":"Cloud Services Deployment Utility"},"operation":{"type":"string","description":"The operation to perform `getReferenceIdentityAttribute`","example":"getReferenceIdentityAttribute"},"uid":{"type":"string","description":"This is the SailPoint User Name (uid) value of the identity whose attribute is desired\n\nAs a convenience feature, you can use the `manager` keyword to dynamically look up the user's manager and then get that manager's identity attribute.\n","example":"2c91808570313110017040b06f344ec9"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false}}}]},{"title":"identityAttribute","type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The system (camel-cased) name of the identity attribute to bring in","example":"email"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"indexOf","type":"object","required":["substring"],"properties":{"substring":{"type":"string","description":"A substring to search for, searches the entire calling string, and returns the index of the first occurrence of the specified substring.","example":"admin_"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"iso3166","type":"object","properties":{"format":{"type":"string","description":"An optional value to denote which ISO 3166 format to return. Valid values are:\n\n\n`alpha2` - Two-character country code (e.g., \"US\"); this is the default value if no format is supplied\n\n\n`alpha3` - Three-character country code (e.g., \"USA\")\n\n\n`numeric` - The numeric country code (e.g., \"840\")\n","example":"alpha2"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"leftPad","type":"object","required":["length"],"properties":{"length":{"type":"string","description":"An integer value for the desired length of the final output string","example":"4"},"padding":{"type":"string","description":"A string value representing the character that the incoming data should be padded with to get to the desired length\n\n\nIf not provided, the transform will default to a single space (\" \") character for padding\n","example":"0"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"lookup","type":"object","required":["table"],"properties":{"table":{"type":"object","additionalProperties":true,"description":"This is a JSON object of key-value pairs. The key is the string that will attempt to be matched to the input, and the value is the output string that should be returned if the key is matched\n\n\n>**Note** the use of the optional default key value here; if none of the three countries in the above example match the input string, the transform will return \"Unknown Region\" for the attribute that is mapped to this transform.\n","example":{"USA":"Americas","FRA":"EMEA","AUS":"APAC","default":"Unknown Region"}},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"lower","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"nameNormalizer","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"randomAlphaNumeric","type":"object","properties":{"length":{"type":"string","description":"This is an integer value specifying the size/number of characters the random string must contain\n\n\n* This value must be a positive number and cannot be blank\n\n\n* If no length is provided, the transform will default to a value of `32`\n\n\n* Due to identity attribute data constraints, the maximum allowable value is `450` characters\n","example":"10"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"randomNumeric","type":"object","properties":{"length":{"type":"string","description":"This is an integer value specifying the size/number of characters the random string must contain\n\n\n* This value must be a positive number and cannot be blank\n\n\n* If no length is provided, the transform will default to a value of `32`\n\n\n* Due to identity attribute data constraints, the maximum allowable value is `450` characters\n","example":"10"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"reference","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"This ID specifies the name of the pre-existing transform which you want to use within your current transform","example":"Existing Transform"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"replaceAll","type":"object","required":["table"],"properties":{"table":{"type":"object","additionalProperties":true,"description":"An attribute of key-value pairs. Each pair identifies the pattern to search for as its key, and the replacement string as its value.","example":{"-":" ","\"":"'","ñ":"n"}},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"replace","type":"object","required":["regex","replacement"],"properties":{"regex":{"type":"string","description":"This can be a string or a regex pattern in which you want to replace.","example":"[^a-zA-Z]","externalDocs":{"description":"Regex Builder","url":"https://regex101.com/"}},"replacement":{"type":"string","description":"This is the replacement string that should be substituded wherever the string or pattern is found.","example":" "},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"rightPad","type":"object","required":["length"],"properties":{"length":{"type":"string","description":"An integer value for the desired length of the final output string","example":"4"},"padding":{"type":"string","description":"A string value representing the character that the incoming data should be padded with to get to the desired length\n\n\nIf not provided, the transform will default to a single space (\" \") character for padding\n","example":"0"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"split","type":"object","required":["delimiter","index"],"properties":{"delimiter":{"type":"string","description":"This can be either a single character or a regex expression, and is used by the transform to identify the break point between two substrings in the incoming data","example":","},"index":{"type":"string","description":"An integer value for the desired array element after the incoming data has been split into a list; the array is a 0-based object, so the first array element would be index 0, the second element would be index 1, etc.","example":"5"},"throws":{"type":"boolean","description":"A boolean (true/false) value which indicates whether an exception should be thrown and returned as an output when an index is out of bounds with the resultant array (i.e., the provided index value is larger than the size of the array)\n\n\n`true` - The transform should return \"IndexOutOfBoundsException\"\n\n\n`false` - The transform should return null\n\n\nIf not provided, the transform will default to false and return a null\n","example":true},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"static","type":"object","required":["values"],"properties":{"values":{"type":"string","description":"This must evaluate to a JSON string, either through a fixed value or through conditional logic using the Apache Velocity Template Language.","example":"string$variable","externalDocs":{"description":"Static Transform Documentation","url":"https://developer.sailpoint.com/docs/transforms/transform_operations/operations/static.html"}},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false}}},{"title":"substring","type":"object","required":["begin"],"properties":{"begin":{"type":"integer","description":"The index of the first character to include in the returned substring.\n\n\nIf `begin` is set to -1, the transform will begin at character 0 of the input data\n","example":1,"format":"int32"},"beginOffset":{"type":"integer","description":"This integer value is the number of characters to add to the begin attribute when returning a substring. \n\nThis attribute is only used if begin is not -1.\n","example":3,"format":"int32"},"end":{"type":"integer","description":"The index of the first character to exclude from the returned substring.\n\nIf end is -1 or not provided at all, the substring transform will return everything up to the end of the input string.\n","example":6,"format":"int32"},"endOffset":{"type":"integer","description":"This integer value is the number of characters to add to the end attribute when returning a substring. \n\nThis attribute is only used if end is provided and is not -1.\n","example":1,"format":"int32"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"trim","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"upper","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"uuid","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false}}}]},"internal":{"type":"boolean","readOnly":true,"description":"Indicates whether this is an internal SailPoint-created transform or a customer-created transform","example":false}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:transforms:write"]}],"method":"post","path":"/transforms","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"2cd78adghjkja34jh2b1hkjhasuecd","name":"Timestamp To Date","type":"dateFormat","internal":false},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Create transform","description":{"content":"Creates a new transform object immediately. By default, the internal flag is set to false to indicate that this is a custom transform. Only SailPoint employees have the ability to create a transform with internal set to true. Newly created Transforms can be used in the Identity Profile mappings within the UI. A token with transform write authority is required to call this API.","type":"text/plain"},"url":{"path":["transforms"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create transform + + + +Creates a new transform object immediately. By default, the internal flag is set to false to indicate that this is a custom transform. Only SailPoint employees have the ability to create a transform with internal set to true. Newly created Transforms can be used in the Identity Profile mappings within the UI. A token with transform write authority is required to call this API. + +
      Request Body required
      + +The transform to be created. + +
        attributes object
        + +Meta-data about the transform. Values in this list are specific to the type of transform to be executed. + +
      • oneOf - `nativeIdentity` - the Account ID
        - `displayName` - the Account Name
        - `entitlements` - a boolean value to determine if the account has entitlements"} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}>
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        firstDate object
        + +This is the first date to consider (The date that would be on the left hand side of the comparison operation). + +
      • oneOf - `nativeIdentity` - the Account ID
        - `displayName` - the Account Name
        - `entitlements` - a boolean value to determine if the account has entitlements"} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}>
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        inputFormat object
        + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
      • oneOf
      • string
        + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
        + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
      • string
        + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
      • outputFormat object
        + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
      • oneOf
      • string
        + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
        + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
      • string
        + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
      • input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      secondDate object
      + +This is the second date to consider (The date that would be on the right hand side of the comparison operation). + +
    • oneOf - `nativeIdentity` - the Account ID
      - `displayName` - the Account Name
      - `entitlements` - a boolean value to determine if the account has entitlements"} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}>
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      inputFormat object
      + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
    • oneOf
    • string
      + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
      + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
    • string
      + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
    • outputFormat object
      + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
    • oneOf
    • string
      + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
      + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
    • string
      + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
    • input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      secondDate |\n| GTE | Greater than or equal to: firstDate >= secondDate |\n"} schemaName={"string"} qualifierMessage={"**Possible values:** [`LT`, `LTE`, `GT`, `GTE`]"} defaultValue={undefined}>
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      inputFormat object
      + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
    • oneOf
    • string
      + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
      + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
    • string
      + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
    • outputFormat object
      + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
    • oneOf
    • string
      + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
      + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
    • string
      + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
    • input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      table object
      + +This is a JSON object of key-value pairs. The key is the string that will attempt to be matched to the input, and the value is the output string that should be returned if the key is matched + + +>**Note** the use of the optional default key value here; if none of the three countries in the above example match the input string, the transform will return "Unknown Region" for the attribute that is mapped to this transform. + + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      table object
      + +An attribute of key-value pairs. Each pair identifies the pattern to search for as its key, and the replacement string as its value. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      + +Indicates the transform was successfully created and returns its representation. + +
      Schema
        attributes object
        + +Meta-data about the transform. Values in this list are specific to the type of transform to be executed. + +
      • oneOf - `nativeIdentity` - the Account ID
        - `displayName` - the Account Name
        - `entitlements` - a boolean value to determine if the account has entitlements"} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}>
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        firstDate object
        + +This is the first date to consider (The date that would be on the left hand side of the comparison operation). + +
      • oneOf - `nativeIdentity` - the Account ID
        - `displayName` - the Account Name
        - `entitlements` - a boolean value to determine if the account has entitlements"} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}>
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        inputFormat object
        + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
      • oneOf
      • string
        + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
        + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
      • string
        + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
      • outputFormat object
        + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
      • oneOf
      • string
        + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
        + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
      • string
        + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
      • input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      secondDate object
      + +This is the second date to consider (The date that would be on the right hand side of the comparison operation). + +
    • oneOf - `nativeIdentity` - the Account ID
      - `displayName` - the Account Name
      - `entitlements` - a boolean value to determine if the account has entitlements"} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}>
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      inputFormat object
      + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
    • oneOf
    • string
      + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
      + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
    • string
      + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
    • outputFormat object
      + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
    • oneOf
    • string
      + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
      + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
    • string
      + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
    • input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      secondDate |\n| GTE | Greater than or equal to: firstDate >= secondDate |\n"} schemaName={"string"} qualifierMessage={"**Possible values:** [`LT`, `LTE`, `GT`, `GTE`]"} defaultValue={undefined}>
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      inputFormat object
      + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
    • oneOf
    • string
      + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
      + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
    • string
      + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
    • outputFormat object
      + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
    • oneOf
    • string
      + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
      + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
    • string
      + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
    • input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      table object
      + +This is a JSON object of key-value pairs. The key is the string that will attempt to be matched to the input, and the value is the output string that should be returned if the key is matched + + +>**Note** the use of the optional default key value here; if none of the three countries in the above example match the input string, the transform will return "Unknown Region" for the attribute that is mapped to this transform. + + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      table object
      + +An attribute of key-value pairs. Each pair identifies the pattern to search for as its key, and the replacement string as its value. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/delete-account.api.mdx b/docs/sailpoint-api-v3/delete-account.api.mdx new file mode 100644 index 000000000..84cc241a8 --- /dev/null +++ b/docs/sailpoint-api-v3/delete-account.api.mdx @@ -0,0 +1,88 @@ +--- +id: delete-account +sidebar_label: Delete Account +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteAccount","tags":["Accounts"],"description":"This API submits an account delete task and returns the task ID. This operation can only be used on Flat File Sources. Any attempt to execute this request on the source of other type will result in an error response with a status code of 400.\nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:account:delete"]}],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The account ID","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"202":{"description":"Async task details","content":{"application/json":{"schema":{"description":"Accounts async response containing details on started async process","required":["id"],"type":"object","properties":{"id":{"description":"id of the task","type":"string","example":"2c91808474683da6017468693c260195"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/accounts/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Delete Account","description":{"content":"This API submits an account delete task and returns the task ID. This operation can only be used on Flat File Sources. Any attempt to execute this request on the source of other type will result in an error response with a status code of 400.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The account ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Account + + + +This API submits an account delete task and returns the task ID. This operation can only be used on Flat File Sources. Any attempt to execute this request on the source of other type will result in an error response with a status code of 400. +A token with ORG_ADMIN authority is required to call this API. + +
      Path Parameters
      + +Async task details + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/delete-lifecycle-state.api.mdx b/docs/sailpoint-api-v3/delete-lifecycle-state.api.mdx new file mode 100644 index 000000000..9ee953d7a --- /dev/null +++ b/docs/sailpoint-api-v3/delete-lifecycle-state.api.mdx @@ -0,0 +1,88 @@ +--- +id: delete-lifecycle-state +sidebar_label: Delete Lifecycle State by ID +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteLifecycleState","tags":["Lifecycle States"],"description":"This endpoint deletes the Lifecycle State using it's ID.\nA token with API, or ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:identity-profile-lifecycle-state:delete"]}],"parameters":[{"in":"path","name":"identity-profile-id","description":"Identity Profile ID","required":true,"schema":{"type":"string"}},{"in":"path","name":"lifecycle-state-id","description":"Lifecycle State ID","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"The request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/identity-profiles/{identity-profile-id}/lifecycle-states/{lifecycle-state-id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Delete Lifecycle State by ID","description":{"content":"This endpoint deletes the Lifecycle State using it's ID.\nA token with API, or ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["identity-profiles",":identity-profile-id","lifecycle-states",":lifecycle-state-id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Identity Profile ID","type":"text/plain"},"type":"any","value":"","key":"identity-profile-id"},{"disabled":false,"description":{"content":"(Required) Lifecycle State ID","type":"text/plain"},"type":"any","value":"","key":"lifecycle-state-id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Lifecycle State by ID + + + +This endpoint deletes the Lifecycle State using it's ID. +A token with API, or ORG_ADMIN authority is required to call this API. + +
      Path Parameters
      + +The request was successfully accepted into the system. + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/delete-oauth-client.api.mdx b/docs/sailpoint-api-v3/delete-oauth-client.api.mdx new file mode 100644 index 000000000..d691f05ac --- /dev/null +++ b/docs/sailpoint-api-v3/delete-oauth-client.api.mdx @@ -0,0 +1,89 @@ +--- +id: delete-oauth-client +sidebar_label: Delete OAuth Client +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteOauthClient","tags":["OAuth Clients"],"description":"This deletes an OAuth client.\nRequest will require the following security scopes:\n- 'idn:oathkeeper-client:delete' - 'idn:oathkeeper-internal-client:delete'","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The OAuth client id","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"204":{"description":"No content."},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/oauth-clients/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Delete OAuth Client","description":{"content":"This deletes an OAuth client.\nRequest will require the following security scopes:\n- 'idn:oathkeeper-client:delete' - 'idn:oathkeeper-internal-client:delete'","type":"text/plain"},"url":{"path":["oauth-clients",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The OAuth client id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete OAuth Client + + + +This deletes an OAuth client. +Request will require the following security scopes: +- 'idn:oathkeeper-client:delete' - 'idn:oathkeeper-internal-client:delete' + +
      Path Parameters
      + +No content. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/delete-personal-access-token.api.mdx b/docs/sailpoint-api-v3/delete-personal-access-token.api.mdx new file mode 100644 index 000000000..2e9b5cca8 --- /dev/null +++ b/docs/sailpoint-api-v3/delete-personal-access-token.api.mdx @@ -0,0 +1,91 @@ +--- +id: delete-personal-access-token +sidebar_label: Delete Personal Access Token +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deletePersonalAccessToken","tags":["Personal Access Tokens"],"description":"This deletes a personal access token

      Any of the following rights are required to access this resource:
        \n
      • idn:my-personal-access-tokens:delete
      • \n
      • idn:all-personal-access-tokens:delete
      • \n
      • idn:managed-personal-access-tokens:delete
      • \n
      ","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The personal access token id","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"204":{"description":"No content."},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/personal-access-tokens/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Delete Personal Access Token","description":{"content":"This deletes a personal access token

      Any of the following rights are required to access this resource:
        \n
      • idn:my-personal-access-tokens:delete
      • \n
      • idn:all-personal-access-tokens:delete
      • \n
      • idn:managed-personal-access-tokens:delete
      • \n
      ","type":"text/plain"},"url":{"path":["personal-access-tokens",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The personal access token id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Personal Access Token + + + +This deletes a personal access token </br> </br> Any of the following rights are required to access this resource: <ul> + <li>idn:my-personal-access-tokens:delete</li> + <li>idn:all-personal-access-tokens:delete</li> + <li>idn:managed-personal-access-tokens:delete</li> +</ul> + +
      Path Parameters
      + +No content. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/delete-provisioning-policy.api.mdx b/docs/sailpoint-api-v3/delete-provisioning-policy.api.mdx new file mode 100644 index 000000000..4cad83788 --- /dev/null +++ b/docs/sailpoint-api-v3/delete-provisioning-policy.api.mdx @@ -0,0 +1,88 @@ +--- +id: delete-provisioning-policy +sidebar_label: Delete Provisioning Policy by UsageType +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteProvisioningPolicy","tags":["Sources"],"description":"Deletes the provisioning policy with the specified usage on an application.\nA token with API, or ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:provisioning-policy:delete"]}],"parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source ID.","example":"2c9180835d191a86015d28455b4a2329"},{"in":"path","name":"usageType","required":true,"schema":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"description":"The type of ProvisioningPolicy usage."}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/sources/{sourceId}/provisioning-policies/{usageType}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Delete Provisioning Policy by UsageType","description":{"content":"Deletes the provisioning policy with the specified usage on an application.\nA token with API, or ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":sourceId","provisioning-policies",":usageType"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source ID.","type":"text/plain"},"type":"any","value":"","key":"sourceId"},{"disabled":false,"description":{"content":"(Required) The type of ProvisioningPolicy usage.","type":"text/plain"},"type":"any","value":"","key":"usageType"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Provisioning Policy by UsageType + + + +Deletes the provisioning policy with the specified usage on an application. +A token with API, or ORG_ADMIN authority is required to call this API. + +
      Path Parameters
      + +No content - indicates the request was successful but there is no content to be returned in the response. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/delete-schema-attribute.api.mdx b/docs/sailpoint-api-v3/delete-schema-attribute.api.mdx new file mode 100644 index 000000000..0b775649e --- /dev/null +++ b/docs/sailpoint-api-v3/delete-schema-attribute.api.mdx @@ -0,0 +1,77 @@ +--- +id: delete-schema-attribute +sidebar_label: Delete a Schema Attribute for Non-Employee Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteSchemaAttribute","tags":["Non-Employee Lifecycle Management"],"description":"This end-point deletes a specific schema attribute for a non-employee source.

      \nRequires role context of `idn:nesr:delete`\n","parameters":[{"in":"path","name":"attributeId","schema":{"type":"string"},"required":true,"description":"The Schema Attribute Id (UUID)"},{"in":"path","name":"sourceId","schema":{"type":"string"},"required":true,"description":"The Source id"}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/non-employee-sources/{sourceId}/schema-attributes/{attributeId}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Delete a Schema Attribute for Non-Employee Source","description":{"content":"This end-point deletes a specific schema attribute for a non-employee source.

      \nRequires role context of `idn:nesr:delete`\n","type":"text/plain"},"url":{"path":["non-employee-sources",":sourceId","schema-attributes",":attributeId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Schema Attribute Id (UUID)","type":"text/plain"},"type":"any","value":"","key":"attributeId"},{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete a Schema Attribute for Non-Employee Source + + + +This end-point deletes a specific schema attribute for a non-employee source.<br><br> +Requires role context of `idn:nesr:delete` + + +
      Path Parameters
      + +No content - indicates the request was successful but there is no content to be returned in the response. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/delete-schema-attributes.api.mdx b/docs/sailpoint-api-v3/delete-schema-attributes.api.mdx new file mode 100644 index 000000000..129d35fe2 --- /dev/null +++ b/docs/sailpoint-api-v3/delete-schema-attributes.api.mdx @@ -0,0 +1,75 @@ +--- +id: delete-schema-attributes +sidebar_label: Delete all custom schema attributes for Non-Employee Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteSchemaAttributes","tags":["Non-Employee Lifecycle Management"],"description":"This end-point deletes all custom schema attributes for a non-employee source.

      Requires role context of `idn:nesr:delete`","parameters":[{"in":"path","name":"sourceId","schema":{"type":"string"},"required":true,"description":"The Source id"}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/non-employee-sources/{sourceId}/schema-attributes","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Delete all custom schema attributes for Non-Employee Source","description":{"content":"This end-point deletes all custom schema attributes for a non-employee source.

      Requires role context of `idn:nesr:delete`","type":"text/plain"},"url":{"path":["non-employee-sources",":sourceId","schema-attributes"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete all custom schema attributes for Non-Employee Source + + + +This end-point deletes all custom schema attributes for a non-employee source.<br><br> Requires role context of `idn:nesr:delete` + +
      Path Parameters
      + +No content - indicates the request was successful but there is no content to be returned in the response. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/delete-schema.api.mdx b/docs/sailpoint-api-v3/delete-schema.api.mdx new file mode 100644 index 000000000..a08124da4 --- /dev/null +++ b/docs/sailpoint-api-v3/delete-schema.api.mdx @@ -0,0 +1,87 @@ +--- +id: delete-schema +sidebar_label: Delete Source Schema by ID +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteSchema","tags":["Sources"],"parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source id.","example":"2c9180835d191a86015d28455b4a2329"},{"in":"path","name":"schemaId","schema":{"type":"string"},"required":true,"description":"The Schema id.","example":"2c9180835d191a86015d28455b4a2329"}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"description":"Delete Source Schema by ID","method":"delete","path":"/sources/{sourceId}/schemas/{schemaId}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Delete Source Schema by ID","description":{"type":"text/plain"},"url":{"path":["sources",":sourceId","schemas",":schemaId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id.","type":"text/plain"},"type":"any","value":"","key":"sourceId"},{"disabled":false,"description":{"content":"(Required) The Schema id.","type":"text/plain"},"type":"any","value":"","key":"schemaId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Source Schema by ID + + + +Delete Source Schema by ID + +
      Path Parameters
      + +No content - indicates the request was successful but there is no content to be returned in the response. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/delete-service-desk-integration.api.mdx b/docs/sailpoint-api-v3/delete-service-desk-integration.api.mdx new file mode 100644 index 000000000..e2606d097 --- /dev/null +++ b/docs/sailpoint-api-v3/delete-service-desk-integration.api.mdx @@ -0,0 +1,87 @@ +--- +id: delete-service-desk-integration +sidebar_label: Delete a Service Desk integration by ID +hide_title: true +hide_table_of_contents: true +api: {"tags":["Service Desk Integration"],"description":"Delete an existing Service Desk integration by ID. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","operationId":"deleteServiceDeskIntegration","parameters":[{"name":"id","in":"path","description":"ID of Service Desk integration to delete","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"anId"}}],"responses":{"204":{"description":"Service Desk integration with the given ID successfully deleted"},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:service-desk-admin:write","idn:service-desk-integration:write"]}],"method":"delete","path":"/service-desk-integrations/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Delete a Service Desk integration by ID","description":{"content":"Delete an existing Service Desk integration by ID. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","type":"text/plain"},"url":{"path":["service-desk-integrations",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of Service Desk integration to delete","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete a Service Desk integration by ID + + + +Delete an existing Service Desk integration by ID. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + +
      Path Parameters
      + +Service Desk integration with the given ID successfully deleted + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/delete-source.api.mdx b/docs/sailpoint-api-v3/delete-source.api.mdx new file mode 100644 index 000000000..16607694a --- /dev/null +++ b/docs/sailpoint-api-v3/delete-source.api.mdx @@ -0,0 +1,89 @@ +--- +id: delete-source +sidebar_label: Delete Source by ID +hide_title: true +hide_table_of_contents: true +api: {"operationId":"deleteSource","tags":["Sources"],"description":"This end-point deletes a specific source in IdentityNow.\nA token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.\nAll of accounts on the source will be removed first, then the source will be deleted. Actual status of task execution can be retrieved via method GET `/task-status/{id}`","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The Source id","example":"2c9180835d191a86015d28455b4a2329"}],"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"examples":{"deleteSource":{"summary":"Response returned when deleting a source","value":{"type":"TASK_RESULT","id":"2c91808779ecf55b0179f720942f181a","name":null}}}}},"links":{"GetTaskStatusById":{"operationId":"getTaskStatus","parameters":{"id":"$response.body#/id"},"description":"The `id` value returned in the response can be used as the `id` parameter in `GET /task-status/{id}`.\n"}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/sources/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Delete Source by ID","description":{"content":"This end-point deletes a specific source in IdentityNow.\nA token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.\nAll of accounts on the source will be removed first, then the source will be deleted. Actual status of task execution can be retrieved via method GET `/task-status/{id}`","type":"text/plain"},"url":{"path":["sources",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Source by ID + + + +This end-point deletes a specific source in IdentityNow. +A token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. +All of accounts on the source will be removed first, then the source will be deleted. Actual status of task execution can be retrieved via method GET `/task-status/{id}` + +
      Path Parameters
      + +Accepted - Returned if the request was successfully accepted into the system. + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/delete-transform.api.mdx b/docs/sailpoint-api-v3/delete-transform.api.mdx new file mode 100644 index 000000000..3b3ea2ef1 --- /dev/null +++ b/docs/sailpoint-api-v3/delete-transform.api.mdx @@ -0,0 +1,88 @@ +--- +id: delete-transform +sidebar_label: Delete a transform +hide_title: true +hide_table_of_contents: true +api: {"tags":["Transforms"],"description":"Deletes the transform specified by the given ID. Attempting to delete a transform that is used in one or more Identity Profile mappings will result in an error. If this occurs, you must first remove the transform from all mappings before deleting the transform.\nA token with transform delete authority is required to call this API.","operationId":"deleteTransform","parameters":[{"name":"id","in":"path","description":"ID of the transform to delete","required":true,"style":"simple","explode":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:transforms:delete"]}],"method":"delete","path":"/transforms/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Delete a transform","description":{"content":"Deletes the transform specified by the given ID. Attempting to delete a transform that is used in one or more Identity Profile mappings will result in an error. If this occurs, you must first remove the transform from all mappings before deleting the transform.\nA token with transform delete authority is required to call this API.","type":"text/plain"},"url":{"path":["transforms",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the transform to delete","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete a transform + + + +Deletes the transform specified by the given ID. Attempting to delete a transform that is used in one or more Identity Profile mappings will result in an error. If this occurs, you must first remove the transform from all mappings before deleting the transform. +A token with transform delete authority is required to call this API. + +
      Path Parameters
      + +No content - indicates the request was successful but there is no content to be returned in the response. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/disable-account.api.mdx b/docs/sailpoint-api-v3/disable-account.api.mdx new file mode 100644 index 000000000..09b9201f7 --- /dev/null +++ b/docs/sailpoint-api-v3/disable-account.api.mdx @@ -0,0 +1,88 @@ +--- +id: disable-account +sidebar_label: Disable Account +hide_title: true +hide_table_of_contents: true +api: {"operationId":"disableAccount","tags":["Accounts"],"description":"This API submits a task to disable the account and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:account:disable"]}],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The account id","example":"ef38f94347e94562b5bb8424a56397d8"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"description":"Request used for account enable/disable","type":"object","properties":{"externalVerificationId":{"description":"If set, an external process validates that the user wants to proceed with this request.","type":"string","example":"3f9180835d2e5168015d32f890ca1581"},"forceProvisioning":{"description":"If set, provisioning updates the account attribute at the source. This option is used when the account is not synced to ensure the attribute is updated. Providing 'true' for an unlocked account will add and process 'Unlock' operation by the workflow.","type":"boolean","example":false}}}}}},"responses":{"202":{"description":"Async task details","content":{"application/json":{"schema":{"description":"Accounts async response containing details on started async process","required":["id"],"type":"object","properties":{"id":{"description":"id of the task","type":"string","example":"2c91808474683da6017468693c260195"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/accounts/{id}/disable","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"externalVerificationId":"3f9180835d2e5168015d32f890ca1581","forceProvisioning":false},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Disable Account","description":{"content":"This API submits a task to disable the account and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts",":id","disable"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The account id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Disable Account + + + +This API submits a task to disable the account and returns the task ID. +A token with ORG_ADMIN authority is required to call this API. + +
      Path Parameters
      Request Body required
      + +Async task details + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/download-source-accounts-schema.api.mdx b/docs/sailpoint-api-v3/download-source-accounts-schema.api.mdx new file mode 100644 index 000000000..a05ea6b7c --- /dev/null +++ b/docs/sailpoint-api-v3/download-source-accounts-schema.api.mdx @@ -0,0 +1,88 @@ +--- +id: download-source-accounts-schema +sidebar_label: Downloads source accounts schema template +hide_title: true +hide_table_of_contents: true +api: {"tags":["Sources"],"description":"This API downloads the CSV schema that defines the account attributes on a source.\n>**NOTE: This API is designated only for Delimited File sources.**","operationId":"downloadSourceAccountsSchema","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The Source id","example":"8c190e6787aa4ed9a90bd9d5344523fb"}],"responses":{"200":{"description":"Successfully downloaded the file","content":{"text/csv":{"example":"id,name,givenName,familyName,e-mail,location,manager,groups,startDate,endDate"}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:source-schema:read"]}],"method":"get","path":"/sources/{id}/schemas/accounts","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Downloads source accounts schema template","description":{"content":"This API downloads the CSV schema that defines the account attributes on a source.\n>**NOTE: This API is designated only for Delimited File sources.**","type":"text/plain"},"url":{"path":["sources",":id","schemas","accounts"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"text/csv"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Downloads source accounts schema template + + + +This API downloads the CSV schema that defines the account attributes on a source. +>**NOTE: This API is designated only for Delimited File sources.** + +
      Path Parameters
      + +Successfully downloaded the file + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/download-source-entitlements-schema.api.mdx b/docs/sailpoint-api-v3/download-source-entitlements-schema.api.mdx new file mode 100644 index 000000000..1d1d41d82 --- /dev/null +++ b/docs/sailpoint-api-v3/download-source-entitlements-schema.api.mdx @@ -0,0 +1,89 @@ +--- +id: download-source-entitlements-schema +sidebar_label: Downloads source entitlements schema template +hide_title: true +hide_table_of_contents: true +api: {"tags":["Sources"],"description":"This API downloads the CSV schema that defines the entitlement attributes on a source.\n\n>**NOTE: This API is designated only for Delimited File sources.**","operationId":"downloadSourceEntitlementsSchema","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The Source id","example":"8c190e6787aa4ed9a90bd9d5344523fb"},{"in":"query","name":"schemaName","schema":{"type":"string"},"description":"Name of entitlement schema","example":"?schemaName=group"}],"responses":{"200":{"description":"Successfully downloaded the file","content":{"text/csv":{"example":"id,name,displayName,created,description,modified,entitlements,groups,permissions"}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:source-schema:read"]}],"method":"get","path":"/sources/{id}/schemas/entitlements","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Downloads source entitlements schema template","description":{"content":"This API downloads the CSV schema that defines the entitlement attributes on a source.\n\n>**NOTE: This API is designated only for Delimited File sources.**","type":"text/plain"},"url":{"path":["sources",":id","schemas","entitlements"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Name of entitlement schema","type":"text/plain"},"key":"schemaName","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"text/csv"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Downloads source entitlements schema template + + + +This API downloads the CSV schema that defines the entitlement attributes on a source. + +>**NOTE: This API is designated only for Delimited File sources.** + +
      Path Parameters
      Query Parameters
      + +Successfully downloaded the file + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/enable-account.api.mdx b/docs/sailpoint-api-v3/enable-account.api.mdx new file mode 100644 index 000000000..320281aa9 --- /dev/null +++ b/docs/sailpoint-api-v3/enable-account.api.mdx @@ -0,0 +1,88 @@ +--- +id: enable-account +sidebar_label: Enable Account +hide_title: true +hide_table_of_contents: true +api: {"operationId":"enableAccount","tags":["Accounts"],"description":"This API submits a task to enable account and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:account:enable"]}],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The account id","example":"ef38f94347e94562b5bb8424a56397d8"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"description":"Request used for account enable/disable","type":"object","properties":{"externalVerificationId":{"description":"If set, an external process validates that the user wants to proceed with this request.","type":"string","example":"3f9180835d2e5168015d32f890ca1581"},"forceProvisioning":{"description":"If set, provisioning updates the account attribute at the source. This option is used when the account is not synced to ensure the attribute is updated. Providing 'true' for an unlocked account will add and process 'Unlock' operation by the workflow.","type":"boolean","example":false}}}}}},"responses":{"202":{"description":"Async task details","content":{"application/json":{"schema":{"description":"Accounts async response containing details on started async process","required":["id"],"type":"object","properties":{"id":{"description":"id of the task","type":"string","example":"2c91808474683da6017468693c260195"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/accounts/{id}/enable","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"externalVerificationId":"3f9180835d2e5168015d32f890ca1581","forceProvisioning":false},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Enable Account","description":{"content":"This API submits a task to enable account and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts",":id","enable"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The account id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Enable Account + + + +This API submits a task to enable account and returns the task ID. +A token with ORG_ADMIN authority is required to call this API. + +
      Path Parameters
      Request Body required
      + +Async task details + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/export-identity-profiles.api.mdx b/docs/sailpoint-api-v3/export-identity-profiles.api.mdx new file mode 100644 index 000000000..4f55f0b61 --- /dev/null +++ b/docs/sailpoint-api-v3/export-identity-profiles.api.mdx @@ -0,0 +1,91 @@ +--- +id: export-identity-profiles +sidebar_label: Export Identity Profiles +hide_title: true +hide_table_of_contents: true +api: {"operationId":"exportIdentityProfiles","tags":["Identity Profiles"],"description":"This exports existing identity profiles in the format specified by the sp-config service.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, ne*\n\n**name**: *eq, ne*\n\n**priority**: *eq, ne*"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **id**, **name**, **priority**"}],"responses":{"200":{"description":"List of export objects with identity profiles.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","description":"Identity Profile exported object","properties":{"version":{"type":"integer","example":1,"description":"Version or object from the target service."},"self":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"object":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object","properties":{"description":{"type":"string","description":"The description of the Identity Profile.","example":"My custom flat file profile"},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The owner of the Identity Profile."},"priority":{"type":"integer","format":"int64","description":"The priority for an Identity Profile.","example":10},"authoritativeSource":{"type":"object","properties":{"type":{"type":"string","enum":["SOURCE"],"description":"Type of the object to which this reference applies","example":"SOURCE"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c9180835d191a86015d28455b4b232a"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"HR Active Directory"}}},"identityRefreshRequired":{"type":"boolean","description":"True if a identity refresh is needed. Typically triggered when a change on the source has been made.","example":true},"identityCount":{"type":"integer","description":"The number of identities that belong to the Identity Profile.","format":"int32","example":8},"identityAttributeConfig":{"type":"object","description":"Defines all the identity attribute mapping configurations. This defines how to generate or collect data for each identity attributes in identity refresh process.","properties":{"enabled":{"description":"The backend will only promote values if the profile/mapping is enabled.","type":"boolean","example":true},"attributeTransforms":{"type":"array","items":{"type":"object","description":"Defines a transformation definition for an identity attribute.","properties":{"identityAttributeName":{"type":"string","description":"Name of the identity attribute.","example":"email"},"transformDefinition":{"description":"The seaspray transformation definition.","type":"object","properties":{"type":{"type":"string","description":"The type of the transform definition.","example":"accountAttribute"},"attributes":{"type":"object","additionalProperties":{"type":"object"},"description":"Arbitrary key-value pairs to store any metadata for the object","example":{"attributeName":"e-mail","sourceName":"MySource","sourceId":"2c9180877a826e68017a8c0b03da1a53"}}}}}}}}},"identityExceptionReportReference":{"type":"object","properties":{"taskResultId":{"type":"string","format":"uuid","description":"The id of the task result.","example":"2c918086795cd09201795d5f7d7533df"},"reportName":{"type":"string","example":"My annual report","description":"The name of the report."}}},"hasTimeBasedAttr":{"description":"Indicates the value of requiresPeriodicRefresh attribute for the Identity Profile.","type":"boolean","example":true}}}]}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:identity-profile:read"]}],"method":"get","path":"/identity-profiles/export","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Export Identity Profiles","description":{"content":"This exports existing identity profiles in the format specified by the sp-config service.","type":"text/plain"},"url":{"path":["identity-profiles","export"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, ne*\n\n**name**: *eq, ne*\n\n**priority**: *eq, ne*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **id**, **name**, **priority**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Export Identity Profiles + + + +This exports existing identity profiles in the format specified by the sp-config service. + +
      Query Parameters
      + +List of export objects with identity profiles. + +
      Schema array
        self object
        object object
        owner object
        + +The owner of the Identity Profile. + +
        authoritativeSource object
        identityAttributeConfig object
        + +Defines all the identity attribute mapping configurations. This defines how to generate or collect data for each identity attributes in identity refresh process. + +
        attributeTransforms object[]
        transformDefinition object
        + +The seaspray transformation definition. + +
        attributes object
        + +Arbitrary key-value pairs to store any metadata for the object + +
      • property name* object
      • identityExceptionReportReference object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/forward-request.api.mdx b/docs/sailpoint-api-v3/forward-request.api.mdx new file mode 100644 index 000000000..0c7bc6381 --- /dev/null +++ b/docs/sailpoint-api-v3/forward-request.api.mdx @@ -0,0 +1,91 @@ +--- +id: forward-request +sidebar_label: Forwards an access request approval. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"forwardRequest","tags":["Access Request Approvals"],"description":"This endpoint forwards an access request approval to a new owner. Only the owner of the approval and ORG_ADMIN users are allowed to perform this action.","parameters":[{"in":"path","name":"approvalId","schema":{"type":"string"},"required":true,"description":"The id of the approval.","example":"2c91808b7294bea301729568c68c002e"}],"requestBody":{"description":"Information about the forwarded approval.","required":true,"content":{"application/json":{"schema":{"type":"object","required":["newOwnerId","comment"],"properties":{"newOwnerId":{"type":"string","description":"The Id of the new owner","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat","minLength":1,"maxLength":255},"comment":{"type":"string","description":"The comment provided by the forwarder","example":"2c91808568c529c60168cca6f90c1313","minLength":1,"maxLength":255}}}}}},"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/access-request-approvals/{approvalId}/forward","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"newOwnerId":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat","comment":"2c91808568c529c60168cca6f90c1313"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Forwards an access request approval.","description":{"content":"This endpoint forwards an access request approval to a new owner. Only the owner of the approval and ORG_ADMIN users are allowed to perform this action.","type":"text/plain"},"url":{"path":["access-request-approvals",":approvalId","forward"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The id of the approval.","type":"text/plain"},"type":"any","value":"","key":"approvalId"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Forwards an access request approval. + + + +This endpoint forwards an access request approval to a new owner. Only the owner of the approval and ORG_ADMIN users are allowed to perform this action. + +
      Path Parameters
      Request Body required
      + +Information about the forwarded approval. + +
      + +Accepted - Returned if the request was successfully accepted into the system. + +
      Schema
      • object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-access-request-config.api.mdx b/docs/sailpoint-api-v3/get-access-request-config.api.mdx new file mode 100644 index 000000000..164d586da --- /dev/null +++ b/docs/sailpoint-api-v3/get-access-request-config.api.mdx @@ -0,0 +1,87 @@ +--- +id: get-access-request-config +sidebar_label: Get Access Request Configuration +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getAccessRequestConfig","tags":["Access Requests"],"description":"This endpoint returns the current access-request configuration.","responses":{"200":{"description":"Access Request Configuration Details.","content":{"application/json":{"schema":{"type":"object","properties":{"approvalsMustBeExternal":{"type":"boolean","description":"If true, then approvals must be processed by external system.","example":true},"autoApprovalEnabled":{"type":"boolean","description":"If true and requester and reviewer are the same, then automatically approve the approval.","example":true},"requestOnBehalfOfConfig":{"description":"Request On Behalf Of Configuration.","type":"object","properties":{"allowRequestOnBehalfOfAnyoneByAnyone":{"type":"boolean","description":"If anyone can request access for anyone.","example":true},"allowRequestOnBehalfOfEmployeeByManager":{"type":"boolean","description":"If a manager can request access for his/her direct reports.","example":true}}},"approvalReminderAndEscalationConfig":{"description":"Approval Reminder and Escalation Configuration.","type":"object","properties":{"daysUntilEscalation":{"type":"integer","description":"Number of days to wait before the first reminder. If no reminders are configured, then this is the number of days to wait before escalation.","format":"int32","example":0},"daysBetweenReminders":{"type":"integer","description":"Number of days to wait between reminder notifications.","format":"int32","example":0},"maxReminders":{"type":"integer","description":"Maximum number of reminder notification to send to the reviewer before approval escalation.","format":"int32","example":0},"fallbackApproverRef":{"type":"object","nullable":true,"properties":{"type":{"type":"string","description":"The type can only be IDENTITY. This is read-only","example":"IDENTITY"},"id":{"type":"string","description":"Identity id.","example":"5168015d32f890ca15812c9180835d2e"},"name":{"type":"string","description":"Human-readable display name of identity. This is read-only","example":"Alison Ferguso"},"email":{"type":"string","description":"Email address of identity. This is read-only","example":"alison.ferguso@identitysoon.com"}}}}},"entitlementRequestConfig":{"description":"Entitlement Request Configuration.","type":"object","properties":{"allowEntitlementRequest":{"type":"boolean","description":"Flag for allowing entitlement request.","example":true},"requestCommentsRequired":{"type":"boolean","description":"Flag for requiring comments while submitting an entitlement request.","default":false,"example":false},"deniedCommentsRequired":{"type":"boolean","description":"Flag for requiring comments while rejecting an entitlement request.","default":false,"example":false},"grantRequestApprovalSchemes":{"type":"string","description":"Approval schemes for granting entitlement request. This can be empty if no approval is needed.\nMultiple schemes must be comma-separated. The valid schemes are \"sourceOwner\", \"manager\" and \"workgroup:{id}\".\nMultiple workgroups (governance groups) can be used.\n","default":"sourceOwner","example":"sourceOwner, manager, workgroup:2c918084660f45d6016617daa9210584"}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/access-request-config","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get Access Request Configuration","description":{"content":"This endpoint returns the current access-request configuration.","type":"text/plain"},"url":{"path":["access-request-config"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Access Request Configuration + + + +This endpoint returns the current access-request configuration. + +
      + +Access Request Configuration Details. + +
      Schema
        requestOnBehalfOfConfig object
        + +Request On Behalf Of Configuration. + +
        approvalReminderAndEscalationConfig object
        + +Approval Reminder and Escalation Configuration. + +
        fallbackApproverRef object
        entitlementRequestConfig object
        + +Entitlement Request Configuration. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-account-activity.api.mdx b/docs/sailpoint-api-v3/get-account-activity.api.mdx new file mode 100644 index 000000000..792ddbf93 --- /dev/null +++ b/docs/sailpoint-api-v3/get-account-activity.api.mdx @@ -0,0 +1,99 @@ +--- +id: get-account-activity +sidebar_label: Get an Account Activity +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getAccountActivity","tags":["Account Activities"],"description":"This gets a single account activity by its id.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The account activity id","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"An account activity object","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Id of the account activity itself","example":"2c9180835d2e5168015d32f890ca1581"},"name":{"type":"string","example":"2c9180835d2e5168015d32f890ca1581"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"completed":{"type":"string","format":"date-time","nullable":true,"example":"2018-10-19T13:49:37.385Z"},"completionStatus":{"nullable":true,"type":"string","enum":["SUCCESS","FAILURE","INCOMPLETE","PENDING"]},"type":{"type":"string","example":"appRequest"},"requesterIdentitySummary":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"ID of this identity summary","example":"ff80818155fe8c080155fe8d925b0316"},"name":{"type":"string","description":"Human-readable display name of identity","example":"SailPoint Services"},"identityId":{"type":"string","description":"ID of the identity that this summary represents","example":"c15b9f5cca5a4e9599eaa0e64fa921bd"},"completed":{"type":"boolean","description":"Indicates if all access items for this summary have been decided on"}}},"targetIdentitySummary":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"ID of this identity summary","example":"ff80818155fe8c080155fe8d925b0316"},"name":{"type":"string","description":"Human-readable display name of identity","example":"SailPoint Services"},"identityId":{"type":"string","description":"ID of the identity that this summary represents","example":"c15b9f5cca5a4e9599eaa0e64fa921bd"},"completed":{"type":"boolean","description":"Indicates if all access items for this summary have been decided on"}}},"errors":{"nullable":true,"type":"array","items":{"type":"string"},"example":["sailpoint.connector.ConnectorException: java.lang.InterruptedException: Timeout waiting for response to message 0 from client 57a4ab97-ab3f-4aef-9fe2-0eaf15c73d26 after 60 seconds."]},"warnings":{"nullable":true,"type":"array","items":{"type":"string"},"example":["Some warning, another warning"]},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Item id","example":"2725138ee34949beb0d6cc982d2d4625"},"name":{"type":"string","description":"Human-readable display name of item"},"requested":{"type":"string","format":"date-time","description":"Date and time item was requested","example":"2017-07-11T18:45:37.098Z"},"approvalStatus":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"provisioningStatus":{"type":"string","enum":["PENDING","FINISHED","UNVERIFIABLE","COMMITED","FAILED","RETRY"],"description":"Provisioning state of an account activity item"},"requesterComment":{"type":"object","nullable":true,"properties":{"commenterId":{"type":"string","description":"Id of the identity making the comment","example":"2c918084660f45d6016617daa9210584"},"commenterName":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"},"body":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat."},"date":{"type":"string","format":"date-time","description":"Date and time comment was made","example":"2017-07-11T18:45:37.098Z"}}},"reviewerIdentitySummary":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"ID of this identity summary","example":"ff80818155fe8c080155fe8d925b0316"},"name":{"type":"string","description":"Human-readable display name of identity","example":"SailPoint Services"},"identityId":{"type":"string","description":"ID of the identity that this summary represents","example":"c15b9f5cca5a4e9599eaa0e64fa921bd"},"completed":{"type":"boolean","description":"Indicates if all access items for this summary have been decided on"}}},"reviewerComment":{"type":"object","nullable":true,"properties":{"commenterId":{"type":"string","description":"Id of the identity making the comment","example":"2c918084660f45d6016617daa9210584"},"commenterName":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"},"body":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat."},"date":{"type":"string","format":"date-time","description":"Date and time comment was made","example":"2017-07-11T18:45:37.098Z"}}},"operation":{"type":"string","enum":["ADD","CREATE","MODIFY","DELETE","DISABLE","ENABLE","UNLOCK","LOCK","REMOVE"],"description":"Represents an operation in an account activity item"},"attribute":{"type":"string","description":"Attribute to which account activity applies","nullable":true,"example":"detectedRoles"},"value":{"type":"string","description":"Value of attribute","nullable":true,"example":"Treasury Analyst [AccessProfile-1529010191212]"},"nativeIdentity":{"nullable":true,"type":"string","description":"Native identity in the target system to which the account activity applies","example":"Sandie.Camero"},"sourceId":{"type":"string","description":"Id of Source to which account activity applies","example":"2c91808363ef85290164000587130c0c"},"accountRequestInfo":{"type":"object","nullable":true,"properties":{"requestedObjectId":{"type":"string","description":"Id of requested object","example":"2c91808563ef85690164001c31140c0c"},"requestedObjectName":{"type":"string","description":"Human-readable name of requested object","example":"Treasury Analyst"},"requestedObjectType":{"type":"string","enum":["ACCESS_PROFILE","ROLE"],"description":"Enum represented the currently supported requestable object types. Additional values may be added in the future without notice.","example":"ACCESS_PROFILE"}},"description":"If an account activity item is associated with an access request, captures details of that request."},"clientMetadata":{"nullable":true,"type":"object","additionalProperties":{"type":"string"},"description":"Arbitrary key-value pairs, if any were included in the corresponding access request item"},"removeDate":{"nullable":true,"type":"string","description":"The date the role or access profile is no longer assigned to the specified identity.","format":"date-time","example":"2020-07-11T00:00:00Z"}}}},"executionStatus":{"type":"string","enum":["EXECUTING","VERIFYING","TERMINATED","COMPLETED"]},"clientMetadata":{"nullable":true,"type":"object","additionalProperties":{"type":"string"},"description":"Arbitrary key-value pairs, if any were included in the corresponding access request"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/account-activities/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get an Account Activity","description":{"content":"This gets a single account activity by its id.","type":"text/plain"},"url":{"path":["account-activities",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The account activity id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get an Account Activity + + + +This gets a single account activity by its id. + +
      Path Parameters
      + +An account activity object + +
      Schema
        requesterIdentitySummary object
        targetIdentitySummary object
        items object[]
        requesterComment object
        reviewerIdentitySummary object
        reviewerComment object
        accountRequestInfo object
        + +If an account activity item is associated with an access request, captures details of that request. + +
        clientMetadata object
        + +Arbitrary key-value pairs, if any were included in the corresponding access request item + +
      • property name* string
      • clientMetadata object
        + +Arbitrary key-value pairs, if any were included in the corresponding access request + +
      • property name* string
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-account-entitlements.api.mdx b/docs/sailpoint-api-v3/get-account-entitlements.api.mdx new file mode 100644 index 000000000..ab8b622c4 --- /dev/null +++ b/docs/sailpoint-api-v3/get-account-entitlements.api.mdx @@ -0,0 +1,88 @@ +--- +id: get-account-entitlements +sidebar_label: Account Entitlements +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getAccountEntitlements","tags":["Accounts"],"description":"This API returns entitlements of the account. \nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:account-entitlement:read"]}],"parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The account id","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"An array of account entitlements","content":{"application/json":{"schema":{"type":"array","items":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true},"modified":{"description":"Last modification date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true}}},{"type":"object","description":"Entitlement object that represents entitlement","properties":{"attribute":{"description":"Name of the entitlement attribute","type":"string","example":"authorizationType"},"value":{"description":"Raw value of the entitlement","type":"string","example":"CN=Users,dc=sailpoint,dc=com"},"description":{"description":"Entitlment description","type":"string"},"attributes":{"description":"Entitlement attributes","type":"object"},"sourceSchemaObjectType":{"description":"Schema objectType on the given application that maps to an Account Group","type":"string","example":"group"},"privileged":{"description":"Determines if this Entitlement is privileged.","type":"boolean"},"cloudGoverned":{"description":"Determines if this Entitlement is goverened in the cloud.","type":"boolean"},"source":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the source this entitlment belongs to.","example":[{"type":"SOURCE","id":"2c9180835d191a86015d28455b4b232a","name":"HR Active Directory"}]}}}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/accounts/{id}/entitlements","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Account Entitlements","description":{"content":"This API returns entitlements of the account. \nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts",":id","entitlements"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The account id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Account Entitlements + + + +This API returns entitlements of the account. +A token with ORG_ADMIN authority is required to call this API. + +
      Path Parameters
      Query Parameters
      + +An array of account entitlements + +
      Schema array
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-account.api.mdx b/docs/sailpoint-api-v3/get-account.api.mdx new file mode 100644 index 000000000..68af5f830 --- /dev/null +++ b/docs/sailpoint-api-v3/get-account.api.mdx @@ -0,0 +1,88 @@ +--- +id: get-account +sidebar_label: Account Details +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getAccount","tags":["Accounts"],"description":"This API returns the details for a single account based on the ID. \nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:account:read"]}],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The account ID","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"An account object","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true},"modified":{"description":"Last modification date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true}}},{"type":"object","properties":{"sourceId":{"type":"string","example":"2c9180835d2e5168015d32f890ca1581"},"identityId":{"type":"string","example":"2c9180835d2e5168015d32f890ca1581"},"attributes":{"type":"object"},"authoritative":{"type":"boolean"},"description":{"type":"string"},"disabled":{"type":"boolean"},"locked":{"type":"boolean"},"nativeIdentity":{"type":"string"},"systemAccount":{"type":"boolean"},"uncorrelated":{"type":"boolean"},"uuid":{"type":"string"},"manuallyCorrelated":{"type":"boolean"},"hasEntitlements":{"type":"boolean"}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/accounts/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Account Details","description":{"content":"This API returns the details for a single account based on the ID. \nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The account ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Account Details + + + +This API returns the details for a single account based on the ID. +A token with ORG_ADMIN authority is required to call this API. + +
      Path Parameters
      + +An account object + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-default-identity-attribute-config.api.mdx b/docs/sailpoint-api-v3/get-default-identity-attribute-config.api.mdx new file mode 100644 index 000000000..e36853e2c --- /dev/null +++ b/docs/sailpoint-api-v3/get-default-identity-attribute-config.api.mdx @@ -0,0 +1,84 @@ +--- +id: get-default-identity-attribute-config +sidebar_label: Get default Identity Attribute Config +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getDefaultIdentityAttributeConfig","tags":["Identity Profiles"],"description":"This returns the default identity attribute config.\nA token with ORG_ADMIN authority is required to call this API to get the default identity attribute config.","parameters":[{"in":"path","name":"identity-profile-id","schema":{"type":"string","format":"uuid"},"required":true,"description":"The Identity Profile ID.","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"An Identity Attribute Config object.","content":{"application/json":{"schema":{"type":"object","description":"Defines all the identity attribute mapping configurations. This defines how to generate or collect data for each identity attributes in identity refresh process.","properties":{"enabled":{"description":"The backend will only promote values if the profile/mapping is enabled.","type":"boolean","example":true},"attributeTransforms":{"type":"array","items":{"type":"object","description":"Defines a transformation definition for an identity attribute.","properties":{"identityAttributeName":{"type":"string","description":"Name of the identity attribute.","example":"email"},"transformDefinition":{"description":"The seaspray transformation definition.","type":"object","properties":{"type":{"type":"string","description":"The type of the transform definition.","example":"accountAttribute"},"attributes":{"type":"object","additionalProperties":{"type":"object"},"description":"Arbitrary key-value pairs to store any metadata for the object","example":{"attributeName":"e-mail","sourceName":"MySource","sourceId":"2c9180877a826e68017a8c0b03da1a53"}}}}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:identity-profile-default-mapping:read"]}],"method":"get","path":"/identity-profiles/{identity-profile-id}/default-identity-attribute-config","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get default Identity Attribute Config","description":{"content":"This returns the default identity attribute config.\nA token with ORG_ADMIN authority is required to call this API to get the default identity attribute config.","type":"text/plain"},"url":{"path":["identity-profiles",":identity-profile-id","default-identity-attribute-config"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Identity Profile ID.","type":"text/plain"},"type":"any","value":"","key":"identity-profile-id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get default Identity Attribute Config + + + +This returns the default identity attribute config. +A token with ORG_ADMIN authority is required to call this API to get the default identity attribute config. + +
      Path Parameters
      + +An Identity Attribute Config object. + +
      Schema
        attributeTransforms object[]
        transformDefinition object
        + +The seaspray transformation definition. + +
        attributes object
        + +Arbitrary key-value pairs to store any metadata for the object + +
      • property name* object
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-identity-access-summaries.api.mdx b/docs/sailpoint-api-v3/get-identity-access-summaries.api.mdx new file mode 100644 index 000000000..b0f05d781 --- /dev/null +++ b/docs/sailpoint-api-v3/get-identity-access-summaries.api.mdx @@ -0,0 +1,119 @@ +--- +id: get-identity-access-summaries +sidebar_label: Access Summaries +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getIdentityAccessSummaries","tags":["Certification Summaries"],"description":"This API returns a list of access summaries for the specified identity campaign certification and type. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The identity campaign certification ID","example":"ef38f94347e94562b5bb8424a56397d8"},{"in":"path","name":"type","schema":{"type":"string","enum":["ROLE","ACCESS_PROFILE","ENTITLEMENT"]},"required":true,"description":"The type of access review item to retrieve summaries for","example":"ACCESS_PROFILE"},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki-API-Standard-Collection-Parameters/ta-p/156407)\n\nFiltering is supported for the following fields and operators:\n\n**completed**: *eq, ne*\n\n**access.id**: *eq, in*\n\n**access.name**: *eq, sw*\n\n**entitlement.sourceName**: *eq, sw*\n\n**accessProfile.sourceName**: *eq, sw*"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **access.name**"}],"responses":{"200":{"description":"List of access summaries","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","description":"An object holding the access that is being reviewed","properties":{"access":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"The ID of the item being certified","example":"2c9180867160846801719932c5153fb7"},"name":{"type":"string","description":"The name of the item being certified","example":"Entitlement for Company Database"}}},"entitlement":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"The id for the entitlement","example":"2c918085718230600171993742c63558"},"name":{"type":"string","description":"The name of the entitlement","example":"CN=entitlement.bbb7c650"},"description":{"nullable":true,"type":"string","description":"Information about the entitlement","example":"Gives read/write access to the company database"},"privileged":{"type":"boolean","example":false,"description":"Indicates if the entitlement is a privileged entitlement"},"owner":{"type":"object","nullable":true,"properties":{"type":{"type":"string","description":"The type can only be IDENTITY. This is read-only","example":"IDENTITY"},"id":{"type":"string","description":"Identity id.","example":"5168015d32f890ca15812c9180835d2e"},"name":{"type":"string","description":"Human-readable display name of identity. This is read-only","example":"Alison Ferguso"},"email":{"type":"string","description":"Email address of identity. This is read-only","example":"alison.ferguso@identitysoon.com"}}},"attributeName":{"type":"string","description":"The name of the attribute on the source","example":"memberOf"},"attributeValue":{"type":"string","description":"The value of the attribute on the source","example":"CN=entitlement.bbb7c650"},"sourceSchemaObjectType":{"type":"string","description":"The schema object type on the source used to represent the entitlement and its attributes","example":"groups"},"sourceName":{"type":"string","description":"The name of the source for which this entitlement belongs","example":"ODS-AD-Source"},"sourceType":{"type":"string","description":"The type of the source for which the entitlement belongs","example":"Active Directory - Direct"},"hasPermissions":{"type":"boolean","description":"Indicates if the entitlement has permissions","example":false},"isPermission":{"type":"boolean","description":"Indicates if the entitlement is a representation of an account permission","example":false},"revocable":{"type":"boolean","description":"Indicates whether the entitlement can be revoked","example":true},"cloudGoverned":{"type":"boolean","description":"True if the entitlement is cloud governed"},"account":{"type":"object","nullable":true,"description":"Information about the status of the entitlement","properties":{"nativeIdentity":{"type":"string","description":"The native identity for this account","example":"CN=Alison Ferguso"},"disabled":{"type":"boolean","example":false,"description":"Indicates whether this account is currently disabled"},"locked":{"type":"boolean","example":false,"description":"Indicates whether this account is currently locked"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"nullable":true,"type":"string","description":"The id associated with the account","example":"2c9180857182305e0171993737eb29e6"},"name":{"nullable":true,"type":"string"},"created":{"nullable":true,"type":"string","format":"date-time","description":"When the account was created","example":"2020-04-20T20:11:05.067Z"},"modified":{"nullable":true,"type":"string","format":"date-time","description":"When the account was last modified","example":"2020-05-20T18:57:16.987Z"}}}}},"accessProfile":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Access Profile","example":"2c91808a7190d06e01719938fcd20792"},"name":{"type":"string","description":"Name of the Access Profile","example":"Employee-database-read-write"},"description":{"type":"string","description":"Information about the Access Profile","example":"Collection of entitlements to read/write the employee database"},"privileged":{"type":"boolean","description":"Indicates if the entitlement is a privileged entitlement"},"cloudGoverned":{"type":"boolean","description":"True if the entitlement is cloud governed"},"endDate":{"nullable":true,"type":"string","format":"date-time","description":"The date at which a user's access expires","example":"2021-12-25T00:00:00.000Z"},"owner":{"type":"object","nullable":true,"properties":{"type":{"type":"string","description":"The type can only be IDENTITY. This is read-only","example":"IDENTITY"},"id":{"type":"string","description":"Identity id.","example":"5168015d32f890ca15812c9180835d2e"},"name":{"type":"string","description":"Human-readable display name of identity. This is read-only","example":"Alison Ferguso"},"email":{"type":"string","description":"Email address of identity. This is read-only","example":"alison.ferguso@identitysoon.com"}},"description":"Owner of the Access Profile"},"entitlements":{"type":"array","description":"A list of entitlements associated with this Access Profile","items":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"The id for the entitlement","example":"2c918085718230600171993742c63558"},"name":{"type":"string","description":"The name of the entitlement","example":"CN=entitlement.bbb7c650"},"description":{"nullable":true,"type":"string","description":"Information about the entitlement","example":"Gives read/write access to the company database"},"privileged":{"type":"boolean","example":false,"description":"Indicates if the entitlement is a privileged entitlement"},"owner":{"type":"object","nullable":true,"properties":{"type":{"type":"string","description":"The type can only be IDENTITY. This is read-only","example":"IDENTITY"},"id":{"type":"string","description":"Identity id.","example":"5168015d32f890ca15812c9180835d2e"},"name":{"type":"string","description":"Human-readable display name of identity. This is read-only","example":"Alison Ferguso"},"email":{"type":"string","description":"Email address of identity. This is read-only","example":"alison.ferguso@identitysoon.com"}}},"attributeName":{"type":"string","description":"The name of the attribute on the source","example":"memberOf"},"attributeValue":{"type":"string","description":"The value of the attribute on the source","example":"CN=entitlement.bbb7c650"},"sourceSchemaObjectType":{"type":"string","description":"The schema object type on the source used to represent the entitlement and its attributes","example":"groups"},"sourceName":{"type":"string","description":"The name of the source for which this entitlement belongs","example":"ODS-AD-Source"},"sourceType":{"type":"string","description":"The type of the source for which the entitlement belongs","example":"Active Directory - Direct"},"hasPermissions":{"type":"boolean","description":"Indicates if the entitlement has permissions","example":false},"isPermission":{"type":"boolean","description":"Indicates if the entitlement is a representation of an account permission","example":false},"revocable":{"type":"boolean","description":"Indicates whether the entitlement can be revoked","example":true},"cloudGoverned":{"type":"boolean","description":"True if the entitlement is cloud governed"},"account":{"type":"object","nullable":true,"description":"Information about the status of the entitlement","properties":{"nativeIdentity":{"type":"string","description":"The native identity for this account","example":"CN=Alison Ferguso"},"disabled":{"type":"boolean","example":false,"description":"Indicates whether this account is currently disabled"},"locked":{"type":"boolean","example":false,"description":"Indicates whether this account is currently locked"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"nullable":true,"type":"string","description":"The id associated with the account","example":"2c9180857182305e0171993737eb29e6"},"name":{"nullable":true,"type":"string"},"created":{"nullable":true,"type":"string","format":"date-time","description":"When the account was created","example":"2020-04-20T20:11:05.067Z"},"modified":{"nullable":true,"type":"string","format":"date-time","description":"When the account was last modified","example":"2020-05-20T18:57:16.987Z"}}}}}},"created":{"type":"string","description":"Date the Access Profile was created.","format":"date-time","example":"2021-01-01T22:32:58.104Z"},"modified":{"type":"string","description":"Date the Access Profile was last modified.","format":"date-time","example":"2021-02-01T22:32:58.104Z"}}},"role":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"The id for the Role","example":"2c91808a7190d06e0171993907fd0794"},"name":{"type":"string","description":"The name of the Role","example":"Accounting-Employees"},"description":{"type":"string","description":"Information about the Role","example":"Role for members of the accounting department with the necessary Access Profiles"},"privileged":{"type":"boolean","description":"Indicates if the entitlement is a privileged entitlement"},"owner":{"type":"object","nullable":true,"properties":{"type":{"type":"string","description":"The type can only be IDENTITY. This is read-only","example":"IDENTITY"},"id":{"type":"string","description":"Identity id.","example":"5168015d32f890ca15812c9180835d2e"},"name":{"type":"string","description":"Human-readable display name of identity. This is read-only","example":"Alison Ferguso"},"email":{"type":"string","description":"Email address of identity. This is read-only","example":"alison.ferguso@identitysoon.com"}}},"revocable":{"type":"boolean","description":"Indicates whether the Role can be revoked or requested"},"endDate":{"type":"string","format":"date-time","description":"The date when a user's access expires.","example":"2021-12-25T00:00:00.000Z"},"accessProfiles":{"type":"array","description":"The list of Access Profiles associated with this Role","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Access Profile","example":"2c91808a7190d06e01719938fcd20792"},"name":{"type":"string","description":"Name of the Access Profile","example":"Employee-database-read-write"},"description":{"type":"string","description":"Information about the Access Profile","example":"Collection of entitlements to read/write the employee database"},"privileged":{"type":"boolean","description":"Indicates if the entitlement is a privileged entitlement"},"cloudGoverned":{"type":"boolean","description":"True if the entitlement is cloud governed"},"endDate":{"nullable":true,"type":"string","format":"date-time","description":"The date at which a user's access expires","example":"2021-12-25T00:00:00.000Z"},"owner":{"type":"object","nullable":true,"properties":{"type":{"type":"string","description":"The type can only be IDENTITY. This is read-only","example":"IDENTITY"},"id":{"type":"string","description":"Identity id.","example":"5168015d32f890ca15812c9180835d2e"},"name":{"type":"string","description":"Human-readable display name of identity. This is read-only","example":"Alison Ferguso"},"email":{"type":"string","description":"Email address of identity. This is read-only","example":"alison.ferguso@identitysoon.com"}},"description":"Owner of the Access Profile"},"entitlements":{"type":"array","description":"A list of entitlements associated with this Access Profile","items":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"The id for the entitlement","example":"2c918085718230600171993742c63558"},"name":{"type":"string","description":"The name of the entitlement","example":"CN=entitlement.bbb7c650"},"description":{"nullable":true,"type":"string","description":"Information about the entitlement","example":"Gives read/write access to the company database"},"privileged":{"type":"boolean","example":false,"description":"Indicates if the entitlement is a privileged entitlement"},"owner":{"type":"object","nullable":true,"properties":{"type":{"type":"string","description":"The type can only be IDENTITY. This is read-only","example":"IDENTITY"},"id":{"type":"string","description":"Identity id.","example":"5168015d32f890ca15812c9180835d2e"},"name":{"type":"string","description":"Human-readable display name of identity. This is read-only","example":"Alison Ferguso"},"email":{"type":"string","description":"Email address of identity. This is read-only","example":"alison.ferguso@identitysoon.com"}}},"attributeName":{"type":"string","description":"The name of the attribute on the source","example":"memberOf"},"attributeValue":{"type":"string","description":"The value of the attribute on the source","example":"CN=entitlement.bbb7c650"},"sourceSchemaObjectType":{"type":"string","description":"The schema object type on the source used to represent the entitlement and its attributes","example":"groups"},"sourceName":{"type":"string","description":"The name of the source for which this entitlement belongs","example":"ODS-AD-Source"},"sourceType":{"type":"string","description":"The type of the source for which the entitlement belongs","example":"Active Directory - Direct"},"hasPermissions":{"type":"boolean","description":"Indicates if the entitlement has permissions","example":false},"isPermission":{"type":"boolean","description":"Indicates if the entitlement is a representation of an account permission","example":false},"revocable":{"type":"boolean","description":"Indicates whether the entitlement can be revoked","example":true},"cloudGoverned":{"type":"boolean","description":"True if the entitlement is cloud governed"},"account":{"type":"object","nullable":true,"description":"Information about the status of the entitlement","properties":{"nativeIdentity":{"type":"string","description":"The native identity for this account","example":"CN=Alison Ferguso"},"disabled":{"type":"boolean","example":false,"description":"Indicates whether this account is currently disabled"},"locked":{"type":"boolean","example":false,"description":"Indicates whether this account is currently locked"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"nullable":true,"type":"string","description":"The id associated with the account","example":"2c9180857182305e0171993737eb29e6"},"name":{"nullable":true,"type":"string"},"created":{"nullable":true,"type":"string","format":"date-time","description":"When the account was created","example":"2020-04-20T20:11:05.067Z"},"modified":{"nullable":true,"type":"string","format":"date-time","description":"When the account was last modified","example":"2020-05-20T18:57:16.987Z"}}}}}},"created":{"type":"string","description":"Date the Access Profile was created.","format":"date-time","example":"2021-01-01T22:32:58.104Z"},"modified":{"type":"string","description":"Date the Access Profile was last modified.","format":"date-time","example":"2021-02-01T22:32:58.104Z"}}}}}}}}},"example":[{"access":{"type":"ENTITLEMENT","id":"2c9180857182305e01719937429e2bad","name":"CN=Engineering"},"entitlement":{"id":"2c9180857182305e01719937429e2bad","name":"CN=Engineering","description":"Access to the engineering database","privileged":false,"owner":{"email":"brandon.gray@acme-solar.com","type":"IDENTITY","id":"2c9180867160846801719932c5153fb7","name":"Brandon Gray"},"attributeName":"memberOf","attributeValue":"CN=Engineering","sourceName":"ODS-AD-Source","hasPermissions":true,"revocable":true}}]}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/certifications/{id}/access-summaries/{type}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Access Summaries","description":{"content":"This API returns a list of access summaries for the specified identity campaign certification and type. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API.","type":"text/plain"},"url":{"path":["certifications",":id","access-summaries",":type"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki-API-Standard-Collection-Parameters/ta-p/156407)\n\nFiltering is supported for the following fields and operators:\n\n**completed**: *eq, ne*\n\n**access.id**: *eq, in*\n\n**access.name**: *eq, sw*\n\n**entitlement.sourceName**: *eq, sw*\n\n**accessProfile.sourceName**: *eq, sw*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **access.name**","type":"text/plain"},"key":"sorters","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The identity campaign certification ID","type":"text/plain"},"type":"any","value":"","key":"id"},{"disabled":false,"description":{"content":"(Required) The type of access review item to retrieve summaries for","type":"text/plain"},"type":"any","value":"","key":"type"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Access Summaries + + + +This API returns a list of access summaries for the specified identity campaign certification and type. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. + +
      Path Parameters
      Query Parameters
      + +List of access summaries + +
      Schema array
        access object
        entitlement object
        owner object
        account object
        + +Information about the status of the entitlement + +
        accessProfile object
        owner object
        + +Owner of the Access Profile + +
        entitlements object[]
        + +A list of entitlements associated with this Access Profile + +
        owner object
        account object
        + +Information about the status of the entitlement + +
        role object
        owner object
        accessProfiles object[]
        + +The list of Access Profiles associated with this Role + +
        owner object
        + +Owner of the Access Profile + +
        entitlements object[]
        + +A list of entitlements associated with this Access Profile + +
        owner object
        account object
        + +Information about the status of the entitlement + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-identity-certification.api.mdx b/docs/sailpoint-api-v3/get-identity-certification.api.mdx new file mode 100644 index 000000000..4bb83dfe1 --- /dev/null +++ b/docs/sailpoint-api-v3/get-identity-certification.api.mdx @@ -0,0 +1,87 @@ +--- +id: get-identity-certification +sidebar_label: Identity Certification by ID +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getIdentityCertification","tags":["Certifications"],"description":"This API returns a single identity campaign certification by its ID. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. This API does not support requests for certifications assigned to Governance Groups.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The certification id","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"An identity campaign certification object","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"example":"2c9180835d2e5168015d32f890ca1581","type":"string"},"name":{"example":"Source Owner Access Review for Employees [source]","type":"string"},"campaign":{"type":"object","required":["id","name","type","campaignType","description"],"properties":{"id":{"type":"string","description":"The unique ID of the campaign.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the campaign.","example":"Campaign Name"},"type":{"type":"string","enum":["CAMPAIGN"],"description":"The type of object that is being referenced.","example":"CAMPAIGN"},"campaignType":{"type":"string","enum":["MANAGER","SOURCE_OWNER","SEARCH"],"description":"The type of the campaign.","example":"MANAGER"},"description":{"type":"string","description":"The description of the campaign set by the admin who created it.","nullable":true,"example":"A description of the campaign"}}},"completed":{"type":"boolean","description":"Have all decisions been made?","example":true},"identitiesCompleted":{"type":"integer","description":"The number of identities for whom all decisions have been made and are complete.","example":5},"identitiesTotal":{"type":"integer","description":"The total number of identities in the Certification, both complete and incomplete.","example":10},"created":{"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"},"modified":{"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"},"decisionsMade":{"type":"integer","description":"The number of approve/revoke/acknowledge decisions that have been made.","example":20},"decisionsTotal":{"type":"integer","description":"The total number of approve/revoke/acknowledge decisions.","example":40},"due":{"type":"string","format":"date-time","description":"The due date of the certification.","example":"2018-10-19T13:49:37.385Z"},"signed":{"type":"string","format":"date-time","nullable":true,"description":"The date the reviewer signed off on the Certification.","example":"2018-10-19T13:49:37.385Z"},"reviewer":{"type":"object","properties":{"id":{"type":"string","description":"The id of the reviewer.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the reviewer.","example":"Reviewer Name"},"email":{"type":"string","description":"The email of the reviewing identity.","example":"reviewer@test.com"},"type":{"type":"string","enum":["IDENTITY"]},"created":{"nullable":true,"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"},"modified":{"nullable":true,"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"}}},"reassignment":{"type":"object","nullable":true,"properties":{"from":{"type":"object","properties":{"id":{"type":"string","description":"The id of the certification.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the certification.","example":"Certification Name"},"type":{"type":"string","enum":["CERTIFICATION"]},"reviewer":{"type":"object","properties":{"id":{"type":"string","description":"The id of the reviewer.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the reviewer.","example":"Reviewer Name"},"email":{"type":"string","description":"The email of the reviewing identity.","example":"reviewer@test.com"},"type":{"type":"string","enum":["IDENTITY"]},"created":{"nullable":true,"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"},"modified":{"nullable":true,"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"}}}}},"comment":{"type":"string","description":"The comment entered when the Certification was reassigned","example":"Reassigned for a reason"}}},"hasErrors":{"type":"boolean","example":false},"errorMessage":{"nullable":true,"type":"string","example":"The certification has an error"},"phase":{"type":"string","description":"The current phase of the campaign.\n* `STAGED`: The campaign is waiting to be activated.\n* `ACTIVE`: The campaign is active.\n* `SIGNED`: The reviewer has signed off on the campaign, and it is considered complete.\n","enum":["STAGED","ACTIVE","SIGNED"],"example":"ACTIVE"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/certifications/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Identity Certification by ID","description":{"content":"This API returns a single identity campaign certification by its ID. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. This API does not support requests for certifications assigned to Governance Groups.","type":"text/plain"},"url":{"path":["certifications",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The certification id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Identity Certification by ID + + + +This API returns a single identity campaign certification by its ID. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. This API does not support requests for certifications assigned to Governance Groups. + +
      Path Parameters
      + +An identity campaign certification object + +
      Schema
        campaign object
        reviewer object
        reassignment object
        from object
        reviewer object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-identity-decision-summary.api.mdx b/docs/sailpoint-api-v3/get-identity-decision-summary.api.mdx new file mode 100644 index 000000000..373bfe2f4 --- /dev/null +++ b/docs/sailpoint-api-v3/get-identity-decision-summary.api.mdx @@ -0,0 +1,87 @@ +--- +id: get-identity-decision-summary +sidebar_label: Summary of Certification Decisions +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getIdentityDecisionSummary","tags":["Certification Summaries"],"description":"This API returns a summary of the decisions made on an identity campaign certification. The decisions are summarized by type. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The certification ID","example":"ef38f94347e94562b5bb8424a56397d8"},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki-API-Standard-Collection-Parameters/ta-p/156407)\n\nFiltering is supported for the following fields and operators:\n\n**identitySummary.id**: *eq, in*"}],"responses":{"200":{"description":"Summary of the decisions made","content":{"application/json":{"schema":{"type":"object","properties":{"entitlementDecisionsMade":{"type":"integer","description":"Number of entitlement decisions that have been made","example":3},"accessProfileDecisionsMade":{"type":"integer","description":"Number of access profile decisions that have been made","example":5},"roleDecisionsMade":{"type":"integer","description":"Number of role decisions that have been made","example":2},"accountDecisionsMade":{"type":"integer","description":"Number of account decisions that have been made","example":4},"entitlementDecisionsTotal":{"type":"integer","description":"The total number of entitlement decisions on the certification, both complete and incomplete","example":6},"accessProfileDecisionsTotal":{"type":"integer","description":"The total number of access profile decisions on the certification, both complete and incomplete","example":10},"roleDecisionsTotal":{"type":"integer","description":"The total number of role decisions on the certification, both complete and incomplete","example":4},"accountDecisionsTotal":{"type":"integer","description":"The total number of account decisions on the certification, both complete and incomplete","example":8},"entitlementsApproved":{"type":"integer","description":"The number of entitlement decisions that have been made which were approved","example":2},"entitlementsRevoked":{"type":"integer","description":"The number of entitlement decisions that have been made which were revoked","example":1},"accessProfilesApproved":{"type":"integer","description":"The number of access profile decisions that have been made which were approved","example":3},"accessProfilesRevoked":{"type":"integer","description":"The number of access profile decisions that have been made which were revoked","example":2},"rolesApproved":{"type":"integer","description":"The number of role decisions that have been made which were approved","example":2},"rolesRevoked":{"type":"integer","description":"The number of role decisions that have been made which were revoked","example":0},"accountsApproved":{"type":"integer","description":"The number of account decisions that have been made which were approved","example":1},"accountsRevoked":{"type":"integer","description":"The number of account decisions that have been made which were revoked","example":3}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/certifications/{id}/decision-summary","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Summary of Certification Decisions","description":{"content":"This API returns a summary of the decisions made on an identity campaign certification. The decisions are summarized by type. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API.","type":"text/plain"},"url":{"path":["certifications",":id","decision-summary"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki-API-Standard-Collection-Parameters/ta-p/156407)\n\nFiltering is supported for the following fields and operators:\n\n**identitySummary.id**: *eq, in*","type":"text/plain"},"key":"filters","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The certification ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Summary of Certification Decisions + + + +This API returns a summary of the decisions made on an identity campaign certification. The decisions are summarized by type. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. + +
      Path Parameters
      Query Parameters
      + +Summary of the decisions made + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-identity-profile.api.mdx b/docs/sailpoint-api-v3/get-identity-profile.api.mdx new file mode 100644 index 000000000..8a5bb2e68 --- /dev/null +++ b/docs/sailpoint-api-v3/get-identity-profile.api.mdx @@ -0,0 +1,92 @@ +--- +id: get-identity-profile +sidebar_label: Get single Identity Profile +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getIdentityProfile","tags":["Identity Profiles"],"description":"This returns a single Identity Profile based on ID.\nA token with ORG_ADMIN or API authority is required to call this API.","parameters":[{"in":"path","name":"identity-profile-id","schema":{"type":"string","format":"uuid"},"required":true,"description":"The Identity Profile ID.","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"An Identity Profile object.","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object","properties":{"description":{"type":"string","description":"The description of the Identity Profile.","example":"My custom flat file profile"},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The owner of the Identity Profile."},"priority":{"type":"integer","format":"int64","description":"The priority for an Identity Profile.","example":10},"authoritativeSource":{"type":"object","properties":{"type":{"type":"string","enum":["SOURCE"],"description":"Type of the object to which this reference applies","example":"SOURCE"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c9180835d191a86015d28455b4b232a"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"HR Active Directory"}}},"identityRefreshRequired":{"type":"boolean","description":"True if a identity refresh is needed. Typically triggered when a change on the source has been made.","example":true},"identityCount":{"type":"integer","description":"The number of identities that belong to the Identity Profile.","format":"int32","example":8},"identityAttributeConfig":{"type":"object","description":"Defines all the identity attribute mapping configurations. This defines how to generate or collect data for each identity attributes in identity refresh process.","properties":{"enabled":{"description":"The backend will only promote values if the profile/mapping is enabled.","type":"boolean","example":true},"attributeTransforms":{"type":"array","items":{"type":"object","description":"Defines a transformation definition for an identity attribute.","properties":{"identityAttributeName":{"type":"string","description":"Name of the identity attribute.","example":"email"},"transformDefinition":{"description":"The seaspray transformation definition.","type":"object","properties":{"type":{"type":"string","description":"The type of the transform definition.","example":"accountAttribute"},"attributes":{"type":"object","additionalProperties":{"type":"object"},"description":"Arbitrary key-value pairs to store any metadata for the object","example":{"attributeName":"e-mail","sourceName":"MySource","sourceId":"2c9180877a826e68017a8c0b03da1a53"}}}}}}}}},"identityExceptionReportReference":{"type":"object","properties":{"taskResultId":{"type":"string","format":"uuid","description":"The id of the task result.","example":"2c918086795cd09201795d5f7d7533df"},"reportName":{"type":"string","example":"My annual report","description":"The name of the report."}}},"hasTimeBasedAttr":{"description":"Indicates the value of requiresPeriodicRefresh attribute for the Identity Profile.","type":"boolean","example":true}}}]}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:identity-profile:read"]}],"method":"get","path":"/identity-profiles/{identity-profile-id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get single Identity Profile","description":{"content":"This returns a single Identity Profile based on ID.\nA token with ORG_ADMIN or API authority is required to call this API.","type":"text/plain"},"url":{"path":["identity-profiles",":identity-profile-id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Identity Profile ID.","type":"text/plain"},"type":"any","value":"","key":"identity-profile-id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get single Identity Profile + + + +This returns a single Identity Profile based on ID. +A token with ORG_ADMIN or API authority is required to call this API. + +
      Path Parameters
      + +An Identity Profile object. + +
      Schema
        owner object
        + +The owner of the Identity Profile. + +
        authoritativeSource object
        identityAttributeConfig object
        + +Defines all the identity attribute mapping configurations. This defines how to generate or collect data for each identity attributes in identity refresh process. + +
        attributeTransforms object[]
        transformDefinition object
        + +The seaspray transformation definition. + +
        attributes object
        + +Arbitrary key-value pairs to store any metadata for the object + +
      • property name* object
      • identityExceptionReportReference object
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-identity-summaries.api.mdx b/docs/sailpoint-api-v3/get-identity-summaries.api.mdx new file mode 100644 index 000000000..cd08b4cb0 --- /dev/null +++ b/docs/sailpoint-api-v3/get-identity-summaries.api.mdx @@ -0,0 +1,87 @@ +--- +id: get-identity-summaries +sidebar_label: Identity Summaries for Identity Campaign Certification +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getIdentitySummaries","tags":["Certification Summaries"],"description":"This API returns a list of the identity summaries for a specific identity campaign certification. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The identity campaign certification ID","example":"ef38f94347e94562b5bb8424a56397d8"},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**completed**: *eq, ne*\n\n**name**: *eq, sw*"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **name**"}],"responses":{"200":{"description":"List of identity summaries","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the identity summary","example":"2c91808772a504f50172a9540e501ba7"},"name":{"type":"string","description":"Name of the linked identity","example":"Alison Ferguso"},"identityId":{"type":"string","description":"The ID of the identity being certified","example":"2c9180857182306001719937377a33de"},"completed":{"type":"boolean","description":"Indicates whether the review items for the linked identity's certification have been completed"}}}},"example":[{"id":"2c91808772a504f50172a9540e501ba7","name":"Aaron Grey","identityId":"2c9180857182306001719937379633e4","completed":false},{"id":"2c91808772a504f50172a9540e501ba8","name":"Aglae Wilson","identityId":"2c9180857182306001719937377a33de","completed":true}]}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/certifications/{id}/identity-summaries","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Identity Summaries for Identity Campaign Certification","description":{"content":"This API returns a list of the identity summaries for a specific identity campaign certification. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API.","type":"text/plain"},"url":{"path":["certifications",":id","identity-summaries"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**completed**: *eq, ne*\n\n**name**: *eq, sw*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **name**","type":"text/plain"},"key":"sorters","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The identity campaign certification ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Identity Summaries for Identity Campaign Certification + + + +This API returns a list of the identity summaries for a specific identity campaign certification. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. + +
      Path Parameters
      Query Parameters
      + +List of identity summaries + +
      Schema array
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-identity-summary.api.mdx b/docs/sailpoint-api-v3/get-identity-summary.api.mdx new file mode 100644 index 000000000..b43d9e5e8 --- /dev/null +++ b/docs/sailpoint-api-v3/get-identity-summary.api.mdx @@ -0,0 +1,75 @@ +--- +id: get-identity-summary +sidebar_label: Summary for Identity +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getIdentitySummary","tags":["Certification Summaries"],"description":"This API returns the summary for an identity on a specified identity campaign certification. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The identity campaign certification ID","example":"ef38f94347e94562b5bb8424a56397d8"},{"in":"path","name":"identitySummaryId","schema":{"type":"string"},"required":true,"description":"The identity summary ID","example":"2c91808772a504f50172a9540e501ba8"}],"responses":{"200":{"description":"An identity summary","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the identity summary","example":"2c91808772a504f50172a9540e501ba7"},"name":{"type":"string","description":"Name of the linked identity","example":"Alison Ferguso"},"identityId":{"type":"string","description":"The ID of the identity being certified","example":"2c9180857182306001719937377a33de"},"completed":{"type":"boolean","description":"Indicates whether the review items for the linked identity's certification have been completed"}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/certifications/{id}/identity-summary/{identitySummaryId}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Summary for Identity","description":{"content":"This API returns the summary for an identity on a specified identity campaign certification. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API.","type":"text/plain"},"url":{"path":["certifications",":id","identity-summary",":identitySummaryId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The identity campaign certification ID","type":"text/plain"},"type":"any","value":"","key":"id"},{"disabled":false,"description":{"content":"(Required) The identity summary ID","type":"text/plain"},"type":"any","value":"","key":"identitySummaryId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Summary for Identity + + + +This API returns the summary for an identity on a specified identity campaign certification. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. + +
      Path Parameters
      + +An identity summary + +
      Schema
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-lifecycle-state.api.mdx b/docs/sailpoint-api-v3/get-lifecycle-state.api.mdx new file mode 100644 index 000000000..8e42eb57a --- /dev/null +++ b/docs/sailpoint-api-v3/get-lifecycle-state.api.mdx @@ -0,0 +1,92 @@ +--- +id: get-lifecycle-state +sidebar_label: Retrieves Lifecycle State +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getLifecycleState","tags":["Lifecycle States"],"description":"This endpoint retrieves a Lifecycle State.\nA token with ORG_ADMIN or API authority is required to call this API.","security":[{"bearerAuth":["idn:identity-profile-lifecycle-state:read"]}],"parameters":[{"in":"path","name":"identity-profile-id","description":"Identity Profile ID","required":true,"schema":{"type":"string"}},{"in":"path","name":"lifecycle-state-id","description":"Lifecycle State ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The requested LifecycleState was successfully retrieved.","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true},"modified":{"description":"Last modification date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true}}},{"type":"object","required":["technicalName"],"properties":{"enabled":{"type":"boolean","example":true,"description":"Whether the lifecycle state is enabled or disabled."},"technicalName":{"type":"string","example":"Technical Name","description":"The technical name for lifecycle state. This is for internal use."},"description":{"type":"string","example":"Lifecycle description","description":"Lifecycle state description."},"identityCount":{"type":"integer","format":"int32","example":42,"readOnly":true,"description":"Number of identities that have the lifecycle state."},"emailNotificationOption":{"type":"object","description":"This is used for representing email configuration for a lifecycle state","properties":{"notifyManagers":{"type":"boolean","example":true,"description":"If true, then the manager is notified of the lifecycle state change."},"notifyAllAdmins":{"type":"boolean","example":true,"description":"If true, then all the admins are notified of the lifecycle state change."},"notifySpecificUsers":{"type":"boolean","example":true,"description":"If true, then the users specified in \"emailAddressList\" below are notified of lifecycle state change."},"emailAddressList":{"type":"array","example":["test@test.com","test2@test.com"],"items":{"type":"string"},"description":"List of user email addresses. If \"notifySpecificUsers\" option is true, then these users are notified of lifecycle state change."}}},"accountActions":{"type":"array","items":{"type":"object","description":"Object for specifying Actions to be performed on a specified list of sources' account.","properties":{"action":{"example":"ENABLE","type":"string","description":"Describes if action will be enabled or disabled","enum":["ENABLE","DISABLE"]},"sourceIds":{"type":"array","items":{"type":"string"},"uniqueItems":true,"example":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"],"description":"List of unique source IDs. The sources must have the ENABLE feature or flat file source. See \"/sources\" endpoint for source features."}}}},"accessProfileIds":{"type":"array","items":{"type":"string"},"uniqueItems":true,"example":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"],"description":"List of unique access-profile IDs that are associated with the lifecycle state."}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/identity-profiles/{identity-profile-id}/lifecycle-states/{lifecycle-state-id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Retrieves Lifecycle State","description":{"content":"This endpoint retrieves a Lifecycle State.\nA token with ORG_ADMIN or API authority is required to call this API.","type":"text/plain"},"url":{"path":["identity-profiles",":identity-profile-id","lifecycle-states",":lifecycle-state-id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Identity Profile ID","type":"text/plain"},"type":"any","value":"","key":"identity-profile-id"},{"disabled":false,"description":{"content":"(Required) Lifecycle State ID","type":"text/plain"},"type":"any","value":"","key":"lifecycle-state-id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Retrieves Lifecycle State + + + +This endpoint retrieves a Lifecycle State. +A token with ORG_ADMIN or API authority is required to call this API. + +
      Path Parameters
      + +The requested LifecycleState was successfully retrieved. + +
      Schema
        emailNotificationOption object
        + +This is used for representing email configuration for a lifecycle state + +
        accountActions object[]
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-oauth-client.api.mdx b/docs/sailpoint-api-v3/get-oauth-client.api.mdx new file mode 100644 index 000000000..521940ccf --- /dev/null +++ b/docs/sailpoint-api-v3/get-oauth-client.api.mdx @@ -0,0 +1,89 @@ +--- +id: get-oauth-client +sidebar_label: Get OAuth Client +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getOauthClient","tags":["OAuth Clients"],"description":"This gets details of an OAuth client.\nRequest will require the following security scope:\n- 'idn:oathkeeper-client:read'","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The OAuth client id","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"Request succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the OAuth client","example":"2c9180835d2e5168015d32f890ca1581"},"businessName":{"type":"string","description":"The name of the business the API Client should belong to","example":"Acme-Solar"},"homepageUrl":{"type":"string","description":"The homepage URL associated with the owner of the API Client","example":"http://localhost:12345"},"name":{"type":"string","description":"A human-readable name for the API Client","example":"Demo API Client"},"description":{"type":"string","description":"A description of the API Client","example":"An API client used for the authorization_code, refresh_token, and client_credentials flows"},"accessTokenValiditySeconds":{"type":"string","description":"The number of seconds an access token generated for this API Client is valid for","example":750},"refreshTokenValiditySeconds":{"type":"string","description":"The number of seconds a refresh token generated for this API Client is valid for","example":86400},"redirectUris":{"type":"array","items":{"type":"string"},"description":"A list of the approved redirect URIs used with the authorization_code flow","example":["http://localhost:12345"]},"grantTypes":{"type":"array","items":{"description":"OAuth2 Grant Type","type":"string","example":"CLIENT_CREDENTIALS","enum":["CLIENT_CREDENTIALS","AUTHORIZATION_CODE","REFRESH_TOKEN"]},"description":"A list of OAuth 2.0 grant types this API Client can be used with","example":["AUTHORIZATION_CODE","CLIENT_CREDENTIALS","REFRESH_TOKEN"]},"accessType":{"description":"The access type (online or offline) of this API Client","example":"OFFLINE","type":"string","enum":["ONLINE","OFFLINE"]},"type":{"description":"The type of the API Client (public or confidential)","example":"CONFIDENTIAL","type":"string","enum":["CONFIDENTIAL","PUBLIC"]},"internal":{"type":"boolean","description":"An indicator of whether the API Client can be used for requests internal to IDN","example":false},"enabled":{"type":"boolean","description":"An indicator of whether the API Client is enabled for use","example":true},"strongAuthSupported":{"type":"boolean","description":"An indicator of whether the API Client supports strong authentication","example":false},"claimsSupported":{"type":"boolean","description":"An indicator of whether the API Client supports the serialization of SAML claims when used with the authorization_code flow","example":false},"created":{"type":"string","format":"date-time","description":"The date and time, down to the millisecond, when the API Client was created","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","description":"The date and time, down to the millisecond, when the API Client was last updated","example":"2018-06-25T20:22:28.104Z"}},"required":["id","businessName","homepageUrl","name","description","accessTokenValiditySeconds","refreshTokenValiditySeconds","redirectUris","grantTypes","accessType","type","internal","enabled","strongAuthSupported","claimsSupported","created","modified"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/oauth-clients/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get OAuth Client","description":{"content":"This gets details of an OAuth client.\nRequest will require the following security scope:\n- 'idn:oathkeeper-client:read'","type":"text/plain"},"url":{"path":["oauth-clients",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The OAuth client id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get OAuth Client + + + +This gets details of an OAuth client. +Request will require the following security scope: +- 'idn:oathkeeper-client:read' + +
      Path Parameters
      + +Request succeeded. + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-password-change-status.api.mdx b/docs/sailpoint-api-v3/get-password-change-status.api.mdx new file mode 100644 index 000000000..c8cda682e --- /dev/null +++ b/docs/sailpoint-api-v3/get-password-change-status.api.mdx @@ -0,0 +1,87 @@ +--- +id: get-password-change-status +sidebar_label: Get Password Change Request Status +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getPasswordChangeStatus","tags":["Password Management"],"description":"This API returns the status of a password change request. A token with identity owner or trusted API client application authority is required to call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"example":"089899f13a8f4da7824996191587bab9","description":"Password change request ID"}],"responses":{"200":{"description":"Status of the password change request","content":{"application/json":{"schema":{"type":"object","properties":{"requestId":{"type":"string","nullable":true,"description":"The password change request ID","example":"089899f13a8f4da7824996191587bab9"},"state":{"type":"string","enum":["IN_PROGRESS","FINISHED","FAILED"],"description":"Password change state","example":"IN_PROGRESS"},"errors":{"type":"array","items":{"type":"string"},"description":"The errors during the password change request","example":["The password change payload is invalid"]},"sourceIds":{"type":"array","items":{"type":"string"},"description":"List of source IDs in the password change request","example":["2c918083746f642c01746f990884012a"]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/password-change-status/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get Password Change Request Status","description":{"content":"This API returns the status of a password change request. A token with identity owner or trusted API client application authority is required to call this API.","type":"text/plain"},"url":{"path":["password-change-status",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Password change request ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Password Change Request Status + + + +This API returns the status of a password change request. A token with identity owner or trusted API client application authority is required to call this API. + +
      Path Parameters
      + +Status of the password change request + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-provisioning-policy.api.mdx b/docs/sailpoint-api-v3/get-provisioning-policy.api.mdx new file mode 100644 index 000000000..d090dab0d --- /dev/null +++ b/docs/sailpoint-api-v3/get-provisioning-policy.api.mdx @@ -0,0 +1,88 @@ +--- +id: get-provisioning-policy +sidebar_label: Get Provisioning Policy by UsageType +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getProvisioningPolicy","tags":["Sources"],"description":"This end-point retrieves the ProvisioningPolicy with the specified usage on the specified Source in IdentityNow.\nA token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:provisioning-policy:read"]}],"parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source ID.","example":"2c9180835d191a86015d28455b4a2329"},{"in":"path","name":"usageType","required":true,"schema":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"description":"The type of ProvisioningPolicy usage.","example":"REGISTER"}],"responses":{"200":{"description":"The requested ProvisioningPolicyDto was successfully retrieved.","content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"usageType":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"userName"},"transform":{"type":"object","description":"The transform to apply to the field","example":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"default":{}},"attributes":{"type":"object","description":"Attributes required for the transform","example":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"}},"isRequired":{"type":"boolean","readOnly":true,"description":"Flag indicating whether or not the attribute is required.","default":false,"example":false},"type":{"type":"string","description":"The type of the attribute.","example":"string"},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","default":false,"example":false}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sources/{sourceId}/provisioning-policies/{usageType}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get Provisioning Policy by UsageType","description":{"content":"This end-point retrieves the ProvisioningPolicy with the specified usage on the specified Source in IdentityNow.\nA token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":sourceId","provisioning-policies",":usageType"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source ID.","type":"text/plain"},"type":"any","value":"","key":"sourceId"},{"disabled":false,"description":{"content":"(Required) The type of ProvisioningPolicy usage.","type":"text/plain"},"type":"any","value":"","key":"usageType"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Provisioning Policy by UsageType + + + +This end-point retrieves the ProvisioningPolicy with the specified usage on the specified Source in IdentityNow. +A token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + +
      Path Parameters
      + +The requested ProvisioningPolicyDto was successfully retrieved. + +
      Schema
        fields object[]
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-public-identities.api.mdx b/docs/sailpoint-api-v3/get-public-identities.api.mdx new file mode 100644 index 000000000..8f31e037e --- /dev/null +++ b/docs/sailpoint-api-v3/get-public-identities.api.mdx @@ -0,0 +1,71 @@ +--- +id: get-public-identities +sidebar_label: Get a list of public identities +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getPublicIdentities","tags":["Public Identities"],"parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**alias**: *eq, sw*\n\n**email**: *eq, sw*\n\n**firstname**: *eq, sw*\n\n**lastname**: *eq, sw*"},{"in":"query","name":"add-core-filters","description":"If *true*, only get identities which satisfy ALL the following criteria in addition to any criteria specified by *filters*:\n - Should be either correlated or protected.\n - Should not be \"spadmin\" or \"cloudadmin\".\n - uid should not be null.\n - lastname should not be null.\n - email should not be null.","required":false,"schema":{"type":"boolean","default":false}},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **name**"}],"responses":{"200":{"description":"A list of public identity objects.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","title":"Public Identity","description":"Details about a public identity","properties":{"id":{"type":"string","description":"Identity id","example":"2c9180857182305e0171993735622948"},"name":{"type":"string","description":"Human-readable display name of identity.","example":"Alison Ferguso"},"alias":{"type":"string","description":"Alternate unique identifier for the identity.","example":"alison.ferguso"},"email":{"nullable":true,"type":"string","description":"Email address of identity.","example":"alison.ferguso@acme-solar.com"},"status":{"nullable":true,"type":"string","description":"The lifecycle status for the identity","example":"Active"},"manager":{"description":"An identity reference to the manager of this identity","type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of identity.","example":"Thomas Edison"}}},"attributes":{"type":"array","description":"The public identity attributes of the identity","items":{"type":"object","properties":{"key":{"type":"string","description":"The attribute key","example":"country"},"name":{"type":"string","description":"Human-readable display name of the attribute","example":"Country"},"value":{"type":"string","description":"The attribute value","example":"US"}}}}}}},"example":[{"id":"2c9180857182305e0171993735622948","name":"Alison Ferguso","alias":"alison.ferguso","email":"alison.ferguso@acme-solar.com","status":"Active","manager":{"type":"IDENTITY","id":"2c9180a46faadee4016fb4e018c20639","name":"Thomas Edison"},"attributes":[{"key":"phone","name":"Phone","value":"5125551234"},{"key":"country","name":"Country","value":"US"}]},{"id":"2c9180a46faadee4016fb4e018c20639","name":"Thomas Edison","alias":"thomas.edison","email":"thomas.edison@acme-solar.com","status":"Active","manager":{"type":"IDENTITY","id":"2c918086676d3e0601677611dbde220f","name":"Mister Manager"},"attributes":[{"key":"phone","name":"Phone","value":"5125554321"},{"key":"country","name":"Country","value":"US"}]}]}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"description":"Get a list of public identities","method":"get","path":"/public-identities","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get a list of public identities","description":{"type":"text/plain"},"url":{"path":["public-identities"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**alias**: *eq, sw*\n\n**email**: *eq, sw*\n\n**firstname**: *eq, sw*\n\n**lastname**: *eq, sw*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"If *true*, only get identities which satisfy ALL the following criteria in addition to any criteria specified by *filters*:\n - Should be either correlated or protected.\n - Should not be \"spadmin\" or \"cloudadmin\".\n - uid should not be null.\n - lastname should not be null.\n - email should not be null.","type":"text/plain"},"key":"add-core-filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **name**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a list of public identities + + + +Get a list of public identities + +
      Query Parameters
      + +A list of public identity objects. + +
      Schema array
        manager object
        + +An identity reference to the manager of this identity + +
        attributes object[]
        + +The public identity attributes of the identity + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-public-identity-config.api.mdx b/docs/sailpoint-api-v3/get-public-identity-config.api.mdx new file mode 100644 index 000000000..39deebcc9 --- /dev/null +++ b/docs/sailpoint-api-v3/get-public-identity-config.api.mdx @@ -0,0 +1,71 @@ +--- +id: get-public-identity-config +sidebar_label: Get the Public Identities Configuration +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getPublicIdentityConfig","tags":["Public Identities Config"],"description":"Returns the publicly visible attributes of an identity available to request approvers for Access Requests and Certification Campaigns. A token with ORG ADMIN authority is required to call this API.","responses":{"200":{"description":"Request succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Details of up to 5 Identity attributes that will be publicly accessible for all Identities to anyone in the org.","properties":{"attributes":{"type":"array","description":"Up to 5 identity attributes that will be available to everyone in the org for all users in the org.","items":{"type":"object","description":"Used to map an attribute key for an Identity to its display name.","properties":{"key":{"type":"string","description":"The attribute key","example":"country"},"name":{"type":"string","description":"The attribute display name","example":"Country"}}}},"modified":{"nullable":true,"type":"string","description":"When this configuration was last modified.","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"modifiedBy":{"description":"The identity who last modified this configuration.","type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of identity.","example":"Thomas Edison"}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/public-identities-config","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get the Public Identities Configuration","description":{"content":"Returns the publicly visible attributes of an identity available to request approvers for Access Requests and Certification Campaigns. A token with ORG ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["public-identities-config"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get the Public Identities Configuration + + + +Returns the publicly visible attributes of an identity available to request approvers for Access Requests and Certification Campaigns. A token with ORG ADMIN authority is required to call this API. + +
      + +Request succeeded. + +
      Schema
        attributes object[]
        + +Up to 5 identity attributes that will be available to everyone in the org for all users in the org. + +
        modifiedBy object
        + +The identity who last modified this configuration. + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-schema-attribute.api.mdx b/docs/sailpoint-api-v3/get-schema-attribute.api.mdx new file mode 100644 index 000000000..e5703f072 --- /dev/null +++ b/docs/sailpoint-api-v3/get-schema-attribute.api.mdx @@ -0,0 +1,63 @@ +--- +id: get-schema-attribute +sidebar_label: Get Schema Attribute Non-Employee Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getSchemaAttribute","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This API gets a schema attribute by Id for the specified Non-Employee SourceId.

      Requires role context of `idn:nesr:read` or the user must be an account manager of the source.","parameters":[{"in":"path","name":"attributeId","schema":{"type":"string"},"required":true,"description":"The Schema Attribute Id (UUID)"},{"in":"path","name":"sourceId","schema":{"type":"string"},"required":true,"description":"The Source id"}],"responses":{"200":{"description":"The Schema Attribute","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"UUID","example":"ac110005-7156-1150-8171-5b292e3e0084","description":"Schema Attribute Id"},"system":{"type":"boolean","description":"True if this schema attribute is mandatory on all non-employees sources.","example":true},"modified":{"type":"string","format":"date-time","description":"When the schema attribute was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the schema attribute was created.","example":"2019-08-23T18:40:35.772Z"},"type":{"type":"string","enum":["TEXT","DATE","IDENTITY"],"description":"Enum representing the type of data a schema attribute accepts."},"label":{"type":"string","description":"Label displayed on the UI for this schema attribute.","example":"Account Name"},"technicalName":{"type":"string","description":"The technical name of the attribute. Must be unique per source.","example":"account.name"},"helpText":{"type":"string","description":"help text displayed by UI.","example":"The unique identifier for the account"},"placeholder":{"type":"string","description":"Hint text that fills UI box.","example":"Enter a unique user name for this account."},"required":{"type":"boolean","description":"If true, the schema attribute is required for all non-employees in the source","example":true}},"required":["type","technicalName","label"]}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-sources/{sourceId}/schema-attributes/{attributeId}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get Schema Attribute Non-Employee Source","description":{"content":"This API gets a schema attribute by Id for the specified Non-Employee SourceId.

      Requires role context of `idn:nesr:read` or the user must be an account manager of the source.","type":"text/plain"},"url":{"path":["non-employee-sources",":sourceId","schema-attributes",":attributeId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Schema Attribute Id (UUID)","type":"text/plain"},"type":"any","value":"","key":"attributeId"},{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Schema Attribute Non-Employee Source + + + +This API gets a schema attribute by Id for the specified Non-Employee SourceId.<br><br> Requires role context of `idn:nesr:read` or the user must be an account manager of the source. + +
      Path Parameters
      + +The Schema Attribute + +
      Schema
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-schema-attributes.api.mdx b/docs/sailpoint-api-v3/get-schema-attributes.api.mdx new file mode 100644 index 000000000..fd2b9809f --- /dev/null +++ b/docs/sailpoint-api-v3/get-schema-attributes.api.mdx @@ -0,0 +1,76 @@ +--- +id: get-schema-attributes +sidebar_label: List Schema Attributes Non-Employee Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getSchemaAttributes","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This API gets the list of schema attributes for the specified Non-Employee SourceId. There are 8 mandatory attributes added to each new Non-Employee Source automatically. Additionaly, user can add up to 10 custom attributes. This interface returns all the mandatory attributes followed by any custom attributes. At most, a total of 18 attributes will be returned.

      \nRequires role context of `idn:nesr:read` or the user must be an account manager of the source.","parameters":[{"in":"path","name":"sourceId","schema":{"type":"string"},"required":true,"description":"The Source id"}],"responses":{"200":{"description":"A list of Schema Attributes","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"UUID","example":"ac110005-7156-1150-8171-5b292e3e0084","description":"Schema Attribute Id"},"system":{"type":"boolean","description":"True if this schema attribute is mandatory on all non-employees sources.","example":true},"modified":{"type":"string","format":"date-time","description":"When the schema attribute was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the schema attribute was created.","example":"2019-08-23T18:40:35.772Z"},"type":{"type":"string","enum":["TEXT","DATE","IDENTITY"],"description":"Enum representing the type of data a schema attribute accepts."},"label":{"type":"string","description":"Label displayed on the UI for this schema attribute.","example":"Account Name"},"technicalName":{"type":"string","description":"The technical name of the attribute. Must be unique per source.","example":"account.name"},"helpText":{"type":"string","description":"help text displayed by UI.","example":"The unique identifier for the account"},"placeholder":{"type":"string","description":"Hint text that fills UI box.","example":"Enter a unique user name for this account."},"required":{"type":"boolean","description":"If true, the schema attribute is required for all non-employees in the source","example":true}},"required":["type","technicalName","label"]},"maxItems":18}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-sources/{sourceId}/schema-attributes","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"List Schema Attributes Non-Employee Source","description":{"content":"This API gets the list of schema attributes for the specified Non-Employee SourceId. There are 8 mandatory attributes added to each new Non-Employee Source automatically. Additionaly, user can add up to 10 custom attributes. This interface returns all the mandatory attributes followed by any custom attributes. At most, a total of 18 attributes will be returned.

      \nRequires role context of `idn:nesr:read` or the user must be an account manager of the source.","type":"text/plain"},"url":{"path":["non-employee-sources",":sourceId","schema-attributes"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Schema Attributes Non-Employee Source + + + +This API gets the list of schema attributes for the specified Non-Employee SourceId. There are 8 mandatory attributes added to each new Non-Employee Source automatically. Additionaly, user can add up to 10 custom attributes. This interface returns all the mandatory attributes followed by any custom attributes. At most, a total of 18 attributes will be returned.<br><br> +Requires role context of `idn:nesr:read` or the user must be an account manager of the source. + +
      Path Parameters
      + +A list of Schema Attributes + +
      Schema array
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-schema.api.mdx b/docs/sailpoint-api-v3/get-schema.api.mdx new file mode 100644 index 000000000..c1bfa3d70 --- /dev/null +++ b/docs/sailpoint-api-v3/get-schema.api.mdx @@ -0,0 +1,96 @@ +--- +id: get-schema +sidebar_label: Get Source Schema by ID +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getSchema","tags":["Sources"],"description":"Get the Source Schema by ID in IdentityNow.\n","parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source id.","example":"2c9180835d191a86015d28455b4a2329"},{"in":"path","name":"schemaId","schema":{"type":"string"},"required":true,"description":"The Schema id.","example":"2c9180835d191a86015d28455b4a2329"}],"responses":{"200":{"description":"The requested Schema was successfully retrieved.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Schema.","example":"2c9180835d191a86015d28455b4a2329"},"name":{"type":"string","description":"The name of the Schema.","example":"account"},"nativeObjectType":{"type":"string","description":"The name of the object type on the native system that the schema represents.","example":"User"},"identityAttribute":{"type":"string","description":"The name of the attribute used to calculate the unique identifier for an object in the schema.","example":"sAMAccountName"},"displayAttribute":{"type":"string","description":"The name of the attribute used to calculate the display value for an object in the schema.","example":"distinguishedName"},"hierarchyAttribute":{"type":"string","description":"The name of the attribute whose values represent other objects in a hierarchy. Only relevant to group schemas.","example":"memberOf"},"includePermissions":{"type":"boolean","description":"Flag indicating whether or not the include permissions with the object data when aggregating the schema.","example":false},"features":{"type":"array","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"description":"The features that the schema supports.","example":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"]},"configuration":{"type":"object","description":"Holds any extra configuration data that the schema may require.","example":{"groupMemberAttribute":"member"}},"attributes":{"type":"array","description":"The attribute definitions which form the schema.","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"sAMAccountName"},"type":{"description":"The type of the attribute.","example":"string","type":"string","enum":["STRING","LONG","INT","BOOLEAN"]},"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"A reference to the schema on the source to which the values of the attribute map.","example":{"type":"CONNECTOR_SCHEMA","id":"2c9180866166b5b0016167c32ef31a66","name":"group"}},"description":{"type":"string","description":"A human-readable description of the attribute."},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","example":false},"isEntitlement":{"type":"boolean","description":"Flag indicating whether or not the attribute is an entitlement.","example":false},"isGroup":{"type":"boolean","description":"Flag indicating whether or not the attribute represents a group.","example":false,"readOnly":true}}},"example":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}]},"created":{"type":"string","description":"The date the Schema was created.","format":"date-time","example":"2019-12-24T22:32:58.104Z"},"modified":{"type":"string","description":"The date the Schema was last modified.","format":"date-time","example":"2019-12-31T20:22:28.104Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sources/{sourceId}/schemas/{schemaId}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get Source Schema by ID","description":{"content":"Get the Source Schema by ID in IdentityNow.\n","type":"text/plain"},"url":{"path":["sources",":sourceId","schemas",":schemaId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id.","type":"text/plain"},"type":"any","value":"","key":"sourceId"},{"disabled":false,"description":{"content":"(Required) The Schema id.","type":"text/plain"},"type":"any","value":"","key":"schemaId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Source Schema by ID + + + +Get the Source Schema by ID in IdentityNow. + + +
      Path Parameters
      + +The requested Schema was successfully retrieved. + +
      Schema
        attributes object[]
        + +The attribute definitions which form the schema. + +
        schema object
        + +A reference to the schema on the source to which the values of the attribute map. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-service-desk-integration-list.api.mdx b/docs/sailpoint-api-v3/get-service-desk-integration-list.api.mdx new file mode 100644 index 000000000..3c67d3d78 --- /dev/null +++ b/docs/sailpoint-api-v3/get-service-desk-integration-list.api.mdx @@ -0,0 +1,87 @@ +--- +id: get-service-desk-integration-list +sidebar_label: List existing Service Desk Integrations +hide_title: true +hide_table_of_contents: true +api: {"tags":["Service Desk Integration"],"description":"Get a list of ServiceDeskIntegrationDto for existing Service Desk Integrations. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","operationId":"getServiceDeskIntegrationList","parameters":[{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"name":"sorters","in":"query","required":false,"style":"form","explode":true,"schema":{"type":"string"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **name**"},{"name":"filters","in":"query","required":false,"style":"form","explode":true,"schema":{"type":"string","format":"comma-separated"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**name**: *eq*\n\n**type**: *eq, in*\n\n**cluster**: *eq, in*"},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"List of ServiceDeskIntegrationDto","content":{"application/json":{"schema":{"type":"array","items":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true},"modified":{"description":"Last modification date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true}}},{"type":"object","description":"Specification of a Service Desk integration","required":["description","type","attributes"],"properties":{"description":{"description":"Description of the Service Desk integration","type":"string","example":"A very nice Service Desk integration"},"type":{"description":"Type of the Service Desk integration","type":"string","default":"ServiceNowSDIM"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the identity that is the owner of this Service Desk integration","default":{"type":"IDENTITY"}},"clusterRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the source cluster for this Service Desk integration","default":{"type":"CLUSTER"}},"cluster":{"description":"ID of the cluster for the Service Desk integration (replaced by clusterRef, retained for backward compatibility)","type":"string","example":"xyzzy999","deprecated":true},"managedSources":{"description":"Source IDs for the Service Desk integration (replaced by provisioningConfig.managedSResourceRefs, but retained here for backward compatibility)","type":"array","items":{"type":"string"},"deprecated":true},"provisioningConfig":{"description":"The 'provisioningConfig' property specifies the configuration used to provision integrations.","type":"object","properties":{"universalManager":{"description":"Specifies whether this configuration is used to manage provisioning requests for all sources from the org. If true, no managedResourceRefs are allowed.","type":"boolean","readOnly":true},"managedResourceRefs":{"description":"References to sources for the Service Desk integration template. May only be specified if universalManager is false.","type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"default":{"type":"SOURCE"}}},"planInitializerScript":{"description":"This is a reference to a plan initializer script.","type":"object","properties":{"source":{"description":"This is a Rule that allows provisioning instruction changes.","type":"string"}}}}},"attributes":{"description":"Attributes of the Service Desk integration. Validation constraints enforced by the implementation.","type":"object","additionalProperties":true},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to beforeProvisioningRule for this Service Desk integration","default":{"type":"RULE"}}}}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:service-desk-admin:read","idn:service-desk-integration:read"]}],"method":"get","path":"/service-desk-integrations","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"List existing Service Desk Integrations","description":{"content":"Get a list of ServiceDeskIntegrationDto for existing Service Desk Integrations. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","type":"text/plain"},"url":{"path":["service-desk-integrations"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **name**","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**name**: *eq*\n\n**type**: *eq, in*\n\n**cluster**: *eq, in*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List existing Service Desk Integrations + + + +Get a list of ServiceDeskIntegrationDto for existing Service Desk Integrations. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + +
      Query Parameters
      + +List of ServiceDeskIntegrationDto + +
      Schema array
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-service-desk-integration-template.api.mdx b/docs/sailpoint-api-v3/get-service-desk-integration-template.api.mdx new file mode 100644 index 000000000..df14abddb --- /dev/null +++ b/docs/sailpoint-api-v3/get-service-desk-integration-template.api.mdx @@ -0,0 +1,103 @@ +--- +id: get-service-desk-integration-template +sidebar_label: Service Desk integration template by scriptName. +hide_title: true +hide_table_of_contents: true +api: {"tags":["Service Desk Integration"],"description":"This API endpoint returns an existing Service Desk integration template by scriptName. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","operationId":"getServiceDeskIntegrationTemplate","parameters":[{"name":"scriptName","in":"path","description":"The scriptName value of the Service Desk integration template to get","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"aScriptName"}}],"responses":{"200":{"description":"Responds with the ServiceDeskIntegrationTemplateDto with the specified scriptName.","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true},"modified":{"description":"Last modification date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true}}},{"type":"object","description":"This is the model for a Service Desk integration template, used to create and edit Service Desk Integrations.","required":["type","attributes","provisioningConfig"],"properties":{"type":{"description":"The 'type' property specifies the type of the Service Desk integration template.","type":"string","example":"Web Service SDIM","default":"Web Service SDIM"},"attributes":{"description":"The 'attributes' property value is a map of attributes available for integrations using this Service Desk integration template.","type":"object","additionalProperties":true},"provisioningConfig":{"description":"The 'provisioningConfig' property specifies the configuration used to provision integrations using the template.","type":"object","properties":{"universalManager":{"description":"Specifies whether this configuration is used to manage provisioning requests for all sources from the org. If true, no managedResourceRefs are allowed.","type":"boolean","readOnly":true},"managedResourceRefs":{"description":"References to sources for the Service Desk integration template. May only be specified if universalManager is false.","type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"default":{"type":"SOURCE"}}},"planInitializerScript":{"description":"This is a reference to a plan initializer script.","type":"object","properties":{"source":{"description":"This is a Rule that allows provisioning instruction changes.","type":"string"}}}}}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:service-desk-admin:read","idn:service-desk-integration:read"]}],"method":"get","path":"/service-desk-integrations/templates/{scriptName}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Service Desk integration template by scriptName.","description":{"content":"This API endpoint returns an existing Service Desk integration template by scriptName. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","type":"text/plain"},"url":{"path":["service-desk-integrations","templates",":scriptName"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The scriptName value of the Service Desk integration template to get","type":"text/plain"},"type":"any","value":"","key":"scriptName"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Service Desk integration template by scriptName. + + + +This API endpoint returns an existing Service Desk integration template by scriptName. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + +
      Path Parameters
      + +Responds with the ServiceDeskIntegrationTemplateDto with the specified scriptName. + +
      Schema
        attributes object
        + +The 'attributes' property value is a map of attributes available for integrations using this Service Desk integration template. + +
        provisioningConfig object
        + +The 'provisioningConfig' property specifies the configuration used to provision integrations using the template. + +
        managedResourceRefs object[]
        + +References to sources for the Service Desk integration template. May only be specified if universalManager is false. + +
        planInitializerScript object
        + +This is a reference to a plan initializer script. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-service-desk-integration-types.api.mdx b/docs/sailpoint-api-v3/get-service-desk-integration-types.api.mdx new file mode 100644 index 000000000..9189314c6 --- /dev/null +++ b/docs/sailpoint-api-v3/get-service-desk-integration-types.api.mdx @@ -0,0 +1,87 @@ +--- +id: get-service-desk-integration-types +sidebar_label: Service Desk Integration Types List. +hide_title: true +hide_table_of_contents: true +api: {"tags":["Service Desk Integration"],"description":"This API endpoint returns the current list of supported Service Desk integration types. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","operationId":"getServiceDeskIntegrationTypes","responses":{"200":{"description":"Responds with an array of the currently supported Service Desk integration types.","content":{"application/json":{"schema":{"type":"array","items":{"description":"This represents a Service Desk Integration template type.","required":["type","scriptName"],"type":"object","properties":{"name":{"description":"This is the name of the type.","example":"aName","type":"string"},"type":{"description":"This is the type value for the type.","example":"aType","type":"string"},"scriptName":{"description":"This is the scriptName attribute value for the type.","example":"aScriptName","type":"string"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:service-desk-admin:read","idn:service-desk-integration:read"]}],"method":"get","path":"/service-desk-integrations/types","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Service Desk Integration Types List.","description":{"content":"This API endpoint returns the current list of supported Service Desk integration types. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","type":"text/plain"},"url":{"path":["service-desk-integrations","types"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Service Desk Integration Types List. + + + +This API endpoint returns the current list of supported Service Desk integration types. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + +
      + +Responds with an array of the currently supported Service Desk integration types. + +
      Schema array
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-service-desk-integration.api.mdx b/docs/sailpoint-api-v3/get-service-desk-integration.api.mdx new file mode 100644 index 000000000..4b3983eb4 --- /dev/null +++ b/docs/sailpoint-api-v3/get-service-desk-integration.api.mdx @@ -0,0 +1,115 @@ +--- +id: get-service-desk-integration +sidebar_label: Get a Service Desk integration by ID +hide_title: true +hide_table_of_contents: true +api: {"tags":["Service Desk Integration"],"description":"Get an existing Service Desk integration by ID. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","operationId":"getServiceDeskIntegration","parameters":[{"name":"id","in":"path","description":"ID of the Service Desk integration to get","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"anId"}}],"responses":{"200":{"description":"ServiceDeskIntegrationDto with the given ID","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true},"modified":{"description":"Last modification date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true}}},{"type":"object","description":"Specification of a Service Desk integration","required":["description","type","attributes"],"properties":{"description":{"description":"Description of the Service Desk integration","type":"string","example":"A very nice Service Desk integration"},"type":{"description":"Type of the Service Desk integration","type":"string","default":"ServiceNowSDIM"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the identity that is the owner of this Service Desk integration","default":{"type":"IDENTITY"}},"clusterRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the source cluster for this Service Desk integration","default":{"type":"CLUSTER"}},"cluster":{"description":"ID of the cluster for the Service Desk integration (replaced by clusterRef, retained for backward compatibility)","type":"string","example":"xyzzy999","deprecated":true},"managedSources":{"description":"Source IDs for the Service Desk integration (replaced by provisioningConfig.managedSResourceRefs, but retained here for backward compatibility)","type":"array","items":{"type":"string"},"deprecated":true},"provisioningConfig":{"description":"The 'provisioningConfig' property specifies the configuration used to provision integrations.","type":"object","properties":{"universalManager":{"description":"Specifies whether this configuration is used to manage provisioning requests for all sources from the org. If true, no managedResourceRefs are allowed.","type":"boolean","readOnly":true},"managedResourceRefs":{"description":"References to sources for the Service Desk integration template. May only be specified if universalManager is false.","type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"default":{"type":"SOURCE"}}},"planInitializerScript":{"description":"This is a reference to a plan initializer script.","type":"object","properties":{"source":{"description":"This is a Rule that allows provisioning instruction changes.","type":"string"}}}}},"attributes":{"description":"Attributes of the Service Desk integration. Validation constraints enforced by the implementation.","type":"object","additionalProperties":true},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to beforeProvisioningRule for this Service Desk integration","default":{"type":"RULE"}}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:service-desk-admin:read","idn:service-desk-integration:read"]}],"method":"get","path":"/service-desk-integrations/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get a Service Desk integration by ID","description":{"content":"Get an existing Service Desk integration by ID. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","type":"text/plain"},"url":{"path":["service-desk-integrations",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the Service Desk integration to get","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a Service Desk integration by ID + + + +Get an existing Service Desk integration by ID. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + +
      Path Parameters
      + +ServiceDeskIntegrationDto with the given ID + +
      Schema
        ownerRef object
        + +Reference to the identity that is the owner of this Service Desk integration + +
        clusterRef object
        + +Reference to the source cluster for this Service Desk integration + +
        provisioningConfig object
        + +The 'provisioningConfig' property specifies the configuration used to provision integrations. + +
        managedResourceRefs object[]
        + +References to sources for the Service Desk integration template. May only be specified if universalManager is false. + +
        planInitializerScript object
        + +This is a reference to a plan initializer script. + +
        attributes object
        + +Attributes of the Service Desk integration. Validation constraints enforced by the implementation. + +
        beforeProvisioningRule object
        + +Reference to beforeProvisioningRule for this Service Desk integration + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-source-health.api.mdx b/docs/sailpoint-api-v3/get-source-health.api.mdx new file mode 100644 index 000000000..b89683d74 --- /dev/null +++ b/docs/sailpoint-api-v3/get-source-health.api.mdx @@ -0,0 +1,87 @@ +--- +id: get-source-health +sidebar_label: This API fetches source health by source's id +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getSourceHealth","tags":["Sources"],"description":"This endpoint fetches source health by source's id","parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source id.","example":"2c9180835d191a86015d28455b4a2329"}],"responses":{"200":{"description":"Fetched source health successfully","content":{"application/json":{"schema":{"type":"object","description":"Dto for source health data","properties":{"id":{"type":"string","readOnly":true,"description":"the id of the Source","example":"2c91808568c529c60168cca6f90c1324"},"type":{"type":"string","description":"Specifies the type of system being managed e.g. Active Directory, Workday, etc..","example":"OpenLDAP - Direct"},"name":{"type":"string","description":"the name of the source","example":"Source1234"},"org":{"type":"string","description":"source's org","example":"denali-cjh"},"isAuthoritative":{"type":"boolean"},"isCluster":{"type":"boolean"},"hostname":{"type":"string","example":"megapod-useast1-secret-hostname.sailpoint.com"},"pod":{"type":"string","description":"source's pod","example":"megapod-useast1"},"iqServiceVersion":{"type":"string","example":"iqVersion123"},"status":{"type":"string","enum":["SOURCE_STATE_ERROR_CLUSTER","SOURCE_STATE_ERROR_SOURCE","SOURCE_STATE_ERROR_VA","SOURCE_STATE_FAILURE_CLUSTER","SOURCE_STATE_FAILURE_SOURCE","SOURCE_STATE_HEALTHY","SOURCE_STATE_UNCHECKED_CLUSTER","SOURCE_STATE_UNCHECKED_CLUSTER_NO_SOURCES","SOURCE_STATE_UNCHECKED_SOURCE","SOURCE_STATE_UNCHECKED_SOURCE_NO_ACCOUNTS"],"description":"connection test result","example":"SOURCE_STATE_UNCHECKED_SOURCE"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sources/{sourceId}/source-health","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"This API fetches source health by source's id","description":{"content":"This endpoint fetches source health by source's id","type":"text/plain"},"url":{"path":["sources",":sourceId","source-health"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id.","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## This API fetches source health by source's id + + + +This endpoint fetches source health by source's id + +
      Path Parameters
      + +Fetched source health successfully + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-source.api.mdx b/docs/sailpoint-api-v3/get-source.api.mdx new file mode 100644 index 000000000..cfba7f7f8 --- /dev/null +++ b/docs/sailpoint-api-v3/get-source.api.mdx @@ -0,0 +1,128 @@ +--- +id: get-source +sidebar_label: Get Source by ID +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getSource","tags":["Sources"],"description":"This end-point gets a specific source in IdentityNow.\nA token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The Source id","example":"2c9180835d191a86015d28455b4a2329"}],"responses":{"200":{"description":"A Source object","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"the id of the Source","example":"2c91808568c529c60168cca6f90c1324"},"description":{"type":"string","description":"Human-readable description of the source","example":"This is the corporate directory."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to an owning Identity Object"},"cluster":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the associated Cluster","example":{"type":"CLUSTER","id":"2c9180866166b5b0016167c32ef31a66","name":"Corporate Cluster"}},"accountCorrelationConfig":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Correlation Config object","example":{"type":"ACCOUNT_CORRELATION_CONFIG","id":"2c9180855d191c59015d28583727245a","name":"Directory [source-62867] Account Correlation"}},"accountCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used."},"managerCorrelationMapping":{"description":"Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity","type":"object","properties":{"accountAttribute":{"type":"string","description":"Name of the attribute to use for manager correlation. The value found on the account attribute will be used to lookup the manager's identity.","example":"manager"},"identityAttribute":{"type":"string","description":"Name of the identity attribute to search when trying to find a manager using the value from the accountAttribute.","example":"manager"}}},"managerCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient."},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called."},"schemas":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to Schema objects","example":[{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232a","name":"account"},{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232b","name":"group"}]},"passwordPolicies":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to the associated PasswordPolicy objects.","example":[{"type":"PASSWORD_POLICY","id":"2c9180855d191c59015d291ceb053980","name":"Corporate Password Policy"}]},"features":{"type":"array","description":"Optional features that can be supported by a source.","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"example":["SYNC_PROVISIONING","MANAGER_LOOKUP","SEARCH","PROVISIONING","AUTHENTICATE","GROUP_PROVISIONING","PASSWORD"]},"type":{"type":"string","description":"Specifies the type of system being managed e.g. Active Directory, Workday, etc..","example":"OpenLDAP - Direct"},"connector":{"type":"string","description":"Connector script name.","example":"active-directory"},"connectorClass":{"type":"string","description":"The fully qualified name of the Java class that implements the connector interface.","example":"sailpoint.connector.LDAPConnector"},"connectorAttributes":{"type":"object","description":"Connector specific configuration; will differ from type to type.","example":{"healthCheckTimeout":30,"authSearchAttributes":["cn","uid","mail"]}},"deleteThreshold":{"type":"integer","format":"int32","description":"Number from 0 to 100 that specifies when to skip the delete phase.","example":10},"authoritative":{"type":"boolean","description":"When true indicates the source is referenced by an IdentityProfile.","example":false},"managementWorkgroup":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to Management Workgroup for this Source"},"healthy":{"type":"boolean","description":"When true indicates a healthy source","example":true},"status":{"type":"string","description":"A status identifier, giving specific information on why a source is healthy or not","example":"SOURCE_STATE_HEALTHY"},"since":{"type":"string","description":"Timestamp showing when a source health check was last performed","example":"2021-09-28T15:48:29.3801666300Z"},"connectorId":{"type":"string","description":"The id of connector","example":"active-directory"},"connectorName":{"type":"string","description":"The name of the connector that was chosen on source creation","example":"Active Directory"},"connectionType":{"type":"string","description":"The type of connection (direct or file)","example":"file"},"connectorImplementstionId":{"type":"string","description":"The connector implementstion id","example":"delimited-file"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sources/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get Source by ID","description":{"content":"This end-point gets a specific source in IdentityNow.\nA token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Source by ID + + + +This end-point gets a specific source in IdentityNow. +A token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + +
      Path Parameters
      + +A Source object + +
      Schema
        owner object
        + +Reference to an owning Identity Object + +
        cluster object
        + +Reference to the associated Cluster + +
        accountCorrelationConfig object
        + +Reference to a Correlation Config object + +
        accountCorrelationRule object
        + +Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used. + +
        managerCorrelationMapping object
        + +Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity + +
        managerCorrelationRule object
        + +Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient. + +
        beforeProvisioningRule object
        + +Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called. + +
        schemas object[]
        + +List of references to Schema objects + +
        passwordPolicies object[]
        + +List of references to the associated PasswordPolicy objects. + +
        managementWorkgroup object
        + +Reference to Management Workgroup for this Source + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-status-check-details.api.mdx b/docs/sailpoint-api-v3/get-status-check-details.api.mdx new file mode 100644 index 000000000..0cc67faaa --- /dev/null +++ b/docs/sailpoint-api-v3/get-status-check-details.api.mdx @@ -0,0 +1,87 @@ +--- +id: get-status-check-details +sidebar_label: Get the time check configuration of queued SDIM tickets +hide_title: true +hide_table_of_contents: true +api: {"tags":["Service Desk Integration"],"description":"Get the time check configuration of queued SDIM tickets. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","operationId":"getStatusCheckDetails","responses":{"200":{"description":"QueuedCheckConfigDetails containing the configured values","content":{"application/json":{"schema":{"description":"Configuration of maximum number days and interval for checking Service Desk integration queue status","required":["provisioningStatusCheckIntervalMinutes","provisioningMaxStatusCheckDays"],"type":"object","properties":{"provisioningStatusCheckIntervalMinutes":{"description":"interval in minutes between status checks","type":"string","example":30},"provisioningMaxStatusCheckDays":{"description":"maximum number of days to check","type":"string","example":2}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:service-desk-admin:read","idn:service-desk-integration:read"]}],"method":"get","path":"/service-desk-integrations/status-check-configuration","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get the time check configuration of queued SDIM tickets","description":{"content":"Get the time check configuration of queued SDIM tickets. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","type":"text/plain"},"url":{"path":["service-desk-integrations","status-check-configuration"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get the time check configuration of queued SDIM tickets + + + +Get the time check configuration of queued SDIM tickets. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + +
      + +QueuedCheckConfigDetails containing the configured values + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-transform.api.mdx b/docs/sailpoint-api-v3/get-transform.api.mdx new file mode 100644 index 000000000..af53efe5b --- /dev/null +++ b/docs/sailpoint-api-v3/get-transform.api.mdx @@ -0,0 +1,494 @@ +--- +id: get-transform +sidebar_label: Transform by ID +hide_title: true +hide_table_of_contents: true +api: {"tags":["Transforms"],"description":"This API returns the transform specified by the given ID.\nA token with transform read authority is required to call this API.","operationId":"getTransform","parameters":[{"name":"id","in":"path","description":"ID of the transform to retrieve","required":true,"style":"simple","explode":false,"example":"2cd78adghjkja34jh2b1hkjhasuecd","schema":{"type":"string"}}],"responses":{"200":{"description":"Transform with the given ID","content":{"application/json":{"schema":{"type":"object","description":"The representation of an internally- or customer-defined transform.","required":["name","type","attributes"],"properties":{"id":{"type":"string","readOnly":true,"description":"Unique ID of this transform","example":"2cd78adghjkja34jh2b1hkjhasuecd"},"name":{"type":"string","description":"Unique name of this transform","example":"Timestamp To Date"},"type":{"type":"string","description":"The type of transform operation","enum":["accountAttribute","base64Decode","base64Encode","concat","conditional","dateCompare","dateFormat","dateMath","decomposeDiacriticalMarks","e164phone","firstValid","rule","identityAttribute","indexOf","iso3166","lastIndexOf","leftPad","lookup","lower","normalizeNames","randomAlphaNumeric","randomNumeric","reference","replaceAll","replace","rightPad","split","static","substring","trim","upper","usernameGenerator","uuid"],"example":"dateFormat","externalDocs":{"description":"Transform Operations","url":"https://developer.sailpoint.com/docs/transforms/transform_operations/transform_operations.html#transform-operations"}},"attributes":{"description":"Meta-data about the transform. Values in this list are specific to the type of transform to be executed.","oneOf":[{"title":"accountAttribute","type":"object","required":["sourceName","attributeName"],"properties":{"sourceName":{"type":"string","description":"A reference to the source to search for the account","example":"Workday"},"attributeName":{"type":"string","description":"The name of the attribute on the account to return. This should match the name of the account attribute name visible in the user interface, or on the source schema.","example":"DEPARTMENT"},"accountSortAttribute":{"type":"string","description":"The value of this configuration is a string name of the attribute to use when determining the ordering of returned accounts when there are multiple entries","example":"created"},"accountSortDescending":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls the order of the sort when there are multiple accounts. If not defined, the transform will default to false (ascending order)","example":false},"accountReturnFirstLink":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls which account to source a value from for an attribute. If this flag is set to true, the transform returns the value from the first account in the list, even if it is null. If it is set to false, the transform returns the first non-null value. If not defined, the transform will default to false","example":false},"accountFilter":{"type":"string","description":"This expression queries the database to narrow search results. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the database. The default filter will always include the source and identity, and any subsequent expressions will be combined in an AND operation to the existing search criteria.\n\nOnly certain searchable attributes are available:
      - `nativeIdentity` - the Account ID
      - `displayName` - the Account Name
      - `entitlements` - a boolean value to determine if the account has entitlements","example":"!(nativeIdentity.startsWith(\"*DELETED*\"))"},"accountPropertyFilter":{"type":"string","description":"This expression is used to search and filter accounts in memory. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the returned resultset.\n\nAll account attributes are available for filtering as this operation is performed in memory.","example":"(groups.containsAll({'Admin'}) || location == 'Austin')"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"base64Decode","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"base64Encode","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"concat","type":"object","required":["values"],"properties":{"values":{"type":"array","items":{"type":"object"},"description":"An array of items to join together","example":["John"," ","Smith"]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"conditional","type":"object","required":["expression","positiveCondition","negativeCondition"],"properties":{"expression":{"type":"string","description":"A comparison statement that follows the structure of `ValueA eq ValueB` where `ValueA` and `ValueB` are static strings or outputs of other transforms. \n\nThe `eq` operator is the only valid comparison","example":"ValueA eq ValueB"},"positiveCondition":{"type":"string","description":"The output of the transform if the expression evalutes to true","example":"true"},"negativeCondition":{"type":"string","description":"The output of the transform if the expression evalutes to false","example":"false"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateCompare","type":"object","required":["firstDate","secondDate","operator","positiveCondition","negativeCondition"],"properties":{"firstDate":{"description":"This is the first date to consider (The date that would be on the left hand side of the comparison operation).","oneOf":[{"title":"accountAttribute","type":"object","required":["sourceName","attributeName"],"properties":{"sourceName":{"type":"string","description":"A reference to the source to search for the account","example":"Workday"},"attributeName":{"type":"string","description":"The name of the attribute on the account to return. This should match the name of the account attribute name visible in the user interface, or on the source schema.","example":"DEPARTMENT"},"accountSortAttribute":{"type":"string","description":"The value of this configuration is a string name of the attribute to use when determining the ordering of returned accounts when there are multiple entries","example":"created"},"accountSortDescending":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls the order of the sort when there are multiple accounts. If not defined, the transform will default to false (ascending order)","example":false},"accountReturnFirstLink":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls which account to source a value from for an attribute. If this flag is set to true, the transform returns the value from the first account in the list, even if it is null. If it is set to false, the transform returns the first non-null value. If not defined, the transform will default to false","example":false},"accountFilter":{"type":"string","description":"This expression queries the database to narrow search results. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the database. The default filter will always include the source and identity, and any subsequent expressions will be combined in an AND operation to the existing search criteria.\n\nOnly certain searchable attributes are available:
      - `nativeIdentity` - the Account ID
      - `displayName` - the Account Name
      - `entitlements` - a boolean value to determine if the account has entitlements","example":"!(nativeIdentity.startsWith(\"*DELETED*\"))"},"accountPropertyFilter":{"type":"string","description":"This expression is used to search and filter accounts in memory. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the returned resultset.\n\nAll account attributes are available for filtering as this operation is performed in memory.","example":"(groups.containsAll({'Admin'}) || location == 'Austin')"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateFormat","type":"object","properties":{"inputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"outputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}}]},"secondDate":{"description":"This is the second date to consider (The date that would be on the right hand side of the comparison operation).","oneOf":[{"title":"accountAttribute","type":"object","required":["sourceName","attributeName"],"properties":{"sourceName":{"type":"string","description":"A reference to the source to search for the account","example":"Workday"},"attributeName":{"type":"string","description":"The name of the attribute on the account to return. This should match the name of the account attribute name visible in the user interface, or on the source schema.","example":"DEPARTMENT"},"accountSortAttribute":{"type":"string","description":"The value of this configuration is a string name of the attribute to use when determining the ordering of returned accounts when there are multiple entries","example":"created"},"accountSortDescending":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls the order of the sort when there are multiple accounts. If not defined, the transform will default to false (ascending order)","example":false},"accountReturnFirstLink":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls which account to source a value from for an attribute. If this flag is set to true, the transform returns the value from the first account in the list, even if it is null. If it is set to false, the transform returns the first non-null value. If not defined, the transform will default to false","example":false},"accountFilter":{"type":"string","description":"This expression queries the database to narrow search results. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the database. The default filter will always include the source and identity, and any subsequent expressions will be combined in an AND operation to the existing search criteria.\n\nOnly certain searchable attributes are available:
      - `nativeIdentity` - the Account ID
      - `displayName` - the Account Name
      - `entitlements` - a boolean value to determine if the account has entitlements","example":"!(nativeIdentity.startsWith(\"*DELETED*\"))"},"accountPropertyFilter":{"type":"string","description":"This expression is used to search and filter accounts in memory. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the returned resultset.\n\nAll account attributes are available for filtering as this operation is performed in memory.","example":"(groups.containsAll({'Admin'}) || location == 'Austin')"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateFormat","type":"object","properties":{"inputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"outputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}}]},"operator":{"type":"string","description":"This is the comparison to perform.\n| Operation | Description |\n| --------- | ------- |\n| LT | Strictly less than: firstDate < secondDate |\n| LTE | Less than or equal to: firstDate <= secondDate |\n| GT | Strictly greater than: firstDate > secondDate |\n| GTE | Greater than or equal to: firstDate >= secondDate |\n","enum":["LT","LTE","GT","GTE"],"example":"LT"},"positiveCondition":{"type":"string","description":"The output of the transform if the expression evalutes to true","example":"true"},"negativeCondition":{"type":"string","description":"The output of the transform if the expression evalutes to false","example":false},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateFormat","type":"object","properties":{"inputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"outputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateMath","type":"object","required":["expression"],"properties":{"expression":{"type":"string","description":"A string value of the date and time components to operation on, along with the math operations to execute.\n","externalDocs":{"description":"Date Math Expressions","url":"https://developer.sailpoint.com/docs/transforms/transform_operations/operations/date_math.html#transform-structure"},"example":"now+1w"},"roundUp":{"type":"boolean","description":"A boolean value to indicate whether the transform should round up or down when a rounding `/` operation is defined in the expression. \n\n\nIf not provided, the transform will default to `false`\n\n\n`true` indicates the transform should round up (i.e., truncate the fractional date/time component indicated and then add one unit of that component)\n\n\n`false` indicates the transform should round down (i.e., truncate the fractional date/time component indicated)\n","example":false},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"decomposeDiacriticalMarks","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"e164phone","type":"object","properties":{"defaultRegion":{"type":"string","description":"This is an optional attribute that can be used to define the region of the phone number to format into.\n\n\nIf defaultRegion is not provided, it will take US as the default country.\n\n\nThe format of the country code should be in [ISO 3166-1 alpha-2 format](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)\n","example":"US"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"firstValid","type":"object","required":["values"],"properties":{"values":{"type":"array","items":{"type":"object"},"description":"An array of attributes to evaluate for existence.","example":[{"attributes":{"sourceName":"Active Directory","attributeName":"sAMAccountName"},"type":"accountAttribute"},{"attributes":{"sourceName":"Okta","attributeName":"login"},"type":"accountAttribute"},{"attributes":{"sourceName":"HR Source","attributeName":"employeeID"},"type":"accountAttribute"}]},"ignoreErrors":{"type":"boolean","description":"a true or false value representing to move on to the next option if an error (like an Null Pointer Exception) were to occur.","example":false},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false}}},{"title":"rule","oneOf":[{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"This is the name of the Generic rule that needs to be invoked by the transform","example":"Generic Calculation Rule"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false}}},{"type":"object","required":["name","operation","includeNumbers","includeSpecialChars","length"],"properties":{"name":{"type":"string","description":"This must always be set to \"Cloud Services Deployment Utility\"","example":"Cloud Services Deployment Utility"},"operation":{"type":"string","description":"The operation to perform `generateRandomString`","example":"generateRandomString"},"includeNumbers":{"type":"boolean","description":"This must be either \"true\" or \"false\" to indicate whether the generator logic should include numbers","example":true},"includeSpecialChars":{"type":"boolean","description":"This must be either \"true\" or \"false\" to indicate whether the generator logic should include special characters","example":true},"length":{"type":"string","description":"This specifies how long the randomly generated string needs to be\n\n\n>NOTE Due to identity attribute data constraints, the maximum allowable value is 450 characters\n","example":"10"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false}}},{"type":"object","required":["name","operation","uid"],"properties":{"name":{"type":"string","description":"This must always be set to \"Cloud Services Deployment Utility\"","example":"Cloud Services Deployment Utility"},"operation":{"type":"string","description":"The operation to perform `getReferenceIdentityAttribute`","example":"getReferenceIdentityAttribute"},"uid":{"type":"string","description":"This is the SailPoint User Name (uid) value of the identity whose attribute is desired\n\nAs a convenience feature, you can use the `manager` keyword to dynamically look up the user's manager and then get that manager's identity attribute.\n","example":"2c91808570313110017040b06f344ec9"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false}}}]},{"title":"identityAttribute","type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The system (camel-cased) name of the identity attribute to bring in","example":"email"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"indexOf","type":"object","required":["substring"],"properties":{"substring":{"type":"string","description":"A substring to search for, searches the entire calling string, and returns the index of the first occurrence of the specified substring.","example":"admin_"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"iso3166","type":"object","properties":{"format":{"type":"string","description":"An optional value to denote which ISO 3166 format to return. Valid values are:\n\n\n`alpha2` - Two-character country code (e.g., \"US\"); this is the default value if no format is supplied\n\n\n`alpha3` - Three-character country code (e.g., \"USA\")\n\n\n`numeric` - The numeric country code (e.g., \"840\")\n","example":"alpha2"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"leftPad","type":"object","required":["length"],"properties":{"length":{"type":"string","description":"An integer value for the desired length of the final output string","example":"4"},"padding":{"type":"string","description":"A string value representing the character that the incoming data should be padded with to get to the desired length\n\n\nIf not provided, the transform will default to a single space (\" \") character for padding\n","example":"0"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"lookup","type":"object","required":["table"],"properties":{"table":{"type":"object","additionalProperties":true,"description":"This is a JSON object of key-value pairs. The key is the string that will attempt to be matched to the input, and the value is the output string that should be returned if the key is matched\n\n\n>**Note** the use of the optional default key value here; if none of the three countries in the above example match the input string, the transform will return \"Unknown Region\" for the attribute that is mapped to this transform.\n","example":{"USA":"Americas","FRA":"EMEA","AUS":"APAC","default":"Unknown Region"}},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"lower","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"nameNormalizer","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"randomAlphaNumeric","type":"object","properties":{"length":{"type":"string","description":"This is an integer value specifying the size/number of characters the random string must contain\n\n\n* This value must be a positive number and cannot be blank\n\n\n* If no length is provided, the transform will default to a value of `32`\n\n\n* Due to identity attribute data constraints, the maximum allowable value is `450` characters\n","example":"10"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"randomNumeric","type":"object","properties":{"length":{"type":"string","description":"This is an integer value specifying the size/number of characters the random string must contain\n\n\n* This value must be a positive number and cannot be blank\n\n\n* If no length is provided, the transform will default to a value of `32`\n\n\n* Due to identity attribute data constraints, the maximum allowable value is `450` characters\n","example":"10"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"reference","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"This ID specifies the name of the pre-existing transform which you want to use within your current transform","example":"Existing Transform"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"replaceAll","type":"object","required":["table"],"properties":{"table":{"type":"object","additionalProperties":true,"description":"An attribute of key-value pairs. Each pair identifies the pattern to search for as its key, and the replacement string as its value.","example":{"-":" ","\"":"'","ñ":"n"}},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"replace","type":"object","required":["regex","replacement"],"properties":{"regex":{"type":"string","description":"This can be a string or a regex pattern in which you want to replace.","example":"[^a-zA-Z]","externalDocs":{"description":"Regex Builder","url":"https://regex101.com/"}},"replacement":{"type":"string","description":"This is the replacement string that should be substituded wherever the string or pattern is found.","example":" "},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"rightPad","type":"object","required":["length"],"properties":{"length":{"type":"string","description":"An integer value for the desired length of the final output string","example":"4"},"padding":{"type":"string","description":"A string value representing the character that the incoming data should be padded with to get to the desired length\n\n\nIf not provided, the transform will default to a single space (\" \") character for padding\n","example":"0"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"split","type":"object","required":["delimiter","index"],"properties":{"delimiter":{"type":"string","description":"This can be either a single character or a regex expression, and is used by the transform to identify the break point between two substrings in the incoming data","example":","},"index":{"type":"string","description":"An integer value for the desired array element after the incoming data has been split into a list; the array is a 0-based object, so the first array element would be index 0, the second element would be index 1, etc.","example":"5"},"throws":{"type":"boolean","description":"A boolean (true/false) value which indicates whether an exception should be thrown and returned as an output when an index is out of bounds with the resultant array (i.e., the provided index value is larger than the size of the array)\n\n\n`true` - The transform should return \"IndexOutOfBoundsException\"\n\n\n`false` - The transform should return null\n\n\nIf not provided, the transform will default to false and return a null\n","example":true},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"static","type":"object","required":["values"],"properties":{"values":{"type":"string","description":"This must evaluate to a JSON string, either through a fixed value or through conditional logic using the Apache Velocity Template Language.","example":"string$variable","externalDocs":{"description":"Static Transform Documentation","url":"https://developer.sailpoint.com/docs/transforms/transform_operations/operations/static.html"}},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false}}},{"title":"substring","type":"object","required":["begin"],"properties":{"begin":{"type":"integer","description":"The index of the first character to include in the returned substring.\n\n\nIf `begin` is set to -1, the transform will begin at character 0 of the input data\n","example":1,"format":"int32"},"beginOffset":{"type":"integer","description":"This integer value is the number of characters to add to the begin attribute when returning a substring. \n\nThis attribute is only used if begin is not -1.\n","example":3,"format":"int32"},"end":{"type":"integer","description":"The index of the first character to exclude from the returned substring.\n\nIf end is -1 or not provided at all, the substring transform will return everything up to the end of the input string.\n","example":6,"format":"int32"},"endOffset":{"type":"integer","description":"This integer value is the number of characters to add to the end attribute when returning a substring. \n\nThis attribute is only used if end is provided and is not -1.\n","example":1,"format":"int32"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"trim","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"upper","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"uuid","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false}}}]},"internal":{"type":"boolean","readOnly":true,"description":"Indicates whether this is an internal SailPoint-created transform or a customer-created transform","example":false}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:transforms:read"]}],"method":"get","path":"/transforms/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Transform by ID","description":{"content":"This API returns the transform specified by the given ID.\nA token with transform read authority is required to call this API.","type":"text/plain"},"url":{"path":["transforms",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the transform to retrieve","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Transform by ID + + + +This API returns the transform specified by the given ID. +A token with transform read authority is required to call this API. + +
      Path Parameters
      + +Transform with the given ID + +
      Schema
        attributes object
        + +Meta-data about the transform. Values in this list are specific to the type of transform to be executed. + +
      • oneOf - `nativeIdentity` - the Account ID
        - `displayName` - the Account Name
        - `entitlements` - a boolean value to determine if the account has entitlements"} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}>
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        firstDate object
        + +This is the first date to consider (The date that would be on the left hand side of the comparison operation). + +
      • oneOf - `nativeIdentity` - the Account ID
        - `displayName` - the Account Name
        - `entitlements` - a boolean value to determine if the account has entitlements"} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}>
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        inputFormat object
        + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
      • oneOf
      • string
        + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
        + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
      • string
        + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
      • outputFormat object
        + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
      • oneOf
      • string
        + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
        + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
      • string
        + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
      • input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      secondDate object
      + +This is the second date to consider (The date that would be on the right hand side of the comparison operation). + +
    • oneOf - `nativeIdentity` - the Account ID
      - `displayName` - the Account Name
      - `entitlements` - a boolean value to determine if the account has entitlements"} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}>
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      inputFormat object
      + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
    • oneOf
    • string
      + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
      + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
    • string
      + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
    • outputFormat object
      + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
    • oneOf
    • string
      + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
      + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
    • string
      + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
    • input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      secondDate |\n| GTE | Greater than or equal to: firstDate >= secondDate |\n"} schemaName={"string"} qualifierMessage={"**Possible values:** [`LT`, `LTE`, `GT`, `GTE`]"} defaultValue={undefined}>
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      inputFormat object
      + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
    • oneOf
    • string
      + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
      + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
    • string
      + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
    • outputFormat object
      + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
    • oneOf
    • string
      + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
      + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
    • string
      + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
    • input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      table object
      + +This is a JSON object of key-value pairs. The key is the string that will attempt to be matched to the input, and the value is the output string that should be returned if the key is matched + + +>**Note** the use of the optional default key value here; if none of the three countries in the above example match the input string, the transform will return "Unknown Region" for the attribute that is mapped to this transform. + + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      table object
      + +An attribute of key-value pairs. Each pair identifies the pattern to search for as its key, and the replacement string as its value. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-transforms-list.api.mdx b/docs/sailpoint-api-v3/get-transforms-list.api.mdx new file mode 100644 index 000000000..a1f8ac46d --- /dev/null +++ b/docs/sailpoint-api-v3/get-transforms-list.api.mdx @@ -0,0 +1,494 @@ +--- +id: get-transforms-list +sidebar_label: List transforms +hide_title: true +hide_table_of_contents: true +api: {"tags":["Transforms"],"description":"Gets a list of all saved transform objects.\nA token with transforms-list read authority is required to call this API.","operationId":"getTransformsList","parameters":[{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"name":"name","in":"query","description":"Name of the transform to retrieve from the list.","required":false,"style":"form","schema":{"type":"string","example":"ExampleTransformName123"}},{"name":"filters","in":"query","description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\nFiltering is supported for the following fields and operators:\n**internal**: *eq*\n**name**: *eq*, *sw*","required":false,"style":"form","explode":true,"example":"name eq \"Uppercase\"","schema":{"type":"string"}}],"responses":{"200":{"description":"A list of transforms matching the given criteria.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","description":"The representation of an internally- or customer-defined transform.","required":["name","type","attributes"],"properties":{"id":{"type":"string","readOnly":true,"description":"Unique ID of this transform","example":"2cd78adghjkja34jh2b1hkjhasuecd"},"name":{"type":"string","description":"Unique name of this transform","example":"Timestamp To Date"},"type":{"type":"string","description":"The type of transform operation","enum":["accountAttribute","base64Decode","base64Encode","concat","conditional","dateCompare","dateFormat","dateMath","decomposeDiacriticalMarks","e164phone","firstValid","rule","identityAttribute","indexOf","iso3166","lastIndexOf","leftPad","lookup","lower","normalizeNames","randomAlphaNumeric","randomNumeric","reference","replaceAll","replace","rightPad","split","static","substring","trim","upper","usernameGenerator","uuid"],"example":"dateFormat","externalDocs":{"description":"Transform Operations","url":"https://developer.sailpoint.com/docs/transforms/transform_operations/transform_operations.html#transform-operations"}},"attributes":{"description":"Meta-data about the transform. Values in this list are specific to the type of transform to be executed.","oneOf":[{"title":"accountAttribute","type":"object","required":["sourceName","attributeName"],"properties":{"sourceName":{"type":"string","description":"A reference to the source to search for the account","example":"Workday"},"attributeName":{"type":"string","description":"The name of the attribute on the account to return. This should match the name of the account attribute name visible in the user interface, or on the source schema.","example":"DEPARTMENT"},"accountSortAttribute":{"type":"string","description":"The value of this configuration is a string name of the attribute to use when determining the ordering of returned accounts when there are multiple entries","example":"created"},"accountSortDescending":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls the order of the sort when there are multiple accounts. If not defined, the transform will default to false (ascending order)","example":false},"accountReturnFirstLink":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls which account to source a value from for an attribute. If this flag is set to true, the transform returns the value from the first account in the list, even if it is null. If it is set to false, the transform returns the first non-null value. If not defined, the transform will default to false","example":false},"accountFilter":{"type":"string","description":"This expression queries the database to narrow search results. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the database. The default filter will always include the source and identity, and any subsequent expressions will be combined in an AND operation to the existing search criteria.\n\nOnly certain searchable attributes are available:
      - `nativeIdentity` - the Account ID
      - `displayName` - the Account Name
      - `entitlements` - a boolean value to determine if the account has entitlements","example":"!(nativeIdentity.startsWith(\"*DELETED*\"))"},"accountPropertyFilter":{"type":"string","description":"This expression is used to search and filter accounts in memory. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the returned resultset.\n\nAll account attributes are available for filtering as this operation is performed in memory.","example":"(groups.containsAll({'Admin'}) || location == 'Austin')"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"base64Decode","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"base64Encode","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"concat","type":"object","required":["values"],"properties":{"values":{"type":"array","items":{"type":"object"},"description":"An array of items to join together","example":["John"," ","Smith"]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"conditional","type":"object","required":["expression","positiveCondition","negativeCondition"],"properties":{"expression":{"type":"string","description":"A comparison statement that follows the structure of `ValueA eq ValueB` where `ValueA` and `ValueB` are static strings or outputs of other transforms. \n\nThe `eq` operator is the only valid comparison","example":"ValueA eq ValueB"},"positiveCondition":{"type":"string","description":"The output of the transform if the expression evalutes to true","example":"true"},"negativeCondition":{"type":"string","description":"The output of the transform if the expression evalutes to false","example":"false"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateCompare","type":"object","required":["firstDate","secondDate","operator","positiveCondition","negativeCondition"],"properties":{"firstDate":{"description":"This is the first date to consider (The date that would be on the left hand side of the comparison operation).","oneOf":[{"title":"accountAttribute","type":"object","required":["sourceName","attributeName"],"properties":{"sourceName":{"type":"string","description":"A reference to the source to search for the account","example":"Workday"},"attributeName":{"type":"string","description":"The name of the attribute on the account to return. This should match the name of the account attribute name visible in the user interface, or on the source schema.","example":"DEPARTMENT"},"accountSortAttribute":{"type":"string","description":"The value of this configuration is a string name of the attribute to use when determining the ordering of returned accounts when there are multiple entries","example":"created"},"accountSortDescending":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls the order of the sort when there are multiple accounts. If not defined, the transform will default to false (ascending order)","example":false},"accountReturnFirstLink":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls which account to source a value from for an attribute. If this flag is set to true, the transform returns the value from the first account in the list, even if it is null. If it is set to false, the transform returns the first non-null value. If not defined, the transform will default to false","example":false},"accountFilter":{"type":"string","description":"This expression queries the database to narrow search results. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the database. The default filter will always include the source and identity, and any subsequent expressions will be combined in an AND operation to the existing search criteria.\n\nOnly certain searchable attributes are available:
      - `nativeIdentity` - the Account ID
      - `displayName` - the Account Name
      - `entitlements` - a boolean value to determine if the account has entitlements","example":"!(nativeIdentity.startsWith(\"*DELETED*\"))"},"accountPropertyFilter":{"type":"string","description":"This expression is used to search and filter accounts in memory. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the returned resultset.\n\nAll account attributes are available for filtering as this operation is performed in memory.","example":"(groups.containsAll({'Admin'}) || location == 'Austin')"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateFormat","type":"object","properties":{"inputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"outputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}}]},"secondDate":{"description":"This is the second date to consider (The date that would be on the right hand side of the comparison operation).","oneOf":[{"title":"accountAttribute","type":"object","required":["sourceName","attributeName"],"properties":{"sourceName":{"type":"string","description":"A reference to the source to search for the account","example":"Workday"},"attributeName":{"type":"string","description":"The name of the attribute on the account to return. This should match the name of the account attribute name visible in the user interface, or on the source schema.","example":"DEPARTMENT"},"accountSortAttribute":{"type":"string","description":"The value of this configuration is a string name of the attribute to use when determining the ordering of returned accounts when there are multiple entries","example":"created"},"accountSortDescending":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls the order of the sort when there are multiple accounts. If not defined, the transform will default to false (ascending order)","example":false},"accountReturnFirstLink":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls which account to source a value from for an attribute. If this flag is set to true, the transform returns the value from the first account in the list, even if it is null. If it is set to false, the transform returns the first non-null value. If not defined, the transform will default to false","example":false},"accountFilter":{"type":"string","description":"This expression queries the database to narrow search results. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the database. The default filter will always include the source and identity, and any subsequent expressions will be combined in an AND operation to the existing search criteria.\n\nOnly certain searchable attributes are available:
      - `nativeIdentity` - the Account ID
      - `displayName` - the Account Name
      - `entitlements` - a boolean value to determine if the account has entitlements","example":"!(nativeIdentity.startsWith(\"*DELETED*\"))"},"accountPropertyFilter":{"type":"string","description":"This expression is used to search and filter accounts in memory. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the returned resultset.\n\nAll account attributes are available for filtering as this operation is performed in memory.","example":"(groups.containsAll({'Admin'}) || location == 'Austin')"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateFormat","type":"object","properties":{"inputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"outputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}}]},"operator":{"type":"string","description":"This is the comparison to perform.\n| Operation | Description |\n| --------- | ------- |\n| LT | Strictly less than: firstDate < secondDate |\n| LTE | Less than or equal to: firstDate <= secondDate |\n| GT | Strictly greater than: firstDate > secondDate |\n| GTE | Greater than or equal to: firstDate >= secondDate |\n","enum":["LT","LTE","GT","GTE"],"example":"LT"},"positiveCondition":{"type":"string","description":"The output of the transform if the expression evalutes to true","example":"true"},"negativeCondition":{"type":"string","description":"The output of the transform if the expression evalutes to false","example":false},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateFormat","type":"object","properties":{"inputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"outputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateMath","type":"object","required":["expression"],"properties":{"expression":{"type":"string","description":"A string value of the date and time components to operation on, along with the math operations to execute.\n","externalDocs":{"description":"Date Math Expressions","url":"https://developer.sailpoint.com/docs/transforms/transform_operations/operations/date_math.html#transform-structure"},"example":"now+1w"},"roundUp":{"type":"boolean","description":"A boolean value to indicate whether the transform should round up or down when a rounding `/` operation is defined in the expression. \n\n\nIf not provided, the transform will default to `false`\n\n\n`true` indicates the transform should round up (i.e., truncate the fractional date/time component indicated and then add one unit of that component)\n\n\n`false` indicates the transform should round down (i.e., truncate the fractional date/time component indicated)\n","example":false},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"decomposeDiacriticalMarks","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"e164phone","type":"object","properties":{"defaultRegion":{"type":"string","description":"This is an optional attribute that can be used to define the region of the phone number to format into.\n\n\nIf defaultRegion is not provided, it will take US as the default country.\n\n\nThe format of the country code should be in [ISO 3166-1 alpha-2 format](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)\n","example":"US"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"firstValid","type":"object","required":["values"],"properties":{"values":{"type":"array","items":{"type":"object"},"description":"An array of attributes to evaluate for existence.","example":[{"attributes":{"sourceName":"Active Directory","attributeName":"sAMAccountName"},"type":"accountAttribute"},{"attributes":{"sourceName":"Okta","attributeName":"login"},"type":"accountAttribute"},{"attributes":{"sourceName":"HR Source","attributeName":"employeeID"},"type":"accountAttribute"}]},"ignoreErrors":{"type":"boolean","description":"a true or false value representing to move on to the next option if an error (like an Null Pointer Exception) were to occur.","example":false},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false}}},{"title":"rule","oneOf":[{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"This is the name of the Generic rule that needs to be invoked by the transform","example":"Generic Calculation Rule"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false}}},{"type":"object","required":["name","operation","includeNumbers","includeSpecialChars","length"],"properties":{"name":{"type":"string","description":"This must always be set to \"Cloud Services Deployment Utility\"","example":"Cloud Services Deployment Utility"},"operation":{"type":"string","description":"The operation to perform `generateRandomString`","example":"generateRandomString"},"includeNumbers":{"type":"boolean","description":"This must be either \"true\" or \"false\" to indicate whether the generator logic should include numbers","example":true},"includeSpecialChars":{"type":"boolean","description":"This must be either \"true\" or \"false\" to indicate whether the generator logic should include special characters","example":true},"length":{"type":"string","description":"This specifies how long the randomly generated string needs to be\n\n\n>NOTE Due to identity attribute data constraints, the maximum allowable value is 450 characters\n","example":"10"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false}}},{"type":"object","required":["name","operation","uid"],"properties":{"name":{"type":"string","description":"This must always be set to \"Cloud Services Deployment Utility\"","example":"Cloud Services Deployment Utility"},"operation":{"type":"string","description":"The operation to perform `getReferenceIdentityAttribute`","example":"getReferenceIdentityAttribute"},"uid":{"type":"string","description":"This is the SailPoint User Name (uid) value of the identity whose attribute is desired\n\nAs a convenience feature, you can use the `manager` keyword to dynamically look up the user's manager and then get that manager's identity attribute.\n","example":"2c91808570313110017040b06f344ec9"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false}}}]},{"title":"identityAttribute","type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The system (camel-cased) name of the identity attribute to bring in","example":"email"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"indexOf","type":"object","required":["substring"],"properties":{"substring":{"type":"string","description":"A substring to search for, searches the entire calling string, and returns the index of the first occurrence of the specified substring.","example":"admin_"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"iso3166","type":"object","properties":{"format":{"type":"string","description":"An optional value to denote which ISO 3166 format to return. Valid values are:\n\n\n`alpha2` - Two-character country code (e.g., \"US\"); this is the default value if no format is supplied\n\n\n`alpha3` - Three-character country code (e.g., \"USA\")\n\n\n`numeric` - The numeric country code (e.g., \"840\")\n","example":"alpha2"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"leftPad","type":"object","required":["length"],"properties":{"length":{"type":"string","description":"An integer value for the desired length of the final output string","example":"4"},"padding":{"type":"string","description":"A string value representing the character that the incoming data should be padded with to get to the desired length\n\n\nIf not provided, the transform will default to a single space (\" \") character for padding\n","example":"0"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"lookup","type":"object","required":["table"],"properties":{"table":{"type":"object","additionalProperties":true,"description":"This is a JSON object of key-value pairs. The key is the string that will attempt to be matched to the input, and the value is the output string that should be returned if the key is matched\n\n\n>**Note** the use of the optional default key value here; if none of the three countries in the above example match the input string, the transform will return \"Unknown Region\" for the attribute that is mapped to this transform.\n","example":{"USA":"Americas","FRA":"EMEA","AUS":"APAC","default":"Unknown Region"}},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"lower","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"nameNormalizer","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"randomAlphaNumeric","type":"object","properties":{"length":{"type":"string","description":"This is an integer value specifying the size/number of characters the random string must contain\n\n\n* This value must be a positive number and cannot be blank\n\n\n* If no length is provided, the transform will default to a value of `32`\n\n\n* Due to identity attribute data constraints, the maximum allowable value is `450` characters\n","example":"10"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"randomNumeric","type":"object","properties":{"length":{"type":"string","description":"This is an integer value specifying the size/number of characters the random string must contain\n\n\n* This value must be a positive number and cannot be blank\n\n\n* If no length is provided, the transform will default to a value of `32`\n\n\n* Due to identity attribute data constraints, the maximum allowable value is `450` characters\n","example":"10"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"reference","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"This ID specifies the name of the pre-existing transform which you want to use within your current transform","example":"Existing Transform"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"replaceAll","type":"object","required":["table"],"properties":{"table":{"type":"object","additionalProperties":true,"description":"An attribute of key-value pairs. Each pair identifies the pattern to search for as its key, and the replacement string as its value.","example":{"-":" ","\"":"'","ñ":"n"}},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"replace","type":"object","required":["regex","replacement"],"properties":{"regex":{"type":"string","description":"This can be a string or a regex pattern in which you want to replace.","example":"[^a-zA-Z]","externalDocs":{"description":"Regex Builder","url":"https://regex101.com/"}},"replacement":{"type":"string","description":"This is the replacement string that should be substituded wherever the string or pattern is found.","example":" "},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"rightPad","type":"object","required":["length"],"properties":{"length":{"type":"string","description":"An integer value for the desired length of the final output string","example":"4"},"padding":{"type":"string","description":"A string value representing the character that the incoming data should be padded with to get to the desired length\n\n\nIf not provided, the transform will default to a single space (\" \") character for padding\n","example":"0"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"split","type":"object","required":["delimiter","index"],"properties":{"delimiter":{"type":"string","description":"This can be either a single character or a regex expression, and is used by the transform to identify the break point between two substrings in the incoming data","example":","},"index":{"type":"string","description":"An integer value for the desired array element after the incoming data has been split into a list; the array is a 0-based object, so the first array element would be index 0, the second element would be index 1, etc.","example":"5"},"throws":{"type":"boolean","description":"A boolean (true/false) value which indicates whether an exception should be thrown and returned as an output when an index is out of bounds with the resultant array (i.e., the provided index value is larger than the size of the array)\n\n\n`true` - The transform should return \"IndexOutOfBoundsException\"\n\n\n`false` - The transform should return null\n\n\nIf not provided, the transform will default to false and return a null\n","example":true},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"static","type":"object","required":["values"],"properties":{"values":{"type":"string","description":"This must evaluate to a JSON string, either through a fixed value or through conditional logic using the Apache Velocity Template Language.","example":"string$variable","externalDocs":{"description":"Static Transform Documentation","url":"https://developer.sailpoint.com/docs/transforms/transform_operations/operations/static.html"}},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false}}},{"title":"substring","type":"object","required":["begin"],"properties":{"begin":{"type":"integer","description":"The index of the first character to include in the returned substring.\n\n\nIf `begin` is set to -1, the transform will begin at character 0 of the input data\n","example":1,"format":"int32"},"beginOffset":{"type":"integer","description":"This integer value is the number of characters to add to the begin attribute when returning a substring. \n\nThis attribute is only used if begin is not -1.\n","example":3,"format":"int32"},"end":{"type":"integer","description":"The index of the first character to exclude from the returned substring.\n\nIf end is -1 or not provided at all, the substring transform will return everything up to the end of the input string.\n","example":6,"format":"int32"},"endOffset":{"type":"integer","description":"This integer value is the number of characters to add to the end attribute when returning a substring. \n\nThis attribute is only used if end is provided and is not -1.\n","example":1,"format":"int32"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"trim","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"upper","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"uuid","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false}}}]},"internal":{"type":"boolean","readOnly":true,"description":"Indicates whether this is an internal SailPoint-created transform or a customer-created transform","example":false}}}},"example":[{"id":"2cd78adghjkja34jh2b1hkjhasuecd","name":"Timestamp To Date","type":"dateFormat","attributes":{"inputFormat":"MMM-dd-yyyy, HH:mm:ss.SSS","outputFormat":"yyyy/dd/MM"},"internal":false},{"id":"2lkas8dhj4bkuakja77giih7l4ashh","name":"PrefixSubstring","type":"substring","attributes":{"begin":0,"end":3},"internal":true}]}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:transforms-list:read"]}],"method":"get","path":"/transforms","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"List transforms","description":{"content":"Gets a list of all saved transform objects.\nA token with transforms-list read authority is required to call this API.","type":"text/plain"},"url":{"path":["transforms"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Name of the transform to retrieve from the list.","type":"text/plain"},"key":"name","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\nFiltering is supported for the following fields and operators:\n**internal**: *eq*\n**name**: *eq*, *sw*","type":"text/plain"},"key":"filters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List transforms + + + +Gets a list of all saved transform objects. +A token with transforms-list read authority is required to call this API. + +
      Query Parameters
      + +A list of transforms matching the given criteria. + +
      Schema array
        attributes object
        + +Meta-data about the transform. Values in this list are specific to the type of transform to be executed. + +
      • oneOf - `nativeIdentity` - the Account ID
        - `displayName` - the Account Name
        - `entitlements` - a boolean value to determine if the account has entitlements"} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}>
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        firstDate object
        + +This is the first date to consider (The date that would be on the left hand side of the comparison operation). + +
      • oneOf - `nativeIdentity` - the Account ID
        - `displayName` - the Account Name
        - `entitlements` - a boolean value to determine if the account has entitlements"} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}>
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        inputFormat object
        + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
      • oneOf
      • string
        + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
        + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
      • string
        + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
      • outputFormat object
        + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
      • oneOf
      • string
        + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
        + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
      • string
        + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
      • input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      secondDate object
      + +This is the second date to consider (The date that would be on the right hand side of the comparison operation). + +
    • oneOf - `nativeIdentity` - the Account ID
      - `displayName` - the Account Name
      - `entitlements` - a boolean value to determine if the account has entitlements"} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}>
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      inputFormat object
      + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
    • oneOf
    • string
      + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
      + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
    • string
      + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
    • outputFormat object
      + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
    • oneOf
    • string
      + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
      + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
    • string
      + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
    • input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      secondDate |\n| GTE | Greater than or equal to: firstDate >= secondDate |\n"} schemaName={"string"} qualifierMessage={"**Possible values:** [`LT`, `LTE`, `GT`, `GTE`]"} defaultValue={undefined}>
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      inputFormat object
      + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
    • oneOf
    • string
      + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
      + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
    • string
      + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
    • outputFormat object
      + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
    • oneOf
    • string
      + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
      + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
    • string
      + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
    • input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      table object
      + +This is a JSON object of key-value pairs. The key is the string that will attempt to be matched to the input, and the value is the output string that should be returned if the key is matched + + +>**Note** the use of the optional default key value here; if none of the three countries in the above example match the input string, the transform will return "Unknown Region" for the attribute that is mapped to this transform. + + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      table object
      + +An attribute of key-value pairs. Each pair identifies the pattern to search for as its key, and the replacement string as its value. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      input object
      + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/get-work-items.api.mdx b/docs/sailpoint-api-v3/get-work-items.api.mdx new file mode 100644 index 000000000..586acffb6 --- /dev/null +++ b/docs/sailpoint-api-v3/get-work-items.api.mdx @@ -0,0 +1,75 @@ +--- +id: get-work-items +sidebar_label: Get a Work Item +hide_title: true +hide_table_of_contents: true +api: {"operationId":"getWorkItems","tags":["Work Items"],"description":"This gets the details of a Work Item belonging to either the specified user(admin required), or the current user.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"ID of the work item."}],"responses":{"200":{"description":"The work item with the given ID.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the work item","example":"2c9180835d2e5168015d32f890ca1581"},"requesterId":{"type":"string","description":"ID of the requester","example":"2c9180835d2e5168015d32f890ca1581"},"requesterDisplayName":{"type":"string","description":"The displayname of the requester","example":"John Smith"},"ownerId":{"type":"string","description":"The ID of the owner","example":"2c9180835d2e5168015d32f890ca1581"},"ownerName":{"type":"string","description":"The name of the owner","example":"Jason Smith"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"description":{"type":"string","description":"The description of the work item","example":"Create account on source 'AD'"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"type":{"type":"string","enum":["UNKNOWN","GENERIC","CERTIFICATION","REMEDIATION","DELEGATION","APPROVAL","VIOLATIONREVIEW","FORM","POLICYVIOLATION","CHALLENGE","IMPACTANALYSIS","SIGNOFF","EVENT","MANUALACTION","TEST"]},"remediationItems":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the certification","example":"2c9180835d2e5168015d32f890ca1581"},"targetId":{"type":"string","description":"The ID of the certification target","example":"2c9180835d2e5168015d32f890ca1581"},"targetName":{"type":"string","description":"The name of the certification target","example":"john.smith"},"targetDisplayName":{"type":"string","description":"The display name of the certification target","example":"emailAddress"},"applicationName":{"type":"string","description":"The name of the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute being certified","example":"phoneNumber"},"attributeOperation":{"type":"string","description":"The operation of the certification on the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute being certified","example":"512-555-1212"},"nativeIdentity":{"type":"string","description":"The native identity of the target","example":"jason.smith2"}}},"approvalItems":{"type":"object","properties":{"id":{"type":"string","description":"ID of the approval item","example":"2c9180835d2e5168015d32f890ca1581"},"account":{"type":"string","description":"The account referenced by the approval item","example":"john.smith"},"application":{"type":"string","description":"The name the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute","example":"emailAddress"},"attributeOperation":{"type":"string","description":"The operation of the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute","example":"a@b.com"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]}}},"name":{"type":"string","description":"The work item name","example":"Account Create"},"completed":{"type":"string","format":"date-time","example":"2018-10-19T13:49:37.385Z"},"numItems":{"type":"integer","description":"The number of items in the work item","example":19},"form":{"type":"object","properties":{"id":{"type":"string","description":"ID of the form","example":"2c9180835d2e5168015d32f890ca1581"},"name":{"type":"string","description":"Name of the form","example":"AccountSelection Form"},"title":{"type":"string","description":"The form title","example":"Account Selection for John.Doe"},"subtitle":{"type":"string","description":"The form subtitle.","example":"Please select from the following"},"targetUser":{"type":"string","description":"The name of the user that should be shown this form","example":"Jane.Doe"},"sections":{"type":"object","allOf":[{"type":"object","properties":{"name":{"type":"string","description":"Name of the FormItem","example":"Field1"}}},{"type":"object","properties":{"label":{"type":"string","description":"Label of the section","example":"Section 1"},"formItems":{"type":"array","items":{"type":"object"},"description":"List of FormItems. FormItems can be SectionDetails and/or FieldDetails","example":[]}}}]}}},"errors":{"type":"array","items":{"type":"string"},"example":["The work item ID that was specified was not found."]}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/work-items/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get a Work Item","description":{"content":"This gets the details of a Work Item belonging to either the specified user(admin required), or the current user.","type":"text/plain"},"url":{"path":["work-items",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the work item.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a Work Item + + + +This gets the details of a Work Item belonging to either the specified user(admin required), or the current user. + +
      Path Parameters
      + +The work item with the given ID. + +
      Schema
        remediationItems object
        approvalItems object
        form object
        sections object
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/identity-profiles.tag.mdx b/docs/sailpoint-api-v3/identity-profiles.tag.mdx new file mode 100644 index 000000000..a54e90627 --- /dev/null +++ b/docs/sailpoint-api-v3/identity-profiles.tag.mdx @@ -0,0 +1,15 @@ +--- +id: identity-profiles +title: Identity Profiles +description: Identity Profiles +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/import-identity-profiles.api.mdx b/docs/sailpoint-api-v3/import-identity-profiles.api.mdx new file mode 100644 index 000000000..43f431375 --- /dev/null +++ b/docs/sailpoint-api-v3/import-identity-profiles.api.mdx @@ -0,0 +1,123 @@ +--- +id: import-identity-profiles +sidebar_label: Import Identity Profiles +hide_title: true +hide_table_of_contents: true +api: {"operationId":"importIdentityProfiles","description":"This imports previously exported identity profiles.","tags":["Identity Profiles"],"requestBody":{"description":"Previously exported Identity Profiles.","required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","description":"Identity Profile exported object","properties":{"version":{"type":"integer","example":1,"description":"Version or object from the target service."},"self":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"object":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object","properties":{"description":{"type":"string","description":"The description of the Identity Profile.","example":"My custom flat file profile"},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The owner of the Identity Profile."},"priority":{"type":"integer","format":"int64","description":"The priority for an Identity Profile.","example":10},"authoritativeSource":{"type":"object","properties":{"type":{"type":"string","enum":["SOURCE"],"description":"Type of the object to which this reference applies","example":"SOURCE"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c9180835d191a86015d28455b4b232a"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"HR Active Directory"}}},"identityRefreshRequired":{"type":"boolean","description":"True if a identity refresh is needed. Typically triggered when a change on the source has been made.","example":true},"identityCount":{"type":"integer","description":"The number of identities that belong to the Identity Profile.","format":"int32","example":8},"identityAttributeConfig":{"type":"object","description":"Defines all the identity attribute mapping configurations. This defines how to generate or collect data for each identity attributes in identity refresh process.","properties":{"enabled":{"description":"The backend will only promote values if the profile/mapping is enabled.","type":"boolean","example":true},"attributeTransforms":{"type":"array","items":{"type":"object","description":"Defines a transformation definition for an identity attribute.","properties":{"identityAttributeName":{"type":"string","description":"Name of the identity attribute.","example":"email"},"transformDefinition":{"description":"The seaspray transformation definition.","type":"object","properties":{"type":{"type":"string","description":"The type of the transform definition.","example":"accountAttribute"},"attributes":{"type":"object","additionalProperties":{"type":"object"},"description":"Arbitrary key-value pairs to store any metadata for the object","example":{"attributeName":"e-mail","sourceName":"MySource","sourceId":"2c9180877a826e68017a8c0b03da1a53"}}}}}}}}},"identityExceptionReportReference":{"type":"object","properties":{"taskResultId":{"type":"string","format":"uuid","description":"The id of the task result.","example":"2c918086795cd09201795d5f7d7533df"},"reportName":{"type":"string","example":"My annual report","description":"The name of the report."}}},"hasTimeBasedAttr":{"description":"Indicates the value of requiresPeriodicRefresh attribute for the Identity Profile.","type":"boolean","example":true}}}]}}}}}}},"responses":{"200":{"description":"The result of importing Identity Profiles.","content":{"application/json":{"schema":{"type":"object","title":"Import Object Response Body","description":"Response model for import of a single object.","properties":{"infos":{"description":"Informational messages returned from the target service on import.","type":"array","items":{"type":"object","title":"Config Import/Export Message","description":"Message model for Config Import/Export.","properties":{"key":{"type":"string","description":"Message key.","example":"UNKNOWN_REFERENCE_RESOLVER"},"text":{"type":"string","description":"Message text.","example":"Unable to resolve reference for object [type: IDENTITY, id: 2c91808c746e9c9601747d6507332ecz, name: random identity]"},"details":{"type":"object","description":"Message details if any, in key:value pairs.","additionalProperties":{"type":"object"},"example":{"details":"message details"}}},"required":["key","text","details"]}},"warnings":{"description":"Warning messages returned from the target service on import.","type":"array","items":{"type":"object","title":"Config Import/Export Message","description":"Message model for Config Import/Export.","properties":{"key":{"type":"string","description":"Message key.","example":"UNKNOWN_REFERENCE_RESOLVER"},"text":{"type":"string","description":"Message text.","example":"Unable to resolve reference for object [type: IDENTITY, id: 2c91808c746e9c9601747d6507332ecz, name: random identity]"},"details":{"type":"object","description":"Message details if any, in key:value pairs.","additionalProperties":{"type":"object"},"example":{"details":"message details"}}},"required":["key","text","details"]}},"errors":{"description":"Error messages returned from the target service on import.","type":"array","items":{"type":"object","title":"Config Import/Export Message","description":"Message model for Config Import/Export.","properties":{"key":{"type":"string","description":"Message key.","example":"UNKNOWN_REFERENCE_RESOLVER"},"text":{"type":"string","description":"Message text.","example":"Unable to resolve reference for object [type: IDENTITY, id: 2c91808c746e9c9601747d6507332ecz, name: random identity]"},"details":{"type":"object","description":"Message details if any, in key:value pairs.","additionalProperties":{"type":"object"},"example":{"details":"message details"}}},"required":["key","text","details"]}},"importedObjects":{"description":"References to objects that were created or updated by the import.","type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}}}},"required":["infos","warnings","errors","importedObjects"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:identity-profile:create"]}],"method":"post","path":"/identity-profiles/import","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"version":1,"self":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"object":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson","description":"My custom flat file profile","owner":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"priority":10,"authoritativeSource":{"type":"SOURCE","id":"2c9180835d191a86015d28455b4b232a","name":"HR Active Directory"},"identityRefreshRequired":true,"identityCount":8,"identityAttributeConfig":{"enabled":true,"attributeTransforms":[{"identityAttributeName":"email","transformDefinition":{"type":"accountAttribute","attributes":{"attributeName":"e-mail","sourceName":"MySource","sourceId":"2c9180877a826e68017a8c0b03da1a53"}}}]},"identityExceptionReportReference":{"taskResultId":"2c918086795cd09201795d5f7d7533df","reportName":"My annual report"},"hasTimeBasedAttr":true}}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Import Identity Profiles","description":{"content":"This imports previously exported identity profiles.","type":"text/plain"},"url":{"path":["identity-profiles","import"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Import Identity Profiles + + + +This imports previously exported identity profiles. + +
      Request Body array required
      + +Previously exported Identity Profiles. + +
        self object
        object object
        owner object
        + +The owner of the Identity Profile. + +
        authoritativeSource object
        identityAttributeConfig object
        + +Defines all the identity attribute mapping configurations. This defines how to generate or collect data for each identity attributes in identity refresh process. + +
        attributeTransforms object[]
        transformDefinition object
        + +The seaspray transformation definition. + +
        attributes object
        + +Arbitrary key-value pairs to store any metadata for the object + +
      • property name* object
      • identityExceptionReportReference object
      + +The result of importing Identity Profiles. + +
      Schema
        infos object[]
        + +Informational messages returned from the target service on import. + +
        details object
        + +Message details if any, in key:value pairs. + +
      • property name* object
      • warnings object[]
        + +Warning messages returned from the target service on import. + +
        details object
        + +Message details if any, in key:value pairs. + +
      • property name* object
      • errors object[]
        + +Error messages returned from the target service on import. + +
        details object
        + +Message details if any, in key:value pairs. + +
      • property name* object
      • importedObjects object[]
        + +References to objects that were created or updated by the import. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/lifecycle-states.tag.mdx b/docs/sailpoint-api-v3/lifecycle-states.tag.mdx new file mode 100644 index 000000000..18a9598a1 --- /dev/null +++ b/docs/sailpoint-api-v3/lifecycle-states.tag.mdx @@ -0,0 +1,15 @@ +--- +id: lifecycle-states +title: Lifecycle States +description: Lifecycle States +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/list-access-request-status.api.mdx b/docs/sailpoint-api-v3/list-access-request-status.api.mdx new file mode 100644 index 000000000..431241610 --- /dev/null +++ b/docs/sailpoint-api-v3/list-access-request-status.api.mdx @@ -0,0 +1,164 @@ +--- +id: list-access-request-status +sidebar_label: Access Request Status +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listAccessRequestStatus","tags":["Access Requests"],"description":"The Access Request Status API returns a list of access request statuses based on the specified query parameters.\nAny token with any authority can request their own status. A token with ORG_ADMIN authority is required to call this API to get a list of statuses for other users.","parameters":[{"in":"query","name":"requested-for","schema":{"type":"string"},"example":"2c9180877b2b6ea4017b2c545f971429","description":"Filter the results by the identity for which the requests were made. *me* indicates the current user. Mutually exclusive with *regarding-identity*.","required":false},{"in":"query","name":"requested-by","schema":{"type":"string"},"example":"2c9180877b2b6ea4017b2c545f971429","description":"Filter the results by the identity that made the requests. *me* indicates the current user. Mutually exclusive with *regarding-identity*.","required":false},{"in":"query","name":"regarding-identity","schema":{"type":"string"},"example":"2c9180877b2b6ea4017b2c545f971429","description":"Filter the results by the specified identity which is either the requester or target of the requests. *me* indicates the current user. Mutually exclusive with *requested-for* and *requested-by*.","required":false},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.","required":false,"schema":{"type":"boolean","default":false},"example":false},{"in":"query","name":"limit","description":"Max number of results to return.","required":false,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250},"example":100},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results. Defaults to 0 if not specified.","required":false,"schema":{"type":"integer","format":"int32","minimum":0},"example":10}],"responses":{"200":{"description":"List of requested item status.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Human-readable display name of the item being requested.","example":"AccessProfile1"},"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE","ENTITLEMENT"],"description":"Type of requested object.","example":"ACCESS_PROFILE"},"cancelledRequestDetails":{"type":"object","properties":{"comment":{"type":"string","description":"Comment made by the owner when cancelling the associated request.","example":"Nisl quis ipsum quam quisque condimentum nunc ut dolor nunc."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"modified":{"type":"string","format":"date-time","description":"Date comment was added by the owner when cancelling the associated request","example":"2019-12-20T09:17:12.192Z"}},"description":"Provides additional details for a request that has been cancelled."},"errorMessages":{"type":"array","items":{"type":"array","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"description":"List of list of localized error messages, if any, encountered during the approval/provisioning process."},"state":{"type":"string","enum":["EXECUTING","REQUEST_COMPLETED","CANCELLED","TERMINATED","PROVISIONING_VERIFICATION_PENDING","REJECTED","PROVISIONING_FAILED","NOT_ALL_ITEMS_PROVISIONED","ERROR"],"description":"Indicates the state of an access request:\n* EXECUTING: The request is executing, which indicates the system is doing some processing.\n* REQUEST_COMPLETED: Indicates the request has been completed.\n* CANCELLED: The request was cancelled with no user input.\n* TERMINATED: The request has been terminated before it was able to complete.\n* PROVISIONING_VERIFICATION_PENDING: The request has finished any approval steps and provisioning is waiting to be verified.\n* REJECTED: The request was rejected.\n* PROVISIONING_FAILED: The request has failed to complete.\n* NOT_ALL_ITEMS_PROVISIONED: One or more of the requested items failed to complete, but there were one or more successes.\n* ERROR: An error occurred during request processing.","example":"EXECUTING"},"approvalDetails":{"type":"array","items":{"type":"object","properties":{"forwarded":{"type":"boolean","description":"True if the request for this item was forwarded from one owner to another."},"originalOwner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Base identity/workgroup reference object representing the original owner, if forwarded."},"currentOwner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Base reference of approver that will make decision."},"reviewedBy":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The identity who has reviewed the approval."},"modified":{"type":"string","format":"date-time","description":"Time at which item was modified.","example":"2019-08-23T18:52:57.398Z"},"status":{"type":"string","enum":["PENDING","APPROVED","REJECTED","EXPIRED","CANCELLED","ARCHIVED"],"description":"Indicates the state of the request processing for this item:\n* PENDING: The request for this item is awaiting processing.\n* APPROVED: The request for this item has been approved.\n* REJECTED: The request for this item was rejected.\n* EXPIRED: The request for this item expired with no action taken.\n* CANCELLED: The request for this item was cancelled with no user action.\n* ARCHIVED: The request for this item has been archived after completion.","example":"PENDING"},"scheme":{"type":"string","enum":["APP_OWNER","SOURCE_OWNER","MANAGER","ROLE_OWNER","ACCESS_PROFILE_OWNER","GOVERNANCE_GROUP"],"description":"Describes the individual or group that is responsible for an approval step."},"errorMessages":{"type":"array","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}},"description":"If the request failed, includes any error messages that were generated."},"comment":{"type":"string","description":"Comment, if any, provided by the approver."},"removeDate":{"type":"string","description":"The date the role or access profile is no longer assigned to the specified identity.","format":"date-time","example":"2020-07-11T00:00:00Z"}}},"description":"Approval details for each item."},"manualWorkItemDetails":{"type":"array","items":{"type":"object","properties":{"forwarded":{"type":"boolean","description":"True if the request for this item was forwarded from one owner to another.","example":true},"originalOwner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Base identity/workgroup reference object representing the original owner, if forwarded."},"currentOwner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Base reference of approver that will make decision."},"modified":{"type":"string","format":"date-time","description":"Time at which item was modified.","example":"2019-08-23T18:52:57.398Z"},"status":{"type":"string","enum":["PENDING","APPROVED","REJECTED","EXPIRED","CANCELLED","ARCHIVED"],"description":"Indicates the state of the request processing for this item:\n* PENDING: The request for this item is awaiting processing.\n* APPROVED: The request for this item has been approved.\n* REJECTED: The request for this item was rejected.\n* EXPIRED: The request for this item expired with no action taken.\n* CANCELLED: The request for this item was cancelled with no user action.\n* ARCHIVED: The request for this item has been archived after completion.","example":"PENDING"}}},"description":"Manual work items created for provisioning the item."},"accountActivityItemId":{"type":"string","description":"Id of associated account activity item.","example":"2c9180926cbfbddd016cbfc7c3b10010"},"requestType":{"type":"string","enum":["GRANT_ACCESS","REVOKE_ACCESS"],"description":"Access request type. Defaults to GRANT_ACCESS. REVOKE_ACCESS type can only have a single Identity ID in the requestedFor field. Currently REVOKE_ACCESS is not supported for entitlements.","example":"GRANT_ACCESS"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"},"requester":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The identity that requested the item."},"requestedFor":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The identity for whom the Access Request Status is requested for."},"requesterComment":{"description":"The requester's comment.","type":"object","properties":{"comment":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat"},"author":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"ID of the author","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"}}},"created":{"type":"string","format":"date-time","description":"Date and time comment was created","example":"2017-07-11T18:45:37.098Z"}}},"sodViolationContext":{"description":"The details of the SOD violations for the associated approval.","type":"object","properties":{"state":{"type":"string","enum":["SUCCESS","ERROR"],"description":"The status of SOD violation check","example":"SUCCESS"},"uuid":{"description":"The id of the Violation check event","type":"string","example":"f73d16e9-a038-46c5-b217-1246e15fdbdd"},"violationCheckResult":{"description":"The inner object representing the completed SOD Violation check","type":"object","properties":{"message":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}},"description":"If the request failed, includes any error message that was generated.","example":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An error has occurred during the SOD violation check"}]},"clientMetadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on completion of the violation check.","example":{"requestedAppName":"test-app","requestedAppId":"2c91808f7892918f0178b78da4a305a1"}},"violationContexts":{"type":"array","items":{"description":"The contextual information of the violated criteria","type":"object","properties":{"policy":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the Policy that is being violated."},"conflictingAccessCriteria":{"type":"object","description":"The object which contains the left and right hand side of the entitlements that got violated according to the policy.","properties":{"leftCriteria":{"type":"object","properties":{"criteriaList":{"type":"array","items":{"description":"Details of the Entitlement criteria","type":"object","properties":{"existing":{"type":"boolean","example":true,"description":"If the entitlement already belonged to the user or not."},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Entitlement ID","example":"2c918085771e9d3301773b3cb66f6398"},"name":{"type":"string","description":"Entitlement name","example":"My HR Entitlement"}}}}}},"rightCriteria":{"type":"object","properties":{"criteriaList":{"type":"array","items":{"description":"Details of the Entitlement criteria","type":"object","properties":{"existing":{"type":"boolean","example":true,"description":"If the entitlement already belonged to the user or not."},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Entitlement ID","example":"2c918085771e9d3301773b3cb66f6398"},"name":{"type":"string","description":"Entitlement name","example":"My HR Entitlement"}}}}}}}}}}},"violatedPolicies":{"type":"array","description":"A list of the Policies that were violated","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the policy that was violated","example":[{"type":"SOD_POLICY","id":"69129440-422d-4a23-aadd-35c828d5bfda","name":"HR Policy"}]}}}}}},"provisioningDetails":{"type":"object","properties":{"orderedSubPhaseReferences":{"type":"string","description":"Ordered CSV of sub phase references to objects that contain more information about provisioning. For example, this can contain \"manualWorkItemDetails\" which indicate that there is further information in that object for this phase.","example":"manualWorkItemDetails"}},"description":"Provides additional details about provisioning for this request."},"preApprovalTriggerDetails":{"type":"object","properties":{"comment":{"type":"string","description":"Comment left for the pre-approval decision","example":"Access is Approved"},"reviewer":{"type":"string","description":"The reviewer of the pre-approval decision","example":"John Doe"},"decision":{"type":"string","enum":["APPROVED","REJECTED"],"description":"The decision of the pre-approval trigger","example":"APPROVED"}},"description":"Provides additional details about the pre-approval trigger for this request."},"accessRequestPhases":{"type":"array","items":{"type":"object","properties":{"started":{"type":"string","description":"The time that this phase started.","format":"date-time","example":"2020-07-11T00:00:00Z"},"finished":{"type":"string","description":"The time that this phase finished.","format":"date-time","example":"2020-07-12T00:00:00Z"},"name":{"type":"string","description":"The name of this phase.","example":"APPROVAL_PHASE"},"state":{"type":"string","enum":["PENDING","EXECUTING","COMPLETED","CANCELLED"],"description":"The state of this phase.","example":"COMPLETED"},"result":{"type":"string","enum":["SUCCESSFUL","FAILED"],"description":"The state of this phase.","example":"SUCCESSFUL"},"phaseReference":{"type":"string","description":"A reference to another object on the RequestedItemStatus that contains more details about the phase. Note that for the Provisioning phase, this will be empty if there are no manual work items.","example":"approvalDetails"}},"description":"Provides additional details about this access request phase."},"description":"A list of Phases that the Access Request has gone through in order, to help determine the status of the request."},"description":{"type":"string","description":"Description associated to the requested object.","example":"This is the Engineering role that engineers are granted."},"removeDate":{"type":"string","format":"date-time","description":"When the role access is scheduled for removal.","example":"2019-10-23T00:00:00.000Z"},"cancelable":{"type":"boolean","description":"True if the request can be canceled.","example":true},"accessRequestId":{"type":"string","format":"uuid","description":"This is the account activity id.","example":"ef38f94347e94562b5bb8424a56397d8"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/access-request-status","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Access Request Status","description":{"content":"The Access Request Status API returns a list of access request statuses based on the specified query parameters.\nAny token with any authority can request their own status. A token with ORG_ADMIN authority is required to call this API to get a list of statuses for other users.","type":"text/plain"},"url":{"path":["access-request-status"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Filter the results by the identity for which the requests were made. *me* indicates the current user. Mutually exclusive with *regarding-identity*.","type":"text/plain"},"key":"requested-for","value":""},{"disabled":false,"description":{"content":"Filter the results by the identity that made the requests. *me* indicates the current user. Mutually exclusive with *regarding-identity*.","type":"text/plain"},"key":"requested-by","value":""},{"disabled":false,"description":{"content":"Filter the results by the specified identity which is either the requester or target of the requests. *me* indicates the current user. Mutually exclusive with *requested-for* and *requested-by*.","type":"text/plain"},"key":"regarding-identity","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Max number of results to return.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results. Defaults to 0 if not specified.","type":"text/plain"},"key":"offset","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Access Request Status + + + +The Access Request Status API returns a list of access request statuses based on the specified query parameters. +Any token with any authority can request their own status. A token with ORG_ADMIN authority is required to call this API to get a list of statuses for other users. + +
      Query Parameters
      + +List of requested item status. + +
      Schema array
        cancelledRequestDetails object
        + +Provides additional details for a request that has been cancelled. + +
        owner object
        approvalDetails object[]
        + +Approval details for each item. + +
        originalOwner object
        + +Base identity/workgroup reference object representing the original owner, if forwarded. + +
        currentOwner object
        + +Base reference of approver that will make decision. + +
        reviewedBy object
        + +The identity who has reviewed the approval. + +
        errorMessages object[]
        + +If the request failed, includes any error messages that were generated. + +
        manualWorkItemDetails object[]
        + +Manual work items created for provisioning the item. + +
        originalOwner object
        + +Base identity/workgroup reference object representing the original owner, if forwarded. + +
        currentOwner object
        + +Base reference of approver that will make decision. + +
        requester object
        + +The identity that requested the item. + +
        requestedFor object
        + +The identity for whom the Access Request Status is requested for. + +
        requesterComment object
        + +The requester's comment. + +
        author object
        sodViolationContext object
        + +The details of the SOD violations for the associated approval. + +
        violationCheckResult object
        + +The inner object representing the completed SOD Violation check + +
        message object
        + +If the request failed, includes any error message that was generated. + +
        clientMetadata object
        + +Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on completion of the violation check. + +
      • property name* string
      • violationContexts object[]
        policy object
        + +Reference to the Policy that is being violated. + +
        conflictingAccessCriteria object
        + +The object which contains the left and right hand side of the entitlements that got violated according to the policy. + +
        leftCriteria object
        criteriaList object[]
        rightCriteria object
        criteriaList object[]
        violatedPolicies object[]
        + +A list of the Policies that were violated + +
        provisioningDetails object
        + +Provides additional details about provisioning for this request. + +
        preApprovalTriggerDetails object
        + +Provides additional details about the pre-approval trigger for this request. + +
        accessRequestPhases object[]
        + +A list of Phases that the Access Request has gone through in order, to help determine the status of the request. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/list-account-activities.api.mdx b/docs/sailpoint-api-v3/list-account-activities.api.mdx new file mode 100644 index 000000000..bd1a187bd --- /dev/null +++ b/docs/sailpoint-api-v3/list-account-activities.api.mdx @@ -0,0 +1,87 @@ +--- +id: list-account-activities +sidebar_label: Get a list of Account Activities +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listAccountActivities","tags":["Account Activities"],"description":"This gets a collection of account activities that satisfy the given query parameters.","parameters":[{"in":"query","name":"requested-for","schema":{"type":"string"},"description":"The identity that the activity was requested for. *me* indicates the current user. Mutually exclusive with *regarding-identity*.","required":false},{"in":"query","name":"requested-by","schema":{"type":"string"},"description":"The identity that requested the activity. *me* indicates the current user. Mutually exclusive with *regarding-identity*.","required":false},{"in":"query","name":"regarding-identity","schema":{"type":"string"},"description":"The specified identity will be either the requester or target of the account activity. *me* indicates the current user. Mutually exclusive with *requested-for* and *requested-by*.","required":false},{"in":"query","name":"type","schema":{"type":"string"},"description":"The type of account activity.","required":false},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\nFiltering is supported for the following fields and operators:\n**type**: *eq, in*\n**created**: *gt, lt, ge, le*\n**modified**: *gt, lt, ge, le*"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\nSorting is supported for the following fields: **type, created, modified**"}],"responses":{"200":{"description":"List of account activities","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Id of the account activity itself","example":"2c9180835d2e5168015d32f890ca1581"},"name":{"type":"string","example":"2c9180835d2e5168015d32f890ca1581"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"completed":{"type":"string","format":"date-time","nullable":true,"example":"2018-10-19T13:49:37.385Z"},"completionStatus":{"nullable":true,"type":"string","enum":["SUCCESS","FAILURE","INCOMPLETE","PENDING"]},"type":{"type":"string","example":"appRequest"},"requesterIdentitySummary":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"ID of this identity summary","example":"ff80818155fe8c080155fe8d925b0316"},"name":{"type":"string","description":"Human-readable display name of identity","example":"SailPoint Services"},"identityId":{"type":"string","description":"ID of the identity that this summary represents","example":"c15b9f5cca5a4e9599eaa0e64fa921bd"},"completed":{"type":"boolean","description":"Indicates if all access items for this summary have been decided on"}}},"targetIdentitySummary":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"ID of this identity summary","example":"ff80818155fe8c080155fe8d925b0316"},"name":{"type":"string","description":"Human-readable display name of identity","example":"SailPoint Services"},"identityId":{"type":"string","description":"ID of the identity that this summary represents","example":"c15b9f5cca5a4e9599eaa0e64fa921bd"},"completed":{"type":"boolean","description":"Indicates if all access items for this summary have been decided on"}}},"errors":{"nullable":true,"type":"array","items":{"type":"string"},"example":["sailpoint.connector.ConnectorException: java.lang.InterruptedException: Timeout waiting for response to message 0 from client 57a4ab97-ab3f-4aef-9fe2-0eaf15c73d26 after 60 seconds."]},"warnings":{"nullable":true,"type":"array","items":{"type":"string"},"example":["Some warning, another warning"]},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Item id","example":"2725138ee34949beb0d6cc982d2d4625"},"name":{"type":"string","description":"Human-readable display name of item"},"requested":{"type":"string","format":"date-time","description":"Date and time item was requested","example":"2017-07-11T18:45:37.098Z"},"approvalStatus":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"provisioningStatus":{"type":"string","enum":["PENDING","FINISHED","UNVERIFIABLE","COMMITED","FAILED","RETRY"],"description":"Provisioning state of an account activity item"},"requesterComment":{"type":"object","nullable":true,"properties":{"commenterId":{"type":"string","description":"Id of the identity making the comment","example":"2c918084660f45d6016617daa9210584"},"commenterName":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"},"body":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat."},"date":{"type":"string","format":"date-time","description":"Date and time comment was made","example":"2017-07-11T18:45:37.098Z"}}},"reviewerIdentitySummary":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"ID of this identity summary","example":"ff80818155fe8c080155fe8d925b0316"},"name":{"type":"string","description":"Human-readable display name of identity","example":"SailPoint Services"},"identityId":{"type":"string","description":"ID of the identity that this summary represents","example":"c15b9f5cca5a4e9599eaa0e64fa921bd"},"completed":{"type":"boolean","description":"Indicates if all access items for this summary have been decided on"}}},"reviewerComment":{"type":"object","nullable":true,"properties":{"commenterId":{"type":"string","description":"Id of the identity making the comment","example":"2c918084660f45d6016617daa9210584"},"commenterName":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"},"body":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat."},"date":{"type":"string","format":"date-time","description":"Date and time comment was made","example":"2017-07-11T18:45:37.098Z"}}},"operation":{"type":"string","enum":["ADD","CREATE","MODIFY","DELETE","DISABLE","ENABLE","UNLOCK","LOCK","REMOVE"],"description":"Represents an operation in an account activity item"},"attribute":{"type":"string","description":"Attribute to which account activity applies","nullable":true,"example":"detectedRoles"},"value":{"type":"string","description":"Value of attribute","nullable":true,"example":"Treasury Analyst [AccessProfile-1529010191212]"},"nativeIdentity":{"nullable":true,"type":"string","description":"Native identity in the target system to which the account activity applies","example":"Sandie.Camero"},"sourceId":{"type":"string","description":"Id of Source to which account activity applies","example":"2c91808363ef85290164000587130c0c"},"accountRequestInfo":{"type":"object","nullable":true,"properties":{"requestedObjectId":{"type":"string","description":"Id of requested object","example":"2c91808563ef85690164001c31140c0c"},"requestedObjectName":{"type":"string","description":"Human-readable name of requested object","example":"Treasury Analyst"},"requestedObjectType":{"type":"string","enum":["ACCESS_PROFILE","ROLE"],"description":"Enum represented the currently supported requestable object types. Additional values may be added in the future without notice.","example":"ACCESS_PROFILE"}},"description":"If an account activity item is associated with an access request, captures details of that request."},"clientMetadata":{"nullable":true,"type":"object","additionalProperties":{"type":"string"},"description":"Arbitrary key-value pairs, if any were included in the corresponding access request item"},"removeDate":{"nullable":true,"type":"string","description":"The date the role or access profile is no longer assigned to the specified identity.","format":"date-time","example":"2020-07-11T00:00:00Z"}}}},"executionStatus":{"type":"string","enum":["EXECUTING","VERIFYING","TERMINATED","COMPLETED"]},"clientMetadata":{"nullable":true,"type":"object","additionalProperties":{"type":"string"},"description":"Arbitrary key-value pairs, if any were included in the corresponding access request"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/account-activities","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get a list of Account Activities","description":{"content":"This gets a collection of account activities that satisfy the given query parameters.","type":"text/plain"},"url":{"path":["account-activities"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The identity that the activity was requested for. *me* indicates the current user. Mutually exclusive with *regarding-identity*.","type":"text/plain"},"key":"requested-for","value":""},{"disabled":false,"description":{"content":"The identity that requested the activity. *me* indicates the current user. Mutually exclusive with *regarding-identity*.","type":"text/plain"},"key":"requested-by","value":""},{"disabled":false,"description":{"content":"The specified identity will be either the requester or target of the account activity. *me* indicates the current user. Mutually exclusive with *requested-for* and *requested-by*.","type":"text/plain"},"key":"regarding-identity","value":""},{"disabled":false,"description":{"content":"The type of account activity.","type":"text/plain"},"key":"type","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\nFiltering is supported for the following fields and operators:\n**type**: *eq, in*\n**created**: *gt, lt, ge, le*\n**modified**: *gt, lt, ge, le*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\nSorting is supported for the following fields: **type, created, modified**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a list of Account Activities + + + +This gets a collection of account activities that satisfy the given query parameters. + +
      Query Parameters
      + +List of account activities + +
      Schema array
        requesterIdentitySummary object
        targetIdentitySummary object
        items object[]
        requesterComment object
        reviewerIdentitySummary object
        reviewerComment object
        accountRequestInfo object
        + +If an account activity item is associated with an access request, captures details of that request. + +
        clientMetadata object
        + +Arbitrary key-value pairs, if any were included in the corresponding access request item + +
      • property name* string
      • clientMetadata object
        + +Arbitrary key-value pairs, if any were included in the corresponding access request + +
      • property name* string
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/list-accounts.api.mdx b/docs/sailpoint-api-v3/list-accounts.api.mdx new file mode 100644 index 000000000..5fadf9349 --- /dev/null +++ b/docs/sailpoint-api-v3/list-accounts.api.mdx @@ -0,0 +1,76 @@ +--- +id: list-accounts +sidebar_label: Accounts List +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listAccounts","tags":["Accounts"],"description":"This returns a list of accounts. \nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:account-list:read"]}],"parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"example":"identityId eq \"2c9180858082150f0180893dbaf44201\"","description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**identityId**: *eq*\n\n**name**: *eq, in*\n\n**nativeIdentity**: *eq, in*\n\n**sourceId**: *eq, in*\n\n**uncorrelated**: *eq*"}],"responses":{"200":{"description":"List of account objects","content":{"application/json":{"schema":{"type":"array","items":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true},"modified":{"description":"Last modification date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true}}},{"type":"object","properties":{"sourceId":{"type":"string","example":"2c9180835d2e5168015d32f890ca1581"},"identityId":{"type":"string","example":"2c9180835d2e5168015d32f890ca1581"},"attributes":{"type":"object"},"authoritative":{"type":"boolean"},"description":{"type":"string"},"disabled":{"type":"boolean"},"locked":{"type":"boolean"},"nativeIdentity":{"type":"string"},"systemAccount":{"type":"boolean"},"uncorrelated":{"type":"boolean"},"uuid":{"type":"string"},"manuallyCorrelated":{"type":"boolean"},"hasEntitlements":{"type":"boolean"}}}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/accounts","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Accounts List","description":{"content":"This returns a list of accounts. \nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**identityId**: *eq*\n\n**name**: *eq, in*\n\n**nativeIdentity**: *eq, in*\n\n**sourceId**: *eq, in*\n\n**uncorrelated**: *eq*","type":"text/plain"},"key":"filters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Accounts List + + + +This returns a list of accounts. +A token with ORG_ADMIN authority is required to call this API. + +
      Query Parameters
      + +List of account objects + +
      Schema array
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/list-completed-approvals.api.mdx b/docs/sailpoint-api-v3/list-completed-approvals.api.mdx new file mode 100644 index 000000000..53c1e5d4c --- /dev/null +++ b/docs/sailpoint-api-v3/list-completed-approvals.api.mdx @@ -0,0 +1,139 @@ +--- +id: list-completed-approvals +sidebar_label: Completed Access Request Approvals List +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listCompletedApprovals","tags":["Access Request Approvals"],"description":"This endpoint returns list of completed approvals. See *owner-id* query parameter below for authorization info.","parameters":[{"in":"query","name":"owner-id","required":false,"schema":{"type":"string"},"description":"If present, the value returns only completed approvals for the specified identity.\n * ORG_ADMIN users can call this with any identity ID value.\n * ORG_ADMIN users can also fetch all the approvals in the org, when owner-id is not used.\n * Non-ORG_ADMIN users can only specify *me* or pass their own identity ID value.","example":"2c91808568c529c60168cca6f90c1313"},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","required":false,"schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**requestedFor.id**: *eq, in*\n\n**modified**: *gt, lt, ge, le*","example":"id eq \"2c91808568c529c60168cca6f90c1313\""},{"in":"query","name":"sorters","required":false,"schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **created, modified**","example":"modified"}],"responses":{"200":{"description":"List of Completed Approvals.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The approval id.","example":"id12345"},"name":{"type":"string","description":"The name of the approval.","example":"aName"},"created":{"type":"string","format":"date-time","description":"When the approval was created.","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","description":"When the approval was modified last time.","example":"2018-07-25T20:22:28.104Z"},"requestCreated":{"type":"string","format":"date-time","description":"When the access-request was created.","example":"2017-07-11T18:45:35.098Z"},"requestType":{"type":"string","enum":["GRANT_ACCESS","REVOKE_ACCESS"],"description":"Access request type. Defaults to GRANT_ACCESS. REVOKE_ACCESS type can only have a single Identity ID in the requestedFor field. Currently REVOKE_ACCESS is not supported for entitlements.","example":"GRANT_ACCESS"},"requester":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The identity that requested the item."},"requestedFor":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The identity for whom the item is requested for."},"reviewedBy":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The identity who has reviewed the approval."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The owner or approver of the approval."},"requestedObject":{"description":"The requested access item.","type":"object","properties":{"id":{"type":"string","description":"Id of the object.","example":"2c9180835d2e5168015d32f890ca1581"},"name":{"type":"string","description":"Name of the object.","example":"Applied Research Access"},"description":{"type":"string","description":"Description of the object.","example":"Access to research information, lab results, and schematics"},"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE","ENTITLEMENT"],"description":"Type of the object.","example":"ROLE"}}},"requesterComment":{"type":"object","properties":{"comment":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat"},"author":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"ID of the author","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"}}},"created":{"type":"string","format":"date-time","description":"Date and time comment was created","example":"2017-07-11T18:45:37.098Z"}},"description":"The requester's comment."},"reviewerComment":{"type":"object","properties":{"comment":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat"},"author":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"ID of the author","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"}}},"created":{"type":"string","format":"date-time","description":"Date and time comment was created","example":"2017-07-11T18:45:37.098Z"}},"description":"The approval's reviewer's comment."},"previousReviewersComments":{"type":"array","items":{"type":"object","properties":{"comment":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat"},"author":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"ID of the author","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"}}},"created":{"type":"string","format":"date-time","description":"Date and time comment was created","example":"2017-07-11T18:45:37.098Z"}}},"description":"The history of the previous reviewers comments."},"forwardHistory":{"type":"array","items":{"type":"object","properties":{"oldApproverName":{"type":"string","description":"Display name of approver that forwarded the approval.","example":"frank.mir"},"newApproverName":{"type":"string","description":"Display name of approver to whom the approval was forwarded.","example":"al.volta"},"comment":{"type":"string","description":"Comment made by old approver when forwarding.","example":"Fusce id orci vel consectetur amet ipsum quam."},"modified":{"type":"string","format":"date-time","description":"Time at which approval was forwarded.","example":"2019-08-23T18:52:57.398Z"}}},"description":"The history of approval forward action."},"commentRequiredWhenRejected":{"type":"boolean","description":"When true the rejector has to provide comments when rejecting","example":true},"state":{"description":"The final state of the approval","type":"string","enum":["APPROVED","REJECTED"],"example":"APPROVED"},"removeDate":{"type":"string","description":"The date the role or access profile is no longer assigned to the specified identity.","format":"date-time","example":"2020-07-11T00:00:00Z"},"removeDateUpdateRequested":{"type":"boolean","description":"If true, then the request was to change the remove date or sunset date.","example":true},"currentRemoveDate":{"type":"string","description":"The remove date or sunset date that was assigned at the time of the request.","format":"date-time","example":"2020-07-11T00:00:00Z"},"sodViolationContext":{"description":"The details of the SOD violations for the associated approval.","type":"object","properties":{"state":{"type":"string","enum":["SUCCESS","ERROR"],"description":"The status of SOD violation check","example":"SUCCESS"},"uuid":{"description":"The id of the Violation check event","type":"string","example":"f73d16e9-a038-46c5-b217-1246e15fdbdd"},"violationCheckResult":{"description":"The inner object representing the completed SOD Violation check","type":"object","properties":{"message":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}},"description":"If the request failed, includes any error message that was generated.","example":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An error has occurred during the SOD violation check"}]},"clientMetadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on completion of the violation check.","example":{"requestedAppName":"test-app","requestedAppId":"2c91808f7892918f0178b78da4a305a1"}},"violationContexts":{"type":"array","items":{"description":"The contextual information of the violated criteria","type":"object","properties":{"policy":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the Policy that is being violated."},"conflictingAccessCriteria":{"type":"object","description":"The object which contains the left and right hand side of the entitlements that got violated according to the policy.","properties":{"leftCriteria":{"type":"object","properties":{"criteriaList":{"type":"array","items":{"description":"Details of the Entitlement criteria","type":"object","properties":{"existing":{"type":"boolean","example":true,"description":"If the entitlement already belonged to the user or not."},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Entitlement ID","example":"2c918085771e9d3301773b3cb66f6398"},"name":{"type":"string","description":"Entitlement name","example":"My HR Entitlement"}}}}}},"rightCriteria":{"type":"object","properties":{"criteriaList":{"type":"array","items":{"description":"Details of the Entitlement criteria","type":"object","properties":{"existing":{"type":"boolean","example":true,"description":"If the entitlement already belonged to the user or not."},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Entitlement ID","example":"2c918085771e9d3301773b3cb66f6398"},"name":{"type":"string","description":"Entitlement name","example":"My HR Entitlement"}}}}}}}}}}},"violatedPolicies":{"type":"array","description":"A list of the Policies that were violated","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the policy that was violated","example":[{"type":"SOD_POLICY","id":"69129440-422d-4a23-aadd-35c828d5bfda","name":"HR Policy"}]}}}}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/access-request-approvals/completed","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Completed Access Request Approvals List","description":{"content":"This endpoint returns list of completed approvals. See *owner-id* query parameter below for authorization info.","type":"text/plain"},"url":{"path":["access-request-approvals","completed"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"If present, the value returns only completed approvals for the specified identity.\n * ORG_ADMIN users can call this with any identity ID value.\n * ORG_ADMIN users can also fetch all the approvals in the org, when owner-id is not used.\n * Non-ORG_ADMIN users can only specify *me* or pass their own identity ID value.","type":"text/plain"},"key":"owner-id","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**requestedFor.id**: *eq, in*\n\n**modified**: *gt, lt, ge, le*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **created, modified**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Completed Access Request Approvals List + + + +This endpoint returns list of completed approvals. See *owner-id* query parameter below for authorization info. + +
      Query Parameters
      + +List of Completed Approvals. + +
      Schema array
        requester object
        + +The identity that requested the item. + +
        requestedFor object
        + +The identity for whom the item is requested for. + +
        reviewedBy object
        + +The identity who has reviewed the approval. + +
        owner object
        + +The owner or approver of the approval. + +
        requestedObject object
        + +The requested access item. + +
        requesterComment object
        + +The requester's comment. + +
        author object
        reviewerComment object
        + +The approval's reviewer's comment. + +
        author object
        previousReviewersComments object[]
        + +The history of the previous reviewers comments. + +
        author object
        forwardHistory object[]
        + +The history of approval forward action. + +
        sodViolationContext object
        + +The details of the SOD violations for the associated approval. + +
        violationCheckResult object
        + +The inner object representing the completed SOD Violation check + +
        message object
        + +If the request failed, includes any error message that was generated. + +
        clientMetadata object
        + +Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on completion of the violation check. + +
      • property name* string
      • violationContexts object[]
        policy object
        + +Reference to the Policy that is being violated. + +
        conflictingAccessCriteria object
        + +The object which contains the left and right hand side of the entitlements that got violated according to the policy. + +
        leftCriteria object
        criteriaList object[]
        rightCriteria object
        criteriaList object[]
        violatedPolicies object[]
        + +A list of the Policies that were violated + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/list-identity-access-review-items.api.mdx b/docs/sailpoint-api-v3/list-identity-access-review-items.api.mdx new file mode 100644 index 000000000..ed4f24e1c --- /dev/null +++ b/docs/sailpoint-api-v3/list-identity-access-review-items.api.mdx @@ -0,0 +1,111 @@ +--- +id: list-identity-access-review-items +sidebar_label: List of Access Review Items +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listIdentityAccessReviewItems","tags":["Certifications"],"description":"This API returns a list of access review items for an identity campaign certification. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. This API does not support requests for certifications assigned to Governance Groups.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The identity campaign certification ID","example":"ef38f94347e94562b5bb8424a56397d8"},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**type / access.type**: *eq*\n\n**completed**: *eq, ne*\n\n**identitySummary.id**: *eq, in*\n\n**identitySummary.name**: *eq, sw*\n\n**access.id**: *eq, in*\n\n**access.name**: *eq, sw*\n\n**entitlement.sourceName**: *eq, sw*\n\n**accessProfile.sourceName**: *eq, sw*"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **identitySummary.name, access.name, access.type, entitlement.sourceName, accessProfile.sourceName**"},{"in":"query","name":"entitlements","schema":{"type":"string"},"description":"Filter results to view access review items that pertain to any of the specified comma-separated entitlement IDs.\n\nAn error will occur if this param is used with **access-profiles** or **roles** as only one of these query params can be used at a time."},{"in":"query","name":"access-profiles","schema":{"type":"string"},"description":"Filter results to view access review items that pertain to any of the specified comma-separated access-profle IDs.\n\nAn error will occur if this param is used with **entitlements** or **roles** as only one of these query params can be used at a time."},{"in":"query","name":"roles","schema":{"type":"string"},"description":"Filter results to view access review items that pertain to any of the specified comma-separated role IDs.\n\nAn error will occur if this param is used with **entitlements** or **access-profiles** as only one of these query params can be used at a time."}],"responses":{"200":{"description":"A list of access review items","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"accessSummary":{"type":"object","description":"An object holding the access that is being reviewed","properties":{"access":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"The ID of the item being certified","example":"2c9180867160846801719932c5153fb7"},"name":{"type":"string","description":"The name of the item being certified","example":"Entitlement for Company Database"}}},"entitlement":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"The id for the entitlement","example":"2c918085718230600171993742c63558"},"name":{"type":"string","description":"The name of the entitlement","example":"CN=entitlement.bbb7c650"},"description":{"nullable":true,"type":"string","description":"Information about the entitlement","example":"Gives read/write access to the company database"},"privileged":{"type":"boolean","example":false,"description":"Indicates if the entitlement is a privileged entitlement"},"owner":{"type":"object","nullable":true,"properties":{"type":{"type":"string","description":"The type can only be IDENTITY. This is read-only","example":"IDENTITY"},"id":{"type":"string","description":"Identity id.","example":"5168015d32f890ca15812c9180835d2e"},"name":{"type":"string","description":"Human-readable display name of identity. This is read-only","example":"Alison Ferguso"},"email":{"type":"string","description":"Email address of identity. This is read-only","example":"alison.ferguso@identitysoon.com"}}},"attributeName":{"type":"string","description":"The name of the attribute on the source","example":"memberOf"},"attributeValue":{"type":"string","description":"The value of the attribute on the source","example":"CN=entitlement.bbb7c650"},"sourceSchemaObjectType":{"type":"string","description":"The schema object type on the source used to represent the entitlement and its attributes","example":"groups"},"sourceName":{"type":"string","description":"The name of the source for which this entitlement belongs","example":"ODS-AD-Source"},"sourceType":{"type":"string","description":"The type of the source for which the entitlement belongs","example":"Active Directory - Direct"},"hasPermissions":{"type":"boolean","description":"Indicates if the entitlement has permissions","example":false},"isPermission":{"type":"boolean","description":"Indicates if the entitlement is a representation of an account permission","example":false},"revocable":{"type":"boolean","description":"Indicates whether the entitlement can be revoked","example":true},"cloudGoverned":{"type":"boolean","description":"True if the entitlement is cloud governed"},"account":{"type":"object","nullable":true,"description":"Information about the status of the entitlement","properties":{"nativeIdentity":{"type":"string","description":"The native identity for this account","example":"CN=Alison Ferguso"},"disabled":{"type":"boolean","example":false,"description":"Indicates whether this account is currently disabled"},"locked":{"type":"boolean","example":false,"description":"Indicates whether this account is currently locked"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"nullable":true,"type":"string","description":"The id associated with the account","example":"2c9180857182305e0171993737eb29e6"},"name":{"nullable":true,"type":"string"},"created":{"nullable":true,"type":"string","format":"date-time","description":"When the account was created","example":"2020-04-20T20:11:05.067Z"},"modified":{"nullable":true,"type":"string","format":"date-time","description":"When the account was last modified","example":"2020-05-20T18:57:16.987Z"}}}}},"accessProfile":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Access Profile","example":"2c91808a7190d06e01719938fcd20792"},"name":{"type":"string","description":"Name of the Access Profile","example":"Employee-database-read-write"},"description":{"type":"string","description":"Information about the Access Profile","example":"Collection of entitlements to read/write the employee database"},"privileged":{"type":"boolean","description":"Indicates if the entitlement is a privileged entitlement"},"cloudGoverned":{"type":"boolean","description":"True if the entitlement is cloud governed"},"endDate":{"nullable":true,"type":"string","format":"date-time","description":"The date at which a user's access expires","example":"2021-12-25T00:00:00.000Z"},"owner":{"type":"object","nullable":true,"properties":{"type":{"type":"string","description":"The type can only be IDENTITY. This is read-only","example":"IDENTITY"},"id":{"type":"string","description":"Identity id.","example":"5168015d32f890ca15812c9180835d2e"},"name":{"type":"string","description":"Human-readable display name of identity. This is read-only","example":"Alison Ferguso"},"email":{"type":"string","description":"Email address of identity. This is read-only","example":"alison.ferguso@identitysoon.com"}},"description":"Owner of the Access Profile"},"entitlements":{"type":"array","description":"A list of entitlements associated with this Access Profile","items":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"The id for the entitlement","example":"2c918085718230600171993742c63558"},"name":{"type":"string","description":"The name of the entitlement","example":"CN=entitlement.bbb7c650"},"description":{"nullable":true,"type":"string","description":"Information about the entitlement","example":"Gives read/write access to the company database"},"privileged":{"type":"boolean","example":false,"description":"Indicates if the entitlement is a privileged entitlement"},"owner":{"type":"object","nullable":true,"properties":{"type":{"type":"string","description":"The type can only be IDENTITY. This is read-only","example":"IDENTITY"},"id":{"type":"string","description":"Identity id.","example":"5168015d32f890ca15812c9180835d2e"},"name":{"type":"string","description":"Human-readable display name of identity. This is read-only","example":"Alison Ferguso"},"email":{"type":"string","description":"Email address of identity. This is read-only","example":"alison.ferguso@identitysoon.com"}}},"attributeName":{"type":"string","description":"The name of the attribute on the source","example":"memberOf"},"attributeValue":{"type":"string","description":"The value of the attribute on the source","example":"CN=entitlement.bbb7c650"},"sourceSchemaObjectType":{"type":"string","description":"The schema object type on the source used to represent the entitlement and its attributes","example":"groups"},"sourceName":{"type":"string","description":"The name of the source for which this entitlement belongs","example":"ODS-AD-Source"},"sourceType":{"type":"string","description":"The type of the source for which the entitlement belongs","example":"Active Directory - Direct"},"hasPermissions":{"type":"boolean","description":"Indicates if the entitlement has permissions","example":false},"isPermission":{"type":"boolean","description":"Indicates if the entitlement is a representation of an account permission","example":false},"revocable":{"type":"boolean","description":"Indicates whether the entitlement can be revoked","example":true},"cloudGoverned":{"type":"boolean","description":"True if the entitlement is cloud governed"},"account":{"type":"object","nullable":true,"description":"Information about the status of the entitlement","properties":{"nativeIdentity":{"type":"string","description":"The native identity for this account","example":"CN=Alison Ferguso"},"disabled":{"type":"boolean","example":false,"description":"Indicates whether this account is currently disabled"},"locked":{"type":"boolean","example":false,"description":"Indicates whether this account is currently locked"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"nullable":true,"type":"string","description":"The id associated with the account","example":"2c9180857182305e0171993737eb29e6"},"name":{"nullable":true,"type":"string"},"created":{"nullable":true,"type":"string","format":"date-time","description":"When the account was created","example":"2020-04-20T20:11:05.067Z"},"modified":{"nullable":true,"type":"string","format":"date-time","description":"When the account was last modified","example":"2020-05-20T18:57:16.987Z"}}}}}},"created":{"type":"string","description":"Date the Access Profile was created.","format":"date-time","example":"2021-01-01T22:32:58.104Z"},"modified":{"type":"string","description":"Date the Access Profile was last modified.","format":"date-time","example":"2021-02-01T22:32:58.104Z"}}},"role":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"The id for the Role","example":"2c91808a7190d06e0171993907fd0794"},"name":{"type":"string","description":"The name of the Role","example":"Accounting-Employees"},"description":{"type":"string","description":"Information about the Role","example":"Role for members of the accounting department with the necessary Access Profiles"},"privileged":{"type":"boolean","description":"Indicates if the entitlement is a privileged entitlement"},"owner":{"type":"object","nullable":true,"properties":{"type":{"type":"string","description":"The type can only be IDENTITY. This is read-only","example":"IDENTITY"},"id":{"type":"string","description":"Identity id.","example":"5168015d32f890ca15812c9180835d2e"},"name":{"type":"string","description":"Human-readable display name of identity. This is read-only","example":"Alison Ferguso"},"email":{"type":"string","description":"Email address of identity. This is read-only","example":"alison.ferguso@identitysoon.com"}}},"revocable":{"type":"boolean","description":"Indicates whether the Role can be revoked or requested"},"endDate":{"type":"string","format":"date-time","description":"The date when a user's access expires.","example":"2021-12-25T00:00:00.000Z"},"accessProfiles":{"type":"array","description":"The list of Access Profiles associated with this Role","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Access Profile","example":"2c91808a7190d06e01719938fcd20792"},"name":{"type":"string","description":"Name of the Access Profile","example":"Employee-database-read-write"},"description":{"type":"string","description":"Information about the Access Profile","example":"Collection of entitlements to read/write the employee database"},"privileged":{"type":"boolean","description":"Indicates if the entitlement is a privileged entitlement"},"cloudGoverned":{"type":"boolean","description":"True if the entitlement is cloud governed"},"endDate":{"nullable":true,"type":"string","format":"date-time","description":"The date at which a user's access expires","example":"2021-12-25T00:00:00.000Z"},"owner":{"type":"object","nullable":true,"properties":{"type":{"type":"string","description":"The type can only be IDENTITY. This is read-only","example":"IDENTITY"},"id":{"type":"string","description":"Identity id.","example":"5168015d32f890ca15812c9180835d2e"},"name":{"type":"string","description":"Human-readable display name of identity. This is read-only","example":"Alison Ferguso"},"email":{"type":"string","description":"Email address of identity. This is read-only","example":"alison.ferguso@identitysoon.com"}},"description":"Owner of the Access Profile"},"entitlements":{"type":"array","description":"A list of entitlements associated with this Access Profile","items":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"The id for the entitlement","example":"2c918085718230600171993742c63558"},"name":{"type":"string","description":"The name of the entitlement","example":"CN=entitlement.bbb7c650"},"description":{"nullable":true,"type":"string","description":"Information about the entitlement","example":"Gives read/write access to the company database"},"privileged":{"type":"boolean","example":false,"description":"Indicates if the entitlement is a privileged entitlement"},"owner":{"type":"object","nullable":true,"properties":{"type":{"type":"string","description":"The type can only be IDENTITY. This is read-only","example":"IDENTITY"},"id":{"type":"string","description":"Identity id.","example":"5168015d32f890ca15812c9180835d2e"},"name":{"type":"string","description":"Human-readable display name of identity. This is read-only","example":"Alison Ferguso"},"email":{"type":"string","description":"Email address of identity. This is read-only","example":"alison.ferguso@identitysoon.com"}}},"attributeName":{"type":"string","description":"The name of the attribute on the source","example":"memberOf"},"attributeValue":{"type":"string","description":"The value of the attribute on the source","example":"CN=entitlement.bbb7c650"},"sourceSchemaObjectType":{"type":"string","description":"The schema object type on the source used to represent the entitlement and its attributes","example":"groups"},"sourceName":{"type":"string","description":"The name of the source for which this entitlement belongs","example":"ODS-AD-Source"},"sourceType":{"type":"string","description":"The type of the source for which the entitlement belongs","example":"Active Directory - Direct"},"hasPermissions":{"type":"boolean","description":"Indicates if the entitlement has permissions","example":false},"isPermission":{"type":"boolean","description":"Indicates if the entitlement is a representation of an account permission","example":false},"revocable":{"type":"boolean","description":"Indicates whether the entitlement can be revoked","example":true},"cloudGoverned":{"type":"boolean","description":"True if the entitlement is cloud governed"},"account":{"type":"object","nullable":true,"description":"Information about the status of the entitlement","properties":{"nativeIdentity":{"type":"string","description":"The native identity for this account","example":"CN=Alison Ferguso"},"disabled":{"type":"boolean","example":false,"description":"Indicates whether this account is currently disabled"},"locked":{"type":"boolean","example":false,"description":"Indicates whether this account is currently locked"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"nullable":true,"type":"string","description":"The id associated with the account","example":"2c9180857182305e0171993737eb29e6"},"name":{"nullable":true,"type":"string"},"created":{"nullable":true,"type":"string","format":"date-time","description":"When the account was created","example":"2020-04-20T20:11:05.067Z"},"modified":{"nullable":true,"type":"string","format":"date-time","description":"When the account was last modified","example":"2020-05-20T18:57:16.987Z"}}}}}},"created":{"type":"string","description":"Date the Access Profile was created.","format":"date-time","example":"2021-01-01T22:32:58.104Z"},"modified":{"type":"string","description":"Date the Access Profile was last modified.","format":"date-time","example":"2021-02-01T22:32:58.104Z"}}}}}}}},"identitySummary":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the identity summary","example":"2c91808772a504f50172a9540e501ba7"},"name":{"type":"string","description":"Name of the linked identity","example":"Alison Ferguso"},"identityId":{"type":"string","description":"The ID of the identity being certified","example":"2c9180857182306001719937377a33de"},"completed":{"type":"boolean","description":"Indicates whether the review items for the linked identity's certification have been completed"}}},"id":{"type":"string","description":"The review item's id","example":"ef38f94347e94562b5bb8424a56397d8"},"completed":{"type":"boolean","description":"Whether the review item is complete","example":false},"newAccess":{"type":"boolean","description":"Indicates whether the review item is for new access to a source"},"decision":{"type":"string","description":"The decision to approve or revoke the review item","enum":["APPROVE","REVOKE"],"example":"APPROVE"},"comments":{"nullable":true,"type":"string","description":"Comments for this review item","example":"This user still needs access to this source"}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/certifications/{id}/access-review-items","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"List of Access Review Items","description":{"content":"This API returns a list of access review items for an identity campaign certification. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. This API does not support requests for certifications assigned to Governance Groups.","type":"text/plain"},"url":{"path":["certifications",":id","access-review-items"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**type / access.type**: *eq*\n\n**completed**: *eq, ne*\n\n**identitySummary.id**: *eq, in*\n\n**identitySummary.name**: *eq, sw*\n\n**access.id**: *eq, in*\n\n**access.name**: *eq, sw*\n\n**entitlement.sourceName**: *eq, sw*\n\n**accessProfile.sourceName**: *eq, sw*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **identitySummary.name, access.name, access.type, entitlement.sourceName, accessProfile.sourceName**","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"Filter results to view access review items that pertain to any of the specified comma-separated entitlement IDs.\n\nAn error will occur if this param is used with **access-profiles** or **roles** as only one of these query params can be used at a time.","type":"text/plain"},"key":"entitlements","value":""},{"disabled":false,"description":{"content":"Filter results to view access review items that pertain to any of the specified comma-separated access-profle IDs.\n\nAn error will occur if this param is used with **entitlements** or **roles** as only one of these query params can be used at a time.","type":"text/plain"},"key":"access-profiles","value":""},{"disabled":false,"description":{"content":"Filter results to view access review items that pertain to any of the specified comma-separated role IDs.\n\nAn error will occur if this param is used with **entitlements** or **access-profiles** as only one of these query params can be used at a time.","type":"text/plain"},"key":"roles","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The identity campaign certification ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List of Access Review Items + + + +This API returns a list of access review items for an identity campaign certification. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. This API does not support requests for certifications assigned to Governance Groups. + +
      Path Parameters
      Query Parameters
      + +A list of access review items + +
      Schema array
        accessSummary object
        + +An object holding the access that is being reviewed + +
        access object
        entitlement object
        owner object
        account object
        + +Information about the status of the entitlement + +
        accessProfile object
        owner object
        + +Owner of the Access Profile + +
        entitlements object[]
        + +A list of entitlements associated with this Access Profile + +
        owner object
        account object
        + +Information about the status of the entitlement + +
        role object
        owner object
        accessProfiles object[]
        + +The list of Access Profiles associated with this Role + +
        owner object
        + +Owner of the Access Profile + +
        entitlements object[]
        + +A list of entitlements associated with this Access Profile + +
        owner object
        account object
        + +Information about the status of the entitlement + +
        identitySummary object
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/list-identity-certifications.api.mdx b/docs/sailpoint-api-v3/list-identity-certifications.api.mdx new file mode 100644 index 000000000..2e87b78d7 --- /dev/null +++ b/docs/sailpoint-api-v3/list-identity-certifications.api.mdx @@ -0,0 +1,75 @@ +--- +id: list-identity-certifications +sidebar_label: Identity Campaign Certifications by IDs +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listIdentityCertifications","tags":["Certifications"],"description":"This API returns a list of identity campaign certifications that satisfy the given query parameters. Any authenticated token can call this API, but only certifications you are authorized to review will be returned. This API does not support requests for certifications assigned to Governance Groups.","parameters":[{"in":"query","name":"reviewer-identity","schema":{"type":"string"},"description":"The ID of reviewer identity. *me* indicates the current user.","required":false},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\nFiltering is supported for the following fields and operators:\n**id**: *eq, in*\n**campaign.id**: *eq, in*\n**phase**: *eq*\n**completed**: *eq, ne*"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\nSorting is supported for the following fields: **name, due, signed**"}],"responses":{"200":{"description":"List of identity campaign certifications","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"example":"2c9180835d2e5168015d32f890ca1581","type":"string"},"name":{"example":"Source Owner Access Review for Employees [source]","type":"string"},"campaign":{"type":"object","required":["id","name","type","campaignType","description"],"properties":{"id":{"type":"string","description":"The unique ID of the campaign.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the campaign.","example":"Campaign Name"},"type":{"type":"string","enum":["CAMPAIGN"],"description":"The type of object that is being referenced.","example":"CAMPAIGN"},"campaignType":{"type":"string","enum":["MANAGER","SOURCE_OWNER","SEARCH"],"description":"The type of the campaign.","example":"MANAGER"},"description":{"type":"string","description":"The description of the campaign set by the admin who created it.","nullable":true,"example":"A description of the campaign"}}},"completed":{"type":"boolean","description":"Have all decisions been made?","example":true},"identitiesCompleted":{"type":"integer","description":"The number of identities for whom all decisions have been made and are complete.","example":5},"identitiesTotal":{"type":"integer","description":"The total number of identities in the Certification, both complete and incomplete.","example":10},"created":{"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"},"modified":{"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"},"decisionsMade":{"type":"integer","description":"The number of approve/revoke/acknowledge decisions that have been made.","example":20},"decisionsTotal":{"type":"integer","description":"The total number of approve/revoke/acknowledge decisions.","example":40},"due":{"type":"string","format":"date-time","description":"The due date of the certification.","example":"2018-10-19T13:49:37.385Z"},"signed":{"type":"string","format":"date-time","nullable":true,"description":"The date the reviewer signed off on the Certification.","example":"2018-10-19T13:49:37.385Z"},"reviewer":{"type":"object","properties":{"id":{"type":"string","description":"The id of the reviewer.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the reviewer.","example":"Reviewer Name"},"email":{"type":"string","description":"The email of the reviewing identity.","example":"reviewer@test.com"},"type":{"type":"string","enum":["IDENTITY"]},"created":{"nullable":true,"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"},"modified":{"nullable":true,"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"}}},"reassignment":{"type":"object","nullable":true,"properties":{"from":{"type":"object","properties":{"id":{"type":"string","description":"The id of the certification.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the certification.","example":"Certification Name"},"type":{"type":"string","enum":["CERTIFICATION"]},"reviewer":{"type":"object","properties":{"id":{"type":"string","description":"The id of the reviewer.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the reviewer.","example":"Reviewer Name"},"email":{"type":"string","description":"The email of the reviewing identity.","example":"reviewer@test.com"},"type":{"type":"string","enum":["IDENTITY"]},"created":{"nullable":true,"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"},"modified":{"nullable":true,"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"}}}}},"comment":{"type":"string","description":"The comment entered when the Certification was reassigned","example":"Reassigned for a reason"}}},"hasErrors":{"type":"boolean","example":false},"errorMessage":{"nullable":true,"type":"string","example":"The certification has an error"},"phase":{"type":"string","description":"The current phase of the campaign.\n* `STAGED`: The campaign is waiting to be activated.\n* `ACTIVE`: The campaign is active.\n* `SIGNED`: The reviewer has signed off on the campaign, and it is considered complete.\n","enum":["STAGED","ACTIVE","SIGNED"],"example":"ACTIVE"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/certifications","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Identity Campaign Certifications by IDs","description":{"content":"This API returns a list of identity campaign certifications that satisfy the given query parameters. Any authenticated token can call this API, but only certifications you are authorized to review will be returned. This API does not support requests for certifications assigned to Governance Groups.","type":"text/plain"},"url":{"path":["certifications"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The ID of reviewer identity. *me* indicates the current user.","type":"text/plain"},"key":"reviewer-identity","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\nFiltering is supported for the following fields and operators:\n**id**: *eq, in*\n**campaign.id**: *eq, in*\n**phase**: *eq*\n**completed**: *eq, ne*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\nSorting is supported for the following fields: **name, due, signed**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Identity Campaign Certifications by IDs + + + +This API returns a list of identity campaign certifications that satisfy the given query parameters. Any authenticated token can call this API, but only certifications you are authorized to review will be returned. This API does not support requests for certifications assigned to Governance Groups. + +
      Query Parameters
      + +List of identity campaign certifications + +
      Schema array
        campaign object
        reviewer object
        reassignment object
        from object
        reviewer object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/list-identity-profiles.api.mdx b/docs/sailpoint-api-v3/list-identity-profiles.api.mdx new file mode 100644 index 000000000..491ce0b77 --- /dev/null +++ b/docs/sailpoint-api-v3/list-identity-profiles.api.mdx @@ -0,0 +1,76 @@ +--- +id: list-identity-profiles +sidebar_label: Identity Profiles List +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listIdentityProfiles","tags":["Identity Profiles"],"description":"This returns a list of Identity Profiles based on the specified query parameters.\nA token with ORG_ADMIN or API authority is required to call this API to get a list of Identity Profiles.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, ne*\n\n**name**: *eq, ne*\n\n**priority**: *eq, ne*"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **id**, **name**, **priority**"}],"responses":{"200":{"description":"List of identityProfiles.","content":{"application/json":{"schema":{"type":"array","items":{"allOf":[{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},{"type":"object","properties":{"description":{"type":"string","description":"The description of the Identity Profile.","example":"My custom flat file profile"},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The owner of the Identity Profile."},"priority":{"type":"integer","format":"int64","description":"The priority for an Identity Profile.","example":10},"authoritativeSource":{"type":"object","properties":{"type":{"type":"string","enum":["SOURCE"],"description":"Type of the object to which this reference applies","example":"SOURCE"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c9180835d191a86015d28455b4b232a"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"HR Active Directory"}}},"identityRefreshRequired":{"type":"boolean","description":"True if a identity refresh is needed. Typically triggered when a change on the source has been made.","example":true},"identityCount":{"type":"integer","description":"The number of identities that belong to the Identity Profile.","format":"int32","example":8},"identityAttributeConfig":{"type":"object","description":"Defines all the identity attribute mapping configurations. This defines how to generate or collect data for each identity attributes in identity refresh process.","properties":{"enabled":{"description":"The backend will only promote values if the profile/mapping is enabled.","type":"boolean","example":true},"attributeTransforms":{"type":"array","items":{"type":"object","description":"Defines a transformation definition for an identity attribute.","properties":{"identityAttributeName":{"type":"string","description":"Name of the identity attribute.","example":"email"},"transformDefinition":{"description":"The seaspray transformation definition.","type":"object","properties":{"type":{"type":"string","description":"The type of the transform definition.","example":"accountAttribute"},"attributes":{"type":"object","additionalProperties":{"type":"object"},"description":"Arbitrary key-value pairs to store any metadata for the object","example":{"attributeName":"e-mail","sourceName":"MySource","sourceId":"2c9180877a826e68017a8c0b03da1a53"}}}}}}}}},"identityExceptionReportReference":{"type":"object","properties":{"taskResultId":{"type":"string","format":"uuid","description":"The id of the task result.","example":"2c918086795cd09201795d5f7d7533df"},"reportName":{"type":"string","example":"My annual report","description":"The name of the report."}}},"hasTimeBasedAttr":{"description":"Indicates the value of requiresPeriodicRefresh attribute for the Identity Profile.","type":"boolean","example":true}}}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:identity-profile:read"]}],"method":"get","path":"/identity-profiles","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Identity Profiles List","description":{"content":"This returns a list of Identity Profiles based on the specified query parameters.\nA token with ORG_ADMIN or API authority is required to call this API to get a list of Identity Profiles.","type":"text/plain"},"url":{"path":["identity-profiles"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, ne*\n\n**name**: *eq, ne*\n\n**priority**: *eq, ne*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **id**, **name**, **priority**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Identity Profiles List + + + +This returns a list of Identity Profiles based on the specified query parameters. +A token with ORG_ADMIN or API authority is required to call this API to get a list of Identity Profiles. + +
      Query Parameters
      + +List of identityProfiles. + +
      Schema array
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/list-lifecycle-states.api.mdx b/docs/sailpoint-api-v3/list-lifecycle-states.api.mdx new file mode 100644 index 000000000..b9f599f38 --- /dev/null +++ b/docs/sailpoint-api-v3/list-lifecycle-states.api.mdx @@ -0,0 +1,76 @@ +--- +id: list-lifecycle-states +sidebar_label: Lists LifecycleStates +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listLifecycleStates","tags":["Lifecycle States"],"description":"This end-point lists all the LifecycleStates associated with IdentityProfiles.\nA token with API, or ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:identity-profile-lifecycle-state:read"]}],"parameters":[{"in":"path","name":"identity-profile-id","description":"The IdentityProfile id","required":true,"schema":{"type":"string"}},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **created, modified**"}],"responses":{"200":{"description":"List of LifecycleState objects","content":{"application/json":{"schema":{"type":"array","items":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true},"modified":{"description":"Last modification date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true}}},{"type":"object","required":["technicalName"],"properties":{"enabled":{"type":"boolean","example":true,"description":"Whether the lifecycle state is enabled or disabled."},"technicalName":{"type":"string","example":"Technical Name","description":"The technical name for lifecycle state. This is for internal use."},"description":{"type":"string","example":"Lifecycle description","description":"Lifecycle state description."},"identityCount":{"type":"integer","format":"int32","example":42,"readOnly":true,"description":"Number of identities that have the lifecycle state."},"emailNotificationOption":{"type":"object","description":"This is used for representing email configuration for a lifecycle state","properties":{"notifyManagers":{"type":"boolean","example":true,"description":"If true, then the manager is notified of the lifecycle state change."},"notifyAllAdmins":{"type":"boolean","example":true,"description":"If true, then all the admins are notified of the lifecycle state change."},"notifySpecificUsers":{"type":"boolean","example":true,"description":"If true, then the users specified in \"emailAddressList\" below are notified of lifecycle state change."},"emailAddressList":{"type":"array","example":["test@test.com","test2@test.com"],"items":{"type":"string"},"description":"List of user email addresses. If \"notifySpecificUsers\" option is true, then these users are notified of lifecycle state change."}}},"accountActions":{"type":"array","items":{"type":"object","description":"Object for specifying Actions to be performed on a specified list of sources' account.","properties":{"action":{"example":"ENABLE","type":"string","description":"Describes if action will be enabled or disabled","enum":["ENABLE","DISABLE"]},"sourceIds":{"type":"array","items":{"type":"string"},"uniqueItems":true,"example":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"],"description":"List of unique source IDs. The sources must have the ENABLE feature or flat file source. See \"/sources\" endpoint for source features."}}}},"accessProfileIds":{"type":"array","items":{"type":"string"},"uniqueItems":true,"example":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"],"description":"List of unique access-profile IDs that are associated with the lifecycle state."}}}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/identity-profiles/{identity-profile-id}/lifecycle-states","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Lists LifecycleStates","description":{"content":"This end-point lists all the LifecycleStates associated with IdentityProfiles.\nA token with API, or ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["identity-profiles",":identity-profile-id","lifecycle-states"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **created, modified**","type":"text/plain"},"key":"sorters","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The IdentityProfile id","type":"text/plain"},"type":"any","value":"","key":"identity-profile-id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Lists LifecycleStates + + + +This end-point lists all the LifecycleStates associated with IdentityProfiles. +A token with API, or ORG_ADMIN authority is required to call this API. + +
      Path Parameters
      Query Parameters
      + +List of LifecycleState objects + +
      Schema array
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/list-oauth-clients.api.mdx b/docs/sailpoint-api-v3/list-oauth-clients.api.mdx new file mode 100644 index 000000000..ea7b3cbbe --- /dev/null +++ b/docs/sailpoint-api-v3/list-oauth-clients.api.mdx @@ -0,0 +1,77 @@ +--- +id: list-oauth-clients +sidebar_label: List OAuth Clients +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listOauthClients","tags":["OAuth Clients"],"description":"This gets a list of OAuth clients.\nRequest will require the following security scope:\n- 'idn:oathkeeper-client-list:read'","responses":{"200":{"description":"List of OAuth clients.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the OAuth client","example":"2c9180835d2e5168015d32f890ca1581"},"businessName":{"type":"string","description":"The name of the business the API Client should belong to","example":"Acme-Solar"},"homepageUrl":{"type":"string","description":"The homepage URL associated with the owner of the API Client","example":"http://localhost:12345"},"name":{"type":"string","description":"A human-readable name for the API Client","example":"Demo API Client"},"description":{"type":"string","description":"A description of the API Client","example":"An API client used for the authorization_code, refresh_token, and client_credentials flows"},"accessTokenValiditySeconds":{"type":"string","description":"The number of seconds an access token generated for this API Client is valid for","example":750},"refreshTokenValiditySeconds":{"type":"string","description":"The number of seconds a refresh token generated for this API Client is valid for","example":86400},"redirectUris":{"type":"array","items":{"type":"string"},"description":"A list of the approved redirect URIs used with the authorization_code flow","example":["http://localhost:12345"]},"grantTypes":{"type":"array","items":{"description":"OAuth2 Grant Type","type":"string","example":"CLIENT_CREDENTIALS","enum":["CLIENT_CREDENTIALS","AUTHORIZATION_CODE","REFRESH_TOKEN"]},"description":"A list of OAuth 2.0 grant types this API Client can be used with","example":["AUTHORIZATION_CODE","CLIENT_CREDENTIALS","REFRESH_TOKEN"]},"accessType":{"description":"The access type (online or offline) of this API Client","example":"OFFLINE","type":"string","enum":["ONLINE","OFFLINE"]},"type":{"description":"The type of the API Client (public or confidential)","example":"CONFIDENTIAL","type":"string","enum":["CONFIDENTIAL","PUBLIC"]},"internal":{"type":"boolean","description":"An indicator of whether the API Client can be used for requests internal to IDN","example":false},"enabled":{"type":"boolean","description":"An indicator of whether the API Client is enabled for use","example":true},"strongAuthSupported":{"type":"boolean","description":"An indicator of whether the API Client supports strong authentication","example":false},"claimsSupported":{"type":"boolean","description":"An indicator of whether the API Client supports the serialization of SAML claims when used with the authorization_code flow","example":false},"created":{"type":"string","format":"date-time","description":"The date and time, down to the millisecond, when the API Client was created","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","description":"The date and time, down to the millisecond, when the API Client was last updated","example":"2018-06-25T20:22:28.104Z"}},"required":["id","businessName","homepageUrl","name","description","accessTokenValiditySeconds","refreshTokenValiditySeconds","redirectUris","grantTypes","accessType","type","internal","enabled","strongAuthSupported","claimsSupported","created","modified"]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/oauth-clients","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"List OAuth Clients","description":{"content":"This gets a list of OAuth clients.\nRequest will require the following security scope:\n- 'idn:oathkeeper-client-list:read'","type":"text/plain"},"url":{"path":["oauth-clients"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List OAuth Clients + + + +This gets a list of OAuth clients. +Request will require the following security scope: +- 'idn:oathkeeper-client-list:read' + +
      + +List of OAuth clients. + +
      Schema array
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/list-pending-approvals.api.mdx b/docs/sailpoint-api-v3/list-pending-approvals.api.mdx new file mode 100644 index 000000000..71bbea39e --- /dev/null +++ b/docs/sailpoint-api-v3/list-pending-approvals.api.mdx @@ -0,0 +1,131 @@ +--- +id: list-pending-approvals +sidebar_label: Pending Access Request Approvals List +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listPendingApprovals","tags":["Access Request Approvals"],"description":"This endpoint returns a list of pending approvals. See \"owner-id\" query parameter below for authorization info.","parameters":[{"in":"query","name":"owner-id","schema":{"type":"string"},"description":"If present, the value returns only pending approvals for the specified identity.\n * ORG_ADMIN users can call this with any identity ID value.\n * ORG_ADMIN users can also fetch all the approvals in the org, when owner-id is not used.\n * Non-ORG_ADMIN users can only specify *me* or pass their own identity ID value.","example":"2c91808568c529c60168cca6f90c1313","required":false},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","required":false,"schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**requestedFor.id**: *eq, in*\n\n**modified**: *gt, lt, ge, le*","example":"id eq \"2c91808568c529c60168cca6f90c1313\""},{"in":"query","name":"sorters","required":false,"schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **created, modified**","example":"modified"}],"responses":{"200":{"description":"List of Pending Approvals.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The approval id.","example":"id12345"},"name":{"type":"string","description":"The name of the approval.","example":"aName"},"created":{"type":"string","format":"date-time","description":"When the approval was created.","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","description":"When the approval was modified last time.","example":"2018-07-25T20:22:28.104Z"},"requestCreated":{"type":"string","format":"date-time","description":"When the access-request was created.","example":"2017-07-11T18:45:35.098Z"},"requestType":{"type":"string","enum":["GRANT_ACCESS","REVOKE_ACCESS"],"description":"Access request type. Defaults to GRANT_ACCESS. REVOKE_ACCESS type can only have a single Identity ID in the requestedFor field. Currently REVOKE_ACCESS is not supported for entitlements.","example":"GRANT_ACCESS"},"requester":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The identity that requested the item."},"requestedFor":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The identity for whom the item is requested for."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"The owner or approver of the approval."},"requestedObject":{"description":"The requested access item.","type":"object","properties":{"id":{"type":"string","description":"Id of the object.","example":"2c9180835d2e5168015d32f890ca1581"},"name":{"type":"string","description":"Name of the object.","example":"Applied Research Access"},"description":{"type":"string","description":"Description of the object.","example":"Access to research information, lab results, and schematics"},"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE","ENTITLEMENT"],"description":"Type of the object.","example":"ROLE"}}},"requesterComment":{"description":"The requester's comment.","type":"object","properties":{"comment":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat"},"author":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"ID of the author","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"}}},"created":{"type":"string","format":"date-time","description":"Date and time comment was created","example":"2017-07-11T18:45:37.098Z"}}},"previousReviewersComments":{"type":"array","items":{"type":"object","properties":{"comment":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat"},"author":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"ID of the author","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"}}},"created":{"type":"string","format":"date-time","description":"Date and time comment was created","example":"2017-07-11T18:45:37.098Z"}}},"description":"The history of the previous reviewers comments."},"forwardHistory":{"type":"array","items":{"type":"object","properties":{"oldApproverName":{"type":"string","description":"Display name of approver that forwarded the approval.","example":"frank.mir"},"newApproverName":{"type":"string","description":"Display name of approver to whom the approval was forwarded.","example":"al.volta"},"comment":{"type":"string","description":"Comment made by old approver when forwarding.","example":"Fusce id orci vel consectetur amet ipsum quam."},"modified":{"type":"string","format":"date-time","description":"Time at which approval was forwarded.","example":"2019-08-23T18:52:57.398Z"}}},"description":"The history of approval forward action."},"commentRequiredWhenRejected":{"type":"boolean","description":"When true the rejector has to provide comments when rejecting","example":true},"actionInProcess":{"description":"Action that is performed on this approval, and system has not finished performing that action yet.","type":"string","enum":["APPROVED","REJECTED","FORWARDED"],"example":"APPROVED"},"removeDate":{"type":"string","description":"The date the role or access profile is no longer assigned to the specified identity.","format":"date-time","example":"2020-07-11T00:00:00Z"},"removeDateUpdateRequested":{"type":"boolean","description":"If true, then the request is to change the remove date or sunset date.","example":true},"currentRemoveDate":{"type":"string","description":"The remove date or sunset date that was assigned at the time of the request.","format":"date-time","example":"2020-07-11T00:00:00Z"},"sodViolationContext":{"description":"The details of the SOD violations for the associated approval.","type":"object","properties":{"state":{"type":"string","enum":["SUCCESS","ERROR"],"description":"The status of SOD violation check","example":"SUCCESS"},"uuid":{"description":"The id of the Violation check event","type":"string","example":"f73d16e9-a038-46c5-b217-1246e15fdbdd"},"violationCheckResult":{"description":"The inner object representing the completed SOD Violation check","type":"object","properties":{"message":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}},"description":"If the request failed, includes any error message that was generated.","example":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An error has occurred during the SOD violation check"}]},"clientMetadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on completion of the violation check.","example":{"requestedAppName":"test-app","requestedAppId":"2c91808f7892918f0178b78da4a305a1"}},"violationContexts":{"type":"array","items":{"description":"The contextual information of the violated criteria","type":"object","properties":{"policy":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the Policy that is being violated."},"conflictingAccessCriteria":{"type":"object","description":"The object which contains the left and right hand side of the entitlements that got violated according to the policy.","properties":{"leftCriteria":{"type":"object","properties":{"criteriaList":{"type":"array","items":{"description":"Details of the Entitlement criteria","type":"object","properties":{"existing":{"type":"boolean","example":true,"description":"If the entitlement already belonged to the user or not."},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Entitlement ID","example":"2c918085771e9d3301773b3cb66f6398"},"name":{"type":"string","description":"Entitlement name","example":"My HR Entitlement"}}}}}},"rightCriteria":{"type":"object","properties":{"criteriaList":{"type":"array","items":{"description":"Details of the Entitlement criteria","type":"object","properties":{"existing":{"type":"boolean","example":true,"description":"If the entitlement already belonged to the user or not."},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Entitlement ID","example":"2c918085771e9d3301773b3cb66f6398"},"name":{"type":"string","description":"Entitlement name","example":"My HR Entitlement"}}}}}}}}}}},"violatedPolicies":{"type":"array","description":"A list of the Policies that were violated","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the policy that was violated","example":[{"type":"SOD_POLICY","id":"69129440-422d-4a23-aadd-35c828d5bfda","name":"HR Policy"}]}}}}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/access-request-approvals/pending","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Pending Access Request Approvals List","description":{"content":"This endpoint returns a list of pending approvals. See \"owner-id\" query parameter below for authorization info.","type":"text/plain"},"url":{"path":["access-request-approvals","pending"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"If present, the value returns only pending approvals for the specified identity.\n * ORG_ADMIN users can call this with any identity ID value.\n * ORG_ADMIN users can also fetch all the approvals in the org, when owner-id is not used.\n * Non-ORG_ADMIN users can only specify *me* or pass their own identity ID value.","type":"text/plain"},"key":"owner-id","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**requestedFor.id**: *eq, in*\n\n**modified**: *gt, lt, ge, le*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **created, modified**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Pending Access Request Approvals List + + + +This endpoint returns a list of pending approvals. See "owner-id" query parameter below for authorization info. + +
      Query Parameters
      + +List of Pending Approvals. + +
      Schema array
        requester object
        + +The identity that requested the item. + +
        requestedFor object
        + +The identity for whom the item is requested for. + +
        owner object
        + +The owner or approver of the approval. + +
        requestedObject object
        + +The requested access item. + +
        requesterComment object
        + +The requester's comment. + +
        author object
        previousReviewersComments object[]
        + +The history of the previous reviewers comments. + +
        author object
        forwardHistory object[]
        + +The history of approval forward action. + +
        sodViolationContext object
        + +The details of the SOD violations for the associated approval. + +
        violationCheckResult object
        + +The inner object representing the completed SOD Violation check + +
        message object
        + +If the request failed, includes any error message that was generated. + +
        clientMetadata object
        + +Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on completion of the violation check. + +
      • property name* string
      • violationContexts object[]
        policy object
        + +Reference to the Policy that is being violated. + +
        conflictingAccessCriteria object
        + +The object which contains the left and right hand side of the entitlements that got violated according to the policy. + +
        leftCriteria object
        criteriaList object[]
        rightCriteria object
        criteriaList object[]
        violatedPolicies object[]
        + +A list of the Policies that were violated + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/list-personal-access-tokens.api.mdx b/docs/sailpoint-api-v3/list-personal-access-tokens.api.mdx new file mode 100644 index 000000000..84476af97 --- /dev/null +++ b/docs/sailpoint-api-v3/list-personal-access-tokens.api.mdx @@ -0,0 +1,83 @@ +--- +id: list-personal-access-tokens +sidebar_label: List Personal Access Tokens +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listPersonalAccessTokens","tags":["Personal Access Tokens"],"description":"This gets a collection of personal access tokens associated with the optional owner-id.
      query parameter. If the owner-id query parameter is omitted, all personal access tokens
      for a tenant will be retrieved, but the caller must have the 'idn:all-personal-access-tokens:read' right.

      Any of the following rights are required to access this resource:
        \n
      • idn:my-personal-access-tokens:read
      • \n
      • idn:all-personal-access-tokens:read
      • \n
      • idn:managed-personal-access-tokens:read
      • \n
      ","parameters":[{"in":"query","name":"owner-id","description":"The identity ID of the owner whose personal access tokens should be listed.
      If \"me\", the caller should have the following right: 'idn:my-personal-access-tokens:read'

      If an actual owner ID or if the owner-id parameter is omitted in the request,
      the caller should have the following right: 'idn:all-personal-access-tokens:read'.

      If the caller has the following right, then managed personal access tokens associated with owner-id
      will be retrieved: 'idn:managed-personal-access-tokens:read'","required":false,"schema":{"type":"string","default":null,"example":"2c9180867b50d088017b554662fb281e"}}],"responses":{"200":{"description":"List of personal access tokens.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the personal access token (to be used as the username for Basic Auth).","example":"86f1dc6fe8f54414950454cbb11278fa"},"name":{"type":"string","description":"The name of the personal access token. Cannot be the same as other personal access tokens owned by a user.","example":"NodeJS Integration"},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Details about the owner of the personal access token."},"created":{"type":"string","format":"date-time","description":"The date and time, down to the millisecond, when this personal access token was created.","example":"2017-07-11T18:45:37.098Z"}},"required":["id","name","owner","created"]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/personal-access-tokens","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"List Personal Access Tokens","description":{"content":"This gets a collection of personal access tokens associated with the optional owner-id.
      query parameter. If the owner-id query parameter is omitted, all personal access tokens
      for a tenant will be retrieved, but the caller must have the 'idn:all-personal-access-tokens:read' right.

      Any of the following rights are required to access this resource:
        \n
      • idn:my-personal-access-tokens:read
      • \n
      • idn:all-personal-access-tokens:read
      • \n
      • idn:managed-personal-access-tokens:read
      • \n
      ","type":"text/plain"},"url":{"path":["personal-access-tokens"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The identity ID of the owner whose personal access tokens should be listed.
      If \"me\", the caller should have the following right: 'idn:my-personal-access-tokens:read'

      If an actual owner ID or if the owner-id parameter is omitted in the request,
      the caller should have the following right: 'idn:all-personal-access-tokens:read'.

      If the caller has the following right, then managed personal access tokens associated with owner-id
      will be retrieved: 'idn:managed-personal-access-tokens:read'","type":"text/plain"},"key":"owner-id","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Personal Access Tokens + + + +This gets a collection of personal access tokens associated with the optional <code>owner-id</code>. </br> query parameter. If the <code>owner-id</code> query parameter is omitted, all personal access tokens </br> for a tenant will be retrieved, but the caller must have the 'idn:all-personal-access-tokens:read' right. </br> </br> Any of the following rights are required to access this resource: <ul> + <li>idn:my-personal-access-tokens:read</li> + <li>idn:all-personal-access-tokens:read</li> + <li>idn:managed-personal-access-tokens:read</li> +</ul> + +
      Query Parameters
        If \"me\", the caller should have the following right: 'idn:my-personal-access-tokens:read'

        If an actual owner ID or if the owner-id parameter is omitted in the request,
        the caller should have the following right: 'idn:all-personal-access-tokens:read'.

        If the caller has the following right, then managed personal access tokens associated with owner-id
        will be retrieved: 'idn:managed-personal-access-tokens:read'","required":false,"schema":{"type":"string","default":null,"example":"2c9180867b50d088017b554662fb281e"}}}>
      + +List of personal access tokens. + +
      Schema array
        owner object
        + +Details about the owner of the personal access token. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/list-provisioning-policies.api.mdx b/docs/sailpoint-api-v3/list-provisioning-policies.api.mdx new file mode 100644 index 000000000..9fcfb71d9 --- /dev/null +++ b/docs/sailpoint-api-v3/list-provisioning-policies.api.mdx @@ -0,0 +1,88 @@ +--- +id: list-provisioning-policies +sidebar_label: Lists ProvisioningPolicies +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listProvisioningPolicies","tags":["Sources"],"description":"This end-point lists all the ProvisioningPolicies in IdentityNow.\nA token with API, or ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:provisioning-policy-list:read"]}],"parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source id","example":"2c9180835d191a86015d28455b4a2329"}],"responses":{"200":{"description":"List of ProvisioningPolicyDto objects","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"usageType":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"userName"},"transform":{"type":"object","description":"The transform to apply to the field","example":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"default":{}},"attributes":{"type":"object","description":"Attributes required for the transform","example":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"}},"isRequired":{"type":"boolean","readOnly":true,"description":"Flag indicating whether or not the attribute is required.","default":false,"example":false},"type":{"type":"string","description":"The type of the attribute.","example":"string"},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","default":false,"example":false}}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sources/{sourceId}/provisioning-policies","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Lists ProvisioningPolicies","description":{"content":"This end-point lists all the ProvisioningPolicies in IdentityNow.\nA token with API, or ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":sourceId","provisioning-policies"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Lists ProvisioningPolicies + + + +This end-point lists all the ProvisioningPolicies in IdentityNow. +A token with API, or ORG_ADMIN authority is required to call this API. + +
      Path Parameters
      + +List of ProvisioningPolicyDto objects + +
      Schema array
        fields object[]
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/list-requestable-objects.api.mdx b/docs/sailpoint-api-v3/list-requestable-objects.api.mdx new file mode 100644 index 000000000..6b39141fc --- /dev/null +++ b/docs/sailpoint-api-v3/list-requestable-objects.api.mdx @@ -0,0 +1,76 @@ +--- +id: list-requestable-objects +sidebar_label: Requestable Objects List +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listRequestableObjects","tags":["Requestable Objects"],"description":"This endpoint returns a list of acccess items that that can be requested through the Access Request endpoints. Access items are marked with AVAILABLE, PENDING or ASSIGNED with respect to the identity provided using *identity-id* query param.\nAny authenticated token can call this endpoint to see their requestable access items. A token with ORG_ADMIN authority is required to call this endpoint to return a list of all of the requestable access items for the org or for another identity.","parameters":[{"in":"query","name":"identity-id","required":false,"schema":{"type":"string"},"example":"e7eab60924f64aa284175b9fa3309599","description":"If present, the value returns only requestable objects for the specified identity.\n * Admin users can call this with any identity ID value.\n * Non-admin users can only specify *me* or pass their own identity ID value.\n * If absent, returns a list of all requestable objects for the tenant. Only admin users can make such a call. In this case, the available, pending, assigned accesses will not be annotated in the result."},{"in":"query","name":"types","description":"Filters the results to the specified type/types, where each type is one of ROLE or ACCESS_PROFILE. If absent, all types are returned. Support for additional types may be added in the future without notice.","required":false,"schema":{"type":"array","items":{"type":"string","enum":["ACCESS_PROFILE","ROLE"],"description":"Enum represented the currently supported requestable object types. Additional values may be added in the future without notice.","example":"ACCESS_PROFILE"}},"example":"ROLE,ACCESS_PROFILE","explode":false},{"in":"query","name":"term","required":false,"schema":{"type":"string"},"example":"Finance Role","description":"It allows searching requestable access items with a partial match on the name or description. If term is provided, then the *filter* query parameter will be ignored."},{"in":"query","name":"statuses","description":"Filters the result to the specified status/statuses, where each status is one of AVAILABLE, ASSIGNED, or PENDING. It is an error to specify this parameter without also specifying an *identity-id* parameter. Additional statuses may be added in the future without notice.","required":false,"schema":{"type":"array","items":{"type":"string","enum":["AVAILABLE","PENDING","ASSIGNED"],"description":"Status indicating the ability of an access request for the object to be made by or on behalf of the identity specified by *identity-id*. *AVAILABLE* indicates the object is available to request. *PENDING* indicates the object is unavailable because the identity has a pending request in flight. *ASSIGNED* indicates the object is unavailable because the identity already has the indicated role or access profile. If *identity-id* is not specified (allowed only for admin users), then status will be *AVAILABLE* for all results."}},"explode":false,"example":["ASSIGNED","PENDING"]},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"example":"name sw \"bob\"","description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**name**: *eq, in, sw*\n"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"example":"name","description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **name**\n"}],"responses":{"200":{"description":"List of requestable objects","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Id of the requestable object itself","example":"2c9180835d2e5168015d32f890ca1581"},"name":{"type":"string","description":"Human-readable display name of the requestable object","example":"Applied Research Access"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"nullable":true,"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"description":{"type":"string","description":"Description of the requestable object.","example":"Access to research information, lab results, and schematics."},"type":{"type":"string","enum":["ACCESS_PROFILE","ROLE"],"description":"Enum represented the currently supported requestable object types. Additional values may be added in the future without notice.","example":"ACCESS_PROFILE"},"requestStatus":{"type":"string","enum":["AVAILABLE","PENDING","ASSIGNED"],"description":"Status indicating the ability of an access request for the object to be made by or on behalf of the identity specified by *identity-id*. *AVAILABLE* indicates the object is available to request. *PENDING* indicates the object is unavailable because the identity has a pending request in flight. *ASSIGNED* indicates the object is unavailable because the identity already has the indicated role or access profile. If *identity-id* is not specified (allowed only for admin users), then status will be *AVAILABLE* for all results."},"identityRequestId":{"type":"string","description":"If *requestStatus* is *PENDING*, indicates the id of the associated account activity.","nullable":true,"example":null},"ownerRef":{"type":"object","nullable":true,"properties":{"type":{"type":"string","description":"The type can only be IDENTITY. This is read-only","example":"IDENTITY"},"id":{"type":"string","description":"Identity id.","example":"5168015d32f890ca15812c9180835d2e"},"name":{"type":"string","description":"Human-readable display name of identity. This is read-only","example":"Alison Ferguso"},"email":{"type":"string","description":"Email address of identity. This is read-only","example":"alison.ferguso@identitysoon.com"}}},"requestCommentsRequired":{"type":"boolean","description":"Whether the requester must provide comments when requesting the object."}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/requestable-objects","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Requestable Objects List","description":{"content":"This endpoint returns a list of acccess items that that can be requested through the Access Request endpoints. Access items are marked with AVAILABLE, PENDING or ASSIGNED with respect to the identity provided using *identity-id* query param.\nAny authenticated token can call this endpoint to see their requestable access items. A token with ORG_ADMIN authority is required to call this endpoint to return a list of all of the requestable access items for the org or for another identity.","type":"text/plain"},"url":{"path":["requestable-objects"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"If present, the value returns only requestable objects for the specified identity.\n * Admin users can call this with any identity ID value.\n * Non-admin users can only specify *me* or pass their own identity ID value.\n * If absent, returns a list of all requestable objects for the tenant. Only admin users can make such a call. In this case, the available, pending, assigned accesses will not be annotated in the result.","type":"text/plain"},"key":"identity-id","value":""},{"disabled":false,"description":{"content":"Filters the results to the specified type/types, where each type is one of ROLE or ACCESS_PROFILE. If absent, all types are returned. Support for additional types may be added in the future without notice.","type":"text/plain"},"key":"types","value":""},{"disabled":false,"description":{"content":"It allows searching requestable access items with a partial match on the name or description. If term is provided, then the *filter* query parameter will be ignored.","type":"text/plain"},"key":"term","value":""},{"disabled":false,"description":{"content":"Filters the result to the specified status/statuses, where each status is one of AVAILABLE, ASSIGNED, or PENDING. It is an error to specify this parameter without also specifying an *identity-id* parameter. Additional statuses may be added in the future without notice.","type":"text/plain"},"key":"statuses","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**name**: *eq, in, sw*\n","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **name**\n","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Requestable Objects List + + + +This endpoint returns a list of acccess items that that can be requested through the Access Request endpoints. Access items are marked with AVAILABLE, PENDING or ASSIGNED with respect to the identity provided using *identity-id* query param. +Any authenticated token can call this endpoint to see their requestable access items. A token with ORG_ADMIN authority is required to call this endpoint to return a list of all of the requestable access items for the org or for another identity. + +
      Query Parameters
      + +List of requestable objects + +
      Schema array
        ownerRef object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/list-schemas.api.mdx b/docs/sailpoint-api-v3/list-schemas.api.mdx new file mode 100644 index 000000000..1a3629fe6 --- /dev/null +++ b/docs/sailpoint-api-v3/list-schemas.api.mdx @@ -0,0 +1,96 @@ +--- +id: list-schemas +sidebar_label: List Schemas on a Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listSchemas","tags":["Sources"],"description":"Lists the Schemas that exist on the specified Source in IdentityNow.\n","parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source ID.","example":"2c9180835d191a86015d28455b4a2329"},{"in":"query","name":"include-types","required":false,"schema":{"type":"string"},"description":"If set to 'group', then the account schema is filtered and only group schemas are returned. Only a value of 'group' is recognized.","example":"group"}],"responses":{"200":{"description":"The Schemas were successfully retrieved.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Schema.","example":"2c9180835d191a86015d28455b4a2329"},"name":{"type":"string","description":"The name of the Schema.","example":"account"},"nativeObjectType":{"type":"string","description":"The name of the object type on the native system that the schema represents.","example":"User"},"identityAttribute":{"type":"string","description":"The name of the attribute used to calculate the unique identifier for an object in the schema.","example":"sAMAccountName"},"displayAttribute":{"type":"string","description":"The name of the attribute used to calculate the display value for an object in the schema.","example":"distinguishedName"},"hierarchyAttribute":{"type":"string","description":"The name of the attribute whose values represent other objects in a hierarchy. Only relevant to group schemas.","example":"memberOf"},"includePermissions":{"type":"boolean","description":"Flag indicating whether or not the include permissions with the object data when aggregating the schema.","example":false},"features":{"type":"array","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"description":"The features that the schema supports.","example":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"]},"configuration":{"type":"object","description":"Holds any extra configuration data that the schema may require.","example":{"groupMemberAttribute":"member"}},"attributes":{"type":"array","description":"The attribute definitions which form the schema.","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"sAMAccountName"},"type":{"description":"The type of the attribute.","example":"string","type":"string","enum":["STRING","LONG","INT","BOOLEAN"]},"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"A reference to the schema on the source to which the values of the attribute map.","example":{"type":"CONNECTOR_SCHEMA","id":"2c9180866166b5b0016167c32ef31a66","name":"group"}},"description":{"type":"string","description":"A human-readable description of the attribute."},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","example":false},"isEntitlement":{"type":"boolean","description":"Flag indicating whether or not the attribute is an entitlement.","example":false},"isGroup":{"type":"boolean","description":"Flag indicating whether or not the attribute represents a group.","example":false,"readOnly":true}}},"example":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}]},"created":{"type":"string","description":"The date the Schema was created.","format":"date-time","example":"2019-12-24T22:32:58.104Z"},"modified":{"type":"string","description":"The date the Schema was last modified.","format":"date-time","example":"2019-12-31T20:22:28.104Z"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sources/{sourceId}/schemas","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"List Schemas on a Source","description":{"content":"Lists the Schemas that exist on the specified Source in IdentityNow.\n","type":"text/plain"},"url":{"path":["sources",":sourceId","schemas"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"If set to 'group', then the account schema is filtered and only group schemas are returned. Only a value of 'group' is recognized.","type":"text/plain"},"key":"include-types","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The Source ID.","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Schemas on a Source + + + +Lists the Schemas that exist on the specified Source in IdentityNow. + + +
      Path Parameters
      Query Parameters
      + +The Schemas were successfully retrieved. + +
      Schema array
        attributes object[]
        + +The attribute definitions which form the schema. + +
        schema object
        + +A reference to the schema on the source to which the values of the attribute map. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/list-sources.api.mdx b/docs/sailpoint-api-v3/list-sources.api.mdx new file mode 100644 index 000000000..881e13734 --- /dev/null +++ b/docs/sailpoint-api-v3/list-sources.api.mdx @@ -0,0 +1,128 @@ +--- +id: list-sources +sidebar_label: Lists all sources in IdentityNow. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listSources","tags":["Sources"],"description":"This end-point lists all the sources in IdentityNow.\nA token with ORG_ADMIN, SOURCE_ADMIN, SOURCE_SUBADMIN, or ROLE_SUBADMIN authority is required to call this API.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":50,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":50,"default":50}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"example":"name eq \"#Employees\"","description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**name**: *co, eq, in, sw*\n\n**type**: *eq, in*\n\n**owner.id**: *eq, in*\n\n**features**: *ca, co*\n\n**created**: *eq*\n\n**modified**: *eq*\n\n**managementWorkgroup.id**: *eq*\n\n**description**: *eq*\n\n**authoritative**: *eq*\n\n**healthy**: *eq*\n\n**status**: *eq, in*\n\n**connectionType**: *eq*\n\n**connectorName**: *eq*"},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"example":"name","description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **type, created, modified, name, owner.name, healthy, status**"},{"in":"query","name":"for-subadmin","schema":{"type":"string"},"example":"name","description":"Filter the returned list of sources for the identity specified by the parameter, which is the id of an identity with the role SOURCE_SUBADMIN. By convention, the value **me** indicates the identity id of the current user.\nSubadmins may only view Sources which they are able to administer; all other Sources will be filtered out when this parameter is set. If the current user is a SOURCE_SUBADMIN but fails to pass a valid value for this parameter, a 403 Forbidden is returned."}],"responses":{"200":{"description":"List of Source objects","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"the id of the Source","example":"2c91808568c529c60168cca6f90c1324"},"description":{"type":"string","description":"Human-readable description of the source","example":"This is the corporate directory."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to an owning Identity Object"},"cluster":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the associated Cluster","example":{"type":"CLUSTER","id":"2c9180866166b5b0016167c32ef31a66","name":"Corporate Cluster"}},"accountCorrelationConfig":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Correlation Config object","example":{"type":"ACCOUNT_CORRELATION_CONFIG","id":"2c9180855d191c59015d28583727245a","name":"Directory [source-62867] Account Correlation"}},"accountCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used."},"managerCorrelationMapping":{"description":"Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity","type":"object","properties":{"accountAttribute":{"type":"string","description":"Name of the attribute to use for manager correlation. The value found on the account attribute will be used to lookup the manager's identity.","example":"manager"},"identityAttribute":{"type":"string","description":"Name of the identity attribute to search when trying to find a manager using the value from the accountAttribute.","example":"manager"}}},"managerCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient."},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called."},"schemas":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to Schema objects","example":[{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232a","name":"account"},{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232b","name":"group"}]},"passwordPolicies":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to the associated PasswordPolicy objects.","example":[{"type":"PASSWORD_POLICY","id":"2c9180855d191c59015d291ceb053980","name":"Corporate Password Policy"}]},"features":{"type":"array","description":"Optional features that can be supported by a source.","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"example":["SYNC_PROVISIONING","MANAGER_LOOKUP","SEARCH","PROVISIONING","AUTHENTICATE","GROUP_PROVISIONING","PASSWORD"]},"type":{"type":"string","description":"Specifies the type of system being managed e.g. Active Directory, Workday, etc..","example":"OpenLDAP - Direct"},"connector":{"type":"string","description":"Connector script name.","example":"active-directory"},"connectorClass":{"type":"string","description":"The fully qualified name of the Java class that implements the connector interface.","example":"sailpoint.connector.LDAPConnector"},"connectorAttributes":{"type":"object","description":"Connector specific configuration; will differ from type to type.","example":{"healthCheckTimeout":30,"authSearchAttributes":["cn","uid","mail"]}},"deleteThreshold":{"type":"integer","format":"int32","description":"Number from 0 to 100 that specifies when to skip the delete phase.","example":10},"authoritative":{"type":"boolean","description":"When true indicates the source is referenced by an IdentityProfile.","example":false},"managementWorkgroup":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to Management Workgroup for this Source"},"healthy":{"type":"boolean","description":"When true indicates a healthy source","example":true},"status":{"type":"string","description":"A status identifier, giving specific information on why a source is healthy or not","example":"SOURCE_STATE_HEALTHY"},"since":{"type":"string","description":"Timestamp showing when a source health check was last performed","example":"2021-09-28T15:48:29.3801666300Z"},"connectorId":{"type":"string","description":"The id of connector","example":"active-directory"},"connectorName":{"type":"string","description":"The name of the connector that was chosen on source creation","example":"Active Directory"},"connectionType":{"type":"string","description":"The type of connection (direct or file)","example":"file"},"connectorImplementstionId":{"type":"string","description":"The connector implementstion id","example":"delimited-file"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/sources","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Lists all sources in IdentityNow.","description":{"content":"This end-point lists all the sources in IdentityNow.\nA token with ORG_ADMIN, SOURCE_ADMIN, SOURCE_SUBADMIN, or ROLE_SUBADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nFiltering is supported for the following fields and operators:\n\n**id**: *eq, in*\n\n**name**: *co, eq, in, sw*\n\n**type**: *eq, in*\n\n**owner.id**: *eq, in*\n\n**features**: *ca, co*\n\n**created**: *eq*\n\n**modified**: *eq*\n\n**managementWorkgroup.id**: *eq*\n\n**description**: *eq*\n\n**authoritative**: *eq*\n\n**healthy**: *eq*\n\n**status**: *eq, in*\n\n**connectionType**: *eq*\n\n**connectorName**: *eq*","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)\n\nSorting is supported for the following fields: **type, created, modified, name, owner.name, healthy, status**","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"Filter the returned list of sources for the identity specified by the parameter, which is the id of an identity with the role SOURCE_SUBADMIN. By convention, the value **me** indicates the identity id of the current user.\nSubadmins may only view Sources which they are able to administer; all other Sources will be filtered out when this parameter is set. If the current user is a SOURCE_SUBADMIN but fails to pass a valid value for this parameter, a 403 Forbidden is returned.","type":"text/plain"},"key":"for-subadmin","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Lists all sources in IdentityNow. + + + +This end-point lists all the sources in IdentityNow. +A token with ORG_ADMIN, SOURCE_ADMIN, SOURCE_SUBADMIN, or ROLE_SUBADMIN authority is required to call this API. + +
      Query Parameters
      + +List of Source objects + +
      Schema array
        owner object
        + +Reference to an owning Identity Object + +
        cluster object
        + +Reference to the associated Cluster + +
        accountCorrelationConfig object
        + +Reference to a Correlation Config object + +
        accountCorrelationRule object
        + +Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used. + +
        managerCorrelationMapping object
        + +Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity + +
        managerCorrelationRule object
        + +Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient. + +
        beforeProvisioningRule object
        + +Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called. + +
        schemas object[]
        + +List of references to Schema objects + +
        passwordPolicies object[]
        + +List of references to the associated PasswordPolicy objects. + +
        managementWorkgroup object
        + +Reference to Management Workgroup for this Source + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/list-work-items.api.mdx b/docs/sailpoint-api-v3/list-work-items.api.mdx new file mode 100644 index 000000000..0963cecd6 --- /dev/null +++ b/docs/sailpoint-api-v3/list-work-items.api.mdx @@ -0,0 +1,75 @@ +--- +id: list-work-items +sidebar_label: List Work Items +hide_title: true +hide_table_of_contents: true +api: {"operationId":"listWorkItems","tags":["Work Items"],"description":"This gets a collection of work items belonging to either the specified user(admin required), or the current user.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"ownerId","schema":{"type":"string"},"description":"ID of the work item owner.","required":false}],"responses":{"200":{"description":"List of work items","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the work item","example":"2c9180835d2e5168015d32f890ca1581"},"requesterId":{"type":"string","description":"ID of the requester","example":"2c9180835d2e5168015d32f890ca1581"},"requesterDisplayName":{"type":"string","description":"The displayname of the requester","example":"John Smith"},"ownerId":{"type":"string","description":"The ID of the owner","example":"2c9180835d2e5168015d32f890ca1581"},"ownerName":{"type":"string","description":"The name of the owner","example":"Jason Smith"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"description":{"type":"string","description":"The description of the work item","example":"Create account on source 'AD'"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"type":{"type":"string","enum":["UNKNOWN","GENERIC","CERTIFICATION","REMEDIATION","DELEGATION","APPROVAL","VIOLATIONREVIEW","FORM","POLICYVIOLATION","CHALLENGE","IMPACTANALYSIS","SIGNOFF","EVENT","MANUALACTION","TEST"]},"remediationItems":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the certification","example":"2c9180835d2e5168015d32f890ca1581"},"targetId":{"type":"string","description":"The ID of the certification target","example":"2c9180835d2e5168015d32f890ca1581"},"targetName":{"type":"string","description":"The name of the certification target","example":"john.smith"},"targetDisplayName":{"type":"string","description":"The display name of the certification target","example":"emailAddress"},"applicationName":{"type":"string","description":"The name of the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute being certified","example":"phoneNumber"},"attributeOperation":{"type":"string","description":"The operation of the certification on the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute being certified","example":"512-555-1212"},"nativeIdentity":{"type":"string","description":"The native identity of the target","example":"jason.smith2"}}},"approvalItems":{"type":"object","properties":{"id":{"type":"string","description":"ID of the approval item","example":"2c9180835d2e5168015d32f890ca1581"},"account":{"type":"string","description":"The account referenced by the approval item","example":"john.smith"},"application":{"type":"string","description":"The name the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute","example":"emailAddress"},"attributeOperation":{"type":"string","description":"The operation of the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute","example":"a@b.com"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]}}},"name":{"type":"string","description":"The work item name","example":"Account Create"},"completed":{"type":"string","format":"date-time","example":"2018-10-19T13:49:37.385Z"},"numItems":{"type":"integer","description":"The number of items in the work item","example":19},"form":{"type":"object","properties":{"id":{"type":"string","description":"ID of the form","example":"2c9180835d2e5168015d32f890ca1581"},"name":{"type":"string","description":"Name of the form","example":"AccountSelection Form"},"title":{"type":"string","description":"The form title","example":"Account Selection for John.Doe"},"subtitle":{"type":"string","description":"The form subtitle.","example":"Please select from the following"},"targetUser":{"type":"string","description":"The name of the user that should be shown this form","example":"Jane.Doe"},"sections":{"type":"object","allOf":[{"type":"object","properties":{"name":{"type":"string","description":"Name of the FormItem","example":"Field1"}}},{"type":"object","properties":{"label":{"type":"string","description":"Label of the section","example":"Section 1"},"formItems":{"type":"array","items":{"type":"object"},"description":"List of FormItems. FormItems can be SectionDetails and/or FieldDetails","example":[]}}}]}}},"errors":{"type":"array","items":{"type":"string"},"example":["The work item ID that was specified was not found."]}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/work-items","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"List Work Items","description":{"content":"This gets a collection of work items belonging to either the specified user(admin required), or the current user.","type":"text/plain"},"url":{"path":["work-items"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"ID of the work item owner.","type":"text/plain"},"key":"ownerId","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Work Items + + + +This gets a collection of work items belonging to either the specified user(admin required), or the current user. + +
      Query Parameters
      + +List of work items + +
      Schema array
        remediationItems object
        approvalItems object
        form object
        sections object
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/make-identity-decision.api.mdx b/docs/sailpoint-api-v3/make-identity-decision.api.mdx new file mode 100644 index 000000000..b2dcb508e --- /dev/null +++ b/docs/sailpoint-api-v3/make-identity-decision.api.mdx @@ -0,0 +1,91 @@ +--- +id: make-identity-decision +sidebar_label: Decide on a Certification Item +hide_title: true +hide_table_of_contents: true +api: {"operationId":"makeIdentityDecision","tags":["Certifications"],"description":"The API makes a decision to approve or revoke one or more identity campaign certification items. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. This API does not support requests for certifications assigned to Governance Groups.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the identity campaign certification on which to make decisions","example":"ef38f94347e94562b5bb8424a56397d8"}],"requestBody":{"required":true,"description":"A non-empty array of decisions to be made.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"ef38f94347e94562b5bb8424a56397d8"},"decision":{"type":"string","description":"The decision to approve or revoke the review item","enum":["APPROVE","REVOKE"],"example":"APPROVE"},"proposedEndDate":{"type":"string","format":"date-time","description":"The date at which a user's access should be taken away. Should only be set for `REVOKE` decisions."},"bulk":{"type":"boolean","description":"Indicates whether decision should be marked as part of a larger bulk decision","example":true},"recommendation":{"nullable":true,"type":"object","properties":{"recommendation":{"type":"string","description":"The recommendation from IAI at the time of the decision. This field will be null if no recommendation was made."},"reasons":{"type":"array","items":{"type":"string"},"description":"A list of reasons for the recommendation."},"timestamp":{"type":"string","format":"date-time","description":"The time at which the recommendation was recorded.","example":"2020-06-01T13:49:37.385Z"}}},"comments":{"type":"string","description":"Comments recorded when the decision was made","example":"This user no longer needs access to this source"}},"required":["id","decision","bulk"]},"minItems":1,"maxItems":250},"example":[{"id":"ef38f94347e94562b5bb8424a56396b5","decision":"APPROVE","bulk":true,"comments":"This user still needs access to this source."},{"id":"ef38f94347e94562b5bb8424a56397d8","decision":"APPROVE","bulk":true,"comments":"This user still needs access to this source too."}]}}},"responses":{"200":{"description":"An identity campaign certification object","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"example":"2c9180835d2e5168015d32f890ca1581","type":"string"},"name":{"example":"Source Owner Access Review for Employees [source]","type":"string"},"campaign":{"type":"object","required":["id","name","type","campaignType","description"],"properties":{"id":{"type":"string","description":"The unique ID of the campaign.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the campaign.","example":"Campaign Name"},"type":{"type":"string","enum":["CAMPAIGN"],"description":"The type of object that is being referenced.","example":"CAMPAIGN"},"campaignType":{"type":"string","enum":["MANAGER","SOURCE_OWNER","SEARCH"],"description":"The type of the campaign.","example":"MANAGER"},"description":{"type":"string","description":"The description of the campaign set by the admin who created it.","nullable":true,"example":"A description of the campaign"}}},"completed":{"type":"boolean","description":"Have all decisions been made?","example":true},"identitiesCompleted":{"type":"integer","description":"The number of identities for whom all decisions have been made and are complete.","example":5},"identitiesTotal":{"type":"integer","description":"The total number of identities in the Certification, both complete and incomplete.","example":10},"created":{"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"},"modified":{"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"},"decisionsMade":{"type":"integer","description":"The number of approve/revoke/acknowledge decisions that have been made.","example":20},"decisionsTotal":{"type":"integer","description":"The total number of approve/revoke/acknowledge decisions.","example":40},"due":{"type":"string","format":"date-time","description":"The due date of the certification.","example":"2018-10-19T13:49:37.385Z"},"signed":{"type":"string","format":"date-time","nullable":true,"description":"The date the reviewer signed off on the Certification.","example":"2018-10-19T13:49:37.385Z"},"reviewer":{"type":"object","properties":{"id":{"type":"string","description":"The id of the reviewer.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the reviewer.","example":"Reviewer Name"},"email":{"type":"string","description":"The email of the reviewing identity.","example":"reviewer@test.com"},"type":{"type":"string","enum":["IDENTITY"]},"created":{"nullable":true,"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"},"modified":{"nullable":true,"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"}}},"reassignment":{"type":"object","nullable":true,"properties":{"from":{"type":"object","properties":{"id":{"type":"string","description":"The id of the certification.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the certification.","example":"Certification Name"},"type":{"type":"string","enum":["CERTIFICATION"]},"reviewer":{"type":"object","properties":{"id":{"type":"string","description":"The id of the reviewer.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the reviewer.","example":"Reviewer Name"},"email":{"type":"string","description":"The email of the reviewing identity.","example":"reviewer@test.com"},"type":{"type":"string","enum":["IDENTITY"]},"created":{"nullable":true,"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"},"modified":{"nullable":true,"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"}}}}},"comment":{"type":"string","description":"The comment entered when the Certification was reassigned","example":"Reassigned for a reason"}}},"hasErrors":{"type":"boolean","example":false},"errorMessage":{"nullable":true,"type":"string","example":"The certification has an error"},"phase":{"type":"string","description":"The current phase of the campaign.\n* `STAGED`: The campaign is waiting to be activated.\n* `ACTIVE`: The campaign is active.\n* `SIGNED`: The reviewer has signed off on the campaign, and it is considered complete.\n","enum":["STAGED","ACTIVE","SIGNED"],"example":"ACTIVE"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/certifications/{id}/decide","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"id":"ef38f94347e94562b5bb8424a56397d8","decision":"APPROVE","proposedEndDate":"2022-08-15","bulk":true,"recommendation":{"recommendation":"string","reasons":["string"],"timestamp":"2020-06-01T13:49:37.385Z"},"comments":"This user no longer needs access to this source"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Decide on a Certification Item","description":{"content":"The API makes a decision to approve or revoke one or more identity campaign certification items. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. This API does not support requests for certifications assigned to Governance Groups.","type":"text/plain"},"url":{"path":["certifications",":id","decide"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the identity campaign certification on which to make decisions","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Decide on a Certification Item + + + +The API makes a decision to approve or revoke one or more identity campaign certification items. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. This API does not support requests for certifications assigned to Governance Groups. + +
      Path Parameters
      Request Body array required
      + +A non-empty array of decisions to be made. + +
        recommendation object
      + +An identity campaign certification object + +
      Schema
        campaign object
        reviewer object
        reassignment object
        from object
        reviewer object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-approval-get.api.mdx b/docs/sailpoint-api-v3/non-employee-approval-get.api.mdx new file mode 100644 index 000000000..49e1a0cf7 --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-approval-get.api.mdx @@ -0,0 +1,93 @@ +--- +id: non-employee-approval-get +sidebar_label: Get a non-employee approval item detail +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeApprovalGet","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"Gets a non-employee approval item detail.

      There are two contextual uses for this endpoint:
      \n 1. The user has the role context of `idn:nesr:read`, in which case they can get any approval.
      \n 2. The user owns the requested approval. ","parameters":[{"in":"path","name":"id","description":"Non-Employee approval item id (UUID)","required":true,"schema":{"type":"string"}},{"in":"query","name":"include-detail","description":"The object nonEmployeeRequest will not be included detail when set to false. *Default value is true*","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Non-Employee approval item object.","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee approval item id","example":"2c1e388b-1e55-4b0a-ab5c-897f1204159c"},"approver":{"description":"Reference to the associated Identity","type":"object","properties":{"type":{"type":"string","enum":["GOVERNANCE_GROUP","IDENTITY"],"example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}},"accountName":{"type":"string","description":"Requested identity account name","example":"test.account"},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"approvalOrder":{"type":"number","description":"Approval order","example":1},"comment":{"type":"string","description":"comment of approver"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}},{"type":"object","properties":{"nonEmployeeRequest":{"description":"Non-Employee request associated to this approval","allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee request id."},"requester":{"type":"object","properties":{"type":{"type":"string","enum":["GOVERNANCE_GROUP","IDENTITY"],"example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}},"example":{"type":"IDENTITY","id":"2c9180866166b5b0016167c32ef31a66","name":"William Smith"}}}},{"type":"object","properties":{"accountName":{"type":"string","description":"Requested identity account name.","example":"william.smith"},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"nonEmployeeSource":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},{"type":"object","properties":{"schemaAttributes":{"description":"List of schema attributes associated with this non-employee source.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"UUID","example":"ac110005-7156-1150-8171-5b292e3e0084","description":"Schema Attribute Id"},"system":{"type":"boolean","description":"True if this schema attribute is mandatory on all non-employees sources.","example":true},"modified":{"type":"string","format":"date-time","description":"When the schema attribute was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the schema attribute was created.","example":"2019-08-23T18:40:35.772Z"},"type":{"type":"string","enum":["TEXT","DATE","IDENTITY"],"description":"Enum representing the type of data a schema attribute accepts."},"label":{"type":"string","description":"Label displayed on the UI for this schema attribute.","example":"Account Name"},"technicalName":{"type":"string","description":"The technical name of the attribute. Must be unique per source.","example":"account.name"},"helpText":{"type":"string","description":"help text displayed by UI.","example":"The unique identifier for the account"},"placeholder":{"type":"string","description":"Hint text that fills UI box.","example":"Enter a unique user name for this account."},"required":{"type":"boolean","description":"If true, the schema attribute is required for all non-employees in the source","example":true}},"required":["type","technicalName","label"]}}}}]},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee."},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"comment":{"type":"string","description":"comment of requester"},"completionDate":{"type":"string","format":"date-time","description":"When the request was completely approved.","example":"2020-03-24T11:11:41.139-05:00"},"startDate":{"type":"string","format":"date","description":"Non-Employee employment start date.","example":"2020-03-24"},"endDate":{"type":"string","format":"date","description":"Non-Employee employment end date.","example":"2021-03-25"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2020-03-24T11:11:41.139-05:00"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2020-03-24T11:11:41.139-05:00"}}}]}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-approvals/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get a non-employee approval item detail","description":{"content":"Gets a non-employee approval item detail.

      There are two contextual uses for this endpoint:
      \n 1. The user has the role context of `idn:nesr:read`, in which case they can get any approval.
      \n 2. The user owns the requested approval. ","type":"text/plain"},"url":{"path":["non-employee-approvals",":id"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The object nonEmployeeRequest will not be included detail when set to false. *Default value is true*","type":"text/plain"},"key":"include-detail","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) Non-Employee approval item id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a non-employee approval item detail + + + +Gets a non-employee approval item detail.<br><br> There are two contextual uses for this endpoint:<br> + 1. The user has the role context of `idn:nesr:read`, in which case they can get any approval.<br> + 2. The user owns the requested approval. + +
      Path Parameters
      Query Parameters
      + +Non-Employee approval item object. + +
      Schema
        approver object
        + +Reference to the associated Identity + +
        nonEmployeeRequest object
        + +Non-Employee request associated to this approval + +
        requester object
        nonEmployeeSource object
        schemaAttributes object[]
        + +List of schema attributes associated with this non-employee source. + +
        data object
        + +Attribute blob/bag for a non-employee. + +
      • property name* string
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-approval-list.api.mdx b/docs/sailpoint-api-v3/non-employee-approval-list.api.mdx new file mode 100644 index 000000000..563e8b4aa --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-approval-list.api.mdx @@ -0,0 +1,78 @@ +--- +id: non-employee-approval-list +sidebar_label: Get List of Non-Employee Approval Requests +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeApprovalList","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This gets a list of non-employee approval requests.

      \nThere are two contextual uses for this endpoint:
      \n 1. The user has the role context of `idn:nesr:read`, in which case they can list the approvals for any approver.
      \n 2. The user owns the requested approval. ","parameters":[{"in":"query","name":"requested-for","schema":{"type":"string"},"description":"The identity for whom the request was made. *me* indicates the current user.","required":false},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"filters","schema":{"type":"string"},"description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407)

      Filtering is supported for the following fields and operators:

      **approvalStatus**: *eq*

      *Example:* approvalStatus eq \"PENDING\""},{"in":"query","name":"sorters","schema":{"type":"string","format":"comma-separated"},"description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407#toc-hId-2058949)

      Sorting is supported for the following fields: **created, modified**"}],"responses":{"200":{"description":"List of approval items.","content":{"application/json":{"schema":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee approval item id","example":"2c1e388b-1e55-4b0a-ab5c-897f1204159c"},"approver":{"description":"Reference to the associated Identity","type":"object","properties":{"type":{"type":"string","enum":["GOVERNANCE_GROUP","IDENTITY"],"example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}},"accountName":{"type":"string","description":"Requested identity account name","example":"test.account"},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"approvalOrder":{"type":"number","description":"Approval order","example":1},"comment":{"type":"string","description":"comment of approver"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}},{"type":"object","properties":{"nonEmployeeRequest":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee request id."},"requester":{"type":"object","properties":{"type":{"type":"string","enum":["GOVERNANCE_GROUP","IDENTITY"],"example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}},"example":{"type":"IDENTITY","id":"2c9180866166b5b0016167c32ef31a66","name":"William Smith"}}}}}}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-approvals","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get List of Non-Employee Approval Requests","description":{"content":"This gets a list of non-employee approval requests.

      \nThere are two contextual uses for this endpoint:
      \n 1. The user has the role context of `idn:nesr:read`, in which case they can list the approvals for any approver.
      \n 2. The user owns the requested approval. ","type":"text/plain"},"url":{"path":["non-employee-approvals"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"The identity for whom the request was made. *me* indicates the current user.","type":"text/plain"},"key":"requested-for","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407)

      Filtering is supported for the following fields and operators:

      **approvalStatus**: *eq*

      *Example:* approvalStatus eq \"PENDING\"","type":"text/plain"},"key":"filters","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407#toc-hId-2058949)

      Sorting is supported for the following fields: **created, modified**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get List of Non-Employee Approval Requests + + + +This gets a list of non-employee approval requests.<br><br> +There are two contextual uses for this endpoint:<br> + 1. The user has the role context of `idn:nesr:read`, in which case they can list the approvals for any approver.<br> + 2. The user owns the requested approval. + +
      Query Parameters

        Filtering is supported for the following fields and operators:

        **approvalStatus**: *eq*

        *Example:* approvalStatus eq \"PENDING\""}}>

        Sorting is supported for the following fields: **created, modified**"}}>
      + +List of approval items. + +
      Schema array
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-approval-summary.api.mdx b/docs/sailpoint-api-v3/non-employee-approval-summary.api.mdx new file mode 100644 index 000000000..7bb9e83ea --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-approval-summary.api.mdx @@ -0,0 +1,77 @@ +--- +id: non-employee-approval-summary +sidebar_label: Get Summary of Non-Employee Approval Requests +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeApprovalSummary","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This request will retrieve a summary of non-employee approval requests.

      There are two contextual uses for the `requested-for` path parameter:
      \n 1. The user has the role context of `idn:nesr:read`, in which case he or she may request a summary of all non-employee approval requests assigned to a particular approver by passing in that approver's id.
      \n 2. The current user is an approver, in which case \"me\" should be provided as the `requested-for` value. This will provide the approver with a summary of the approval items assigned to him or her.","parameters":[{"in":"path","name":"requested-for","schema":{"type":"string"},"description":"The identity (UUID) of the approver for whom for whom the summary is being retrieved. Use \"me\" instead to indicate the current user.","required":true}],"responses":{"200":{"description":"summary of non-employee approval requests","content":{"application/json":{"schema":{"type":"object","properties":{"approved":{"type":"number","description":"The number of approved non-employee approval requests."},"pending":{"type":"number","description":"The number of pending non-employee approval requests."},"rejected":{"type":"number","description":"The number of rejected non-employee approval requests."}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-approvals/summary/{requested-for}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get Summary of Non-Employee Approval Requests","description":{"content":"This request will retrieve a summary of non-employee approval requests.

      There are two contextual uses for the `requested-for` path parameter:
      \n 1. The user has the role context of `idn:nesr:read`, in which case he or she may request a summary of all non-employee approval requests assigned to a particular approver by passing in that approver's id.
      \n 2. The current user is an approver, in which case \"me\" should be provided as the `requested-for` value. This will provide the approver with a summary of the approval items assigned to him or her.","type":"text/plain"},"url":{"path":["non-employee-approvals","summary",":requested-for"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The identity (UUID) of the approver for whom for whom the summary is being retrieved. Use \"me\" instead to indicate the current user.","type":"text/plain"},"type":"any","value":"","key":"requested-for"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Summary of Non-Employee Approval Requests + + + +This request will retrieve a summary of non-employee approval requests.<br><br> There are two contextual uses for the `requested-for` path parameter:<br> + 1. The user has the role context of `idn:nesr:read`, in which case he or she may request a summary of all non-employee approval requests assigned to a particular approver by passing in that approver's id.<br> + 2. The current user is an approver, in which case "me" should be provided as the `requested-for` value. This will provide the approver with a summary of the approval items assigned to him or her. + +
      Path Parameters
      + +summary of non-employee approval requests + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-approve-request.api.mdx b/docs/sailpoint-api-v3/non-employee-approve-request.api.mdx new file mode 100644 index 000000000..fc8f5567b --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-approve-request.api.mdx @@ -0,0 +1,79 @@ +--- +id: non-employee-approve-request +sidebar_label: Approve a Non-Employee Request +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeApproveRequest","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"Approves a non-employee approval request and notifies the next approver.

      The current user must be the requested approver.","parameters":[{"in":"path","name":"id","description":"Non-Employee approval item id (UUID)","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"comment":{"type":"string","description":"Comment on the approval item.","maxLength":4000}}}}}},"responses":{"200":{"description":"Non-Employee approval item object.","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee approval item id","example":"2c1e388b-1e55-4b0a-ab5c-897f1204159c"},"approver":{"description":"Reference to the associated Identity","type":"object","properties":{"type":{"type":"string","enum":["GOVERNANCE_GROUP","IDENTITY"],"example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}},"accountName":{"type":"string","description":"Requested identity account name","example":"test.account"},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"approvalOrder":{"type":"number","description":"Approval order","example":1},"comment":{"type":"string","description":"comment of approver"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}},{"type":"object","properties":{"nonEmployeeRequest":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee request id."},"requester":{"type":"object","properties":{"type":{"type":"string","enum":["GOVERNANCE_GROUP","IDENTITY"],"example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}},"example":{"type":"IDENTITY","id":"2c9180866166b5b0016167c32ef31a66","name":"William Smith"}}}}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/non-employee-approvals/{id}/approve","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"comment":"string"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Approve a Non-Employee Request","description":{"content":"Approves a non-employee approval request and notifies the next approver.

      The current user must be the requested approver.","type":"text/plain"},"url":{"path":["non-employee-approvals",":id","approve"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Non-Employee approval item id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Approve a Non-Employee Request + + + +Approves a non-employee approval request and notifies the next approver.<br><br> The current user must be the requested approver. + +
      Path Parameters
      Request Body required
      + +Non-Employee approval item object. + +
      Schema
        approver object
        + +Reference to the associated Identity + +
        nonEmployeeRequest object
        requester object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-bulk-upload-status.api.mdx b/docs/sailpoint-api-v3/non-employee-bulk-upload-status.api.mdx new file mode 100644 index 000000000..97dbe98a2 --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-bulk-upload-status.api.mdx @@ -0,0 +1,77 @@ +--- +id: non-employee-bulk-upload-status +sidebar_label: Obtain the status of bulk upload on the source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeBulkUploadStatus","tags":["Non-Employee Lifecycle Management"],"description":"The nonEmployeeBulkUploadStatus API returns the status of the newest bulk upload job for the specified source.

      \nRequires role context of `idn:nesr:read`\n","parameters":[{"in":"path","name":"id","description":"Source ID (UUID)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Status of the newest bulk-upload job, if any.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","ERROR"],"description":"Returns the following values indicating the progress or result of the bulk upload job.\n\"PENDING\" means the job is queued and waiting to be processed.\n\"IN_PROGRESS\" means the job is currently being processed.\n\"COMPLETED\" means the job has been completed without any errors.\n\"ERROR\" means the job failed to process with errors.\nnull means job has been submitted to the source.\n","example":"PENDING"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-sources/{id}/non-employee-bulk-upload/status","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Obtain the status of bulk upload on the source","description":{"content":"The nonEmployeeBulkUploadStatus API returns the status of the newest bulk upload job for the specified source.

      \nRequires role context of `idn:nesr:read`\n","type":"text/plain"},"url":{"path":["non-employee-sources",":id","non-employee-bulk-upload","status"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Source ID (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Obtain the status of bulk upload on the source + + + +The nonEmployeeBulkUploadStatus API returns the status of the newest bulk upload job for the specified source.<br><br> +Requires role context of `idn:nesr:read` + + +
      Path Parameters
      + +Status of the newest bulk-upload job, if any. + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-export-source-schema-template.api.mdx b/docs/sailpoint-api-v3/non-employee-export-source-schema-template.api.mdx new file mode 100644 index 000000000..1cf51aa14 --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-export-source-schema-template.api.mdx @@ -0,0 +1,87 @@ +--- +id: non-employee-export-source-schema-template +sidebar_label: Exports Source Schema Template +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeExportSourceSchemaTemplate","tags":["Non-Employee Lifecycle Management"],"description":"This requests a download for the Source Schema Template for a provided source.

      Requires role context of `idn:nesr:read`","parameters":[{"in":"path","name":"id","description":"Source Id (UUID)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Exported Source Schema Template","content":{"text/csv":{"example":"accountName,firstName,lastName,phone,email,manager,startDate,endDate\n"}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-sources/{id}/schema-attributes-template/download","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Exports Source Schema Template","description":{"content":"This requests a download for the Source Schema Template for a provided source.

      Requires role context of `idn:nesr:read`","type":"text/plain"},"url":{"path":["non-employee-sources",":id","schema-attributes-template","download"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Source Id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"text/csv"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Exports Source Schema Template + + + +This requests a download for the Source Schema Template for a provided source.<br><br> Requires role context of `idn:nesr:read` + +
      Path Parameters
      + +Exported Source Schema Template + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-lifecycle-management.tag.mdx b/docs/sailpoint-api-v3/non-employee-lifecycle-management.tag.mdx new file mode 100644 index 000000000..178b6e401 --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-lifecycle-management.tag.mdx @@ -0,0 +1,15 @@ +--- +id: non-employee-lifecycle-management +title: Non-Employee Lifecycle Management +description: Non-Employee Lifecycle Management +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-record-bulk-delete.api.mdx b/docs/sailpoint-api-v3/non-employee-record-bulk-delete.api.mdx new file mode 100644 index 000000000..1d88a364d --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-record-bulk-delete.api.mdx @@ -0,0 +1,79 @@ +--- +id: non-employee-record-bulk-delete +sidebar_label: Delete Multiple Non-Employee Records +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRecordBulkDelete","tags":["Non-Employee Lifecycle Management"],"description":"This request will delete multiple non-employee records based on the non-employee ids provided.

      Requires role context of `idn:nesr:delete`","requestBody":{"description":"Non-Employee bulk delete request body.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"description":"List of non-employee ids.","type":"array","items":{"type":"string","format":"uuid"}}},"required":["ids"]}}}},"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/non-employee-records/bulk-delete","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"ids":["3fa85f64-5717-4562-b3fc-2c963f66afa6"]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Delete Multiple Non-Employee Records","description":{"content":"This request will delete multiple non-employee records based on the non-employee ids provided.

      Requires role context of `idn:nesr:delete`","type":"text/plain"},"url":{"path":["non-employee-records","bulk-delete"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Multiple Non-Employee Records + + + +This request will delete multiple non-employee records based on the non-employee ids provided.<br><br> Requires role context of `idn:nesr:delete` + +
      Request Body required
      + +Non-Employee bulk delete request body. + +
      + +No content - indicates the request was successful but there is no content to be returned in the response. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-record-creation.api.mdx b/docs/sailpoint-api-v3/non-employee-record-creation.api.mdx new file mode 100644 index 000000000..f49bd41e3 --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-record-creation.api.mdx @@ -0,0 +1,88 @@ +--- +id: non-employee-record-creation +sidebar_label: Create Non-Employee Record +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRecordCreation","tags":["Non-Employee Lifecycle Management"],"description":"This request will create a non-employee record.

      \nRequires role context of `idn:nesr:create` ","requestBody":{"description":"Non-Employee record creation request body.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountName":{"type":"string","description":"Requested identity account name.","example":"william.smith"},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"sourceId":{"type":"string","description":"Non-Employee's source id.","example":"2c91808568c529c60168cca6f90c1313"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee, 10 attributes is the maximum size supported."},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2020-03-24T00:00:00-05:00"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2021-03-25T00:00:00-05:00"}},"required":["accountName","firstName","lastName","email","phone","manager","sourceId","startDate","endDate"]}}}},"responses":{"200":{"description":"Created non-employee record.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee record id."},"accountName":{"type":"string","description":"Requested identity account name."},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"sourceId":{"type":"string","description":"Non-Employee's source id.","example":"2c91808568c529c60168cca6f90c1313"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee."},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2019-08-23T18:52:59.162Z"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2020-08-23T18:52:59.162Z"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/non-employee-records","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"accountName":"william.smith","firstName":"William","lastName":"Smith","email":"william.smith@example.com","phone":"5555555555","manager":"jane.doe","sourceId":"2c91808568c529c60168cca6f90c1313","data":{},"startDate":"2020-03-24T00:00:00-05:00","endDate":"2021-03-25T00:00:00-05:00"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Create Non-Employee Record","description":{"content":"This request will create a non-employee record.

      \nRequires role context of `idn:nesr:create` ","type":"text/plain"},"url":{"path":["non-employee-records"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Non-Employee Record + + + +This request will create a non-employee record.<br><br> +Requires role context of `idn:nesr:create` + +
      Request Body required
      + +Non-Employee record creation request body. + +
        data object
        + +Attribute blob/bag for a non-employee, 10 attributes is the maximum size supported. + +
      • property name* string
      + +Created non-employee record. + +
      Schema
        data object
        + +Attribute blob/bag for a non-employee. + +
      • property name* string
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-record-delete.api.mdx b/docs/sailpoint-api-v3/non-employee-record-delete.api.mdx new file mode 100644 index 000000000..ba8b08ddc --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-record-delete.api.mdx @@ -0,0 +1,76 @@ +--- +id: non-employee-record-delete +sidebar_label: Delete Non-Employee Record +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRecordDelete","tags":["Non-Employee Lifecycle Management"],"description":"This request will delete a non-employee record.

      \nRequires role context of `idn:nesr:delete`","parameters":[{"in":"path","name":"id","description":"Non-Employee record id (UUID)","example":"ef38f94347e94562b5bb8424a56397d8","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/non-employee-records/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Delete Non-Employee Record","description":{"content":"This request will delete a non-employee record.

      \nRequires role context of `idn:nesr:delete`","type":"text/plain"},"url":{"path":["non-employee-records",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Non-Employee record id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Non-Employee Record + + + +This request will delete a non-employee record.<br><br> +Requires role context of `idn:nesr:delete` + +
      Path Parameters
      + +No content - indicates the request was successful but there is no content to be returned in the response. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-record-get.api.mdx b/docs/sailpoint-api-v3/non-employee-record-get.api.mdx new file mode 100644 index 000000000..993b437f4 --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-record-get.api.mdx @@ -0,0 +1,80 @@ +--- +id: non-employee-record-get +sidebar_label: Get a Non-Employee Record +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRecordGet","tags":["Non-Employee Lifecycle Management"],"description":"This gets a non-employee record.

      \nRequires role context of `idn:nesr:read`","parameters":[{"in":"path","name":"id","description":"Non-Employee record id (UUID)","required":true,"example":"ef38f94347e94562b5bb8424a56397d8","schema":{"type":"string"}}],"responses":{"200":{"description":"Non-Employee record object","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee record id."},"accountName":{"type":"string","description":"Requested identity account name."},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"sourceId":{"type":"string","description":"Non-Employee's source id.","example":"2c91808568c529c60168cca6f90c1313"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee."},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2019-08-23T18:52:59.162Z"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2020-08-23T18:52:59.162Z"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-records/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get a Non-Employee Record","description":{"content":"This gets a non-employee record.

      \nRequires role context of `idn:nesr:read`","type":"text/plain"},"url":{"path":["non-employee-records",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Non-Employee record id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a Non-Employee Record + + + +This gets a non-employee record.<br><br> +Requires role context of `idn:nesr:read` + +
      Path Parameters
      + +Non-Employee record object + +
      Schema
        data object
        + +Attribute blob/bag for a non-employee. + +
      • property name* string
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-record-list.api.mdx b/docs/sailpoint-api-v3/non-employee-record-list.api.mdx new file mode 100644 index 000000000..78af52c8a --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-record-list.api.mdx @@ -0,0 +1,81 @@ +--- +id: non-employee-record-list +sidebar_label: List Non-Employee Records +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRecordList","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This gets a list of non-employee records.

      There are two contextual uses for this endpoint:
      \n 1. The user has the role context of `idn:nesr:read`, in which case they can get a list of all of the non-employees.
      \n 2. The user is an account manager, in which case they can get a list of the non-employees that they manage.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"sorters","required":false,"schema":{"type":"string","format":"comma-separated"},"example":"accountName,sourceId","description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407#toc-hId-2058949)

      Sorting is supported for the following fields: **id, accountName, sourceId, manager, firstName, lastName, email, phone, startDate, endDate, created, modified**"},{"in":"query","name":"filters","required":false,"schema":{"type":"string"},"example":"sourceId eq \"2c91808568c529c60168cca6f90c1313\"","description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407)

      Filtering is supported for the following fields and operators:

      **sourceId**: *eq*

      *Example:* sourceId eq \"2c91808568c529c60168cca6f90c1313\""}],"responses":{"200":{"description":"Non-Employee record objects","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee record id."},"accountName":{"type":"string","description":"Requested identity account name."},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"sourceId":{"type":"string","description":"Non-Employee's source id.","example":"2c91808568c529c60168cca6f90c1313"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee."},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2019-08-23T18:52:59.162Z"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2020-08-23T18:52:59.162Z"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-records","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"List Non-Employee Records","description":{"content":"This gets a list of non-employee records.

      There are two contextual uses for this endpoint:
      \n 1. The user has the role context of `idn:nesr:read`, in which case they can get a list of all of the non-employees.
      \n 2. The user is an account manager, in which case they can get a list of the non-employees that they manage.","type":"text/plain"},"url":{"path":["non-employee-records"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407#toc-hId-2058949)

      Sorting is supported for the following fields: **id, accountName, sourceId, manager, firstName, lastName, email, phone, startDate, endDate, created, modified**","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407)

      Filtering is supported for the following fields and operators:

      **sourceId**: *eq*

      *Example:* sourceId eq \"2c91808568c529c60168cca6f90c1313\"","type":"text/plain"},"key":"filters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Non-Employee Records + + + +This gets a list of non-employee records.<br><br> There are two contextual uses for this endpoint:<br> + 1. The user has the role context of `idn:nesr:read`, in which case they can get a list of all of the non-employees.<br> + 2. The user is an account manager, in which case they can get a list of the non-employees that they manage. + +
      Query Parameters

        Sorting is supported for the following fields: **id, accountName, sourceId, manager, firstName, lastName, email, phone, startDate, endDate, created, modified**"}}>

        Filtering is supported for the following fields and operators:

        **sourceId**: *eq*

        *Example:* sourceId eq \"2c91808568c529c60168cca6f90c1313\""}}>
      + +Non-Employee record objects + +
      Schema array
        data object
        + +Attribute blob/bag for a non-employee. + +
      • property name* string
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-record-patch.api.mdx b/docs/sailpoint-api-v3/non-employee-record-patch.api.mdx new file mode 100644 index 000000000..d613c2204 --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-record-patch.api.mdx @@ -0,0 +1,101 @@ +--- +id: non-employee-record-patch +sidebar_label: Patch Non-Employee Record +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRecordPatch","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This request will patch a non-employee record.

      There are two contextual uses for this endpoint:
      \n 1. The user has the role context of `idn:nesr:update`, in which case they update all available fields.
      \n 2. The user is owner of the source, in this case they can only update the end date. ","parameters":[{"in":"path","name":"id","description":"Non-employee record id (UUID)","example":"ef38f94347e94562b5bb8424a56397d8","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"A list of non-employee update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. Attributes are restricted by user type. Owner of source can update end date. Organization admins can update all available fields.","required":true,"content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}},"example":[{"op":"replace","path":"/endDate","value":"2019-08-23T18:40:35.772Z"}]}}},"responses":{"200":{"description":"A patched non-employee record.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee record id."},"accountName":{"type":"string","description":"Requested identity account name."},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"sourceId":{"type":"string","description":"Non-Employee's source id.","example":"2c91808568c529c60168cca6f90c1313"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee."},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2019-08-23T18:52:59.162Z"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2020-08-23T18:52:59.162Z"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/non-employee-records/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Patch Non-Employee Record","description":{"content":"This request will patch a non-employee record.

      There are two contextual uses for this endpoint:
      \n 1. The user has the role context of `idn:nesr:update`, in which case they update all available fields.
      \n 2. The user is owner of the source, in this case they can only update the end date. ","type":"text/plain"},"url":{"path":["non-employee-records",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Non-employee record id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Patch Non-Employee Record + + + +This request will patch a non-employee record.<br><br> There are two contextual uses for this endpoint:<br> + 1. The user has the role context of `idn:nesr:update`, in which case they update all available fields.<br> + 2. The user is owner of the source, in this case they can only update the end date. + +
      Path Parameters
      Request Body array required
      + +A list of non-employee update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. Attributes are restricted by user type. Owner of source can update end date. Organization admins can update all available fields. + +
        value object
        + +The value to be used for the operation, required for "add" and "replace" operations + +
      • anyOf
      • string
      • integer
      • anyOf
      • string
      • integer
      + +A patched non-employee record. + +
      Schema
        data object
        + +Attribute blob/bag for a non-employee. + +
      • property name* string
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-record-update.api.mdx b/docs/sailpoint-api-v3/non-employee-record-update.api.mdx new file mode 100644 index 000000000..eaba51ed7 --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-record-update.api.mdx @@ -0,0 +1,101 @@ +--- +id: non-employee-record-update +sidebar_label: Update Non-Employee Record +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRecordUpdate","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This request will update a non-employee record.

      There are two contextual uses for this endpoint:
      \n 1. The user has the role context of `idn:nesr:update`, in which case they update all available fields.
      \n 2. The user is owner of the source, in this case they can only update the end date. ","parameters":[{"in":"path","name":"id","description":"Non-employee record id (UUID)","example":"ef38f94347e94562b5bb8424a56397d8","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Non-employee record creation request body. Attributes are restricted by user type. Owner of source can update end date. Organization admins can update all available fields.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountName":{"type":"string","description":"Requested identity account name.","example":"william.smith"},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"sourceId":{"type":"string","description":"Non-Employee's source id.","example":"2c91808568c529c60168cca6f90c1313"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee, 10 attributes is the maximum size supported."},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2020-03-24T00:00:00-05:00"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2021-03-25T00:00:00-05:00"}},"required":["accountName","firstName","lastName","email","phone","manager","sourceId","startDate","endDate"]}}}},"responses":{"200":{"description":"An updated non-employee record.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee record id."},"accountName":{"type":"string","description":"Requested identity account name."},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"sourceId":{"type":"string","description":"Non-Employee's source id.","example":"2c91808568c529c60168cca6f90c1313"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee."},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2019-08-23T18:52:59.162Z"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2020-08-23T18:52:59.162Z"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/non-employee-records/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"accountName":"william.smith","firstName":"William","lastName":"Smith","email":"william.smith@example.com","phone":"5555555555","manager":"jane.doe","sourceId":"2c91808568c529c60168cca6f90c1313","data":{},"startDate":"2020-03-24T00:00:00-05:00","endDate":"2021-03-25T00:00:00-05:00"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Update Non-Employee Record","description":{"content":"This request will update a non-employee record.

      There are two contextual uses for this endpoint:
      \n 1. The user has the role context of `idn:nesr:update`, in which case they update all available fields.
      \n 2. The user is owner of the source, in this case they can only update the end date. ","type":"text/plain"},"url":{"path":["non-employee-records",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Non-employee record id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Non-Employee Record + + + +This request will update a non-employee record.<br><br> There are two contextual uses for this endpoint:<br> + 1. The user has the role context of `idn:nesr:update`, in which case they update all available fields.<br> + 2. The user is owner of the source, in this case they can only update the end date. + +
      Path Parameters
      Request Body required
      + +Non-employee record creation request body. Attributes are restricted by user type. Owner of source can update end date. Organization admins can update all available fields. + +
        data object
        + +Attribute blob/bag for a non-employee, 10 attributes is the maximum size supported. + +
      • property name* string
      + +An updated non-employee record. + +
      Schema
        data object
        + +Attribute blob/bag for a non-employee. + +
      • property name* string
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-records-bulk-upload.api.mdx b/docs/sailpoint-api-v3/non-employee-records-bulk-upload.api.mdx new file mode 100644 index 000000000..2286a4d4b --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-records-bulk-upload.api.mdx @@ -0,0 +1,93 @@ +--- +id: non-employee-records-bulk-upload +sidebar_label: Imports, or Updates, Non-Employee Records +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRecordsBulkUpload","tags":["Non-Employee Lifecycle Management"],"description":"This post will import, or update, Non-Employee records found in the CSV.

      Requires role context of `idn:nesr:create`","parameters":[{"in":"path","name":"id","description":"Source Id (UUID)","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The form-data \"name\" attribute for the file content must be \"data\". See the schema specification.","content":{"multipart/form-data":{"schema":{"type":"object","properties":{"data":{"type":"string","format":"base64"}},"required":["data"]},"example":{"data":"accountName,firstName,lastName,phone,email,manager,startDate,endDate Jon.Smith, Jon, Smith, 555-555-5555, jon@jon.doe.nope.com, Jim Smith, 2020-04-05T08:00:00-10:00, 2020-08-07T19:00:00-10:00 William.Chaffin, William, Chaffin, 555-555-5555, william@chaffins.nope.com, Bertram Chaffin, 2020-04-05T08:00:00-10:00, 2020-08-07T19:00:00-10:00"}}}},"responses":{"202":{"description":"The CSV was accepted to be bulk inserted now or at a later time.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The bulk upload job's ID. (UUID)","example":"2c91808568c529c60168cca6f90cffff"},"sourceId":{"type":"string","description":"The ID of the source to bulk-upload non-employees to. (UUID)","example":"2c91808568c529c60168cca6f90c1313"},"created":{"type":"string","format":"date-time","description":"The date-time the job was submitted.","example":"2019-08-23T18:52:59.162Z"},"modified":{"type":"string","format":"date-time","description":"The date-time that the job was last updated.","example":"2019-08-23T18:52:59.162Z"},"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","ERROR"],"description":"Returns the following values indicating the progress or result of the bulk upload job.\n\"PENDING\" means the job is queued and waiting to be processed.\n\"IN_PROGRESS\" means the job is currently being processed.\n\"COMPLETED\" means the job has been completed without any errors.\n\"ERROR\" means the job failed to process with errors.\n","example":"PENDING"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.\nThe response body will contain the list of specific errors with one on each line.\n","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/non-employee-sources/{id}/non-employee-bulk-upload","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Imports, or Updates, Non-Employee Records","description":{"content":"This post will import, or update, Non-Employee records found in the CSV.

      Requires role context of `idn:nesr:create`","type":"text/plain"},"url":{"path":["non-employee-sources",":id","non-employee-bulk-upload"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Source Id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"multipart/form-data"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"formdata","formdata":[]}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Imports, or Updates, Non-Employee Records + + + +This post will import, or update, Non-Employee records found in the CSV.<br><br> Requires role context of `idn:nesr:create` + +
      Path Parameters
      Request Body
      + +The form-data "name" attribute for the file content must be "data". See the schema specification. + +
      + +The CSV was accepted to be bulk inserted now or at a later time. + +
      Schema
      + +Client Error - Returned if the request body is invalid. +The response body will contain the list of specific errors with one on each line. + + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-records-export.api.mdx b/docs/sailpoint-api-v3/non-employee-records-export.api.mdx new file mode 100644 index 000000000..a3fe8afb1 --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-records-export.api.mdx @@ -0,0 +1,87 @@ +--- +id: non-employee-records-export +sidebar_label: Exports Non-Employee Records to CSV +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRecordsExport","tags":["Non-Employee Lifecycle Management"],"description":"This requests a CSV download for all non-employees from a provided source.

      Requires role context of `idn:nesr:read`","parameters":[{"in":"path","name":"id","description":"Source Id (UUID)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Exported CSV","content":{"text/csv":{"example":"accountName,firstName,lastName,phone,email,manager,startDate,endDate\nJon.Smith, Jon, Smith, 555-555-5555, jon@jon.doe.nope.com, Jim Smith, 2020-04-05T08:00:00-10:00,2020-08-07T19:00:00-10:00\nWilliam.Chaffin, William, Chaffin, 555-555-5555, william@chaffins.nope.com, Bertram Chaffin, 2020-04-05T08:00:00-10:00,2020-08-07T19:00:00-10:00\n"}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-sources/{id}/non-employees/download","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Exports Non-Employee Records to CSV","description":{"content":"This requests a CSV download for all non-employees from a provided source.

      Requires role context of `idn:nesr:read`","type":"text/plain"},"url":{"path":["non-employee-sources",":id","non-employees","download"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Source Id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"text/csv"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Exports Non-Employee Records to CSV + + + +This requests a CSV download for all non-employees from a provided source.<br><br> Requires role context of `idn:nesr:read` + +
      Path Parameters
      + +Exported CSV + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-reject-request.api.mdx b/docs/sailpoint-api-v3/non-employee-reject-request.api.mdx new file mode 100644 index 000000000..bc2df9efb --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-reject-request.api.mdx @@ -0,0 +1,79 @@ +--- +id: non-employee-reject-request +sidebar_label: Reject a Non-Employee Request +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRejectRequest","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This endpoint will reject an approval item request and notify user.

      The current user must be the requested approver.","parameters":[{"in":"path","name":"id","description":"Non-Employee approval item id (UUID)","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"comment":{"type":"string","description":"Comment on the approval item.","maxLength":4000}},"required":["comment"]}}}},"responses":{"200":{"description":"Non-Employee approval item object.","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee approval item id","example":"2c1e388b-1e55-4b0a-ab5c-897f1204159c"},"approver":{"description":"Reference to the associated Identity","type":"object","properties":{"type":{"type":"string","enum":["GOVERNANCE_GROUP","IDENTITY"],"example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}},"accountName":{"type":"string","description":"Requested identity account name","example":"test.account"},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"approvalOrder":{"type":"number","description":"Approval order","example":1},"comment":{"type":"string","description":"comment of approver"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}},{"type":"object","properties":{"nonEmployeeRequest":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee request id."},"requester":{"type":"object","properties":{"type":{"type":"string","enum":["GOVERNANCE_GROUP","IDENTITY"],"example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}},"example":{"type":"IDENTITY","id":"2c9180866166b5b0016167c32ef31a66","name":"William Smith"}}}}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/non-employee-approvals/{id}/reject","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"comment":"string"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Reject a Non-Employee Request","description":{"content":"This endpoint will reject an approval item request and notify user.

      The current user must be the requested approver.","type":"text/plain"},"url":{"path":["non-employee-approvals",":id","reject"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Non-Employee approval item id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Reject a Non-Employee Request + + + +This endpoint will reject an approval item request and notify user.<br><br> The current user must be the requested approver. + +
      Path Parameters
      Request Body required
      + +Non-Employee approval item object. + +
      Schema
        approver object
        + +Reference to the associated Identity + +
        nonEmployeeRequest object
        requester object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-request-creation.api.mdx b/docs/sailpoint-api-v3/non-employee-request-creation.api.mdx new file mode 100644 index 000000000..2915d5415 --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-request-creation.api.mdx @@ -0,0 +1,95 @@ +--- +id: non-employee-request-creation +sidebar_label: Create Non-Employee Request +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRequestCreation","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This request will create a non-employee request and notify the approver.

      Requires role context of `idn:nesr:create` or the user must own the source.","requestBody":{"description":"Non-Employee creation request body","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountName":{"type":"string","description":"Requested identity account name.","example":"william.smith"},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"sourceId":{"type":"string","description":"Non-Employee's source id.","example":"2c91808568c529c60168cca6f90c1313"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee, 10 attributes is the maximum size supported."},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2020-03-24T00:00:00-05:00"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2021-03-25T00:00:00-05:00"}},"required":["accountName","firstName","lastName","email","phone","manager","sourceId","startDate","endDate"]}}}},"responses":{"200":{"description":"Non-Employee request creation object","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},{"type":"object","properties":{"accountName":{"type":"string","description":"Requested identity account name.","example":"william.smith"},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"nonEmployeeSource":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee."},"approvalItems":{"description":"List of approval item for the request","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee approval item id","example":"2c1e388b-1e55-4b0a-ab5c-897f1204159c"},"approver":{"description":"Reference to the associated Identity","type":"object","properties":{"type":{"type":"string","enum":["GOVERNANCE_GROUP","IDENTITY"],"example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}},"accountName":{"type":"string","description":"Requested identity account name","example":"test.account"},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"approvalOrder":{"type":"number","description":"Approval order","example":1},"comment":{"type":"string","description":"comment of approver"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"comment":{"type":"string","description":"comment of requester"},"completionDate":{"type":"string","format":"date-time","description":"When the request was completely approved.","example":"2020-03-24T11:11:41.139-05:00"},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2020-03-24T00:00:00-05:00"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2021-03-25T00:00:00-05:00"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2020-03-24T11:11:41.139-05:00"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2020-03-24T11:11:41.139-05:00"}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"400.1 Bad Request Content":{"description":"Response for bad request content","value":{"detailCode":"400.1 Bad Request Content","trackingId":"e7eab60924f64aa284175b9fa3309599","messages":[{"locale":"en","localeOrigin":"REQUEST","text":"firstName is required; accountName is required;"}]}},"400.1.409 Reference conflict":{"description":"Response for reference conflict","value":{"detailCode":"400.1.409 Reference conflict","trackingId":"e7eab60924f64aa284175b9fa3309599","messages":[{"locale":"en","localeOrigin":"REQUEST","text":"Unable to create Non-Employee because the accountName \"existed\" is already being used."}]}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/non-employee-requests","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"accountName":"william.smith","firstName":"William","lastName":"Smith","email":"william.smith@example.com","phone":"5555555555","manager":"jane.doe","sourceId":"2c91808568c529c60168cca6f90c1313","data":{},"startDate":"2020-03-24T00:00:00-05:00","endDate":"2021-03-25T00:00:00-05:00"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Create Non-Employee Request","description":{"content":"This request will create a non-employee request and notify the approver.

      Requires role context of `idn:nesr:create` or the user must own the source.","type":"text/plain"},"url":{"path":["non-employee-requests"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Non-Employee Request + + + +This request will create a non-employee request and notify the approver.<br><br> Requires role context of `idn:nesr:create` or the user must own the source. + +
      Request Body required
      + +Non-Employee creation request body + +
        data object
        + +Attribute blob/bag for a non-employee, 10 attributes is the maximum size supported. + +
      • property name* string
      + +Non-Employee request creation object + +
      Schema
        nonEmployeeSource object
        data object
        + +Attribute blob/bag for a non-employee. + +
      • property name* string
      • approvalItems object[]
        + +List of approval item for the request + +
        approver object
        + +Reference to the associated Identity + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-request-deletion.api.mdx b/docs/sailpoint-api-v3/non-employee-request-deletion.api.mdx new file mode 100644 index 000000000..74cee7d88 --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-request-deletion.api.mdx @@ -0,0 +1,88 @@ +--- +id: non-employee-request-deletion +sidebar_label: Delete Non-Employee Request +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRequestDeletion","tags":["Non-Employee Lifecycle Management"],"description":"This request will delete a non-employee request.

      \nRequires role context of `idn:nesr:delete`","parameters":[{"in":"path","name":"id","description":"Non-Employee request id in the UUID format","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/non-employee-requests/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Delete Non-Employee Request","description":{"content":"This request will delete a non-employee request.

      \nRequires role context of `idn:nesr:delete`","type":"text/plain"},"url":{"path":["non-employee-requests",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Non-Employee request id in the UUID format","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Non-Employee Request + + + +This request will delete a non-employee request.<br><br> +Requires role context of `idn:nesr:delete` + +
      Path Parameters
      + +No content - indicates the request was successful but there is no content to be returned in the response. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-request-get.api.mdx b/docs/sailpoint-api-v3/non-employee-request-get.api.mdx new file mode 100644 index 000000000..4a52aae9a --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-request-get.api.mdx @@ -0,0 +1,102 @@ +--- +id: non-employee-request-get +sidebar_label: Get a Non-Employee Request +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRequestGet","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This gets a non-employee request.

      \nThere are two contextual uses for this endpoint:
      \n 1. The user has the role context of `idn:nesr:read`, in this case the user can get the non-employee request for any user.
      \n 2. The user must be the owner of the non-employee request.","parameters":[{"in":"path","name":"id","description":"Non-Employee request id (UUID)","example":"ef38f94347e94562b5bb8424a56397d8","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Non-Employee request object.","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},{"type":"object","properties":{"accountName":{"type":"string","description":"Requested identity account name.","example":"william.smith"},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"nonEmployeeSource":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee."},"approvalItems":{"description":"List of approval item for the request","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee approval item id","example":"2c1e388b-1e55-4b0a-ab5c-897f1204159c"},"approver":{"description":"Reference to the associated Identity","type":"object","properties":{"type":{"type":"string","enum":["GOVERNANCE_GROUP","IDENTITY"],"example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}},"accountName":{"type":"string","description":"Requested identity account name","example":"test.account"},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"approvalOrder":{"type":"number","description":"Approval order","example":1},"comment":{"type":"string","description":"comment of approver"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"comment":{"type":"string","description":"comment of requester"},"completionDate":{"type":"string","format":"date-time","description":"When the request was completely approved.","example":"2020-03-24T11:11:41.139-05:00"},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2020-03-24T00:00:00-05:00"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2021-03-25T00:00:00-05:00"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2020-03-24T11:11:41.139-05:00"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2020-03-24T11:11:41.139-05:00"}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-requests/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get a Non-Employee Request","description":{"content":"This gets a non-employee request.

      \nThere are two contextual uses for this endpoint:
      \n 1. The user has the role context of `idn:nesr:read`, in this case the user can get the non-employee request for any user.
      \n 2. The user must be the owner of the non-employee request.","type":"text/plain"},"url":{"path":["non-employee-requests",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Non-Employee request id (UUID)","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a Non-Employee Request + + + +This gets a non-employee request.<br><br> +There are two contextual uses for this endpoint:<br> + 1. The user has the role context of `idn:nesr:read`, in this case the user can get the non-employee request for any user.<br> + 2. The user must be the owner of the non-employee request. + +
      Path Parameters
      + +Non-Employee request object. + +
      Schema
        nonEmployeeSource object
        data object
        + +Attribute blob/bag for a non-employee. + +
      • property name* string
      • approvalItems object[]
        + +List of approval item for the request + +
        approver object
        + +Reference to the associated Identity + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-request-list.api.mdx b/docs/sailpoint-api-v3/non-employee-request-list.api.mdx new file mode 100644 index 000000000..fd74c2ddb --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-request-list.api.mdx @@ -0,0 +1,77 @@ +--- +id: non-employee-request-list +sidebar_label: List Non-Employee Requests +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRequestList","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This gets a list of non-employee requests.

      There are two contextual uses for the `requested-for` path parameter:
      \n 1. The user has the role context of `idn:nesr:read`, in which case he or she may request a list non-employee requests assigned to a particular account manager by passing in that manager's id.
      \n 2. The current user is an account manager, in which case \"me\" should be provided as the `requested-for` value. This will provide the user with a list of the non-employee requests in the source(s) he or she manages.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"requested-for","required":true,"schema":{"type":"string"},"example":"me","description":"The identity for whom the request was made. *me* indicates the current user."},{"in":"query","name":"sorters","required":false,"schema":{"type":"string","format":"comma-separated"},"example":"created,approvalStatus","description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407#toc-hId-2058949)

      Sorting is supported for the following fields: **created, approvalStatus, firstName, lastName, email, phone, accountName, startDate, endDate**"},{"in":"query","name":"filters","required":false,"schema":{"type":"string"},"example":"sourceId eq \"2c91808568c529c60168cca6f90c1313\"","description":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407)

      Filtering is supported for the following fields and operators:

      **sourceId**: *eq*

      *Example:* sourceId eq \"2c91808568c529c60168cca6f90c1313\""}],"responses":{"200":{"description":"List of non-employee request objects.","content":{"application/json":{"schema":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},{"type":"object","properties":{"accountName":{"type":"string","description":"Requested identity account name.","example":"william.smith"},"firstName":{"type":"string","description":"Non-Employee's first name.","example":"William"},"lastName":{"type":"string","description":"Non-Employee's last name.","example":"Smith"},"email":{"type":"string","description":"Non-Employee's email.","example":"william.smith@example.com"},"phone":{"type":"string","description":"Non-Employee's phone.","example":"5555555555"},"manager":{"type":"string","description":"The account ID of a valid identity to serve as this non-employee's manager.","example":"jane.doe"},"nonEmployeeSource":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"Attribute blob/bag for a non-employee."},"approvalItems":{"description":"List of approval item for the request","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee approval item id","example":"2c1e388b-1e55-4b0a-ab5c-897f1204159c"},"approver":{"description":"Reference to the associated Identity","type":"object","properties":{"type":{"type":"string","enum":["GOVERNANCE_GROUP","IDENTITY"],"example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}},"accountName":{"type":"string","description":"Requested identity account name","example":"test.account"},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"approvalOrder":{"type":"number","description":"Approval order","example":1},"comment":{"type":"string","description":"comment of approver"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}},"approvalStatus":{"type":"string","enum":["APPROVED","REJECTED","PENDING","NOT_READY","CANCELLED"],"description":"Enum representing the non-employee request approval status"},"comment":{"type":"string","description":"comment of requester"},"completionDate":{"type":"string","format":"date-time","description":"When the request was completely approved.","example":"2020-03-24T11:11:41.139-05:00"},"startDate":{"type":"string","format":"date-time","description":"Non-Employee employment start date.","example":"2020-03-24T00:00:00-05:00"},"endDate":{"type":"string","format":"date-time","description":"Non-Employee employment end date.","example":"2021-03-25T00:00:00-05:00"},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2020-03-24T11:11:41.139-05:00"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2020-03-24T11:11:41.139-05:00"}}}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-requests","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"List Non-Employee Requests","description":{"content":"This gets a list of non-employee requests.

      There are two contextual uses for the `requested-for` path parameter:
      \n 1. The user has the role context of `idn:nesr:read`, in which case he or she may request a list non-employee requests assigned to a particular account manager by passing in that manager's id.
      \n 2. The current user is an account manager, in which case \"me\" should be provided as the `requested-for` value. This will provide the user with a list of the non-employee requests in the source(s) he or she manages.","type":"text/plain"},"url":{"path":["non-employee-requests"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"(Required) The identity for whom the request was made. *me* indicates the current user.","type":"text/plain"},"key":"requested-for","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407#toc-hId-2058949)

      Sorting is supported for the following fields: **created, approvalStatus, firstName, lastName, email, phone, accountName, startDate, endDate**","type":"text/plain"},"key":"sorters","value":""},{"disabled":false,"description":{"content":"Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407)

      Filtering is supported for the following fields and operators:

      **sourceId**: *eq*

      *Example:* sourceId eq \"2c91808568c529c60168cca6f90c1313\"","type":"text/plain"},"key":"filters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Non-Employee Requests + + + +This gets a list of non-employee requests.<br><br> There are two contextual uses for the `requested-for` path parameter:<br> + 1. The user has the role context of `idn:nesr:read`, in which case he or she may request a list non-employee requests assigned to a particular account manager by passing in that manager's id.<br> + 2. The current user is an account manager, in which case "me" should be provided as the `requested-for` value. This will provide the user with a list of the non-employee requests in the source(s) he or she manages. + +
      Query Parameters

        Sorting is supported for the following fields: **created, approvalStatus, firstName, lastName, email, phone, accountName, startDate, endDate**"}}>

        Filtering is supported for the following fields and operators:

        **sourceId**: *eq*

        *Example:* sourceId eq \"2c91808568c529c60168cca6f90c1313\""}}>
      + +List of non-employee request objects. + +
      Schema array
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-request-summary-get.api.mdx b/docs/sailpoint-api-v3/non-employee-request-summary-get.api.mdx new file mode 100644 index 000000000..ca7f56b14 --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-request-summary-get.api.mdx @@ -0,0 +1,77 @@ +--- +id: non-employee-request-summary-get +sidebar_label: Get Summary of Non-Employee Requests +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeRequestSummaryGet","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This request will retrieve a summary of non-employee requests.

      There are two contextual uses for the `requested-for` path parameter:
      \n 1. The user has the role context of `idn:nesr:read`, in which case he or she may request a summary of all non-employee approval requests assigned to a particular account manager by passing in that manager's id.
      \n 2. The current user is an account manager, in which case \"me\" should be provided as the `requested-for` value. This will provide the user with a summary of the non-employee requests in the source(s) he or she manages.","parameters":[{"in":"path","name":"requested-for","description":"The identity (UUID) of the non-employee account manager for whom the summary is being retrieved. Use \"me\" instead to indicate the current user.","required":true,"schema":{"type":"string","format":"uuid (if user is Org Admin)"}}],"responses":{"200":{"description":"Non-Employee request summary object.","content":{"application/json":{"schema":{"type":"object","properties":{"approved":{"type":"number","description":"The number of approved non-employee requests on all sources that *requested-for* user manages."},"rejected":{"type":"number","description":"The number of rejected non-employee requests on all sources that *requested-for* user manages."},"pending":{"type":"number","description":"The number of pending non-employee requests on all sources that *requested-for* user manages."},"nonEmployeeCount":{"type":"number","description":"The number of non-employee records on all sources that *requested-for* user manages."}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-requests/summary/{requested-for}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get Summary of Non-Employee Requests","description":{"content":"This request will retrieve a summary of non-employee requests.

      There are two contextual uses for the `requested-for` path parameter:
      \n 1. The user has the role context of `idn:nesr:read`, in which case he or she may request a summary of all non-employee approval requests assigned to a particular account manager by passing in that manager's id.
      \n 2. The current user is an account manager, in which case \"me\" should be provided as the `requested-for` value. This will provide the user with a summary of the non-employee requests in the source(s) he or she manages.","type":"text/plain"},"url":{"path":["non-employee-requests","summary",":requested-for"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The identity (UUID) of the non-employee account manager for whom the summary is being retrieved. Use \"me\" instead to indicate the current user.","type":"text/plain"},"type":"any","value":"","key":"requested-for"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get Summary of Non-Employee Requests + + + +This request will retrieve a summary of non-employee requests.<br><br> There are two contextual uses for the `requested-for` path parameter:<br> + 1. The user has the role context of `idn:nesr:read`, in which case he or she may request a summary of all non-employee approval requests assigned to a particular account manager by passing in that manager's id.<br> + 2. The current user is an account manager, in which case "me" should be provided as the `requested-for` value. This will provide the user with a summary of the non-employee requests in the source(s) he or she manages. + +
      Path Parameters
      + +Non-Employee request summary object. + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-source-delete.api.mdx b/docs/sailpoint-api-v3/non-employee-source-delete.api.mdx new file mode 100644 index 000000000..cb2e89d1b --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-source-delete.api.mdx @@ -0,0 +1,75 @@ +--- +id: non-employee-source-delete +sidebar_label: Delete Non-Employee Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeSourceDelete","tags":["Non-Employee Lifecycle Management"],"description":"This request will delete a non-employee source.

      Requires role context of `idn:nesr:delete`.","parameters":[{"in":"path","name":"sourceId","description":"Source Id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","content":{"application/json":{}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"delete","path":"/non-employee-sources/{sourceId}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Delete Non-Employee Source","description":{"content":"This request will delete a non-employee source.

      Requires role context of `idn:nesr:delete`.","type":"text/plain"},"url":{"path":["non-employee-sources",":sourceId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Source Id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete Non-Employee Source + + + +This request will delete a non-employee source.<br><br> Requires role context of `idn:nesr:delete`. + +
      Path Parameters
      + +No content - indicates the request was successful but there is no content to be returned in the response. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-source-get.api.mdx b/docs/sailpoint-api-v3/non-employee-source-get.api.mdx new file mode 100644 index 000000000..a1a188ece --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-source-get.api.mdx @@ -0,0 +1,85 @@ +--- +id: non-employee-source-get +sidebar_label: Get a Non-Employee Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeSourceGet","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This gets a non-employee source.

      There are two contextual uses for the requested-for path parameter:
      \n 1. The user has the role context of `idn:nesr:read`, in which case he or she may request any source.
      \n 2. The current user is an account manager, in which case the user can only request sources that they own.","parameters":[{"in":"path","name":"sourceId","description":"Source Id","example":"2c91808b7c28b350017c2a2ec5790aa1","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Non-Employee source object.","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},{"type":"object","properties":{"approvers":{"description":"List of approvers","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["GOVERNANCE_GROUP","IDENTITY"],"example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}}},"accountManagers":{"description":"List of account managers","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["GOVERNANCE_GROUP","IDENTITY"],"example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}}},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-sources/{sourceId}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get a Non-Employee Source","description":{"content":"This gets a non-employee source.

      There are two contextual uses for the requested-for path parameter:
      \n 1. The user has the role context of `idn:nesr:read`, in which case he or she may request any source.
      \n 2. The current user is an account manager, in which case the user can only request sources that they own.","type":"text/plain"},"url":{"path":["non-employee-sources",":sourceId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Source Id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a Non-Employee Source + + + +This gets a non-employee source.<br><br> There are two contextual uses for the requested-for path parameter: <br> + 1. The user has the role context of `idn:nesr:read`, in which case he or she may request any source.<br> + 2. The current user is an account manager, in which case the user can only request sources that they own. + +
      Path Parameters
      + +Non-Employee source object. + +
      Schema
        approvers object[]
        + +List of approvers + +
        accountManagers object[]
        + +List of account managers + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-source-patch.api.mdx b/docs/sailpoint-api-v3/non-employee-source-patch.api.mdx new file mode 100644 index 000000000..ad4391a76 --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-source-patch.api.mdx @@ -0,0 +1,91 @@ +--- +id: non-employee-source-patch +sidebar_label: Patch a Non-Employee Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeSourcePatch","tags":["Non-Employee Lifecycle Management"],"description":"patch a non-employee source. (partial update)
      Patchable field: **name, description, approvers, accountManagers**

      Requires role context of `idn:nesr:update`.","parameters":[{"in":"path","name":"sourceId","description":"Source Id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"A list of non-employee source update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.","required":true,"content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}},"example":[{"op":"replace","path":"/name","value":{"new name":null}},{"op":"replace","path":"/approvers","value":["2c91809f703bb37a017040a2fe8748c7","48b1f463c9e8427db5a5071bd81914b8"]}]}}},"responses":{"200":{"description":"A patched non-employee source object.","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},{"type":"object","properties":{"approvers":{"description":"List of approvers","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["GOVERNANCE_GROUP","IDENTITY"],"example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}}},"accountManagers":{"description":"List of account managers","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["GOVERNANCE_GROUP","IDENTITY"],"example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}}},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/non-employee-sources/{sourceId}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Patch a Non-Employee Source","description":{"content":"patch a non-employee source. (partial update)
      Patchable field: **name, description, approvers, accountManagers**

      Requires role context of `idn:nesr:update`.","type":"text/plain"},"url":{"path":["non-employee-sources",":sourceId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Source Id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Patch a Non-Employee Source + + + +patch a non-employee source. (partial update) <br/> Patchable field: **name, description, approvers, accountManagers**<br><br> Requires role context of `idn:nesr:update`. + +
      Path Parameters
      Request Body array required
      + +A list of non-employee source update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + +
        value object
        + +The value to be used for the operation, required for "add" and "replace" operations + +
      • anyOf
      • string
      • integer
      • anyOf
      • string
      • integer
      + +A patched non-employee source object. + +
      Schema
        approvers object[]
        + +List of approvers + +
        accountManagers object[]
        + +List of account managers + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-sources-creation.api.mdx b/docs/sailpoint-api-v3/non-employee-sources-creation.api.mdx new file mode 100644 index 000000000..6dcbfb5f3 --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-sources-creation.api.mdx @@ -0,0 +1,107 @@ +--- +id: non-employee-sources-creation +sidebar_label: Create Non-Employee Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeSourcesCreation","tags":["Non-Employee Lifecycle Management"],"description":"This request will create a non-employee source.

      Requires role context of `idn:nesr:create`","requestBody":{"description":"Non-Employee source creation request body.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Name of non-employee source.","example":"Retail"},"description":{"type":"string","description":"Description of non-employee source.","example":"Source description"},"owner":{"description":"Owner of non-employee source.","type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Identity id.","example":"2c91808570313110017040b06f344ec9"}},"required":["id"]},"managementWorkgroup":{"type":"string","description":"The ID for the management workgroup that contains source sub-admins","example":"123299"},"approvers":{"description":"List of approvers.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Identity id.","example":"2c91808570313110017040b06f344ec9"}},"required":["id"]},"maxItems":3},"accountManagers":{"description":"List of account managers.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Identity id.","example":"2c91808570313110017040b06f344ec9"}},"required":["id"]},"maxItems":10}},"required":["owner","name","description"]}}}},"responses":{"200":{"description":"Created non-employee source.","content":{"application/json":{"schema":{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},{"type":"object","properties":{"approvers":{"description":"List of approvers","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["GOVERNANCE_GROUP","IDENTITY"],"example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}}},"accountManagers":{"description":"List of account managers","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["GOVERNANCE_GROUP","IDENTITY"],"example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}}},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}]},{"type":"object","properties":{"cloudExternalId":{"type":"string","description":"Legacy ID used for sources from the V1 API. This attribute will be removed from a future version of the API and will not be considered a breaking change. No clients should rely on this ID always being present.","example":"99999"}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/non-employee-sources","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"Retail","description":"Source description","owner":{"id":"2c91808570313110017040b06f344ec9"},"managementWorkgroup":"123299","approvers":[{"id":"2c91808570313110017040b06f344ec9"}],"accountManagers":[{"id":"2c91808570313110017040b06f344ec9"}]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Create Non-Employee Source","description":{"content":"This request will create a non-employee source.

      Requires role context of `idn:nesr:create`","type":"text/plain"},"url":{"path":["non-employee-sources"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create Non-Employee Source + + + +This request will create a non-employee source.<br><br> Requires role context of `idn:nesr:create` + +
      Request Body required
      + +Non-Employee source creation request body. + +
        owner object
        + +Owner of non-employee source. + +
        approvers object[]
        + +**Possible values:** `<= 3` + +
        + +List of approvers. + +
        accountManagers object[]
        + +**Possible values:** `<= 10` + +
        + +List of account managers. + +
      + +Created non-employee source. + +
      Schema
        approvers object[]
        + +List of approvers + +
        accountManagers object[]
        + +List of account managers + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/non-employee-sources-list.api.mdx b/docs/sailpoint-api-v3/non-employee-sources-list.api.mdx new file mode 100644 index 000000000..b19ea5e66 --- /dev/null +++ b/docs/sailpoint-api-v3/non-employee-sources-list.api.mdx @@ -0,0 +1,77 @@ +--- +id: non-employee-sources-list +sidebar_label: List Non-Employee Sources +hide_title: true +hide_table_of_contents: true +api: {"operationId":"nonEmployeeSourcesList","security":[{"bearerAuth":[]}],"tags":["Non-Employee Lifecycle Management"],"description":"This gets a list of non-employee sources.

      There are two contextual uses for the requested-for path parameter:
      \n 1. The user has the role context of `idn:nesr:read`, in which case he or she may request a list sources assigned to a particular account manager by passing in that manager's id.
      \n 2. The current user is an account manager, in which case \"me\" should be provided as the `requested-for` value. This will provide the user with a list of the sources that he or she owns.","parameters":[{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"in":"query","name":"requested-for","required":true,"schema":{"type":"string"},"example":"me","description":"The identity for whom the request was made. *me* indicates the current user."},{"in":"query","name":"non-employee-count","required":false,"example":true,"schema":{"type":"boolean"},"description":"The flag to determine whether return a non-employee count associate with source."},{"in":"query","name":"sorters","required":false,"schema":{"type":"string","format":"comma-separated"},"example":"name,created","description":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407#toc-hId-2058949)

      Sorting is supported for the following fields: **name, created**"}],"responses":{"200":{"description":"List of non-employee sources objects.","content":{"application/json":{"schema":{"type":"array","items":{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"UUID","description":"Non-Employee source id.","example":"a0303682-5e4a-44f7-bdc2-6ce6112549c1"},"sourceId":{"type":"string","description":"Source Id associated with this non-employee source.","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Source name associated with this non-employee source.","example":"Retail"},"description":{"type":"string","description":"Source description associated with this non-employee source.","example":"Source description"}}},{"type":"object","properties":{"approvers":{"description":"List of approvers","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["GOVERNANCE_GROUP","IDENTITY"],"example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}}},"accountManagers":{"description":"List of account managers","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["GOVERNANCE_GROUP","IDENTITY"],"example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"5168015d32f890ca15812c9180835d2e"}}}},"modified":{"type":"string","format":"date-time","description":"When the request was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the request was created.","example":"2019-08-23T18:40:35.772Z"}}}]},{"type":"object","properties":{"nonEmployeeCount":{"type":"number","description":"Number of non-employee records associated with this source."}}}]}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/non-employee-sources","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"List Non-Employee Sources","description":{"content":"This gets a list of non-employee sources.

      There are two contextual uses for the requested-for path parameter:
      \n 1. The user has the role context of `idn:nesr:read`, in which case he or she may request a list sources assigned to a particular account manager by passing in that manager's id.
      \n 2. The current user is an account manager, in which case \"me\" should be provided as the `requested-for` value. This will provide the user with a list of the sources that he or she owns.","type":"text/plain"},"url":{"path":["non-employee-sources"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"(Required) The identity for whom the request was made. *me* indicates the current user.","type":"text/plain"},"key":"requested-for","value":""},{"disabled":false,"description":{"content":"The flag to determine whether return a non-employee count associate with source.","type":"text/plain"},"key":"non-employee-count","value":""},{"disabled":false,"description":{"content":"Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407#toc-hId-2058949)

      Sorting is supported for the following fields: **name, created**","type":"text/plain"},"key":"sorters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## List Non-Employee Sources + + + +This gets a list of non-employee sources.<br><br> There are two contextual uses for the requested-for path parameter: <br> + 1. The user has the role context of `idn:nesr:read`, in which case he or she may request a list sources assigned to a particular account manager by passing in that manager's id.<br> + 2. The current user is an account manager, in which case "me" should be provided as the `requested-for` value. This will provide the user with a list of the sources that he or she owns. + +
      Query Parameters

        Sorting is supported for the following fields: **name, created**"}}>
      + +List of non-employee sources objects. + +
      Schema array
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/o-auth-clients.tag.mdx b/docs/sailpoint-api-v3/o-auth-clients.tag.mdx new file mode 100644 index 000000000..2111e75ad --- /dev/null +++ b/docs/sailpoint-api-v3/o-auth-clients.tag.mdx @@ -0,0 +1,15 @@ +--- +id: o-auth-clients +title: OAuth Clients +description: OAuth Clients +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/password-management.tag.mdx b/docs/sailpoint-api-v3/password-management.tag.mdx new file mode 100644 index 000000000..7433223e6 --- /dev/null +++ b/docs/sailpoint-api-v3/password-management.tag.mdx @@ -0,0 +1,15 @@ +--- +id: password-management +title: Password Management +description: Password Management +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/patch-oauth-client.api.mdx b/docs/sailpoint-api-v3/patch-oauth-client.api.mdx new file mode 100644 index 000000000..338d86960 --- /dev/null +++ b/docs/sailpoint-api-v3/patch-oauth-client.api.mdx @@ -0,0 +1,113 @@ +--- +id: patch-oauth-client +sidebar_label: Patch OAuth Client +hide_title: true +hide_table_of_contents: true +api: {"operationId":"patchOauthClient","tags":["OAuth Clients"],"description":"This performs a targeted update to the field(s) of an OAuth client.\nRequest will require a security scope of\n'idn:oathkeeper-client:update'","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The OAuth client id","example":"ef38f94347e94562b5bb8424a56397d8"}],"requestBody":{"required":true,"description":"A list of OAuth client update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\n\nThe following fields are patchable:\n* tenant\n* businessName\n* homepageUrl\n* name\n* description\n* accessTokenValiditySeconds\n* refreshTokenValiditySeconds\n* redirectUris\n* grantTypes\n* accessType\n* enabled\n* strongAuthSupported\n* claimsSupported\n","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}},"example":[{"op":"replace","path":"/strongAuthSupported","value":true},{"op":"replace","path":"/businessName","value":"acme-solar"}]}}},"responses":{"200":{"description":"Indicates the PATCH operation succeeded, and returns the OAuth client's new representation.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the OAuth client","example":"2c9180835d2e5168015d32f890ca1581"},"businessName":{"type":"string","description":"The name of the business the API Client should belong to","example":"Acme-Solar"},"homepageUrl":{"type":"string","description":"The homepage URL associated with the owner of the API Client","example":"http://localhost:12345"},"name":{"type":"string","description":"A human-readable name for the API Client","example":"Demo API Client"},"description":{"type":"string","description":"A description of the API Client","example":"An API client used for the authorization_code, refresh_token, and client_credentials flows"},"accessTokenValiditySeconds":{"type":"string","description":"The number of seconds an access token generated for this API Client is valid for","example":750},"refreshTokenValiditySeconds":{"type":"string","description":"The number of seconds a refresh token generated for this API Client is valid for","example":86400},"redirectUris":{"type":"array","items":{"type":"string"},"description":"A list of the approved redirect URIs used with the authorization_code flow","example":["http://localhost:12345"]},"grantTypes":{"type":"array","items":{"description":"OAuth2 Grant Type","type":"string","example":"CLIENT_CREDENTIALS","enum":["CLIENT_CREDENTIALS","AUTHORIZATION_CODE","REFRESH_TOKEN"]},"description":"A list of OAuth 2.0 grant types this API Client can be used with","example":["AUTHORIZATION_CODE","CLIENT_CREDENTIALS","REFRESH_TOKEN"]},"accessType":{"description":"The access type (online or offline) of this API Client","example":"OFFLINE","type":"string","enum":["ONLINE","OFFLINE"]},"type":{"description":"The type of the API Client (public or confidential)","example":"CONFIDENTIAL","type":"string","enum":["CONFIDENTIAL","PUBLIC"]},"internal":{"type":"boolean","description":"An indicator of whether the API Client can be used for requests internal to IDN","example":false},"enabled":{"type":"boolean","description":"An indicator of whether the API Client is enabled for use","example":true},"strongAuthSupported":{"type":"boolean","description":"An indicator of whether the API Client supports strong authentication","example":false},"claimsSupported":{"type":"boolean","description":"An indicator of whether the API Client supports the serialization of SAML claims when used with the authorization_code flow","example":false},"created":{"type":"string","format":"date-time","description":"The date and time, down to the millisecond, when the API Client was created","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","description":"The date and time, down to the millisecond, when the API Client was last updated","example":"2018-06-25T20:22:28.104Z"}},"required":["id","businessName","homepageUrl","name","description","accessTokenValiditySeconds","refreshTokenValiditySeconds","redirectUris","grantTypes","accessType","type","internal","enabled","strongAuthSupported","claimsSupported","created","modified"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/oauth-clients/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Patch OAuth Client","description":{"content":"This performs a targeted update to the field(s) of an OAuth client.\nRequest will require a security scope of\n'idn:oathkeeper-client:update'","type":"text/plain"},"url":{"path":["oauth-clients",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The OAuth client id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Patch OAuth Client + + + +This performs a targeted update to the field(s) of an OAuth client. +Request will require a security scope of +'idn:oathkeeper-client:update' + +
      Path Parameters
      Request Body array required
      + +A list of OAuth client update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + +The following fields are patchable: +* tenant +* businessName +* homepageUrl +* name +* description +* accessTokenValiditySeconds +* refreshTokenValiditySeconds +* redirectUris +* grantTypes +* accessType +* enabled +* strongAuthSupported +* claimsSupported + + +
        value object
        + +The value to be used for the operation, required for "add" and "replace" operations + +
      • anyOf
      • string
      • integer
      • anyOf
      • string
      • integer
      + +Indicates the PATCH operation succeeded, and returns the OAuth client's new representation. + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/patch-schema-attribute.api.mdx b/docs/sailpoint-api-v3/patch-schema-attribute.api.mdx new file mode 100644 index 000000000..3dae5c06e --- /dev/null +++ b/docs/sailpoint-api-v3/patch-schema-attribute.api.mdx @@ -0,0 +1,97 @@ +--- +id: patch-schema-attribute +sidebar_label: Patch a Schema Attribute for Non-Employee Source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"patchSchemaAttribute","tags":["Non-Employee Lifecycle Management"],"description":"This end-point patches a specific schema attribute for a non-employee SourceId.

      \nRequires role context of `idn:nesr:update`\n","parameters":[{"in":"path","name":"attributeId","schema":{"type":"string"},"required":true,"description":"The Schema Attribute Id (UUID)"},{"in":"path","name":"sourceId","schema":{"type":"string"},"required":true,"description":"The Source id"}],"requestBody":{"description":"A list of schema attribute update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. The following properties are allowed for update ':' 'label', 'helpText', 'placeholder', 'required'.","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}},"example":[{"op":"replace","path":"/label","value":{"new attribute label":null}}]}},"required":true},"responses":{"200":{"description":"The Schema Attribute was successfully patched.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"UUID","example":"ac110005-7156-1150-8171-5b292e3e0084","description":"Schema Attribute Id"},"system":{"type":"boolean","description":"True if this schema attribute is mandatory on all non-employees sources.","example":true},"modified":{"type":"string","format":"date-time","description":"When the schema attribute was last modified.","example":"2019-08-23T18:52:59.162Z"},"created":{"type":"string","format":"date-time","description":"When the schema attribute was created.","example":"2019-08-23T18:40:35.772Z"},"type":{"type":"string","enum":["TEXT","DATE","IDENTITY"],"description":"Enum representing the type of data a schema attribute accepts."},"label":{"type":"string","description":"Label displayed on the UI for this schema attribute.","example":"Account Name"},"technicalName":{"type":"string","description":"The technical name of the attribute. Must be unique per source.","example":"account.name"},"helpText":{"type":"string","description":"help text displayed by UI.","example":"The unique identifier for the account"},"placeholder":{"type":"string","description":"Hint text that fills UI box.","example":"Enter a unique user name for this account."},"required":{"type":"boolean","description":"If true, the schema attribute is required for all non-employees in the source","example":true}},"required":["type","technicalName","label"]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/non-employee-sources/{sourceId}/schema-attributes/{attributeId}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Patch a Schema Attribute for Non-Employee Source","description":{"content":"This end-point patches a specific schema attribute for a non-employee SourceId.

      \nRequires role context of `idn:nesr:update`\n","type":"text/plain"},"url":{"path":["non-employee-sources",":sourceId","schema-attributes",":attributeId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Schema Attribute Id (UUID)","type":"text/plain"},"type":"any","value":"","key":"attributeId"},{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Patch a Schema Attribute for Non-Employee Source + + + +This end-point patches a specific schema attribute for a non-employee SourceId.<br><br> +Requires role context of `idn:nesr:update` + + +
      Path Parameters
      Request Body array required
      + +A list of schema attribute update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. The following properties are allowed for update ':' 'label', 'helpText', 'placeholder', 'required'. + +
        value object
        + +The value to be used for the operation, required for "add" and "replace" operations + +
      • anyOf
      • string
      • integer
      • anyOf
      • string
      • integer
      + +The Schema Attribute was successfully patched. + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/patch-service-desk-integration.api.mdx b/docs/sailpoint-api-v3/patch-service-desk-integration.api.mdx new file mode 100644 index 000000000..17f73cdf4 --- /dev/null +++ b/docs/sailpoint-api-v3/patch-service-desk-integration.api.mdx @@ -0,0 +1,133 @@ +--- +id: patch-service-desk-integration +sidebar_label: Service Desk Integration Update - PATCH +hide_title: true +hide_table_of_contents: true +api: {"operationId":"patchServiceDeskIntegration","tags":["Service Desk Integration"],"description":"Update an existing ServiceDeskIntegration by ID with a PATCH request.","parameters":[{"name":"id","in":"path","description":"ID of the Service Desk integration to update","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"anId"}}],"requestBody":{"required":true,"description":"A list of SDIM update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\n\nPATCH can only be applied to the following fields:\n * \"beforeProvisioningRule\"\n\nA 403 Forbidden Error indicates that you attempted to PATCH a field that is not allowed.\n","content":{"application/json-patch+json":{"schema":{"type":"object","description":"A JSONPatch document as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","properties":{"operations":{"description":"Operations to be applied","type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}}},"example":"[\n {\n\t \"op\": \"replace\",\n\t \"path\": \"/description\",\n\t \"value\": \"A new description\"\n }\n]"}}}},"responses":{"200":{"description":"ServiceDeskIntegrationDto as updated","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true},"modified":{"description":"Last modification date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true}}},{"type":"object","description":"Specification of a Service Desk integration","required":["description","type","attributes"],"properties":{"description":{"description":"Description of the Service Desk integration","type":"string","example":"A very nice Service Desk integration"},"type":{"description":"Type of the Service Desk integration","type":"string","default":"ServiceNowSDIM"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the identity that is the owner of this Service Desk integration","default":{"type":"IDENTITY"}},"clusterRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the source cluster for this Service Desk integration","default":{"type":"CLUSTER"}},"cluster":{"description":"ID of the cluster for the Service Desk integration (replaced by clusterRef, retained for backward compatibility)","type":"string","example":"xyzzy999","deprecated":true},"managedSources":{"description":"Source IDs for the Service Desk integration (replaced by provisioningConfig.managedSResourceRefs, but retained here for backward compatibility)","type":"array","items":{"type":"string"},"deprecated":true},"provisioningConfig":{"description":"The 'provisioningConfig' property specifies the configuration used to provision integrations.","type":"object","properties":{"universalManager":{"description":"Specifies whether this configuration is used to manage provisioning requests for all sources from the org. If true, no managedResourceRefs are allowed.","type":"boolean","readOnly":true},"managedResourceRefs":{"description":"References to sources for the Service Desk integration template. May only be specified if universalManager is false.","type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"default":{"type":"SOURCE"}}},"planInitializerScript":{"description":"This is a reference to a plan initializer script.","type":"object","properties":{"source":{"description":"This is a Rule that allows provisioning instruction changes.","type":"string"}}}}},"attributes":{"description":"Attributes of the Service Desk integration. Validation constraints enforced by the implementation.","type":"object","additionalProperties":true},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to beforeProvisioningRule for this Service Desk integration","default":{"type":"RULE"}}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:service-desk-admin:write","idn:service-desk-integration:write"]}],"method":"patch","path":"/service-desk-integrations/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":"[\n {\n\t \"op\": \"replace\",\n\t \"path\": \"/description\",\n\t \"value\": \"A new description\"\n }\n]","info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Service Desk Integration Update - PATCH","description":{"content":"Update an existing ServiceDeskIntegration by ID with a PATCH request.","type":"text/plain"},"url":{"path":["service-desk-integrations",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the Service Desk integration to update","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Service Desk Integration Update - PATCH + + + +Update an existing ServiceDeskIntegration by ID with a PATCH request. + +
      Path Parameters
      Request Body required
      + +A list of SDIM update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + +PATCH can only be applied to the following fields: + * "beforeProvisioningRule" + +A 403 Forbidden Error indicates that you attempted to PATCH a field that is not allowed. + + +
        operations object[]
        + +Operations to be applied + +
        value object
        + +The value to be used for the operation, required for "add" and "replace" operations + +
      • anyOf
      • string
      • integer
      • anyOf
      • string
      • integer
      + +ServiceDeskIntegrationDto as updated + +
      Schema
        ownerRef object
        + +Reference to the identity that is the owner of this Service Desk integration + +
        clusterRef object
        + +Reference to the source cluster for this Service Desk integration + +
        provisioningConfig object
        + +The 'provisioningConfig' property specifies the configuration used to provision integrations. + +
        managedResourceRefs object[]
        + +References to sources for the Service Desk integration template. May only be specified if universalManager is false. + +
        planInitializerScript object
        + +This is a reference to a plan initializer script. + +
        attributes object
        + +Attributes of the Service Desk integration. Validation constraints enforced by the implementation. + +
        beforeProvisioningRule object
        + +Reference to beforeProvisioningRule for this Service Desk integration + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/personal-access-tokens.tag.mdx b/docs/sailpoint-api-v3/personal-access-tokens.tag.mdx new file mode 100644 index 000000000..68480b481 --- /dev/null +++ b/docs/sailpoint-api-v3/personal-access-tokens.tag.mdx @@ -0,0 +1,15 @@ +--- +id: personal-access-tokens +title: Personal Access Tokens +description: Personal Access Tokens +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/public-identities-config.tag.mdx b/docs/sailpoint-api-v3/public-identities-config.tag.mdx new file mode 100644 index 000000000..5b69b4142 --- /dev/null +++ b/docs/sailpoint-api-v3/public-identities-config.tag.mdx @@ -0,0 +1,22 @@ +--- +id: public-identities-config +title: Public Identities Config +description: Public Identities Config +--- + + + +The purpose of this API is to set publicly visible attributes from your Identity Profile for your organization. +These attributes will be visible for request approvers within an Access Request or a Certification Campaign. +By default, first name, last name and manager will be shown. + + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/public-identities.tag.mdx b/docs/sailpoint-api-v3/public-identities.tag.mdx new file mode 100644 index 000000000..3faa54470 --- /dev/null +++ b/docs/sailpoint-api-v3/public-identities.tag.mdx @@ -0,0 +1,15 @@ +--- +id: public-identities +title: Public Identities +description: Public Identities +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/put-account.api.mdx b/docs/sailpoint-api-v3/put-account.api.mdx new file mode 100644 index 000000000..1bdf02458 --- /dev/null +++ b/docs/sailpoint-api-v3/put-account.api.mdx @@ -0,0 +1,89 @@ +--- +id: put-account +sidebar_label: Update Account +hide_title: true +hide_table_of_contents: true +api: {"operationId":"putAccount","tags":["Accounts"],"description":"This API submits an account update task and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.\n>**NOTE: The PUT Account API is designated only for Delimited File sources.**","security":[{"bearerAuth":["idn:account:update"]}],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The account ID","example":"ef38f94347e94562b5bb8424a56397d8"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["attributes"],"properties":{"attributes":{"description":"The schema attribute values for the account","type":"object","example":{"city":"Austin","displayName":"John Doe","userName":"jdoe","sAMAccountName":"jDoe","mail":"john.doe@sailpoint.com"}}}}}}},"responses":{"202":{"description":"Async task details","content":{"application/json":{"schema":{"description":"Accounts async response containing details on started async process","required":["id"],"type":"object","properties":{"id":{"description":"id of the task","type":"string","example":"2c91808474683da6017468693c260195"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/accounts/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"attributes":{"city":"Austin","displayName":"John Doe","userName":"jdoe","sAMAccountName":"jDoe","mail":"john.doe@sailpoint.com"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Update Account","description":{"content":"This API submits an account update task and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.\n>**NOTE: The PUT Account API is designated only for Delimited File sources.**","type":"text/plain"},"url":{"path":["accounts",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The account ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Account + + + +This API submits an account update task and returns the task ID. +A token with ORG_ADMIN authority is required to call this API. +>**NOTE: The PUT Account API is designated only for Delimited File sources.** + +
      Path Parameters
      Request Body required
      + +Async task details + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/query-password-info.api.mdx b/docs/sailpoint-api-v3/query-password-info.api.mdx new file mode 100644 index 000000000..968125b10 --- /dev/null +++ b/docs/sailpoint-api-v3/query-password-info.api.mdx @@ -0,0 +1,79 @@ +--- +id: query-password-info +sidebar_label: Query Password Info +hide_title: true +hide_table_of_contents: true +api: {"operationId":"queryPasswordInfo","tags":["Password Management"],"description":"This API is used to query password related information. A token with API authority is required to call this API.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"userName":{"type":"string","description":"The login name of the user","example":"Abby.Smith"},"sourceName":{"type":"string","description":"The display name of the source","example":"My-AD"}}}}}},"responses":{"200":{"description":"Reference to the password info.","content":{"application/json":{"schema":{"type":"object","properties":{"identityId":{"type":"string","description":"Identity ID","example":"2c918085744fec4301746f9a5bce4605"},"sourceId":{"type":"string","description":"source ID","example":"2c918083746f642c01746f990884012a"},"publicKeyId":{"type":"string","description":"public key ID","example":"N2M1OTJiMGEtMDJlZS00ZWU3LTkyYTEtNjA5YmI5NWE3ZWVh"},"publicKey":{"type":"string","description":"User's public key with Base64 encoding","example":"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuGFkWi2J75TztpbaPKd36bJnIB3J8gZ6UcoS9oSDYsqBzPpTsfZXYaEf4Y4BKGgJIXmE/lwhwuj7mU1itdZ2qTSNFtnXA8Fn75c3UUkk+h+wdZbkuSmqlsJo3R1OnJkwkJggcAy9Jvk9jlcrNLWorpQ1w9raUvxtvfgkSdq153KxotenQ1HciSyZ0nA/Kw0UaucLnho8xdRowZs11afXGXA9IT9H6D8T6zUdtSxm0nAyH+mluma5LdTfaM50W3l/L8q56Vrqmx2pZIiwdx/0+g3Y++jV70zom0ZBkC1MmSoLMrQYG5OICNjr72f78B2PaGXfarQHqARLjKpMVt9YIQIDAQAB"},"accounts":{"type":"array","description":"Account info related to queried identity and source","items":{"type":"object","properties":{"accountId":{"type":"string","description":"Account ID of the account. This is specified per account schema in the source configuration. It is used to distinguish accounts. More info can be found here https://community.sailpoint.com/t5/IdentityNow-Connectors/How-do-I-designate-an-account-attribute-as-the-Account-ID-for-a/ta-p/80350","example":"CN=Abby Smith,OU=Austin,OU=Americas,OU=Demo,DC=seri,DC=acme,DC=com"},"accountName":{"type":"string","description":"Display name of the account. This is specified per account schema in the source configuration. It is used to display name of the account. More info can be found here https://community.sailpoint.com/t5/IdentityNow-Connectors/How-do-I-designate-an-account-attribute-as-the-Account-Name-for/ta-p/74008","example":"Abby.Smith"}}}},"policies":{"type":"array","description":"Password constraints","items":{"type":"string"},"example":["passwordRepeatedChar is 3","passwordMinAlpha is 1","passwordMinLength is 5","passwordMinNumeric is 1"]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/query-password-info","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"userName":"Abby.Smith","sourceName":"My-AD"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Query Password Info","description":{"content":"This API is used to query password related information. A token with API authority is required to call this API.","type":"text/plain"},"url":{"path":["query-password-info"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Query Password Info + + + +This API is used to query password related information. A token with API authority is required to call this API. + +
      Request Body required
      + +Reference to the password info. + +
      Schema
        accounts object[]
        + +Account info related to queried identity and source + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/reassign-identity-certifications.api.mdx b/docs/sailpoint-api-v3/reassign-identity-certifications.api.mdx new file mode 100644 index 000000000..c912625de --- /dev/null +++ b/docs/sailpoint-api-v3/reassign-identity-certifications.api.mdx @@ -0,0 +1,87 @@ +--- +id: reassign-identity-certifications +sidebar_label: Reassign Identities or Items +hide_title: true +hide_table_of_contents: true +api: {"operationId":"reassignIdentityCertifications","tags":["Certifications"],"description":"This API reassigns up to 50 identities or items in an identity campaign certification to another reviewer. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. This API does not support requests for certifications assigned to Governance Groups.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The identity campaign certification ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reassign":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of item or identity being reassigned.","example":"ef38f94347e94562b5bb8424a56397d8"},"type":{"type":"string","enum":["TARGET_SUMMARY","ITEM","IDENTITY_SUMMARY"]}},"required":["id","type"]}},"reassignTo":{"type":"string","description":"The ID of the identity to which the certification is reassigned","example":"ef38f94347e94562b5bb8424a56397d8"},"reason":{"type":"string","description":"The reason comment for why the reassign was made","example":"reassigned for some reason"}},"required":["reassign","reassignTo","reason"]}}}},"responses":{"200":{"description":"An identity campaign certification details after completing the reassignment.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"example":"2c9180835d2e5168015d32f890ca1581","type":"string"},"name":{"example":"Source Owner Access Review for Employees [source]","type":"string"},"campaign":{"type":"object","required":["id","name","type","campaignType","description"],"properties":{"id":{"type":"string","description":"The unique ID of the campaign.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the campaign.","example":"Campaign Name"},"type":{"type":"string","enum":["CAMPAIGN"],"description":"The type of object that is being referenced.","example":"CAMPAIGN"},"campaignType":{"type":"string","enum":["MANAGER","SOURCE_OWNER","SEARCH"],"description":"The type of the campaign.","example":"MANAGER"},"description":{"type":"string","description":"The description of the campaign set by the admin who created it.","nullable":true,"example":"A description of the campaign"}}},"completed":{"type":"boolean","description":"Have all decisions been made?","example":true},"identitiesCompleted":{"type":"integer","description":"The number of identities for whom all decisions have been made and are complete.","example":5},"identitiesTotal":{"type":"integer","description":"The total number of identities in the Certification, both complete and incomplete.","example":10},"created":{"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"},"modified":{"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"},"decisionsMade":{"type":"integer","description":"The number of approve/revoke/acknowledge decisions that have been made.","example":20},"decisionsTotal":{"type":"integer","description":"The total number of approve/revoke/acknowledge decisions.","example":40},"due":{"type":"string","format":"date-time","description":"The due date of the certification.","example":"2018-10-19T13:49:37.385Z"},"signed":{"type":"string","format":"date-time","nullable":true,"description":"The date the reviewer signed off on the Certification.","example":"2018-10-19T13:49:37.385Z"},"reviewer":{"type":"object","properties":{"id":{"type":"string","description":"The id of the reviewer.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the reviewer.","example":"Reviewer Name"},"email":{"type":"string","description":"The email of the reviewing identity.","example":"reviewer@test.com"},"type":{"type":"string","enum":["IDENTITY"]},"created":{"nullable":true,"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"},"modified":{"nullable":true,"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"}}},"reassignment":{"type":"object","nullable":true,"properties":{"from":{"type":"object","properties":{"id":{"type":"string","description":"The id of the certification.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the certification.","example":"Certification Name"},"type":{"type":"string","enum":["CERTIFICATION"]},"reviewer":{"type":"object","properties":{"id":{"type":"string","description":"The id of the reviewer.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the reviewer.","example":"Reviewer Name"},"email":{"type":"string","description":"The email of the reviewing identity.","example":"reviewer@test.com"},"type":{"type":"string","enum":["IDENTITY"]},"created":{"nullable":true,"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"},"modified":{"nullable":true,"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"}}}}},"comment":{"type":"string","description":"The comment entered when the Certification was reassigned","example":"Reassigned for a reason"}}},"hasErrors":{"type":"boolean","example":false},"errorMessage":{"nullable":true,"type":"string","example":"The certification has an error"},"phase":{"type":"string","description":"The current phase of the campaign.\n* `STAGED`: The campaign is waiting to be activated.\n* `ACTIVE`: The campaign is active.\n* `SIGNED`: The reviewer has signed off on the campaign, and it is considered complete.\n","enum":["STAGED","ACTIVE","SIGNED"],"example":"ACTIVE"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/certifications/{id}/reassign","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"reassign":[{"id":"ef38f94347e94562b5bb8424a56397d8","type":"TARGET_SUMMARY"}],"reassignTo":"ef38f94347e94562b5bb8424a56397d8","reason":"reassigned for some reason"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Reassign Identities or Items","description":{"content":"This API reassigns up to 50 identities or items in an identity campaign certification to another reviewer. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. This API does not support requests for certifications assigned to Governance Groups.","type":"text/plain"},"url":{"path":["certifications",":id","reassign"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The identity campaign certification ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Reassign Identities or Items + + + +This API reassigns up to 50 identities or items in an identity campaign certification to another reviewer. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. This API does not support requests for certifications assigned to Governance Groups. + +
      Path Parameters
      Request Body required
        reassign object[]
      + +An identity campaign certification details after completing the reassignment. + +
      Schema
        campaign object
        reviewer object
        reassignment object
        from object
        reviewer object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/reject-approval-item.api.mdx b/docs/sailpoint-api-v3/reject-approval-item.api.mdx new file mode 100644 index 000000000..7f69f18b0 --- /dev/null +++ b/docs/sailpoint-api-v3/reject-approval-item.api.mdx @@ -0,0 +1,87 @@ +--- +id: reject-approval-item +sidebar_label: Reject an Approval Item +hide_title: true +hide_table_of_contents: true +api: {"operationId":"rejectApprovalItem","tags":["Work Items"],"description":"This API rejects an Approval Item. Either an admin, or the owning/current user must make this request.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the work item","example":"ef38f94347e94562b5bb8424a56397d8"},{"in":"path","name":"approvalItemId","schema":{"type":"string"},"required":true,"description":"The ID of the approval item.","example":"1211bcaa32112bcef6122adb21cef1ac"}],"responses":{"200":{"description":"A work items details object.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the work item","example":"2c9180835d2e5168015d32f890ca1581"},"requesterId":{"type":"string","description":"ID of the requester","example":"2c9180835d2e5168015d32f890ca1581"},"requesterDisplayName":{"type":"string","description":"The displayname of the requester","example":"John Smith"},"ownerId":{"type":"string","description":"The ID of the owner","example":"2c9180835d2e5168015d32f890ca1581"},"ownerName":{"type":"string","description":"The name of the owner","example":"Jason Smith"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"description":{"type":"string","description":"The description of the work item","example":"Create account on source 'AD'"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"type":{"type":"string","enum":["UNKNOWN","GENERIC","CERTIFICATION","REMEDIATION","DELEGATION","APPROVAL","VIOLATIONREVIEW","FORM","POLICYVIOLATION","CHALLENGE","IMPACTANALYSIS","SIGNOFF","EVENT","MANUALACTION","TEST"]},"remediationItems":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the certification","example":"2c9180835d2e5168015d32f890ca1581"},"targetId":{"type":"string","description":"The ID of the certification target","example":"2c9180835d2e5168015d32f890ca1581"},"targetName":{"type":"string","description":"The name of the certification target","example":"john.smith"},"targetDisplayName":{"type":"string","description":"The display name of the certification target","example":"emailAddress"},"applicationName":{"type":"string","description":"The name of the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute being certified","example":"phoneNumber"},"attributeOperation":{"type":"string","description":"The operation of the certification on the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute being certified","example":"512-555-1212"},"nativeIdentity":{"type":"string","description":"The native identity of the target","example":"jason.smith2"}}},"approvalItems":{"type":"object","properties":{"id":{"type":"string","description":"ID of the approval item","example":"2c9180835d2e5168015d32f890ca1581"},"account":{"type":"string","description":"The account referenced by the approval item","example":"john.smith"},"application":{"type":"string","description":"The name the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute","example":"emailAddress"},"attributeOperation":{"type":"string","description":"The operation of the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute","example":"a@b.com"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]}}},"name":{"type":"string","description":"The work item name","example":"Account Create"},"completed":{"type":"string","format":"date-time","example":"2018-10-19T13:49:37.385Z"},"numItems":{"type":"integer","description":"The number of items in the work item","example":19},"form":{"type":"object","properties":{"id":{"type":"string","description":"ID of the form","example":"2c9180835d2e5168015d32f890ca1581"},"name":{"type":"string","description":"Name of the form","example":"AccountSelection Form"},"title":{"type":"string","description":"The form title","example":"Account Selection for John.Doe"},"subtitle":{"type":"string","description":"The form subtitle.","example":"Please select from the following"},"targetUser":{"type":"string","description":"The name of the user that should be shown this form","example":"Jane.Doe"},"sections":{"type":"object","allOf":[{"type":"object","properties":{"name":{"type":"string","description":"Name of the FormItem","example":"Field1"}}},{"type":"object","properties":{"label":{"type":"string","description":"Label of the section","example":"Section 1"},"formItems":{"type":"array","items":{"type":"object"},"description":"List of FormItems. FormItems can be SectionDetails and/or FieldDetails","example":[]}}}]}}},"errors":{"type":"array","items":{"type":"string"},"example":["The work item ID that was specified was not found."]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/work-items/{id}/reject/{approvalItemId}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Reject an Approval Item","description":{"content":"This API rejects an Approval Item. Either an admin, or the owning/current user must make this request.","type":"text/plain"},"url":{"path":["work-items",":id","reject",":approvalItemId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the work item","type":"text/plain"},"type":"any","value":"","key":"id"},{"disabled":false,"description":{"content":"(Required) The ID of the approval item.","type":"text/plain"},"type":"any","value":"","key":"approvalItemId"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Reject an Approval Item + + + +This API rejects an Approval Item. Either an admin, or the owning/current user must make this request. + +
      Path Parameters
      + +A work items details object. + +
      Schema
        remediationItems object
        approvalItems object
        form object
        sections object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/reject-request.api.mdx b/docs/sailpoint-api-v3/reject-request.api.mdx new file mode 100644 index 000000000..a426b7b6b --- /dev/null +++ b/docs/sailpoint-api-v3/reject-request.api.mdx @@ -0,0 +1,91 @@ +--- +id: reject-request +sidebar_label: Rejects an access request approval. +hide_title: true +hide_table_of_contents: true +api: {"operationId":"rejectRequest","tags":["Access Request Approvals"],"description":"This endpoint rejects an access request approval. Only the owner of the approval and admin users are allowed to perform this action.","parameters":[{"in":"path","name":"approvalId","schema":{"type":"string"},"required":true,"description":"The id of the approval.","example":"2c91808b7294bea301729568c68c002e"}],"requestBody":{"description":"Reviewer's comment.","required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"comment":{"type":"string","description":"Content of the comment","example":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat"},"author":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"ID of the author","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the identity making the comment","example":"Adam Kennedy"}}},"created":{"type":"string","format":"date-time","description":"Date and time comment was created","example":"2017-07-11T18:45:37.098Z"}}}}}},"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/access-request-approvals/{approvalId}/reject","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"comment":"Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat","author":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"Adam Kennedy"},"created":"2017-07-11T18:45:37.098Z"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Rejects an access request approval.","description":{"content":"This endpoint rejects an access request approval. Only the owner of the approval and admin users are allowed to perform this action.","type":"text/plain"},"url":{"path":["access-request-approvals",":approvalId","reject"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The id of the approval.","type":"text/plain"},"type":"any","value":"","key":"approvalId"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Rejects an access request approval. + + + +This endpoint rejects an access request approval. Only the owner of the approval and admin users are allowed to perform this action. + +
      Path Parameters
      Request Body
      + +Reviewer's comment. + +
        author object
      + +Accepted - Returned if the request was successfully accepted into the system. + +
      Schema
      • object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/reload-account.api.mdx b/docs/sailpoint-api-v3/reload-account.api.mdx new file mode 100644 index 000000000..1dd586b3c --- /dev/null +++ b/docs/sailpoint-api-v3/reload-account.api.mdx @@ -0,0 +1,88 @@ +--- +id: reload-account +sidebar_label: Reload Account +hide_title: true +hide_table_of_contents: true +api: {"operationId":"reloadAccount","tags":["Accounts"],"description":"This API asynchronously reloads the account directly from the connector and performs a one-time aggregation process. \nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:account:reload"]}],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The account id","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"202":{"description":"Async task details","content":{"application/json":{"schema":{"description":"Accounts async response containing details on started async process","required":["id"],"type":"object","properties":{"id":{"description":"id of the task","type":"string","example":"2c91808474683da6017468693c260195"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/accounts/{id}/reload","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Reload Account","description":{"content":"This API asynchronously reloads the account directly from the connector and performs a one-time aggregation process. \nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts",":id","reload"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The account id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Reload Account + + + +This API asynchronously reloads the account directly from the connector and performs a one-time aggregation process. +A token with ORG_ADMIN authority is required to call this API. + +
      Path Parameters
      + +Async task details + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/replace-provisioning-policy.api.mdx b/docs/sailpoint-api-v3/replace-provisioning-policy.api.mdx new file mode 100644 index 000000000..730142c36 --- /dev/null +++ b/docs/sailpoint-api-v3/replace-provisioning-policy.api.mdx @@ -0,0 +1,88 @@ +--- +id: replace-provisioning-policy +sidebar_label: Update Provisioning Policy by UsageType +hide_title: true +hide_table_of_contents: true +api: {"operationId":"replaceProvisioningPolicy","tags":["Sources"],"description":"This end-point updates the provisioning policy with the specified usage on the specified source in IdentityNow.\nA token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:provisioning-policy:update"]}],"parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source ID.","example":"2c9180835d191a86015d28455b4a2329"},{"in":"path","name":"usageType","required":true,"schema":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"description":"The type of ProvisioningPolicy usage."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"usageType":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"userName"},"transform":{"type":"object","description":"The transform to apply to the field","example":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"default":{}},"attributes":{"type":"object","description":"Attributes required for the transform","example":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"}},"type":{"type":"string","description":"The type of the attribute.","example":"string"},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","default":false,"example":false}}}}}}}}},"responses":{"200":{"description":"The ProvisioningPolicyDto was successfully replaced.","content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"usageType":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"userName"},"transform":{"type":"object","description":"The transform to apply to the field","example":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"default":{}},"attributes":{"type":"object","description":"Attributes required for the transform","example":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"}},"isRequired":{"type":"boolean","readOnly":true,"description":"Flag indicating whether or not the attribute is required.","default":false,"example":false},"type":{"type":"string","description":"The type of the attribute.","example":"string"},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","default":false,"example":false}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/sources/{sourceId}/provisioning-policies/{usageType}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"string","description":"string","usageType":"CREATE","fields":[{"name":"userName","transform":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"attributes":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"},"type":"string","isMultiValued":false}]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Update Provisioning Policy by UsageType","description":{"content":"This end-point updates the provisioning policy with the specified usage on the specified source in IdentityNow.\nA token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":sourceId","provisioning-policies",":usageType"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source ID.","type":"text/plain"},"type":"any","value":"","key":"sourceId"},{"disabled":false,"description":{"content":"(Required) The type of ProvisioningPolicy usage.","type":"text/plain"},"type":"any","value":"","key":"usageType"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Provisioning Policy by UsageType + + + +This end-point updates the provisioning policy with the specified usage on the specified source in IdentityNow. +A token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + +
      Path Parameters
      Request Body required
        fields object[]
      + +The ProvisioningPolicyDto was successfully replaced. + +
      Schema
        fields object[]
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/replace-schema.api.mdx b/docs/sailpoint-api-v3/replace-schema.api.mdx new file mode 100644 index 000000000..7881761dc --- /dev/null +++ b/docs/sailpoint-api-v3/replace-schema.api.mdx @@ -0,0 +1,108 @@ +--- +id: replace-schema +sidebar_label: Update Source Schema (Full) +hide_title: true +hide_table_of_contents: true +api: {"operationId":"replaceSchema","tags":["Sources"],"description":"This API will completely replace an existing Schema with the submitted payload. Some fields of the Schema cannot be updated. These fields are listed below.\n* id\n* name\n* created\n* modified\nAny attempt to modify these fields will result in an error response with a status code of 400.","parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source id.","example":"2c9180835d191a86015d28455b4a2329"},{"in":"path","name":"schemaId","schema":{"type":"string"},"required":true,"description":"The Schema id.","example":"2c9180835d191a86015d28455b4a2329"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Schema.","example":"2c9180835d191a86015d28455b4a2329"},"name":{"type":"string","description":"The name of the Schema.","example":"account"},"nativeObjectType":{"type":"string","description":"The name of the object type on the native system that the schema represents.","example":"User"},"identityAttribute":{"type":"string","description":"The name of the attribute used to calculate the unique identifier for an object in the schema.","example":"sAMAccountName"},"displayAttribute":{"type":"string","description":"The name of the attribute used to calculate the display value for an object in the schema.","example":"distinguishedName"},"hierarchyAttribute":{"type":"string","description":"The name of the attribute whose values represent other objects in a hierarchy. Only relevant to group schemas.","example":"memberOf"},"includePermissions":{"type":"boolean","description":"Flag indicating whether or not the include permissions with the object data when aggregating the schema.","example":false},"features":{"type":"array","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"description":"The features that the schema supports.","example":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"]},"configuration":{"type":"object","description":"Holds any extra configuration data that the schema may require.","example":{"groupMemberAttribute":"member"}},"attributes":{"type":"array","description":"The attribute definitions which form the schema.","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"sAMAccountName"},"type":{"description":"The type of the attribute.","example":"string","type":"string","enum":["STRING","LONG","INT","BOOLEAN"]},"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"A reference to the schema on the source to which the values of the attribute map.","example":{"type":"CONNECTOR_SCHEMA","id":"2c9180866166b5b0016167c32ef31a66","name":"group"}},"description":{"type":"string","description":"A human-readable description of the attribute."},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","example":false},"isEntitlement":{"type":"boolean","description":"Flag indicating whether or not the attribute is an entitlement.","example":false}}},"example":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}]},"created":{"type":"string","description":"The date the Schema was created.","format":"date-time","example":"2019-12-24T22:32:58.104Z"},"modified":{"type":"string","description":"The date the Schema was last modified.","format":"date-time","example":"2019-12-31T20:22:28.104Z"}}}}}},"responses":{"200":{"description":"The Schema was successfully replaced.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Schema.","example":"2c9180835d191a86015d28455b4a2329"},"name":{"type":"string","description":"The name of the Schema.","example":"account"},"nativeObjectType":{"type":"string","description":"The name of the object type on the native system that the schema represents.","example":"User"},"identityAttribute":{"type":"string","description":"The name of the attribute used to calculate the unique identifier for an object in the schema.","example":"sAMAccountName"},"displayAttribute":{"type":"string","description":"The name of the attribute used to calculate the display value for an object in the schema.","example":"distinguishedName"},"hierarchyAttribute":{"type":"string","description":"The name of the attribute whose values represent other objects in a hierarchy. Only relevant to group schemas.","example":"memberOf"},"includePermissions":{"type":"boolean","description":"Flag indicating whether or not the include permissions with the object data when aggregating the schema.","example":false},"features":{"type":"array","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"description":"The features that the schema supports.","example":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"]},"configuration":{"type":"object","description":"Holds any extra configuration data that the schema may require.","example":{"groupMemberAttribute":"member"}},"attributes":{"type":"array","description":"The attribute definitions which form the schema.","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"sAMAccountName"},"type":{"description":"The type of the attribute.","example":"string","type":"string","enum":["STRING","LONG","INT","BOOLEAN"]},"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"A reference to the schema on the source to which the values of the attribute map.","example":{"type":"CONNECTOR_SCHEMA","id":"2c9180866166b5b0016167c32ef31a66","name":"group"}},"description":{"type":"string","description":"A human-readable description of the attribute."},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","example":false},"isEntitlement":{"type":"boolean","description":"Flag indicating whether or not the attribute is an entitlement.","example":false},"isGroup":{"type":"boolean","description":"Flag indicating whether or not the attribute represents a group.","example":false,"readOnly":true}}},"example":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}]},"created":{"type":"string","description":"The date the Schema was created.","format":"date-time","example":"2019-12-24T22:32:58.104Z"},"modified":{"type":"string","description":"The date the Schema was last modified.","format":"date-time","example":"2019-12-31T20:22:28.104Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/sources/{sourceId}/schemas/{schemaId}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"2c9180835d191a86015d28455b4a2329","name":"account","nativeObjectType":"User","identityAttribute":"sAMAccountName","displayAttribute":"distinguishedName","hierarchyAttribute":"memberOf","includePermissions":false,"features":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"],"configuration":{"groupMemberAttribute":"member"},"attributes":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}],"created":"2019-12-24T22:32:58.104Z","modified":"2019-12-31T20:22:28.104Z"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Update Source Schema (Full)","description":{"content":"This API will completely replace an existing Schema with the submitted payload. Some fields of the Schema cannot be updated. These fields are listed below.\n* id\n* name\n* created\n* modified\nAny attempt to modify these fields will result in an error response with a status code of 400.","type":"text/plain"},"url":{"path":["sources",":sourceId","schemas",":schemaId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id.","type":"text/plain"},"type":"any","value":"","key":"sourceId"},{"disabled":false,"description":{"content":"(Required) The Schema id.","type":"text/plain"},"type":"any","value":"","key":"schemaId"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Source Schema (Full) + + + +This API will completely replace an existing Schema with the submitted payload. Some fields of the Schema cannot be updated. These fields are listed below. +* id +* name +* created +* modified +Any attempt to modify these fields will result in an error response with a status code of 400. + +
      Path Parameters
      Request Body required
        attributes object[]
        + +The attribute definitions which form the schema. + +
        schema object
        + +A reference to the schema on the source to which the values of the attribute map. + +
      + +The Schema was successfully replaced. + +
      Schema
        attributes object[]
        + +The attribute definitions which form the schema. + +
        schema object
        + +A reference to the schema on the source to which the values of the attribute map. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/replace-source.api.mdx b/docs/sailpoint-api-v3/replace-source.api.mdx new file mode 100644 index 000000000..8cf6500e1 --- /dev/null +++ b/docs/sailpoint-api-v3/replace-source.api.mdx @@ -0,0 +1,182 @@ +--- +id: replace-source +sidebar_label: Update Source (Full) +hide_title: true +hide_table_of_contents: true +api: {"operationId":"replaceSource","tags":["Sources"],"description":"This API updates a source in IdentityNow, using a full object representation. In other words, the existing Source\nconfiguration is completely replaced.\n\nSome fields are immutable and cannot be changed, such as:\n\n* id\n* type\n* authoritative\n* connector\n* connectorClass\n* passwordPolicies\n\nAttempts to modify these fields will result in a 400 error.\n\nA token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.\n","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The Source id","example":"2c9180835d191a86015d28455b4a2329"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"the id of the Source","example":"2c91808568c529c60168cca6f90c1324"},"description":{"type":"string","description":"Human-readable description of the source","example":"This is the corporate directory."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to an owning Identity Object"},"cluster":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the associated Cluster","example":{"type":"CLUSTER","id":"2c9180866166b5b0016167c32ef31a66","name":"Corporate Cluster"}},"accountCorrelationConfig":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Correlation Config object","example":{"type":"ACCOUNT_CORRELATION_CONFIG","id":"2c9180855d191c59015d28583727245a","name":"Directory [source-62867] Account Correlation"}},"accountCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used."},"managerCorrelationMapping":{"description":"Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity","type":"object","properties":{"accountAttribute":{"type":"string","description":"Name of the attribute to use for manager correlation. The value found on the account attribute will be used to lookup the manager's identity.","example":"manager"},"identityAttribute":{"type":"string","description":"Name of the identity attribute to search when trying to find a manager using the value from the accountAttribute.","example":"manager"}}},"managerCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient."},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called."},"schemas":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to Schema objects","example":[{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232a","name":"account"},{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232b","name":"group"}]},"passwordPolicies":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to the associated PasswordPolicy objects.","example":[{"type":"PASSWORD_POLICY","id":"2c9180855d191c59015d291ceb053980","name":"Corporate Password Policy"}]},"features":{"type":"array","description":"Optional features that can be supported by a source.","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"example":["SYNC_PROVISIONING","MANAGER_LOOKUP","SEARCH","PROVISIONING","AUTHENTICATE","GROUP_PROVISIONING","PASSWORD"]},"type":{"type":"string","description":"Specifies the type of system being managed e.g. Active Directory, Workday, etc..","example":"OpenLDAP - Direct"},"connector":{"type":"string","description":"Connector script name.","example":"active-directory"},"connectorClass":{"type":"string","description":"The fully qualified name of the Java class that implements the connector interface.","example":"sailpoint.connector.LDAPConnector"},"connectorAttributes":{"type":"object","description":"Connector specific configuration; will differ from type to type.","example":{"healthCheckTimeout":30,"authSearchAttributes":["cn","uid","mail"]}},"deleteThreshold":{"type":"integer","format":"int32","description":"Number from 0 to 100 that specifies when to skip the delete phase.","example":10},"authoritative":{"type":"boolean","description":"When true indicates the source is referenced by an IdentityProfile.","example":false},"managementWorkgroup":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to Management Workgroup for this Source"},"healthy":{"type":"boolean","description":"When true indicates a healthy source","example":true},"status":{"type":"string","description":"A status identifier, giving specific information on why a source is healthy or not","example":"SOURCE_STATE_HEALTHY"},"since":{"type":"string","description":"Timestamp showing when a source health check was last performed","example":"2021-09-28T15:48:29.3801666300Z"},"connectorId":{"type":"string","description":"The id of connector","example":"active-directory"},"connectorName":{"type":"string","description":"The name of the connector that was chosen on source creation","example":"Active Directory"},"connectionType":{"type":"string","description":"The type of connection (direct or file)","example":"file"},"connectorImplementstionId":{"type":"string","description":"The connector implementstion id","example":"delimited-file"}}}}}},"responses":{"200":{"description":"Updated Source object. Any passwords will only show the the encrypted cipher-text, as they are not decrypt-able in IdentityNow cloud-based services, per IdentityNow security design.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"the id of the Source","example":"2c91808568c529c60168cca6f90c1324"},"description":{"type":"string","description":"Human-readable description of the source","example":"This is the corporate directory."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to an owning Identity Object"},"cluster":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the associated Cluster","example":{"type":"CLUSTER","id":"2c9180866166b5b0016167c32ef31a66","name":"Corporate Cluster"}},"accountCorrelationConfig":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Correlation Config object","example":{"type":"ACCOUNT_CORRELATION_CONFIG","id":"2c9180855d191c59015d28583727245a","name":"Directory [source-62867] Account Correlation"}},"accountCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used."},"managerCorrelationMapping":{"description":"Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity","type":"object","properties":{"accountAttribute":{"type":"string","description":"Name of the attribute to use for manager correlation. The value found on the account attribute will be used to lookup the manager's identity.","example":"manager"},"identityAttribute":{"type":"string","description":"Name of the identity attribute to search when trying to find a manager using the value from the accountAttribute.","example":"manager"}}},"managerCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient."},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called."},"schemas":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to Schema objects","example":[{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232a","name":"account"},{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232b","name":"group"}]},"passwordPolicies":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to the associated PasswordPolicy objects.","example":[{"type":"PASSWORD_POLICY","id":"2c9180855d191c59015d291ceb053980","name":"Corporate Password Policy"}]},"features":{"type":"array","description":"Optional features that can be supported by a source.","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"example":["SYNC_PROVISIONING","MANAGER_LOOKUP","SEARCH","PROVISIONING","AUTHENTICATE","GROUP_PROVISIONING","PASSWORD"]},"type":{"type":"string","description":"Specifies the type of system being managed e.g. Active Directory, Workday, etc..","example":"OpenLDAP - Direct"},"connector":{"type":"string","description":"Connector script name.","example":"active-directory"},"connectorClass":{"type":"string","description":"The fully qualified name of the Java class that implements the connector interface.","example":"sailpoint.connector.LDAPConnector"},"connectorAttributes":{"type":"object","description":"Connector specific configuration; will differ from type to type.","example":{"healthCheckTimeout":30,"authSearchAttributes":["cn","uid","mail"]}},"deleteThreshold":{"type":"integer","format":"int32","description":"Number from 0 to 100 that specifies when to skip the delete phase.","example":10},"authoritative":{"type":"boolean","description":"When true indicates the source is referenced by an IdentityProfile.","example":false},"managementWorkgroup":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to Management Workgroup for this Source"},"healthy":{"type":"boolean","description":"When true indicates a healthy source","example":true},"status":{"type":"string","description":"A status identifier, giving specific information on why a source is healthy or not","example":"SOURCE_STATE_HEALTHY"},"since":{"type":"string","description":"Timestamp showing when a source health check was last performed","example":"2021-09-28T15:48:29.3801666300Z"},"connectorId":{"type":"string","description":"The id of connector","example":"active-directory"},"connectorName":{"type":"string","description":"The name of the connector that was chosen on source creation","example":"Active Directory"},"connectionType":{"type":"string","description":"The type of connection (direct or file)","example":"file"},"connectorImplementstionId":{"type":"string","description":"The connector implementstion id","example":"delimited-file"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/sources/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"2c91808568c529c60168cca6f90c1324","description":"This is the corporate directory.","owner":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"cluster":{"type":"CLUSTER","id":"2c9180866166b5b0016167c32ef31a66","name":"Corporate Cluster"},"accountCorrelationConfig":{"type":"ACCOUNT_CORRELATION_CONFIG","id":"2c9180855d191c59015d28583727245a","name":"Directory [source-62867] Account Correlation"},"accountCorrelationRule":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"managerCorrelationMapping":{"accountAttribute":"manager","identityAttribute":"manager"},"managerCorrelationRule":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"beforeProvisioningRule":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"schemas":[{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232a","name":"account"},{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232b","name":"group"}],"passwordPolicies":[{"type":"PASSWORD_POLICY","id":"2c9180855d191c59015d291ceb053980","name":"Corporate Password Policy"}],"features":["SYNC_PROVISIONING","MANAGER_LOOKUP","SEARCH","PROVISIONING","AUTHENTICATE","GROUP_PROVISIONING","PASSWORD"],"type":"OpenLDAP - Direct","connector":"active-directory","connectorClass":"sailpoint.connector.LDAPConnector","connectorAttributes":{"healthCheckTimeout":30,"authSearchAttributes":["cn","uid","mail"]},"deleteThreshold":10,"authoritative":false,"managementWorkgroup":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"healthy":true,"status":"SOURCE_STATE_HEALTHY","since":"2021-09-28T15:48:29.3801666300Z","connectorId":"active-directory","connectorName":"Active Directory","connectionType":"file","connectorImplementstionId":"delimited-file"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Update Source (Full)","description":{"content":"This API updates a source in IdentityNow, using a full object representation. In other words, the existing Source\nconfiguration is completely replaced.\n\nSome fields are immutable and cannot be changed, such as:\n\n* id\n* type\n* authoritative\n* connector\n* connectorClass\n* passwordPolicies\n\nAttempts to modify these fields will result in a 400 error.\n\nA token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.\n","type":"text/plain"},"url":{"path":["sources",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Source (Full) + + + +This API updates a source in IdentityNow, using a full object representation. In other words, the existing Source +configuration is completely replaced. + +Some fields are immutable and cannot be changed, such as: + +* id +* type +* authoritative +* connector +* connectorClass +* passwordPolicies + +Attempts to modify these fields will result in a 400 error. + +A token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + + +
      Path Parameters
      Request Body required
        owner object
        + +Reference to an owning Identity Object + +
        cluster object
        + +Reference to the associated Cluster + +
        accountCorrelationConfig object
        + +Reference to a Correlation Config object + +
        accountCorrelationRule object
        + +Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used. + +
        managerCorrelationMapping object
        + +Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity + +
        managerCorrelationRule object
        + +Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient. + +
        beforeProvisioningRule object
        + +Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called. + +
        schemas object[]
        + +List of references to Schema objects + +
        passwordPolicies object[]
        + +List of references to the associated PasswordPolicy objects. + +
        managementWorkgroup object
        + +Reference to Management Workgroup for this Source + +
      + +Updated Source object. Any passwords will only show the the encrypted cipher-text, as they are not decrypt-able in IdentityNow cloud-based services, per IdentityNow security design. + +
      Schema
        owner object
        + +Reference to an owning Identity Object + +
        cluster object
        + +Reference to the associated Cluster + +
        accountCorrelationConfig object
        + +Reference to a Correlation Config object + +
        accountCorrelationRule object
        + +Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used. + +
        managerCorrelationMapping object
        + +Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity + +
        managerCorrelationRule object
        + +Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient. + +
        beforeProvisioningRule object
        + +Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called. + +
        schemas object[]
        + +List of references to Schema objects + +
        passwordPolicies object[]
        + +List of references to the associated PasswordPolicy objects. + +
        managementWorkgroup object
        + +Reference to Management Workgroup for this Source + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/requestable-objects.tag.mdx b/docs/sailpoint-api-v3/requestable-objects.tag.mdx new file mode 100644 index 000000000..89c927c0b --- /dev/null +++ b/docs/sailpoint-api-v3/requestable-objects.tag.mdx @@ -0,0 +1,15 @@ +--- +id: requestable-objects +title: Requestable Objects +description: Requestable Objects +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/sail-point-saa-s-api.info.mdx b/docs/sailpoint-api-v3/sail-point-saa-s-api.info.mdx new file mode 100644 index 000000000..dc984fa1d --- /dev/null +++ b/docs/sailpoint-api-v3/sail-point-saa-s-api.info.mdx @@ -0,0 +1,33 @@ +--- +id: sail-point-saa-s-api +sidebar_label: Introduction +sidebar_position: 0 +hide_title: true +--- + +import ApiLogo from "@theme/ApiLogo"; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +Version: 3.0.0 + +# SailPoint - SaaS API + + + +These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs. + +

      Authentication

      + +OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information. +- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens) +- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow) +- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow) + +Which authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use) + +Learn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details) + + +
      Security Scheme Type:oauth2
      clientCredentials OAuth Flow:

      Token URL: https://tenant.api.identitynow.com/oauth/token

      Scopes:
      • sp:scopes:default: default scope
      • sp:scopes:all: access to all scopes
      authorizationCode OAuth Flow:

      Token URL: https://tenant.api.identitynow.com/oauth/token

      Authorization URL: https://tenant.identitynow.com/oauth/authorize

      Scopes:
      • sp:scopes:default: default scope
      • sp:scopes:all: access to all scopes
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/saved-search-create.api.mdx b/docs/sailpoint-api-v3/saved-search-create.api.mdx new file mode 100644 index 000000000..a936add43 --- /dev/null +++ b/docs/sailpoint-api-v3/saved-search-create.api.mdx @@ -0,0 +1,111 @@ +--- +id: saved-search-create +sidebar_label: Create a saved search +hide_title: true +hide_table_of_contents: true +api: {"tags":["Saved Search"],"description":"Creates a new saved search.\n","operationId":"savedSearchCreate","requestBody":{"description":"The saved search to persist.","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"name":{"description":"The name of the saved search.\n","type":"string","example":"Disabled accounts"},"description":{"description":"The description of the saved search.\n","type":"string","example":"Disabled accounts"}}},{"type":"object","properties":{"public":{"description":"Indicates if the saved search is public.\n","type":"boolean","default":false},"created":{"description":"The date the saved search was initially created.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"modified":{"description":"The last date the saved search was modified.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"indices":{"description":"The names of the Elasticsearch indices in which to search.\n","type":"array","items":{"description":"Enum representing the currently supported indices.\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofiles","accountactivities","entitlements","events","identities","roles"],"example":"identities"},"example":["identities"]},"columns":{"description":"The columns to be returned (specifies the order in which they will be presented) for each document type.\n\nThe currently supported document types are: _accessprofile_, _accountactivity_, _account_, _aggregation_, _entitlement_, _event_, _identity_, and _role_.\n","type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"field":{"description":"The name of the field.\n","type":"string"},"header":{"description":"The value of the header.\n","type":"string"}},"required":["field"]}},"example":{"identity":[{"field":"displayName","header":"Display Name"},{"field":"email","header":"Work Email"},{"field":"attributes.cloudLifecycleState","header":"Lifecycle State"}]}},"query":{"description":"The search query using Elasticsearch [Query String Query](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string) syntax from the Query DSL.\n","type":"string","example":"@accounts(disabled:true)"},"fields":{"description":"The fields to be searched against in a multi-field query.\n","type":"array","items":{"type":"string"},"example":["disabled"]},"sort":{"description":"The fields to be used to sort the search results.\n","type":"array","items":{"type":"string"},"example":["displayName"]},"filters":{"nullable":true,"allOf":[{"type":"object","description":"The filters to be applied for each filtered field name.","example":{"attributes.cloudAuthoritativeSource":{"type":"EXISTS","exclude":true},"accessCount":{"type":"RANGE","range":{"lower":{"value":"3"}}},"created":{"type":"RANGE","range":{"lower":{"value":"2019-12-01","inclusive":true},"upper":{"value":"2020-01-01"}}},"source.name":{"type":"TERMS","terms":["HR Employees","Corporate Active Directory"],"exclude":true},"protected":{"type":"TERMS","terms":["true"]}}},{"type":"object","properties":{"type":{"description":"Enum representing the currently supported filter types.\nAdditional values may be added in the future without notice.","type":"string","enum":["EXISTS","RANGE","TERMS"],"example":"RANGE"},"range":{"type":"object","description":"The range of values to be filtered.","properties":{"lower":{"description":"The lower bound of the range.","type":"object","required":["value"],"properties":{"value":{"description":"The value of the range's endpoint.","type":"string"},"inclusive":{"description":"Indicates if the endpoint is included in the range.","type":"boolean","default":false}}},"upper":{"description":"The upper bound of the range.","type":"object","required":["value"],"properties":{"value":{"description":"The value of the range's endpoint.","type":"string"},"inclusive":{"description":"Indicates if the endpoint is included in the range.","type":"boolean","default":false}}}}},"terms":{"description":"The terms to be filtered.","type":"array","items":{"type":"string"}},"exclude":{"description":"Indicates if the filter excludes results.","type":"boolean","default":false}}}]}},"required":["indices","query"]}]}}},"required":true},"responses":{"201":{"description":"The persisted saved search.","content":{"application/json":{"schema":{"type":"object","allOf":[{"type":"object","properties":{"id":{"description":"The saved search ID.\n","type":"string","example":"0de46054-fe90-434a-b84e-c6b3359d0c64"},"owner":{"description":"The owner of the saved search.\n","type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"}},"required":["type","id"]}}},{"type":"object","properties":{"name":{"description":"The name of the saved search.\n","type":"string","example":"Disabled accounts"},"description":{"description":"The description of the saved search.\n","type":"string","example":"Disabled accounts"}}},{"type":"object","properties":{"public":{"description":"Indicates if the saved search is public.\n","type":"boolean","default":false},"created":{"description":"The date the saved search was initially created.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"modified":{"description":"The last date the saved search was modified.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"indices":{"description":"The names of the Elasticsearch indices in which to search.\n","type":"array","items":{"description":"Enum representing the currently supported indices.\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofiles","accountactivities","entitlements","events","identities","roles"],"example":"identities"},"example":["identities"]},"columns":{"description":"The columns to be returned (specifies the order in which they will be presented) for each document type.\n\nThe currently supported document types are: _accessprofile_, _accountactivity_, _account_, _aggregation_, _entitlement_, _event_, _identity_, and _role_.\n","type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"field":{"description":"The name of the field.\n","type":"string"},"header":{"description":"The value of the header.\n","type":"string"}},"required":["field"]}},"example":{"identity":[{"field":"displayName","header":"Display Name"},{"field":"email","header":"Work Email"},{"field":"attributes.cloudLifecycleState","header":"Lifecycle State"}]}},"query":{"description":"The search query using Elasticsearch [Query String Query](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string) syntax from the Query DSL.\n","type":"string","example":"@accounts(disabled:true)"},"fields":{"description":"The fields to be searched against in a multi-field query.\n","type":"array","items":{"type":"string"},"example":["disabled"]},"sort":{"description":"The fields to be used to sort the search results.\n","type":"array","items":{"type":"string"},"example":["displayName"]},"filters":{"nullable":true,"allOf":[{"type":"object","description":"The filters to be applied for each filtered field name.","example":{"attributes.cloudAuthoritativeSource":{"type":"EXISTS","exclude":true},"accessCount":{"type":"RANGE","range":{"lower":{"value":"3"}}},"created":{"type":"RANGE","range":{"lower":{"value":"2019-12-01","inclusive":true},"upper":{"value":"2020-01-01"}}},"source.name":{"type":"TERMS","terms":["HR Employees","Corporate Active Directory"],"exclude":true},"protected":{"type":"TERMS","terms":["true"]}}},{"type":"object","properties":{"type":{"description":"Enum representing the currently supported filter types.\nAdditional values may be added in the future without notice.","type":"string","enum":["EXISTS","RANGE","TERMS"],"example":"RANGE"},"range":{"type":"object","description":"The range of values to be filtered.","properties":{"lower":{"description":"The lower bound of the range.","type":"object","required":["value"],"properties":{"value":{"description":"The value of the range's endpoint.","type":"string"},"inclusive":{"description":"Indicates if the endpoint is included in the range.","type":"boolean","default":false}}},"upper":{"description":"The upper bound of the range.","type":"object","required":["value"],"properties":{"value":{"description":"The value of the range's endpoint.","type":"string"},"inclusive":{"description":"Indicates if the endpoint is included in the range.","type":"boolean","default":false}}}}},"terms":{"description":"The terms to be filtered.","type":"array","items":{"type":"string"}},"exclude":{"description":"Indicates if the filter excludes results.","type":"boolean","default":false}}}]}},"required":["indices","query"]}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}}},"method":"post","path":"/saved-searches","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"Disabled accounts","description":"Disabled accounts","public":false,"created":"2018-06-25T20:22:28.104Z","modified":"2018-06-25T20:22:28.104Z","indices":["identities"],"columns":{"identity":[{"field":"displayName","header":"Display Name"},{"field":"email","header":"Work Email"},{"field":"attributes.cloudLifecycleState","header":"Lifecycle State"}]},"query":"@accounts(disabled:true)","fields":["disabled"],"sort":["displayName"],"filters":{"attributes.cloudAuthoritativeSource":{"type":"EXISTS","exclude":true},"accessCount":{"type":"RANGE","range":{"lower":{"value":"3"}}},"created":{"type":"RANGE","range":{"lower":{"value":"2019-12-01","inclusive":true},"upper":{"value":"2020-01-01"}}},"source.name":{"type":"TERMS","terms":["HR Employees","Corporate Active Directory"],"exclude":true},"protected":{"type":"TERMS","terms":["true"]}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Create a saved search","description":{"content":"Creates a new saved search.\n","type":"text/plain"},"url":{"path":["saved-searches"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create a saved search + + + +Creates a new saved search. + + +
      Request Body required
      + +The saved search to persist. + +
        columns object
        + +The columns to be returned (specifies the order in which they will be presented) for each document type. + +The currently supported document types are: _accessprofile_, _accountactivity_, _account_, _aggregation_, _entitlement_, _event_, _identity_, and _role_. + + +
        items object
        filters object
        + +The filters to be applied for each filtered field name. + +
        range object
        + +The range of values to be filtered. + +
        lower object
        + +The lower bound of the range. + +
        upper object
        + +The upper bound of the range. + +
      + +The persisted saved search. + +
      Schema
        owner object
        + +The owner of the saved search. + + +
        columns object
        + +The columns to be returned (specifies the order in which they will be presented) for each document type. + +The currently supported document types are: _accessprofile_, _accountactivity_, _account_, _aggregation_, _entitlement_, _event_, _identity_, and _role_. + + +
        items object
        filters object
        + +The filters to be applied for each filtered field name. + +
        range object
        + +The range of values to be filtered. + +
        lower object
        + +The lower bound of the range. + +
        upper object
        + +The upper bound of the range. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/saved-search-delete.api.mdx b/docs/sailpoint-api-v3/saved-search-delete.api.mdx new file mode 100644 index 000000000..ee530d972 --- /dev/null +++ b/docs/sailpoint-api-v3/saved-search-delete.api.mdx @@ -0,0 +1,68 @@ +--- +id: saved-search-delete +sidebar_label: Delete a document by ID +hide_title: true +hide_table_of_contents: true +api: {"tags":["Saved Search"],"description":"Deletes the specified saved search.\n","operationId":"savedSearchDelete","parameters":[{"in":"path","name":"id","description":"ID of the requested document.","schema":{"type":"string"},"required":true}],"responses":{"204":{"description":"No Content - Indicates the request was successful but there is no content to be returned in the response."},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"method":"delete","path":"/saved-searches/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Delete a document by ID","description":{"content":"Deletes the specified saved search.\n","type":"text/plain"},"url":{"path":["saved-searches",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the requested document.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete a document by ID + + + +Deletes the specified saved search. + + +
      Path Parameters
      + +No Content - Indicates the request was successful but there is no content to be returned in the response. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/saved-search-execute.api.mdx b/docs/sailpoint-api-v3/saved-search-execute.api.mdx new file mode 100644 index 000000000..09e716cbb --- /dev/null +++ b/docs/sailpoint-api-v3/saved-search-execute.api.mdx @@ -0,0 +1,56 @@ +--- +id: saved-search-execute +sidebar_label: Execute a saved search by ID +hide_title: true +hide_table_of_contents: true +api: {"tags":["Saved Search"],"description":"Executes the specified saved search.\n","operationId":"savedSearchExecute","parameters":[{"in":"path","name":"id","description":"ID of the requested document.","schema":{"type":"string"},"required":true}],"requestBody":{"description":"When saved search execution is triggered by a scheduled search, *scheduleId* will specify the ID of the triggering scheduled search.\n\nIf *scheduleId* is not specified (when execution is triggered by a UI test), the *owner* and *recipients* arguments must be provided.\n","content":{"application/json":{"schema":{"type":"object","properties":{"scheduleId":{"description":"The ID of the scheduled search that triggered the saved search execution.\n","type":"string","example":"7a724640-0c17-4ce9-a8c3-4a89738459c8"},"owner":{"description":"The owner of the scheduled search being tested.\n","allOf":[{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"}},"required":["type","id"]}]},"recipients":{"description":"The email recipients of the scheduled search being tested.\n","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"}},"required":["type","id"]}}}},"examples":{"scheduled":{"summary":"Triggered by Scheduled Search","value":{"scheduleId":"7a724640-0c17-4ce9-a8c3-4a89738459c8"}},"test":{"summary":"Triggered by UI Test","value":{"owner":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313"},"recipients":[{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313"}]}}}}},"required":true},"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system."},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"method":"post","path":"/saved-searches/{id}/execute","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"scheduleId":"7a724640-0c17-4ce9-a8c3-4a89738459c8","owner":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313"},"recipients":[{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313"}]},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Execute a saved search by ID","description":{"content":"Executes the specified saved search.\n","type":"text/plain"},"url":{"path":["saved-searches",":id","execute"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the requested document.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Execute a saved search by ID + + + +Executes the specified saved search. + + +
      Path Parameters
      Request Body required
      + +When saved search execution is triggered by a scheduled search, *scheduleId* will specify the ID of the triggering scheduled search. + +If *scheduleId* is not specified (when execution is triggered by a UI test), the *owner* and *recipients* arguments must be provided. + + +
        owner object
        recipients object[]
        + +The email recipients of the scheduled search being tested. + + +
      + +Accepted - Returned if the request was successfully accepted into the system. + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/saved-search-get.api.mdx b/docs/sailpoint-api-v3/saved-search-get.api.mdx new file mode 100644 index 000000000..3f4d31f35 --- /dev/null +++ b/docs/sailpoint-api-v3/saved-search-get.api.mdx @@ -0,0 +1,72 @@ +--- +id: saved-search-get +sidebar_label: Return a saved search by ID +hide_title: true +hide_table_of_contents: true +api: {"tags":["Saved Search"],"description":"Returns the specified saved search.\n","operationId":"savedSearchGet","parameters":[{"in":"path","name":"id","description":"ID of the requested document.","schema":{"type":"string"},"required":true}],"responses":{"200":{"description":"The requested saved search.","content":{"application/json":{"schema":{"type":"object","allOf":[{"type":"object","properties":{"id":{"description":"The saved search ID.\n","type":"string","example":"0de46054-fe90-434a-b84e-c6b3359d0c64"},"owner":{"description":"The owner of the saved search.\n","type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"}},"required":["type","id"]}}},{"type":"object","properties":{"name":{"description":"The name of the saved search.\n","type":"string","example":"Disabled accounts"},"description":{"description":"The description of the saved search.\n","type":"string","example":"Disabled accounts"}}},{"type":"object","properties":{"public":{"description":"Indicates if the saved search is public.\n","type":"boolean","default":false},"created":{"description":"The date the saved search was initially created.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"modified":{"description":"The last date the saved search was modified.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"indices":{"description":"The names of the Elasticsearch indices in which to search.\n","type":"array","items":{"description":"Enum representing the currently supported indices.\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofiles","accountactivities","entitlements","events","identities","roles"],"example":"identities"},"example":["identities"]},"columns":{"description":"The columns to be returned (specifies the order in which they will be presented) for each document type.\n\nThe currently supported document types are: _accessprofile_, _accountactivity_, _account_, _aggregation_, _entitlement_, _event_, _identity_, and _role_.\n","type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"field":{"description":"The name of the field.\n","type":"string"},"header":{"description":"The value of the header.\n","type":"string"}},"required":["field"]}},"example":{"identity":[{"field":"displayName","header":"Display Name"},{"field":"email","header":"Work Email"},{"field":"attributes.cloudLifecycleState","header":"Lifecycle State"}]}},"query":{"description":"The search query using Elasticsearch [Query String Query](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string) syntax from the Query DSL.\n","type":"string","example":"@accounts(disabled:true)"},"fields":{"description":"The fields to be searched against in a multi-field query.\n","type":"array","items":{"type":"string"},"example":["disabled"]},"sort":{"description":"The fields to be used to sort the search results.\n","type":"array","items":{"type":"string"},"example":["displayName"]},"filters":{"nullable":true,"allOf":[{"type":"object","description":"The filters to be applied for each filtered field name.","example":{"attributes.cloudAuthoritativeSource":{"type":"EXISTS","exclude":true},"accessCount":{"type":"RANGE","range":{"lower":{"value":"3"}}},"created":{"type":"RANGE","range":{"lower":{"value":"2019-12-01","inclusive":true},"upper":{"value":"2020-01-01"}}},"source.name":{"type":"TERMS","terms":["HR Employees","Corporate Active Directory"],"exclude":true},"protected":{"type":"TERMS","terms":["true"]}}},{"type":"object","properties":{"type":{"description":"Enum representing the currently supported filter types.\nAdditional values may be added in the future without notice.","type":"string","enum":["EXISTS","RANGE","TERMS"],"example":"RANGE"},"range":{"type":"object","description":"The range of values to be filtered.","properties":{"lower":{"description":"The lower bound of the range.","type":"object","required":["value"],"properties":{"value":{"description":"The value of the range's endpoint.","type":"string"},"inclusive":{"description":"Indicates if the endpoint is included in the range.","type":"boolean","default":false}}},"upper":{"description":"The upper bound of the range.","type":"object","required":["value"],"properties":{"value":{"description":"The value of the range's endpoint.","type":"string"},"inclusive":{"description":"Indicates if the endpoint is included in the range.","type":"boolean","default":false}}}}},"terms":{"description":"The terms to be filtered.","type":"array","items":{"type":"string"}},"exclude":{"description":"Indicates if the filter excludes results.","type":"boolean","default":false}}}]}},"required":["indices","query"]}]}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"method":"get","path":"/saved-searches/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Return a saved search by ID","description":{"content":"Returns the specified saved search.\n","type":"text/plain"},"url":{"path":["saved-searches",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the requested document.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Return a saved search by ID + + + +Returns the specified saved search. + + +
      Path Parameters
      + +The requested saved search. + +
      Schema
        owner object
        + +The owner of the saved search. + + +
        columns object
        + +The columns to be returned (specifies the order in which they will be presented) for each document type. + +The currently supported document types are: _accessprofile_, _accountactivity_, _account_, _aggregation_, _entitlement_, _event_, _identity_, and _role_. + + +
        items object
        filters object
        + +The filters to be applied for each filtered field name. + +
        range object
        + +The range of values to be filtered. + +
        lower object
        + +The lower bound of the range. + +
        upper object
        + +The upper bound of the range. + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/saved-search-list.api.mdx b/docs/sailpoint-api-v3/saved-search-list.api.mdx new file mode 100644 index 000000000..34f057c88 --- /dev/null +++ b/docs/sailpoint-api-v3/saved-search-list.api.mdx @@ -0,0 +1,60 @@ +--- +id: saved-search-list +sidebar_label: Return a list of Saved Searches +hide_title: true +hide_table_of_contents: true +api: {"tags":["Saved Search"],"description":"Returns a list of saved searches.\n","operationId":"savedSearchList","parameters":[{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"name":"filters","in":"query","schema":{"type":"string"},"description":"An expression used to constrain the result set using the filtering syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html).\n\nAllowed filter properties: *owner.id*, *public*\n\nAllowed filter operator: *eq*\n\n**Example filters**:\n\n```owner.id eq \"0de46054-fe90-434a-b84e-c6b3359d0c64\"``` -- returns saved searches for the specified owner ID\n\n```public eq true``` -- returns all public saved searches\n\n```owner.id eq me or public eq true``` -- returns all of the current user's saved searches as well as all public saved searches belonging to other users in the current org\n"}],"responses":{"200":{"description":"The list of requested saved searches.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","allOf":[{"type":"object","properties":{"id":{"description":"The saved search ID.\n","type":"string","example":"0de46054-fe90-434a-b84e-c6b3359d0c64"},"owner":{"description":"The owner of the saved search.\n","type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"}},"required":["type","id"]}}},{"type":"object","properties":{"name":{"description":"The name of the saved search.\n","type":"string","example":"Disabled accounts"},"description":{"description":"The description of the saved search.\n","type":"string","example":"Disabled accounts"}}},{"type":"object","properties":{"public":{"description":"Indicates if the saved search is public.\n","type":"boolean","default":false},"created":{"description":"The date the saved search was initially created.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"modified":{"description":"The last date the saved search was modified.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"indices":{"description":"The names of the Elasticsearch indices in which to search.\n","type":"array","items":{"description":"Enum representing the currently supported indices.\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofiles","accountactivities","entitlements","events","identities","roles"],"example":"identities"},"example":["identities"]},"columns":{"description":"The columns to be returned (specifies the order in which they will be presented) for each document type.\n\nThe currently supported document types are: _accessprofile_, _accountactivity_, _account_, _aggregation_, _entitlement_, _event_, _identity_, and _role_.\n","type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"field":{"description":"The name of the field.\n","type":"string"},"header":{"description":"The value of the header.\n","type":"string"}},"required":["field"]}},"example":{"identity":[{"field":"displayName","header":"Display Name"},{"field":"email","header":"Work Email"},{"field":"attributes.cloudLifecycleState","header":"Lifecycle State"}]}},"query":{"description":"The search query using Elasticsearch [Query String Query](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string) syntax from the Query DSL.\n","type":"string","example":"@accounts(disabled:true)"},"fields":{"description":"The fields to be searched against in a multi-field query.\n","type":"array","items":{"type":"string"},"example":["disabled"]},"sort":{"description":"The fields to be used to sort the search results.\n","type":"array","items":{"type":"string"},"example":["displayName"]},"filters":{"nullable":true,"allOf":[{"type":"object","description":"The filters to be applied for each filtered field name.","example":{"attributes.cloudAuthoritativeSource":{"type":"EXISTS","exclude":true},"accessCount":{"type":"RANGE","range":{"lower":{"value":"3"}}},"created":{"type":"RANGE","range":{"lower":{"value":"2019-12-01","inclusive":true},"upper":{"value":"2020-01-01"}}},"source.name":{"type":"TERMS","terms":["HR Employees","Corporate Active Directory"],"exclude":true},"protected":{"type":"TERMS","terms":["true"]}}},{"type":"object","properties":{"type":{"description":"Enum representing the currently supported filter types.\nAdditional values may be added in the future without notice.","type":"string","enum":["EXISTS","RANGE","TERMS"],"example":"RANGE"},"range":{"type":"object","description":"The range of values to be filtered.","properties":{"lower":{"description":"The lower bound of the range.","type":"object","required":["value"],"properties":{"value":{"description":"The value of the range's endpoint.","type":"string"},"inclusive":{"description":"Indicates if the endpoint is included in the range.","type":"boolean","default":false}}},"upper":{"description":"The upper bound of the range.","type":"object","required":["value"],"properties":{"value":{"description":"The value of the range's endpoint.","type":"string"},"inclusive":{"description":"Indicates if the endpoint is included in the range.","type":"boolean","default":false}}}}},"terms":{"description":"The terms to be filtered.","type":"array","items":{"type":"string"}},"exclude":{"description":"Indicates if the filter excludes results.","type":"boolean","default":false}}}]}},"required":["indices","query"]}]}}}},"headers":{"X-Total-Count":{"description":"The total result count (returned only if the *count* parameter is specified as *true*).","schema":{"type":"integer"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}}},"method":"get","path":"/saved-searches","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Return a list of Saved Searches","description":{"content":"Returns a list of saved searches.\n","type":"text/plain"},"url":{"path":["saved-searches"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"An expression used to constrain the result set using the filtering syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html).\n\nAllowed filter properties: *owner.id*, *public*\n\nAllowed filter operator: *eq*\n\n**Example filters**:\n\n```owner.id eq \"0de46054-fe90-434a-b84e-c6b3359d0c64\"``` -- returns saved searches for the specified owner ID\n\n```public eq true``` -- returns all public saved searches\n\n```owner.id eq me or public eq true``` -- returns all of the current user's saved searches as well as all public saved searches belonging to other users in the current org\n","type":"text/plain"},"key":"filters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Return a list of Saved Searches + + + +Returns a list of saved searches. + + +
      Query Parameters
      + +The list of requested saved searches. + +
      Response Headers
      • X-Total-Count integer
        + +The total result count (returned only if the *count* parameter is specified as *true*). + +
      Schema array
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/saved-search-update.api.mdx b/docs/sailpoint-api-v3/saved-search-update.api.mdx new file mode 100644 index 000000000..b7a1e3ccf --- /dev/null +++ b/docs/sailpoint-api-v3/saved-search-update.api.mdx @@ -0,0 +1,118 @@ +--- +id: saved-search-update +sidebar_label: Updates an existing saved search + +hide_title: true +hide_table_of_contents: true +api: {"tags":["Saved Search"],"description":"Updates an existing saved search.\n","operationId":"savedSearchUpdate","parameters":[{"in":"path","name":"id","description":"ID of the requested document.","schema":{"type":"string"},"required":true}],"requestBody":{"description":"The saved search to persist.","content":{"application/json":{"schema":{"type":"object","allOf":[{"type":"object","properties":{"id":{"description":"The saved search ID.\n","type":"string","example":"0de46054-fe90-434a-b84e-c6b3359d0c64"},"owner":{"description":"The owner of the saved search.\n","type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"}},"required":["type","id"]}}},{"type":"object","properties":{"name":{"description":"The name of the saved search.\n","type":"string","example":"Disabled accounts"},"description":{"description":"The description of the saved search.\n","type":"string","example":"Disabled accounts"}}},{"type":"object","properties":{"public":{"description":"Indicates if the saved search is public.\n","type":"boolean","default":false},"created":{"description":"The date the saved search was initially created.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"modified":{"description":"The last date the saved search was modified.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"indices":{"description":"The names of the Elasticsearch indices in which to search.\n","type":"array","items":{"description":"Enum representing the currently supported indices.\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofiles","accountactivities","entitlements","events","identities","roles"],"example":"identities"},"example":["identities"]},"columns":{"description":"The columns to be returned (specifies the order in which they will be presented) for each document type.\n\nThe currently supported document types are: _accessprofile_, _accountactivity_, _account_, _aggregation_, _entitlement_, _event_, _identity_, and _role_.\n","type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"field":{"description":"The name of the field.\n","type":"string"},"header":{"description":"The value of the header.\n","type":"string"}},"required":["field"]}},"example":{"identity":[{"field":"displayName","header":"Display Name"},{"field":"email","header":"Work Email"},{"field":"attributes.cloudLifecycleState","header":"Lifecycle State"}]}},"query":{"description":"The search query using Elasticsearch [Query String Query](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string) syntax from the Query DSL.\n","type":"string","example":"@accounts(disabled:true)"},"fields":{"description":"The fields to be searched against in a multi-field query.\n","type":"array","items":{"type":"string"},"example":["disabled"]},"sort":{"description":"The fields to be used to sort the search results.\n","type":"array","items":{"type":"string"},"example":["displayName"]},"filters":{"nullable":true,"allOf":[{"type":"object","description":"The filters to be applied for each filtered field name.","example":{"attributes.cloudAuthoritativeSource":{"type":"EXISTS","exclude":true},"accessCount":{"type":"RANGE","range":{"lower":{"value":"3"}}},"created":{"type":"RANGE","range":{"lower":{"value":"2019-12-01","inclusive":true},"upper":{"value":"2020-01-01"}}},"source.name":{"type":"TERMS","terms":["HR Employees","Corporate Active Directory"],"exclude":true},"protected":{"type":"TERMS","terms":["true"]}}},{"type":"object","properties":{"type":{"description":"Enum representing the currently supported filter types.\nAdditional values may be added in the future without notice.","type":"string","enum":["EXISTS","RANGE","TERMS"],"example":"RANGE"},"range":{"type":"object","description":"The range of values to be filtered.","properties":{"lower":{"description":"The lower bound of the range.","type":"object","required":["value"],"properties":{"value":{"description":"The value of the range's endpoint.","type":"string"},"inclusive":{"description":"Indicates if the endpoint is included in the range.","type":"boolean","default":false}}},"upper":{"description":"The upper bound of the range.","type":"object","required":["value"],"properties":{"value":{"description":"The value of the range's endpoint.","type":"string"},"inclusive":{"description":"Indicates if the endpoint is included in the range.","type":"boolean","default":false}}}}},"terms":{"description":"The terms to be filtered.","type":"array","items":{"type":"string"}},"exclude":{"description":"Indicates if the filter excludes results.","type":"boolean","default":false}}}]}},"required":["indices","query"]}]}}},"required":true},"responses":{"200":{"description":"The persisted saved search.","content":{"application/json":{"schema":{"type":"object","allOf":[{"type":"object","properties":{"id":{"description":"The saved search ID.\n","type":"string","example":"0de46054-fe90-434a-b84e-c6b3359d0c64"},"owner":{"description":"The owner of the saved search.\n","type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"}},"required":["type","id"]}}},{"type":"object","properties":{"name":{"description":"The name of the saved search.\n","type":"string","example":"Disabled accounts"},"description":{"description":"The description of the saved search.\n","type":"string","example":"Disabled accounts"}}},{"type":"object","properties":{"public":{"description":"Indicates if the saved search is public.\n","type":"boolean","default":false},"created":{"description":"The date the saved search was initially created.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"modified":{"description":"The last date the saved search was modified.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"indices":{"description":"The names of the Elasticsearch indices in which to search.\n","type":"array","items":{"description":"Enum representing the currently supported indices.\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofiles","accountactivities","entitlements","events","identities","roles"],"example":"identities"},"example":["identities"]},"columns":{"description":"The columns to be returned (specifies the order in which they will be presented) for each document type.\n\nThe currently supported document types are: _accessprofile_, _accountactivity_, _account_, _aggregation_, _entitlement_, _event_, _identity_, and _role_.\n","type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"field":{"description":"The name of the field.\n","type":"string"},"header":{"description":"The value of the header.\n","type":"string"}},"required":["field"]}},"example":{"identity":[{"field":"displayName","header":"Display Name"},{"field":"email","header":"Work Email"},{"field":"attributes.cloudLifecycleState","header":"Lifecycle State"}]}},"query":{"description":"The search query using Elasticsearch [Query String Query](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string) syntax from the Query DSL.\n","type":"string","example":"@accounts(disabled:true)"},"fields":{"description":"The fields to be searched against in a multi-field query.\n","type":"array","items":{"type":"string"},"example":["disabled"]},"sort":{"description":"The fields to be used to sort the search results.\n","type":"array","items":{"type":"string"},"example":["displayName"]},"filters":{"nullable":true,"allOf":[{"type":"object","description":"The filters to be applied for each filtered field name.","example":{"attributes.cloudAuthoritativeSource":{"type":"EXISTS","exclude":true},"accessCount":{"type":"RANGE","range":{"lower":{"value":"3"}}},"created":{"type":"RANGE","range":{"lower":{"value":"2019-12-01","inclusive":true},"upper":{"value":"2020-01-01"}}},"source.name":{"type":"TERMS","terms":["HR Employees","Corporate Active Directory"],"exclude":true},"protected":{"type":"TERMS","terms":["true"]}}},{"type":"object","properties":{"type":{"description":"Enum representing the currently supported filter types.\nAdditional values may be added in the future without notice.","type":"string","enum":["EXISTS","RANGE","TERMS"],"example":"RANGE"},"range":{"type":"object","description":"The range of values to be filtered.","properties":{"lower":{"description":"The lower bound of the range.","type":"object","required":["value"],"properties":{"value":{"description":"The value of the range's endpoint.","type":"string"},"inclusive":{"description":"Indicates if the endpoint is included in the range.","type":"boolean","default":false}}},"upper":{"description":"The upper bound of the range.","type":"object","required":["value"],"properties":{"value":{"description":"The value of the range's endpoint.","type":"string"},"inclusive":{"description":"Indicates if the endpoint is included in the range.","type":"boolean","default":false}}}}},"terms":{"description":"The terms to be filtered.","type":"array","items":{"type":"string"}},"exclude":{"description":"Indicates if the filter excludes results.","type":"boolean","default":false}}}]}},"required":["indices","query"]}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}}},"method":"put","path":"/saved-searches/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"0de46054-fe90-434a-b84e-c6b3359d0c64","owner":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313"},"name":"Disabled accounts","description":"Disabled accounts","public":false,"created":"2018-06-25T20:22:28.104Z","modified":"2018-06-25T20:22:28.104Z","indices":["identities"],"columns":{"identity":[{"field":"displayName","header":"Display Name"},{"field":"email","header":"Work Email"},{"field":"attributes.cloudLifecycleState","header":"Lifecycle State"}]},"query":"@accounts(disabled:true)","fields":["disabled"],"sort":["displayName"],"filters":{"attributes.cloudAuthoritativeSource":{"type":"EXISTS","exclude":true},"accessCount":{"type":"RANGE","range":{"lower":{"value":"3"}}},"created":{"type":"RANGE","range":{"lower":{"value":"2019-12-01","inclusive":true},"upper":{"value":"2020-01-01"}}},"source.name":{"type":"TERMS","terms":["HR Employees","Corporate Active Directory"],"exclude":true},"protected":{"type":"TERMS","terms":["true"]}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Updates an existing saved search\n","description":{"content":"Updates an existing saved search.\n","type":"text/plain"},"url":{"path":["saved-searches",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the requested document.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Updates an existing saved search + + + + +Updates an existing saved search. + + +
      Path Parameters
      Request Body required
      + +The saved search to persist. + +
        owner object
        + +The owner of the saved search. + + +
        columns object
        + +The columns to be returned (specifies the order in which they will be presented) for each document type. + +The currently supported document types are: _accessprofile_, _accountactivity_, _account_, _aggregation_, _entitlement_, _event_, _identity_, and _role_. + + +
        items object
        filters object
        + +The filters to be applied for each filtered field name. + +
        range object
        + +The range of values to be filtered. + +
        lower object
        + +The lower bound of the range. + +
        upper object
        + +The upper bound of the range. + +
      + +The persisted saved search. + +
      Schema
        owner object
        + +The owner of the saved search. + + +
        columns object
        + +The columns to be returned (specifies the order in which they will be presented) for each document type. + +The currently supported document types are: _accessprofile_, _accountactivity_, _account_, _aggregation_, _entitlement_, _event_, _identity_, and _role_. + + +
        items object
        filters object
        + +The filters to be applied for each filtered field name. + +
        range object
        + +The range of values to be filtered. + +
        lower object
        + +The lower bound of the range. + +
        upper object
        + +The upper bound of the range. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/saved-search.tag.mdx b/docs/sailpoint-api-v3/saved-search.tag.mdx new file mode 100644 index 000000000..3afc1640a --- /dev/null +++ b/docs/sailpoint-api-v3/saved-search.tag.mdx @@ -0,0 +1,15 @@ +--- +id: saved-search +title: Saved Search +description: Saved Search +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/scheduled-search-create.api.mdx b/docs/sailpoint-api-v3/scheduled-search-create.api.mdx new file mode 100644 index 000000000..206efa987 --- /dev/null +++ b/docs/sailpoint-api-v3/scheduled-search-create.api.mdx @@ -0,0 +1,113 @@ +--- +id: scheduled-search-create +sidebar_label: Create a new scheduled search +hide_title: true +hide_table_of_contents: true +api: {"tags":["Scheduled Search"],"description":"Creates a new scheduled search.\n","operationId":"scheduledSearchCreate","requestBody":{"description":"The scheduled search to persist.","content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"name":{"description":"The name of the scheduled search.\n","type":"string","example":"Daily disabled accounts"},"description":{"description":"The description of the scheduled search.\n","type":"string","example":"Daily disabled accounts"}}},{"type":"object","properties":{"savedSearchId":{"description":"The ID of the saved search that will be executed.\n","type":"string","example":"554f1511-f0a1-4744-ab14-599514d3e57c"},"created":{"description":"The date the scheduled search was initially created.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"modified":{"description":"The last date the scheduled search was modified.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"schedule":{"type":"object","description":"The schedule information.\n","properties":{"type":{"description":"Enum representing the currently supported schedule types.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["DAILY","WEEKLY","MONTHLY","CALENDAR"],"example":"WEEKLY"},"months":{"description":"The months selected.","type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"days":{"description":"The days selected.\n","example":{"type":"LIST","values":["MON","WED","FRI"]},"type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"hours":{"description":"The hours selected.\n","example":{"type":"RANGE","values":["9","18"],"interval":3},"type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"expiration":{"description":"The schedule expiration date. Latest possible expiration date is '2038-01-19T03:14:07+0000'\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"timeZoneId":{"description":"The ID of the time zone for the schedule.\n","type":"string","example":"GMT-06:00"}},"required":["type","hours"]},"recipients":{"description":"The email recipients.\n","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"}},"required":["type","id"]}},"enabled":{"description":"Indicates if the scheduled search is enabled.\n","type":"boolean","default":false},"emailEmptyResults":{"description":"Indicates if email generation should not be suppressed if search returns no results.\n","type":"boolean","default":false},"displayQueryDetails":{"description":"Indicates if the generated email should include the query and search results preview (which could include PII).\n","type":"boolean","default":false}},"required":["savedSearchId","schedule","recipients"]}]}}},"required":true},"responses":{"201":{"description":"The persisted scheduled search.","content":{"application/json":{"schema":{"type":"object","allOf":[{"type":"object","properties":{"name":{"description":"The name of the scheduled search.\n","type":"string","example":"Daily disabled accounts"},"description":{"description":"The description of the scheduled search.\n","type":"string","example":"Daily disabled accounts"}}},{"type":"object","properties":{"savedSearchId":{"description":"The ID of the saved search that will be executed.\n","type":"string","example":"554f1511-f0a1-4744-ab14-599514d3e57c"},"created":{"description":"The date the scheduled search was initially created.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"modified":{"description":"The last date the scheduled search was modified.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"schedule":{"type":"object","description":"The schedule information.\n","properties":{"type":{"description":"Enum representing the currently supported schedule types.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["DAILY","WEEKLY","MONTHLY","CALENDAR"],"example":"WEEKLY"},"months":{"description":"The months selected.","type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"days":{"description":"The days selected.\n","example":{"type":"LIST","values":["MON","WED","FRI"]},"type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"hours":{"description":"The hours selected.\n","example":{"type":"RANGE","values":["9","18"],"interval":3},"type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"expiration":{"description":"The schedule expiration date. Latest possible expiration date is '2038-01-19T03:14:07+0000'\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"timeZoneId":{"description":"The ID of the time zone for the schedule.\n","type":"string","example":"GMT-06:00"}},"required":["type","hours"]},"recipients":{"description":"The email recipients.\n","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"}},"required":["type","id"]}},"enabled":{"description":"Indicates if the scheduled search is enabled.\n","type":"boolean","default":false},"emailEmptyResults":{"description":"Indicates if email generation should not be suppressed if search returns no results.\n","type":"boolean","default":false},"displayQueryDetails":{"description":"Indicates if the generated email should include the query and search results preview (which could include PII).\n","type":"boolean","default":false}},"required":["savedSearchId","schedule","recipients"]},{"type":"object","properties":{"id":{"description":"The scheduled search ID.\n","type":"string","example":"0de46054-fe90-434a-b84e-c6b3359d0c64"},"owner":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"}},"required":["type","id"],"description":"The owner of the scheduled search.\n"},"ownerId":{"description":"The ID of the scheduled search owner","type":"string","example":"2c9180867624cbd7017642d8c8c81f67"}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}}},"method":"post","path":"/scheduled-searches","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"Daily disabled accounts","description":"Daily disabled accounts","savedSearchId":"554f1511-f0a1-4744-ab14-599514d3e57c","created":"2018-06-25T20:22:28.104Z","modified":"2018-06-25T20:22:28.104Z","schedule":{"type":"WEEKLY","months":{"type":"LIST","values":["MON","WED"],"interval":3},"days":{"type":"LIST","values":["MON","WED","FRI"]},"hours":{"type":"RANGE","values":["9","18"],"interval":3},"expiration":"2018-06-25T20:22:28.104Z","timeZoneId":"GMT-06:00"},"recipients":[{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313"}],"enabled":false,"emailEmptyResults":false,"displayQueryDetails":false},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Create a new scheduled search","description":{"content":"Creates a new scheduled search.\n","type":"text/plain"},"url":{"path":["scheduled-searches"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Create a new scheduled search + + + +Creates a new scheduled search. + + +
      Request Body required
      + +The scheduled search to persist. + +
        schedule object
        + +The schedule information. + + +
        months object
        + +The months selected. + +
        days object
        + +The days selected. + + +
        hours object
        + +The hours selected. + + +
        recipients object[]
        + +The email recipients. + + +
      + +The persisted scheduled search. + +
      Schema
        schedule object
        + +The schedule information. + + +
        months object
        + +The months selected. + +
        days object
        + +The days selected. + + +
        hours object
        + +The hours selected. + + +
        recipients object[]
        + +The email recipients. + + +
        owner object
        + +The owner of the scheduled search. + + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/scheduled-search-delete.api.mdx b/docs/sailpoint-api-v3/scheduled-search-delete.api.mdx new file mode 100644 index 000000000..ed0c5a86d --- /dev/null +++ b/docs/sailpoint-api-v3/scheduled-search-delete.api.mdx @@ -0,0 +1,56 @@ +--- +id: scheduled-search-delete +sidebar_label: Delete a Scheduled Search by ID +hide_title: true +hide_table_of_contents: true +api: {"tags":["Scheduled Search"],"description":"Deletes the specified scheduled search.\n","operationId":"scheduledSearchDelete","parameters":[{"in":"path","name":"id","description":"ID of the requested document.","schema":{"type":"string"},"required":true}],"responses":{"204":{"description":"No Content - Indicates the request was successful but there is no content to be returned in the response."},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"method":"delete","path":"/scheduled-searches/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Delete a Scheduled Search by ID","description":{"content":"Deletes the specified scheduled search.\n","type":"text/plain"},"url":{"path":["scheduled-searches",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the requested document.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"DELETE"}} +sidebar_class_name: "delete api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Delete a Scheduled Search by ID + + + +Deletes the specified scheduled search. + + +
      Path Parameters
      + +No Content - Indicates the request was successful but there is no content to be returned in the response. + +
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/scheduled-search-get.api.mdx b/docs/sailpoint-api-v3/scheduled-search-get.api.mdx new file mode 100644 index 000000000..ee14625b2 --- /dev/null +++ b/docs/sailpoint-api-v3/scheduled-search-get.api.mdx @@ -0,0 +1,73 @@ +--- +id: scheduled-search-get +sidebar_label: Return a Scheduled Search by ID +hide_title: true +hide_table_of_contents: true +api: {"tags":["Scheduled Search"],"description":"Returns the specified scheduled search.\n","operationId":"scheduledSearchGet","parameters":[{"in":"path","name":"id","description":"ID of the requested document.","schema":{"type":"string"},"required":true}],"responses":{"200":{"description":"The requested scheduled search.","content":{"application/json":{"schema":{"type":"object","allOf":[{"type":"object","properties":{"name":{"description":"The name of the scheduled search.\n","type":"string","example":"Daily disabled accounts"},"description":{"description":"The description of the scheduled search.\n","type":"string","example":"Daily disabled accounts"}}},{"type":"object","properties":{"savedSearchId":{"description":"The ID of the saved search that will be executed.\n","type":"string","example":"554f1511-f0a1-4744-ab14-599514d3e57c"},"created":{"description":"The date the scheduled search was initially created.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"modified":{"description":"The last date the scheduled search was modified.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"schedule":{"type":"object","description":"The schedule information.\n","properties":{"type":{"description":"Enum representing the currently supported schedule types.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["DAILY","WEEKLY","MONTHLY","CALENDAR"],"example":"WEEKLY"},"months":{"description":"The months selected.","type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"days":{"description":"The days selected.\n","example":{"type":"LIST","values":["MON","WED","FRI"]},"type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"hours":{"description":"The hours selected.\n","example":{"type":"RANGE","values":["9","18"],"interval":3},"type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"expiration":{"description":"The schedule expiration date. Latest possible expiration date is '2038-01-19T03:14:07+0000'\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"timeZoneId":{"description":"The ID of the time zone for the schedule.\n","type":"string","example":"GMT-06:00"}},"required":["type","hours"]},"recipients":{"description":"The email recipients.\n","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"}},"required":["type","id"]}},"enabled":{"description":"Indicates if the scheduled search is enabled.\n","type":"boolean","default":false},"emailEmptyResults":{"description":"Indicates if email generation should not be suppressed if search returns no results.\n","type":"boolean","default":false},"displayQueryDetails":{"description":"Indicates if the generated email should include the query and search results preview (which could include PII).\n","type":"boolean","default":false}},"required":["savedSearchId","schedule","recipients"]},{"type":"object","properties":{"id":{"description":"The scheduled search ID.\n","type":"string","example":"0de46054-fe90-434a-b84e-c6b3359d0c64"},"owner":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"}},"required":["type","id"],"description":"The owner of the scheduled search.\n"},"ownerId":{"description":"The ID of the scheduled search owner","type":"string","example":"2c9180867624cbd7017642d8c8c81f67"}}}]}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"method":"get","path":"/scheduled-searches/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Return a Scheduled Search by ID","description":{"content":"Returns the specified scheduled search.\n","type":"text/plain"},"url":{"path":["scheduled-searches",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the requested document.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Return a Scheduled Search by ID + + + +Returns the specified scheduled search. + + +
      Path Parameters
      + +The requested scheduled search. + +
      Schema
        schedule object
        + +The schedule information. + + +
        months object
        + +The months selected. + +
        days object
        + +The days selected. + + +
        hours object
        + +The hours selected. + + +
        recipients object[]
        + +The email recipients. + + +
        owner object
        + +The owner of the scheduled search. + + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/scheduled-search-list.api.mdx b/docs/sailpoint-api-v3/scheduled-search-list.api.mdx new file mode 100644 index 000000000..5239eb9eb --- /dev/null +++ b/docs/sailpoint-api-v3/scheduled-search-list.api.mdx @@ -0,0 +1,60 @@ +--- +id: scheduled-search-list +sidebar_label: Return a list of scheduled searches +hide_title: true +hide_table_of_contents: true +api: {"tags":["Scheduled Search"],"description":"Returns a list of scheduled searches.\n","operationId":"scheduledSearchList","parameters":[{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}},{"name":"filters","in":"query","schema":{"type":"string"},"description":"An expression used to constrain the result set using the filtering syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html).\n\nAllowed filter properties: *owner.id*, *savedSearchId*\n\nAllowed filter operator: *eq*\n\n**Example filters**:\n\n```owner.id eq \"0de46054-fe90-434a-b84e-c6b3359d0c64\"``` -- returns scheduled searches for the specified owner ID\n\n```savedSearchId eq \"6cc0945d-9eeb-4948-9033-72d066e1153e\"``` -- returns scheduled searches that reference the specified saved search\n\n```owner.id eq me or savedSearchId eq \"6cc0945d-9eeb-4948-9033-72d066e1153e\"``` -- returns all of the current user's scheduled searches as well as all scheduled searches that reference the specified saved search\n"}],"responses":{"200":{"description":"The list of requested scheduled searches.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","allOf":[{"type":"object","properties":{"name":{"description":"The name of the scheduled search.\n","type":"string","example":"Daily disabled accounts"},"description":{"description":"The description of the scheduled search.\n","type":"string","example":"Daily disabled accounts"}}},{"type":"object","properties":{"savedSearchId":{"description":"The ID of the saved search that will be executed.\n","type":"string","example":"554f1511-f0a1-4744-ab14-599514d3e57c"},"created":{"description":"The date the scheduled search was initially created.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"modified":{"description":"The last date the scheduled search was modified.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"schedule":{"type":"object","description":"The schedule information.\n","properties":{"type":{"description":"Enum representing the currently supported schedule types.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["DAILY","WEEKLY","MONTHLY","CALENDAR"],"example":"WEEKLY"},"months":{"description":"The months selected.","type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"days":{"description":"The days selected.\n","example":{"type":"LIST","values":["MON","WED","FRI"]},"type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"hours":{"description":"The hours selected.\n","example":{"type":"RANGE","values":["9","18"],"interval":3},"type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"expiration":{"description":"The schedule expiration date. Latest possible expiration date is '2038-01-19T03:14:07+0000'\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"timeZoneId":{"description":"The ID of the time zone for the schedule.\n","type":"string","example":"GMT-06:00"}},"required":["type","hours"]},"recipients":{"description":"The email recipients.\n","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"}},"required":["type","id"]}},"enabled":{"description":"Indicates if the scheduled search is enabled.\n","type":"boolean","default":false},"emailEmptyResults":{"description":"Indicates if email generation should not be suppressed if search returns no results.\n","type":"boolean","default":false},"displayQueryDetails":{"description":"Indicates if the generated email should include the query and search results preview (which could include PII).\n","type":"boolean","default":false}},"required":["savedSearchId","schedule","recipients"]},{"type":"object","properties":{"id":{"description":"The scheduled search ID.\n","type":"string","example":"0de46054-fe90-434a-b84e-c6b3359d0c64"},"owner":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"}},"required":["type","id"],"description":"The owner of the scheduled search.\n"},"ownerId":{"description":"The ID of the scheduled search owner","type":"string","example":"2c9180867624cbd7017642d8c8c81f67"}}}]}}}},"headers":{"X-Total-Count":{"description":"The total result count (returned only if the *count* parameter is specified as *true*).","schema":{"type":"integer"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}}},"method":"get","path":"/scheduled-searches","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Return a list of scheduled searches","description":{"content":"Returns a list of scheduled searches.\n","type":"text/plain"},"url":{"path":["scheduled-searches"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""},{"disabled":false,"description":{"content":"An expression used to constrain the result set using the filtering syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html).\n\nAllowed filter properties: *owner.id*, *savedSearchId*\n\nAllowed filter operator: *eq*\n\n**Example filters**:\n\n```owner.id eq \"0de46054-fe90-434a-b84e-c6b3359d0c64\"``` -- returns scheduled searches for the specified owner ID\n\n```savedSearchId eq \"6cc0945d-9eeb-4948-9033-72d066e1153e\"``` -- returns scheduled searches that reference the specified saved search\n\n```owner.id eq me or savedSearchId eq \"6cc0945d-9eeb-4948-9033-72d066e1153e\"``` -- returns all of the current user's scheduled searches as well as all scheduled searches that reference the specified saved search\n","type":"text/plain"},"key":"filters","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Return a list of scheduled searches + + + +Returns a list of scheduled searches. + + +
      Query Parameters
      + +The list of requested scheduled searches. + +
      Response Headers
      • X-Total-Count integer
        + +The total result count (returned only if the *count* parameter is specified as *true*). + +
      Schema array
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/scheduled-search-unsubscribe.api.mdx b/docs/sailpoint-api-v3/scheduled-search-unsubscribe.api.mdx new file mode 100644 index 000000000..42d40158c --- /dev/null +++ b/docs/sailpoint-api-v3/scheduled-search-unsubscribe.api.mdx @@ -0,0 +1,73 @@ +--- +id: scheduled-search-unsubscribe +sidebar_label: Unsubscribe a recipient from Scheduled Search +hide_title: true +hide_table_of_contents: true +api: {"tags":["Scheduled Search"],"description":"Unsubscribes a recipient from the specified scheduled search.\n","operationId":"scheduledSearchUnsubscribe","parameters":[{"in":"path","name":"id","description":"ID of the requested document.","schema":{"type":"string"},"required":true}],"requestBody":{"description":"The recipient to be removed from the scheduled search.\n","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"}},"required":["type","id"]}}},"required":true},"responses":{"204":{"description":"No Content - Indicates the request was successful but there is no content to be returned in the response."},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"method":"post","path":"/scheduled-searches/{id}/unsubscribe","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Unsubscribe a recipient from Scheduled Search","description":{"content":"Unsubscribes a recipient from the specified scheduled search.\n","type":"text/plain"},"url":{"path":["scheduled-searches",":id","unsubscribe"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the requested document.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Unsubscribe a recipient from Scheduled Search + + + +Unsubscribes a recipient from the specified scheduled search. + + +
      Path Parameters
      Request Body required
      + +The recipient to be removed from the scheduled search. + + +
      + +No Content - Indicates the request was successful but there is no content to be returned in the response. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/scheduled-search-update.api.mdx b/docs/sailpoint-api-v3/scheduled-search-update.api.mdx new file mode 100644 index 000000000..ab167ffed --- /dev/null +++ b/docs/sailpoint-api-v3/scheduled-search-update.api.mdx @@ -0,0 +1,130 @@ +--- +id: scheduled-search-update +sidebar_label: Update an existing Scheduled Search +hide_title: true +hide_table_of_contents: true +api: {"tags":["Scheduled Search"],"description":"Updates an existing scheduled search.\n","operationId":"scheduledSearchUpdate","parameters":[{"in":"path","name":"id","description":"ID of the requested document.","schema":{"type":"string"},"required":true}],"requestBody":{"description":"The scheduled search to persist.","content":{"application/json":{"schema":{"type":"object","allOf":[{"type":"object","properties":{"name":{"description":"The name of the scheduled search.\n","type":"string","example":"Daily disabled accounts"},"description":{"description":"The description of the scheduled search.\n","type":"string","example":"Daily disabled accounts"}}},{"type":"object","properties":{"savedSearchId":{"description":"The ID of the saved search that will be executed.\n","type":"string","example":"554f1511-f0a1-4744-ab14-599514d3e57c"},"created":{"description":"The date the scheduled search was initially created.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"modified":{"description":"The last date the scheduled search was modified.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"schedule":{"type":"object","description":"The schedule information.\n","properties":{"type":{"description":"Enum representing the currently supported schedule types.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["DAILY","WEEKLY","MONTHLY","CALENDAR"],"example":"WEEKLY"},"months":{"description":"The months selected.","type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"days":{"description":"The days selected.\n","example":{"type":"LIST","values":["MON","WED","FRI"]},"type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"hours":{"description":"The hours selected.\n","example":{"type":"RANGE","values":["9","18"],"interval":3},"type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"expiration":{"description":"The schedule expiration date. Latest possible expiration date is '2038-01-19T03:14:07+0000'\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"timeZoneId":{"description":"The ID of the time zone for the schedule.\n","type":"string","example":"GMT-06:00"}},"required":["type","hours"]},"recipients":{"description":"The email recipients.\n","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"}},"required":["type","id"]}},"enabled":{"description":"Indicates if the scheduled search is enabled.\n","type":"boolean","default":false},"emailEmptyResults":{"description":"Indicates if email generation should not be suppressed if search returns no results.\n","type":"boolean","default":false},"displayQueryDetails":{"description":"Indicates if the generated email should include the query and search results preview (which could include PII).\n","type":"boolean","default":false}},"required":["savedSearchId","schedule","recipients"]},{"type":"object","properties":{"id":{"description":"The scheduled search ID.\n","type":"string","example":"0de46054-fe90-434a-b84e-c6b3359d0c64"},"owner":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"}},"required":["type","id"],"description":"The owner of the scheduled search.\n"},"ownerId":{"description":"The ID of the scheduled search owner","type":"string","example":"2c9180867624cbd7017642d8c8c81f67"}}}]}}},"required":true},"responses":{"200":{"description":"The persisted scheduled search.","content":{"application/json":{"schema":{"type":"object","allOf":[{"type":"object","properties":{"name":{"description":"The name of the scheduled search.\n","type":"string","example":"Daily disabled accounts"},"description":{"description":"The description of the scheduled search.\n","type":"string","example":"Daily disabled accounts"}}},{"type":"object","properties":{"savedSearchId":{"description":"The ID of the saved search that will be executed.\n","type":"string","example":"554f1511-f0a1-4744-ab14-599514d3e57c"},"created":{"description":"The date the scheduled search was initially created.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"modified":{"description":"The last date the scheduled search was modified.\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"schedule":{"type":"object","description":"The schedule information.\n","properties":{"type":{"description":"Enum representing the currently supported schedule types.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["DAILY","WEEKLY","MONTHLY","CALENDAR"],"example":"WEEKLY"},"months":{"description":"The months selected.","type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"days":{"description":"The days selected.\n","example":{"type":"LIST","values":["MON","WED","FRI"]},"type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"hours":{"description":"The hours selected.\n","example":{"type":"RANGE","values":["9","18"],"interval":3},"type":"object","nullable":true,"properties":{"type":{"description":"Enum representing the currently supported selector types.\n\nLIST - the *values* array contains one or more distinct values.\n\nRANGE - the *values* array contains two values: the start and end of the range, inclusive.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["LIST","RANGE"],"example":"LIST"},"values":{"description":"The selected values.\n","type":"array","items":{"type":"string"},"example":["MON","WED"]},"interval":{"nullable":true,"description":"The selected interval for RANGE selectors.\n","type":"integer","format":"int32","example":3}},"required":["type","values"]},"expiration":{"description":"The schedule expiration date. Latest possible expiration date is '2038-01-19T03:14:07+0000'\n","type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z"},"timeZoneId":{"description":"The ID of the time zone for the schedule.\n","type":"string","example":"GMT-06:00"}},"required":["type","hours"]},"recipients":{"description":"The email recipients.\n","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"}},"required":["type","id"]}},"enabled":{"description":"Indicates if the scheduled search is enabled.\n","type":"boolean","default":false},"emailEmptyResults":{"description":"Indicates if email generation should not be suppressed if search returns no results.\n","type":"boolean","default":false},"displayQueryDetails":{"description":"Indicates if the generated email should include the query and search results preview (which could include PII).\n","type":"boolean","default":false}},"required":["savedSearchId","schedule","recipients"]},{"type":"object","properties":{"id":{"description":"The scheduled search ID.\n","type":"string","example":"0de46054-fe90-434a-b84e-c6b3359d0c64"},"owner":{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"}},"required":["type","id"],"description":"The owner of the scheduled search.\n"},"ownerId":{"description":"The ID of the scheduled search owner","type":"string","example":"2c9180867624cbd7017642d8c8c81f67"}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"method":"put","path":"/scheduled-searches/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"Daily disabled accounts","description":"Daily disabled accounts","savedSearchId":"554f1511-f0a1-4744-ab14-599514d3e57c","created":"2018-06-25T20:22:28.104Z","modified":"2018-06-25T20:22:28.104Z","schedule":{"type":"WEEKLY","months":{"type":"LIST","values":["MON","WED"],"interval":3},"days":{"type":"LIST","values":["MON","WED","FRI"]},"hours":{"type":"RANGE","values":["9","18"],"interval":3},"expiration":"2018-06-25T20:22:28.104Z","timeZoneId":"GMT-06:00"},"recipients":[{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313"}],"enabled":false,"emailEmptyResults":false,"displayQueryDetails":false,"id":"0de46054-fe90-434a-b84e-c6b3359d0c64","owner":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313"},"ownerId":"2c9180867624cbd7017642d8c8c81f67"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Update an existing Scheduled Search","description":{"content":"Updates an existing scheduled search.\n","type":"text/plain"},"url":{"path":["scheduled-searches",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the requested document.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update an existing Scheduled Search + + + +Updates an existing scheduled search. + + +
      Path Parameters
      Request Body required
      + +The scheduled search to persist. + +
        schedule object
        + +The schedule information. + + +
        months object
        + +The months selected. + +
        days object
        + +The days selected. + + +
        hours object
        + +The hours selected. + + +
        recipients object[]
        + +The email recipients. + + +
        owner object
        + +The owner of the scheduled search. + + +
      + +The persisted scheduled search. + +
      Schema
        schedule object
        + +The schedule information. + + +
        months object
        + +The months selected. + +
        days object
        + +The days selected. + + +
        hours object
        + +The hours selected. + + +
        recipients object[]
        + +The email recipients. + + +
        owner object
        + +The owner of the scheduled search. + + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/scheduled-search.tag.mdx b/docs/sailpoint-api-v3/scheduled-search.tag.mdx new file mode 100644 index 000000000..1d1e1a9fe --- /dev/null +++ b/docs/sailpoint-api-v3/scheduled-search.tag.mdx @@ -0,0 +1,15 @@ +--- +id: scheduled-search +title: Scheduled Search +description: Scheduled Search +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/search-aggregate.api.mdx b/docs/sailpoint-api-v3/search-aggregate.api.mdx new file mode 100644 index 000000000..f65827f91 --- /dev/null +++ b/docs/sailpoint-api-v3/search-aggregate.api.mdx @@ -0,0 +1,142 @@ +--- +id: search-aggregate +sidebar_label: Perform a Search Query Aggregation +hide_title: true +hide_table_of_contents: true +api: {"tags":["Search"],"description":"Performs a search query aggregation and returns aggregation result.","operationId":"searchAggregate","parameters":[{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"indices":{"description":"The names of the Elasticsearch indices in which to search.","externalDocs":{"description":"Learn more about search indices here.","url":"https://documentation.sailpoint.com/saas/help/search/searchable-fields.html"},"type":"array","items":{"description":"Enum representing the currently supported indices.\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofiles","accountactivities","entitlements","events","identities","roles"],"example":"identities"},"example":["identities"]},"queryType":{"description":"The type of query to use. By default, the `SAILPOINT` query type is used, which requires the `query` object to be defined in the request body.\nTo use the `queryDsl` or `typeAheadQuery` objects in the request, you must set the type to `DSL` or `TYPEAHEAD` accordingly.\nAdditional values may be added in the future without notice.","type":"string","enum":["DSL","SAILPOINT","TYPEAHEAD"],"default":"SAILPOINT","example":"SAILPOINT"},"queryVersion":{"allOf":[{"description":"The current Elasticserver version.","type":"string","default":"5.2"},{"type":"string","description":"The version of the query object.\nThis version number will map to the version of Elasticsearch for the query strings and objects being used."}]},"query":{"type":"object","description":"Query parameters used to construct an Elasticsearch query object.","properties":{"query":{"description":"The query using the Elasticsearch [Query String Query](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string) syntax from the Query DSL extended by SailPoint to support Nested queries.","type":"string","example":"name:a*"},"fields":{"description":"The fields to which the specified query will be applied. The available fields are dependent on the indice(s) being searched on. Please refer to the response schema of this API for a list of available fields.","type":"array","items":{"type":"string"},"example":["name"]},"timeZone":{"description":"The time zone to be applied to any range query related to dates.","type":"string","example":"America/Chicago"},"innerHit":{"description":"Inner Hit query object that will cause the specified nested type to be returned as the result matching the supplied query.","type":"object","required":["query","type"],"properties":{"query":{"description":"The search query using the Elasticsearch [Query String Query](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string) syntax from the Query DSL extended by SailPoint to support Nested queries.","type":"string","example":"source.name:\\\"Active Directory\\\""},"type":{"description":"The nested type to use in the inner hits query.","type":"string","example":"access"}}}}},"queryDsl":{"description":"The search query using the Elasticsearch [Query DSL](https://www.elastic.co/guide/en/elasticsearch/reference/7.10/query-dsl.html) syntax.","type":"object","example":{"match":{"name":"john.doe"}}},"typeAheadQuery":{"type":"object","description":"Query parameters used to construct an Elasticsearch type ahead query object.","required":["query","field"],"properties":{"query":{"description":"The type ahead query string used to construct a phrase prefix match query.","type":"string","example":"Work"},"field":{"description":"The field on which to perform the type ahead search.","type":"string","example":"source.name"},"nestedType":{"description":"The nested type.","type":"string","example":"access"},"maxExpansions":{"description":"The number of suffixes the last term will be expanded into.\nInfluences the performance of the query and the number results returned.\nValid values: 1 to 1000.","type":"integer","format":"int32","minimum":1,"maximum":1000,"default":10,"example":10}}},"includeNested":{"description":"Indicates if nested objects from returned search results should be included.","type":"boolean","default":true,"example":true},"queryResultFilter":{"type":"object","description":"Allows the query results to be filtered by specifying a list of fields to include and/or exclude from the result documents.","properties":{"includes":{"description":"The list of field names to include in the result documents.","type":"array","items":{"type":"string"},"example":["name","displayName"]},"excludes":{"description":"The list of field names to exclude from the result documents.","type":"array","items":{"type":"string"},"example":["stacktrace"]}}},"aggregationType":{"description":"Enum representing the currently available query languages for aggregations, which are used to perform calculations or groupings on search results.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["DSL","SAILPOINT"],"default":"DSL","example":"DSL"},"aggregationsVersion":{"allOf":[{"description":"The current Elasticserver version.","type":"string","default":"5.2"},{"type":"string","description":"The version of the language being used for aggregation queries.\nThis version number will map to the version of Elasticsearch for the aggregation query object."}]},"aggregationsDsl":{"description":"The aggregation search query using Elasticsearch [Aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations.html) syntax.","type":"object"},"aggregations":{"description":"The aggregation’s specifications, such as the groupings and calculations to be performed.\n","allOf":[{"type":"object","properties":{"nested":{"type":"object","description":"The nested aggregation object.","required":["name","type"],"properties":{"name":{"description":"The name of the nested aggregate to be included in the result.","type":"string","example":"id"},"type":{"description":"The type of the nested object.","type":"string","example":"access"}}},"metric":{"type":"object","description":"The calculation done on the results of the query","required":["name","field"],"properties":{"name":{"description":"The name of the metric aggregate to be included in the result.\nIf the metric aggregation is omitted, the resulting aggregation will be a count of the documents in the search results.","type":"string","example":"Access Name Count"},"type":{"description":"Enum representing the currently supported metric aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["COUNT","UNIQUE_COUNT","AVG","SUM","MEDIAN","MIN","MAX"],"default":"UNIQUE_COUNT"},"field":{"description":"The field the calculation is performed on.\n\nPrefix the field name with '@' to reference a nested object.\n","type":"string","example":"@access.name"}}},"filter":{"type":"object","description":"An additional filter to constrain the results of the search query.","required":["name","field","value"],"properties":{"name":{"description":"The name of the filter aggregate to be included in the result.","type":"string","example":"Entitlements"},"type":{"description":"Enum representing the currently supported filter aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["TERM"],"default":"TERM"},"field":{"description":"The search field to apply the filter to.\n\nPrefix the field name with '@' to reference a nested object.\n","type":"string","example":"access.type"},"value":{"description":"The value to filter on.","type":"string","example":"ENTITLEMENT"}}},"bucket":{"type":"object","description":"The bucket to group the results of the aggregation query by.","required":["name","field"],"properties":{"name":{"description":"The name of the bucket aggregate to be included in the result.","type":"string","example":"Identity Locations"},"type":{"description":"Enum representing the currently supported bucket aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["TERMS"],"default":"TERMS","example":"TERMS"},"field":{"description":"The field to bucket on.\nPrefix the field name with '@' to reference a nested object.","type":"string","example":"attributes.city"},"size":{"description":"Maximum number of buckets to include.","type":"integer","format":"int32","example":100},"minDocCount":{"description":"Minimum number of documents a bucket should have.","type":"integer","format":"int32","example":2}}}}},{"type":"object","properties":{"subAggregation":{"description":"Aggregation to be performed on the result of the parent bucket aggregation.","allOf":[{"type":"object","properties":{"nested":{"type":"object","description":"The nested aggregation object.","required":["name","type"],"properties":{"name":{"description":"The name of the nested aggregate to be included in the result.","type":"string","example":"id"},"type":{"description":"The type of the nested object.","type":"string","example":"access"}}},"metric":{"type":"object","description":"The calculation done on the results of the query","required":["name","field"],"properties":{"name":{"description":"The name of the metric aggregate to be included in the result.\nIf the metric aggregation is omitted, the resulting aggregation will be a count of the documents in the search results.","type":"string","example":"Access Name Count"},"type":{"description":"Enum representing the currently supported metric aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["COUNT","UNIQUE_COUNT","AVG","SUM","MEDIAN","MIN","MAX"],"default":"UNIQUE_COUNT"},"field":{"description":"The field the calculation is performed on.\n\nPrefix the field name with '@' to reference a nested object.\n","type":"string","example":"@access.name"}}},"filter":{"type":"object","description":"An additional filter to constrain the results of the search query.","required":["name","field","value"],"properties":{"name":{"description":"The name of the filter aggregate to be included in the result.","type":"string","example":"Entitlements"},"type":{"description":"Enum representing the currently supported filter aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["TERM"],"default":"TERM"},"field":{"description":"The search field to apply the filter to.\n\nPrefix the field name with '@' to reference a nested object.\n","type":"string","example":"access.type"},"value":{"description":"The value to filter on.","type":"string","example":"ENTITLEMENT"}}},"bucket":{"type":"object","description":"The bucket to group the results of the aggregation query by.","required":["name","field"],"properties":{"name":{"description":"The name of the bucket aggregate to be included in the result.","type":"string","example":"Identity Locations"},"type":{"description":"Enum representing the currently supported bucket aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["TERMS"],"default":"TERMS","example":"TERMS"},"field":{"description":"The field to bucket on.\nPrefix the field name with '@' to reference a nested object.","type":"string","example":"attributes.city"},"size":{"description":"Maximum number of buckets to include.","type":"integer","format":"int32","example":100},"minDocCount":{"description":"Minimum number of documents a bucket should have.","type":"integer","format":"int32","example":2}}}}},{"type":"object","properties":{"subAggregation":{"type":"object","properties":{"nested":{"type":"object","description":"The nested aggregation object.","required":["name","type"],"properties":{"name":{"description":"The name of the nested aggregate to be included in the result.","type":"string","example":"id"},"type":{"description":"The type of the nested object.","type":"string","example":"access"}}},"metric":{"type":"object","description":"The calculation done on the results of the query","required":["name","field"],"properties":{"name":{"description":"The name of the metric aggregate to be included in the result.\nIf the metric aggregation is omitted, the resulting aggregation will be a count of the documents in the search results.","type":"string","example":"Access Name Count"},"type":{"description":"Enum representing the currently supported metric aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["COUNT","UNIQUE_COUNT","AVG","SUM","MEDIAN","MIN","MAX"],"default":"UNIQUE_COUNT"},"field":{"description":"The field the calculation is performed on.\n\nPrefix the field name with '@' to reference a nested object.\n","type":"string","example":"@access.name"}}},"filter":{"type":"object","description":"An additional filter to constrain the results of the search query.","required":["name","field","value"],"properties":{"name":{"description":"The name of the filter aggregate to be included in the result.","type":"string","example":"Entitlements"},"type":{"description":"Enum representing the currently supported filter aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["TERM"],"default":"TERM"},"field":{"description":"The search field to apply the filter to.\n\nPrefix the field name with '@' to reference a nested object.\n","type":"string","example":"access.type"},"value":{"description":"The value to filter on.","type":"string","example":"ENTITLEMENT"}}},"bucket":{"type":"object","description":"The bucket to group the results of the aggregation query by.","required":["name","field"],"properties":{"name":{"description":"The name of the bucket aggregate to be included in the result.","type":"string","example":"Identity Locations"},"type":{"description":"Enum representing the currently supported bucket aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["TERMS"],"default":"TERMS","example":"TERMS"},"field":{"description":"The field to bucket on.\nPrefix the field name with '@' to reference a nested object.","type":"string","example":"attributes.city"},"size":{"description":"Maximum number of buckets to include.","type":"integer","format":"int32","example":100},"minDocCount":{"description":"Minimum number of documents a bucket should have.","type":"integer","format":"int32","example":2}}}},"description":"Aggregation to be performed on the result of the parent bucket aggregation."}}}]}}}]},"sort":{"description":"The fields to be used to sort the search results. Use + or - to specify the sort direction.","type":"array","items":{"type":"string","example":"+id"}},"searchAfter":{"description":"Used to begin the search window at the values specified.\nThis parameter consists of the last values of the sorted fields in the current record set.\nThis is used to expand the Elasticsearch limit of 10K records by shifting the 10K window to begin at this value.\nFor example, when searching for identities, if the last idenitity ID in the search result is 2c91808375d8e80a0175e1f88a575221, then using that ID in this property will start a new search after this identity.","type":"array","items":{"type":"string","example":"2c91808375d8e80a0175e1f88a575221"}},"filters":{"description":"The filters to be applied for each filtered field name.","type":"object","additionalProperties":{"type":"object","properties":{"type":{"description":"Enum representing the currently supported filter types.\nAdditional values may be added in the future without notice.","type":"string","enum":["EXISTS","RANGE","TERMS"],"example":"RANGE"},"range":{"type":"object","description":"The range of values to be filtered.","properties":{"lower":{"description":"The lower bound of the range.","type":"object","required":["value"],"properties":{"value":{"description":"The value of the range's endpoint.","type":"string"},"inclusive":{"description":"Indicates if the endpoint is included in the range.","type":"boolean","default":false}}},"upper":{"description":"The upper bound of the range.","type":"object","required":["value"],"properties":{"value":{"description":"The value of the range's endpoint.","type":"string"},"inclusive":{"description":"Indicates if the endpoint is included in the range.","type":"boolean","default":false}}}}},"terms":{"description":"The terms to be filtered.","type":"array","items":{"type":"string"}},"exclude":{"description":"Indicates if the filter excludes results.","type":"boolean","default":false}}}}},"required":["indices"]},"examples":{"metricAggregation":{"summary":"MetricAggregation","value":{"indices":["aggregations"],"aggregationType":"SAILPOINT","aggregations":{"metric":{"name":"How Many Locations","type":"UNIQUE_COUNT","field":"attributes.city"}}}},"metricAggregation-dsl":{"summary":"MetricAggregation using DSL","value":{"indices":["aggregations"],"aggregationType":"DSL","aggregationsDsl":{"How Many Locations":{"cardinality":{"field":"attributes.city.exact"}}}}},"bucketAggregation":{"summary":"BucketAggregation","value":{"indices":["aggregations"],"aggregationType":"SAILPOINT","aggregations":{"bucket":{"name":"Identity Locations","type":"TERMS","field":"attributes.city"}}}},"bucketAggregation-dsl":{"summary":"BucketAggregation using DSL","value":{"indices":["aggregations"],"aggregationType":"DSL","aggregationsDsl":{"Identity Locations":{"terms":{"field":"attributes.city.exact"}}}}},"nestedAggregation-bucketAggregation":{"summary":"NestedAggregation with BucketAggregation","value":{"indices":["aggregations"],"aggregationType":"SAILPOINT","aggregations":{"nested":{"name":"Access","field":"access","type":"TERMS"},"bucket":{"name":"Access Source Name","type":"TERMS","field":"access.source.name"}}}},"nestedAggregation-bucketAggregation-dsl":{"summary":"NestedAggregation with BucketAggregation using DSL","value":{"indices":["aggregations"],"aggregationType":"DSL","aggregationsDsl":{"access":{"nested":{"path":"access"},"aggs":{"Access Source Name":{"terms":{"field":"access.source.name.exact"}}}}}}},"nestedAggregation-filterAggregation-bucketAggregation":{"summary":"NestedAggregation with FilterAggregation and BucketAggregation","value":{"indices":["aggregations"],"aggregationType":"SAILPOINT","aggregations":{"nested":{"name":"Access","field":"access","type":"TERMS"},"filter":{"name":"Entitlements","field":"access.type","value":"ENTITLEMENT"},"bucket":{"name":"Access Name","type":"TERMS","field":"access.name"}}}},"nestedAggregation-filterAggregation-bucketAggregation-dsl":{"summary":"NestedAggregation with FilterAggregation and BucketAggregation using DSL","value":{"indices":["aggregations"],"aggregationType":"DSL","aggregationsDsl":{"access":{"nested":{"path":"access"},"aggs":{"Entitlements":{"filter":{"term":{"access.type":"ENTITLEMENT"}},"aggs":{"Access Name":{"terms":{"field":"access.name.exact"}}}}}}}}},"bucketAggregation-subAggregation":{"summary":"BucketAggregation with SubAggregation","value":{"indices":["aggregations"],"aggregationType":"SAILPOINT","aggregations":{"bucket":{"name":"Identity Department","type":"TERMS","field":"attributes.department"},"subAggregation":{"bucket":{"name":"Identity Locations","type":"TERMS","field":"attributes.city"}}}}},"bucketAggregation-subAggregation-dsl":{"summary":"BucketAggregation with SubAggregation using DSL","value":{"indices":["aggregations"],"aggregationType":"DSL","aggregationsDsl":{"Identity Department":{"terms":{"field":"attributes.department.exact"},"aggs":{"Identity Locations":{"terms":{"field":"attributes.city.exact"}}}}}}}}}},"required":true},"responses":{"200":{"description":"Aggregation results.","content":{"application/json":{"schema":{"type":"object","properties":{"aggregations":{"type":"object","description":"The document containing the results of the aggregation. This document is controlled by Elasticsearch and depends on the type of aggregation query that is run.\n\nSee Elasticsearch [Aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations.html) documentation for information.\n","example":{"Identity Locations":{"buckets":[{"key":"Austin","doc_count":109},{"key":"London","doc_count":64},{"key":"San Jose","doc_count":27},{"key":"Brussels","doc_count":26},{"key":"Sao Paulo","doc_count":24},{"key":"Munich","doc_count":23},{"key":"Singapore","doc_count":22},{"key":"Tokyo","doc_count":20},{"key":"Taipei","doc_count":16}]}}},"hits":{"description":"The results of the aggregation search query.\n","type":"array","items":{"discriminator":{"propertyName":"_type","mapping":{"accessprofile":{"description":"This is more of a complete representation of an access profile. ","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"description":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"enabled":{"type":"boolean"},"requestable":{"type":"boolean"},"requestCommentsRequired":{"type":"boolean"},"owner":{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}}]},{"type":"object","properties":{"email":{"type":"string"}}}]}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"entitlements":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"description":{"type":"string"},"attribute":{"type":"string"},"value":{"type":"string"}}}]}},"entitlementCount":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]},"accountactivity":{"description":"AccountActivity","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"type":"object","properties":{"action":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"stage":{"type":"string"},"origin":{"type":"string"},"status":{"type":"string"},"requester":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"recipient":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"trackingNumber":{"type":"string"},"errors":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}},"approvals":{"type":"array","items":{"type":"object","properties":{"comments":{"type":"array","items":{"type":"object","properties":{"comment":{"type":"string"},"commenter":{"type":"string"},"date":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"}}}},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"result":{"type":"string"},"type":{"type":"string"}}}},"originalRequests":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"attributeRequests":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}}}},"op":{"type":"string"},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]}}}},"expansionItems":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"cause":{"type":"string"},"name":{"type":"string"},"attributeRequests":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}}}},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]}}}},"accountRequests":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"attributeRequests":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}}}},"op":{"type":"string"},"provisioningTarget":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"result":{"type":"object","properties":{"errors":{"type":"array","items":{"type":"string"}},"status":{"type":"string"},"ticketId":{"type":"string"}}},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]}}}},"sources":{"type":"array","items":{"type":"string"}}}}]},"account":{"description":"Account","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"accountId":{"type":"string"},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"disabled":{"type":"boolean"},"locked":{"type":"boolean"},"privileged":{"type":"boolean"},"manuallyCorrelated":{"type":"boolean"},"passwordLastSet":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"entitlementAttributes":{"type":"object","nullable":true,"description":"a map or dictionary of key/value pairs"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"}}}]},{"type":"object","properties":{"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"attributes":{"type":"object","description":"a map or dictionary of key/value pairs"},"identity":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"access":{"type":"array","items":{"description":"EntitlementReference","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"attribute":{"type":"string"},"value":{"type":"string"},"standalone":{"type":"boolean"}}}]}},"entitlementCount":{"type":"integer"},"uncorrelated":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]},"aggregation":{"description":"Aggregation","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"type":"object","properties":{"status":{"type":"string"},"duration":{"type":"integer"},"avgDuration":{"type":"integer"},"changedAccounts":{"type":"integer"},"nextScheduled":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"startTime":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"sourceOwner":{"type":"string"}}}]},"entitlement":{"description":"Entitlement","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"description":{"type":"string"},"attribute":{"type":"string"},"value":{"type":"string"}}}]},{"type":"object","properties":{"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"displayName":{"type":"string"},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"identityCount":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]},"event":{"description":"Event","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"type":"object","properties":{"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"action":{"type":"string"},"type":{"type":"string"},"actor":{"type":"object","properties":{"name":{"type":"string","example":"John Doe"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}},"target":{"type":"object","properties":{"name":{"type":"string","example":"John Doe"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}},"stack":{"type":"string"},"trackingNumber":{"type":"string"},"ipAddress":{"type":"string"},"details":{"type":"string"},"attributes":{"type":"object"},"objects":{"type":"array","items":{"type":"string"}},"operation":{"type":"string"},"status":{"type":"string"},"technicalName":{"type":"string"}}}]},"identity":{"description":"Identity","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"displayName":{"type":"string"},"email":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"phone":{"type":"string"},"inactive":{"type":"boolean"},"protected":{"type":"boolean"},"status":{"type":"string"},"employeeNumber":{"type":"string"},"manager":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}],"nullable":true},"isManager":{"type":"boolean"},"identityProfile":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"attributes":{"type":"object","description":"a map or dictionary of key/value pairs"},"processingState":{"type":"string","nullable":true},"processingDetails":{"nullable":true,"type":"object","properties":{"date":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"stage":{"type":"string"},"retryCount":{"type":"integer"},"stackTrace":{"type":"string"},"message":{"type":"string"}}},"accounts":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"accountId":{"type":"string"},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"disabled":{"type":"boolean"},"locked":{"type":"boolean"},"privileged":{"type":"boolean"},"manuallyCorrelated":{"type":"boolean"},"passwordLastSet":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"entitlementAttributes":{"type":"object","nullable":true,"description":"a map or dictionary of key/value pairs"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"}}}]}},"accountCount":{"type":"integer"},"apps":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"account":{"type":"object","properties":{"id":{"type":"string"},"accountId":{"type":"string"}}}}}]}},"appCount":{"type":"integer"},"access":{"type":"array","items":{"discriminator":{"propertyName":"type","mapping":{"ACCESS_PROFILE":{"description":"This is a summary representation of an access profile. ","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"revocable":{"type":"boolean"}}}]},"ENTITLEMENT":{"description":"EntitlementReference","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"attribute":{"type":"string"},"value":{"type":"string"},"standalone":{"type":"boolean"}}}]},"ROLE":{"description":"Role","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"disabled":{"type":"boolean"},"revocable":{"type":"boolean"}}}]}}},"oneOf":[{"description":"This is a summary representation of an access profile. ","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"revocable":{"type":"boolean"}}}]},{"description":"EntitlementReference","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"attribute":{"type":"string"},"value":{"type":"string"},"standalone":{"type":"boolean"}}}]},{"description":"Role","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"disabled":{"type":"boolean"},"revocable":{"type":"boolean"}}}]}]}},"accessCount":{"type":"integer"},"accessProfileCount":{"type":"integer"},"entitlementCount":{"type":"integer"},"roleCount":{"type":"integer"},"owns":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"entitlements":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"accessProfiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"roles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"apps":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"governanceGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"fallbackApprover":{"type":"boolean"}}},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]},"role":{"description":"Role","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"description":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"enabled":{"type":"boolean"},"requestable":{"type":"boolean"},"requestCommentsRequired":{"type":"boolean"},"owner":{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}}]},{"type":"object","properties":{"email":{"type":"string"}}}]}}}]},{"type":"object","properties":{"accessProfiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"accessProfileCount":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]}}},"oneOf":[{"description":"This is more of a complete representation of an access profile. ","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"description":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"enabled":{"type":"boolean"},"requestable":{"type":"boolean"},"requestCommentsRequired":{"type":"boolean"},"owner":{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}}]},{"type":"object","properties":{"email":{"type":"string"}}}]}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"entitlements":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"description":{"type":"string"},"attribute":{"type":"string"},"value":{"type":"string"}}}]}},"entitlementCount":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]},{"description":"AccountActivity","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"type":"object","properties":{"action":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"stage":{"type":"string"},"origin":{"type":"string"},"status":{"type":"string"},"requester":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"recipient":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"trackingNumber":{"type":"string"},"errors":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}},"approvals":{"type":"array","items":{"type":"object","properties":{"comments":{"type":"array","items":{"type":"object","properties":{"comment":{"type":"string"},"commenter":{"type":"string"},"date":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"}}}},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"result":{"type":"string"},"type":{"type":"string"}}}},"originalRequests":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"attributeRequests":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}}}},"op":{"type":"string"},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]}}}},"expansionItems":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"cause":{"type":"string"},"name":{"type":"string"},"attributeRequests":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}}}},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]}}}},"accountRequests":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"attributeRequests":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}}}},"op":{"type":"string"},"provisioningTarget":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"result":{"type":"object","properties":{"errors":{"type":"array","items":{"type":"string"}},"status":{"type":"string"},"ticketId":{"type":"string"}}},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]}}}},"sources":{"type":"array","items":{"type":"string"}}}}]},{"description":"Account","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"accountId":{"type":"string"},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"disabled":{"type":"boolean"},"locked":{"type":"boolean"},"privileged":{"type":"boolean"},"manuallyCorrelated":{"type":"boolean"},"passwordLastSet":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"entitlementAttributes":{"type":"object","nullable":true,"description":"a map or dictionary of key/value pairs"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"}}}]},{"type":"object","properties":{"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"attributes":{"type":"object","description":"a map or dictionary of key/value pairs"},"identity":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"access":{"type":"array","items":{"description":"EntitlementReference","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"attribute":{"type":"string"},"value":{"type":"string"},"standalone":{"type":"boolean"}}}]}},"entitlementCount":{"type":"integer"},"uncorrelated":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]},{"description":"Aggregation","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"type":"object","properties":{"status":{"type":"string"},"duration":{"type":"integer"},"avgDuration":{"type":"integer"},"changedAccounts":{"type":"integer"},"nextScheduled":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"startTime":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"sourceOwner":{"type":"string"}}}]},{"description":"Entitlement","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"description":{"type":"string"},"attribute":{"type":"string"},"value":{"type":"string"}}}]},{"type":"object","properties":{"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"displayName":{"type":"string"},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"identityCount":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]},{"description":"Event","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"type":"object","properties":{"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"action":{"type":"string"},"type":{"type":"string"},"actor":{"type":"object","properties":{"name":{"type":"string","example":"John Doe"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}},"target":{"type":"object","properties":{"name":{"type":"string","example":"John Doe"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}},"stack":{"type":"string"},"trackingNumber":{"type":"string"},"ipAddress":{"type":"string"},"details":{"type":"string"},"attributes":{"type":"object"},"objects":{"type":"array","items":{"type":"string"}},"operation":{"type":"string"},"status":{"type":"string"},"technicalName":{"type":"string"}}}]},{"description":"Identity","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"displayName":{"type":"string"},"email":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"phone":{"type":"string"},"inactive":{"type":"boolean"},"protected":{"type":"boolean"},"status":{"type":"string"},"employeeNumber":{"type":"string"},"manager":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}],"nullable":true},"isManager":{"type":"boolean"},"identityProfile":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"attributes":{"type":"object","description":"a map or dictionary of key/value pairs"},"processingState":{"type":"string","nullable":true},"processingDetails":{"nullable":true,"type":"object","properties":{"date":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"stage":{"type":"string"},"retryCount":{"type":"integer"},"stackTrace":{"type":"string"},"message":{"type":"string"}}},"accounts":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"accountId":{"type":"string"},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"disabled":{"type":"boolean"},"locked":{"type":"boolean"},"privileged":{"type":"boolean"},"manuallyCorrelated":{"type":"boolean"},"passwordLastSet":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"entitlementAttributes":{"type":"object","nullable":true,"description":"a map or dictionary of key/value pairs"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"}}}]}},"accountCount":{"type":"integer"},"apps":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"account":{"type":"object","properties":{"id":{"type":"string"},"accountId":{"type":"string"}}}}}]}},"appCount":{"type":"integer"},"access":{"type":"array","items":{"discriminator":{"propertyName":"type","mapping":{"ACCESS_PROFILE":{"description":"This is a summary representation of an access profile. ","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"revocable":{"type":"boolean"}}}]},"ENTITLEMENT":{"description":"EntitlementReference","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"attribute":{"type":"string"},"value":{"type":"string"},"standalone":{"type":"boolean"}}}]},"ROLE":{"description":"Role","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"disabled":{"type":"boolean"},"revocable":{"type":"boolean"}}}]}}},"oneOf":[{"description":"This is a summary representation of an access profile. ","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"revocable":{"type":"boolean"}}}]},{"description":"EntitlementReference","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"attribute":{"type":"string"},"value":{"type":"string"},"standalone":{"type":"boolean"}}}]},{"description":"Role","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"disabled":{"type":"boolean"},"revocable":{"type":"boolean"}}}]}]}},"accessCount":{"type":"integer"},"accessProfileCount":{"type":"integer"},"entitlementCount":{"type":"integer"},"roleCount":{"type":"integer"},"owns":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"entitlements":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"accessProfiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"roles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"apps":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"governanceGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"fallbackApprover":{"type":"boolean"}}},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]},{"description":"Role","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"description":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"enabled":{"type":"boolean"},"requestable":{"type":"boolean"},"requestCommentsRequired":{"type":"boolean"},"owner":{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}}]},{"type":"object","properties":{"email":{"type":"string"}}}]}}}]},{"type":"object","properties":{"accessProfiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"accessProfileCount":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]}]}}}}},"text/csv":{"schema":{"description":"If the *Accept:text/csv* header is specified and the *aggregationType* parameter in the request body is *SAILPOINT*,\n\nthe aggregation result will be returned as a CSV document.\n","type":"string","example":["Identity Locations,Count","Munich,23","Brussels,26","Singapore,22","Tokyo,20","Taipei,16","London,64","Austin,109","Sao Paulo,24","San Jose,27"]}}},"headers":{"X-Total-Count":{"description":"The total result count (returned only if the *count* parameter is specified as *true*).","schema":{"type":"integer"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}}},"method":"post","path":"/search/aggregate","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"indices":["identities"],"queryType":"SAILPOINT","queryVersion":"5.2","query":{"query":"name:a*","fields":["name"],"timeZone":"America/Chicago","innerHit":{"query":"source.name:\\\"Active Directory\\\"","type":"access"}},"queryDsl":{"match":{"name":"john.doe"}},"typeAheadQuery":{"query":"Work","field":"source.name","nestedType":"access","maxExpansions":10},"includeNested":true,"queryResultFilter":{"includes":["name","displayName"],"excludes":["stacktrace"]},"aggregationType":"DSL","aggregationsVersion":"5.2","aggregationsDsl":{},"aggregations":{"nested":{"name":"id","type":"access"},"metric":{"name":"Access Name Count","type":"UNIQUE_COUNT","field":"@access.name"},"filter":{"name":"Entitlements","type":"TERM","field":"access.type","value":"ENTITLEMENT"},"bucket":{"name":"Identity Locations","type":"TERMS","field":"attributes.city","size":100,"minDocCount":2},"subAggregation":{"nested":{"name":"id","type":"access"},"metric":{"name":"Access Name Count","type":"UNIQUE_COUNT","field":"@access.name"},"filter":{"name":"Entitlements","type":"TERM","field":"access.type","value":"ENTITLEMENT"},"bucket":{"name":"Identity Locations","type":"TERMS","field":"attributes.city","size":100,"minDocCount":2},"subAggregation":{"nested":{"name":"id","type":"access"},"metric":{"name":"Access Name Count","type":"UNIQUE_COUNT","field":"@access.name"},"filter":{"name":"Entitlements","type":"TERM","field":"access.type","value":"ENTITLEMENT"},"bucket":{"name":"Identity Locations","type":"TERMS","field":"attributes.city","size":100,"minDocCount":2}}}},"sort":["+id"],"searchAfter":["2c91808375d8e80a0175e1f88a575221"],"filters":{}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Perform a Search Query Aggregation","description":{"content":"Performs a search query aggregation and returns aggregation result.","type":"text/plain"},"url":{"path":["search","aggregate"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Perform a Search Query Aggregation + + + +Performs a search query aggregation and returns aggregation result. + +
      Query Parameters
      Request Body required
        query object
        + +Query parameters used to construct an Elasticsearch query object. + +
        innerHit object
        + +Inner Hit query object that will cause the specified nested type to be returned as the result matching the supplied query. + +
        typeAheadQuery object
        + +Query parameters used to construct an Elasticsearch type ahead query object. + +
        = 1` and `<= 1000`"} defaultValue={10}>
        queryResultFilter object
        + +Allows the query results to be filtered by specifying a list of fields to include and/or exclude from the result documents. + +
        aggregations object
        nested object
        + +The nested aggregation object. + +
        metric object
        + +The calculation done on the results of the query + +
        filter object
        + +An additional filter to constrain the results of the search query. + +
        bucket object
        + +The bucket to group the results of the aggregation query by. + +
        subAggregation object
        + +Aggregation to be performed on the result of the parent bucket aggregation. + +
        nested object
        + +The nested aggregation object. + +
        metric object
        + +The calculation done on the results of the query + +
        filter object
        + +An additional filter to constrain the results of the search query. + +
        bucket object
        + +The bucket to group the results of the aggregation query by. + +
        subAggregation object
        + +Aggregation to be performed on the result of the parent bucket aggregation. + +
        nested object
        + +The nested aggregation object. + +
        metric object
        + +The calculation done on the results of the query + +
        filter object
        + +An additional filter to constrain the results of the search query. + +
        bucket object
        + +The bucket to group the results of the aggregation query by. + +
        filters object
        + +The filters to be applied for each filtered field name. + +
      • property name* object
      + +Aggregation results. + +
      Response Headers
      • X-Total-Count integer
        + +The total result count (returned only if the *count* parameter is specified as *true*). + +
      Schema
      Schema
      • string
        + +If the *Accept:text/csv* header is specified and the *aggregationType* parameter in the request body is *SAILPOINT*, + +the aggregation result will be returned as a CSV document. + + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/search-count.api.mdx b/docs/sailpoint-api-v3/search-count.api.mdx new file mode 100644 index 000000000..28822513f --- /dev/null +++ b/docs/sailpoint-api-v3/search-count.api.mdx @@ -0,0 +1,135 @@ +--- +id: search-count +sidebar_label: Count the number of Documents satisfying a Query +hide_title: true +hide_table_of_contents: true +api: {"tags":["Search"],"description":"Performs a search with provided query and returns count of results in the X-Total-Count header.","operationId":"searchCount","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"indices":{"description":"The names of the Elasticsearch indices in which to search.","externalDocs":{"description":"Learn more about search indices here.","url":"https://documentation.sailpoint.com/saas/help/search/searchable-fields.html"},"type":"array","items":{"description":"Enum representing the currently supported indices.\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofiles","accountactivities","entitlements","events","identities","roles"],"example":"identities"},"example":["identities"]},"queryType":{"description":"The type of query to use. By default, the `SAILPOINT` query type is used, which requires the `query` object to be defined in the request body.\nTo use the `queryDsl` or `typeAheadQuery` objects in the request, you must set the type to `DSL` or `TYPEAHEAD` accordingly.\nAdditional values may be added in the future without notice.","type":"string","enum":["DSL","SAILPOINT","TYPEAHEAD"],"default":"SAILPOINT","example":"SAILPOINT"},"queryVersion":{"allOf":[{"description":"The current Elasticserver version.","type":"string","default":"5.2"},{"type":"string","description":"The version of the query object.\nThis version number will map to the version of Elasticsearch for the query strings and objects being used."}]},"query":{"type":"object","description":"Query parameters used to construct an Elasticsearch query object.","properties":{"query":{"description":"The query using the Elasticsearch [Query String Query](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string) syntax from the Query DSL extended by SailPoint to support Nested queries.","type":"string","example":"name:a*"},"fields":{"description":"The fields to which the specified query will be applied. The available fields are dependent on the indice(s) being searched on. Please refer to the response schema of this API for a list of available fields.","type":"array","items":{"type":"string"},"example":["name"]},"timeZone":{"description":"The time zone to be applied to any range query related to dates.","type":"string","example":"America/Chicago"},"innerHit":{"description":"Inner Hit query object that will cause the specified nested type to be returned as the result matching the supplied query.","type":"object","required":["query","type"],"properties":{"query":{"description":"The search query using the Elasticsearch [Query String Query](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string) syntax from the Query DSL extended by SailPoint to support Nested queries.","type":"string","example":"source.name:\\\"Active Directory\\\""},"type":{"description":"The nested type to use in the inner hits query.","type":"string","example":"access"}}}}},"queryDsl":{"description":"The search query using the Elasticsearch [Query DSL](https://www.elastic.co/guide/en/elasticsearch/reference/7.10/query-dsl.html) syntax.","type":"object","example":{"match":{"name":"john.doe"}}},"typeAheadQuery":{"type":"object","description":"Query parameters used to construct an Elasticsearch type ahead query object.","required":["query","field"],"properties":{"query":{"description":"The type ahead query string used to construct a phrase prefix match query.","type":"string","example":"Work"},"field":{"description":"The field on which to perform the type ahead search.","type":"string","example":"source.name"},"nestedType":{"description":"The nested type.","type":"string","example":"access"},"maxExpansions":{"description":"The number of suffixes the last term will be expanded into.\nInfluences the performance of the query and the number results returned.\nValid values: 1 to 1000.","type":"integer","format":"int32","minimum":1,"maximum":1000,"default":10,"example":10}}},"includeNested":{"description":"Indicates if nested objects from returned search results should be included.","type":"boolean","default":true,"example":true},"queryResultFilter":{"type":"object","description":"Allows the query results to be filtered by specifying a list of fields to include and/or exclude from the result documents.","properties":{"includes":{"description":"The list of field names to include in the result documents.","type":"array","items":{"type":"string"},"example":["name","displayName"]},"excludes":{"description":"The list of field names to exclude from the result documents.","type":"array","items":{"type":"string"},"example":["stacktrace"]}}},"aggregationType":{"description":"Enum representing the currently available query languages for aggregations, which are used to perform calculations or groupings on search results.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["DSL","SAILPOINT"],"default":"DSL","example":"DSL"},"aggregationsVersion":{"allOf":[{"description":"The current Elasticserver version.","type":"string","default":"5.2"},{"type":"string","description":"The version of the language being used for aggregation queries.\nThis version number will map to the version of Elasticsearch for the aggregation query object."}]},"aggregationsDsl":{"description":"The aggregation search query using Elasticsearch [Aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations.html) syntax.","type":"object"},"aggregations":{"description":"The aggregation’s specifications, such as the groupings and calculations to be performed.\n","allOf":[{"type":"object","properties":{"nested":{"type":"object","description":"The nested aggregation object.","required":["name","type"],"properties":{"name":{"description":"The name of the nested aggregate to be included in the result.","type":"string","example":"id"},"type":{"description":"The type of the nested object.","type":"string","example":"access"}}},"metric":{"type":"object","description":"The calculation done on the results of the query","required":["name","field"],"properties":{"name":{"description":"The name of the metric aggregate to be included in the result.\nIf the metric aggregation is omitted, the resulting aggregation will be a count of the documents in the search results.","type":"string","example":"Access Name Count"},"type":{"description":"Enum representing the currently supported metric aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["COUNT","UNIQUE_COUNT","AVG","SUM","MEDIAN","MIN","MAX"],"default":"UNIQUE_COUNT"},"field":{"description":"The field the calculation is performed on.\n\nPrefix the field name with '@' to reference a nested object.\n","type":"string","example":"@access.name"}}},"filter":{"type":"object","description":"An additional filter to constrain the results of the search query.","required":["name","field","value"],"properties":{"name":{"description":"The name of the filter aggregate to be included in the result.","type":"string","example":"Entitlements"},"type":{"description":"Enum representing the currently supported filter aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["TERM"],"default":"TERM"},"field":{"description":"The search field to apply the filter to.\n\nPrefix the field name with '@' to reference a nested object.\n","type":"string","example":"access.type"},"value":{"description":"The value to filter on.","type":"string","example":"ENTITLEMENT"}}},"bucket":{"type":"object","description":"The bucket to group the results of the aggregation query by.","required":["name","field"],"properties":{"name":{"description":"The name of the bucket aggregate to be included in the result.","type":"string","example":"Identity Locations"},"type":{"description":"Enum representing the currently supported bucket aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["TERMS"],"default":"TERMS","example":"TERMS"},"field":{"description":"The field to bucket on.\nPrefix the field name with '@' to reference a nested object.","type":"string","example":"attributes.city"},"size":{"description":"Maximum number of buckets to include.","type":"integer","format":"int32","example":100},"minDocCount":{"description":"Minimum number of documents a bucket should have.","type":"integer","format":"int32","example":2}}}}},{"type":"object","properties":{"subAggregation":{"description":"Aggregation to be performed on the result of the parent bucket aggregation.","allOf":[{"type":"object","properties":{"nested":{"type":"object","description":"The nested aggregation object.","required":["name","type"],"properties":{"name":{"description":"The name of the nested aggregate to be included in the result.","type":"string","example":"id"},"type":{"description":"The type of the nested object.","type":"string","example":"access"}}},"metric":{"type":"object","description":"The calculation done on the results of the query","required":["name","field"],"properties":{"name":{"description":"The name of the metric aggregate to be included in the result.\nIf the metric aggregation is omitted, the resulting aggregation will be a count of the documents in the search results.","type":"string","example":"Access Name Count"},"type":{"description":"Enum representing the currently supported metric aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["COUNT","UNIQUE_COUNT","AVG","SUM","MEDIAN","MIN","MAX"],"default":"UNIQUE_COUNT"},"field":{"description":"The field the calculation is performed on.\n\nPrefix the field name with '@' to reference a nested object.\n","type":"string","example":"@access.name"}}},"filter":{"type":"object","description":"An additional filter to constrain the results of the search query.","required":["name","field","value"],"properties":{"name":{"description":"The name of the filter aggregate to be included in the result.","type":"string","example":"Entitlements"},"type":{"description":"Enum representing the currently supported filter aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["TERM"],"default":"TERM"},"field":{"description":"The search field to apply the filter to.\n\nPrefix the field name with '@' to reference a nested object.\n","type":"string","example":"access.type"},"value":{"description":"The value to filter on.","type":"string","example":"ENTITLEMENT"}}},"bucket":{"type":"object","description":"The bucket to group the results of the aggregation query by.","required":["name","field"],"properties":{"name":{"description":"The name of the bucket aggregate to be included in the result.","type":"string","example":"Identity Locations"},"type":{"description":"Enum representing the currently supported bucket aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["TERMS"],"default":"TERMS","example":"TERMS"},"field":{"description":"The field to bucket on.\nPrefix the field name with '@' to reference a nested object.","type":"string","example":"attributes.city"},"size":{"description":"Maximum number of buckets to include.","type":"integer","format":"int32","example":100},"minDocCount":{"description":"Minimum number of documents a bucket should have.","type":"integer","format":"int32","example":2}}}}},{"type":"object","properties":{"subAggregation":{"type":"object","properties":{"nested":{"type":"object","description":"The nested aggregation object.","required":["name","type"],"properties":{"name":{"description":"The name of the nested aggregate to be included in the result.","type":"string","example":"id"},"type":{"description":"The type of the nested object.","type":"string","example":"access"}}},"metric":{"type":"object","description":"The calculation done on the results of the query","required":["name","field"],"properties":{"name":{"description":"The name of the metric aggregate to be included in the result.\nIf the metric aggregation is omitted, the resulting aggregation will be a count of the documents in the search results.","type":"string","example":"Access Name Count"},"type":{"description":"Enum representing the currently supported metric aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["COUNT","UNIQUE_COUNT","AVG","SUM","MEDIAN","MIN","MAX"],"default":"UNIQUE_COUNT"},"field":{"description":"The field the calculation is performed on.\n\nPrefix the field name with '@' to reference a nested object.\n","type":"string","example":"@access.name"}}},"filter":{"type":"object","description":"An additional filter to constrain the results of the search query.","required":["name","field","value"],"properties":{"name":{"description":"The name of the filter aggregate to be included in the result.","type":"string","example":"Entitlements"},"type":{"description":"Enum representing the currently supported filter aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["TERM"],"default":"TERM"},"field":{"description":"The search field to apply the filter to.\n\nPrefix the field name with '@' to reference a nested object.\n","type":"string","example":"access.type"},"value":{"description":"The value to filter on.","type":"string","example":"ENTITLEMENT"}}},"bucket":{"type":"object","description":"The bucket to group the results of the aggregation query by.","required":["name","field"],"properties":{"name":{"description":"The name of the bucket aggregate to be included in the result.","type":"string","example":"Identity Locations"},"type":{"description":"Enum representing the currently supported bucket aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["TERMS"],"default":"TERMS","example":"TERMS"},"field":{"description":"The field to bucket on.\nPrefix the field name with '@' to reference a nested object.","type":"string","example":"attributes.city"},"size":{"description":"Maximum number of buckets to include.","type":"integer","format":"int32","example":100},"minDocCount":{"description":"Minimum number of documents a bucket should have.","type":"integer","format":"int32","example":2}}}},"description":"Aggregation to be performed on the result of the parent bucket aggregation."}}}]}}}]},"sort":{"description":"The fields to be used to sort the search results. Use + or - to specify the sort direction.","type":"array","items":{"type":"string","example":"+id"}},"searchAfter":{"description":"Used to begin the search window at the values specified.\nThis parameter consists of the last values of the sorted fields in the current record set.\nThis is used to expand the Elasticsearch limit of 10K records by shifting the 10K window to begin at this value.\nFor example, when searching for identities, if the last idenitity ID in the search result is 2c91808375d8e80a0175e1f88a575221, then using that ID in this property will start a new search after this identity.","type":"array","items":{"type":"string","example":"2c91808375d8e80a0175e1f88a575221"}},"filters":{"description":"The filters to be applied for each filtered field name.","type":"object","additionalProperties":{"type":"object","properties":{"type":{"description":"Enum representing the currently supported filter types.\nAdditional values may be added in the future without notice.","type":"string","enum":["EXISTS","RANGE","TERMS"],"example":"RANGE"},"range":{"type":"object","description":"The range of values to be filtered.","properties":{"lower":{"description":"The lower bound of the range.","type":"object","required":["value"],"properties":{"value":{"description":"The value of the range's endpoint.","type":"string"},"inclusive":{"description":"Indicates if the endpoint is included in the range.","type":"boolean","default":false}}},"upper":{"description":"The upper bound of the range.","type":"object","required":["value"],"properties":{"value":{"description":"The value of the range's endpoint.","type":"string"},"inclusive":{"description":"Indicates if the endpoint is included in the range.","type":"boolean","default":false}}}}},"terms":{"description":"The terms to be filtered.","type":"array","items":{"type":"string"}},"exclude":{"description":"Indicates if the filter excludes results.","type":"boolean","default":false}}}}},"required":["indices"]},"examples":{"query-timeZone":{"summary":"Query with TimeZone","value":{"indices":["identities"],"query":{"query":"created: [2022-05-19T19:26:03.351Z TO now]","timeZone":"America/Los_Angeles"}}}}}},"required":true},"responses":{"204":{"description":"No content - indicates the request was successful but there is no content to be returned in the response.","headers":{"X-Total-Count":{"description":"The total result count.","schema":{"type":"integer"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}}},"method":"post","path":"/search/count","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"indices":["identities"],"queryType":"SAILPOINT","queryVersion":"5.2","query":{"query":"name:a*","fields":["name"],"timeZone":"America/Chicago","innerHit":{"query":"source.name:\\\"Active Directory\\\"","type":"access"}},"queryDsl":{"match":{"name":"john.doe"}},"typeAheadQuery":{"query":"Work","field":"source.name","nestedType":"access","maxExpansions":10},"includeNested":true,"queryResultFilter":{"includes":["name","displayName"],"excludes":["stacktrace"]},"aggregationType":"DSL","aggregationsVersion":"5.2","aggregationsDsl":{},"aggregations":{"nested":{"name":"id","type":"access"},"metric":{"name":"Access Name Count","type":"UNIQUE_COUNT","field":"@access.name"},"filter":{"name":"Entitlements","type":"TERM","field":"access.type","value":"ENTITLEMENT"},"bucket":{"name":"Identity Locations","type":"TERMS","field":"attributes.city","size":100,"minDocCount":2},"subAggregation":{"nested":{"name":"id","type":"access"},"metric":{"name":"Access Name Count","type":"UNIQUE_COUNT","field":"@access.name"},"filter":{"name":"Entitlements","type":"TERM","field":"access.type","value":"ENTITLEMENT"},"bucket":{"name":"Identity Locations","type":"TERMS","field":"attributes.city","size":100,"minDocCount":2},"subAggregation":{"nested":{"name":"id","type":"access"},"metric":{"name":"Access Name Count","type":"UNIQUE_COUNT","field":"@access.name"},"filter":{"name":"Entitlements","type":"TERM","field":"access.type","value":"ENTITLEMENT"},"bucket":{"name":"Identity Locations","type":"TERMS","field":"attributes.city","size":100,"minDocCount":2}}}},"sort":["+id"],"searchAfter":["2c91808375d8e80a0175e1f88a575221"],"filters":{}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Count the number of Documents satisfying a Query","description":{"content":"Performs a search with provided query and returns count of results in the X-Total-Count header.","type":"text/plain"},"url":{"path":["search","count"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Count the number of Documents satisfying a Query + + + +Performs a search with provided query and returns count of results in the X-Total-Count header. + +
      Request Body required
        query object
        + +Query parameters used to construct an Elasticsearch query object. + +
        innerHit object
        + +Inner Hit query object that will cause the specified nested type to be returned as the result matching the supplied query. + +
        typeAheadQuery object
        + +Query parameters used to construct an Elasticsearch type ahead query object. + +
        = 1` and `<= 1000`"} defaultValue={10}>
        queryResultFilter object
        + +Allows the query results to be filtered by specifying a list of fields to include and/or exclude from the result documents. + +
        aggregations object
        nested object
        + +The nested aggregation object. + +
        metric object
        + +The calculation done on the results of the query + +
        filter object
        + +An additional filter to constrain the results of the search query. + +
        bucket object
        + +The bucket to group the results of the aggregation query by. + +
        subAggregation object
        + +Aggregation to be performed on the result of the parent bucket aggregation. + +
        nested object
        + +The nested aggregation object. + +
        metric object
        + +The calculation done on the results of the query + +
        filter object
        + +An additional filter to constrain the results of the search query. + +
        bucket object
        + +The bucket to group the results of the aggregation query by. + +
        subAggregation object
        + +Aggregation to be performed on the result of the parent bucket aggregation. + +
        nested object
        + +The nested aggregation object. + +
        metric object
        + +The calculation done on the results of the query + +
        filter object
        + +An additional filter to constrain the results of the search query. + +
        bucket object
        + +The bucket to group the results of the aggregation query by. + +
        filters object
        + +The filters to be applied for each filtered field name. + +
      • property name* object
      + +No content - indicates the request was successful but there is no content to be returned in the response. + +
      Response Headers
      • X-Total-Count integer
        + +The total result count. + +
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/search-get.api.mdx b/docs/sailpoint-api-v3/search-get.api.mdx new file mode 100644 index 000000000..333276af9 --- /dev/null +++ b/docs/sailpoint-api-v3/search-get.api.mdx @@ -0,0 +1,65 @@ +--- +id: search-get +sidebar_label: Get a Document by ID +hide_title: true +hide_table_of_contents: true +api: {"tags":["Search"],"description":"Fetches a single document from the specified index using the specified document ID.","operationId":"searchGet","parameters":[{"in":"path","name":"index","description":"The index from which to fetch the specified document.\n\nThe currently supported index names are: *accessprofiles*, *accountactivities*, *accounts*, *aggregations*, *entitlements*, *events*, *identities*, and *roles*.\n","schema":{"type":"string"},"required":true},{"in":"path","name":"id","description":"ID of the requested document.","schema":{"type":"string"},"required":true}],"responses":{"200":{"description":"The requested document.","content":{"application/json":{"schema":{"discriminator":{"propertyName":"_type","mapping":{"accessprofile":{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"description":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"enabled":{"type":"boolean"},"requestable":{"type":"boolean"},"requestCommentsRequired":{"type":"boolean"},"owner":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"email":{"type":"string"}}},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"entitlements":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"description":{"type":"string"},"attribute":{"type":"string"},"value":{"type":"string"}}}},"entitlementCount":{"type":"integer"},"tags":{"type":"array","example":["TAG_1","TAG_2"],"items":{"type":"string"}}}},"accountactivity":{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"action":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"stage":{"type":"string"},"origin":{"type":"string"},"status":{"type":"string"},"requester":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"type":{"type":"string"}}},"recipient":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"type":{"type":"string"}}},"trackingNumber":{"type":"string"},"errors":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}},"approvals":{"type":"array","items":{"type":"object","properties":{"comments":{"type":"array","items":{"type":"object","properties":{"comment":{"type":"string"},"commenter":{"type":"string"},"date":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"}}}},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"owner":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"type":{"type":"string"}}},"result":{"type":"string"},"type":{"type":"string"}}}},"originalRequests":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"attributeRequests":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}}}},"op":{"type":"string"},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"type":{"type":"string"}}}}}},"expansionItems":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"cause":{"type":"string"},"name":{"type":"string"},"attributeRequests":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}}}},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"type":{"type":"string"}}}}}},"accountRequests":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"attributeRequests":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}}}},"op":{"type":"string"},"provisioningTarget":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"type":{"type":"string"}}},"result":{"type":"object","properties":{"errors":{"type":"array","items":{"type":"string"}},"status":{"type":"string"},"ticketId":{"type":"string"}}},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"type":{"type":"string"}}}}}},"sources":{"type":"array","items":{"type":"string"}}}},"account":{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"accountId":{"type":"string"},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"type":{"type":"string"}}},"disabled":{"type":"boolean"},"locked":{"type":"boolean"},"privileged":{"type":"boolean"},"manuallyCorrelated":{"type":"boolean"},"passwordLastSet":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"entitlementAttributes":{"type":"object","nullable":true,"description":"a map or dictionary of key/value pairs"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"attributes":{"type":"object","description":"a map or dictionary of key/value pairs"},"identity":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"displayName":{"type":"string","example":"John Q. Doe"}}},"access":{"type":"array","items":{"description":"EntitlementReference","type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"displayName":{"type":"string","example":"John Q. Doe"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"attribute":{"type":"string"},"value":{"type":"string"},"standalone":{"type":"boolean"}}}},"entitlementCount":{"type":"integer"},"uncorrelated":{"type":"boolean"},"tags":{"type":"array","example":["TAG_1","TAG_2"],"items":{"type":"string"}}}},"aggregation":{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"duration":{"type":"integer"},"avgDuration":{"type":"integer"},"changedAccounts":{"type":"integer"},"nextScheduled":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"startTime":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"sourceOwner":{"type":"string"}}},"entitlement":{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"description":{"type":"string"},"attribute":{"type":"string"},"value":{"type":"string"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"displayName":{"type":"string"},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"identityCount":{"type":"integer"},"tags":{"type":"array","example":["TAG_1","TAG_2"],"items":{"type":"string"}}}},"event":{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"action":{"type":"string"},"type":{"type":"string"},"actor":{"type":"object","properties":{"name":{"type":"string","example":"John Doe"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}},"target":{"type":"object","properties":{"name":{"type":"string","example":"John Doe"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}},"stack":{"type":"string"},"trackingNumber":{"type":"string"},"ipAddress":{"type":"string"},"details":{"type":"string"},"attributes":{"type":"object"},"objects":{"type":"array","items":{"type":"string"}},"operation":{"type":"string"},"status":{"type":"string"},"technicalName":{"type":"string"}}},"identity":{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"displayName":{"type":"string","example":"John Q. Doe"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"phone":{"type":"string"},"inactive":{"type":"boolean"},"protected":{"type":"boolean"},"status":{"type":"string"},"employeeNumber":{"type":"string"},"manager":{"nullable":true,"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"displayName":{"type":"string","example":"John Q. Doe"}}},"isManager":{"type":"boolean"},"identityProfile":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"attributes":{"type":"object","description":"a map or dictionary of key/value pairs"},"processingState":{"type":"string","nullable":true},"processingDetails":{"nullable":true,"type":"object","properties":{"date":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"stage":{"type":"string"},"retryCount":{"type":"integer"},"stackTrace":{"type":"string"},"message":{"type":"string"}}},"accounts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"accountId":{"type":"string"},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"type":{"type":"string"}}},"disabled":{"type":"boolean"},"locked":{"type":"boolean"},"privileged":{"type":"boolean"},"manuallyCorrelated":{"type":"boolean"},"passwordLastSet":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"entitlementAttributes":{"type":"object","nullable":true,"description":"a map or dictionary of key/value pairs"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"}}}},"accountCount":{"type":"integer"},"apps":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"account":{"type":"object","properties":{"id":{"type":"string"},"accountId":{"type":"string"}}}}}},"appCount":{"type":"integer"},"access":{"type":"array","items":{"discriminator":{"propertyName":"type","mapping":{"ACCESS_PROFILE":{"description":"This is a summary representation of an access profile. ","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"revocable":{"type":"boolean"}}}]},"ENTITLEMENT":{"description":"EntitlementReference","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"attribute":{"type":"string"},"value":{"type":"string"},"standalone":{"type":"boolean"}}}]},"ROLE":{"description":"Role","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"disabled":{"type":"boolean"},"revocable":{"type":"boolean"}}}]}}},"oneOf":[{"description":"This is a summary representation of an access profile. ","type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"displayName":{"type":"string","example":"John Q. Doe"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"owner":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"displayName":{"type":"string","example":"John Q. Doe"}}},"revocable":{"type":"boolean"}}},{"description":"EntitlementReference","type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"displayName":{"type":"string","example":"John Q. Doe"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"attribute":{"type":"string"},"value":{"type":"string"},"standalone":{"type":"boolean"}}},{"description":"Role","type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"displayName":{"type":"string","example":"John Q. Doe"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true},"owner":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"displayName":{"type":"string","example":"John Q. Doe"}}},"disabled":{"type":"boolean"},"revocable":{"type":"boolean"}}}]}},"accessCount":{"type":"integer"},"accessProfileCount":{"type":"integer"},"entitlementCount":{"type":"integer"},"roleCount":{"type":"integer"},"owns":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"entitlements":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"accessProfiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"roles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"apps":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"governanceGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"fallbackApprover":{"type":"boolean"}}},"tags":{"type":"array","example":["TAG_1","TAG_2"],"items":{"type":"string"}}}},"role":{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"description":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"enabled":{"type":"boolean"},"requestable":{"type":"boolean"},"requestCommentsRequired":{"type":"boolean"},"owner":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"email":{"type":"string"}}},"accessProfiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"accessProfileCount":{"type":"integer"},"tags":{"type":"array","example":["TAG_1","TAG_2"],"items":{"type":"string"}}}}}},"oneOf":[{"description":"This is more of a complete representation of an access profile. ","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"description":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"enabled":{"type":"boolean"},"requestable":{"type":"boolean"},"requestCommentsRequired":{"type":"boolean"},"owner":{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}}]},{"type":"object","properties":{"email":{"type":"string"}}}]}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"entitlements":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"description":{"type":"string"},"attribute":{"type":"string"},"value":{"type":"string"}}}]}},"entitlementCount":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]},{"description":"AccountActivity","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"type":"object","properties":{"action":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"stage":{"type":"string"},"origin":{"type":"string"},"status":{"type":"string"},"requester":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"recipient":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"trackingNumber":{"type":"string"},"errors":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}},"approvals":{"type":"array","items":{"type":"object","properties":{"comments":{"type":"array","items":{"type":"object","properties":{"comment":{"type":"string"},"commenter":{"type":"string"},"date":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"}}}},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"result":{"type":"string"},"type":{"type":"string"}}}},"originalRequests":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"attributeRequests":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}}}},"op":{"type":"string"},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]}}}},"expansionItems":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"cause":{"type":"string"},"name":{"type":"string"},"attributeRequests":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}}}},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]}}}},"accountRequests":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"attributeRequests":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}}}},"op":{"type":"string"},"provisioningTarget":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"result":{"type":"object","properties":{"errors":{"type":"array","items":{"type":"string"}},"status":{"type":"string"},"ticketId":{"type":"string"}}},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]}}}},"sources":{"type":"array","items":{"type":"string"}}}}]},{"description":"Account","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"accountId":{"type":"string"},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"disabled":{"type":"boolean"},"locked":{"type":"boolean"},"privileged":{"type":"boolean"},"manuallyCorrelated":{"type":"boolean"},"passwordLastSet":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"entitlementAttributes":{"type":"object","nullable":true,"description":"a map or dictionary of key/value pairs"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"}}}]},{"type":"object","properties":{"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"attributes":{"type":"object","description":"a map or dictionary of key/value pairs"},"identity":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"access":{"type":"array","items":{"description":"EntitlementReference","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"attribute":{"type":"string"},"value":{"type":"string"},"standalone":{"type":"boolean"}}}]}},"entitlementCount":{"type":"integer"},"uncorrelated":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]},{"description":"Aggregation","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"type":"object","properties":{"status":{"type":"string"},"duration":{"type":"integer"},"avgDuration":{"type":"integer"},"changedAccounts":{"type":"integer"},"nextScheduled":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"startTime":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"sourceOwner":{"type":"string"}}}]},{"description":"Entitlement","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"description":{"type":"string"},"attribute":{"type":"string"},"value":{"type":"string"}}}]},{"type":"object","properties":{"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"displayName":{"type":"string"},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"identityCount":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]},{"description":"Event","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"type":"object","properties":{"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"action":{"type":"string"},"type":{"type":"string"},"actor":{"type":"object","properties":{"name":{"type":"string","example":"John Doe"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}},"target":{"type":"object","properties":{"name":{"type":"string","example":"John Doe"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}},"stack":{"type":"string"},"trackingNumber":{"type":"string"},"ipAddress":{"type":"string"},"details":{"type":"string"},"attributes":{"type":"object"},"objects":{"type":"array","items":{"type":"string"}},"operation":{"type":"string"},"status":{"type":"string"},"technicalName":{"type":"string"}}}]},{"description":"Identity","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"displayName":{"type":"string"},"email":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"phone":{"type":"string"},"inactive":{"type":"boolean"},"protected":{"type":"boolean"},"status":{"type":"string"},"employeeNumber":{"type":"string"},"manager":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}],"nullable":true},"isManager":{"type":"boolean"},"identityProfile":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"attributes":{"type":"object","description":"a map or dictionary of key/value pairs"},"processingState":{"type":"string","nullable":true},"processingDetails":{"nullable":true,"type":"object","properties":{"date":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"stage":{"type":"string"},"retryCount":{"type":"integer"},"stackTrace":{"type":"string"},"message":{"type":"string"}}},"accounts":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"accountId":{"type":"string"},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"disabled":{"type":"boolean"},"locked":{"type":"boolean"},"privileged":{"type":"boolean"},"manuallyCorrelated":{"type":"boolean"},"passwordLastSet":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"entitlementAttributes":{"type":"object","nullable":true,"description":"a map or dictionary of key/value pairs"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"}}}]}},"accountCount":{"type":"integer"},"apps":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"account":{"type":"object","properties":{"id":{"type":"string"},"accountId":{"type":"string"}}}}}]}},"appCount":{"type":"integer"},"access":{"type":"array","items":{"discriminator":{"propertyName":"type","mapping":{"ACCESS_PROFILE":{"description":"This is a summary representation of an access profile. ","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"revocable":{"type":"boolean"}}}]},"ENTITLEMENT":{"description":"EntitlementReference","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"attribute":{"type":"string"},"value":{"type":"string"},"standalone":{"type":"boolean"}}}]},"ROLE":{"description":"Role","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"disabled":{"type":"boolean"},"revocable":{"type":"boolean"}}}]}}},"oneOf":[{"description":"This is a summary representation of an access profile. ","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"revocable":{"type":"boolean"}}}]},{"description":"EntitlementReference","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"attribute":{"type":"string"},"value":{"type":"string"},"standalone":{"type":"boolean"}}}]},{"description":"Role","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"disabled":{"type":"boolean"},"revocable":{"type":"boolean"}}}]}]}},"accessCount":{"type":"integer"},"accessProfileCount":{"type":"integer"},"entitlementCount":{"type":"integer"},"roleCount":{"type":"integer"},"owns":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"entitlements":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"accessProfiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"roles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"apps":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"governanceGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"fallbackApprover":{"type":"boolean"}}},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]},{"description":"Role","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"description":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"enabled":{"type":"boolean"},"requestable":{"type":"boolean"},"requestCommentsRequired":{"type":"boolean"},"owner":{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}}]},{"type":"object","properties":{"email":{"type":"string"}}}]}}}]},{"type":"object","properties":{"accessProfiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"accessProfileCount":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]}]},"examples":{"accessProfile":{"summary":"AccessProfile","value":{"id":"2c9180825a6c1adc015a71c9023f0818","name":"Cloud Eng","_type":"accessprofile","description":"Cloud Eng","created":"2017-02-24T20:21:23.145Z","modified":"2019-05-24T20:36:04.312Z","synced":"2020-02-18T05:30:20.414Z","enabled":true,"requestable":true,"requestCommentsRequired":false,"owner":{"id":"ff8081815757d36a015757d42e56031e","name":"SailPoint Support","type":"IDENTITY","email":"cloud-support@sailpoint.com"},"source":{"id":"ff8081815757d4fb0157588f3d9d008f","name":"Employees"},"entitlements":[{"id":"2c918084575812550157589064f33b89","name":"CN=Cloud Engineering,DC=sailpoint,DC=COM","description":"mull","attribute":"memberOf","value":"CN=Cloud Engineering,DC=sailpoint,DC=COM"}],"entitlementCount":1,"tags":["TAG_1","TAG_2"]}},"entitlement":{"summary":"Entitlement","value":{"id":"2c9180946ed0c43d016eec1a80892fbd","name":"entitlement.aa415ae7","_type":"entitlement","description":"null","attribute":"groups","value":"entitlement.aa415ae7","modified":"2019-12-09T19:19:50.154Z","synced":"2020-02-19T04:30:32.906Z","displayName":"entitlement.aa415ae7","source":{"id":"2c91808b6e9e6fb8016eec1a2b6f7b5f","name":"ODS-HR-Employees"},"privileged":false,"identityCount":68,"tags":["TAG_1","TAG_2"]}},"event":{"summary":"Event","value":{"id":"e092842f-c904-4b59-aac8-2544abeeef4b","name":"Update Task Schedule Passed","_type":"event","created":"2020-02-17T16:23:18.327Z","synced":"2020-02-17T16:23:18.388Z","action":"TASK_SCHEDULE_UPDATE_PASSED","type":"SYSTEM_CONFIG","actor":{"name":"MantisTaskScheduler"},"target":{"name":"Perform provisioning activity search delete synchronization"},"stack":"tpe","trackingNumber":"c6b98bc39ece48b080826d16c76b166c","ipAddress":"207.189.160.158","details":"null","attributes":{"sourceName":"SailPoint"},"objects":["TASK","SCHEDULE"],"operation":"UPDATE","status":"PASSED","technicalName":"TASK_SCHEDULE_UPDATE_PASSED"}},"identity":{"summary":"Identity","value":{"id":"2c9180865c45e7e3015c46c434a80622","name":"ad.admin","_type":"identity","firstName":"AD","lastName":"Admin","displayName":"AD Admin","email":"SLPT.CLOUD.SAILPOINT.TEST+AD-ADMIN@GMAIL.COM","created":"2018-08-22T19:54:54.302Z","modified":"2018-08-22T19:54:54.302Z","synced":"2018-08-22T19:54:54.302Z","phone":"512-942-7578","inactive":false,"protected":false,"status":"UNREGISTERED","employeeNumber":"O349804","manager":null,"isManager":false,"identityProfile":{"id":"2c918085605c8d0601606f357cb231e6","name":"E2E AD"},"source":{"id":"2c9180855c45b230015c46c19b9c0202","name":"EndToEnd-ADSource"},"attributes":{"uid":"ad.admin","firstname":"AD","cloudAuthoritativeSource":"2c9180855c45b230015c46c19b9c0202","cloudStatus":"UNREGISTERED","iplanet-am-user-alias-list":null,"displayName":"AD Admin","internalCloudStatus":"UNREGISTERED","workPhone":"512-942-7578","email":"SLPT.CLOUD.SAILPOINT.TEST+AD-ADMIN@GMAIL.COM","lastname":"Admin"},"processingState":null,"processingDetails":null,"accounts":[{"id":"2c9180865c45e7e3015c46c434a80623","name":"ad.admin","accountId":"CN=AD Admin,OU=slpt-automation,DC=TestAutomationAD,DC=local","source":{"id":"2c9180855c45b230015c46c19b9c0202","name":"EndToEnd-ADSource","type":"Active Directory - Direct"},"disabled":false,"locked":false,"privileged":false,"manuallyCorrelated":false,"passwordLastSet":"2018-08-22T19:54:54.302Z","entitlementAttributes":{"memberOf":["CN=Group Policy Creator Owners,CN=Users,DC=TestAutomationAD,DC=local","CN=Domain Guests,CN=Users,DC=TestAutomationAD,DC=local","CN=Domain Admins,CN=Users,DC=TestAutomationAD,DC=local","CN=Enterprise Admins,CN=Users,DC=TestAutomationAD,DC=local","CN=Schema Admins,CN=Users,DC=TestAutomationAD,DC=local","CN=Guests,CN=Builtin,DC=TestAutomationAD,DC=local","CN=Administrators,CN=Builtin,DC=TestAutomationAD,DC=local"]},"created":"2018-08-22T19:54:54.302Z"},{"id":"2c918083606d670c01606f35a30a0349","name":"ad.admin","accountId":"ad.admin","source":{"id":"ff8081815c46b85b015c46b90c7c02a6","name":"IdentityNow","type":"IdentityNowConnector"},"disabled":false,"locked":false,"privileged":false,"manuallyCorrelated":false,"passwordLastSet":null,"entitlementAttributes":null,"created":"2018-08-22T19:54:54.302Z"}],"accountCount":2,"apps":[{"id":"22751","name":"ADP Workforce Now","source":{"id":"2c9180855c45b230015c46e2f6a8026a","name":"Corporate Active Directory"},"account":{"id":"2c9180865c45efa4015c470be0de1606","accountId":"CN=Bob Wilson,OU=Austin,OU=Americas,OU=Demo,DC=seri,DC=acme,DC=com"}}],"appCount":1,"access":[{"id":"2c918083634bc6cb01639808d40270ba","name":"test [AccessProfile-1527264105448]","displayName":"test","type":"ACCESS_PROFILE","description":"test","source":{"id":"2c9180855c45b230015c46c19b9c0202","name":"EndToEnd-ADSource"},"owner":{"id":"2c9180865c45e7e3015c46c434a80622","name":"ad.admin","displayName":"AD Admin"}},{"id":"2c9180865c45e7e3015c46c457c50755","name":"Administrators","displayName":"Administrators","type":"ENTITLEMENT","description":null,"source":{"id":"2c9180855c45b230015c46c19b9c0202","name":"EndToEnd-ADSource"},"privileged":false,"attribute":"memberOf","value":"CN=Administrators,CN=Builtin,DC=TestAutomationAD,DC=local","standalone":false},{"id":"2c9180865decdaa5015e06598b293108","name":"test [cloudRole-1503345085223]","displayName":"test","type":"ROLE","description":"test","owner":{"id":"2c9180865c45e7e3015c46c5030707a0","name":"will.albin","displayName":"Albin Will"},"disabled":false}],"accessCount":3,"accessProfileCount":1,"entitlementCount":1,"roleCount":1,"tags":["TAG_1","TAG_2"]}},"role":{"summary":"Role","value":{"id":"2c91808c6faadea6016fb4f2bc69077b","name":"IT Role","_type":"role","description":"IT role","created":"2020-01-17T19:20:15.040Z","modified":null,"synced":"2020-02-18T05:30:20.145Z","enabled":true,"requestable":false,"requestCommentsRequired":false,"owner":{"id":"2c9180a46faadee4016fb4e018c20639","name":"Cloud Support","type":"IDENTITY","email":"thomas.edison@acme-solar.com"},"accessProfiles":[{"id":"2c91809c6faade77016fb4f0b63407ae","name":"Admin Access"}],"accessProfileCount":1,"tags":["TAG_1","TAG_2"]}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}}},"method":"get","path":"/search/{index}/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get a Document by ID","description":{"content":"Fetches a single document from the specified index using the specified document ID.","type":"text/plain"},"url":{"path":["search",":index",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The index from which to fetch the specified document.\n\nThe currently supported index names are: *accessprofiles*, *accountactivities*, *accounts*, *aggregations*, *entitlements*, *events*, *identities*, and *roles*.\n","type":"text/plain"},"type":"any","value":"","key":"index"},{"disabled":false,"description":{"content":"(Required) ID of the requested document.","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a Document by ID + + + +Fetches a single document from the specified index using the specified document ID. + +
      Path Parameters
      + +The requested document. + +
      Schema
        _type string
        + +**Possible values:** [`accessprofile`, `accountactivity`, `account`, `aggregation`, `entitlement`, `event`, `identity`, `role`] + +
        + +Enum representing the currently supported document types. + +Additional values may be added in the future without notice. + +
        owner object
        source object
        entitlements object[]
        requester object
        recipient object
        approvals object[]
        comments object[]
        owner object
        originalRequests object[]
        attributeRequests object[]
        source object
        expansionItems object[]
        attributeRequests object[]
        source object
        accountRequests object[]
        attributeRequests object[]
        provisioningTarget object
        result object
        source object
        source object
        identity object
        access object[]
        source object
        source object
        actor object
        target object
        manager object
        identityProfile object
        source object
        processingDetails object
        accounts object[]
        source object
        apps object[]
        source object
        account object
        owns object
        sources object[]
        entitlements object[]
        accessProfiles object[]
        roles object[]
        apps object[]
        governanceGroups object[]
        owner object
        accessProfiles object[]
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/search.api.mdx b/docs/sailpoint-api-v3/search.api.mdx new file mode 100644 index 000000000..00105812f --- /dev/null +++ b/docs/sailpoint-api-v3/search.api.mdx @@ -0,0 +1,155 @@ +--- +id: search +sidebar_label: Get a list of Documents +hide_title: true +hide_table_of_contents: true +api: {"tags":["Search"],"description":"Performs a search with provided query and returns matching result collection.","externalDocs":{"description":"Learn more about search.","url":"https://documentation.sailpoint.com/saas/help/search/index.html"},"operationId":"search","parameters":[{"in":"query","name":"offset","description":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":0,"schema":{"type":"integer","format":"int32","minimum":0,"default":0}},{"in":"query","name":"limit","description":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":250,"schema":{"type":"integer","format":"int32","minimum":0,"maximum":250,"default":250}},{"in":"query","name":"count","description":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","required":false,"example":true,"schema":{"type":"boolean","default":false}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"indices":{"description":"The names of the Elasticsearch indices in which to search.","externalDocs":{"description":"Learn more about search indices here.","url":"https://documentation.sailpoint.com/saas/help/search/searchable-fields.html"},"type":"array","items":{"description":"Enum representing the currently supported indices.\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofiles","accountactivities","entitlements","events","identities","roles"],"example":"identities"},"example":["identities"]},"queryType":{"description":"The type of query to use. By default, the `SAILPOINT` query type is used, which requires the `query` object to be defined in the request body.\nTo use the `queryDsl` or `typeAheadQuery` objects in the request, you must set the type to `DSL` or `TYPEAHEAD` accordingly.\nAdditional values may be added in the future without notice.","type":"string","enum":["DSL","SAILPOINT","TYPEAHEAD"],"default":"SAILPOINT","example":"SAILPOINT"},"queryVersion":{"allOf":[{"description":"The current Elasticserver version.","type":"string","default":"5.2"},{"type":"string","description":"The version of the query object.\nThis version number will map to the version of Elasticsearch for the query strings and objects being used."}]},"query":{"type":"object","description":"Query parameters used to construct an Elasticsearch query object.","properties":{"query":{"description":"The query using the Elasticsearch [Query String Query](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string) syntax from the Query DSL extended by SailPoint to support Nested queries.","type":"string","example":"name:a*"},"fields":{"description":"The fields to which the specified query will be applied. The available fields are dependent on the indice(s) being searched on. Please refer to the response schema of this API for a list of available fields.","type":"array","items":{"type":"string"},"example":["name"]},"timeZone":{"description":"The time zone to be applied to any range query related to dates.","type":"string","example":"America/Chicago"},"innerHit":{"description":"Inner Hit query object that will cause the specified nested type to be returned as the result matching the supplied query.","type":"object","required":["query","type"],"properties":{"query":{"description":"The search query using the Elasticsearch [Query String Query](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string) syntax from the Query DSL extended by SailPoint to support Nested queries.","type":"string","example":"source.name:\\\"Active Directory\\\""},"type":{"description":"The nested type to use in the inner hits query.","type":"string","example":"access"}}}}},"queryDsl":{"description":"The search query using the Elasticsearch [Query DSL](https://www.elastic.co/guide/en/elasticsearch/reference/7.10/query-dsl.html) syntax.","type":"object","example":{"match":{"name":"john.doe"}}},"typeAheadQuery":{"type":"object","description":"Query parameters used to construct an Elasticsearch type ahead query object.","required":["query","field"],"properties":{"query":{"description":"The type ahead query string used to construct a phrase prefix match query.","type":"string","example":"Work"},"field":{"description":"The field on which to perform the type ahead search.","type":"string","example":"source.name"},"nestedType":{"description":"The nested type.","type":"string","example":"access"},"maxExpansions":{"description":"The number of suffixes the last term will be expanded into.\nInfluences the performance of the query and the number results returned.\nValid values: 1 to 1000.","type":"integer","format":"int32","minimum":1,"maximum":1000,"default":10,"example":10}}},"includeNested":{"description":"Indicates if nested objects from returned search results should be included.","type":"boolean","default":true,"example":true},"queryResultFilter":{"type":"object","description":"Allows the query results to be filtered by specifying a list of fields to include and/or exclude from the result documents.","properties":{"includes":{"description":"The list of field names to include in the result documents.","type":"array","items":{"type":"string"},"example":["name","displayName"]},"excludes":{"description":"The list of field names to exclude from the result documents.","type":"array","items":{"type":"string"},"example":["stacktrace"]}}},"aggregationType":{"description":"Enum representing the currently available query languages for aggregations, which are used to perform calculations or groupings on search results.\n\nAdditional values may be added in the future without notice.\n","type":"string","enum":["DSL","SAILPOINT"],"default":"DSL","example":"DSL"},"aggregationsVersion":{"allOf":[{"description":"The current Elasticserver version.","type":"string","default":"5.2"},{"type":"string","description":"The version of the language being used for aggregation queries.\nThis version number will map to the version of Elasticsearch for the aggregation query object."}]},"aggregationsDsl":{"description":"The aggregation search query using Elasticsearch [Aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations.html) syntax.","type":"object"},"aggregations":{"description":"The aggregation’s specifications, such as the groupings and calculations to be performed.\n","allOf":[{"type":"object","properties":{"nested":{"type":"object","description":"The nested aggregation object.","required":["name","type"],"properties":{"name":{"description":"The name of the nested aggregate to be included in the result.","type":"string","example":"id"},"type":{"description":"The type of the nested object.","type":"string","example":"access"}}},"metric":{"type":"object","description":"The calculation done on the results of the query","required":["name","field"],"properties":{"name":{"description":"The name of the metric aggregate to be included in the result.\nIf the metric aggregation is omitted, the resulting aggregation will be a count of the documents in the search results.","type":"string","example":"Access Name Count"},"type":{"description":"Enum representing the currently supported metric aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["COUNT","UNIQUE_COUNT","AVG","SUM","MEDIAN","MIN","MAX"],"default":"UNIQUE_COUNT"},"field":{"description":"The field the calculation is performed on.\n\nPrefix the field name with '@' to reference a nested object.\n","type":"string","example":"@access.name"}}},"filter":{"type":"object","description":"An additional filter to constrain the results of the search query.","required":["name","field","value"],"properties":{"name":{"description":"The name of the filter aggregate to be included in the result.","type":"string","example":"Entitlements"},"type":{"description":"Enum representing the currently supported filter aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["TERM"],"default":"TERM"},"field":{"description":"The search field to apply the filter to.\n\nPrefix the field name with '@' to reference a nested object.\n","type":"string","example":"access.type"},"value":{"description":"The value to filter on.","type":"string","example":"ENTITLEMENT"}}},"bucket":{"type":"object","description":"The bucket to group the results of the aggregation query by.","required":["name","field"],"properties":{"name":{"description":"The name of the bucket aggregate to be included in the result.","type":"string","example":"Identity Locations"},"type":{"description":"Enum representing the currently supported bucket aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["TERMS"],"default":"TERMS","example":"TERMS"},"field":{"description":"The field to bucket on.\nPrefix the field name with '@' to reference a nested object.","type":"string","example":"attributes.city"},"size":{"description":"Maximum number of buckets to include.","type":"integer","format":"int32","example":100},"minDocCount":{"description":"Minimum number of documents a bucket should have.","type":"integer","format":"int32","example":2}}}}},{"type":"object","properties":{"subAggregation":{"description":"Aggregation to be performed on the result of the parent bucket aggregation.","allOf":[{"type":"object","properties":{"nested":{"type":"object","description":"The nested aggregation object.","required":["name","type"],"properties":{"name":{"description":"The name of the nested aggregate to be included in the result.","type":"string","example":"id"},"type":{"description":"The type of the nested object.","type":"string","example":"access"}}},"metric":{"type":"object","description":"The calculation done on the results of the query","required":["name","field"],"properties":{"name":{"description":"The name of the metric aggregate to be included in the result.\nIf the metric aggregation is omitted, the resulting aggregation will be a count of the documents in the search results.","type":"string","example":"Access Name Count"},"type":{"description":"Enum representing the currently supported metric aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["COUNT","UNIQUE_COUNT","AVG","SUM","MEDIAN","MIN","MAX"],"default":"UNIQUE_COUNT"},"field":{"description":"The field the calculation is performed on.\n\nPrefix the field name with '@' to reference a nested object.\n","type":"string","example":"@access.name"}}},"filter":{"type":"object","description":"An additional filter to constrain the results of the search query.","required":["name","field","value"],"properties":{"name":{"description":"The name of the filter aggregate to be included in the result.","type":"string","example":"Entitlements"},"type":{"description":"Enum representing the currently supported filter aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["TERM"],"default":"TERM"},"field":{"description":"The search field to apply the filter to.\n\nPrefix the field name with '@' to reference a nested object.\n","type":"string","example":"access.type"},"value":{"description":"The value to filter on.","type":"string","example":"ENTITLEMENT"}}},"bucket":{"type":"object","description":"The bucket to group the results of the aggregation query by.","required":["name","field"],"properties":{"name":{"description":"The name of the bucket aggregate to be included in the result.","type":"string","example":"Identity Locations"},"type":{"description":"Enum representing the currently supported bucket aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["TERMS"],"default":"TERMS","example":"TERMS"},"field":{"description":"The field to bucket on.\nPrefix the field name with '@' to reference a nested object.","type":"string","example":"attributes.city"},"size":{"description":"Maximum number of buckets to include.","type":"integer","format":"int32","example":100},"minDocCount":{"description":"Minimum number of documents a bucket should have.","type":"integer","format":"int32","example":2}}}}},{"type":"object","properties":{"subAggregation":{"type":"object","properties":{"nested":{"type":"object","description":"The nested aggregation object.","required":["name","type"],"properties":{"name":{"description":"The name of the nested aggregate to be included in the result.","type":"string","example":"id"},"type":{"description":"The type of the nested object.","type":"string","example":"access"}}},"metric":{"type":"object","description":"The calculation done on the results of the query","required":["name","field"],"properties":{"name":{"description":"The name of the metric aggregate to be included in the result.\nIf the metric aggregation is omitted, the resulting aggregation will be a count of the documents in the search results.","type":"string","example":"Access Name Count"},"type":{"description":"Enum representing the currently supported metric aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["COUNT","UNIQUE_COUNT","AVG","SUM","MEDIAN","MIN","MAX"],"default":"UNIQUE_COUNT"},"field":{"description":"The field the calculation is performed on.\n\nPrefix the field name with '@' to reference a nested object.\n","type":"string","example":"@access.name"}}},"filter":{"type":"object","description":"An additional filter to constrain the results of the search query.","required":["name","field","value"],"properties":{"name":{"description":"The name of the filter aggregate to be included in the result.","type":"string","example":"Entitlements"},"type":{"description":"Enum representing the currently supported filter aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["TERM"],"default":"TERM"},"field":{"description":"The search field to apply the filter to.\n\nPrefix the field name with '@' to reference a nested object.\n","type":"string","example":"access.type"},"value":{"description":"The value to filter on.","type":"string","example":"ENTITLEMENT"}}},"bucket":{"type":"object","description":"The bucket to group the results of the aggregation query by.","required":["name","field"],"properties":{"name":{"description":"The name of the bucket aggregate to be included in the result.","type":"string","example":"Identity Locations"},"type":{"description":"Enum representing the currently supported bucket aggregation types.\nAdditional values may be added in the future without notice.","type":"string","enum":["TERMS"],"default":"TERMS","example":"TERMS"},"field":{"description":"The field to bucket on.\nPrefix the field name with '@' to reference a nested object.","type":"string","example":"attributes.city"},"size":{"description":"Maximum number of buckets to include.","type":"integer","format":"int32","example":100},"minDocCount":{"description":"Minimum number of documents a bucket should have.","type":"integer","format":"int32","example":2}}}},"description":"Aggregation to be performed on the result of the parent bucket aggregation."}}}]}}}]},"sort":{"description":"The fields to be used to sort the search results. Use + or - to specify the sort direction.","type":"array","items":{"type":"string","example":"+id"}},"searchAfter":{"description":"Used to begin the search window at the values specified.\nThis parameter consists of the last values of the sorted fields in the current record set.\nThis is used to expand the Elasticsearch limit of 10K records by shifting the 10K window to begin at this value.\nFor example, when searching for identities, if the last idenitity ID in the search result is 2c91808375d8e80a0175e1f88a575221, then using that ID in this property will start a new search after this identity.","type":"array","items":{"type":"string","example":"2c91808375d8e80a0175e1f88a575221"}},"filters":{"description":"The filters to be applied for each filtered field name.","type":"object","additionalProperties":{"type":"object","properties":{"type":{"description":"Enum representing the currently supported filter types.\nAdditional values may be added in the future without notice.","type":"string","enum":["EXISTS","RANGE","TERMS"],"example":"RANGE"},"range":{"type":"object","description":"The range of values to be filtered.","properties":{"lower":{"description":"The lower bound of the range.","type":"object","required":["value"],"properties":{"value":{"description":"The value of the range's endpoint.","type":"string"},"inclusive":{"description":"Indicates if the endpoint is included in the range.","type":"boolean","default":false}}},"upper":{"description":"The upper bound of the range.","type":"object","required":["value"],"properties":{"value":{"description":"The value of the range's endpoint.","type":"string"},"inclusive":{"description":"Indicates if the endpoint is included in the range.","type":"boolean","default":false}}}}},"terms":{"description":"The terms to be filtered.","type":"array","items":{"type":"string"}},"exclude":{"description":"Indicates if the filter excludes results.","type":"boolean","default":false}}}}},"required":["indices"]},"examples":{"query-fields":{"summary":"Query with Fields","value":{"indices":["identities"],"query":{"query":"\"John Doe\"","fields":["name"]}}},"query-timeZone":{"summary":"Query with TimeZone","value":{"indices":["identities"],"query":{"query":"created: [2022-05-19T19:26:03.351Z TO now]","timeZone":"America/Los_Angeles"}}},"query-innerHit":{"summary":"Query with InnerHit","value":{"indices":["identities"],"query":{"query":"\"John Doe\"","innerHit":{"type":"access","query":"source.name:\\\"Active Directory\\\""}}}},"typeAheadQuery":{"summary":"TypeAheadQuery","value":{"indices":["identities"],"queryType":"TYPEAHEAD","typeAheadQuery":{"field":"name","query":"Jo","maxExpansions":50}}},"typeAheadQuery-nestedType":{"summary":"TypeAheadQuery with NestedType","value":{"indices":["identities"],"queryType":"TYPEAHEAD","typeAheadQuery":{"field":"source.name","nestedType":"access","query":"Work","maxExpansions":50}}},"filter-exists":{"summary":"Filter with Exists","value":{"indices":["identities"],"query":{"query":"attributes.city:London"},"filters":{"attributes.cloudAuthoritativeSource":{"type":"EXISTS","exclude":true}}}},"filter-range":{"summary":"Filter with Range","value":{"indices":["identities"],"query":{"query":"attributes.city:London","timeZone":"Europe/London"},"filters":{"accessCount":{"type":"RANGE","range":{"lower":{"value":"3"}}},"created":{"type":"RANGE","range":{"lower":{"value":"2019-12-01","inclusive":true},"upper":{"value":"2020-01-01"}}}}}},"filter-terms":{"summary":"Filter with Terms","value":{"indices":["identities"],"query":{"query":"attributes.city:London"},"filters":{"source.name":{"type":"TERMS","terms":["HR Employees","Corporate Active Directory"],"exclude":true},"protected":{"type":"TERMS","terms":["true"]}}}}}}},"required":true},"responses":{"200":{"description":"List of matching documents.","content":{"application/json":{"schema":{"type":"array","items":{"discriminator":{"propertyName":"_type","mapping":{"accessprofile":{"description":"This is more of a complete representation of an access profile. ","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"description":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"enabled":{"type":"boolean"},"requestable":{"type":"boolean"},"requestCommentsRequired":{"type":"boolean"},"owner":{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}}]},{"type":"object","properties":{"email":{"type":"string"}}}]}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"entitlements":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"description":{"type":"string"},"attribute":{"type":"string"},"value":{"type":"string"}}}]}},"entitlementCount":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]},"accountactivity":{"description":"AccountActivity","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"type":"object","properties":{"action":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"stage":{"type":"string"},"origin":{"type":"string"},"status":{"type":"string"},"requester":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"recipient":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"trackingNumber":{"type":"string"},"errors":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}},"approvals":{"type":"array","items":{"type":"object","properties":{"comments":{"type":"array","items":{"type":"object","properties":{"comment":{"type":"string"},"commenter":{"type":"string"},"date":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"}}}},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"result":{"type":"string"},"type":{"type":"string"}}}},"originalRequests":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"attributeRequests":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}}}},"op":{"type":"string"},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]}}}},"expansionItems":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"cause":{"type":"string"},"name":{"type":"string"},"attributeRequests":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}}}},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]}}}},"accountRequests":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"attributeRequests":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}}}},"op":{"type":"string"},"provisioningTarget":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"result":{"type":"object","properties":{"errors":{"type":"array","items":{"type":"string"}},"status":{"type":"string"},"ticketId":{"type":"string"}}},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]}}}},"sources":{"type":"array","items":{"type":"string"}}}}]},"account":{"description":"Account","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"accountId":{"type":"string"},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"disabled":{"type":"boolean"},"locked":{"type":"boolean"},"privileged":{"type":"boolean"},"manuallyCorrelated":{"type":"boolean"},"passwordLastSet":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"entitlementAttributes":{"type":"object","nullable":true,"description":"a map or dictionary of key/value pairs"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"}}}]},{"type":"object","properties":{"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"attributes":{"type":"object","description":"a map or dictionary of key/value pairs"},"identity":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"access":{"type":"array","items":{"description":"EntitlementReference","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"attribute":{"type":"string"},"value":{"type":"string"},"standalone":{"type":"boolean"}}}]}},"entitlementCount":{"type":"integer"},"uncorrelated":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]},"aggregation":{"description":"Aggregation","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"type":"object","properties":{"status":{"type":"string"},"duration":{"type":"integer"},"avgDuration":{"type":"integer"},"changedAccounts":{"type":"integer"},"nextScheduled":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"startTime":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"sourceOwner":{"type":"string"}}}]},"entitlement":{"description":"Entitlement","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"description":{"type":"string"},"attribute":{"type":"string"},"value":{"type":"string"}}}]},{"type":"object","properties":{"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"displayName":{"type":"string"},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"identityCount":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]},"event":{"description":"Event","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"type":"object","properties":{"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"action":{"type":"string"},"type":{"type":"string"},"actor":{"type":"object","properties":{"name":{"type":"string","example":"John Doe"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}},"target":{"type":"object","properties":{"name":{"type":"string","example":"John Doe"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}},"stack":{"type":"string"},"trackingNumber":{"type":"string"},"ipAddress":{"type":"string"},"details":{"type":"string"},"attributes":{"type":"object"},"objects":{"type":"array","items":{"type":"string"}},"operation":{"type":"string"},"status":{"type":"string"},"technicalName":{"type":"string"}}}]},"identity":{"description":"Identity","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"displayName":{"type":"string"},"email":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"phone":{"type":"string"},"inactive":{"type":"boolean"},"protected":{"type":"boolean"},"status":{"type":"string"},"employeeNumber":{"type":"string"},"manager":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}],"nullable":true},"isManager":{"type":"boolean"},"identityProfile":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"attributes":{"type":"object","description":"a map or dictionary of key/value pairs"},"processingState":{"type":"string","nullable":true},"processingDetails":{"nullable":true,"type":"object","properties":{"date":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"stage":{"type":"string"},"retryCount":{"type":"integer"},"stackTrace":{"type":"string"},"message":{"type":"string"}}},"accounts":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"accountId":{"type":"string"},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"disabled":{"type":"boolean"},"locked":{"type":"boolean"},"privileged":{"type":"boolean"},"manuallyCorrelated":{"type":"boolean"},"passwordLastSet":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"entitlementAttributes":{"type":"object","nullable":true,"description":"a map or dictionary of key/value pairs"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"}}}]}},"accountCount":{"type":"integer"},"apps":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"account":{"type":"object","properties":{"id":{"type":"string"},"accountId":{"type":"string"}}}}}]}},"appCount":{"type":"integer"},"access":{"type":"array","items":{"discriminator":{"propertyName":"type","mapping":{"ACCESS_PROFILE":{"description":"This is a summary representation of an access profile. ","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"revocable":{"type":"boolean"}}}]},"ENTITLEMENT":{"description":"EntitlementReference","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"attribute":{"type":"string"},"value":{"type":"string"},"standalone":{"type":"boolean"}}}]},"ROLE":{"description":"Role","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"disabled":{"type":"boolean"},"revocable":{"type":"boolean"}}}]}}},"oneOf":[{"description":"This is a summary representation of an access profile. ","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"revocable":{"type":"boolean"}}}]},{"description":"EntitlementReference","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"attribute":{"type":"string"},"value":{"type":"string"},"standalone":{"type":"boolean"}}}]},{"description":"Role","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"disabled":{"type":"boolean"},"revocable":{"type":"boolean"}}}]}]}},"accessCount":{"type":"integer"},"accessProfileCount":{"type":"integer"},"entitlementCount":{"type":"integer"},"roleCount":{"type":"integer"},"owns":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"entitlements":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"accessProfiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"roles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"apps":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"governanceGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"fallbackApprover":{"type":"boolean"}}},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]},"role":{"description":"Role","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"description":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"enabled":{"type":"boolean"},"requestable":{"type":"boolean"},"requestCommentsRequired":{"type":"boolean"},"owner":{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}}]},{"type":"object","properties":{"email":{"type":"string"}}}]}}}]},{"type":"object","properties":{"accessProfiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"accessProfileCount":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]}}},"oneOf":[{"description":"This is more of a complete representation of an access profile. ","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"description":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"enabled":{"type":"boolean"},"requestable":{"type":"boolean"},"requestCommentsRequired":{"type":"boolean"},"owner":{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}}]},{"type":"object","properties":{"email":{"type":"string"}}}]}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"entitlements":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"description":{"type":"string"},"attribute":{"type":"string"},"value":{"type":"string"}}}]}},"entitlementCount":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]},{"description":"AccountActivity","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"type":"object","properties":{"action":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"stage":{"type":"string"},"origin":{"type":"string"},"status":{"type":"string"},"requester":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"recipient":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"trackingNumber":{"type":"string"},"errors":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}},"approvals":{"type":"array","items":{"type":"object","properties":{"comments":{"type":"array","items":{"type":"object","properties":{"comment":{"type":"string"},"commenter":{"type":"string"},"date":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"}}}},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"result":{"type":"string"},"type":{"type":"string"}}}},"originalRequests":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"attributeRequests":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}}}},"op":{"type":"string"},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]}}}},"expansionItems":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"cause":{"type":"string"},"name":{"type":"string"},"attributeRequests":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}}}},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]}}}},"accountRequests":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string"},"attributeRequests":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}}}},"op":{"type":"string"},"provisioningTarget":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"result":{"type":"object","properties":{"errors":{"type":"array","items":{"type":"string"}},"status":{"type":"string"},"ticketId":{"type":"string"}}},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]}}}},"sources":{"type":"array","items":{"type":"string"}}}}]},{"description":"Account","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"accountId":{"type":"string"},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"disabled":{"type":"boolean"},"locked":{"type":"boolean"},"privileged":{"type":"boolean"},"manuallyCorrelated":{"type":"boolean"},"passwordLastSet":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"entitlementAttributes":{"type":"object","nullable":true,"description":"a map or dictionary of key/value pairs"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"}}}]},{"type":"object","properties":{"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"attributes":{"type":"object","description":"a map or dictionary of key/value pairs"},"identity":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"access":{"type":"array","items":{"description":"EntitlementReference","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"attribute":{"type":"string"},"value":{"type":"string"},"standalone":{"type":"boolean"}}}]}},"entitlementCount":{"type":"integer"},"uncorrelated":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]},{"description":"Aggregation","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"type":"object","properties":{"status":{"type":"string"},"duration":{"type":"integer"},"avgDuration":{"type":"integer"},"changedAccounts":{"type":"integer"},"nextScheduled":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"startTime":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"sourceOwner":{"type":"string"}}}]},{"description":"Entitlement","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"description":{"type":"string"},"attribute":{"type":"string"},"value":{"type":"string"}}}]},{"type":"object","properties":{"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"displayName":{"type":"string"},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"identityCount":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]},{"description":"Event","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"type":"object","properties":{"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"action":{"type":"string"},"type":{"type":"string"},"actor":{"type":"object","properties":{"name":{"type":"string","example":"John Doe"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}},"target":{"type":"object","properties":{"name":{"type":"string","example":"John Doe"},"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}},"stack":{"type":"string"},"trackingNumber":{"type":"string"},"ipAddress":{"type":"string"},"details":{"type":"string"},"attributes":{"type":"object"},"objects":{"type":"array","items":{"type":"string"}},"operation":{"type":"string"},"status":{"type":"string"},"technicalName":{"type":"string"}}}]},{"description":"Identity","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"displayName":{"type":"string"},"email":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"phone":{"type":"string"},"inactive":{"type":"boolean"},"protected":{"type":"boolean"},"status":{"type":"string"},"employeeNumber":{"type":"string"},"manager":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}],"nullable":true},"isManager":{"type":"boolean"},"identityProfile":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"attributes":{"type":"object","description":"a map or dictionary of key/value pairs"},"processingState":{"type":"string","nullable":true},"processingDetails":{"nullable":true,"type":"object","properties":{"date":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"stage":{"type":"string"},"retryCount":{"type":"integer"},"stackTrace":{"type":"string"},"message":{"type":"string"}}},"accounts":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"accountId":{"type":"string"},"source":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string"}}}]},"disabled":{"type":"boolean"},"locked":{"type":"boolean"},"privileged":{"type":"boolean"},"manuallyCorrelated":{"type":"boolean"},"passwordLastSet":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"entitlementAttributes":{"type":"object","nullable":true,"description":"a map or dictionary of key/value pairs"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"}}}]}},"accountCount":{"type":"integer"},"apps":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"account":{"type":"object","properties":{"id":{"type":"string"},"accountId":{"type":"string"}}}}}]}},"appCount":{"type":"integer"},"access":{"type":"array","items":{"discriminator":{"propertyName":"type","mapping":{"ACCESS_PROFILE":{"description":"This is a summary representation of an access profile. ","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"revocable":{"type":"boolean"}}}]},"ENTITLEMENT":{"description":"EntitlementReference","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"attribute":{"type":"string"},"value":{"type":"string"},"standalone":{"type":"boolean"}}}]},"ROLE":{"description":"Role","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"disabled":{"type":"boolean"},"revocable":{"type":"boolean"}}}]}}},"oneOf":[{"description":"This is a summary representation of an access profile. ","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"revocable":{"type":"boolean"}}}]},{"description":"EntitlementReference","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"source":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},"privileged":{"type":"boolean"},"attribute":{"type":"string"},"value":{"type":"string"},"standalone":{"type":"boolean"}}}]},{"description":"Role","allOf":[{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"description":{"type":"string","nullable":true}}}]},{"type":"object","properties":{"owner":{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"displayName":{"type":"string","example":"John Q. Doe"}}}]},"disabled":{"type":"boolean"},"revocable":{"type":"boolean"}}}]}]}},"accessCount":{"type":"integer"},"accessProfileCount":{"type":"integer"},"entitlementCount":{"type":"integer"},"roleCount":{"type":"integer"},"owns":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"entitlements":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"accessProfiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"roles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"apps":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"governanceGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"fallbackApprover":{"type":"boolean"}}},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]},{"description":"Role","allOf":[{"type":"object","required":["id","name","_type"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"_type":{"description":"Enum representing the currently supported document types.\n\nAdditional values may be added in the future without notice.","type":"string","enum":["accessprofile","accountactivity","account","aggregation","entitlement","event","identity","role"]}}},{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"description":{"type":"string"},"created":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"modified":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"synced":{"type":"string","nullable":true,"format":"date-time","example":"2018-06-25T20:22:28.104Z","description":"A date-time in ISO-8601 format"},"enabled":{"type":"boolean"},"requestable":{"type":"boolean"},"requestCommentsRequired":{"type":"boolean"},"owner":{"allOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}},{"type":"object","properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"}}}]},{"type":"object","properties":{"email":{"type":"string"}}}]}}}]},{"type":"object","properties":{"accessProfiles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","example":"John Doe"}}}},"accessProfileCount":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"},"example":["TAG_1","TAG_2"]}}}]}]}},"examples":{"accessProfiles":{"summary":"A collection of AccessProfiles","value":[{"id":"2c9180825a6c1adc015a71c9023f0818","name":"Cloud Eng","_type":"accessprofile","description":"Cloud Eng","created":"2017-02-24T20:21:23.145Z","modified":"2019-05-24T20:36:04.312Z","synced":"2020-02-18T05:30:20.414Z","enabled":true,"requestable":true,"requestCommentsRequired":false,"owner":{"id":"ff8081815757d36a015757d42e56031e","name":"SailPoint Support","type":"IDENTITY","email":"cloud-support@sailpoint.com"},"source":{"id":"ff8081815757d4fb0157588f3d9d008f","name":"Employees"},"entitlements":[{"id":"2c918084575812550157589064f33b89","name":"CN=Cloud Engineering,DC=sailpoint,DC=COM","description":"mull","attribute":"memberOf","value":"CN=Cloud Engineering,DC=sailpoint,DC=COM"}],"entitlementCount":1,"tags":["TAG_1","TAG_2"]}]},"entitlements":{"summary":"A collection of Entitlements","value":[{"id":"2c9180946ed0c43d016eec1a80892fbd","name":"entitlement.aa415ae7","_type":"entitlement","description":"null","attribute":"groups","value":"entitlement.aa415ae7","modified":"2019-12-09T19:19:50.154Z","synced":"2020-02-19T04:30:32.906Z","displayName":"entitlement.aa415ae7","source":{"id":"2c91808b6e9e6fb8016eec1a2b6f7b5f","name":"ODS-HR-Employees"},"privileged":false,"identityCount":68,"tags":["TAG_1","TAG_2"]}]},"events":{"summary":"A collection of Events","value":[{"id":"e092842f-c904-4b59-aac8-2544abeeef4b","name":"Update Task Schedule Passed","_type":"event","created":"2020-02-17T16:23:18.327Z","synced":"2020-02-17T16:23:18.388Z","action":"TASK_SCHEDULE_UPDATE_PASSED","type":"SYSTEM_CONFIG","actor":{"name":"MantisTaskScheduler"},"target":{"name":"Perform provisioning activity search delete synchronization"},"stack":"tpe","trackingNumber":"c6b98bc39ece48b080826d16c76b166c","ipAddress":"207.189.160.158","details":"null","attributes":{"sourceName":"SailPoint"},"objects":["TASK","SCHEDULE"],"operation":"UPDATE","status":"PASSED","technicalName":"TASK_SCHEDULE_UPDATE_PASSED"}]},"identities":{"summary":"A collection of Identities","value":[{"id":"2c9180865c45e7e3015c46c434a80622","name":"ad.admin","_type":"identity","firstName":"AD","lastName":"Admin","displayName":"AD Admin","email":"SLPT.CLOUD.SAILPOINT.TEST+AD-ADMIN@GMAIL.COM","created":"2018-08-22T19:54:54.302Z","modified":"2018-08-22T19:54:54.302Z","synced":"2018-08-22T19:54:54.302Z","phone":"512-942-7578","inactive":false,"protected":false,"status":"UNREGISTERED","employeeNumber":"O349804","manager":null,"isManager":false,"identityProfile":{"id":"2c918085605c8d0601606f357cb231e6","name":"E2E AD"},"source":{"id":"2c9180855c45b230015c46c19b9c0202","name":"EndToEnd-ADSource"},"attributes":{"uid":"ad.admin","firstname":"AD","cloudAuthoritativeSource":"2c9180855c45b230015c46c19b9c0202","cloudStatus":"UNREGISTERED","iplanet-am-user-alias-list":null,"displayName":"AD Admin","internalCloudStatus":"UNREGISTERED","workPhone":"512-942-7578","email":"SLPT.CLOUD.SAILPOINT.TEST+AD-ADMIN@GMAIL.COM","lastname":"Admin"},"processingState":null,"processingDetails":null,"accounts":[{"id":"2c9180865c45e7e3015c46c434a80623","name":"ad.admin","accountId":"CN=AD Admin,OU=slpt-automation,DC=TestAutomationAD,DC=local","source":{"id":"2c9180855c45b230015c46c19b9c0202","name":"EndToEnd-ADSource","type":"Active Directory - Direct"},"disabled":false,"locked":false,"privileged":false,"manuallyCorrelated":false,"passwordLastSet":"2018-08-22T19:54:54.302Z","entitlementAttributes":{"memberOf":["CN=Group Policy Creator Owners,CN=Users,DC=TestAutomationAD,DC=local","CN=Domain Guests,CN=Users,DC=TestAutomationAD,DC=local","CN=Domain Admins,CN=Users,DC=TestAutomationAD,DC=local","CN=Enterprise Admins,CN=Users,DC=TestAutomationAD,DC=local","CN=Schema Admins,CN=Users,DC=TestAutomationAD,DC=local","CN=Guests,CN=Builtin,DC=TestAutomationAD,DC=local","CN=Administrators,CN=Builtin,DC=TestAutomationAD,DC=local"]},"created":"2018-08-22T19:54:54.302Z"},{"id":"2c918083606d670c01606f35a30a0349","name":"ad.admin","accountId":"ad.admin","source":{"id":"ff8081815c46b85b015c46b90c7c02a6","name":"IdentityNow","type":"IdentityNowConnector"},"disabled":false,"locked":false,"privileged":false,"manuallyCorrelated":false,"passwordLastSet":null,"entitlementAttributes":null,"created":"2018-08-22T19:54:54.302Z"}],"accountCount":2,"apps":[{"id":"22751","name":"ADP Workforce Now","source":{"id":"2c9180855c45b230015c46e2f6a8026a","name":"Corporate Active Directory"},"account":{"id":"2c9180865c45efa4015c470be0de1606","accountId":"CN=Bob Wilson,OU=Austin,OU=Americas,OU=Demo,DC=seri,DC=acme,DC=com"}}],"appCount":1,"access":[{"id":"2c918083634bc6cb01639808d40270ba","name":"test [AccessProfile-1527264105448]","displayName":"test","type":"ACCESS_PROFILE","description":"test","source":{"id":"2c9180855c45b230015c46c19b9c0202","name":"EndToEnd-ADSource"},"owner":{"id":"2c9180865c45e7e3015c46c434a80622","name":"ad.admin","displayName":"AD Admin"}},{"id":"2c9180865c45e7e3015c46c457c50755","name":"Administrators","displayName":"Administrators","type":"ENTITLEMENT","description":null,"source":{"id":"2c9180855c45b230015c46c19b9c0202","name":"EndToEnd-ADSource"},"privileged":false,"attribute":"memberOf","value":"CN=Administrators,CN=Builtin,DC=TestAutomationAD,DC=local","standalone":false},{"id":"2c9180865decdaa5015e06598b293108","name":"test [cloudRole-1503345085223]","displayName":"test","type":"ROLE","description":"test","owner":{"id":"2c9180865c45e7e3015c46c5030707a0","name":"will.albin","displayName":"Albin Will"},"disabled":false}],"accessCount":3,"accessProfileCount":1,"entitlementCount":1,"roleCount":1,"tags":["TAG_1","TAG_2"]}]},"roles":{"summary":"A collection of Roles","value":[{"id":"2c91808c6faadea6016fb4f2bc69077b","name":"IT Role","_type":"role","description":"IT role","created":"2020-01-17T19:20:15.040Z","modified":null,"synced":"2020-02-18T05:30:20.145Z","enabled":true,"requestable":false,"requestCommentsRequired":false,"owner":{"id":"2c9180a46faadee4016fb4e018c20639","name":"Cloud Support","type":"IDENTITY","email":"thomas.edison@acme-solar.com"},"accessProfiles":[{"id":"2c91809c6faade77016fb4f0b63407ae","name":"Admin Access"}],"accessProfileCount":1,"tags":["TAG_1","TAG_2"]}]}}}},"headers":{"X-Total-Count":{"schema":{"type":"integer"},"description":"The total result count (returned only if the *count* parameter is specified as *true*)."}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/search","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"indices":["identities"],"queryType":"SAILPOINT","queryVersion":"5.2","query":{"query":"name:a*","fields":["name"],"timeZone":"America/Chicago","innerHit":{"query":"source.name:\\\"Active Directory\\\"","type":"access"}},"queryDsl":{"match":{"name":"john.doe"}},"typeAheadQuery":{"query":"Work","field":"source.name","nestedType":"access","maxExpansions":10},"includeNested":true,"queryResultFilter":{"includes":["name","displayName"],"excludes":["stacktrace"]},"aggregationType":"DSL","aggregationsVersion":"5.2","aggregationsDsl":{},"aggregations":{"nested":{"name":"id","type":"access"},"metric":{"name":"Access Name Count","type":"UNIQUE_COUNT","field":"@access.name"},"filter":{"name":"Entitlements","type":"TERM","field":"access.type","value":"ENTITLEMENT"},"bucket":{"name":"Identity Locations","type":"TERMS","field":"attributes.city","size":100,"minDocCount":2},"subAggregation":{"nested":{"name":"id","type":"access"},"metric":{"name":"Access Name Count","type":"UNIQUE_COUNT","field":"@access.name"},"filter":{"name":"Entitlements","type":"TERM","field":"access.type","value":"ENTITLEMENT"},"bucket":{"name":"Identity Locations","type":"TERMS","field":"attributes.city","size":100,"minDocCount":2},"subAggregation":{"nested":{"name":"id","type":"access"},"metric":{"name":"Access Name Count","type":"UNIQUE_COUNT","field":"@access.name"},"filter":{"name":"Entitlements","type":"TERM","field":"access.type","value":"ENTITLEMENT"},"bucket":{"name":"Identity Locations","type":"TERMS","field":"attributes.city","size":100,"minDocCount":2}}}},"sort":["+id"],"searchAfter":["2c91808375d8e80a0175e1f88a575221"],"filters":{}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Get a list of Documents","description":{"content":"Performs a search with provided query and returns matching result collection.","type":"text/plain"},"url":{"path":["search"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Offset into the full result set. Usually specified with *limit* to paginate through the results.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"offset","value":""},{"disabled":false,"description":{"content":"Max number of results to return.\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"limit","value":""},{"disabled":false,"description":{"content":"If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned if *limit* and *offset* were ignored.\n\nSince requesting a total count can have a performance impact, it is recommended not to send **count=true** if that value will not be used.\n\nSee [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) for more information.","type":"text/plain"},"key":"count","value":""}],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Get a list of Documents + + + +Performs a search with provided query and returns matching result collection. + +
      Query Parameters
      Request Body required
        query object
        + +Query parameters used to construct an Elasticsearch query object. + +
        innerHit object
        + +Inner Hit query object that will cause the specified nested type to be returned as the result matching the supplied query. + +
        typeAheadQuery object
        + +Query parameters used to construct an Elasticsearch type ahead query object. + +
        = 1` and `<= 1000`"} defaultValue={10}>
        queryResultFilter object
        + +Allows the query results to be filtered by specifying a list of fields to include and/or exclude from the result documents. + +
        aggregations object
        nested object
        + +The nested aggregation object. + +
        metric object
        + +The calculation done on the results of the query + +
        filter object
        + +An additional filter to constrain the results of the search query. + +
        bucket object
        + +The bucket to group the results of the aggregation query by. + +
        subAggregation object
        + +Aggregation to be performed on the result of the parent bucket aggregation. + +
        nested object
        + +The nested aggregation object. + +
        metric object
        + +The calculation done on the results of the query + +
        filter object
        + +An additional filter to constrain the results of the search query. + +
        bucket object
        + +The bucket to group the results of the aggregation query by. + +
        subAggregation object
        + +Aggregation to be performed on the result of the parent bucket aggregation. + +
        nested object
        + +The nested aggregation object. + +
        metric object
        + +The calculation done on the results of the query + +
        filter object
        + +An additional filter to constrain the results of the search query. + +
        bucket object
        + +The bucket to group the results of the aggregation query by. + +
        filters object
        + +The filters to be applied for each filtered field name. + +
      • property name* object
      + +List of matching documents. + +
      Response Headers
      • X-Total-Count integer
        + +The total result count (returned only if the *count* parameter is specified as *true*). + +
      Schema array
      • oneOf
        owner object
        source object
        entitlements object[]
        requester object
        recipient object
        approvals object[]
        comments object[]
        owner object
        originalRequests object[]
        attributeRequests object[]
        source object
        expansionItems object[]
        attributeRequests object[]
        source object
        accountRequests object[]
        attributeRequests object[]
        provisioningTarget object
        result object
        source object
        source object
        identity object
        access object[]
        source object
        source object
        actor object
        target object
        manager object
        identityProfile object
        source object
        processingDetails object
        accounts object[]
        source object
        apps object[]
        source object
        account object
        owns object
        sources object[]
        entitlements object[]
        accessProfiles object[]
        roles object[]
        apps object[]
        governanceGroups object[]
        owner object
        accessProfiles object[]
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/search.tag.mdx b/docs/sailpoint-api-v3/search.tag.mdx new file mode 100644 index 000000000..936e8ce28 --- /dev/null +++ b/docs/sailpoint-api-v3/search.tag.mdx @@ -0,0 +1,15 @@ +--- +id: search +title: Search +description: Search +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/service-desk-integration.tag.mdx b/docs/sailpoint-api-v3/service-desk-integration.tag.mdx new file mode 100644 index 000000000..e528df537 --- /dev/null +++ b/docs/sailpoint-api-v3/service-desk-integration.tag.mdx @@ -0,0 +1,19 @@ +--- +id: service-desk-integration +title: Service Desk Integration +description: Service Desk Integration +--- + + + +Operations for creating and accessing service desk integrations + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/set-lifecycle-state.api.mdx b/docs/sailpoint-api-v3/set-lifecycle-state.api.mdx new file mode 100644 index 000000000..1ed2aeb10 --- /dev/null +++ b/docs/sailpoint-api-v3/set-lifecycle-state.api.mdx @@ -0,0 +1,76 @@ +--- +id: set-lifecycle-state +sidebar_label: Set Lifecycle State +hide_title: true +hide_table_of_contents: true +api: {"operationId":"setLifecycleState","tags":["Lifecycle States"],"description":"This endpoint will set/update an identity's lifecycle state to the one provided and updates the corresponding Identity Profile.\nA token with ORG_ADMIN or API authority is required to call this API.","security":[{"bearerAuth":["idn:identity-lifecycle-state:update"]}],"parameters":[{"in":"path","name":"identity-id","description":"The ID of the identity to update","required":true,"example":"2c9180857893f1290178944561990364","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"lifecycleStateId":{"type":"string","description":"The ID of the lifecycle state to set","example":"2c9180877a86e408017a8c19fefe046c"}}}}}},"responses":{"200":{"description":"The request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object","properties":{"accountActivityId":{"type":"string","example":"2c9180837ab5b716017ab7c6c9ef1e20","description":"The ID of the IdentityRequest object that was generated when the workflow launches"}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/identities/{identity-id}/set-lifecycle-state","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"lifecycleStateId":"2c9180877a86e408017a8c19fefe046c"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Set Lifecycle State","description":{"content":"This endpoint will set/update an identity's lifecycle state to the one provided and updates the corresponding Identity Profile.\nA token with ORG_ADMIN or API authority is required to call this API.","type":"text/plain"},"url":{"path":["identities",":identity-id","set-lifecycle-state"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the identity to update","type":"text/plain"},"type":"any","value":"","key":"identity-id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Set Lifecycle State + + + +This endpoint will set/update an identity's lifecycle state to the one provided and updates the corresponding Identity Profile. +A token with ORG_ADMIN or API authority is required to call this API. + +
      Path Parameters
      Request Body required
      + +The request was successfully accepted into the system. + +
      Schema
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/set-password.api.mdx b/docs/sailpoint-api-v3/set-password.api.mdx new file mode 100644 index 000000000..db767de52 --- /dev/null +++ b/docs/sailpoint-api-v3/set-password.api.mdx @@ -0,0 +1,75 @@ +--- +id: set-password +sidebar_label: Set Identity's Password +hide_title: true +hide_table_of_contents: true +api: {"operationId":"setPassword","tags":["Password Management"],"description":"This API is used to set a password for an identity. The password can only be set by the actual identity owner or by a trusted API client application.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"identityId":{"type":"string","description":"The identity ID that requested the password change","example":"8a807d4c73c545510173c545f0a002ff"},"encryptedPassword":{"type":"string","description":"The RSA encrypted password","example":"XzN+YwKgr2C+InkMYFMBG3UtjMEw5ZIql/XFlXo8cJNeslmkplx6vn4kd4/43IF9STBk5RnzR6XmjpEO+FwHDoiBwYZAkAZK/Iswxk4OdybG6Y4MStJCOCiK8osKr35IMMSV/mbO4wAeltoCk7daTWzTGLiI6UaT5tf+F2EgdjJZ7YqM8W8r7aUWsm3p2Xt01Y46ZRx0QaM91QruiIx2rECFT2pUO0wr+7oQ77jypATyGWRtADsu3YcvCk/6U5MqCnXMzKBcRas7NnZdSL/d5H1GglVGz3VLPMaivG4/oL4chOMmFCRl/zVsGxZ9RhN8rxsRGFFKn+rhExTi+bax3A=="},"publicKeyId":{"type":"string","description":"The encryption key ID","example":"YWQ2NjQ4MTItZjY0NC00MWExLWFjMjktOGNmMzU3Y2VlNjk2"},"accountId":{"type":"string","description":"Account ID of the account This is specified per account schema in the source configuration. It is used to distinguish accounts. More info can be found here https://community.sailpoint.com/t5/IdentityNow-Connectors/How-do-I-designate-an-account-attribute-as-the-Account-ID-for-a/ta-p/80350","example":"CN=Abby Smith,OU=Austin,OU=Americas,OU=Demo,DC=seri,DC=acme,DC=com"},"sourceId":{"type":"string","description":"The ID of the source for which identity is requesting the password change","example":"8a807d4c73c545510173c545d4b60246"}}}}}},"responses":{"202":{"description":"Reference to the password change.","content":{"application/json":{"schema":{"type":"object","properties":{"requestId":{"type":"string","nullable":true,"description":"The password change request ID","example":"089899f13a8f4da7824996191587bab9"},"state":{"type":"string","enum":["IN_PROGRESS","FINISHED","FAILED"],"description":"Password change state","example":"IN_PROGRESS"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/set-password","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"identityId":"8a807d4c73c545510173c545f0a002ff","encryptedPassword":"XzN+YwKgr2C+InkMYFMBG3UtjMEw5ZIql/XFlXo8cJNeslmkplx6vn4kd4/43IF9STBk5RnzR6XmjpEO+FwHDoiBwYZAkAZK/Iswxk4OdybG6Y4MStJCOCiK8osKr35IMMSV/mbO4wAeltoCk7daTWzTGLiI6UaT5tf+F2EgdjJZ7YqM8W8r7aUWsm3p2Xt01Y46ZRx0QaM91QruiIx2rECFT2pUO0wr+7oQ77jypATyGWRtADsu3YcvCk/6U5MqCnXMzKBcRas7NnZdSL/d5H1GglVGz3VLPMaivG4/oL4chOMmFCRl/zVsGxZ9RhN8rxsRGFFKn+rhExTi+bax3A==","publicKeyId":"YWQ2NjQ4MTItZjY0NC00MWExLWFjMjktOGNmMzU3Y2VlNjk2","accountId":"CN=Abby Smith,OU=Austin,OU=Americas,OU=Demo,DC=seri,DC=acme,DC=com","sourceId":"8a807d4c73c545510173c545d4b60246"},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Set Identity's Password","description":{"content":"This API is used to set a password for an identity. The password can only be set by the actual identity owner or by a trusted API client application.","type":"text/plain"},"url":{"path":["set-password"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Set Identity's Password + + + +This API is used to set a password for an identity. The password can only be set by the actual identity owner or by a trusted API client application. + +
      Request Body required
      + +Reference to the password change. + +
      Schema
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/sidebar.js b/docs/sailpoint-api-v3/sidebar.js new file mode 100644 index 000000000..7ecddb6f7 --- /dev/null +++ b/docs/sailpoint-api-v3/sidebar.js @@ -0,0 +1 @@ +module.exports = [{"type":"doc","id":"sailpoint-api-v3/sail-point-saa-s-api"},{"type":"category","label":"Access Request Approvals","link":{"type":"doc","id":"sailpoint-api-v3/access-request-approvals"},"items":[{"type":"doc","id":"sailpoint-api-v3/list-pending-approvals","label":"Pending Access Request Approvals List","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/list-completed-approvals","label":"Completed Access Request Approvals List","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/approve-request","label":"Approves an access request approval.","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/reject-request","label":"Rejects an access request approval.","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/forward-request","label":"Forwards an access request approval.","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/approval-summary","label":"Get the number of access-requests-approvals","className":"api-method get"}]},{"type":"category","label":"Access Requests","link":{"type":"doc","id":"sailpoint-api-v3/access-requests"},"items":[{"type":"doc","id":"sailpoint-api-v3/create-access-request","label":"Submit an Access Request","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/cancel-access-request","label":"Cancel Access Request","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/get-access-request-config","label":"Get Access Request Configuration","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/update-access-request-config","label":"Update Access Request Configuration","className":"api-method put"},{"type":"doc","id":"sailpoint-api-v3/list-access-request-status","label":"Access Request Status","className":"api-method get"}]},{"type":"category","label":"Accounts","link":{"type":"doc","id":"sailpoint-api-v3/accounts"},"items":[{"type":"doc","id":"sailpoint-api-v3/list-accounts","label":"Accounts List","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/create-account","label":"Create Account","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/get-account","label":"Account Details","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/update-account","label":"Update Account","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-v3/put-account","label":"Update Account","className":"api-method put"},{"type":"doc","id":"sailpoint-api-v3/delete-account","label":"Delete Account","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-v3/get-account-entitlements","label":"Account Entitlements","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/reload-account","label":"Reload Account","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/enable-account","label":"Enable Account","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/disable-account","label":"Disable Account","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/unlock-account","label":"Unlock Account","className":"api-method post"}]},{"type":"category","label":"Account Activities","link":{"type":"doc","id":"sailpoint-api-v3/account-activities"},"items":[{"type":"doc","id":"sailpoint-api-v3/list-account-activities","label":"Get a list of Account Activities","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/get-account-activity","label":"Get an Account Activity","className":"api-method get"}]},{"type":"category","label":"Certifications","link":{"type":"doc","id":"sailpoint-api-v3/certifications"},"items":[{"type":"doc","id":"sailpoint-api-v3/list-identity-certifications","label":"Identity Campaign Certifications by IDs","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/get-identity-certification","label":"Identity Certification by ID","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/list-identity-access-review-items","label":"List of Access Review Items","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/make-identity-decision","label":"Decide on a Certification Item","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/reassign-identity-certifications","label":"Reassign Identities or Items","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/sign-off-identity-certification","label":"Finalize Identity Certification Decisions","className":"api-method post"}]},{"type":"category","label":"Certification Summaries","link":{"type":"doc","id":"sailpoint-api-v3/certification-summaries"},"items":[{"type":"doc","id":"sailpoint-api-v3/get-identity-decision-summary","label":"Summary of Certification Decisions","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/get-identity-summaries","label":"Identity Summaries for Identity Campaign Certification","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/get-identity-access-summaries","label":"Access Summaries","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/get-identity-summary","label":"Summary for Identity","className":"api-method get"}]},{"type":"category","label":"Lifecycle States","link":{"type":"doc","id":"sailpoint-api-v3/lifecycle-states"},"items":[{"type":"doc","id":"sailpoint-api-v3/set-lifecycle-state","label":"Set Lifecycle State","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/list-lifecycle-states","label":"Lists LifecycleStates","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/create-lifecycle-state","label":"Create Lifecycle State","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/get-lifecycle-state","label":"Retrieves Lifecycle State","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/update-lifecycle-states","label":"Update Lifecycle State","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-v3/delete-lifecycle-state","label":"Delete Lifecycle State by ID","className":"api-method delete"}]},{"type":"category","label":"Identity Profiles","link":{"type":"doc","id":"sailpoint-api-v3/identity-profiles"},"items":[{"type":"doc","id":"sailpoint-api-v3/list-identity-profiles","label":"Identity Profiles List","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/export-identity-profiles","label":"Export Identity Profiles","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/import-identity-profiles","label":"Import Identity Profiles","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/get-identity-profile","label":"Get single Identity Profile","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/get-default-identity-attribute-config","label":"Get default Identity Attribute Config","className":"api-method get"}]},{"type":"category","label":"Non-Employee Lifecycle Management","link":{"type":"doc","id":"sailpoint-api-v3/non-employee-lifecycle-management"},"items":[{"type":"doc","id":"sailpoint-api-v3/non-employee-record-creation","label":"Create Non-Employee Record","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/non-employee-record-list","label":"List Non-Employee Records","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/non-employee-record-get","label":"Get a Non-Employee Record","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/non-employee-record-update","label":"Update Non-Employee Record","className":"api-method put"},{"type":"doc","id":"sailpoint-api-v3/non-employee-record-patch","label":"Patch Non-Employee Record","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-v3/non-employee-record-delete","label":"Delete Non-Employee Record","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-v3/non-employee-record-bulk-delete","label":"Delete Multiple Non-Employee Records","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/non-employee-request-creation","label":"Create Non-Employee Request","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/non-employee-request-list","label":"List Non-Employee Requests","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/non-employee-request-get","label":"Get a Non-Employee Request","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/non-employee-request-deletion","label":"Delete Non-Employee Request","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-v3/non-employee-request-summary-get","label":"Get Summary of Non-Employee Requests","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/non-employee-sources-creation","label":"Create Non-Employee Source","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/non-employee-sources-list","label":"List Non-Employee Sources","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/non-employee-source-get","label":"Get a Non-Employee Source","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/non-employee-source-patch","label":"Patch a Non-Employee Source","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-v3/non-employee-source-delete","label":"Delete Non-Employee Source","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-v3/non-employee-records-export","label":"Exports Non-Employee Records to CSV","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/non-employee-records-bulk-upload","label":"Imports, or Updates, Non-Employee Records","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/non-employee-bulk-upload-status","label":"Obtain the status of bulk upload on the source","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/non-employee-export-source-schema-template","label":"Exports Source Schema Template","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/non-employee-approval-list","label":"Get List of Non-Employee Approval Requests","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/non-employee-approval-get","label":"Get a non-employee approval item detail","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/non-employee-approve-request","label":"Approve a Non-Employee Request","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/non-employee-reject-request","label":"Reject a Non-Employee Request","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/non-employee-approval-summary","label":"Get Summary of Non-Employee Approval Requests","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/get-schema-attributes","label":"List Schema Attributes Non-Employee Source","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/create-schema-attribute","label":"Create a new Schema Attribute for Non-Employee Source","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/delete-schema-attributes","label":"Delete all custom schema attributes for Non-Employee Source","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-v3/get-schema-attribute","label":"Get Schema Attribute Non-Employee Source","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/patch-schema-attribute","label":"Patch a Schema Attribute for Non-Employee Source","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-v3/delete-schema-attribute","label":"Delete a Schema Attribute for Non-Employee Source","className":"api-method delete"}]},{"type":"category","label":"OAuth Clients","link":{"type":"doc","id":"sailpoint-api-v3/o-auth-clients"},"items":[{"type":"doc","id":"sailpoint-api-v3/list-oauth-clients","label":"List OAuth Clients","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/create-oauth-client","label":"Create OAuth Client","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/get-oauth-client","label":"Get OAuth Client","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/delete-oauth-client","label":"Delete OAuth Client","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-v3/patch-oauth-client","label":"Patch OAuth Client","className":"api-method patch"}]},{"type":"category","label":"Password Management","link":{"type":"doc","id":"sailpoint-api-v3/password-management"},"items":[{"type":"doc","id":"sailpoint-api-v3/query-password-info","label":"Query Password Info","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/set-password","label":"Set Identity's Password","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/get-password-change-status","label":"Get Password Change Request Status","className":"api-method get"}]},{"type":"category","label":"Personal Access Tokens","link":{"type":"doc","id":"sailpoint-api-v3/personal-access-tokens"},"items":[{"type":"doc","id":"sailpoint-api-v3/list-personal-access-tokens","label":"List Personal Access Tokens","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/create-personal-access-token","label":"Create Personal Access Token","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/delete-personal-access-token","label":"Delete Personal Access Token","className":"api-method delete"}]},{"type":"category","label":"Public Identities","link":{"type":"doc","id":"sailpoint-api-v3/public-identities"},"items":[{"type":"doc","id":"sailpoint-api-v3/get-public-identities","label":"Get a list of public identities","className":"api-method get"}]},{"type":"category","label":"Public Identities Config","link":{"type":"doc","id":"sailpoint-api-v3/public-identities-config"},"items":[{"type":"doc","id":"sailpoint-api-v3/get-public-identity-config","label":"Get the Public Identities Configuration","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/update-public-identity-config","label":"Update the Public Identities Configuration","className":"api-method put"}]},{"type":"category","label":"Requestable Objects","link":{"type":"doc","id":"sailpoint-api-v3/requestable-objects"},"items":[{"type":"doc","id":"sailpoint-api-v3/list-requestable-objects","label":"Requestable Objects List","className":"api-method get"}]},{"type":"category","label":"Saved Search","link":{"type":"doc","id":"sailpoint-api-v3/saved-search"},"items":[{"type":"doc","id":"sailpoint-api-v3/saved-search-create","label":"Create a saved search","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/saved-search-list","label":"Return a list of Saved Searches","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/saved-search-update","label":"Updates an existing saved search\n","className":"api-method put"},{"type":"doc","id":"sailpoint-api-v3/saved-search-get","label":"Return a saved search by ID","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/saved-search-delete","label":"Delete a document by ID","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-v3/saved-search-execute","label":"Execute a saved search by ID","className":"api-method post"}]},{"type":"category","label":"Scheduled Search","link":{"type":"doc","id":"sailpoint-api-v3/scheduled-search"},"items":[{"type":"doc","id":"sailpoint-api-v3/scheduled-search-create","label":"Create a new scheduled search","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/scheduled-search-list","label":"Return a list of scheduled searches","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/scheduled-search-update","label":"Update an existing Scheduled Search","className":"api-method put"},{"type":"doc","id":"sailpoint-api-v3/scheduled-search-get","label":"Return a Scheduled Search by ID","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/scheduled-search-delete","label":"Delete a Scheduled Search by ID","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-v3/scheduled-search-unsubscribe","label":"Unsubscribe a recipient from Scheduled Search","className":"api-method post"}]},{"type":"category","label":"Search","link":{"type":"doc","id":"sailpoint-api-v3/search"},"items":[{"type":"doc","id":"sailpoint-api-v3/search","label":"Get a list of Documents","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/search-count","label":"Count the number of Documents satisfying a Query","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/search-aggregate","label":"Perform a Search Query Aggregation","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/search-get","label":"Get a Document by ID","className":"api-method get"}]},{"type":"category","label":"Service Desk Integration","link":{"type":"doc","id":"sailpoint-api-v3/service-desk-integration"},"items":[{"type":"doc","id":"sailpoint-api-v3/get-service-desk-integration-list","label":"List existing Service Desk Integrations","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/create-service-desk-integration","label":"Create a new Service Desk integration","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/get-service-desk-integration","label":"Get a Service Desk integration by ID","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/update-service-desk-integration","label":"Update a Service Desk integration by ID","className":"api-method put"},{"type":"doc","id":"sailpoint-api-v3/delete-service-desk-integration","label":"Delete a Service Desk integration by ID","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-v3/patch-service-desk-integration","label":"Service Desk Integration Update - PATCH","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-v3/get-service-desk-integration-types","label":"Service Desk Integration Types List.","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/get-service-desk-integration-template","label":"Service Desk integration template by scriptName.","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/get-status-check-details","label":"Get the time check configuration of queued SDIM tickets","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/update-status-check-details","label":"Update the time check configuration of queued SDIM tickets","className":"api-method put"}]},{"type":"category","label":"Sources","link":{"type":"doc","id":"sailpoint-api-v3/sources"},"items":[{"type":"doc","id":"sailpoint-api-v3/list-sources","label":"Lists all sources in IdentityNow.","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/create-source","label":"Creates a source in IdentityNow.","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/get-source","label":"Get Source by ID","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/replace-source","label":"Update Source (Full)","className":"api-method put"},{"type":"doc","id":"sailpoint-api-v3/update-source","label":"Update Source (Partial)","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-v3/delete-source","label":"Delete Source by ID","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-v3/list-provisioning-policies","label":"Lists ProvisioningPolicies","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/create-provisioning-policy","label":"Create Provisioning Policy","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/get-provisioning-policy","label":"Get Provisioning Policy by UsageType","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/replace-provisioning-policy","label":"Update Provisioning Policy by UsageType","className":"api-method put"},{"type":"doc","id":"sailpoint-api-v3/update-provisioning-policy","label":"Partial update of Provisioning Policy","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-v3/delete-provisioning-policy","label":"Delete Provisioning Policy by UsageType","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-v3/bulk-update-provisioning-policies","label":"Bulk Update Provisioning Policies","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/list-schemas","label":"List Schemas on a Source","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/create-schema","label":"Create Schema on a Source","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/get-schema","label":"Get Source Schema by ID","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/replace-schema","label":"Update Source Schema (Full)","className":"api-method put"},{"type":"doc","id":"sailpoint-api-v3/update-schema","label":"Update Source Schema (Partial)","className":"api-method patch"},{"type":"doc","id":"sailpoint-api-v3/delete-schema","label":"Delete Source Schema by ID","className":"api-method delete"},{"type":"doc","id":"sailpoint-api-v3/get-source-health","label":"This API fetches source health by source's id","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/download-source-accounts-schema","label":"Downloads source accounts schema template","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/upload-source-accounts-schema","label":"Uploads source accounts schema template","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/download-source-entitlements-schema","label":"Downloads source entitlements schema template","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/upload-source-entitlements-schema","label":"Uploads source entitlements schema template","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/upload-connector-file","label":"Upload connector file to source","className":"api-method post"}]},{"type":"category","label":"Transforms","link":{"type":"doc","id":"sailpoint-api-v3/transforms"},"items":[{"type":"doc","id":"sailpoint-api-v3/get-transforms-list","label":"List transforms","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/create-transform","label":"Create transform","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/get-transform","label":"Transform by ID","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/update-transform","label":"Update a transform","className":"api-method put"},{"type":"doc","id":"sailpoint-api-v3/delete-transform","label":"Delete a transform","className":"api-method delete"}]},{"type":"category","label":"Work Items","link":{"type":"doc","id":"sailpoint-api-v3/work-items"},"items":[{"type":"doc","id":"sailpoint-api-v3/list-work-items","label":"List Work Items","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/completed-work-items","label":"Completed Work Items","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/count-work-items","label":"Count Work Items","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/count-completed-work-items","label":"Count Completed Work Items","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/summary-work-items","label":"Work Items Summary","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/get-work-items","label":"Get a Work Item","className":"api-method get"},{"type":"doc","id":"sailpoint-api-v3/complete-work-item","label":"Complete a Work Item","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/approve-approval-item","label":"Approve an Approval Item","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/reject-approval-item","label":"Reject an Approval Item","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/bulk-approve-approval-item","label":"Bulk approve Approval Items","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/bulk-reject-approval-item","label":"Bulk reject Approval Items","className":"api-method post"},{"type":"doc","id":"sailpoint-api-v3/submit-account-selection","label":"Submit Account Selections","className":"api-method post"}]}]; \ No newline at end of file diff --git a/docs/sailpoint-api-v3/sign-off-identity-certification.api.mdx b/docs/sailpoint-api-v3/sign-off-identity-certification.api.mdx new file mode 100644 index 000000000..ab2baa705 --- /dev/null +++ b/docs/sailpoint-api-v3/sign-off-identity-certification.api.mdx @@ -0,0 +1,87 @@ +--- +id: sign-off-identity-certification +sidebar_label: Finalize Identity Certification Decisions +hide_title: true +hide_table_of_contents: true +api: {"operationId":"signOffIdentityCertification","tags":["Certifications"],"description":"This API finalizes all decisions made on an identity campaign certification and initiates any remediations required. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. This API does not support requests for certifications assigned to Governance Groups.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The identity campaign certification ID","example":"ef38f94347e94562b5bb8424a56397d8"}],"responses":{"200":{"description":"An identity campaign certification object","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"example":"2c9180835d2e5168015d32f890ca1581","type":"string"},"name":{"example":"Source Owner Access Review for Employees [source]","type":"string"},"campaign":{"type":"object","required":["id","name","type","campaignType","description"],"properties":{"id":{"type":"string","description":"The unique ID of the campaign.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the campaign.","example":"Campaign Name"},"type":{"type":"string","enum":["CAMPAIGN"],"description":"The type of object that is being referenced.","example":"CAMPAIGN"},"campaignType":{"type":"string","enum":["MANAGER","SOURCE_OWNER","SEARCH"],"description":"The type of the campaign.","example":"MANAGER"},"description":{"type":"string","description":"The description of the campaign set by the admin who created it.","nullable":true,"example":"A description of the campaign"}}},"completed":{"type":"boolean","description":"Have all decisions been made?","example":true},"identitiesCompleted":{"type":"integer","description":"The number of identities for whom all decisions have been made and are complete.","example":5},"identitiesTotal":{"type":"integer","description":"The total number of identities in the Certification, both complete and incomplete.","example":10},"created":{"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"},"modified":{"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"},"decisionsMade":{"type":"integer","description":"The number of approve/revoke/acknowledge decisions that have been made.","example":20},"decisionsTotal":{"type":"integer","description":"The total number of approve/revoke/acknowledge decisions.","example":40},"due":{"type":"string","format":"date-time","description":"The due date of the certification.","example":"2018-10-19T13:49:37.385Z"},"signed":{"type":"string","format":"date-time","nullable":true,"description":"The date the reviewer signed off on the Certification.","example":"2018-10-19T13:49:37.385Z"},"reviewer":{"type":"object","properties":{"id":{"type":"string","description":"The id of the reviewer.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the reviewer.","example":"Reviewer Name"},"email":{"type":"string","description":"The email of the reviewing identity.","example":"reviewer@test.com"},"type":{"type":"string","enum":["IDENTITY"]},"created":{"nullable":true,"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"},"modified":{"nullable":true,"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"}}},"reassignment":{"type":"object","nullable":true,"properties":{"from":{"type":"object","properties":{"id":{"type":"string","description":"The id of the certification.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the certification.","example":"Certification Name"},"type":{"type":"string","enum":["CERTIFICATION"]},"reviewer":{"type":"object","properties":{"id":{"type":"string","description":"The id of the reviewer.","example":"ef38f94347e94562b5bb8424a56397d8"},"name":{"type":"string","description":"The name of the reviewer.","example":"Reviewer Name"},"email":{"type":"string","description":"The email of the reviewing identity.","example":"reviewer@test.com"},"type":{"type":"string","enum":["IDENTITY"]},"created":{"nullable":true,"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"},"modified":{"nullable":true,"example":"2018-06-25T20:22:28.104Z","format":"date-time","type":"string"}}}}},"comment":{"type":"string","description":"The comment entered when the Certification was reassigned","example":"Reassigned for a reason"}}},"hasErrors":{"type":"boolean","example":false},"errorMessage":{"nullable":true,"type":"string","example":"The certification has an error"},"phase":{"type":"string","description":"The current phase of the campaign.\n* `STAGED`: The campaign is waiting to be activated.\n* `ACTIVE`: The campaign is active.\n* `SIGNED`: The reviewer has signed off on the campaign, and it is considered complete.\n","enum":["STAGED","ACTIVE","SIGNED"],"example":"ACTIVE"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/certifications/{id}/sign-off","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Finalize Identity Certification Decisions","description":{"content":"This API finalizes all decisions made on an identity campaign certification and initiates any remediations required. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. This API does not support requests for certifications assigned to Governance Groups.","type":"text/plain"},"url":{"path":["certifications",":id","sign-off"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The identity campaign certification ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Accept","value":"application/json"}],"method":"POST"}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Finalize Identity Certification Decisions + + + +This API finalizes all decisions made on an identity campaign certification and initiates any remediations required. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. This API does not support requests for certifications assigned to Governance Groups. + +
      Path Parameters
      + +An identity campaign certification object + +
      Schema
        campaign object
        reviewer object
        reassignment object
        from object
        reviewer object
      + +Client Error - Returned if the request body is invalid. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
      Schema
      + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
      Schema
      + +Internal Server Error - Returned if there is an unexpected error. + +
      Schema
        messages object[]
        + +Generic localized reason for error + +
        causes object[]
        + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
      + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/sources.tag.mdx b/docs/sailpoint-api-v3/sources.tag.mdx new file mode 100644 index 000000000..488781026 --- /dev/null +++ b/docs/sailpoint-api-v3/sources.tag.mdx @@ -0,0 +1,15 @@ +--- +id: sources +title: Sources +description: Sources +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/submit-account-selection.api.mdx b/docs/sailpoint-api-v3/submit-account-selection.api.mdx new file mode 100644 index 000000000..5d7fa1a01 --- /dev/null +++ b/docs/sailpoint-api-v3/submit-account-selection.api.mdx @@ -0,0 +1,91 @@ +--- +id: submit-account-selection +sidebar_label: Submit Account Selections +hide_title: true +hide_table_of_contents: true +api: {"operationId":"submitAccountSelection","tags":["Work Items"],"description":"This API submits account selections. Either an admin, or the owning/current user must make this request.","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The ID of the work item","example":"ef38f94347e94562b5bb8424a56397d8"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"fieldName":"fieldValue"}}},"description":"Account Selection Data map, keyed on fieldName"},"responses":{"200":{"description":"A work items details object.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"ID of the work item","example":"2c9180835d2e5168015d32f890ca1581"},"requesterId":{"type":"string","description":"ID of the requester","example":"2c9180835d2e5168015d32f890ca1581"},"requesterDisplayName":{"type":"string","description":"The displayname of the requester","example":"John Smith"},"ownerId":{"type":"string","description":"The ID of the owner","example":"2c9180835d2e5168015d32f890ca1581"},"ownerName":{"type":"string","description":"The name of the owner","example":"Jason Smith"},"created":{"type":"string","format":"date-time","example":"2017-07-11T18:45:37.098Z"},"modified":{"type":"string","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"description":{"type":"string","description":"The description of the work item","example":"Create account on source 'AD'"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]},"type":{"type":"string","enum":["UNKNOWN","GENERIC","CERTIFICATION","REMEDIATION","DELEGATION","APPROVAL","VIOLATIONREVIEW","FORM","POLICYVIOLATION","CHALLENGE","IMPACTANALYSIS","SIGNOFF","EVENT","MANUALACTION","TEST"]},"remediationItems":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the certification","example":"2c9180835d2e5168015d32f890ca1581"},"targetId":{"type":"string","description":"The ID of the certification target","example":"2c9180835d2e5168015d32f890ca1581"},"targetName":{"type":"string","description":"The name of the certification target","example":"john.smith"},"targetDisplayName":{"type":"string","description":"The display name of the certification target","example":"emailAddress"},"applicationName":{"type":"string","description":"The name of the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute being certified","example":"phoneNumber"},"attributeOperation":{"type":"string","description":"The operation of the certification on the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute being certified","example":"512-555-1212"},"nativeIdentity":{"type":"string","description":"The native identity of the target","example":"jason.smith2"}}},"approvalItems":{"type":"object","properties":{"id":{"type":"string","description":"ID of the approval item","example":"2c9180835d2e5168015d32f890ca1581"},"account":{"type":"string","description":"The account referenced by the approval item","example":"john.smith"},"application":{"type":"string","description":"The name the application/source","example":"Active Directory"},"attributeName":{"type":"string","description":"The name of the attribute","example":"emailAddress"},"attributeOperation":{"type":"string","description":"The operation of the attribute","example":"update"},"attributeValue":{"type":"string","description":"The value of the attribute","example":"a@b.com"},"state":{"type":"string","enum":["FINISHED","REJECTED","RETURNED","EXPIRED","PENDING","CANCELED"]}}},"name":{"type":"string","description":"The work item name","example":"Account Create"},"completed":{"type":"string","format":"date-time","example":"2018-10-19T13:49:37.385Z"},"numItems":{"type":"integer","description":"The number of items in the work item","example":19},"form":{"type":"object","properties":{"id":{"type":"string","description":"ID of the form","example":"2c9180835d2e5168015d32f890ca1581"},"name":{"type":"string","description":"Name of the form","example":"AccountSelection Form"},"title":{"type":"string","description":"The form title","example":"Account Selection for John.Doe"},"subtitle":{"type":"string","description":"The form subtitle.","example":"Please select from the following"},"targetUser":{"type":"string","description":"The name of the user that should be shown this form","example":"Jane.Doe"},"sections":{"type":"object","allOf":[{"type":"object","properties":{"name":{"type":"string","description":"Name of the FormItem","example":"Field1"}}},{"type":"object","properties":{"label":{"type":"string","description":"Label of the section","example":"Section 1"},"formItems":{"type":"array","items":{"type":"object"},"description":"List of FormItems. FormItems can be SectionDetails and/or FieldDetails","example":[]}}}]}}},"errors":{"type":"array","items":{"type":"string"},"example":["The work item ID that was specified was not found."]}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/work-items/{id}/submit-account-selection","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Submit Account Selections","description":{"content":"This API submits account selections. Either an admin, or the owning/current user must make this request.","type":"text/plain"},"url":{"path":["work-items",":id","submit-account-selection"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The ID of the work item","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Submit Account Selections + + + +This API submits account selections. Either an admin, or the owning/current user must make this request. + +
      Path Parameters
      Request Body required
      + +Account Selection Data map, keyed on fieldName + +
        + +A work items details object. + +
        Schema
          remediationItems object
          approvalItems object
          form object
          sections object
        + +Client Error - Returned if the request body is invalid. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
        Schema
        + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
        Schema
        + +Internal Server Error - Returned if there is an unexpected error. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/summary-work-items.api.mdx b/docs/sailpoint-api-v3/summary-work-items.api.mdx new file mode 100644 index 000000000..5c9bcaf2e --- /dev/null +++ b/docs/sailpoint-api-v3/summary-work-items.api.mdx @@ -0,0 +1,75 @@ +--- +id: summary-work-items +sidebar_label: Work Items Summary +hide_title: true +hide_table_of_contents: true +api: {"operationId":"summaryWorkItems","tags":["Work Items"],"description":"This gets a summary of work items belonging to either the specified user(admin required), or the current user.","parameters":[{"in":"query","name":"ownerId","schema":{"type":"string"},"description":"ID of the work item owner.","required":false}],"responses":{"200":{"description":"List of work items","content":{"application/json":{"schema":{"type":"object","properties":{"open":{"type":"integer","description":"The count of open work items","example":29},"completed":{"type":"integer","description":"The count of completed work items","example":1},"total":{"type":"integer","description":"The count of total work items","example":30}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"get","path":"/work-items/summary","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Work Items Summary","description":{"content":"This gets a summary of work items belonging to either the specified user(admin required), or the current user.","type":"text/plain"},"url":{"path":["work-items","summary"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"ID of the work item owner.","type":"text/plain"},"key":"ownerId","value":""}],"variable":[]},"header":[{"key":"Accept","value":"application/json"}],"method":"GET"}} +sidebar_class_name: "get api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Work Items Summary + + + +This gets a summary of work items belonging to either the specified user(admin required), or the current user. + +
        Query Parameters
        + +List of work items + +
        Schema
        + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
        Schema
        + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
        Schema
        + +Internal Server Error - Returned if there is an unexpected error. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/transforms.tag.mdx b/docs/sailpoint-api-v3/transforms.tag.mdx new file mode 100644 index 000000000..ca0aed91f --- /dev/null +++ b/docs/sailpoint-api-v3/transforms.tag.mdx @@ -0,0 +1,23 @@ +--- +id: transforms +title: Transforms +description: Transforms +--- + + + +The purpose of this API is to expose functionality for the manipulation of Transform objects. +Transforms are a form of configurable objects which define an easy way to manipulate attribute data without having +to write code. These endpoints don't require API calls to other resources, audit service is used for keeping track +of which users have made changes to the Transforms. + + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/unlock-account.api.mdx b/docs/sailpoint-api-v3/unlock-account.api.mdx new file mode 100644 index 000000000..9c30193de --- /dev/null +++ b/docs/sailpoint-api-v3/unlock-account.api.mdx @@ -0,0 +1,88 @@ +--- +id: unlock-account +sidebar_label: Unlock Account +hide_title: true +hide_table_of_contents: true +api: {"operationId":"unlockAccount","tags":["Accounts"],"description":"This API submits a task to unlock an account and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:account:unlock"]}],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The account id","example":"ef38f94347e94562b5bb8424a56397d8"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"description":"Request used for account unlock","type":"object","properties":{"externalVerificationId":{"description":"If set, an external process validates that the user wants to proceed with this request.","type":"string","example":"3f9180835d2e5168015d32f890ca1581"},"unlockIDNAccount":{"description":"If set, the IDN account is unlocked after the workflow completes.","type":"boolean","example":false},"forceProvisioning":{"description":"If set, provisioning updates the account attribute at the source. This option is used when the account is not synced to ensure the attribute is updated.","type":"boolean","example":false}}}}}},"responses":{"202":{"description":"Async task details","content":{"application/json":{"schema":{"description":"Accounts async response containing details on started async process","required":["id"],"type":"object","properties":{"id":{"description":"id of the task","type":"string","example":"2c91808474683da6017468693c260195"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/accounts/{id}/unlock","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"externalVerificationId":"3f9180835d2e5168015d32f890ca1581","unlockIDNAccount":false,"forceProvisioning":false},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Unlock Account","description":{"content":"This API submits a task to unlock an account and returns the task ID. \nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts",":id","unlock"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The account id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Unlock Account + + + +This API submits a task to unlock an account and returns the task ID. +A token with ORG_ADMIN authority is required to call this API. + +
        Path Parameters
        Request Body required
        + +Async task details + +
        Schema
        + +Client Error - Returned if the request body is invalid. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
        Schema
        + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
        Schema
        + +Internal Server Error - Returned if there is an unexpected error. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/update-access-request-config.api.mdx b/docs/sailpoint-api-v3/update-access-request-config.api.mdx new file mode 100644 index 000000000..2ae222486 --- /dev/null +++ b/docs/sailpoint-api-v3/update-access-request-config.api.mdx @@ -0,0 +1,100 @@ +--- +id: update-access-request-config +sidebar_label: Update Access Request Configuration +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updateAccessRequestConfig","tags":["Access Requests"],"description":"This endpoint replaces the current access-request configuration.\nA token with ORG_ADMIN authority is required to call this API.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"approvalsMustBeExternal":{"type":"boolean","description":"If true, then approvals must be processed by external system.","example":true},"autoApprovalEnabled":{"type":"boolean","description":"If true and requester and reviewer are the same, then automatically approve the approval.","example":true},"requestOnBehalfOfConfig":{"description":"Request On Behalf Of Configuration.","type":"object","properties":{"allowRequestOnBehalfOfAnyoneByAnyone":{"type":"boolean","description":"If anyone can request access for anyone.","example":true},"allowRequestOnBehalfOfEmployeeByManager":{"type":"boolean","description":"If a manager can request access for his/her direct reports.","example":true}}},"approvalReminderAndEscalationConfig":{"description":"Approval Reminder and Escalation Configuration.","type":"object","properties":{"daysUntilEscalation":{"type":"integer","description":"Number of days to wait before the first reminder. If no reminders are configured, then this is the number of days to wait before escalation.","format":"int32","example":0},"daysBetweenReminders":{"type":"integer","description":"Number of days to wait between reminder notifications.","format":"int32","example":0},"maxReminders":{"type":"integer","description":"Maximum number of reminder notification to send to the reviewer before approval escalation.","format":"int32","example":0},"fallbackApproverRef":{"type":"object","nullable":true,"properties":{"type":{"type":"string","description":"The type can only be IDENTITY. This is read-only","example":"IDENTITY"},"id":{"type":"string","description":"Identity id.","example":"5168015d32f890ca15812c9180835d2e"},"name":{"type":"string","description":"Human-readable display name of identity. This is read-only","example":"Alison Ferguso"},"email":{"type":"string","description":"Email address of identity. This is read-only","example":"alison.ferguso@identitysoon.com"}}}}},"entitlementRequestConfig":{"description":"Entitlement Request Configuration.","type":"object","properties":{"allowEntitlementRequest":{"type":"boolean","description":"Flag for allowing entitlement request.","example":true},"requestCommentsRequired":{"type":"boolean","description":"Flag for requiring comments while submitting an entitlement request.","default":false,"example":false},"deniedCommentsRequired":{"type":"boolean","description":"Flag for requiring comments while rejecting an entitlement request.","default":false,"example":false},"grantRequestApprovalSchemes":{"type":"string","description":"Approval schemes for granting entitlement request. This can be empty if no approval is needed.\nMultiple schemes must be comma-separated. The valid schemes are \"sourceOwner\", \"manager\" and \"workgroup:{id}\".\nMultiple workgroups (governance groups) can be used.\n","default":"sourceOwner","example":"sourceOwner, manager, workgroup:2c918084660f45d6016617daa9210584"}}}}}}}},"responses":{"200":{"description":"Access Request Configuration Details.","content":{"application/json":{"schema":{"type":"object","properties":{"approvalsMustBeExternal":{"type":"boolean","description":"If true, then approvals must be processed by external system.","example":true},"autoApprovalEnabled":{"type":"boolean","description":"If true and requester and reviewer are the same, then automatically approve the approval.","example":true},"requestOnBehalfOfConfig":{"description":"Request On Behalf Of Configuration.","type":"object","properties":{"allowRequestOnBehalfOfAnyoneByAnyone":{"type":"boolean","description":"If anyone can request access for anyone.","example":true},"allowRequestOnBehalfOfEmployeeByManager":{"type":"boolean","description":"If a manager can request access for his/her direct reports.","example":true}}},"approvalReminderAndEscalationConfig":{"description":"Approval Reminder and Escalation Configuration.","type":"object","properties":{"daysUntilEscalation":{"type":"integer","description":"Number of days to wait before the first reminder. If no reminders are configured, then this is the number of days to wait before escalation.","format":"int32","example":0},"daysBetweenReminders":{"type":"integer","description":"Number of days to wait between reminder notifications.","format":"int32","example":0},"maxReminders":{"type":"integer","description":"Maximum number of reminder notification to send to the reviewer before approval escalation.","format":"int32","example":0},"fallbackApproverRef":{"type":"object","nullable":true,"properties":{"type":{"type":"string","description":"The type can only be IDENTITY. This is read-only","example":"IDENTITY"},"id":{"type":"string","description":"Identity id.","example":"5168015d32f890ca15812c9180835d2e"},"name":{"type":"string","description":"Human-readable display name of identity. This is read-only","example":"Alison Ferguso"},"email":{"type":"string","description":"Email address of identity. This is read-only","example":"alison.ferguso@identitysoon.com"}}}}},"entitlementRequestConfig":{"description":"Entitlement Request Configuration.","type":"object","properties":{"allowEntitlementRequest":{"type":"boolean","description":"Flag for allowing entitlement request.","example":true},"requestCommentsRequired":{"type":"boolean","description":"Flag for requiring comments while submitting an entitlement request.","default":false,"example":false},"deniedCommentsRequired":{"type":"boolean","description":"Flag for requiring comments while rejecting an entitlement request.","default":false,"example":false},"grantRequestApprovalSchemes":{"type":"string","description":"Approval schemes for granting entitlement request. This can be empty if no approval is needed.\nMultiple schemes must be comma-separated. The valid schemes are \"sourceOwner\", \"manager\" and \"workgroup:{id}\".\nMultiple workgroups (governance groups) can be used.\n","default":"sourceOwner","example":"sourceOwner, manager, workgroup:2c918084660f45d6016617daa9210584"}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/access-request-config","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"approvalsMustBeExternal":true,"autoApprovalEnabled":true,"requestOnBehalfOfConfig":{"allowRequestOnBehalfOfAnyoneByAnyone":true,"allowRequestOnBehalfOfEmployeeByManager":true},"approvalReminderAndEscalationConfig":{"daysUntilEscalation":0,"daysBetweenReminders":0,"maxReminders":0,"fallbackApproverRef":{"type":"IDENTITY","id":"5168015d32f890ca15812c9180835d2e","name":"Alison Ferguso","email":"alison.ferguso@identitysoon.com"}},"entitlementRequestConfig":{"allowEntitlementRequest":true,"requestCommentsRequired":false,"deniedCommentsRequired":false,"grantRequestApprovalSchemes":"sourceOwner, manager, workgroup:2c918084660f45d6016617daa9210584"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Update Access Request Configuration","description":{"content":"This endpoint replaces the current access-request configuration.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["access-request-config"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Access Request Configuration + + + +This endpoint replaces the current access-request configuration. +A token with ORG_ADMIN authority is required to call this API. + +
        Request Body required
          requestOnBehalfOfConfig object
          + +Request On Behalf Of Configuration. + +
          approvalReminderAndEscalationConfig object
          + +Approval Reminder and Escalation Configuration. + +
          fallbackApproverRef object
          entitlementRequestConfig object
          + +Entitlement Request Configuration. + +
        + +Access Request Configuration Details. + +
        Schema
          requestOnBehalfOfConfig object
          + +Request On Behalf Of Configuration. + +
          approvalReminderAndEscalationConfig object
          + +Approval Reminder and Escalation Configuration. + +
          fallbackApproverRef object
          entitlementRequestConfig object
          + +Entitlement Request Configuration. + +
        + +Client Error - Returned if the request body is invalid. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
        Schema
        + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
        Schema
        + +Internal Server Error - Returned if there is an unexpected error. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/update-account.api.mdx b/docs/sailpoint-api-v3/update-account.api.mdx new file mode 100644 index 000000000..97b82e58e --- /dev/null +++ b/docs/sailpoint-api-v3/update-account.api.mdx @@ -0,0 +1,100 @@ +--- +id: update-account +sidebar_label: Update Account +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updateAccount","tags":["Accounts"],"description":"Use this API to modify the following fields:\n* `identityId`\n\n* `manuallyCorrelated`\n\n>**NOTE: All other fields can not be modified.**\n\nThe request must provide a JSONPatch payload.\n\nA token with ORG_ADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:account:update"]}],"parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The account ID","example":"ef38f94347e94562b5bb8424a56397d8"}],"requestBody":{"required":true,"description":"A list of account update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object"}},"example":[{"op":"replace","path":"/identityId","value":"2c9180845d1edece015d27a975983e21"}]}}},"responses":{"202":{"description":"Accepted - Returned if the request was successfully accepted into the system.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/accounts/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Update Account","description":{"content":"Use this API to modify the following fields:\n* `identityId`\n\n* `manuallyCorrelated`\n\n>**NOTE: All other fields can not be modified.**\n\nThe request must provide a JSONPatch payload.\n\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["accounts",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The account ID","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Account + + + +Use this API to modify the following fields: +* `identityId` + +* `manuallyCorrelated` + +>**NOTE: All other fields can not be modified.** + +The request must provide a JSONPatch payload. + +A token with ORG_ADMIN authority is required to call this API. + +
        Path Parameters
        Request Body array required
        + +A list of account update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + +
        + +Accepted - Returned if the request was successfully accepted into the system. + +
        Schema
        • object
        + +Client Error - Returned if the request body is invalid. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
        Schema
        + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
        Schema
        + +Internal Server Error - Returned if there is an unexpected error. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/update-lifecycle-states.api.mdx b/docs/sailpoint-api-v3/update-lifecycle-states.api.mdx new file mode 100644 index 000000000..500de777a --- /dev/null +++ b/docs/sailpoint-api-v3/update-lifecycle-states.api.mdx @@ -0,0 +1,108 @@ +--- +id: update-lifecycle-states +sidebar_label: Update Lifecycle State +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updateLifecycleStates","tags":["Lifecycle States"],"description":"This endpoint updates individual Lifecycle State fields using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\nA token with ORG_ADMIN or API authority is required to call this API.","security":[{"bearerAuth":["idn:identity-profile-lifecycle-state:update"]}],"parameters":[{"in":"path","name":"identity-profile-id","description":"Identity Profile ID","required":true,"schema":{"type":"string"}},{"in":"path","name":"lifecycle-state-id","description":"Lifecycle State ID","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"A list of lifecycle state update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\n\nThe following fields can be updated:\n* enabled\n* description\n* accountActions\n* accessProfileIds\n* emailNotificationOption\n","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}},"example":[{"op":"replace","path":"/description","value":"Updated description!"},{"op":"replace","path":"/accessProfileIds","value":["2c918087742bab150174407a80f3125e","2c918087742bab150174407a80f3124f"]},{"op":"replace","path":"/accountActions","value":[{"action":"ENABLE","sourceIds":["2c9180846a2f82fb016a481c1b1560c5","2c9180846a2f82fb016a481c1b1560cc"]},{"action":"DISABLE","sourceIds":["2c91808869a0c9980169a207258513fb"]}]},{"op":"replace","path":"/emailNotificationOption","value":{"notifyManagers":true,"notifyAllAdmins":false,"notifySpecificUsers":false,"emailAddressList":[]}}]}}},"responses":{"200":{"description":"The LifecycleState was successfully updated.","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true},"modified":{"description":"Last modification date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true}}},{"type":"object","required":["technicalName"],"properties":{"enabled":{"type":"boolean","example":true,"description":"Whether the lifecycle state is enabled or disabled."},"technicalName":{"type":"string","example":"Technical Name","description":"The technical name for lifecycle state. This is for internal use."},"description":{"type":"string","example":"Lifecycle description","description":"Lifecycle state description."},"identityCount":{"type":"integer","format":"int32","example":42,"readOnly":true,"description":"Number of identities that have the lifecycle state."},"emailNotificationOption":{"type":"object","description":"This is used for representing email configuration for a lifecycle state","properties":{"notifyManagers":{"type":"boolean","example":true,"description":"If true, then the manager is notified of the lifecycle state change."},"notifyAllAdmins":{"type":"boolean","example":true,"description":"If true, then all the admins are notified of the lifecycle state change."},"notifySpecificUsers":{"type":"boolean","example":true,"description":"If true, then the users specified in \"emailAddressList\" below are notified of lifecycle state change."},"emailAddressList":{"type":"array","example":["test@test.com","test2@test.com"],"items":{"type":"string"},"description":"List of user email addresses. If \"notifySpecificUsers\" option is true, then these users are notified of lifecycle state change."}}},"accountActions":{"type":"array","items":{"type":"object","description":"Object for specifying Actions to be performed on a specified list of sources' account.","properties":{"action":{"example":"ENABLE","type":"string","description":"Describes if action will be enabled or disabled","enum":["ENABLE","DISABLE"]},"sourceIds":{"type":"array","items":{"type":"string"},"uniqueItems":true,"example":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"],"description":"List of unique source IDs. The sources must have the ENABLE feature or flat file source. See \"/sources\" endpoint for source features."}}}},"accessProfileIds":{"type":"array","items":{"type":"string"},"uniqueItems":true,"example":["2c918084660f45d6016617daa9210584","2c918084660f45d6016617daa9210500"],"description":"List of unique access-profile IDs that are associated with the lifecycle state."}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/identity-profiles/{identity-profile-id}/lifecycle-states/{lifecycle-state-id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Update Lifecycle State","description":{"content":"This endpoint updates individual Lifecycle State fields using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\nA token with ORG_ADMIN or API authority is required to call this API.","type":"text/plain"},"url":{"path":["identity-profiles",":identity-profile-id","lifecycle-states",":lifecycle-state-id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) Identity Profile ID","type":"text/plain"},"type":"any","value":"","key":"identity-profile-id"},{"disabled":false,"description":{"content":"(Required) Lifecycle State ID","type":"text/plain"},"type":"any","value":"","key":"lifecycle-state-id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Lifecycle State + + + +This endpoint updates individual Lifecycle State fields using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. +A token with ORG_ADMIN or API authority is required to call this API. + +
        Path Parameters
        Request Body array required
        + +A list of lifecycle state update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + +The following fields can be updated: +* enabled +* description +* accountActions +* accessProfileIds +* emailNotificationOption + + +
          value object
          + +The value to be used for the operation, required for "add" and "replace" operations + +
        • anyOf
        • string
        • integer
        • anyOf
        • string
        • integer
        + +The LifecycleState was successfully updated. + +
        Schema
          emailNotificationOption object
          + +This is used for representing email configuration for a lifecycle state + +
          accountActions object[]
        + +Client Error - Returned if the request body is invalid. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
        Schema
        + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
        Schema
        + +Internal Server Error - Returned if there is an unexpected error. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/update-provisioning-policy.api.mdx b/docs/sailpoint-api-v3/update-provisioning-policy.api.mdx new file mode 100644 index 000000000..c481c84a7 --- /dev/null +++ b/docs/sailpoint-api-v3/update-provisioning-policy.api.mdx @@ -0,0 +1,96 @@ +--- +id: update-provisioning-policy +sidebar_label: Partial update of Provisioning Policy +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updateProvisioningPolicy","tags":["Sources"],"description":"This API selectively updates an existing Provisioning Policy using a JSONPatch payload.\nA token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","security":[{"bearerAuth":["idn:provisioning-policy:update"]}],"parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source id.","example":"2c9180835d191a86015d28455b4a2329"},{"in":"path","name":"usageType","required":true,"schema":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"description":"The type of ProvisioningPolicy usage."}],"requestBody":{"required":true,"description":"The JSONPatch payload used to update the schema.","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}}}}},"responses":{"200":{"description":"The ProvisioningPolicyDto was successfully updated.","content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"usageType":{"type":"string","nullable":false,"enum":["CREATE","UPDATE","DELETE","ASSIGN","UNASSIGN","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP","REGISTER","CREATE_IDENTITY","UPDATE_IDENTITY","EDIT_GROUP","ENABLE","DISABLE","UNLOCK","CHANGE_PASSWORD"]},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"userName"},"transform":{"type":"object","description":"The transform to apply to the field","example":{"type":"rule","attributes":{"name":"Create Unique LDAP Attribute"}},"default":{}},"attributes":{"type":"object","description":"Attributes required for the transform","example":{"template":"${firstname}.${lastname}${uniqueCounter}","cloudMaxUniqueChecks":"50","cloudMaxSize":"20","cloudRequired":"true"}},"isRequired":{"type":"boolean","readOnly":true,"description":"Flag indicating whether or not the attribute is required.","default":false,"example":false},"type":{"type":"string","description":"The type of the attribute.","example":"string"},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","default":false,"example":false}}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/sources/{sourceId}/provisioning-policies/{usageType}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Partial update of Provisioning Policy","description":{"content":"This API selectively updates an existing Provisioning Policy using a JSONPatch payload.\nA token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":sourceId","provisioning-policies",":usageType"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id.","type":"text/plain"},"type":"any","value":"","key":"sourceId"},{"disabled":false,"description":{"content":"(Required) The type of ProvisioningPolicy usage.","type":"text/plain"},"type":"any","value":"","key":"usageType"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Partial update of Provisioning Policy + + + +This API selectively updates an existing Provisioning Policy using a JSONPatch payload. +A token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + +
        Path Parameters
        Request Body array required
        + +The JSONPatch payload used to update the schema. + +
          value object
          + +The value to be used for the operation, required for "add" and "replace" operations + +
        • anyOf
        • string
        • integer
        • anyOf
        • string
        • integer
        + +The ProvisioningPolicyDto was successfully updated. + +
        Schema
          fields object[]
        + +Client Error - Returned if the request body is invalid. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
        Schema
        + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
        Schema
        + +Internal Server Error - Returned if there is an unexpected error. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/update-public-identity-config.api.mdx b/docs/sailpoint-api-v3/update-public-identity-config.api.mdx new file mode 100644 index 000000000..0822ec8da --- /dev/null +++ b/docs/sailpoint-api-v3/update-public-identity-config.api.mdx @@ -0,0 +1,91 @@ +--- +id: update-public-identity-config +sidebar_label: Update the Public Identities Configuration +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updatePublicIdentityConfig","tags":["Public Identities Config"],"description":"Updates the publicly visible attributes of an identity available to request approvers for Access Requests and Certification Campaigns. A token with ORG ADMIN authority is required to call this API.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Details of up to 5 Identity attributes that will be publicly accessible for all Identities to anyone in the org.","properties":{"attributes":{"type":"array","description":"Up to 5 identity attributes that will be available to everyone in the org for all users in the org.","items":{"type":"object","description":"Used to map an attribute key for an Identity to its display name.","properties":{"key":{"type":"string","description":"The attribute key","example":"country"},"name":{"type":"string","description":"The attribute display name","example":"Country"}}}},"modified":{"nullable":true,"type":"string","description":"When this configuration was last modified.","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"modifiedBy":{"description":"The identity who last modified this configuration.","type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of identity.","example":"Thomas Edison"}}}}}}}},"responses":{"200":{"description":"Request succeeded.","content":{"application/json":{"schema":{"type":"object","description":"Details of up to 5 Identity attributes that will be publicly accessible for all Identities to anyone in the org.","properties":{"attributes":{"type":"array","description":"Up to 5 identity attributes that will be available to everyone in the org for all users in the org.","items":{"type":"object","description":"Used to map an attribute key for an Identity to its display name.","properties":{"key":{"type":"string","description":"The attribute key","example":"country"},"name":{"type":"string","description":"The attribute display name","example":"Country"}}}},"modified":{"nullable":true,"type":"string","description":"When this configuration was last modified.","format":"date-time","example":"2018-06-25T20:22:28.104Z"},"modifiedBy":{"description":"The identity who last modified this configuration.","type":"object","nullable":true,"properties":{"type":{"type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"description":"An enumeration of the types of DTOs supported within the IdentityNow infrastructure.","example":"IDENTITY"},"id":{"type":"string","description":"Identity id","example":"2c9180a46faadee4016fb4e018c20639"},"name":{"type":"string","description":"Human-readable display name of identity.","example":"Thomas Edison"}}}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"put","path":"/public-identities-config","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"attributes":[{"key":"country","name":"Country"}],"modified":"2018-06-25T20:22:28.104Z","modifiedBy":{"type":"IDENTITY","id":"2c9180a46faadee4016fb4e018c20639","name":"Thomas Edison"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Update the Public Identities Configuration","description":{"content":"Updates the publicly visible attributes of an identity available to request approvers for Access Requests and Certification Campaigns. A token with ORG ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["public-identities-config"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update the Public Identities Configuration + + + +Updates the publicly visible attributes of an identity available to request approvers for Access Requests and Certification Campaigns. A token with ORG ADMIN authority is required to call this API. + +
        Request Body required
          attributes object[]
          + +Up to 5 identity attributes that will be available to everyone in the org for all users in the org. + +
          modifiedBy object
          + +The identity who last modified this configuration. + +
        + +Request succeeded. + +
        Schema
          attributes object[]
          + +Up to 5 identity attributes that will be available to everyone in the org for all users in the org. + +
          modifiedBy object
          + +The identity who last modified this configuration. + +
        + +Client Error - Returned if the request body is invalid. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
        Schema
        + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
        Schema
        + +Internal Server Error - Returned if there is an unexpected error. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/update-schema.api.mdx b/docs/sailpoint-api-v3/update-schema.api.mdx new file mode 100644 index 000000000..21aaf87e4 --- /dev/null +++ b/docs/sailpoint-api-v3/update-schema.api.mdx @@ -0,0 +1,107 @@ +--- +id: update-schema +sidebar_label: Update Source Schema (Partial) +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updateSchema","tags":["Sources"],"description":"This API can be used to selectively update an existing Schema using a JSONPatch payload. Some fields of the Schema cannot be updated. These fields are listed below.\n* id\n* name\n* created\n* modified","parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source id.","example":"2c9180835d191a86015d28455b4a2329"},{"in":"path","name":"schemaId","schema":{"type":"string"},"required":true,"description":"The Schema id.","example":"2c9180835d191a86015d28455b4a2329"}],"requestBody":{"required":true,"description":"The JSONPatch payload used to update the schema.","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}}}}},"responses":{"200":{"description":"The Schema was successfully updated.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Schema.","example":"2c9180835d191a86015d28455b4a2329"},"name":{"type":"string","description":"The name of the Schema.","example":"account"},"nativeObjectType":{"type":"string","description":"The name of the object type on the native system that the schema represents.","example":"User"},"identityAttribute":{"type":"string","description":"The name of the attribute used to calculate the unique identifier for an object in the schema.","example":"sAMAccountName"},"displayAttribute":{"type":"string","description":"The name of the attribute used to calculate the display value for an object in the schema.","example":"distinguishedName"},"hierarchyAttribute":{"type":"string","description":"The name of the attribute whose values represent other objects in a hierarchy. Only relevant to group schemas.","example":"memberOf"},"includePermissions":{"type":"boolean","description":"Flag indicating whether or not the include permissions with the object data when aggregating the schema.","example":false},"features":{"type":"array","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"description":"The features that the schema supports.","example":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"]},"configuration":{"type":"object","description":"Holds any extra configuration data that the schema may require.","example":{"groupMemberAttribute":"member"}},"attributes":{"type":"array","description":"The attribute definitions which form the schema.","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"sAMAccountName"},"type":{"description":"The type of the attribute.","example":"string","type":"string","enum":["STRING","LONG","INT","BOOLEAN"]},"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"A reference to the schema on the source to which the values of the attribute map.","example":{"type":"CONNECTOR_SCHEMA","id":"2c9180866166b5b0016167c32ef31a66","name":"group"}},"description":{"type":"string","description":"A human-readable description of the attribute."},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","example":false},"isEntitlement":{"type":"boolean","description":"Flag indicating whether or not the attribute is an entitlement.","example":false},"isGroup":{"type":"boolean","description":"Flag indicating whether or not the attribute represents a group.","example":false,"readOnly":true}}},"example":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}]},"created":{"type":"string","description":"The date the Schema was created.","format":"date-time","example":"2019-12-24T22:32:58.104Z"},"modified":{"type":"string","description":"The date the Schema was last modified.","format":"date-time","example":"2019-12-31T20:22:28.104Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/sources/{sourceId}/schemas/{schemaId}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Update Source Schema (Partial)","description":{"content":"This API can be used to selectively update an existing Schema using a JSONPatch payload. Some fields of the Schema cannot be updated. These fields are listed below.\n* id\n* name\n* created\n* modified","type":"text/plain"},"url":{"path":["sources",":sourceId","schemas",":schemaId"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id.","type":"text/plain"},"type":"any","value":"","key":"sourceId"},{"disabled":false,"description":{"content":"(Required) The Schema id.","type":"text/plain"},"type":"any","value":"","key":"schemaId"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Source Schema (Partial) + + + +This API can be used to selectively update an existing Schema using a JSONPatch payload. Some fields of the Schema cannot be updated. These fields are listed below. +* id +* name +* created +* modified + +
        Path Parameters
        Request Body array required
        + +The JSONPatch payload used to update the schema. + +
          value object
          + +The value to be used for the operation, required for "add" and "replace" operations + +
        • anyOf
        • string
        • integer
        • anyOf
        • string
        • integer
        + +The Schema was successfully updated. + +
        Schema
          attributes object[]
          + +The attribute definitions which form the schema. + +
          schema object
          + +A reference to the schema on the source to which the values of the attribute map. + +
        + +Client Error - Returned if the request body is invalid. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
        Schema
        + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
        Schema
        + +Internal Server Error - Returned if there is an unexpected error. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/update-service-desk-integration.api.mdx b/docs/sailpoint-api-v3/update-service-desk-integration.api.mdx new file mode 100644 index 000000000..c7216c20c --- /dev/null +++ b/docs/sailpoint-api-v3/update-service-desk-integration.api.mdx @@ -0,0 +1,147 @@ +--- +id: update-service-desk-integration +sidebar_label: Update a Service Desk integration by ID +hide_title: true +hide_table_of_contents: true +api: {"tags":["Service Desk Integration"],"description":"Update an existing Service Desk integration by ID with updated value in JSON form as the request body. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","operationId":"updateServiceDeskIntegration","parameters":[{"name":"id","in":"path","description":"ID of the Service Desk integration to update","required":true,"style":"simple","explode":false,"schema":{"type":"string","example":"anId"}}],"requestBody":{"description":"The specifics of the integration to update","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true},"modified":{"description":"Last modification date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true}}},{"type":"object","description":"Specification of a Service Desk integration","required":["description","type","attributes"],"properties":{"description":{"description":"Description of the Service Desk integration","type":"string","example":"A very nice Service Desk integration"},"type":{"description":"Type of the Service Desk integration","type":"string","default":"ServiceNowSDIM"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the identity that is the owner of this Service Desk integration","default":{"type":"IDENTITY"}},"clusterRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the source cluster for this Service Desk integration","default":{"type":"CLUSTER"}},"cluster":{"description":"ID of the cluster for the Service Desk integration (replaced by clusterRef, retained for backward compatibility)","type":"string","example":"xyzzy999","deprecated":true},"managedSources":{"description":"Source IDs for the Service Desk integration (replaced by provisioningConfig.managedSResourceRefs, but retained here for backward compatibility)","type":"array","items":{"type":"string"},"deprecated":true},"provisioningConfig":{"description":"The 'provisioningConfig' property specifies the configuration used to provision integrations.","type":"object","properties":{"universalManager":{"description":"Specifies whether this configuration is used to manage provisioning requests for all sources from the org. If true, no managedResourceRefs are allowed.","type":"boolean","readOnly":true},"managedResourceRefs":{"description":"References to sources for the Service Desk integration template. May only be specified if universalManager is false.","type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"default":{"type":"SOURCE"}}},"planInitializerScript":{"description":"This is a reference to a plan initializer script.","type":"object","properties":{"source":{"description":"This is a Rule that allows provisioning instruction changes.","type":"string"}}}}},"attributes":{"description":"Attributes of the Service Desk integration. Validation constraints enforced by the implementation.","type":"object","additionalProperties":true},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to beforeProvisioningRule for this Service Desk integration","default":{"type":"RULE"}}}}]}}},"required":true},"responses":{"200":{"description":"ServiceDeskIntegrationDto as updated","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["name"],"properties":{"id":{"description":"System-generated unique ID of the Object","type":"string","example":"id12345","readOnly":true},"name":{"description":"Name of the Object","type":"string","example":"aName"},"created":{"description":"Creation date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true},"modified":{"description":"Last modification date of the Object","type":"string","example":"2015-05-28T14:07:17Z","format":"date-time","readOnly":true}}},{"type":"object","description":"Specification of a Service Desk integration","required":["description","type","attributes"],"properties":{"description":{"description":"Description of the Service Desk integration","type":"string","example":"A very nice Service Desk integration"},"type":{"description":"Type of the Service Desk integration","type":"string","default":"ServiceNowSDIM"},"ownerRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the identity that is the owner of this Service Desk integration","default":{"type":"IDENTITY"}},"clusterRef":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the source cluster for this Service Desk integration","default":{"type":"CLUSTER"}},"cluster":{"description":"ID of the cluster for the Service Desk integration (replaced by clusterRef, retained for backward compatibility)","type":"string","example":"xyzzy999","deprecated":true},"managedSources":{"description":"Source IDs for the Service Desk integration (replaced by provisioningConfig.managedSResourceRefs, but retained here for backward compatibility)","type":"array","items":{"type":"string"},"deprecated":true},"provisioningConfig":{"description":"The 'provisioningConfig' property specifies the configuration used to provision integrations.","type":"object","properties":{"universalManager":{"description":"Specifies whether this configuration is used to manage provisioning requests for all sources from the org. If true, no managedResourceRefs are allowed.","type":"boolean","readOnly":true},"managedResourceRefs":{"description":"References to sources for the Service Desk integration template. May only be specified if universalManager is false.","type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"default":{"type":"SOURCE"}}},"planInitializerScript":{"description":"This is a reference to a plan initializer script.","type":"object","properties":{"source":{"description":"This is a Rule that allows provisioning instruction changes.","type":"string"}}}}},"attributes":{"description":"Attributes of the Service Desk integration. Validation constraints enforced by the implementation.","type":"object","additionalProperties":true},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to beforeProvisioningRule for this Service Desk integration","default":{"type":"RULE"}}}}]}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:service-desk-admin:write","idn:service-desk-integration:write"]}],"method":"put","path":"/service-desk-integrations/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"name":"aName","description":"A very nice Service Desk integration","type":"ServiceNowSDIM","ownerRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"clusterRef":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"},"provisioningConfig":{"managedResourceRefs":[{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}],"planInitializerScript":{"source":"string"}},"attributes":{},"beforeProvisioningRule":{"type":"IDENTITY","id":"2c91808568c529c60168cca6f90c1313","name":"William Wilson"}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Update a Service Desk integration by ID","description":{"content":"Update an existing Service Desk integration by ID with updated value in JSON form as the request body. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","type":"text/plain"},"url":{"path":["service-desk-integrations",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the Service Desk integration to update","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update a Service Desk integration by ID + + + +Update an existing Service Desk integration by ID with updated value in JSON form as the request body. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + +
        Path Parameters
        Request Body required
        + +The specifics of the integration to update + +
          ownerRef object
          + +Reference to the identity that is the owner of this Service Desk integration + +
          clusterRef object
          + +Reference to the source cluster for this Service Desk integration + +
          provisioningConfig object
          + +The 'provisioningConfig' property specifies the configuration used to provision integrations. + +
          managedResourceRefs object[]
          + +References to sources for the Service Desk integration template. May only be specified if universalManager is false. + +
          planInitializerScript object
          + +This is a reference to a plan initializer script. + +
          attributes object
          + +Attributes of the Service Desk integration. Validation constraints enforced by the implementation. + +
          beforeProvisioningRule object
          + +Reference to beforeProvisioningRule for this Service Desk integration + +
        + +ServiceDeskIntegrationDto as updated + +
        Schema
          ownerRef object
          + +Reference to the identity that is the owner of this Service Desk integration + +
          clusterRef object
          + +Reference to the source cluster for this Service Desk integration + +
          provisioningConfig object
          + +The 'provisioningConfig' property specifies the configuration used to provision integrations. + +
          managedResourceRefs object[]
          + +References to sources for the Service Desk integration template. May only be specified if universalManager is false. + +
          planInitializerScript object
          + +This is a reference to a plan initializer script. + +
          attributes object
          + +Attributes of the Service Desk integration. Validation constraints enforced by the implementation. + +
          beforeProvisioningRule object
          + +Reference to beforeProvisioningRule for this Service Desk integration + +
        + +Client Error - Returned if the request body is invalid. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
        Schema
        + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
        Schema
        + +Internal Server Error - Returned if there is an unexpected error. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/update-source.api.mdx b/docs/sailpoint-api-v3/update-source.api.mdx new file mode 100644 index 000000000..abd6a2b8b --- /dev/null +++ b/docs/sailpoint-api-v3/update-source.api.mdx @@ -0,0 +1,152 @@ +--- +id: update-source +sidebar_label: Update Source (Partial) +hide_title: true +hide_table_of_contents: true +api: {"operationId":"updateSource","tags":["Sources"],"description":"This API partially updates a source in IdentityNow, using a list of patch operations according to the\n[JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\n\nSome fields are immutable and cannot be changed, such as:\n\n* id\n* type\n* authoritative\n* created\n* modified\n* connector\n* connectorClass\n* passwordPolicies\n\nAttempts to modify these fields will result in a 400 error.\n\nA token with ORG_ADMIN, SOURCE_ADMIN, SOURCE_SUBADMIN, or API authority is required to call this API.\n","parameters":[{"in":"path","name":"id","schema":{"type":"string"},"required":true,"description":"The Source id","example":"2c9180835d191a86015d28455b4a2329"}],"requestBody":{"required":true,"description":"A list of account update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. Any password changes are submitted as plain-text and encrypted upon receipt in IdentityNow.","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"type":"object","description":"A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902)","required":["op","path"],"properties":{"op":{"type":"string","description":"The operation to be performed","enum":["add","remove","replace","move","copy","test"],"example":"replace"},"path":{"type":"string","description":"A string JSON Pointer representing the target path to an element to be affected by the operation","example":"/description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"object"}]}}],"description":"The value to be used for the operation, required for \"add\" and \"replace\" operations","example":"New description"}}}},"examples":{"Edit the source description":{"description":"This example shows how to edit a source description.","value":[{"op":"replace","path":"/description","value":"new description"}]},"Edit the source cluster":{"description":"This example shows how to edit a source cluster by id.","value":[{"op":"replace","path":"/cluster/id","value":"2c918087813a902001813f3f85736b45"}]},"Edit source features":{"description":"This example illustrates how you can update source supported features","value":[{"op":"replace","path":"/features","value":["PASSWORD","PROVISIONING","ENABLE","AUTHENTICATE"]}]},"Change a source description and cluster in One Call":{"description":"This example shows how multiple fields may be updated with a single patch call.","value":[{"op":"replace","path":"/description","value":"new description"},{"op":"replace","path":"/cluster/id","value":"2c918087813a902001813f3f85736b45"}]},"Add a filter string to the connector":{"description":"This example shows how you can add a filter to incoming accounts during the account aggregation process. In the example below, any account that does not have an \"m\" or \"d\" in the id will be aggregated.","value":[{"op":"add","path":"/connectorAttributes/filterString","value":"!( id.contains( \"m\" ) ) || !( id.contains( \"d\" ) )"}]},"Update connector attribute for specific operation type":{"description":"This example shows how you can update the 3rd object in the connection parameters operationType. This will change it from a standard group aggregation to a group aggregation on the \"test\" entitlement type","value":[{"op":"replace","path":"/connectorAttributes/connectionParameters/2/operationType","value":"Group Aggregation-test"}]}}}}},"responses":{"200":{"description":"Updated Source object. Any passwords will only show the the encrypted cipher-text, as they are not decrypt-able in IdentityNow cloud-based services, per IdentityNow security design.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"the id of the Source","example":"2c91808568c529c60168cca6f90c1324"},"description":{"type":"string","description":"Human-readable description of the source","example":"This is the corporate directory."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to an owning Identity Object"},"cluster":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the associated Cluster","example":{"type":"CLUSTER","id":"2c9180866166b5b0016167c32ef31a66","name":"Corporate Cluster"}},"accountCorrelationConfig":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Correlation Config object","example":{"type":"ACCOUNT_CORRELATION_CONFIG","id":"2c9180855d191c59015d28583727245a","name":"Directory [source-62867] Account Correlation"}},"accountCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used."},"managerCorrelationMapping":{"description":"Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity","type":"object","properties":{"accountAttribute":{"type":"string","description":"Name of the attribute to use for manager correlation. The value found on the account attribute will be used to lookup the manager's identity.","example":"manager"},"identityAttribute":{"type":"string","description":"Name of the identity attribute to search when trying to find a manager using the value from the accountAttribute.","example":"manager"}}},"managerCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient."},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called."},"schemas":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to Schema objects","example":[{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232a","name":"account"},{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232b","name":"group"}]},"passwordPolicies":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to the associated PasswordPolicy objects.","example":[{"type":"PASSWORD_POLICY","id":"2c9180855d191c59015d291ceb053980","name":"Corporate Password Policy"}]},"features":{"type":"array","description":"Optional features that can be supported by a source.","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"example":["SYNC_PROVISIONING","MANAGER_LOOKUP","SEARCH","PROVISIONING","AUTHENTICATE","GROUP_PROVISIONING","PASSWORD"]},"type":{"type":"string","description":"Specifies the type of system being managed e.g. Active Directory, Workday, etc..","example":"OpenLDAP - Direct"},"connector":{"type":"string","description":"Connector script name.","example":"active-directory"},"connectorClass":{"type":"string","description":"The fully qualified name of the Java class that implements the connector interface.","example":"sailpoint.connector.LDAPConnector"},"connectorAttributes":{"type":"object","description":"Connector specific configuration; will differ from type to type.","example":{"healthCheckTimeout":30,"authSearchAttributes":["cn","uid","mail"]}},"deleteThreshold":{"type":"integer","format":"int32","description":"Number from 0 to 100 that specifies when to skip the delete phase.","example":10},"authoritative":{"type":"boolean","description":"When true indicates the source is referenced by an IdentityProfile.","example":false},"managementWorkgroup":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to Management Workgroup for this Source"},"healthy":{"type":"boolean","description":"When true indicates a healthy source","example":true},"status":{"type":"string","description":"A status identifier, giving specific information on why a source is healthy or not","example":"SOURCE_STATE_HEALTHY"},"since":{"type":"string","description":"Timestamp showing when a source health check was last performed","example":"2021-09-28T15:48:29.3801666300Z"},"connectorId":{"type":"string","description":"The id of connector","example":"active-directory"},"connectorName":{"type":"string","description":"The name of the connector that was chosen on source creation","example":"Active Directory"},"connectionType":{"type":"string","description":"The type of connection (direct or file)","example":"file"},"connectorImplementstionId":{"type":"string","description":"The connector implementstion id","example":"delimited-file"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"patch","path":"/sources/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":[{"op":"replace","path":"/description","value":"New description"}],"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Update Source (Partial)","description":{"content":"This API partially updates a source in IdentityNow, using a list of patch operations according to the\n[JSON Patch](https://tools.ietf.org/html/rfc6902) standard.\n\nSome fields are immutable and cannot be changed, such as:\n\n* id\n* type\n* authoritative\n* created\n* modified\n* connector\n* connectorClass\n* passwordPolicies\n\nAttempts to modify these fields will result in a 400 error.\n\nA token with ORG_ADMIN, SOURCE_ADMIN, SOURCE_SUBADMIN, or API authority is required to call this API.\n","type":"text/plain"},"url":{"path":["sources",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json-patch+json"},{"key":"Accept","value":"application/json"}],"method":"PATCH","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "patch api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update Source (Partial) + + + +This API partially updates a source in IdentityNow, using a list of patch operations according to the +[JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + +Some fields are immutable and cannot be changed, such as: + +* id +* type +* authoritative +* created +* modified +* connector +* connectorClass +* passwordPolicies + +Attempts to modify these fields will result in a 400 error. + +A token with ORG_ADMIN, SOURCE_ADMIN, SOURCE_SUBADMIN, or API authority is required to call this API. + + +
        Path Parameters
        Request Body array required
        + +A list of account update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. Any password changes are submitted as plain-text and encrypted upon receipt in IdentityNow. + +
          value object
          + +The value to be used for the operation, required for "add" and "replace" operations + +
        • anyOf
        • string
        • integer
        • anyOf
        • string
        • integer
        + +Updated Source object. Any passwords will only show the the encrypted cipher-text, as they are not decrypt-able in IdentityNow cloud-based services, per IdentityNow security design. + +
        Schema
          owner object
          + +Reference to an owning Identity Object + +
          cluster object
          + +Reference to the associated Cluster + +
          accountCorrelationConfig object
          + +Reference to a Correlation Config object + +
          accountCorrelationRule object
          + +Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used. + +
          managerCorrelationMapping object
          + +Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity + +
          managerCorrelationRule object
          + +Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient. + +
          beforeProvisioningRule object
          + +Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called. + +
          schemas object[]
          + +List of references to Schema objects + +
          passwordPolicies object[]
          + +List of references to the associated PasswordPolicy objects. + +
          managementWorkgroup object
          + +Reference to Management Workgroup for this Source + +
        + +Client Error - Returned if the request body is invalid. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
        Schema
        + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
        Schema
        + +Internal Server Error - Returned if there is an unexpected error. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/update-status-check-details.api.mdx b/docs/sailpoint-api-v3/update-status-check-details.api.mdx new file mode 100644 index 000000000..54b4bb886 --- /dev/null +++ b/docs/sailpoint-api-v3/update-status-check-details.api.mdx @@ -0,0 +1,91 @@ +--- +id: update-status-check-details +sidebar_label: Update the time check configuration of queued SDIM tickets +hide_title: true +hide_table_of_contents: true +api: {"tags":["Service Desk Integration"],"description":"Update the time check configuration of queued SDIM tickets. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","operationId":"updateStatusCheckDetails","requestBody":{"description":"the modified time check configuration","content":{"application/json":{"schema":{"description":"Configuration of maximum number days and interval for checking Service Desk integration queue status","required":["provisioningStatusCheckIntervalMinutes","provisioningMaxStatusCheckDays"],"type":"object","properties":{"provisioningStatusCheckIntervalMinutes":{"description":"interval in minutes between status checks","type":"string","example":30},"provisioningMaxStatusCheckDays":{"description":"maximum number of days to check","type":"string","example":2}}}}},"required":true},"responses":{"200":{"description":"QueuedCheckConfigDetails as updated","content":{"application/json":{"schema":{"description":"Configuration of maximum number days and interval for checking Service Desk integration queue status","required":["provisioningStatusCheckIntervalMinutes","provisioningMaxStatusCheckDays"],"type":"object","properties":{"provisioningStatusCheckIntervalMinutes":{"description":"interval in minutes between status checks","type":"string","example":30},"provisioningMaxStatusCheckDays":{"description":"maximum number of days to check","type":"string","example":2}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:service-desk-admin:write","idn:service-desk-integration:write"]}],"method":"put","path":"/service-desk-integrations/status-check-configuration","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"provisioningStatusCheckIntervalMinutes":30,"provisioningMaxStatusCheckDays":2},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Update the time check configuration of queued SDIM tickets","description":{"content":"Update the time check configuration of queued SDIM tickets. A token with Org Admin or Service Desk Admin authority is required to access this endpoint.","type":"text/plain"},"url":{"path":["service-desk-integrations","status-check-configuration"],"host":["{{baseUrl}}"],"query":[],"variable":[]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update the time check configuration of queued SDIM tickets + + + +Update the time check configuration of queued SDIM tickets. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + +
        Request Body required
        + +the modified time check configuration + +
        + +QueuedCheckConfigDetails as updated + +
        Schema
        + +Client Error - Returned if the request body is invalid. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
        Schema
        + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
        Schema
        + +Internal Server Error - Returned if there is an unexpected error. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/update-transform.api.mdx b/docs/sailpoint-api-v3/update-transform.api.mdx new file mode 100644 index 000000000..3d3dc0a34 --- /dev/null +++ b/docs/sailpoint-api-v3/update-transform.api.mdx @@ -0,0 +1,904 @@ +--- +id: update-transform +sidebar_label: Update a transform +hide_title: true +hide_table_of_contents: true +api: {"tags":["Transforms"],"description":"Replaces the transform specified by the given ID with the transform provided in the request body. Only the \"attributes\" field is mutable. Attempting to change other properties (ex. \"name\" and \"type\") will result in an error.\nA token with transform write authority is required to call this API.","operationId":"updateTransform","parameters":[{"name":"id","in":"path","description":"ID of the transform to update","required":true,"style":"simple","explode":false,"schema":{"type":"string"}}],"requestBody":{"description":"The updated transform object (must include \"name\", \"type\", and \"attributes\" fields).","content":{"application/json":{"schema":{"type":"object","description":"The representation of an internally- or customer-defined transform.","required":["name","type","attributes"],"properties":{"id":{"type":"string","readOnly":true,"description":"Unique ID of this transform","example":"2cd78adghjkja34jh2b1hkjhasuecd"},"name":{"type":"string","description":"Unique name of this transform","example":"Timestamp To Date"},"type":{"type":"string","description":"The type of transform operation","enum":["accountAttribute","base64Decode","base64Encode","concat","conditional","dateCompare","dateFormat","dateMath","decomposeDiacriticalMarks","e164phone","firstValid","rule","identityAttribute","indexOf","iso3166","lastIndexOf","leftPad","lookup","lower","normalizeNames","randomAlphaNumeric","randomNumeric","reference","replaceAll","replace","rightPad","split","static","substring","trim","upper","usernameGenerator","uuid"],"example":"dateFormat","externalDocs":{"description":"Transform Operations","url":"https://developer.sailpoint.com/docs/transforms/transform_operations/transform_operations.html#transform-operations"}},"attributes":{"description":"Meta-data about the transform. Values in this list are specific to the type of transform to be executed.","oneOf":[{"title":"accountAttribute","type":"object","required":["sourceName","attributeName"],"properties":{"sourceName":{"type":"string","description":"A reference to the source to search for the account","example":"Workday"},"attributeName":{"type":"string","description":"The name of the attribute on the account to return. This should match the name of the account attribute name visible in the user interface, or on the source schema.","example":"DEPARTMENT"},"accountSortAttribute":{"type":"string","description":"The value of this configuration is a string name of the attribute to use when determining the ordering of returned accounts when there are multiple entries","example":"created"},"accountSortDescending":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls the order of the sort when there are multiple accounts. If not defined, the transform will default to false (ascending order)","example":false},"accountReturnFirstLink":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls which account to source a value from for an attribute. If this flag is set to true, the transform returns the value from the first account in the list, even if it is null. If it is set to false, the transform returns the first non-null value. If not defined, the transform will default to false","example":false},"accountFilter":{"type":"string","description":"This expression queries the database to narrow search results. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the database. The default filter will always include the source and identity, and any subsequent expressions will be combined in an AND operation to the existing search criteria.\n\nOnly certain searchable attributes are available:
        - `nativeIdentity` - the Account ID
        - `displayName` - the Account Name
        - `entitlements` - a boolean value to determine if the account has entitlements","example":"!(nativeIdentity.startsWith(\"*DELETED*\"))"},"accountPropertyFilter":{"type":"string","description":"This expression is used to search and filter accounts in memory. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the returned resultset.\n\nAll account attributes are available for filtering as this operation is performed in memory.","example":"(groups.containsAll({'Admin'}) || location == 'Austin')"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"base64Decode","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"base64Encode","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"concat","type":"object","required":["values"],"properties":{"values":{"type":"array","items":{"type":"object"},"description":"An array of items to join together","example":["John"," ","Smith"]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"conditional","type":"object","required":["expression","positiveCondition","negativeCondition"],"properties":{"expression":{"type":"string","description":"A comparison statement that follows the structure of `ValueA eq ValueB` where `ValueA` and `ValueB` are static strings or outputs of other transforms. \n\nThe `eq` operator is the only valid comparison","example":"ValueA eq ValueB"},"positiveCondition":{"type":"string","description":"The output of the transform if the expression evalutes to true","example":"true"},"negativeCondition":{"type":"string","description":"The output of the transform if the expression evalutes to false","example":"false"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateCompare","type":"object","required":["firstDate","secondDate","operator","positiveCondition","negativeCondition"],"properties":{"firstDate":{"description":"This is the first date to consider (The date that would be on the left hand side of the comparison operation).","oneOf":[{"title":"accountAttribute","type":"object","required":["sourceName","attributeName"],"properties":{"sourceName":{"type":"string","description":"A reference to the source to search for the account","example":"Workday"},"attributeName":{"type":"string","description":"The name of the attribute on the account to return. This should match the name of the account attribute name visible in the user interface, or on the source schema.","example":"DEPARTMENT"},"accountSortAttribute":{"type":"string","description":"The value of this configuration is a string name of the attribute to use when determining the ordering of returned accounts when there are multiple entries","example":"created"},"accountSortDescending":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls the order of the sort when there are multiple accounts. If not defined, the transform will default to false (ascending order)","example":false},"accountReturnFirstLink":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls which account to source a value from for an attribute. If this flag is set to true, the transform returns the value from the first account in the list, even if it is null. If it is set to false, the transform returns the first non-null value. If not defined, the transform will default to false","example":false},"accountFilter":{"type":"string","description":"This expression queries the database to narrow search results. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the database. The default filter will always include the source and identity, and any subsequent expressions will be combined in an AND operation to the existing search criteria.\n\nOnly certain searchable attributes are available:
        - `nativeIdentity` - the Account ID
        - `displayName` - the Account Name
        - `entitlements` - a boolean value to determine if the account has entitlements","example":"!(nativeIdentity.startsWith(\"*DELETED*\"))"},"accountPropertyFilter":{"type":"string","description":"This expression is used to search and filter accounts in memory. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the returned resultset.\n\nAll account attributes are available for filtering as this operation is performed in memory.","example":"(groups.containsAll({'Admin'}) || location == 'Austin')"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateFormat","type":"object","properties":{"inputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"outputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}}]},"secondDate":{"description":"This is the second date to consider (The date that would be on the right hand side of the comparison operation).","oneOf":[{"title":"accountAttribute","type":"object","required":["sourceName","attributeName"],"properties":{"sourceName":{"type":"string","description":"A reference to the source to search for the account","example":"Workday"},"attributeName":{"type":"string","description":"The name of the attribute on the account to return. This should match the name of the account attribute name visible in the user interface, or on the source schema.","example":"DEPARTMENT"},"accountSortAttribute":{"type":"string","description":"The value of this configuration is a string name of the attribute to use when determining the ordering of returned accounts when there are multiple entries","example":"created"},"accountSortDescending":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls the order of the sort when there are multiple accounts. If not defined, the transform will default to false (ascending order)","example":false},"accountReturnFirstLink":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls which account to source a value from for an attribute. If this flag is set to true, the transform returns the value from the first account in the list, even if it is null. If it is set to false, the transform returns the first non-null value. If not defined, the transform will default to false","example":false},"accountFilter":{"type":"string","description":"This expression queries the database to narrow search results. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the database. The default filter will always include the source and identity, and any subsequent expressions will be combined in an AND operation to the existing search criteria.\n\nOnly certain searchable attributes are available:
        - `nativeIdentity` - the Account ID
        - `displayName` - the Account Name
        - `entitlements` - a boolean value to determine if the account has entitlements","example":"!(nativeIdentity.startsWith(\"*DELETED*\"))"},"accountPropertyFilter":{"type":"string","description":"This expression is used to search and filter accounts in memory. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the returned resultset.\n\nAll account attributes are available for filtering as this operation is performed in memory.","example":"(groups.containsAll({'Admin'}) || location == 'Austin')"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateFormat","type":"object","properties":{"inputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"outputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}}]},"operator":{"type":"string","description":"This is the comparison to perform.\n| Operation | Description |\n| --------- | ------- |\n| LT | Strictly less than: firstDate < secondDate |\n| LTE | Less than or equal to: firstDate <= secondDate |\n| GT | Strictly greater than: firstDate > secondDate |\n| GTE | Greater than or equal to: firstDate >= secondDate |\n","enum":["LT","LTE","GT","GTE"],"example":"LT"},"positiveCondition":{"type":"string","description":"The output of the transform if the expression evalutes to true","example":"true"},"negativeCondition":{"type":"string","description":"The output of the transform if the expression evalutes to false","example":false},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateFormat","type":"object","properties":{"inputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"outputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateMath","type":"object","required":["expression"],"properties":{"expression":{"type":"string","description":"A string value of the date and time components to operation on, along with the math operations to execute.\n","externalDocs":{"description":"Date Math Expressions","url":"https://developer.sailpoint.com/docs/transforms/transform_operations/operations/date_math.html#transform-structure"},"example":"now+1w"},"roundUp":{"type":"boolean","description":"A boolean value to indicate whether the transform should round up or down when a rounding `/` operation is defined in the expression. \n\n\nIf not provided, the transform will default to `false`\n\n\n`true` indicates the transform should round up (i.e., truncate the fractional date/time component indicated and then add one unit of that component)\n\n\n`false` indicates the transform should round down (i.e., truncate the fractional date/time component indicated)\n","example":false},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"decomposeDiacriticalMarks","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"e164phone","type":"object","properties":{"defaultRegion":{"type":"string","description":"This is an optional attribute that can be used to define the region of the phone number to format into.\n\n\nIf defaultRegion is not provided, it will take US as the default country.\n\n\nThe format of the country code should be in [ISO 3166-1 alpha-2 format](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)\n","example":"US"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"firstValid","type":"object","required":["values"],"properties":{"values":{"type":"array","items":{"type":"object"},"description":"An array of attributes to evaluate for existence.","example":[{"attributes":{"sourceName":"Active Directory","attributeName":"sAMAccountName"},"type":"accountAttribute"},{"attributes":{"sourceName":"Okta","attributeName":"login"},"type":"accountAttribute"},{"attributes":{"sourceName":"HR Source","attributeName":"employeeID"},"type":"accountAttribute"}]},"ignoreErrors":{"type":"boolean","description":"a true or false value representing to move on to the next option if an error (like an Null Pointer Exception) were to occur.","example":false},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false}}},{"title":"rule","oneOf":[{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"This is the name of the Generic rule that needs to be invoked by the transform","example":"Generic Calculation Rule"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false}}},{"type":"object","required":["name","operation","includeNumbers","includeSpecialChars","length"],"properties":{"name":{"type":"string","description":"This must always be set to \"Cloud Services Deployment Utility\"","example":"Cloud Services Deployment Utility"},"operation":{"type":"string","description":"The operation to perform `generateRandomString`","example":"generateRandomString"},"includeNumbers":{"type":"boolean","description":"This must be either \"true\" or \"false\" to indicate whether the generator logic should include numbers","example":true},"includeSpecialChars":{"type":"boolean","description":"This must be either \"true\" or \"false\" to indicate whether the generator logic should include special characters","example":true},"length":{"type":"string","description":"This specifies how long the randomly generated string needs to be\n\n\n>NOTE Due to identity attribute data constraints, the maximum allowable value is 450 characters\n","example":"10"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false}}},{"type":"object","required":["name","operation","uid"],"properties":{"name":{"type":"string","description":"This must always be set to \"Cloud Services Deployment Utility\"","example":"Cloud Services Deployment Utility"},"operation":{"type":"string","description":"The operation to perform `getReferenceIdentityAttribute`","example":"getReferenceIdentityAttribute"},"uid":{"type":"string","description":"This is the SailPoint User Name (uid) value of the identity whose attribute is desired\n\nAs a convenience feature, you can use the `manager` keyword to dynamically look up the user's manager and then get that manager's identity attribute.\n","example":"2c91808570313110017040b06f344ec9"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false}}}]},{"title":"identityAttribute","type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The system (camel-cased) name of the identity attribute to bring in","example":"email"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"indexOf","type":"object","required":["substring"],"properties":{"substring":{"type":"string","description":"A substring to search for, searches the entire calling string, and returns the index of the first occurrence of the specified substring.","example":"admin_"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"iso3166","type":"object","properties":{"format":{"type":"string","description":"An optional value to denote which ISO 3166 format to return. Valid values are:\n\n\n`alpha2` - Two-character country code (e.g., \"US\"); this is the default value if no format is supplied\n\n\n`alpha3` - Three-character country code (e.g., \"USA\")\n\n\n`numeric` - The numeric country code (e.g., \"840\")\n","example":"alpha2"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"leftPad","type":"object","required":["length"],"properties":{"length":{"type":"string","description":"An integer value for the desired length of the final output string","example":"4"},"padding":{"type":"string","description":"A string value representing the character that the incoming data should be padded with to get to the desired length\n\n\nIf not provided, the transform will default to a single space (\" \") character for padding\n","example":"0"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"lookup","type":"object","required":["table"],"properties":{"table":{"type":"object","additionalProperties":true,"description":"This is a JSON object of key-value pairs. The key is the string that will attempt to be matched to the input, and the value is the output string that should be returned if the key is matched\n\n\n>**Note** the use of the optional default key value here; if none of the three countries in the above example match the input string, the transform will return \"Unknown Region\" for the attribute that is mapped to this transform.\n","example":{"USA":"Americas","FRA":"EMEA","AUS":"APAC","default":"Unknown Region"}},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"lower","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"nameNormalizer","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"randomAlphaNumeric","type":"object","properties":{"length":{"type":"string","description":"This is an integer value specifying the size/number of characters the random string must contain\n\n\n* This value must be a positive number and cannot be blank\n\n\n* If no length is provided, the transform will default to a value of `32`\n\n\n* Due to identity attribute data constraints, the maximum allowable value is `450` characters\n","example":"10"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"randomNumeric","type":"object","properties":{"length":{"type":"string","description":"This is an integer value specifying the size/number of characters the random string must contain\n\n\n* This value must be a positive number and cannot be blank\n\n\n* If no length is provided, the transform will default to a value of `32`\n\n\n* Due to identity attribute data constraints, the maximum allowable value is `450` characters\n","example":"10"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"reference","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"This ID specifies the name of the pre-existing transform which you want to use within your current transform","example":"Existing Transform"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"replaceAll","type":"object","required":["table"],"properties":{"table":{"type":"object","additionalProperties":true,"description":"An attribute of key-value pairs. Each pair identifies the pattern to search for as its key, and the replacement string as its value.","example":{"-":" ","\"":"'","ñ":"n"}},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"replace","type":"object","required":["regex","replacement"],"properties":{"regex":{"type":"string","description":"This can be a string or a regex pattern in which you want to replace.","example":"[^a-zA-Z]","externalDocs":{"description":"Regex Builder","url":"https://regex101.com/"}},"replacement":{"type":"string","description":"This is the replacement string that should be substituded wherever the string or pattern is found.","example":" "},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"rightPad","type":"object","required":["length"],"properties":{"length":{"type":"string","description":"An integer value for the desired length of the final output string","example":"4"},"padding":{"type":"string","description":"A string value representing the character that the incoming data should be padded with to get to the desired length\n\n\nIf not provided, the transform will default to a single space (\" \") character for padding\n","example":"0"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"split","type":"object","required":["delimiter","index"],"properties":{"delimiter":{"type":"string","description":"This can be either a single character or a regex expression, and is used by the transform to identify the break point between two substrings in the incoming data","example":","},"index":{"type":"string","description":"An integer value for the desired array element after the incoming data has been split into a list; the array is a 0-based object, so the first array element would be index 0, the second element would be index 1, etc.","example":"5"},"throws":{"type":"boolean","description":"A boolean (true/false) value which indicates whether an exception should be thrown and returned as an output when an index is out of bounds with the resultant array (i.e., the provided index value is larger than the size of the array)\n\n\n`true` - The transform should return \"IndexOutOfBoundsException\"\n\n\n`false` - The transform should return null\n\n\nIf not provided, the transform will default to false and return a null\n","example":true},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"static","type":"object","required":["values"],"properties":{"values":{"type":"string","description":"This must evaluate to a JSON string, either through a fixed value or through conditional logic using the Apache Velocity Template Language.","example":"string$variable","externalDocs":{"description":"Static Transform Documentation","url":"https://developer.sailpoint.com/docs/transforms/transform_operations/operations/static.html"}},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false}}},{"title":"substring","type":"object","required":["begin"],"properties":{"begin":{"type":"integer","description":"The index of the first character to include in the returned substring.\n\n\nIf `begin` is set to -1, the transform will begin at character 0 of the input data\n","example":1,"format":"int32"},"beginOffset":{"type":"integer","description":"This integer value is the number of characters to add to the begin attribute when returning a substring. \n\nThis attribute is only used if begin is not -1.\n","example":3,"format":"int32"},"end":{"type":"integer","description":"The index of the first character to exclude from the returned substring.\n\nIf end is -1 or not provided at all, the substring transform will return everything up to the end of the input string.\n","example":6,"format":"int32"},"endOffset":{"type":"integer","description":"This integer value is the number of characters to add to the end attribute when returning a substring. \n\nThis attribute is only used if end is provided and is not -1.\n","example":1,"format":"int32"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"trim","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"upper","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"uuid","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false}}}]},"internal":{"type":"boolean","readOnly":true,"description":"Indicates whether this is an internal SailPoint-created transform or a customer-created transform","example":false}}},"example":{"name":"Timestamp To Date","type":"dateFormat","attributes":{"inputFormat":"MMM-dd-yyyy, HH:mm:ss.SSS","outputFormat":"yyyy/dd/MM"}}}}},"responses":{"200":{"description":"Indicates the transform was successfully updated and returns its new representation.","content":{"application/json":{"schema":{"type":"object","description":"The representation of an internally- or customer-defined transform.","required":["name","type","attributes"],"properties":{"id":{"type":"string","readOnly":true,"description":"Unique ID of this transform","example":"2cd78adghjkja34jh2b1hkjhasuecd"},"name":{"type":"string","description":"Unique name of this transform","example":"Timestamp To Date"},"type":{"type":"string","description":"The type of transform operation","enum":["accountAttribute","base64Decode","base64Encode","concat","conditional","dateCompare","dateFormat","dateMath","decomposeDiacriticalMarks","e164phone","firstValid","rule","identityAttribute","indexOf","iso3166","lastIndexOf","leftPad","lookup","lower","normalizeNames","randomAlphaNumeric","randomNumeric","reference","replaceAll","replace","rightPad","split","static","substring","trim","upper","usernameGenerator","uuid"],"example":"dateFormat","externalDocs":{"description":"Transform Operations","url":"https://developer.sailpoint.com/docs/transforms/transform_operations/transform_operations.html#transform-operations"}},"attributes":{"description":"Meta-data about the transform. Values in this list are specific to the type of transform to be executed.","oneOf":[{"title":"accountAttribute","type":"object","required":["sourceName","attributeName"],"properties":{"sourceName":{"type":"string","description":"A reference to the source to search for the account","example":"Workday"},"attributeName":{"type":"string","description":"The name of the attribute on the account to return. This should match the name of the account attribute name visible in the user interface, or on the source schema.","example":"DEPARTMENT"},"accountSortAttribute":{"type":"string","description":"The value of this configuration is a string name of the attribute to use when determining the ordering of returned accounts when there are multiple entries","example":"created"},"accountSortDescending":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls the order of the sort when there are multiple accounts. If not defined, the transform will default to false (ascending order)","example":false},"accountReturnFirstLink":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls which account to source a value from for an attribute. If this flag is set to true, the transform returns the value from the first account in the list, even if it is null. If it is set to false, the transform returns the first non-null value. If not defined, the transform will default to false","example":false},"accountFilter":{"type":"string","description":"This expression queries the database to narrow search results. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the database. The default filter will always include the source and identity, and any subsequent expressions will be combined in an AND operation to the existing search criteria.\n\nOnly certain searchable attributes are available:
        - `nativeIdentity` - the Account ID
        - `displayName` - the Account Name
        - `entitlements` - a boolean value to determine if the account has entitlements","example":"!(nativeIdentity.startsWith(\"*DELETED*\"))"},"accountPropertyFilter":{"type":"string","description":"This expression is used to search and filter accounts in memory. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the returned resultset.\n\nAll account attributes are available for filtering as this operation is performed in memory.","example":"(groups.containsAll({'Admin'}) || location == 'Austin')"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"base64Decode","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"base64Encode","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"concat","type":"object","required":["values"],"properties":{"values":{"type":"array","items":{"type":"object"},"description":"An array of items to join together","example":["John"," ","Smith"]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"conditional","type":"object","required":["expression","positiveCondition","negativeCondition"],"properties":{"expression":{"type":"string","description":"A comparison statement that follows the structure of `ValueA eq ValueB` where `ValueA` and `ValueB` are static strings or outputs of other transforms. \n\nThe `eq` operator is the only valid comparison","example":"ValueA eq ValueB"},"positiveCondition":{"type":"string","description":"The output of the transform if the expression evalutes to true","example":"true"},"negativeCondition":{"type":"string","description":"The output of the transform if the expression evalutes to false","example":"false"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateCompare","type":"object","required":["firstDate","secondDate","operator","positiveCondition","negativeCondition"],"properties":{"firstDate":{"description":"This is the first date to consider (The date that would be on the left hand side of the comparison operation).","oneOf":[{"title":"accountAttribute","type":"object","required":["sourceName","attributeName"],"properties":{"sourceName":{"type":"string","description":"A reference to the source to search for the account","example":"Workday"},"attributeName":{"type":"string","description":"The name of the attribute on the account to return. This should match the name of the account attribute name visible in the user interface, or on the source schema.","example":"DEPARTMENT"},"accountSortAttribute":{"type":"string","description":"The value of this configuration is a string name of the attribute to use when determining the ordering of returned accounts when there are multiple entries","example":"created"},"accountSortDescending":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls the order of the sort when there are multiple accounts. If not defined, the transform will default to false (ascending order)","example":false},"accountReturnFirstLink":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls which account to source a value from for an attribute. If this flag is set to true, the transform returns the value from the first account in the list, even if it is null. If it is set to false, the transform returns the first non-null value. If not defined, the transform will default to false","example":false},"accountFilter":{"type":"string","description":"This expression queries the database to narrow search results. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the database. The default filter will always include the source and identity, and any subsequent expressions will be combined in an AND operation to the existing search criteria.\n\nOnly certain searchable attributes are available:
        - `nativeIdentity` - the Account ID
        - `displayName` - the Account Name
        - `entitlements` - a boolean value to determine if the account has entitlements","example":"!(nativeIdentity.startsWith(\"*DELETED*\"))"},"accountPropertyFilter":{"type":"string","description":"This expression is used to search and filter accounts in memory. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the returned resultset.\n\nAll account attributes are available for filtering as this operation is performed in memory.","example":"(groups.containsAll({'Admin'}) || location == 'Austin')"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateFormat","type":"object","properties":{"inputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"outputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}}]},"secondDate":{"description":"This is the second date to consider (The date that would be on the right hand side of the comparison operation).","oneOf":[{"title":"accountAttribute","type":"object","required":["sourceName","attributeName"],"properties":{"sourceName":{"type":"string","description":"A reference to the source to search for the account","example":"Workday"},"attributeName":{"type":"string","description":"The name of the attribute on the account to return. This should match the name of the account attribute name visible in the user interface, or on the source schema.","example":"DEPARTMENT"},"accountSortAttribute":{"type":"string","description":"The value of this configuration is a string name of the attribute to use when determining the ordering of returned accounts when there are multiple entries","example":"created"},"accountSortDescending":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls the order of the sort when there are multiple accounts. If not defined, the transform will default to false (ascending order)","example":false},"accountReturnFirstLink":{"type":"string","description":"The value of this configuration is a boolean (true/false). Controls which account to source a value from for an attribute. If this flag is set to true, the transform returns the value from the first account in the list, even if it is null. If it is set to false, the transform returns the first non-null value. If not defined, the transform will default to false","example":false},"accountFilter":{"type":"string","description":"This expression queries the database to narrow search results. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the database. The default filter will always include the source and identity, and any subsequent expressions will be combined in an AND operation to the existing search criteria.\n\nOnly certain searchable attributes are available:
        - `nativeIdentity` - the Account ID
        - `displayName` - the Account Name
        - `entitlements` - a boolean value to determine if the account has entitlements","example":"!(nativeIdentity.startsWith(\"*DELETED*\"))"},"accountPropertyFilter":{"type":"string","description":"This expression is used to search and filter accounts in memory. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the returned resultset.\n\nAll account attributes are available for filtering as this operation is performed in memory.","example":"(groups.containsAll({'Admin'}) || location == 'Austin')"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateFormat","type":"object","properties":{"inputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"outputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}}]},"operator":{"type":"string","description":"This is the comparison to perform.\n| Operation | Description |\n| --------- | ------- |\n| LT | Strictly less than: firstDate < secondDate |\n| LTE | Less than or equal to: firstDate <= secondDate |\n| GT | Strictly greater than: firstDate > secondDate |\n| GTE | Greater than or equal to: firstDate >= secondDate |\n","enum":["LT","LTE","GT","GTE"],"example":"LT"},"positiveCondition":{"type":"string","description":"The output of the transform if the expression evalutes to true","example":"true"},"negativeCondition":{"type":"string","description":"The output of the transform if the expression evalutes to false","example":false},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateFormat","type":"object","properties":{"inputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"outputFormat":{"description":"A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into.\n\n*If no inputFormat is provided, the transform assumes that it is in ISO8601 format*","oneOf":[{"title":"Named Construct","type":"string","description":"| Construct | Date Time Pattern | Description |\n| --------- | ----------------- | ----------- |\n| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | \n| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. |\n| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. |\n| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. |\n| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. |\n","enum":["ISO8601","LDAP","PEOPLE_SOFT","EPOCH_TIME_JAVA","EPOCH_TIME_WIN32"],"example":"PEOPLE_SOFT"},{"title":"Java Simple Date Format","type":"string","description":"There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information.\n\n>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone.\n (This table is from the SimpleDateFormat page.)\n\n| Date Time Pattern | Result |\n| ----------------- | ------ |\n| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` |\n| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 |\n| `h:mm a` | 12:08 PM |\n| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time |\n| `K:mm a, z` | 0:08 PM, PDT |\n| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM |\n| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 |\n| `yyMMddHHmmssZ` | 010704120856-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 |\n| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 |\n| `YYYY-'W'ww-u` | 2001-W27-3 |\n","example":"mm/dd/yyyy"}]},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"dateMath","type":"object","required":["expression"],"properties":{"expression":{"type":"string","description":"A string value of the date and time components to operation on, along with the math operations to execute.\n","externalDocs":{"description":"Date Math Expressions","url":"https://developer.sailpoint.com/docs/transforms/transform_operations/operations/date_math.html#transform-structure"},"example":"now+1w"},"roundUp":{"type":"boolean","description":"A boolean value to indicate whether the transform should round up or down when a rounding `/` operation is defined in the expression. \n\n\nIf not provided, the transform will default to `false`\n\n\n`true` indicates the transform should round up (i.e., truncate the fractional date/time component indicated and then add one unit of that component)\n\n\n`false` indicates the transform should round down (i.e., truncate the fractional date/time component indicated)\n","example":false},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"decomposeDiacriticalMarks","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"e164phone","type":"object","properties":{"defaultRegion":{"type":"string","description":"This is an optional attribute that can be used to define the region of the phone number to format into.\n\n\nIf defaultRegion is not provided, it will take US as the default country.\n\n\nThe format of the country code should be in [ISO 3166-1 alpha-2 format](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)\n","example":"US"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"firstValid","type":"object","required":["values"],"properties":{"values":{"type":"array","items":{"type":"object"},"description":"An array of attributes to evaluate for existence.","example":[{"attributes":{"sourceName":"Active Directory","attributeName":"sAMAccountName"},"type":"accountAttribute"},{"attributes":{"sourceName":"Okta","attributeName":"login"},"type":"accountAttribute"},{"attributes":{"sourceName":"HR Source","attributeName":"employeeID"},"type":"accountAttribute"}]},"ignoreErrors":{"type":"boolean","description":"a true or false value representing to move on to the next option if an error (like an Null Pointer Exception) were to occur.","example":false},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false}}},{"title":"rule","oneOf":[{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"This is the name of the Generic rule that needs to be invoked by the transform","example":"Generic Calculation Rule"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false}}},{"type":"object","required":["name","operation","includeNumbers","includeSpecialChars","length"],"properties":{"name":{"type":"string","description":"This must always be set to \"Cloud Services Deployment Utility\"","example":"Cloud Services Deployment Utility"},"operation":{"type":"string","description":"The operation to perform `generateRandomString`","example":"generateRandomString"},"includeNumbers":{"type":"boolean","description":"This must be either \"true\" or \"false\" to indicate whether the generator logic should include numbers","example":true},"includeSpecialChars":{"type":"boolean","description":"This must be either \"true\" or \"false\" to indicate whether the generator logic should include special characters","example":true},"length":{"type":"string","description":"This specifies how long the randomly generated string needs to be\n\n\n>NOTE Due to identity attribute data constraints, the maximum allowable value is 450 characters\n","example":"10"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false}}},{"type":"object","required":["name","operation","uid"],"properties":{"name":{"type":"string","description":"This must always be set to \"Cloud Services Deployment Utility\"","example":"Cloud Services Deployment Utility"},"operation":{"type":"string","description":"The operation to perform `getReferenceIdentityAttribute`","example":"getReferenceIdentityAttribute"},"uid":{"type":"string","description":"This is the SailPoint User Name (uid) value of the identity whose attribute is desired\n\nAs a convenience feature, you can use the `manager` keyword to dynamically look up the user's manager and then get that manager's identity attribute.\n","example":"2c91808570313110017040b06f344ec9"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false}}}]},{"title":"identityAttribute","type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The system (camel-cased) name of the identity attribute to bring in","example":"email"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"indexOf","type":"object","required":["substring"],"properties":{"substring":{"type":"string","description":"A substring to search for, searches the entire calling string, and returns the index of the first occurrence of the specified substring.","example":"admin_"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"iso3166","type":"object","properties":{"format":{"type":"string","description":"An optional value to denote which ISO 3166 format to return. Valid values are:\n\n\n`alpha2` - Two-character country code (e.g., \"US\"); this is the default value if no format is supplied\n\n\n`alpha3` - Three-character country code (e.g., \"USA\")\n\n\n`numeric` - The numeric country code (e.g., \"840\")\n","example":"alpha2"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"leftPad","type":"object","required":["length"],"properties":{"length":{"type":"string","description":"An integer value for the desired length of the final output string","example":"4"},"padding":{"type":"string","description":"A string value representing the character that the incoming data should be padded with to get to the desired length\n\n\nIf not provided, the transform will default to a single space (\" \") character for padding\n","example":"0"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"lookup","type":"object","required":["table"],"properties":{"table":{"type":"object","additionalProperties":true,"description":"This is a JSON object of key-value pairs. The key is the string that will attempt to be matched to the input, and the value is the output string that should be returned if the key is matched\n\n\n>**Note** the use of the optional default key value here; if none of the three countries in the above example match the input string, the transform will return \"Unknown Region\" for the attribute that is mapped to this transform.\n","example":{"USA":"Americas","FRA":"EMEA","AUS":"APAC","default":"Unknown Region"}},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"lower","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"nameNormalizer","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"randomAlphaNumeric","type":"object","properties":{"length":{"type":"string","description":"This is an integer value specifying the size/number of characters the random string must contain\n\n\n* This value must be a positive number and cannot be blank\n\n\n* If no length is provided, the transform will default to a value of `32`\n\n\n* Due to identity attribute data constraints, the maximum allowable value is `450` characters\n","example":"10"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"randomNumeric","type":"object","properties":{"length":{"type":"string","description":"This is an integer value specifying the size/number of characters the random string must contain\n\n\n* This value must be a positive number and cannot be blank\n\n\n* If no length is provided, the transform will default to a value of `32`\n\n\n* Due to identity attribute data constraints, the maximum allowable value is `450` characters\n","example":"10"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"reference","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"This ID specifies the name of the pre-existing transform which you want to use within your current transform","example":"Existing Transform"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"replaceAll","type":"object","required":["table"],"properties":{"table":{"type":"object","additionalProperties":true,"description":"An attribute of key-value pairs. Each pair identifies the pattern to search for as its key, and the replacement string as its value.","example":{"-":" ","\"":"'","ñ":"n"}},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"replace","type":"object","required":["regex","replacement"],"properties":{"regex":{"type":"string","description":"This can be a string or a regex pattern in which you want to replace.","example":"[^a-zA-Z]","externalDocs":{"description":"Regex Builder","url":"https://regex101.com/"}},"replacement":{"type":"string","description":"This is the replacement string that should be substituded wherever the string or pattern is found.","example":" "},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"rightPad","type":"object","required":["length"],"properties":{"length":{"type":"string","description":"An integer value for the desired length of the final output string","example":"4"},"padding":{"type":"string","description":"A string value representing the character that the incoming data should be padded with to get to the desired length\n\n\nIf not provided, the transform will default to a single space (\" \") character for padding\n","example":"0"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"split","type":"object","required":["delimiter","index"],"properties":{"delimiter":{"type":"string","description":"This can be either a single character or a regex expression, and is used by the transform to identify the break point between two substrings in the incoming data","example":","},"index":{"type":"string","description":"An integer value for the desired array element after the incoming data has been split into a list; the array is a 0-based object, so the first array element would be index 0, the second element would be index 1, etc.","example":"5"},"throws":{"type":"boolean","description":"A boolean (true/false) value which indicates whether an exception should be thrown and returned as an output when an index is out of bounds with the resultant array (i.e., the provided index value is larger than the size of the array)\n\n\n`true` - The transform should return \"IndexOutOfBoundsException\"\n\n\n`false` - The transform should return null\n\n\nIf not provided, the transform will default to false and return a null\n","example":true},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"static","type":"object","required":["values"],"properties":{"values":{"type":"string","description":"This must evaluate to a JSON string, either through a fixed value or through conditional logic using the Apache Velocity Template Language.","example":"string$variable","externalDocs":{"description":"Static Transform Documentation","url":"https://developer.sailpoint.com/docs/transforms/transform_operations/operations/static.html"}},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false}}},{"title":"substring","type":"object","required":["begin"],"properties":{"begin":{"type":"integer","description":"The index of the first character to include in the returned substring.\n\n\nIf `begin` is set to -1, the transform will begin at character 0 of the input data\n","example":1,"format":"int32"},"beginOffset":{"type":"integer","description":"This integer value is the number of characters to add to the begin attribute when returning a substring. \n\nThis attribute is only used if begin is not -1.\n","example":3,"format":"int32"},"end":{"type":"integer","description":"The index of the first character to exclude from the returned substring.\n\nIf end is -1 or not provided at all, the substring transform will return everything up to the end of the input string.\n","example":6,"format":"int32"},"endOffset":{"type":"integer","description":"This integer value is the number of characters to add to the end attribute when returning a substring. \n\nThis attribute is only used if end is provided and is not -1.\n","example":1,"format":"int32"},"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"trim","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"upper","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false},"input":{"type":"object","description":"This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI.","additionalProperties":true,"example":{"type":"accountAttribute","attributes":{"attributeName":"first_name","sourceName":"Source"}}}}},{"title":"uuid","type":"object","properties":{"requiresPeriodicRefresh":{"type":"boolean","description":"A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process","example":false,"default":false}}}]},"internal":{"type":"boolean","readOnly":true,"description":"Indicates whether this is an internal SailPoint-created transform or a customer-created transform","example":false}}},"example":{"id":"2cd78adghjkja34jh2b1hkjhasuecd","name":"Timestamp To Date","type":"dateFormat","attributes":{"inputFormat":"MMM-dd-yyyy, HH:mm:ss.SSS","outputFormat":"yyyy/dd/MM"},"internal":false}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"404":{"description":"Not Found - returned if the request URL refers to a resource or object that does not exist","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"404":{"summary":"An example of a 404 response object","value":{"detailCode":"404 Not found","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server did not find a current representation for the target resource."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:transforms:write"]}],"method":"put","path":"/transforms/{id}","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"jsonRequestBodyExample":{"id":"2cd78adghjkja34jh2b1hkjhasuecd","name":"Timestamp To Date","type":"dateFormat","internal":false},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Update a transform","description":{"content":"Replaces the transform specified by the given ID with the transform provided in the request body. Only the \"attributes\" field is mutable. Attempting to change other properties (ex. \"name\" and \"type\") will result in an error.\nA token with transform write authority is required to call this API.","type":"text/plain"},"url":{"path":["transforms",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) ID of the transform to update","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"application/json"},{"key":"Accept","value":"application/json"}],"method":"PUT","body":{"mode":"raw","raw":"\"\"","options":{"raw":{"language":"json"}}}}} +sidebar_class_name: "put api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Update a transform + + + +Replaces the transform specified by the given ID with the transform provided in the request body. Only the "attributes" field is mutable. Attempting to change other properties (ex. "name" and "type") will result in an error. +A token with transform write authority is required to call this API. + +
        Path Parameters
        Request Body
        + +The updated transform object (must include "name", "type", and "attributes" fields). + +
          attributes object
          + +Meta-data about the transform. Values in this list are specific to the type of transform to be executed. + +
        • oneOf - `nativeIdentity` - the Account ID
          - `displayName` - the Account Name
          - `entitlements` - a boolean value to determine if the account has entitlements"} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}>
          input object
          + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
          input object
          + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
          input object
          + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
          input object
          + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
          input object
          + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
          firstDate object
          + +This is the first date to consider (The date that would be on the left hand side of the comparison operation). + +
        • oneOf - `nativeIdentity` - the Account ID
          - `displayName` - the Account Name
          - `entitlements` - a boolean value to determine if the account has entitlements"} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}>
          input object
          + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
          inputFormat object
          + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
        • oneOf
        • string
          + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
          + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
        • string
          + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
        • outputFormat object
          + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
        • oneOf
        • string
          + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
          + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
        • string
          + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
        • input object
          + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        secondDate object
        + +This is the second date to consider (The date that would be on the right hand side of the comparison operation). + +
      • oneOf - `nativeIdentity` - the Account ID
        - `displayName` - the Account Name
        - `entitlements` - a boolean value to determine if the account has entitlements"} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}>
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        inputFormat object
        + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
      • oneOf
      • string
        + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
        + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
      • string
        + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
      • outputFormat object
        + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
      • oneOf
      • string
        + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
        + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
      • string
        + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
      • input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        secondDate |\n| GTE | Greater than or equal to: firstDate >= secondDate |\n"} schemaName={"string"} qualifierMessage={"**Possible values:** [`LT`, `LTE`, `GT`, `GTE`]"} defaultValue={undefined}>
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        inputFormat object
        + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
      • oneOf
      • string
        + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
        + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
      • string
        + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
      • outputFormat object
        + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
      • oneOf
      • string
        + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
        + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
      • string
        + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
      • input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        table object
        + +This is a JSON object of key-value pairs. The key is the string that will attempt to be matched to the input, and the value is the output string that should be returned if the key is matched + + +>**Note** the use of the optional default key value here; if none of the three countries in the above example match the input string, the transform will return "Unknown Region" for the attribute that is mapped to this transform. + + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        table object
        + +An attribute of key-value pairs. Each pair identifies the pattern to search for as its key, and the replacement string as its value. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        + +Indicates the transform was successfully updated and returns its new representation. + +
        Schema
          attributes object
          + +Meta-data about the transform. Values in this list are specific to the type of transform to be executed. + +
        • oneOf - `nativeIdentity` - the Account ID
          - `displayName` - the Account Name
          - `entitlements` - a boolean value to determine if the account has entitlements"} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}>
          input object
          + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
          input object
          + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
          input object
          + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
          input object
          + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
          input object
          + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
          firstDate object
          + +This is the first date to consider (The date that would be on the left hand side of the comparison operation). + +
        • oneOf - `nativeIdentity` - the Account ID
          - `displayName` - the Account Name
          - `entitlements` - a boolean value to determine if the account has entitlements"} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}>
          input object
          + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
          inputFormat object
          + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
        • oneOf
        • string
          + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
          + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
        • string
          + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
        • outputFormat object
          + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
        • oneOf
        • string
          + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
          + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
        • string
          + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
        • input object
          + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        secondDate object
        + +This is the second date to consider (The date that would be on the right hand side of the comparison operation). + +
      • oneOf - `nativeIdentity` - the Account ID
        - `displayName` - the Account Name
        - `entitlements` - a boolean value to determine if the account has entitlements"} schemaName={"string"} qualifierMessage={undefined} defaultValue={undefined}>
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        inputFormat object
        + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
      • oneOf
      • string
        + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
        + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
      • string
        + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
      • outputFormat object
        + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
      • oneOf
      • string
        + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
        + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
      • string
        + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
      • input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        secondDate |\n| GTE | Greater than or equal to: firstDate >= secondDate |\n"} schemaName={"string"} qualifierMessage={"**Possible values:** [`LT`, `LTE`, `GT`, `GTE`]"} defaultValue={undefined}>
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        inputFormat object
        + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
      • oneOf
      • string
        + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
        + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
      • string
        + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
      • outputFormat object
        + +A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into. + +*If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + +
      • oneOf
      • string
        + +**Possible values:** [`ISO8601`, `LDAP`, `PEOPLE_SOFT`, `EPOCH_TIME_JAVA`, `EPOCH_TIME_WIN32`] + +
        + +| Construct | Date Time Pattern | Description | +| --------- | ----------------- | ----------- | +| ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | +| LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | +| PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | +| EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | +| EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | + + +
      • string
        + +There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + +>NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + +| Date Time Pattern | Result | +| ----------------- | ------ | +| `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | +| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | +| `h:mm a` | 12:08 PM | +| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | +| `K:mm a, z` | 0:08 PM, PDT | +| `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | +| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | +| `yyMMddHHmmssZ` | 010704120856-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | +| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | +| `YYYY-'W'ww-u` | 2001-W27-3 | + + +
      • input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        table object
        + +This is a JSON object of key-value pairs. The key is the string that will attempt to be matched to the input, and the value is the output string that should be returned if the key is matched + + +>**Note** the use of the optional default key value here; if none of the three countries in the above example match the input string, the transform will return "Unknown Region" for the attribute that is mapped to this transform. + + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        table object
        + +An attribute of key-value pairs. Each pair identifies the pattern to search for as its key, and the replacement string as its value. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        input object
        + +This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. + +
        + +Client Error - Returned if the request body is invalid. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
        Schema
        + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Not Found - returned if the request URL refers to a resource or object that does not exist + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
        Schema
        + +Internal Server Error - Returned if there is an unexpected error. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/upload-connector-file.api.mdx b/docs/sailpoint-api-v3/upload-connector-file.api.mdx new file mode 100644 index 000000000..9fdbe4c81 --- /dev/null +++ b/docs/sailpoint-api-v3/upload-connector-file.api.mdx @@ -0,0 +1,116 @@ +--- +id: upload-connector-file +sidebar_label: Upload connector file to source +hide_title: true +hide_table_of_contents: true +api: {"operationId":"uploadConnectorFile","tags":["Sources"],"parameters":[{"in":"path","name":"sourceId","required":true,"schema":{"type":"string"},"description":"The Source id.","example":"2c9180835d191a86015d28455b4a2329"}],"description":"This uploads a supplemental source connector file (like jdbc driver jars) to a source's S3 bucket. This also sends ETS and Audit events.\nA token with ORG_ADMIN authority is required to call this API.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"Uploaded the file successfully and sent all post-upload events","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"the id of the Source","example":"2c91808568c529c60168cca6f90c1324"},"description":{"type":"string","description":"Human-readable description of the source","example":"This is the corporate directory."},"owner":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to an owning Identity Object"},"cluster":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the associated Cluster","example":{"type":"CLUSTER","id":"2c9180866166b5b0016167c32ef31a66","name":"Corporate Cluster"}},"accountCorrelationConfig":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Correlation Config object","example":{"type":"ACCOUNT_CORRELATION_CONFIG","id":"2c9180855d191c59015d28583727245a","name":"Directory [source-62867] Account Correlation"}},"accountCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used."},"managerCorrelationMapping":{"description":"Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity","type":"object","properties":{"accountAttribute":{"type":"string","description":"Name of the attribute to use for manager correlation. The value found on the account attribute will be used to lookup the manager's identity.","example":"manager"},"identityAttribute":{"type":"string","description":"Name of the identity attribute to search when trying to find a manager using the value from the accountAttribute.","example":"manager"}}},"managerCorrelationRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient."},"beforeProvisioningRule":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called."},"schemas":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to Schema objects","example":[{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232a","name":"account"},{"type":"CONNECTOR_SCHEMA","id":"2c9180835d191a86015d28455b4b232b","name":"group"}]},"passwordPolicies":{"type":"array","items":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}}},"description":"List of references to the associated PasswordPolicy objects.","example":[{"type":"PASSWORD_POLICY","id":"2c9180855d191c59015d291ceb053980","name":"Corporate Password Policy"}]},"features":{"type":"array","description":"Optional features that can be supported by a source.","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"example":["SYNC_PROVISIONING","MANAGER_LOOKUP","SEARCH","PROVISIONING","AUTHENTICATE","GROUP_PROVISIONING","PASSWORD"]},"type":{"type":"string","description":"Specifies the type of system being managed e.g. Active Directory, Workday, etc..","example":"OpenLDAP - Direct"},"connector":{"type":"string","description":"Connector script name.","example":"active-directory"},"connectorClass":{"type":"string","description":"The fully qualified name of the Java class that implements the connector interface.","example":"sailpoint.connector.LDAPConnector"},"connectorAttributes":{"type":"object","description":"Connector specific configuration; will differ from type to type.","example":{"healthCheckTimeout":30,"authSearchAttributes":["cn","uid","mail"]}},"deleteThreshold":{"type":"integer","format":"int32","description":"Number from 0 to 100 that specifies when to skip the delete phase.","example":10},"authoritative":{"type":"boolean","description":"When true indicates the source is referenced by an IdentityProfile.","example":false},"managementWorkgroup":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"Reference to Management Workgroup for this Source"},"healthy":{"type":"boolean","description":"When true indicates a healthy source","example":true},"status":{"type":"string","description":"A status identifier, giving specific information on why a source is healthy or not","example":"SOURCE_STATE_HEALTHY"},"since":{"type":"string","description":"Timestamp showing when a source health check was last performed","example":"2021-09-28T15:48:29.3801666300Z"},"connectorId":{"type":"string","description":"The id of connector","example":"active-directory"},"connectorName":{"type":"string","description":"The name of the connector that was chosen on source creation","example":"Active Directory"},"connectionType":{"type":"string","description":"The type of connection (direct or file)","example":"file"},"connectorImplementstionId":{"type":"string","description":"The connector implementstion id","example":"delimited-file"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"method":"post","path":"/sources/{sourceId}/upload-connector-file","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"security":[{"oauth2":[]}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Upload connector file to source","description":{"content":"This uploads a supplemental source connector file (like jdbc driver jars) to a source's S3 bucket. This also sends ETS and Audit events.\nA token with ORG_ADMIN authority is required to call this API.","type":"text/plain"},"url":{"path":["sources",":sourceId","upload-connector-file"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id.","type":"text/plain"},"type":"any","value":"","key":"sourceId"}]},"header":[{"key":"Content-Type","value":"multipart/form-data"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"formdata","formdata":[]}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Upload connector file to source + + + +This uploads a supplemental source connector file (like jdbc driver jars) to a source's S3 bucket. This also sends ETS and Audit events. +A token with ORG_ADMIN authority is required to call this API. + +
        Path Parameters
        Request Body required
        + +Uploaded the file successfully and sent all post-upload events + +
        Schema
          owner object
          + +Reference to an owning Identity Object + +
          cluster object
          + +Reference to the associated Cluster + +
          accountCorrelationConfig object
          + +Reference to a Correlation Config object + +
          accountCorrelationRule object
          + +Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't be used. + +
          managerCorrelationMapping object
          + +Filter Object used during manager correlation to match incoming manager values to an existing manager's Account/Identity + +
          managerCorrelationRule object
          + +Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient. + +
          beforeProvisioningRule object
          + +Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called. + +
          schemas object[]
          + +List of references to Schema objects + +
          passwordPolicies object[]
          + +List of references to the associated PasswordPolicy objects. + +
          managementWorkgroup object
          + +Reference to Management Workgroup for this Source + +
        + +Client Error - Returned if the request body is invalid. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
        Schema
        + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
        Schema
        + +Internal Server Error - Returned if there is an unexpected error. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/upload-source-accounts-schema.api.mdx b/docs/sailpoint-api-v3/upload-source-accounts-schema.api.mdx new file mode 100644 index 000000000..b8f8aaaad --- /dev/null +++ b/docs/sailpoint-api-v3/upload-source-accounts-schema.api.mdx @@ -0,0 +1,89 @@ +--- +id: upload-source-accounts-schema +sidebar_label: Uploads source accounts schema template +hide_title: true +hide_table_of_contents: true +api: {"tags":["Sources"],"description":"This API uploads a source schema template file to configure a source's account attributes.\n\nTo retrieve the file to modify and upload, log into Identity Now. \n\nClick **Admin** -> **Connections** -> **Sources** -> **``** -> **Import Data** -> **Account Schema** -> **Options** -> **Download Schema**\n\n>**NOTE: This API is designated only for Delimited File sources.**","operationId":"uploadSourceAccountsSchema","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The Source id","example":"8c190e6787aa4ed9a90bd9d5344523fb"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"Successfully uploaded the file","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Schema.","example":"2c9180835d191a86015d28455b4a2329"},"name":{"type":"string","description":"The name of the Schema.","example":"account"},"nativeObjectType":{"type":"string","description":"The name of the object type on the native system that the schema represents.","example":"User"},"identityAttribute":{"type":"string","description":"The name of the attribute used to calculate the unique identifier for an object in the schema.","example":"sAMAccountName"},"displayAttribute":{"type":"string","description":"The name of the attribute used to calculate the display value for an object in the schema.","example":"distinguishedName"},"hierarchyAttribute":{"type":"string","description":"The name of the attribute whose values represent other objects in a hierarchy. Only relevant to group schemas.","example":"memberOf"},"includePermissions":{"type":"boolean","description":"Flag indicating whether or not the include permissions with the object data when aggregating the schema.","example":false},"features":{"type":"array","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"description":"The features that the schema supports.","example":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"]},"configuration":{"type":"object","description":"Holds any extra configuration data that the schema may require.","example":{"groupMemberAttribute":"member"}},"attributes":{"type":"array","description":"The attribute definitions which form the schema.","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"sAMAccountName"},"type":{"description":"The type of the attribute.","example":"string","type":"string","enum":["STRING","LONG","INT","BOOLEAN"]},"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"A reference to the schema on the source to which the values of the attribute map.","example":{"type":"CONNECTOR_SCHEMA","id":"2c9180866166b5b0016167c32ef31a66","name":"group"}},"description":{"type":"string","description":"A human-readable description of the attribute."},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","example":false},"isEntitlement":{"type":"boolean","description":"Flag indicating whether or not the attribute is an entitlement.","example":false},"isGroup":{"type":"boolean","description":"Flag indicating whether or not the attribute represents a group.","example":false,"readOnly":true}}},"example":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}]},"created":{"type":"string","description":"The date the Schema was created.","format":"date-time","example":"2019-12-24T22:32:58.104Z"},"modified":{"type":"string","description":"The date the Schema was last modified.","format":"date-time","example":"2019-12-31T20:22:28.104Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:source-schema:update"]}],"method":"post","path":"/sources/{id}/schemas/accounts","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Uploads source accounts schema template","description":{"content":"This API uploads a source schema template file to configure a source's account attributes.\n\nTo retrieve the file to modify and upload, log into Identity Now. \n\nClick **Admin** -> **Connections** -> **Sources** -> **``** -> **Import Data** -> **Account Schema** -> **Options** -> **Download Schema**\n\n>**NOTE: This API is designated only for Delimited File sources.**","type":"text/plain"},"url":{"path":["sources",":id","schemas","accounts"],"host":["{{baseUrl}}"],"query":[],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"multipart/form-data"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"formdata","formdata":[]}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Uploads source accounts schema template + + + +This API uploads a source schema template file to configure a source's account attributes. + +To retrieve the file to modify and upload, log into Identity Now. + +Click **Admin** -> **Connections** -> **Sources** -> **`<SourceName>`** -> **Import Data** -> **Account Schema** -> **Options** -> **Download Schema** + +>**NOTE: This API is designated only for Delimited File sources.** + +
        Path Parameters
        Request Body required
        + +Successfully uploaded the file + +
        Schema
          attributes object[]
          + +The attribute definitions which form the schema. + +
          schema object
          + +A reference to the schema on the source to which the values of the attribute map. + +
        + +Client Error - Returned if the request body is invalid. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
        Schema
        + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
        Schema
        + +Internal Server Error - Returned if there is an unexpected error. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/upload-source-entitlements-schema.api.mdx b/docs/sailpoint-api-v3/upload-source-entitlements-schema.api.mdx new file mode 100644 index 000000000..4180b5e0e --- /dev/null +++ b/docs/sailpoint-api-v3/upload-source-entitlements-schema.api.mdx @@ -0,0 +1,89 @@ +--- +id: upload-source-entitlements-schema +sidebar_label: Uploads source entitlements schema template +hide_title: true +hide_table_of_contents: true +api: {"tags":["Sources"],"description":"This API uploads a source schema template file to configure a source's entitlement attributes.\n\nTo retrieve the file to modify and upload, log into Identity Now. \n\nClick **Admin** -> **Connections** -> **Sources** -> **``** -> **Import Data** -> **Import Entitlements** -> **Download**\n\n>**NOTE: This API is designated only for Delimited File sources.**","operationId":"uploadSourceEntitlementsSchema","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"},"description":"The Source id","example":"8c190e6787aa4ed9a90bd9d5344523fb"},{"in":"query","name":"schemaName","schema":{"type":"string"},"description":"Name of entitlement schema","example":"?schemaName=group"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"Successfully uploaded the file","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The id of the Schema.","example":"2c9180835d191a86015d28455b4a2329"},"name":{"type":"string","description":"The name of the Schema.","example":"account"},"nativeObjectType":{"type":"string","description":"The name of the object type on the native system that the schema represents.","example":"User"},"identityAttribute":{"type":"string","description":"The name of the attribute used to calculate the unique identifier for an object in the schema.","example":"sAMAccountName"},"displayAttribute":{"type":"string","description":"The name of the attribute used to calculate the display value for an object in the schema.","example":"distinguishedName"},"hierarchyAttribute":{"type":"string","description":"The name of the attribute whose values represent other objects in a hierarchy. Only relevant to group schemas.","example":"memberOf"},"includePermissions":{"type":"boolean","description":"Flag indicating whether or not the include permissions with the object data when aggregating the schema.","example":false},"features":{"type":"array","items":{"type":"string","enum":["AUTHENTICATE","COMPOSITE","DIRECT_PERMISSIONS","DISCOVER_SCHEMA","ENABLE","MANAGER_LOOKUP","NO_RANDOM_ACCESS","PROXY","SEARCH","TEMPLATE","UNLOCK","UNSTRUCTURED_TARGETS","SHAREPOINT_TARGET","PROVISIONING","GROUP_PROVISIONING","SYNC_PROVISIONING","PASSWORD","CURRENT_PASSWORD","ACCOUNT_ONLY_REQUEST","ADDITIONAL_ACCOUNT_REQUEST","NO_AGGREGATION","GROUPS_HAVE_MEMBERS","NO_PERMISSIONS_PROVISIONING","NO_GROUP_PERMISSIONS_PROVISIONING","NO_UNSTRUCTURED_TARGETS_PROVISIONING","NO_DIRECT_PERMISSIONS_PROVISIONING"],"description":"Optional features that can be supported by an source.\n* AUTHENTICATE: The source supports pass-through authentication.\n* COMPOSITE: The source supports composite source creation.\n* DIRECT_PERMISSIONS: The source supports returning DirectPermissions.\n* DISCOVER_SCHEMA: The source supports discovering schemas for users and groups.\n* ENABLE The source supports reading if an account is enabled or disabled.\n* MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS.\n* NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform.\n* PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source.\n* SEARCH\n* TEMPLATE\n* UNLOCK: The source supports reading if an account is locked or unlocked.\n* UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets.\n* SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources.\n* PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation.\n* GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented.\n* SYNC_PROVISIONING: The source can provision accounts synchronously.\n* PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature.\n* CURRENT_PASSWORD: Some source types support verification of the current password\n* ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements.\n* ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts.\n* NO_AGGREGATION: A source that does not support aggregation.\n* GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation.\n* NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts.\n* NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups.\n* NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING.\n* NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING."},"description":"The features that the schema supports.","example":["PROVISIONING","NO_PERMISSIONS_PROVISIONING","GROUPS_HAVE_MEMBERS"]},"configuration":{"type":"object","description":"Holds any extra configuration data that the schema may require.","example":{"groupMemberAttribute":"member"}},"attributes":{"type":"array","description":"The attribute definitions which form the schema.","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute.","example":"sAMAccountName"},"type":{"description":"The type of the attribute.","example":"string","type":"string","enum":["STRING","LONG","INT","BOOLEAN"]},"schema":{"type":"object","properties":{"type":{"description":"DTO type","type":"string","enum":["ACCOUNT_CORRELATION_CONFIG","ACCESS_PROFILE","ACCESS_REQUEST_APPROVAL","ACCOUNT","APPLICATION","CAMPAIGN","CAMPAIGN_FILTER","CERTIFICATION","CLUSTER","CONNECTOR_SCHEMA","ENTITLEMENT","GOVERNANCE_GROUP","IDENTITY","IDENTITY_PROFILE","IDENTITY_REQUEST","LIFECYCLE_STATE","PASSWORD_POLICY","ROLE","RULE","SOD_POLICY","SOURCE","TAG_CATEGORY","TASK_RESULT","REPORT_RESULT","SOD_VIOLATION","ACCOUNT_ACTIVITY"],"example":"IDENTITY"},"id":{"type":"string","description":"ID of the object to which this reference applies","example":"2c91808568c529c60168cca6f90c1313"},"name":{"type":"string","description":"Human-readable display name of the object to which this reference applies","example":"William Wilson"}},"description":"A reference to the schema on the source to which the values of the attribute map.","example":{"type":"CONNECTOR_SCHEMA","id":"2c9180866166b5b0016167c32ef31a66","name":"group"}},"description":{"type":"string","description":"A human-readable description of the attribute."},"isMultiValued":{"type":"boolean","description":"Flag indicating whether or not the attribute is multi-valued.","example":false},"isEntitlement":{"type":"boolean","description":"Flag indicating whether or not the attribute is an entitlement.","example":false},"isGroup":{"type":"boolean","description":"Flag indicating whether or not the attribute represents a group.","example":false,"readOnly":true}}},"example":[{"name":"sAMAccountName","type":"string","isMultiValued":false,"isEntitlement":false,"isGroup":false},{"name":"memberOf","type":"string","description":"Group membership","isMultiValued":true,"isEntitlement":true,"isGroup":true}]},"created":{"type":"string","description":"The date the Schema was created.","format":"date-time","example":"2019-12-24T22:32:58.104Z"},"modified":{"type":"string","description":"The date the Schema was last modified.","format":"date-time","example":"2019-12-31T20:22:28.104Z"}}}}}},"400":{"description":"Client Error - Returned if the request body is invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}}}}},"401":{"description":"Unauthorized - Returned if there is no authorization header, or if the JWT token is expired.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"A message describing the error","example":"JWT validation failed: JWT is expired"}}}}}},"403":{"description":"Forbidden - Returned if the user you are running as, doesn't have access to this end-point.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"403":{"summary":"An example of a 403 response object","value":{"detailCode":"403 Forbidden","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"The server understood the request but refuses to authorize it."}]}}}}}},"429":{"description":"Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"A message describing the error","example":" Rate Limit Exceeded "}}}}}},"500":{"description":"Internal Server Error - Returned if there is an unexpected error.","content":{"application/json":{"schema":{"type":"object","properties":{"detailCode":{"type":"string","description":"Fine-grained error code providing more detail of the error.","example":"400.1 Bad Request Content"},"trackingId":{"type":"string","description":"Unique tracking id for the error.","example":"e7eab60924f64aa284175b9fa3309599"},"messages":{"type":"array","description":"Generic localized reason for error","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}},"causes":{"type":"array","description":"Plain-text descriptive reasons to provide additional detail to the text provided in the messages field","items":{"type":"object","properties":{"locale":{"type":"string","description":"The locale for the message text, a BCP 47 language tag.","example":"en-US"},"localeOrigin":{"type":"string","enum":["DEFAULT","REQUEST"],"description":"An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the locale was selected from the request context (i.e., best match based on the *Accept-Language* header). Additional values may be added in the future without notice.","example":"DEFAULT"},"text":{"type":"string","description":"Actual text of the error message in the indicated locale.","example":"The request was syntactically correct but its content is semantically invalid."}}}}}},"examples":{"500":{"summary":"An example of a 500 response object","value":{"detailCode":"500.0 Internal Fault","trackingId":"b21b1f7ce4da4d639f2c62a57171b427","messages":[{"locale":"en-US","localeOrigin":"DEFAULT","text":"An internal fault occurred."}]}}}}}}},"security":[{"bearerAuth":["idn:source-schema:update"]}],"method":"post","path":"/sources/{id}/schemas/entitlements","servers":[{"url":"https://{tenant}.api.identitynow.com/v3","description":"This is the production API server.","variables":{"tenant":{"default":"sailpoint","description":"This is the name of your tenant, typically your company's name."}}}],"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information.\n- Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens)\n- Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow)\n- Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow)\n\nWhich authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use)\n\nLearn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details)\n","flows":{"clientCredentials":{"tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}},"authorizationCode":{"authorizationUrl":"https://tenant.identitynow.com/oauth/authorize","tokenUrl":"https://tenant.api.identitynow.com/oauth/token","scopes":{"sp:scopes:default":"default scope","sp:scopes:all":"access to all scopes"}}}}},"info":{"contact":{"email":"developers@sailpoint.com","name":"Developer Relations","url":"https://developer.sailpoint.com/discuss"},"description":"These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.","title":"SailPoint - SaaS API","version":"3.0.0"},"postman":{"name":"Uploads source entitlements schema template","description":{"content":"This API uploads a source schema template file to configure a source's entitlement attributes.\n\nTo retrieve the file to modify and upload, log into Identity Now. \n\nClick **Admin** -> **Connections** -> **Sources** -> **``** -> **Import Data** -> **Import Entitlements** -> **Download**\n\n>**NOTE: This API is designated only for Delimited File sources.**","type":"text/plain"},"url":{"path":["sources",":id","schemas","entitlements"],"host":["{{baseUrl}}"],"query":[{"disabled":false,"description":{"content":"Name of entitlement schema","type":"text/plain"},"key":"schemaName","value":""}],"variable":[{"disabled":false,"description":{"content":"(Required) The Source id","type":"text/plain"},"type":"any","value":"","key":"id"}]},"header":[{"key":"Content-Type","value":"multipart/form-data"},{"key":"Accept","value":"application/json"}],"method":"POST","body":{"mode":"formdata","formdata":[]}}} +sidebar_class_name: "post api-method" +info_path: docs/sailpoint-api-v3/sail-point-saa-s-api +--- + +import ApiTabs from "@theme/ApiTabs"; +import MimeTabs from "@theme/MimeTabs"; +import ParamsItem from "@theme/ParamsItem"; +import ResponseSamples from "@theme/ResponseSamples"; +import SchemaItem from "@theme/SchemaItem" +import SchemaTabs from "@theme/SchemaTabs"; +import DiscriminatorTabs from "@theme/DiscriminatorTabs"; +import TabItem from "@theme/TabItem"; + +## Uploads source entitlements schema template + + + +This API uploads a source schema template file to configure a source's entitlement attributes. + +To retrieve the file to modify and upload, log into Identity Now. + +Click **Admin** -> **Connections** -> **Sources** -> **`<SourceName>`** -> **Import Data** -> **Import Entitlements** -> **Download** + +>**NOTE: This API is designated only for Delimited File sources.** + +
        Path Parameters
        Query Parameters
        Request Body required
        + +Successfully uploaded the file + +
        Schema
          attributes object[]
          + +The attribute definitions which form the schema. + +
          schema object
          + +A reference to the schema on the source to which the values of the attribute map. + +
        + +Client Error - Returned if the request body is invalid. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. + +
        Schema
        + +Forbidden - Returned if the user you are running as, doesn't have access to this end-point. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + +Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. + +
        Schema
        + +Internal Server Error - Returned if there is an unexpected error. + +
        Schema
          messages object[]
          + +Generic localized reason for error + +
          causes object[]
          + +Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + +
        + \ No newline at end of file diff --git a/docs/sailpoint-api-v3/work-items.tag.mdx b/docs/sailpoint-api-v3/work-items.tag.mdx new file mode 100644 index 000000000..3da9f7950 --- /dev/null +++ b/docs/sailpoint-api-v3/work-items.tag.mdx @@ -0,0 +1,15 @@ +--- +id: work-items +title: Work Items +description: Work Items +--- + + + +```mdx-code-block +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + + +``` + \ No newline at end of file diff --git a/docusaurus.config.js b/docusaurus.config.js new file mode 100644 index 000000000..9bebd89fd --- /dev/null +++ b/docusaurus.config.js @@ -0,0 +1,187 @@ +// @ts-check +// Note: type annotations allow type checking and IDEs autocompletion + +const lightCodeTheme = require('prism-react-renderer/themes/github'); +const darkCodeTheme = require('prism-react-renderer/themes/dracula'); + +/** @type {import('@docusaurus/types').Config} */ +const config = { + title: 'Developer Community', + tagline: 'Developers are cool', + url: 'https://developer.sailpoint.com', + baseUrl: '/', + onBrokenLinks: 'throw', + onBrokenMarkdownLinks: 'warn', + favicon: 'img/favicon.ico', + + // GitHub pages deployment config. + // If you aren't using GitHub pages, you don't need these. + organizationName: 'SailPoint', // Usually your GitHub org/user name. + projectName: 'SailPoint Developer Portal', // Usually your repo name. + + // Even if you don't use internalization, you can use this field to set useful + // metadata like html lang. For example, if your site is Chinese, you may want + // to replace "en" with "zh-Hans". + i18n: { + defaultLocale: 'en', + locales: ['en'], + }, + + presets: [ + [ + 'classic', + /** @type {import('@docusaurus/preset-classic').Options} */ + ({ + docs: { + sidebarCollapsible: true, + sidebarPath: require.resolve('./sidebars.js'), + // Please change this to your repo. + // Remove this to remove the "edit this page" links. + editUrl: + 'https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/', + docLayoutComponent: "@theme/DocPage", + docItemComponent: "@theme/ApiItem" // Derived from docusaurus-theme-openapi + }, + blog: { + showReadingTime: true, + // Please change this to your repo. + // Remove this to remove the "edit this page" links. + editUrl: + 'https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/', + }, + theme: { + customCss: require.resolve('./src/css/custom.css'), + }, + }), + ], + ], + + themeConfig: + /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ + ({ + docs: { + sidebar: { + hideable: true, + autoCollapseCategories: true, + } + }, + navbar: { + title: '', + logo: { + alt: 'SailPoint Developer Community', + src: 'img/SailPoint-Developer-Community-Lockup.png', + srcDark: 'img/SailPoint-Developer-Community-Inverse-Lockup.png' + }, + items: [ + {to: '/blog', label: 'Blog', position: 'right'}, + { + type: 'dropdown', + label: 'Identity Now Resources', + position: 'right', + items: [ + { + type: 'doc', + docId: 'idn_docs/intro', + label: 'IDN Documentation', + }, + {to: '/docs/category/identity-now-api', label: 'IDN APIs'}, + // ... more items + ], + }, + { + type: 'dropdown', + label: 'Tools', + position: 'right', + items: [ + { + href: 'https://github.com/sailpoint-oss', + label: 'GitHub', + } + // ... more items + ], + } + ], + }, + footer: { + style: 'dark', + links: [ + { + title: 'Docs', + items: [ + { + label: 'Tutorial', + to: '/docs/intro', + }, + ], + }, + { + title: 'Community', + items: [ + { + label: 'Stack Overflow', + href: 'https://stackoverflow.com/questions/tagged/docusaurus', + }, + { + label: 'Discord', + href: 'https://discordapp.com/invite/docusaurus', + }, + { + label: 'Twitter', + href: 'https://twitter.com/docusaurus', + }, + ], + }, + { + title: 'More', + items: [ + { + label: 'Blog', + to: '/blog', + }, + { + label: 'GitHub', + href: 'https://github.com/facebook/docusaurus', + }, + ], + }, + ], + copyright: `Copyright © ${new Date().getFullYear()} My Project, Inc. Built with Docusaurus.`, + }, + prism: { + theme: lightCodeTheme, + darkTheme: darkCodeTheme, + }, + }), + + plugins: [ + [ + "docusaurus-plugin-openapi-docs", + { + id: "openapi", + docsPluginId: "classic", + config: { + idn_v3: { + specPath: "static/idn-api/sailpoint-api.v3.yaml", + outputDir: "docs/sailpoint-api-v3", + sidebarOptions: { + groupPathsBy: "tag", + categoryLinkSource: "tag" + } + }, + idn_beta: { + specPath: "static/idn-api/sailpoint-api.beta.yaml", + outputDir: "docs/sailpoint-api-beta", + sidebarOptions: { + groupPathsBy: "tag", + categoryLinkSource: "tag" + } + } + } + } + ] + ], + + themes: ["docusaurus-theme-openapi-docs"] +}; + +module.exports = config; diff --git a/package.json b/package.json new file mode 100644 index 000000000..747527b6a --- /dev/null +++ b/package.json @@ -0,0 +1,49 @@ +{ + "name": "sailpoint-developer-portal", + "version": "0.0.0", + "private": true, + "scripts": { + "docusaurus": "docusaurus", + "start": "docusaurus start --port=4200", + "build": "docusaurus build", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy", + "clear": "docusaurus clear", + "serve": "docusaurus serve", + "write-translations": "docusaurus write-translations", + "write-heading-ids": "docusaurus write-heading-ids", + "gen-api-docs": "docusaurus gen-api-docs", + "clean-api-docs": "docusaurus clean-api-docs", + "gen-api-docs:version": "docusaurus gen-api-docs:version", + "clean-api-docs:version": "docusaurus clean-api-docs:version" + }, + "dependencies": { + "@docusaurus/core": "2.0.1", + "@docusaurus/preset-classic": "2.0.1", + "@mdx-js/react": "^1.6.22", + "clsx": "^1.1.1", + "docusaurus-plugin-openapi-docs": "^1.1.6", + "docusaurus-theme-openapi-docs": "^1.1.6", + "prism-react-renderer": "^1.3.1", + "react": "^17.0.2", + "react-dom": "^17.0.2" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "2.0.1" + }, + "browserslist": { + "production": [ + ">0.5%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "engines": { + "node": ">=16.14" + } +} diff --git a/sidebars.js b/sidebars.js new file mode 100644 index 000000000..d378f6bc5 --- /dev/null +++ b/sidebars.js @@ -0,0 +1,58 @@ +/** + * Creating a sidebar enables you to: + - create an ordered group of docs + - render a sidebar for each doc of that group + - provide next/previous navigation + + The sidebars can be generated from the filesystem, or explicitly defined here. + + Create as many sidebars as you want. + */ + +// @ts-check + +/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ +const sidebars = { + // By default, Docusaurus generates a sidebar from the docs folder structure + tutorialSidebar: [{type: 'autogenerated', dirName: 'idn_docs'}], + openApiSidebar: [ + { + type: "category", + label: "IDN V3", + link: { + type: "generated-index", + title: "IDN V3", + description: + "These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.", + slug: "/category/identity-now-api" + }, + // @ts-ignore + items: require("./docs/sailpoint-api-v3/sidebar.js") + }, + { + type: "category", + label: "IDN Beta", + link: { + type: "generated-index", + title: "IDN Beta", + description: + "These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.", + slug: "/category/identity-now-api" + }, + // @ts-ignore + items: require("./docs/sailpoint-api-beta/sidebar.js") + } + ] + // But you can create a sidebar manually + /* + tutorialSidebar: [ + { + type: 'category', + label: 'Tutorial', + items: ['hello'], + }, + ], + */ +}; + +module.exports = sidebars; diff --git a/src/components/HomepageFeatures/index.js b/src/components/HomepageFeatures/index.js new file mode 100644 index 000000000..78f410ba6 --- /dev/null +++ b/src/components/HomepageFeatures/index.js @@ -0,0 +1,64 @@ +import React from 'react'; +import clsx from 'clsx'; +import styles from './styles.module.css'; + +const FeatureList = [ + { + title: 'Easy to Use', + Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default, + description: ( + <> + Docusaurus was designed from the ground up to be easily installed and + used to get your website up and running quickly. + + ), + }, + { + title: 'Focus on What Matters', + Svg: require('@site/static/img/undraw_docusaurus_tree.svg').default, + description: ( + <> + Docusaurus lets you focus on your docs, and we'll do the chores. Go + ahead and move your docs into the docs directory. + + ), + }, + { + title: 'Powered by React', + Svg: require('@site/static/img/undraw_docusaurus_react.svg').default, + description: ( + <> + Extend or customize your website layout by reusing React. Docusaurus can + be extended while reusing the same header and footer. + + ), + }, +]; + +function Feature({Svg, title, description}) { + return ( +
        +
        + +
        +
        +

        {title}

        +

        {description}

        +
        +
        + ); +} + +export default function HomepageFeatures() { + return ( +
        +
        +
        + {FeatureList.map((props, idx) => ( + + ))} +
        +
        +
        + ); +} diff --git a/src/components/HomepageFeatures/styles.module.css b/src/components/HomepageFeatures/styles.module.css new file mode 100644 index 000000000..b248eb2e5 --- /dev/null +++ b/src/components/HomepageFeatures/styles.module.css @@ -0,0 +1,11 @@ +.features { + display: flex; + align-items: center; + padding: 2rem 0; + width: 100%; +} + +.featureSvg { + height: 200px; + width: 200px; +} diff --git a/src/css/custom.css b/src/css/custom.css new file mode 100644 index 000000000..843b7f41e --- /dev/null +++ b/src/css/custom.css @@ -0,0 +1,93 @@ +/** + * Any CSS included here will be global. The classic template + * bundles Infima by default. Infima is a CSS framework designed to + * work well for content-centric websites. + */ + +/* You can override the default Infima variables here. */ +:root { + --ifm-color-primary: #2e8555; + --ifm-color-primary-dark: #29784c; + --ifm-color-primary-darker: #277148; + --ifm-color-primary-darkest: #205d3b; + --ifm-color-primary-light: #33925d; + --ifm-color-primary-lighter: #359962; + --ifm-color-primary-lightest: #3cad6e; + --ifm-code-font-size: 95%; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); + --dev-text-color-cobalt: #0033a1; + --dev-boarder-color-theme: black; +} + +/* For readability concerns, you should choose a lighter palette in dark mode. */ +[data-theme='dark'] { + --ifm-color-primary: #25c2a0; + --ifm-color-primary-dark: #21af90; + --ifm-color-primary-darker: #1fa588; + --ifm-color-primary-darkest: #1a8870; + --ifm-color-primary-light: #29d5b0; + --ifm-color-primary-lighter: #32d8b4; + --ifm-color-primary-lightest: #4fddbf; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); + --dev-text-color-cobalt: #ffffff; + --dev-boarder-color-theme: white; +} + +.navbar__logo { + margin-right: 0.5rem; +} + +.navbar__title { + color: var(--dev-text-color-cobalt); + margin-top: 9px; + font-size: 22px; + font-weight: 400; +} + + +/* Sidebar Method labels */ +.api-method>.menu__link { + align-items: center; + justify-content: start; +} + +.api-method>.menu__link::before { + width: 50px; + height: 20px; + font-size: 12px; + line-height: 20px; + text-transform: uppercase; + font-weight: 600; + border-radius: 0.25rem; + border: 1px solid; + margin-right: var(--ifm-spacing-horizontal); + text-align: center; + flex-shrink: 0; + border-color: transparent; + color: white; +} + +.get>.menu__link::before { + content: "get"; + background-color: var(--ifm-color-primary); +} + +.put>.menu__link::before { + content: "put"; + background-color: var(--openapi-code-blue); +} + +.post>.menu__link::before { + content: "post"; + background-color: var(--openapi-code-green); +} + +.delete>.menu__link::before { + content: "del"; + background-color: var(--openapi-code-red); +} + +.patch>.menu__link::before { + content: "patch"; + background-color: var(--openapi-code-orange); +} \ No newline at end of file diff --git a/src/pages/index.js b/src/pages/index.js new file mode 100644 index 000000000..affcd9099 --- /dev/null +++ b/src/pages/index.js @@ -0,0 +1,41 @@ +import React from 'react'; +import clsx from 'clsx'; +import Link from '@docusaurus/Link'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import Layout from '@theme/Layout'; +import HomepageFeatures from '@site/src/components/HomepageFeatures'; + +import styles from './index.module.css'; + +function HomepageHeader() { + const {siteConfig} = useDocusaurusContext(); + return ( +
        +
        +

        {siteConfig.title}

        +

        {siteConfig.tagline}

        +
        + + Docusaurus Tutorial - 5min ⏱️ + +
        +
        +
        + ); +} + +export default function Home() { + const {siteConfig} = useDocusaurusContext(); + return ( + + +
        + +
        +
        + ); +} diff --git a/src/pages/index.module.css b/src/pages/index.module.css new file mode 100644 index 000000000..9f71a5da7 --- /dev/null +++ b/src/pages/index.module.css @@ -0,0 +1,23 @@ +/** + * CSS files with the .module.css suffix will be treated as CSS modules + * and scoped locally. + */ + +.heroBanner { + padding: 4rem 0; + text-align: center; + position: relative; + overflow: hidden; +} + +@media screen and (max-width: 996px) { + .heroBanner { + padding: 2rem; + } +} + +.buttons { + display: flex; + align-items: center; + justify-content: center; +} diff --git a/src/pages/markdown-page.md b/src/pages/markdown-page.md new file mode 100644 index 000000000..9756c5b66 --- /dev/null +++ b/src/pages/markdown-page.md @@ -0,0 +1,7 @@ +--- +title: Markdown page example +--- + +# Markdown page example + +You don't need React to write simple standalone pages. diff --git a/static/.nojekyll b/static/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/static/arm-api/swagger-agent-management.json b/static/arm-api/swagger-agent-management.json new file mode 100644 index 000000000..7c6d29132 --- /dev/null +++ b/static/arm-api/swagger-agent-management.json @@ -0,0 +1,631 @@ +{ + "openapi": "3.0.0", + "info": { + "version": "v1", + "title": "Access Risk Management Agent Management Service" + }, + "paths": { + "/api/agent": { + "post": { + "tags": [ + "Agent" + ], + "summary": "Registers new agent using following agent data.", + "operationId": "RegisterAgent", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.AgentManagementService.WebApi.Models.AgentModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "500": { + "description": "Server Error" + } + } + }, + "patch": { + "tags": [ + "Agent" + ], + "summary": "Updates existing agent using following agent data.", + "operationId": "UpdateAgent", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.AgentManagementService.WebApi.Models.AgentModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails" + } + } + } + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/agent/instruction": { + "post": { + "tags": [ + "Agent" + ], + "summary": "Gets instruction for specified agent. Also it updates appropriate agent metadata in the database.", + "operationId": "CheckForInstruction", + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AgentManagementService.WebApi.Models.AgentModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AgentManagementService.WebApi.Models.AgentModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AgentManagementService.WebApi.Models.AgentModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AgentManagementService.WebApi.Models.AgentModel" + } + } + }, + "description": "Agent metadata." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AgentManagementService.Common.Models.AgentInstructionDto" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AgentManagementService.Common.Models.AgentInstructionDto" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AgentManagementService.Common.Models.AgentInstructionDto" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails" + } + } + } + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/agent/emergencymessage": { + "post": { + "tags": [ + "Agent" + ], + "summary": "Sends the emergency email to fix team with detailed information.", + "operationId": "SendEmergencyMessage", + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AgentManagementService.WebApi.Models.EmergencyMessageModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AgentManagementService.WebApi.Models.EmergencyMessageModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AgentManagementService.WebApi.Models.EmergencyMessageModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AgentManagementService.WebApi.Models.EmergencyMessageModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AgentManagementService.Common.Models.AgentInstructionDto" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AgentManagementService.Common.Models.AgentInstructionDto" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AgentManagementService.Common.Models.AgentInstructionDto" + } + } + } + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/instruction/restart/{agentId}": { + "post": { + "tags": [ + "AgentInstruction" + ], + "summary": "Creates instruction to restart specified agent.", + "operationId": "RestartAgent", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "Identifier of the agent.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails" + } + } + } + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/instruction/reversion/{agentId}/{version}": { + "post": { + "tags": [ + "AgentInstruction" + ], + "summary": "Creates instruction to reversion specified agent.", + "operationId": "ReversionAgent", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "Identifier of the agent.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "version", + "in": "path", + "description": "Version to use.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails" + } + } + } + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/instruction/resetReversion/{agentId}": { + "post": { + "tags": [ + "AgentInstruction" + ], + "summary": "Creates instruction to reset reversion of specified agent.", + "operationId": "ResetReversion", + "parameters": [ + { + "name": "agentId", + "in": "path", + "description": "Identifier of the agent.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails" + } + } + } + }, + "500": { + "description": "Server Error" + } + } + } + } + }, + "components": { + "requestBodies": { + "ErpMaestro.AgentManagementService.WebApi.Models.AgentModel": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AgentManagementService.WebApi.Models.AgentModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AgentManagementService.WebApi.Models.AgentModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AgentManagementService.WebApi.Models.AgentModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AgentManagementService.WebApi.Models.AgentModel" + } + } + }, + "description": "Agent data." + } + }, + "schemas": { + "ErpMaestro.AgentManagementService.WebApi.Models.AgentModel": { + "required": [ + "hostName", + "platform", + "agentVersion", + "wrapperVersion" + ], + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "Identifier of the agent entity.", + "type": "string" + }, + "customerId": { + "format": "uuid", + "description": "Identifier of the customer.", + "type": "string" + }, + "hostName": { + "description": "Name of the machine where agent is installed.", + "type": "string" + }, + "platform": { + "description": "Platform information, like win7-x64 or so.", + "type": "string" + }, + "agentVersion": { + "description": "Version of the agent.", + "type": "string" + }, + "wrapperVersion": { + "description": "Version of the wrapper.", + "type": "string" + } + } + }, + "Microsoft.AspNetCore.Mvc.ProblemDetails": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "title": { + "type": "string" + }, + "status": { + "format": "int32", + "type": "integer" + }, + "detail": { + "type": "string" + }, + "instance": { + "type": "string" + } + }, + "additionalProperties": { + "type": "object" + } + }, + "ErpMaestro.AgentManagementService.Common.Models.AgentInstructionDto": { + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "Identifier of the instruction.", + "type": "string" + }, + "agentId": { + "format": "uuid", + "description": "Identifier of related agent.", + "type": "string" + }, + "instruction": { + "$ref": "#/components/schemas/ErpMaestro.AgentManagementService.Common.Constants.Instructions" + }, + "payload": { + "description": "Instruction payload.", + "type": "string" + }, + "processedDate": { + "format": "date-time", + "description": "Date when instruction was processed by the agent.", + "type": "string" + } + } + }, + "ErpMaestro.AgentManagementService.Common.Constants.Instructions": { + "enum": [ + "noAction", + "restart", + "reversion", + "resetReversion" + ], + "type": "string" + }, + "ErpMaestro.AgentManagementService.WebApi.Models.EmergencyMessageModel": { + "description": "Model used in sending emergency message from the agent.", + "required": [ + "message" + ], + "type": "object", + "properties": { + "agent": { + "$ref": "#/components/schemas/ErpMaestro.AgentManagementService.WebApi.Models.AgentModel" + }, + "message": { + "description": "Contains description and additional information which would be useful to solve the problem.", + "type": "string" + }, + "heartbeats": { + "description": "List of heartbeats from the agent", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.AgentManagementService.WebApi.Models.HeartbeatModel" + } + } + } + }, + "ErpMaestro.AgentManagementService.WebApi.Models.HeartbeatModel": { + "description": "Represents latest heartbeat of agent's component", + "required": [ + "componentName", + "timestampUtc" + ], + "type": "object", + "properties": { + "componentName": { + "description": "Component name", + "type": "string" + }, + "timestampUtc": { + "format": "date-time", + "description": "Latest I'm alive timestamp of that component", + "type": "string" + } + } + } + } + } +} \ No newline at end of file diff --git a/static/arm-api/swagger-analysis.json b/static/arm-api/swagger-analysis.json new file mode 100644 index 000000000..e8d35f84b --- /dev/null +++ b/static/arm-api/swagger-analysis.json @@ -0,0 +1,8865 @@ +{ + "openapi": "3.0.0", + "info": { + "version": "v1", + "title": "Access Risk Management Analysis Services" + }, + "paths": { + "/api/analysis/extracts": { + "post": { + "tags": [ + "Analysis" + ], + "summary": "Provides security extract information related to analyses.", + "operationId": "GetExtractFromAnalysis", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + } + }, + "description": "Collection of analyses ids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.SecurityExtractInfo" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.SecurityExtractInfo" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.SecurityExtractInfo" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.SecurityExtractInfo" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.SecurityExtractInfo" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.SecurityExtractInfo" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.SecurityExtractInfo" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.SecurityExtractInfo" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.SecurityExtractInfo" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.SecurityExtractInfo" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.SecurityExtractInfo" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.SecurityExtractInfo" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.SecurityExtractInfo" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.SecurityExtractInfo" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.SecurityExtractInfo" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.SecurityExtractInfo" + } + } + } + } + } + } + } + }, + "/api/analysis/user": { + "post": { + "tags": [ + "Analysis" + ], + "summary": "Given a valid ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisRequest request, queries the database to\r\nretrieve the rule violations the what-if scenario described would produce.", + "operationId": "UserWhatIf", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisResponse" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisResponse" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisResponse" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisResponse" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisResponse" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisResponse" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisResponse" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisResponse" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisResponse" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisResponse" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisResponse" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisResponse" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisResponse" + } + } + } + } + } + } + }, + "/api/analysis/drillDown": { + "post": { + "tags": [ + "Analysis" + ], + "summary": "Endpoint for executing drill down requests. Drill down gives details regarding how a rule has been violated.", + "operationId": "DrillDown", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + } + } + } + } + } + }, + "/api/analysis/multipleRulesDrillDown": { + "post": { + "tags": [ + "Analysis" + ], + "summary": "Endpoint for executing drill down requests. Drill down gives details regarding how a rule has been violated.", + "operationId": "DrillDown", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.MultipleRulesDrilldownRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.MultipleRulesDrilldownRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.MultipleRulesDrilldownRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.MultipleRulesDrilldownRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.MultipleRulesDrilldownRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.MultipleRulesDrilldownRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.MultipleRulesDrilldownRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.MultipleRulesDrilldownRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.MultipleRulesDrilldownRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.MultipleRulesDrilldownRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.MultipleRulesDrilldownRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.MultipleRulesDrilldownRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.MultipleRulesDrilldownRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.MultipleRulesDrilldownRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.MultipleRulesDrilldownRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.MultipleRulesDrilldownRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.MultipleRulesDrilldownRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse" + } + } + } + } + } + } + } + }, + "/api/analysis/{securityExtractId}/{rulebookId}": { + "get": { + "tags": [ + "Analysis" + ], + "summary": "Gets an Analysis, based on the supplied !:securityExtractId and !:rulebookId parameters.", + "operationId": "GetAnalysis", + "parameters": [ + { + "name": "securityExtractId", + "in": "path", + "description": "Represents the security extract unique identifier which is used to obtain the Analysis.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "rulebookId", + "in": "path", + "description": "Represents the rule book unique identifier which is used to obtain the Analysis.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.AnalysisModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.AnalysisModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.AnalysisModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.AnalysisModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.AnalysisModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.AnalysisModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.AnalysisModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.AnalysisModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.AnalysisModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.AnalysisModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.AnalysisModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.AnalysisModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.AnalysisModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.AnalysisModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.AnalysisModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.AnalysisModel" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/analysis/extract/{externalReference}": { + "get": { + "tags": [ + "Analysis" + ], + "summary": "Gets an Security Extract, based on the supplied externalReference parameter.", + "operationId": "GetExtractByExternalReference", + "parameters": [ + { + "name": "externalReference", + "in": "path", + "description": "Represents the unique external reference which is used to obtain the Security Extract.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/analysis/extract/{securityExtractId}": { + "get": { + "tags": [ + "Analysis" + ], + "summary": "Gets a Security Extract based on the supplied security extract id.", + "operationId": "GetSecurityExtract", + "parameters": [ + { + "name": "securityExtractId", + "in": "path", + "description": "The unique identifier of the security extract.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ExtractModel" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + } + } + }, + "/api/offlinereporting/businessprocessconflictsummary/{analysisId}": { + "get": { + "tags": [ + "OfflineReporting" + ], + "summary": "Gets an odata list of offline business process conflict summary items, based on the supplied parameters.", + "operationId": "GetBusinessProcessConflictSummary", + "parameters": [ + { + "name": "analysisId", + "in": "path", + "description": "Represents the unique analysis identifier.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OfflineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OfflineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OfflineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OfflineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OfflineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OfflineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OfflineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OfflineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OfflineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OfflineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OfflineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OfflineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OfflineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OfflineReporting.BusinessProcessConflictSummary" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OfflineReporting.BusinessProcessConflictSummary" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OfflineReporting.BusinessProcessConflictSummary" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/usersummary/{analysisId}": { + "get": { + "tags": [ + "OnlineReporting" + ], + "summary": "Gets a list of user summary items, based on the supplied parameters.", + "operationId": "GetUserSummary", + "parameters": [ + { + "name": "analysisId", + "in": "path", + "description": "Represents the unique analysis identifier.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "skip", + "in": "query", + "description": "Represents the optional parameter which specifies how many items will be bypassed.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Represents the optional parameter which specifies how many items to returned.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserSummary" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserSummary" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserSummary" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserSummary" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserSummary" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserSummary" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserSummary" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserSummary" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserSummary" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserSummary" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserSummary" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserSummary" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/rolesummary/{analysisId}": { + "get": { + "tags": [ + "OnlineReporting" + ], + "summary": "Gets a list of role summary items, based on the supplied parameters.", + "operationId": "GetRoleSummary", + "parameters": [ + { + "name": "analysisId", + "in": "path", + "description": "Represents the unique analysis identifier.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "skip", + "in": "query", + "description": "Represents the optional parameter which specifies how many items will be bypassed.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Represents the optional parameter which specifies how many items to returned.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleSummary" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleSummary" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleSummary" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleSummary" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleSummary" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleSummary" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleSummary" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleSummary" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleSummary" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleSummary" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleSummary" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleSummary" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/userrisksummary/{analysisId}": { + "get": { + "tags": [ + "OnlineReporting" + ], + "summary": "Gets a list of user risk summary items, based on the supplied parameters.", + "operationId": "GetUserRiskSummary", + "parameters": [ + { + "name": "analysisId", + "in": "path", + "description": "Represents the unique analysis identifier.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "skip", + "in": "query", + "description": "Represents the optional parameter which specifies how many items will be bypassed.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Represents the optional parameter which specifies how many items to returned.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskSummary" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskSummary" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskSummary" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskSummary" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskSummary" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskSummary" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskSummary" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskSummary" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskSummary" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskSummary" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskSummary" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskSummary" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/riskiestrolesummary/{analysisId}": { + "get": { + "tags": [ + "OnlineReporting" + ], + "summary": "Gets a list of riskiest role summary items, based on the supplied parameters.", + "operationId": "GetRiskiestRoleSummary", + "parameters": [ + { + "name": "analysisId", + "in": "path", + "description": "Represents the unique analysis identifier.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "skip", + "in": "query", + "description": "Represents the optional parameter which specifies how many items will be bypassed.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Represents the optional parameter which specifies how many items to returned.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RiskiestRoleSummary" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RiskiestRoleSummary" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RiskiestRoleSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RiskiestRoleSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RiskiestRoleSummary" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RiskiestRoleSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RiskiestRoleSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RiskiestRoleSummary" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RiskiestRoleSummary" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RiskiestRoleSummary" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RiskiestRoleSummary" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RiskiestRoleSummary" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RiskiestRoleSummary" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RiskiestRoleSummary" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RiskiestRoleSummary" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RiskiestRoleSummary" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/userrisklevel/{analysisId}": { + "get": { + "tags": [ + "OnlineReporting" + ], + "summary": "Gets a list of user risk level items, based on the supplied parameters.", + "operationId": "GetUserRiskLevel", + "parameters": [ + { + "name": "analysisId", + "in": "path", + "description": "Represents the unique extract identifier.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "skip", + "in": "query", + "description": "Represents the optional parameter which specifies how many items will be bypassed.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Represents the optional parameter which specifies how many items to returned.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskLevel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskLevel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskLevel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskLevel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskLevel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskLevel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskLevel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskLevel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskLevel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskLevel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskLevel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskLevel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskLevel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskLevel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskLevel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskLevel" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/userauthorizationobject/{analysisId}": { + "get": { + "tags": [ + "OnlineReporting" + ], + "summary": "Gets a list of user authorization object items, based on the supplied parameters.", + "operationId": "GetUserAuthorizationObject", + "parameters": [ + { + "name": "analysisId", + "in": "path", + "description": "Represents the unique analysis identifier.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "skip", + "in": "query", + "description": "Represents the optional parameter which specifies how many items will be bypassed.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Represents the optional parameter which specifies how many items to returned.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserAuthorizationObject" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserAuthorizationObject" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserAuthorizationObject" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserAuthorizationObject" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserAuthorizationObject" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserAuthorizationObject" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserAuthorizationObject" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserAuthorizationObject" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserAuthorizationObject" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserAuthorizationObject" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserAuthorizationObject" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserAuthorizationObject" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserAuthorizationObject" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserAuthorizationObject" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserAuthorizationObject" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserAuthorizationObject" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/userremediation/{analysisId}": { + "get": { + "tags": [ + "OnlineReporting" + ], + "summary": "Gets a list of user remediation items, based on the supplied parameters.", + "operationId": "GetUserRemediation", + "parameters": [ + { + "name": "analysisId", + "in": "path", + "description": "Represents the unique analysis identifier.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "skip", + "in": "query", + "description": "Represents the optional parameter which specifies how many items will be bypassed.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Represents the optional parameter which specifies how many items to returned.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRemediation" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRemediation" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRemediation" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRemediation" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRemediation" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRemediation" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRemediation" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRemediation" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRemediation" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRemediation" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRemediation" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRemediation" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRemediation" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRemediation" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRemediation" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRemediation" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + }, + "deprecated": true + } + }, + "/api/securityrolesreport/{analysisId}": { + "get": { + "tags": [ + "OnlineReporting" + ], + "summary": "Gets a list of security roles report items, based on the supplied parameters.", + "operationId": "GetSecurityRolesReport", + "parameters": [ + { + "name": "analysisId", + "in": "path", + "description": "Represents the unique extract identifier.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "skip", + "in": "query", + "description": "Represents the optional parameter which specifies how many items will be bypassed.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Represents the optional parameter which specifies how many items to returned.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.SecurityRolesReport" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.SecurityRolesReport" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.SecurityRolesReport" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.SecurityRolesReport" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.SecurityRolesReport" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.SecurityRolesReport" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.SecurityRolesReport" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.SecurityRolesReport" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.SecurityRolesReport" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.SecurityRolesReport" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.SecurityRolesReport" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.SecurityRolesReport" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.SecurityRolesReport" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.SecurityRolesReport" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.SecurityRolesReport" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.SecurityRolesReport" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/roleconflictmatrix/{analysisId}": { + "get": { + "tags": [ + "OnlineReporting" + ], + "summary": "Gets a list of role conflict matrix items, based on the supplied parameters.", + "operationId": "GetRoleConflictMatrix", + "parameters": [ + { + "name": "analysisId", + "in": "path", + "description": "Represents the unique analysis identifier.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "skip", + "in": "query", + "description": "Represents the optional parameter which specifies how many items will be bypassed.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Represents the optional parameter which specifies how many items to returned.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleConflictMatrix" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleConflictMatrix" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleConflictMatrix" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleConflictMatrix" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleConflictMatrix" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleConflictMatrix" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleConflictMatrix" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleConflictMatrix" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleConflictMatrix" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleConflictMatrix" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleConflictMatrix" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleConflictMatrix" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleConflictMatrix" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleConflictMatrix" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleConflictMatrix" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleConflictMatrix" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/roleremediation/{analysisId}": { + "get": { + "tags": [ + "OnlineReporting" + ], + "summary": "Gets a list of role remediation items, based on the supplied parameters.", + "operationId": "GetRoleRemediation", + "parameters": [ + { + "name": "analysisId", + "in": "path", + "description": "Represents the unique analysis identifier.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "skip", + "in": "query", + "description": "Represents the optional parameter which specifies how many items will be bypassed.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Represents the optional parameter which specifies how many items to returned.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleRemediation" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleRemediation" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleRemediation" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleRemediation" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleRemediation" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleRemediation" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleRemediation" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleRemediation" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleRemediation" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleRemediation" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleRemediation" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleRemediation" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleRemediation" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleRemediation" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleRemediation" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleRemediation" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + }, + "deprecated": true + } + }, + "/api/usertcodelevelrisk/{analysisId}": { + "get": { + "tags": [ + "OnlineReporting" + ], + "summary": "Gets a list of user tcode level risk items, based on the supplied parameters.", + "operationId": "GetUserTCodeLevelRisk", + "parameters": [ + { + "name": "analysisId", + "in": "path", + "description": "Represents the unique analysis identifier.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "skip", + "in": "query", + "description": "Represents the optional parameter which specifies how many items will be bypassed.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Represents the optional parameter which specifies how many items to returned.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserTCodeLevelRisk" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserTCodeLevelRisk" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserTCodeLevelRisk" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserTCodeLevelRisk" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserTCodeLevelRisk" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserTCodeLevelRisk" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserTCodeLevelRisk" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserTCodeLevelRisk" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserTCodeLevelRisk" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserTCodeLevelRisk" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserTCodeLevelRisk" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserTCodeLevelRisk" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserTCodeLevelRisk" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserTCodeLevelRisk" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserTCodeLevelRisk" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserTCodeLevelRisk" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/conflictsummary/{analysisId}": { + "get": { + "tags": [ + "OnlineReporting" + ], + "summary": "Gets a list of conflict summary items, based on the supplied parameters.", + "operationId": "GetConflictSummary", + "parameters": [ + { + "name": "analysisId", + "in": "path", + "description": "Represents the unique analysis identifier.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "skip", + "in": "query", + "description": "Represents the optional parameter which specifies how many items will be bypassed.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Represents the optional parameter which specifies how many items to returned.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.ConflictSummary" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.ConflictSummary" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.ConflictSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.ConflictSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.ConflictSummary" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.ConflictSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.ConflictSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.ConflictSummary" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.ConflictSummary" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.ConflictSummary" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.ConflictSummary" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.ConflictSummary" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.ConflictSummary" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.ConflictSummary" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.ConflictSummary" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.ConflictSummary" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/businessprocessconflictsummary/{analysisId}": { + "get": { + "tags": [ + "OnlineReporting" + ], + "summary": "Gets a list of business process conflict summary items, based on the supplied parameters.", + "operationId": "GetBusinessProcessConflictSummary", + "parameters": [ + { + "name": "analysisId", + "in": "path", + "description": "Represents the unique analysis identifier.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "skip", + "in": "query", + "description": "Represents the optional parameter which specifies how many items will be bypassed.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Represents the optional parameter which specifies how many items to returned.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.BusinessProcessConflictSummary" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.BusinessProcessConflictSummary" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.BusinessProcessConflictSummary" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.BusinessProcessConflictSummary" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/roleDetails/{analysisId}": { + "get": { + "tags": [ + "OnlineReporting" + ], + "summary": "Gets a list of role detail items, based on the supplied parameters.", + "operationId": "GetRoleDetails", + "parameters": [ + { + "name": "analysisId", + "in": "path", + "description": "Represents the unique analysis identifier.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "skip", + "in": "query", + "description": "Represents the optional parameter which specifies how many items will be bypassed.", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + }, + { + "name": "take", + "in": "query", + "description": "Represents the optional parameter which specifies how many items to returned.", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 10 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleDetails" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleDetails" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleDetails" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleDetails" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleDetails" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleDetails" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleDetails" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleDetails" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleDetails" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleDetails" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleDetails" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleDetails" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleDetails" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleDetails" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleDetails" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleDetails" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + }, + "deprecated": true + } + }, + "/api/userpermissionleveldetail/{analysisId}": { + "get": { + "tags": [ + "OnlineReporting" + ], + "summary": "Gets facts ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserPermissionLevelDetail by system with scope information.\r\nSupports ODATA filtering", + "operationId": "GetUserPermissionLevelDetail", + "parameters": [ + { + "name": "analysisId", + "in": "path", + "description": "Represents the unique analysis identifier.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "skip", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 0 + } + }, + { + "name": "take", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 10 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserPermissionLevelDetail" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserPermissionLevelDetail" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserPermissionLevelDetail" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserPermissionLevelDetail" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserPermissionLevelDetail" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserPermissionLevelDetail" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserPermissionLevelDetail" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserPermissionLevelDetail" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserPermissionLevelDetail" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserPermissionLevelDetail" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserPermissionLevelDetail" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserPermissionLevelDetail" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserPermissionLevelDetail" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserPermissionLevelDetail" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserPermissionLevelDetail" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserPermissionLevelDetail" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + }, + "deprecated": true + } + }, + "/api/role/system/{systemId}": { + "get": { + "tags": [ + "Role" + ], + "summary": "Gets roles from specified system.", + "operationId": "GetRolesFromSystem", + "parameters": [ + { + "name": "systemId", + "in": "path", + "description": "Identifier of the system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/role/extract/{extractId}": { + "get": { + "tags": [ + "Role" + ], + "summary": "Gets roles from specified extract.", + "operationId": "GetRolesFromExtract", + "parameters": [ + { + "name": "extractId", + "in": "path", + "description": "Identifier of the extract.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RoleModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/scopedanalysis/hitsbyuserandrisk/system/{systemId}": { + "get": { + "tags": [ + "ScopedAnalysis" + ], + "summary": "Gets Hits by user and Risk from specified system.", + "operationId": "GetRolesFromSystem", + "parameters": [ + { + "name": "systemId", + "in": "path", + "description": "Identifier of the system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/scopedanalysis/hitsbyuserandrisk/analysis/{analysisId}": { + "get": { + "tags": [ + "ScopedAnalysis" + ], + "summary": "Gets Hits by user and Risk from specified analysis.", + "operationId": "GetHitsByUserAndRiskForAnAnalysis", + "parameters": [ + { + "name": "analysisId", + "in": "path", + "description": "Identifier of the analysis.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/scopedanalysis/analysishits/{analysisId}": { + "get": { + "tags": [ + "ScopedAnalysis" + ], + "summary": "Gets facts ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.AnalysisHitModel by analysis without scope information.\r\nSupports ODATA filtering", + "operationId": "GetAnalysisHits", + "parameters": [ + { + "name": "analysisId", + "in": "path", + "description": "Identifier of the analysis.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.AnalysisHitModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.AnalysisHitModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.AnalysisHitModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.AnalysisHitModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.AnalysisHitModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.AnalysisHitModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.AnalysisHitModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.AnalysisHitModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.AnalysisHitModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.AnalysisHitModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.AnalysisHitModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.AnalysisHitModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.AnalysisHitModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.AnalysisHitModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.AnalysisHitModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.AnalysisHitModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/scopedanalysis/scopedanalysishits/{analysisId}": { + "get": { + "tags": [ + "ScopedAnalysis" + ], + "summary": "Gets facts ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.ScopedAnalysisHitModel by analysis with scope information.\r\nSupports ODATA filtering", + "operationId": "GetScopedAnalysisHits", + "parameters": [ + { + "name": "analysisId", + "in": "path", + "description": "Identifier of the analysis.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.ScopedAnalysisHitModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.ScopedAnalysisHitModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.ScopedAnalysisHitModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.ScopedAnalysisHitModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.ScopedAnalysisHitModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.ScopedAnalysisHitModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.ScopedAnalysisHitModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.ScopedAnalysisHitModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.ScopedAnalysisHitModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.ScopedAnalysisHitModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.ScopedAnalysisHitModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.ScopedAnalysisHitModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.ScopedAnalysisHitModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.ScopedAnalysisHitModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.ScopedAnalysisHitModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.ScopedAnalysisHitModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/tenancyCheck/analysis/{analysisId}": { + "post": { + "tags": [ + "TenancyCheck" + ], + "summary": "Determines if analysis belongs to any of specified customers.", + "operationId": "DoesAnalysisBelongToAnyOfCustomers", + "parameters": [ + { + "name": "analysisId", + "in": "path", + "description": "Identifier of the analysis.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/DoesAnalysisBelongToAnyOfCustomersCustomerids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json": { + "schema": { + "type": "boolean" + } + }, + "application/xml": { + "schema": { + "type": "boolean" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "boolean" + } + }, + "text/plain": { + "schema": { + "type": "boolean" + } + }, + "text/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/tenancyCheck/extract/{extractId}": { + "post": { + "tags": [ + "TenancyCheck" + ], + "summary": "Determines if extract belongs to any of specified customers.", + "operationId": "DoesExtractBelongToAnyOfCustomers", + "parameters": [ + { + "name": "extractId", + "in": "path", + "description": "Identifier of the extract.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/DoesAnalysisBelongToAnyOfCustomersCustomerids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json": { + "schema": { + "type": "boolean" + } + }, + "application/xml": { + "schema": { + "type": "boolean" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "boolean" + } + }, + "text/plain": { + "schema": { + "type": "boolean" + } + }, + "text/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/tenancyCheck/rulebook/{rulebookId}": { + "post": { + "tags": [ + "TenancyCheck" + ], + "summary": "Determines if rulebook belongs to any of specified customers.", + "operationId": "DoesRulebookBelongToAnyOfCustomers", + "parameters": [ + { + "name": "rulebookId", + "in": "path", + "description": "Identifier of the rulebook.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/DoesAnalysisBelongToAnyOfCustomersCustomerids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json": { + "schema": { + "type": "boolean" + } + }, + "application/xml": { + "schema": { + "type": "boolean" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "boolean" + } + }, + "text/plain": { + "schema": { + "type": "boolean" + } + }, + "text/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/tenancyCheck/system/{systemId}": { + "post": { + "tags": [ + "TenancyCheck" + ], + "summary": "Determines if system belongs to any of specified customers.", + "operationId": "DoesSystemBelongToAnyOfCustomers", + "parameters": [ + { + "name": "systemId", + "in": "path", + "description": "Identifier of the system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/DoesAnalysisBelongToAnyOfCustomersCustomerids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json": { + "schema": { + "type": "boolean" + } + }, + "application/xml": { + "schema": { + "type": "boolean" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "boolean" + } + }, + "text/plain": { + "schema": { + "type": "boolean" + } + }, + "text/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/user/system/{systemId}": { + "get": { + "tags": [ + "User" + ], + "summary": "Gets users from specified system.", + "operationId": "GetUsersFromSystem", + "parameters": [ + { + "name": "systemId", + "in": "path", + "description": "Identifier of the system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/user/extract/{extractId}": { + "get": { + "tags": [ + "User" + ], + "summary": "Gets users from specified extract.", + "operationId": "GetUsersFromExtract", + "parameters": [ + { + "name": "extractId", + "in": "path", + "description": "Identifier of the extract.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.UserModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accounts": { + "post": { + "tags": [ + "Workflow" + ], + "summary": "Onboards a new account so that rulebooks and extracts can be added to it.", + "operationId": "OnboardAccount", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.MultiSystemOnboardingAccountAndSystemRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.MultiSystemOnboardingAccountAndSystemRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.MultiSystemOnboardingAccountAndSystemRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.MultiSystemOnboardingAccountAndSystemRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.MultiSystemOnboardingAccountAndSystemRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.MultiSystemOnboardingAccountAndSystemRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.MultiSystemOnboardingAccountAndSystemRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.MultiSystemOnboardingAccountAndSystemRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.MultiSystemOnboardingAccountAndSystemRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.MultiSystemOnboardingAccountAndSystemRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.MultiSystemOnboardingAccountAndSystemRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.MultiSystemOnboardingAccountAndSystemRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.MultiSystemOnboardingAccountAndSystemRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.MultiSystemOnboardingAccountAndSystemRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.MultiSystemOnboardingAccountAndSystemRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.MultiSystemOnboardingAccountAndSystemRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.MultiSystemOnboardingAccountAndSystemRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/accounts/{accountId}/rulebooks": { + "post": { + "tags": [ + "Workflow" + ], + "summary": "Updates the rulebook of an onboarded account, and kicks off an analysis workflow.", + "operationId": "UpdateRulebook", + "parameters": [ + { + "name": "accountId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/accounts/{accountId}/extracts": { + "post": { + "tags": [ + "Workflow" + ], + "summary": "Updates the security extract of an onboarded account, and kicks off an analysis workflow.", + "operationId": "UpdateSecurityDb", + "parameters": [ + { + "name": "accountId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "systemId", + "in": "query", + "description": "", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "description": "Security extract file. MUST be zipped.", + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/workflow/analyses": { + "post": { + "tags": [ + "Workflow" + ], + "summary": "Queues a new analysis job in the service bus.", + "operationId": "QueueAnalysisJob", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.WebApi.Models.Workflow.QueueAnalysisModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.WebApi.Models.Workflow.QueueAnalysisModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.WebApi.Models.Workflow.QueueAnalysisModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.WebApi.Models.Workflow.QueueAnalysisModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.WebApi.Models.Workflow.QueueAnalysisModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.WebApi.Models.Workflow.QueueAnalysisModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.WebApi.Models.Workflow.QueueAnalysisModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.WebApi.Models.Workflow.QueueAnalysisModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.WebApi.Models.Workflow.QueueAnalysisModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.WebApi.Models.Workflow.QueueAnalysisModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.WebApi.Models.Workflow.QueueAnalysisModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.WebApi.Models.Workflow.QueueAnalysisModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.WebApi.Models.Workflow.QueueAnalysisModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.WebApi.Models.Workflow.QueueAnalysisModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.WebApi.Models.Workflow.QueueAnalysisModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.WebApi.Models.Workflow.QueueAnalysisModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.WebApi.Models.Workflow.QueueAnalysisModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/workflow/reports": { + "post": { + "tags": [ + "Workflow" + ], + "summary": "Queues up a full conflict matrix generation of the specified hit analysis.", + "operationId": "QueueReportAnalysis", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.QueueReportAnalysisRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.QueueReportAnalysisRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.QueueReportAnalysisRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.QueueReportAnalysisRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.QueueReportAnalysisRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.QueueReportAnalysisRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.QueueReportAnalysisRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.QueueReportAnalysisRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.QueueReportAnalysisRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.QueueReportAnalysisRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.QueueReportAnalysisRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.QueueReportAnalysisRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.QueueReportAnalysisRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.QueueReportAnalysisRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.QueueReportAnalysisRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.QueueReportAnalysisRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.QueueReportAnalysisRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + } + }, + "components": { + "requestBodies": { + "DoesAnalysisBelongToAnyOfCustomersCustomerids": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + }, + "description": "Identifiers of customers." + } + }, + "schemas": { + "ErpMaestro.ErpAnalysis.Common.Models.SecurityExtractInfo": { + "type": "object", + "properties": { + "analysisId": { + "format": "int32", + "type": "integer" + }, + "securityExtractReferenceId": { + "type": "string" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisRequest": { + "description": "Model for a single user what-if realtime analysis request. See ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisResponse for\r\nthe response model.", + "required": [ + "accountId", + "systemId", + "username" + ], + "type": "object", + "properties": { + "accountId": { + "format": "uuid", + "description": "Reference to the account that the what-if analysis should use. Account Id must already be\r\nexamined to verify tenancy and access rights.", + "type": "string" + }, + "systemId": { + "format": "int32", + "description": "Reference to the system id that the analysis is running against. System Id must already be\r\nexamined to verify tenancy and access rights.", + "type": "integer" + }, + "username": { + "description": "Username to analyze the role changes against.", + "maxLength": 255, + "type": "string" + }, + "rolesToAdd": { + "description": "List of roles to add for what-if analysis", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rolesToRemove": { + "description": "List of roles to remove for what-if analysis", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "groupsToAdd": { + "description": "List of roles to add for what-if analysis", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "groupsToRemove": { + "description": "List of roles to remove for what-if analysis", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "analysisId": { + "format": "int32", + "description": "Represents the analysis unique identifier.", + "type": "integer" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisResponse": { + "description": "Model for a single user what-if realtime analysis response. See ErpMaestro.ErpAnalysis.Common.Models.UserWhatIfAnalysisRequest for the\r\nrequest model.", + "type": "object", + "properties": { + "isSuperUser": { + "description": "TRUE if user has access to everything in the system or is a 'SuperUser'.", + "type": "boolean" + }, + "extractTimestampUtc": { + "format": "date-time", + "description": "The timestamp of the security extract used in the analysis.", + "type": "string" + }, + "rulebookTimestampUtc": { + "format": "date-time", + "description": "The timestamp of the rulebook version used in the analysis.", + "type": "string" + }, + "ruleViolations": { + "description": "The list of rule violations the requested combination generated.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RuleViolation" + } + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.RuleViolation": { + "description": "Represents an identified rule violation based upon the rulebook.", + "type": "object", + "properties": { + "ruleId": { + "format": "int64", + "description": "Internal ID of the rule.", + "type": "integer" + }, + "ruleName": { + "description": "The name of the rule that's been violated.", + "type": "string" + }, + "ruleDescription": { + "description": "The description of the rule that's been violated.", + "type": "string" + }, + "riskLevel": { + "$ref": "#/components/schemas/ErpMaestro.Services.RulebookAbstractions.Commons.Enums.Rating" + }, + "riskType": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.RiskType" + } + } + }, + "ErpMaestro.Services.RulebookAbstractions.Commons.Enums.Rating": { + "enum": [ + "undefined", + "informational", + "low", + "medium", + "high", + "critical" + ], + "type": "string" + }, + "ErpMaestro.ErpAnalysis.Common.Models.RiskType": { + "enum": [ + "undefined", + "sOD", + "sEN", + "pRIV" + ], + "type": "string" + }, + "ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownRequest": { + "description": "Model for a drill down request.", + "required": [ + "accountId", + "systemId", + "username", + "ruleId" + ], + "type": "object", + "properties": { + "accountId": { + "format": "uuid", + "description": "Reference to the account that the what-if analysis should use. Account Id must already be\r\nexamined to verify tenancy and access rights.", + "type": "string" + }, + "systemId": { + "format": "int32", + "description": "Reference to the system id that the analysis is running against. System Id must already be\r\nexamined to verify tenancy and access rights.", + "type": "integer" + }, + "username": { + "description": "Username to analyze the role changes against.", + "maxLength": 255, + "type": "string" + }, + "ruleId": { + "format": "int64", + "description": "Rule ID to execute drill down on.", + "type": "integer" + }, + "rolesToAdd": { + "description": "List of roles to add for what-if analysis", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rolesToRemove": { + "description": "List of roles to remove for what-if analysis", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "groupsToAdd": { + "description": "List of roles to add for what-if analysis", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "groupsToRemove": { + "description": "List of roles to remove for what-if analysis", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownResponse": { + "description": "Represents a response to a Drill Down request. See ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownRequest", + "type": "object", + "properties": { + "ruleId": { + "format": "int64", + "description": "Rule ID", + "type": "integer" + }, + "ruleDescription": { + "description": "Rule Name", + "type": "string" + }, + "extractTimestampUtc": { + "format": "date-time", + "description": "The timestamp of the security extract used in the analysis.", + "type": "string" + }, + "rulebookTimestampUtc": { + "format": "date-time", + "description": "The timestamp of the rulebook version used in the analysis.", + "type": "string" + }, + "drillDownBusinessFunctionHits": { + "description": "A collection of business function hits with the details of how a particular permission was hit.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownBusinessFunctionHit" + } + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownBusinessFunctionHit": { + "description": "Used to represent a business function hit on a drill down request", + "type": "object", + "properties": { + "permissionHits": { + "description": "Permission hits associated to this business function hit.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownPermissionHit" + } + }, + "businessFunctionId": { + "format": "int32", + "description": "ID", + "type": "integer" + }, + "businessFunctionCode": { + "description": "Code", + "type": "string" + }, + "businessFunctionName": { + "description": "Name", + "type": "string" + }, + "businessFunctionDescription": { + "description": "Description", + "type": "string" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.DrillDown.DrillDownPermissionHit": { + "description": "Represents a permission hit on a drill down request", + "type": "object", + "properties": { + "permissionId": { + "format": "int32", + "description": "Permission ID", + "type": "integer" + }, + "permissionName": { + "description": "Permission Name", + "type": "string" + }, + "isUserHit": { + "description": "TRUE if hit comes from UserToPermissions table. Indicates a direct hit on the user", + "type": "boolean" + }, + "isRoleHit": { + "description": "TRUE if hit comes from RoleToPermissions table. Indicates a hit on a role that is assigned to the user", + "type": "boolean" + }, + "roleName": { + "description": "Name of the role that caused the hit.", + "type": "string" + }, + "isGroupHit": { + "description": "TRUE if hit comes from GroupToPermissions table. Indicates a hit on a group that is assigned to the user (or to a role)", + "type": "boolean" + }, + "hitGroupName": { + "description": "Name of the group that caused the hit.", + "type": "string" + }, + "groupComesFromRole": { + "description": "TRUE if the group is assigned to a role that is assigned to the user, FALSE if direct link between user and group.", + "type": "boolean" + }, + "groupRoleName": { + "description": "Name of the role the group is assigned to", + "type": "string" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.DrillDown.MultipleRulesDrilldownRequest": { + "required": [ + "accountId", + "systemId", + "username", + "ruleIds" + ], + "type": "object", + "properties": { + "accountId": { + "format": "uuid", + "description": "Reference to the account that the what-if analysis should use. Account Id must already be\r\nexamined to verify tenancy and access rights.", + "type": "string" + }, + "systemId": { + "format": "int32", + "description": "Reference to the system id that the analysis is running against. System Id must already be\r\nexamined to verify tenancy and access rights.", + "type": "integer" + }, + "username": { + "description": "Username to analyze the role changes against.", + "maxLength": 255, + "type": "string" + }, + "ruleIds": { + "description": "Rule IDs to execute drill down on.", + "uniqueItems": false, + "type": "array", + "items": { + "format": "int64", + "type": "integer" + } + }, + "rolesToAdd": { + "description": "List of roles to add for what-if analysis", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rolesToRemove": { + "description": "List of roles to remove for what-if analysis", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "groupsToAdd": { + "description": "List of roles to add for what-if analysis", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "groupsToRemove": { + "description": "List of roles to remove for what-if analysis", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.AnalysisModel": { + "description": "Serves as the model for the Analysis.", + "type": "object", + "properties": { + "id": { + "format": "int32", + "description": "Represents the required unique Analysis identifier.", + "type": "integer" + }, + "accountId": { + "format": "uuid", + "description": "Represents the required Account/Customer identifier.", + "type": "string" + }, + "extractId": { + "format": "int32", + "description": "Represents the required Security Extract identifier.", + "type": "integer" + }, + "rulebookId": { + "format": "int32", + "description": "Represents the required Rulebook identifier.", + "type": "integer" + }, + "createdTimestampUtc": { + "format": "date-time", + "description": "Represents the required Date/Time when the Analysis was created as a UTC.", + "type": "string" + }, + "createdBy": { + "description": "Represents the required user who created the Analysis.", + "type": "string" + }, + "completedTimestampUtc": { + "format": "date-time", + "description": "Represents the optional Date/Time when the Analysis was updated as a UTC.", + "type": "string" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.ExtractModel": { + "description": "Represents the model for extract.", + "type": "object", + "properties": { + "id": { + "format": "int32", + "description": "Identifier of the extract.", + "type": "integer" + }, + "systemId": { + "format": "int32", + "description": "Identifier of related system.", + "type": "integer" + }, + "name": { + "description": "Name of the extract.", + "type": "string" + }, + "createdTimestampUtc": { + "format": "date-time", + "description": "Created date of extract.", + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/ErpMaestro.Services.Common.Models.Enums.ErpSystemType" + }, + "isExtractComplete": { + "description": "Determines if extract is complete.", + "type": "boolean" + } + } + }, + "ErpMaestro.Services.Common.Models.Enums.ErpSystemType": { + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ], + "type": "string" + }, + "ErpMaestro.ErpAnalysis.Common.Models.OfflineReporting.BusinessProcessConflictSummary": { + "description": "Represents the summary of the user conflict data, by business process.", + "type": "object", + "properties": { + "ruleCode": { + "description": "Represents the identifier of the risk (rule), which makes up the group of\r\nrisk being summarized in the business process conflict summary.", + "type": "string" + }, + "riskRating": { + "description": "Represents the rating of risk (rule) involved in the business process conflict.\r\nTypical values are: Informational, Low, Medium, High and Critical.", + "type": "string" + }, + "ruleName": { + "description": "Represents the descriptive name of risk (rule) involved in the business process conflict.", + "type": "string" + }, + "ruleBusinessProcess": { + "description": "Represents the root level business process of the risk (rule).", + "type": "string" + }, + "userId": { + "description": "Represents the unique identifier of user involved in the conflict.", + "type": "string" + }, + "fullName": { + "description": "Represents the full name of the user involved in the conflict.", + "type": "string" + }, + "businessFunctionName1": { + "description": "Represents the comma delimited list of one or more business functions that make up the risk (rule).", + "type": "string" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserSummary": { + "description": "Represents the user summary item.", + "type": "object", + "properties": { + "highestLevelOfFullyExecutedRisks": { + "description": "Represent the highest level of fully executed risks.", + "type": "string" + }, + "highestLevelOfFullyExecutedUnmitigatedRisk": { + "description": "Represents the highest level of utilization fully-executed unmitigated risks.", + "type": "string" + }, + "highestLevelOfRisks": { + "description": "Represents the highest level of risks.", + "type": "string" + }, + "highestLevelOfUnmitigatedRisk": { + "description": "Represents the highest level of unmitigated risks.", + "type": "string" + }, + "highImpactRecommendationCount": { + "format": "int32", + "description": "Represents the highest impact recommendation count.", + "type": "integer" + }, + "numberOfAssignedDirectProfiles": { + "format": "int32", + "description": "Represents the number of assigned direct profiles.", + "type": "integer" + }, + "numberOfAssignedRoles": { + "format": "int32", + "description": "Represents the number of roles assigned to the user.", + "type": "integer" + }, + "numberOfFullyExecutedCriticalOrHighRisks": { + "format": "int32", + "description": "Represents the number of fully-executed utilization critical or high risks.", + "type": "integer" + }, + "numberOfFullyExecutedOtherRisks": { + "format": "int32", + "description": "Represents the number of other utilization fully-executed risks.", + "type": "integer" + }, + "numberOfNotFullyExecutedCriticalOrHighRisks": { + "format": "int32", + "description": "Represents the number of not fully-executed utilization critical or high risks.", + "type": "integer" + }, + "numberOfNotFullyExecutedOtherRisks": { + "format": "int32", + "description": "Represents the number of other not utilization fully-executed risks.", + "type": "integer" + }, + "totalNumberOfRisks": { + "format": "int32", + "description": "Represents the total number of risks, which is the count of the distinct rule codes in a business process conflict summary.", + "type": "integer" + }, + "totalNumberOfUnmitigatedRisks": { + "format": "int32", + "description": "Represents the total number of unmitigated risks.", + "type": "integer" + }, + "totalRecommendationCount": { + "format": "int32", + "description": "Represents the total count of recommendations.", + "type": "integer" + }, + "userGroup": { + "description": "Represents the name of the group that the user belongs to.", + "type": "string" + }, + "username": { + "description": "Represents the user name of the user summary.", + "type": "string" + }, + "userId": { + "description": "Identifier of the user.", + "type": "string" + }, + "country": { + "description": "Country of the user.", + "type": "string" + }, + "system": { + "description": "System of the user.", + "type": "string" + }, + "department": { + "description": "Department of the user.", + "type": "string" + }, + "costCenter": { + "description": "Cost Center of the user.", + "type": "string" + }, + "function": { + "description": "Function of the user.", + "type": "string" + }, + "custom01": { + "description": "Any custom value related to user.", + "type": "string" + }, + "custom02": { + "description": "Any custom value related to user.", + "type": "string" + }, + "custom03": { + "description": "Any custom value related to user.", + "type": "string" + }, + "custom04": { + "description": "Any custom value related to user.", + "type": "string" + }, + "custom05": { + "description": "Any custom value related to user.", + "type": "string" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleSummary": { + "description": "Represents the role summary item.", + "type": "object", + "properties": { + "roleName": { + "description": "Represents the role name.", + "type": "string" + }, + "roleType": { + "description": "Represents the role type.", + "type": "string" + }, + "numberOfUsersAssigned": { + "format": "int32", + "description": "Represents the number of assigned users.", + "type": "integer" + }, + "numberOfNotUsedSensitiveTcodes": { + "format": "int32", + "description": "Represents the number of not used sensitive TCodes.", + "type": "integer" + }, + "numberOfNotUsedNonSensitiveTcodes": { + "format": "int32", + "description": "Represents the number of not used non-sensitive TCodes.", + "type": "integer" + }, + "numberOfUsersNotUsingRole": { + "format": "int32", + "description": "Represents the number of users which are not using in role.", + "type": "integer" + }, + "numberOfCriticalAndHighRisks": { + "format": "int32", + "description": "Represents the number of critical and high risks.", + "type": "integer" + }, + "numberOfOtherRisks": { + "format": "int32", + "description": "Represents the number of other risks.", + "type": "integer" + }, + "numberOfChildren": { + "format": "int32", + "description": "Represents the number of children", + "type": "integer" + }, + "derivedParent": { + "description": "Represents the derived parent.", + "type": "string" + }, + "numberOfCompositeRoleMembership": { + "format": "int32", + "description": "Represents the number of composite role membership.", + "type": "integer" + }, + "numberOfDerivedChildren": { + "format": "int32", + "description": "Represents the number of derived children.", + "type": "integer" + }, + "numberOfFullyExecutedCriticalOrHighRisks": { + "format": "int32", + "description": "Represents the number of fully executed critical or high risks.", + "type": "integer" + }, + "numberOfFullyExecutedOtherRisks": { + "format": "int32", + "description": "Represents the number of fully executed other risks.", + "type": "integer" + }, + "numberOfNotFullyExecutedCriticalHighRisks": { + "format": "int32", + "description": "Represents the number of not fully executed critical and high risks.", + "type": "integer" + }, + "numberOfNotFullyExecutedOtherRisks": { + "format": "int32", + "description": "Represents the number of not fully executed other risks.", + "type": "integer" + }, + "highestLevelOfFullyExecutedRisks": { + "description": "Represents the highest level of fully executed risks.", + "type": "string" + }, + "highestLevelOfRisks": { + "description": "Represents the highest level of risks.", + "type": "string" + }, + "highImpactRecommendationCount": { + "format": "int32", + "description": "Represents the count of high impact recomendations.", + "type": "integer" + }, + "totalRecommendationCount": { + "format": "int32", + "description": "Represents the count of total recommendations.", + "type": "integer" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskSummary": { + "description": "Represents a rulebook rule (or risks).", + "type": "object", + "properties": { + "id": { + "format": "int64", + "description": "Represents the user risk summary unique identifier.", + "type": "integer" + }, + "riskRating": { + "description": "Represents the rule risk rating.\r\nE.g.: Critical, High, Low, etc.", + "type": "string" + }, + "ruleType": { + "description": "Represents the rule type.\r\nE.g.: SOD, SEN.", + "type": "string" + }, + "ruleCode": { + "description": "Representing the rule code.", + "type": "string" + }, + "ruleName": { + "description": "Represents the rule name.", + "type": "string" + }, + "businessFunctionCodes": { + "description": "Represents a comma separated list of business function codes associated with the rule.", + "type": "string" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RiskiestRoleSummary": { + "description": "Represents the riskiest role summary.", + "type": "object", + "properties": { + "roleName": { + "description": "Represents the name of role.", + "type": "string" + }, + "roleType": { + "description": "Represents the type of role.", + "type": "string" + }, + "critical": { + "format": "int32", + "description": "Represents the count of critical risks.", + "type": "integer" + }, + "high": { + "format": "int32", + "description": "Represents the count of high risks.", + "type": "integer" + }, + "other": { + "format": "int32", + "description": "Represents the count of other risks.", + "type": "integer" + }, + "roleRiskRank": { + "format": "int32", + "description": "Represents the role risk rank.", + "type": "integer" + }, + "activeUserCount": { + "format": "int32", + "description": "Represents the count of active users.", + "type": "integer" + }, + "userWeightedRiskRank": { + "format": "int32", + "description": "Represents the user weighted risk rank.", + "type": "integer" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRiskLevel": { + "type": "object", + "properties": { + "ruleCode": { + "type": "string" + }, + "ruleName": { + "type": "string" + }, + "riskRating": { + "type": "string" + }, + "ruleType": { + "type": "string" + }, + "ruleBusinessProcess": { + "type": "string" + }, + "userId": { + "type": "string" + }, + "userName": { + "type": "string" + }, + "userGroup": { + "type": "string" + }, + "stadUtilizationBucket": { + "type": "string" + }, + "cdhdrposUtilizationBucket": { + "type": "string" + }, + "mitigatingControls": { + "type": "string" + }, + "riskDescription": { + "type": "string" + }, + "isMitigated": { + "type": "boolean" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserAuthorizationObject": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "businessFunctionCode": { + "type": "string" + }, + "assignedFromRoleName": { + "type": "string" + }, + "assignedFromProfileName": { + "type": "string" + }, + "tcode": { + "type": "string" + }, + "sapAuthorizationName": { + "type": "string" + }, + "sapAuthorizationObject": { + "type": "string" + }, + "sapAuthorizationField": { + "type": "string" + }, + "sapAuthorizationValueFrom": { + "type": "string" + }, + "sapAuthorizationValueTo": { + "type": "string" + }, + "ruleAuthorizationObject": { + "type": "string" + }, + "ruleAuthorizationField": { + "type": "string" + }, + "ruleAuthorizationValueFrom": { + "type": "string" + }, + "ruleAuthorizationValueTo": { + "type": "string" + }, + "roleType": { + "type": "string" + }, + "roleIsDerived": { + "type": "boolean" + }, + "derivedParentRole": { + "type": "string" + }, + "parentProfile": { + "type": "string" + }, + "parentRoleName": { + "type": "string" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserRemediation": { + "description": "Serves as the item which determines if a role is assigned to a user and if the\r\nassignment has been used.", + "type": "object", + "properties": { + "userName": { + "description": "Represents the user name of the user associated with the remediation.", + "type": "string" + }, + "userGroup": { + "description": "Represents the group of the user associated with the remediation.", + "type": "string" + }, + "role": { + "description": "Represents the role of the remediation.", + "type": "string" + }, + "recommendation": { + "description": "Represents the recommendation of the remediation.", + "type": "string" + }, + "difficulty": { + "description": "Represents the difficulty level of the remediation.", + "type": "string" + }, + "impact": { + "description": "Represents the impact of the remediation.", + "type": "string" + }, + "highOrCriticalRiskCount": { + "format": "int32", + "description": "Represents the high or critical risk count of the remediation.", + "type": "integer" + }, + "otherRiskCount": { + "format": "int32", + "description": "Represents the other risk count of the remediation.", + "type": "integer" + }, + "totalRiskCount": { + "format": "int32", + "description": "Represents the total risk count of the remediation.", + "type": "integer" + }, + "userId": { + "description": "Identifier of the user.", + "type": "string" + }, + "country": { + "description": "Country of the user.", + "type": "string" + }, + "system": { + "description": "System of the user.", + "type": "string" + }, + "department": { + "description": "Department of the user.", + "type": "string" + }, + "costCenter": { + "description": "Cost Center of the user.", + "type": "string" + }, + "function": { + "description": "Function of the user.", + "type": "string" + }, + "custom01": { + "description": "Any custom value related to user.", + "type": "string" + }, + "custom02": { + "description": "Any custom value related to user.", + "type": "string" + }, + "custom03": { + "description": "Any custom value related to user.", + "type": "string" + }, + "custom04": { + "description": "Any custom value related to user.", + "type": "string" + }, + "custom05": { + "description": "Any custom value related to user.", + "type": "string" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.SecurityRolesReport": { + "type": "object", + "properties": { + "role": { + "type": "string" + }, + "tcode": { + "type": "string" + }, + "description": { + "type": "string" + }, + "stadUtilizationCount": { + "format": "int32", + "type": "integer" + }, + "cdhdrposUtilizationCount": { + "format": "int32", + "type": "integer" + }, + "profile": { + "type": "string" + }, + "fullName": { + "type": "string" + }, + "parent": { + "type": "string" + }, + "low": { + "type": "string" + }, + "high": { + "type": "string" + }, + "userId": { + "description": "Identifier of the user.", + "type": "string" + }, + "country": { + "description": "Country of the user.", + "type": "string" + }, + "system": { + "description": "System of the user.", + "type": "string" + }, + "department": { + "description": "Department of the user.", + "type": "string" + }, + "costCenter": { + "description": "Cost Center of the user.", + "type": "string" + }, + "function": { + "description": "Function of the user.", + "type": "string" + }, + "custom01": { + "description": "Any custom value related to user.", + "type": "string" + }, + "custom02": { + "description": "Any custom value related to user.", + "type": "string" + }, + "custom03": { + "description": "Any custom value related to user.", + "type": "string" + }, + "custom04": { + "description": "Any custom value related to user.", + "type": "string" + }, + "custom05": { + "description": "Any custom value related to user.", + "type": "string" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleConflictMatrix": { + "type": "object", + "properties": { + "rulebookName": { + "type": "string" + }, + "ruleCode": { + "type": "string" + }, + "ruleName": { + "type": "string" + }, + "riskRating": { + "type": "string" + }, + "ruleType": { + "type": "string" + }, + "ruleBusinessProcess": { + "type": "string" + }, + "businessFunctionCode": { + "type": "string" + }, + "businessFunctionName": { + "type": "string" + }, + "businessFunctionDescription": { + "type": "string" + }, + "businessFunctionBusinessProcess": { + "type": "string" + }, + "roleName": { + "type": "string" + }, + "assignedFrom": { + "type": "string" + }, + "roleProfile": { + "type": "string" + }, + "roleProfileDescription": { + "type": "string" + }, + "tcode": { + "type": "string" + }, + "tcodeDescription": { + "type": "string" + }, + "roleType": { + "type": "string" + }, + "stadUtilizationCount": { + "format": "int32", + "type": "integer" + }, + "cdhdrposUtilizationCount": { + "format": "int32", + "type": "integer" + }, + "stadUtilizationBucket": { + "type": "string" + }, + "cdhdrposUtilizationBucket": { + "type": "string" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleRemediation": { + "type": "object", + "properties": { + "roleName": { + "type": "string" + }, + "roleType": { + "type": "string" + }, + "recommendation": { + "type": "string" + }, + "itemToRemove": { + "type": "string" + }, + "itemDescription": { + "type": "string" + }, + "difficulty": { + "type": "string" + }, + "impact": { + "type": "string" + }, + "highOrCriticalRiskCount": { + "format": "int32", + "type": "integer" + }, + "totalRiskCount": { + "format": "int32", + "type": "integer" + }, + "impactedUserCount": { + "format": "int32", + "type": "integer" + }, + "highOrCriticalRisks": { + "type": "string" + }, + "allRisks": { + "type": "string" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserTCodeLevelRisk": { + "type": "object", + "properties": { + "rulebookName": { + "type": "string" + }, + "ruleCode": { + "type": "string" + }, + "ruleName": { + "type": "string" + }, + "riskRating": { + "type": "string" + }, + "ruleType": { + "type": "string" + }, + "ruleBusinessProcess": { + "type": "string" + }, + "businessFunctionCode": { + "type": "string" + }, + "businessFunctionName": { + "type": "string" + }, + "businessFunctionDescription": { + "type": "string" + }, + "userId": { + "type": "string" + }, + "userName": { + "type": "string" + }, + "userGroup": { + "type": "string" + }, + "mitigatingControls": { + "type": "string" + }, + "assignedFrom": { + "type": "string" + }, + "roleProfile": { + "type": "string" + }, + "tcode": { + "type": "string" + }, + "tcodeDescription": { + "type": "string" + }, + "roleType": { + "type": "string" + }, + "stadUtilizationCount": { + "format": "int32", + "type": "integer" + }, + "cdhdrposUtilizationCount": { + "format": "int32", + "type": "integer" + }, + "roleHasInherentConflicts": { + "type": "boolean" + }, + "isMitigated": { + "type": "boolean", + "readOnly": true + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.ConflictSummary": { + "description": "Represents conflict summary.", + "type": "object", + "properties": { + "riskRatingId": { + "format": "int32", + "description": "Identifier of the risk.", + "type": "integer" + }, + "businessProcessName": { + "description": "Name of the business process.", + "type": "string" + }, + "mitigated": { + "description": "Determines if conflict is mitigated.", + "type": "boolean" + }, + "execution": { + "description": "Execution text.", + "type": "string" + }, + "conflictCount": { + "format": "int32", + "description": "Count of conflicts.", + "type": "integer" + }, + "utilizationType": { + "description": "Type of utilization.", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "description": "Created date.", + "type": "string" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.BusinessProcessConflictSummary": { + "description": "Represents the business process conflict summary.", + "type": "object", + "properties": { + "ruleCode": { + "description": "Represents the code of rule.", + "type": "string" + }, + "ruleName": { + "description": "Represents the name of rule.", + "type": "string" + }, + "riskRating": { + "description": "Represents the rating of risk.", + "type": "string" + }, + "ruleBusinessProcess": { + "description": "Represents the business process of rule.", + "type": "string" + }, + "fullName": { + "description": "Represents the full name of user.", + "type": "string" + }, + "userGroup": { + "description": "Represents the user group.", + "type": "string" + }, + "mitigatingControls": { + "description": "Represents the mitigating controls.", + "type": "string" + }, + "stadUtilizationBucket": { + "description": "Represents the STAD utilization bucket.", + "type": "string" + }, + "cdhdrposUtilizationBucket": { + "description": "Represents the CDHDRPOS utilization bucket.", + "type": "string" + }, + "businessFunctionCode1": { + "description": "Represents the code of first business function.", + "type": "string" + }, + "businessFunctionName1": { + "description": "Represents the name of first business function.", + "type": "string" + }, + "businessFunctionBusinessProcess1": { + "description": "Represents the business process of first business function.", + "type": "string" + }, + "stadUtilizationCount1": { + "format": "int32", + "description": "Represents the count of first STAD utilization.", + "type": "integer" + }, + "cdhdrposUtilizationCount1": { + "format": "int32", + "description": "Represents the count of first CDHDRPOS utilization.", + "type": "integer" + }, + "businessFunctionCode2": { + "description": "Represents the code of second business function.", + "type": "string" + }, + "businessFunctionName2": { + "description": "Represents the name of second business function.", + "type": "string" + }, + "businessFunctionBusinessProcess2": { + "description": "Represents the business process of second business function.", + "type": "string" + }, + "stadUtilizationCount2": { + "format": "int32", + "description": "Represents the count of second STAD utilization.", + "type": "integer" + }, + "cdhdrposUtilizationCount2": { + "format": "int32", + "description": "Represents the count of second CDHDRPOS utilization.", + "type": "integer" + }, + "businessFunctionCode3": { + "description": "Represents the code of third business function.", + "type": "string" + }, + "businessFunctionName3": { + "description": "Represents the name of third business function.", + "type": "string" + }, + "businessFunctionBusinessProcess3": { + "description": "Represents the business process of third business function.", + "type": "string" + }, + "stadUtilizationCount3": { + "format": "int32", + "description": "Represents the count of third STAD utilization.", + "type": "integer" + }, + "cdhdrposUtilizationCount3": { + "format": "int32", + "description": "Represents the count of third CDHDRPOS utilization.", + "type": "integer" + }, + "businessFunctionCode4": { + "description": "Represents the code of fourth business function.", + "type": "string" + }, + "businessFunctionName4": { + "description": "Represents the name of fourth business function.", + "type": "string" + }, + "businessFunctionBusinessProcess4": { + "description": "Represents the business process of fourth business function.", + "type": "string" + }, + "stadUtilizationCount4": { + "format": "int32", + "description": "Represents the count of fourth STAD utilization.", + "type": "integer" + }, + "cdhdrposUtilizationCount4": { + "format": "int32", + "description": "Represents the count of fourth CDHDRPOS utilization.", + "type": "integer" + }, + "businessFunctionCode5": { + "description": "Represents the code of fifth business function.", + "type": "string" + }, + "businessFunctionName5": { + "description": "Represents the name of fifth business function.", + "type": "string" + }, + "businessFunctionBusinessProcess5": { + "description": "Represents the business process of fifth business function.", + "type": "string" + }, + "stadUtilizationCount5": { + "format": "int32", + "description": "Represents the count of fifth STAD utilization.", + "type": "integer" + }, + "cdhdrposUtilizationCount5": { + "format": "int32", + "description": "Represents the count of fifth CDHDRPOS utilization.", + "type": "integer" + }, + "ruleType": { + "description": "Represents the type of rule.", + "type": "string" + }, + "userCount": { + "format": "int32", + "description": "Represents the aggregated count of users involved in the conflict.", + "type": "integer" + }, + "userId": { + "description": "Identifier of the user.", + "type": "string" + }, + "country": { + "description": "Country of the user.", + "type": "string" + }, + "system": { + "description": "System of the user.", + "type": "string" + }, + "department": { + "description": "Department of the user.", + "type": "string" + }, + "costCenter": { + "description": "Cost Center of the user.", + "type": "string" + }, + "function": { + "description": "Function of the user.", + "type": "string" + }, + "custom01": { + "description": "Any custom value related to user.", + "type": "string" + }, + "custom02": { + "description": "Any custom value related to user.", + "type": "string" + }, + "custom03": { + "description": "Any custom value related to user.", + "type": "string" + }, + "custom04": { + "description": "Any custom value related to user.", + "type": "string" + }, + "custom05": { + "description": "Any custom value related to user.", + "type": "string" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.RoleDetails": { + "description": "Provides detail information about a role.", + "type": "object", + "properties": { + "system": { + "description": "Represents the name of the system instance analyzed.", + "type": "string" + }, + "roleName": { + "description": "Represents the name of the role analyzed.", + "type": "string" + }, + "roleDescription": { + "description": "Represents the description of the role.", + "type": "string" + }, + "permission": { + "description": "Represents the technical StringValue field in the db of the permission identified as a function hit.", + "type": "string" + }, + "permissionName": { + "description": "Represents the permission text value as seen in the user interface.", + "type": "string" + }, + "authorization": { + "description": "Represents the permission level. Examples include: Read, Write, Edit, Delete, etc.", + "type": "string" + }, + "executionCount": { + "format": "int64", + "description": "Represents the count of instances of record changes.", + "type": "integer" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.OnlineReporting.UserPermissionLevelDetail": { + "description": "Represents an actual Hit of an analysis, with information about the\r\npermission owner, the target, the risk, the business function,\r\nthe permission, and the permission group", + "type": "object", + "properties": { + "userName": { + "description": "Name of the user that owns the permission", + "type": "string" + }, + "riskName": { + "description": "Represents the rule name", + "type": "string" + }, + "riskRating": { + "description": "Represents the rule rating", + "type": "string" + }, + "riskType": { + "description": "Represents the rule type", + "type": "string" + }, + "riskCode": { + "description": "Represents the rule code", + "type": "string" + }, + "permission": { + "description": "Represents the technical StringValue field in the db of the permission identified as a function hit", + "type": "string" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.RoleModel": { + "description": "Represents an analysis role.", + "type": "object", + "properties": { + "id": { + "format": "int64", + "description": "Identifier of the role.", + "type": "integer" + }, + "extractId": { + "format": "int32", + "description": "Identifier of related extract.", + "type": "integer" + }, + "name": { + "description": "Name of the role.", + "type": "string" + }, + "isSuperAdmin": { + "description": "Determines if role is for super admin.", + "type": "boolean" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.HitsByUserAndRiskModel": { + "description": "Model that represents the different Hits and affected scopes that a user has for a particular risk", + "type": "object", + "properties": { + "userName": { + "description": "Name of the User", + "type": "string" + }, + "riskCode": { + "description": "Code of the Risk", + "type": "string" + }, + "riskRating": { + "description": "Rating of the current Risk", + "type": "string" + }, + "riskDescription": { + "description": "Description of the current Risk", + "type": "string" + }, + "businessFunctionHits": { + "format": "int32", + "description": "Amount of BusinessFunction hits for the current user and risk", + "type": "integer" + }, + "permissionGroupHits": { + "format": "int32", + "description": "Amount of PermissionGroup hits for the current user and risk", + "type": "integer" + }, + "permissionHits": { + "format": "int32", + "description": "Amount of Permission hits for the current user and risk", + "type": "integer" + }, + "impactedScopes": { + "format": "int32", + "description": "Amount of impacted scopes for the current user and risk", + "type": "integer" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.AnalysisHitModel": { + "description": "Represents an actual Hit of an analysis, with information about the\r\npermission owner, the risk, the business function,\r\nthe permission, and the permission group", + "type": "object", + "properties": { + "userName": { + "description": "Name of the user that owns the permission", + "type": "string" + }, + "riskCode": { + "description": "Risk Code", + "type": "string" + }, + "businessFunctionReference": { + "description": "Natural Key for the Business Function", + "type": "string" + }, + "permissionGroupReference": { + "description": "Identifier of the Permission Group", + "type": "string" + }, + "permissionReference": { + "description": "Natural Key for the Permission", + "type": "string" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.ScopedAnalysis.ScopedAnalysisHitModel": { + "description": "Represents an actual Hit of an analysis, with information about the\r\npermission owner, the target, the risk, the business function,\r\nthe permission, and the permission group", + "type": "object", + "properties": { + "userName": { + "description": "Name of the user that owns the permission", + "type": "string" + }, + "riskName": { + "description": "Name of the risk", + "type": "string" + }, + "riskRating": { + "description": "Risk rating", + "type": "string" + }, + "riskType": { + "description": "Risk type", + "type": "string" + }, + "riskCode": { + "description": "Risk Code", + "type": "string" + }, + "businessFunctionReference": { + "description": "Natural Key for the Business Function", + "type": "string" + }, + "permissionGroupReference": { + "description": "Identifier of the Permission Group", + "type": "string" + }, + "permissionReference": { + "description": "Natural Key for the Permission", + "type": "string" + }, + "scopeType": { + "description": "Affected Target type", + "type": "string" + }, + "scopeValue": { + "description": "Natural Key for the Affected Target", + "type": "string" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.UserModel": { + "description": "Represents an analysis user.", + "type": "object", + "properties": { + "id": { + "format": "int64", + "description": "Identifier of the user.", + "type": "integer" + }, + "extractId": { + "format": "int32", + "description": "Identifier of related extract.", + "type": "integer" + }, + "name": { + "description": "Name of the user.", + "type": "string" + }, + "isSuperAdmin": { + "description": "Determines if user is super admin.", + "type": "boolean" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.MultiSystemOnboardingAccountAndSystemRequest": { + "required": [ + "accountId", + "accountName", + "systemType", + "systemId" + ], + "type": "object", + "properties": { + "accountId": { + "format": "uuid", + "description": "Reference to the account for the system that is going to be associated", + "type": "string" + }, + "accountName": { + "description": "Reference to the account name for the system that is going to be associated.", + "type": "string" + }, + "systemType": { + "$ref": "#/components/schemas/ErpMaestro.Services.Common.Models.Enums.ErpSystemType" + }, + "systemId": { + "format": "int32", + "description": "Reference to the MultiSystem that is going to be part to the onboarding process.", + "type": "integer" + }, + "systemName": { + "description": "Reference to the MultiSystem name that is going to be part to the onboarding process.", + "type": "string" + }, + "systemDescription": { + "description": "Reference to the MultiSystem extra information for the system that is going to be part to the onboarding process.", + "type": "string" + } + } + }, + "ErpMaestro.ErpAnalysis.WebApi.Models.Workflow.QueueAnalysisModel": { + "type": "object", + "properties": { + "extractId": { + "format": "int32", + "type": "integer" + }, + "rulebookId": { + "format": "int32", + "type": "integer" + }, + "accountId": { + "format": "uuid", + "type": "string" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.QueueReportAnalysisRequest": { + "description": "Model for kicking off a report analysis. The hit analysis must already be complete by this point.", + "required": [ + "analysisId", + "reportType" + ], + "type": "object", + "properties": { + "analysisId": { + "format": "int32", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + }, + "reportType": { + "$ref": "#/components/schemas/ErpMaestro.ErpAnalysis.Common.Models.ReportType" + } + } + }, + "ErpMaestro.ErpAnalysis.Common.Models.ReportType": { + "enum": [ + "undefined", + "userConflictMatrix", + "roleConflictMatrix", + "groupConflictMatrix", + "successFactorsBusinessProcessConflictSummary" + ], + "type": "string" + } + } + } +} \ No newline at end of file diff --git a/static/arm-api/swagger-arm.json b/static/arm-api/swagger-arm.json new file mode 100644 index 000000000..bbf072f5b --- /dev/null +++ b/static/arm-api/swagger-arm.json @@ -0,0 +1,38865 @@ +{ + "openapi": "3.0.0", + "info": { + "version": "v1", + "title": "Access Risk Management ARM Web APIs" + }, + "paths": { + "/api/accessContext/columns": { + "get": { + "tags": [ + "AccessContext" + ], + "summary": "Gets all available column names for access contexts.", + "operationId": "GetAvailableColumns", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accessContext/all/{customerId}": { + "get": { + "tags": [ + "AccessContext" + ], + "summary": "Gets contexts for specified customer.", + "operationId": "GetContextsByCustomer", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accessContext/all/{customerId}/includeDeleted": { + "get": { + "tags": [ + "AccessContext" + ], + "summary": "Gets all contexts for specified customer. Includes deleted contexts.", + "operationId": "GetAllContextsByCustomer", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accessContext/all/{customerId}/{userId}": { + "get": { + "tags": [ + "AccessContext" + ], + "summary": "Gets contexts for specified user.", + "operationId": "GetContextsByUser", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "description": "Identifier of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accessContext/{contextId}": { + "get": { + "tags": [ + "AccessContext" + ], + "summary": "Gets context by ID.", + "operationId": "GetContextById", + "parameters": [ + { + "name": "contextId", + "in": "path", + "description": "Identifier of the context.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessContextEntity" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessContextEntity" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/AccessContextEntity" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessContextEntity" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessContextEntity" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/AccessContextEntity" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessContextEntity" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessContextEntity" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/AccessContextEntity" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessContextEntity" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessContextEntity" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccessContextEntity" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/AccessContextEntity" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/AccessContextEntity" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/AccessContextEntity" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/AccessContextEntity" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + }, + "delete": { + "tags": [ + "AccessContext" + ], + "summary": "Deletes access context.", + "operationId": "DeleteContext", + "parameters": [ + { + "name": "contextId", + "in": "path", + "description": "Identifier of the context.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accessContext": { + "post": { + "tags": [ + "AccessContext" + ], + "summary": "Creates access context using specified metadata.", + "operationId": "CreateContext", + "requestBody": { + "$ref": "#/components/requestBodies/AccessContextModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/xml": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/plain": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + }, + "patch": { + "tags": [ + "AccessContext" + ], + "summary": "Updates access context using specified metadata.", + "operationId": "UpdateContext", + "requestBody": { + "$ref": "#/components/requestBodies/AccessContextModel" + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accessContext/{customerId}/areEnabled": { + "get": { + "tags": [ + "AccessContext" + ], + "summary": "Determines if access contexts are enabled for specified customer.", + "operationId": "AreAccessContextsEnabled", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accessContext/{customerId}/enable": { + "post": { + "tags": [ + "AccessContext" + ], + "summary": "Enables access contexts for the customer.", + "operationId": "EnableAccessContexts", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accessContext/{customerId}/disable": { + "post": { + "tags": [ + "AccessContext" + ], + "summary": "Disables access contexts for the customer.", + "operationId": "DisableAccessContexts", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accessContext/{contextId}/{userId}/add": { + "post": { + "tags": [ + "AccessContext" + ], + "summary": "Assigns user to the access context.", + "operationId": "AssignUser", + "parameters": [ + { + "name": "contextId", + "in": "path", + "description": "Identifier of the context.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "description": "Identifier of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accessContext/{contextId}/{userId}/remove": { + "post": { + "tags": [ + "AccessContext" + ], + "summary": "Unassigns user from the access context.", + "operationId": "UnassignUser", + "parameters": [ + { + "name": "contextId", + "in": "path", + "description": "Identifier of the context.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "description": "Identifier of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accessContext/{customerId}/{userId}/assign": { + "post": { + "tags": [ + "AccessContext" + ], + "summary": "Assigns user to the access context.", + "operationId": "AssignAccessContextListForUser", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "description": "Identifier of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + }, + "description": "Idenfiers of contexts to assign to user." + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accessReview/reviews/{erpSystemId}": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Returns Access Reviews for a given erp system. OData endpoint.", + "operationId": "GetAccessReviews", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/reviewer/reviews/{erpSystemId}": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Returns Access Reviews for a current user as a reviewer. OData endpoint.", + "operationId": "GetReviewerAccessReviews", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewDashboardDto" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/details/{reviewId}": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Returns Access Review administrator details.", + "operationId": "GetReviewDetails", + "parameters": [ + { + "name": "reviewId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/reviewer/details/{reviewId}": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Returns Access Review details for a current user as a reviewer.", + "operationId": "GetReviewerReviewDetails", + "parameters": [ + { + "name": "reviewId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessReviewForReviewerDto" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessReviewForReviewerDto" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/AccessReviewForReviewerDto" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessReviewForReviewerDto" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessReviewForReviewerDto" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/AccessReviewForReviewerDto" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessReviewForReviewerDto" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessReviewForReviewerDto" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/AccessReviewForReviewerDto" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessReviewForReviewerDto" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessReviewForReviewerDto" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccessReviewForReviewerDto" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/AccessReviewForReviewerDto" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/AccessReviewForReviewerDto" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/AccessReviewForReviewerDto" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/AccessReviewForReviewerDto" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/reviews/completedandoverdue": { + "post": { + "tags": [ + "AccessReview" + ], + "summary": "Returns Completed and Overdue Access Reviews.", + "operationId": "GetCompletedAndOverdueReviews", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/CompletedAndOverdueReviewsRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/CompletedAndOverdueReviewsRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/CompletedAndOverdueReviewsRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/CompletedAndOverdueReviewsRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/CompletedAndOverdueReviewsRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/CompletedAndOverdueReviewsRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/CompletedAndOverdueReviewsRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/CompletedAndOverdueReviewsRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/CompletedAndOverdueReviewsRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/CompletedAndOverdueReviewsRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/CompletedAndOverdueReviewsRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/CompletedAndOverdueReviewsRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/CompletedAndOverdueReviewsRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/CompletedAndOverdueReviewsRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/CompletedAndOverdueReviewsRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/CompletedAndOverdueReviewsRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/CompletedAndOverdueReviewsRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewLookup" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewLookup" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewLookup" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewLookup" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewLookup" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewLookup" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewLookup" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewLookup" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewLookup" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewLookup" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewLookup" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewLookup" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewLookup" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewLookup" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewLookup" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewLookup" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/create": { + "post": { + "tags": [ + "AccessReview" + ], + "summary": "Creates a new access review.", + "operationId": "CreateReview", + "requestBody": { + "$ref": "#/components/requestBodies/AccessReviewDto" + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/update": { + "patch": { + "tags": [ + "AccessReview" + ], + "summary": "Updates an access review.", + "operationId": "UpdateReview", + "requestBody": { + "$ref": "#/components/requestBodies/AccessReviewDto" + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/submit/{reviewId}": { + "post": { + "tags": [ + "AccessReview" + ], + "summary": "Submits the specified access review.", + "operationId": "SubmitReview", + "parameters": [ + { + "name": "reviewId", + "in": "path", + "description": "The identifier of the review.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accessReview/reviewerStatuses/{reviewId}": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Returns Reviewer Statuses for a given review.", + "operationId": "GetReviewerStatuses", + "parameters": [ + { + "name": "reviewId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReviewerStatusDto" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReviewerStatusDto" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReviewerStatusDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReviewerStatusDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReviewerStatusDto" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReviewerStatusDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReviewerStatusDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReviewerStatusDto" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReviewerStatusDto" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReviewerStatusDto" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReviewerStatusDto" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReviewerStatusDto" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReviewerStatusDto" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReviewerStatusDto" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReviewerStatusDto" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReviewerStatusDto" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/reviewItems/userToRole/{reviewId}": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Returns the Access Review items for a given review of type 'UserToRole'.\r\nSupports OData.", + "operationId": "GetReviewItemsUserToRole", + "parameters": [ + { + "name": "reviewId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleReviewDto" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleReviewDto" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleReviewDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleReviewDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleReviewDto" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleReviewDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleReviewDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleReviewDto" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleReviewDto" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleReviewDto" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleReviewDto" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleReviewDto" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleReviewDto" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleReviewDto" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleReviewDto" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleReviewDto" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/reviewItems/roleToTcode/{reviewId}": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Returns the Access Review items for a given review of type 'RoleToTcode'.\r\nSupports OData.", + "operationId": "GetReviewItemsRoleToTcode", + "parameters": [ + { + "name": "reviewId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleTcodeReviewDto" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleTcodeReviewDto" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleTcodeReviewDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleTcodeReviewDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleTcodeReviewDto" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleTcodeReviewDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleTcodeReviewDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleTcodeReviewDto" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleTcodeReviewDto" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleTcodeReviewDto" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleTcodeReviewDto" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleTcodeReviewDto" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleTcodeReviewDto" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleTcodeReviewDto" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleTcodeReviewDto" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleTcodeReviewDto" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/reviewItems/roleToTcode/{reviewItemId}/risks": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Returns Role To TCode Review item rules.", + "operationId": "GetRoleTCodeRisks", + "parameters": [ + { + "name": "reviewItemId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/reviewItems/userToRisk/{reviewId}": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Returns the Access Review items for a given review of type 'UserToRisk'.\r\nSupports OData.", + "operationId": "GetReviewItemsUserToRisk", + "parameters": [ + { + "name": "reviewId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskReviewDto" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskReviewDto" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskReviewDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskReviewDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskReviewDto" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskReviewDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskReviewDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskReviewDto" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskReviewDto" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskReviewDto" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskReviewDto" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskReviewDto" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskReviewDto" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskReviewDto" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskReviewDto" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskReviewDto" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/reviewItems/userToRiskItem/{reviewItemId}/roles": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Gets roles related to specified UserToRisk review item.", + "operationId": "GetUserRiskRoles", + "parameters": [ + { + "name": "reviewItemId", + "in": "path", + "description": "Identifier of UserToRisk review item.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskSapRolesInfoDto" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskSapRolesInfoDto" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskSapRolesInfoDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskSapRolesInfoDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskSapRolesInfoDto" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskSapRolesInfoDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskSapRolesInfoDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskSapRolesInfoDto" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskSapRolesInfoDto" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskSapRolesInfoDto" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskSapRolesInfoDto" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskSapRolesInfoDto" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskSapRolesInfoDto" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskSapRolesInfoDto" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskSapRolesInfoDto" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskSapRolesInfoDto" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accessReview/reviewItems/riskToMitigatingControl/{reviewId}": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Returns the Access Review items for a given review of type 'RiskToMitigatingControl'.\r\nSupports OData.", + "operationId": "GetReviewItemsRiskToMitigatingControl", + "parameters": [ + { + "name": "reviewId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskMitigatingControlReviewDto" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskMitigatingControlReviewDto" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskMitigatingControlReviewDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskMitigatingControlReviewDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskMitigatingControlReviewDto" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskMitigatingControlReviewDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskMitigatingControlReviewDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskMitigatingControlReviewDto" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskMitigatingControlReviewDto" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskMitigatingControlReviewDto" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskMitigatingControlReviewDto" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskMitigatingControlReviewDto" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskMitigatingControlReviewDto" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskMitigatingControlReviewDto" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskMitigatingControlReviewDto" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskMitigatingControlReviewDto" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/reviewItems/rulebookDetails/{reviewId}": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Returns the Access Review items for a given review of type 'RulebookDetails'.\r\nSupports OData.", + "operationId": "GetReviewItemsRulebookDetails", + "parameters": [ + { + "name": "reviewId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RulebookDetailsReviewDto" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RulebookDetailsReviewDto" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RulebookDetailsReviewDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RulebookDetailsReviewDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RulebookDetailsReviewDto" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RulebookDetailsReviewDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RulebookDetailsReviewDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RulebookDetailsReviewDto" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RulebookDetailsReviewDto" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RulebookDetailsReviewDto" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RulebookDetailsReviewDto" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RulebookDetailsReviewDto" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RulebookDetailsReviewDto" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RulebookDetailsReviewDto" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RulebookDetailsReviewDto" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RulebookDetailsReviewDto" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/reviewItems/columns": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Gets the column names of the available access review items\r\nthat are needed for the presentation layer.", + "operationId": "GetReviewItemsColumns", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object", + "properties": { + "userToRole": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "roleToTcode": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "userToRisk": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "riskToMitigatingControl": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rulebookDetails": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object", + "properties": { + "userToRole": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "roleToTcode": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "userToRisk": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "riskToMitigatingControl": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rulebookDetails": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object", + "properties": { + "userToRole": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "roleToTcode": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "userToRisk": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "riskToMitigatingControl": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rulebookDetails": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object", + "properties": { + "userToRole": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "roleToTcode": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "userToRisk": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "riskToMitigatingControl": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rulebookDetails": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object", + "properties": { + "userToRole": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "roleToTcode": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "userToRisk": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "riskToMitigatingControl": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rulebookDetails": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object", + "properties": { + "userToRole": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "roleToTcode": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "userToRisk": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "riskToMitigatingControl": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rulebookDetails": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object", + "properties": { + "userToRole": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "roleToTcode": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "userToRisk": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "riskToMitigatingControl": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rulebookDetails": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object", + "properties": { + "userToRole": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "roleToTcode": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "userToRisk": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "riskToMitigatingControl": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rulebookDetails": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object", + "properties": { + "userToRole": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "roleToTcode": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "userToRisk": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "riskToMitigatingControl": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rulebookDetails": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object", + "properties": { + "userToRole": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "roleToTcode": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "userToRisk": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "riskToMitigatingControl": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rulebookDetails": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object", + "properties": { + "userToRole": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "roleToTcode": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "userToRisk": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "riskToMitigatingControl": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rulebookDetails": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "application/json": { + "schema": { + "type": "object", + "properties": { + "userToRole": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "roleToTcode": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "userToRisk": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "riskToMitigatingControl": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rulebookDetails": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "userToRole": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "roleToTcode": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "userToRisk": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "riskToMitigatingControl": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rulebookDetails": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object", + "properties": { + "userToRole": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "roleToTcode": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "userToRisk": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "riskToMitigatingControl": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rulebookDetails": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "properties": { + "userToRole": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "roleToTcode": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "userToRisk": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "riskToMitigatingControl": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rulebookDetails": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "text/json": { + "schema": { + "type": "object", + "properties": { + "userToRole": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "roleToTcode": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "userToRisk": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "riskToMitigatingControl": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rulebookDetails": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + } + } + }, + "/api/accessReview/rulebookDetails/businessFunctions/{reviewItemId}": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Returns Rulebook Details item Business Functions.", + "operationId": "GetRulebookDetailsBusinessFunctions", + "parameters": [ + { + "name": "reviewItemId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/rulebookDetails/mitigatingControls/{reviewItemId}": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Returns Rulebook Details item Mitigating Controls.", + "operationId": "GetRulebookDetailsMitigatingControls", + "parameters": [ + { + "name": "reviewItemId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDto" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDto" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDto" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDto" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDto" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDto" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDto" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDto" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDto" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDto" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDto" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDto" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/userToRole/rules/{reviewItemId}": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Returns User to Role Review item rules.", + "operationId": "GetUserRoleRules", + "parameters": [ + { + "name": "reviewItemId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleRuleDto" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/userToRole/businessFunctions/{userRoleRuleId}": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Returns User to Role Review Rule Business Functions.", + "operationId": "GetUserRoleRuleBusinessFunctions", + "parameters": [ + { + "name": "userRoleRuleId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDto" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/userToRole/tCodes/{reviewId}": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Returns User to Role Review item TCodes.", + "operationId": "GetUserRoleTCodes", + "parameters": [ + { + "name": "reviewId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "roleName", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/TcodeDto" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/TcodeDto" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/TcodeDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/TcodeDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/TcodeDto" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/TcodeDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/TcodeDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/TcodeDto" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/TcodeDto" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/TcodeDto" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/TcodeDto" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/TcodeDto" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/TcodeDto" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/TcodeDto" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/TcodeDto" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/TcodeDto" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/userToRole/itemsToRemove/{reviewId}": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Returns User Role review items to be removed. OData endpoint.", + "operationId": "GetUserRolesToRemove", + "parameters": [ + { + "name": "reviewId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleToRemoveDto" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleToRemoveDto" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleToRemoveDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleToRemoveDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleToRemoveDto" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleToRemoveDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleToRemoveDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleToRemoveDto" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleToRemoveDto" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleToRemoveDto" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleToRemoveDto" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleToRemoveDto" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleToRemoveDto" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleToRemoveDto" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleToRemoveDto" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRoleToRemoveDto" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/decide": { + "post": { + "tags": [ + "AccessReview" + ], + "summary": "Approves, rejects, or resets review item with comment.\r\nSupports group approvals for User to Role and User to Risk reviews.", + "operationId": "DecideReview", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/DecideReviewRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/DecideReviewRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/DecideReviewRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/DecideReviewRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/DecideReviewRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/DecideReviewRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/DecideReviewRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/DecideReviewRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/DecideReviewRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/DecideReviewRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/DecideReviewRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/DecideReviewRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/DecideReviewRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/DecideReviewRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/DecideReviewRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/DecideReviewRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/DecideReviewRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/delegateReview": { + "post": { + "tags": [ + "AccessReview" + ], + "summary": "Delegates Access Review to the New Reviewer with the specified comment.", + "operationId": "DelegateReview", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/delegateReviewItems": { + "post": { + "tags": [ + "AccessReview" + ], + "summary": "Delegates Access Review Items to the New Reviewer with the specified comment.", + "operationId": "DelegateReviewItems", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewItemsRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewItemsRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewItemsRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewItemsRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewItemsRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewItemsRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewItemsRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewItemsRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewItemsRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewItemsRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewItemsRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewItemsRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewItemsRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewItemsRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewItemsRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewItemsRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/DelegateReviewItemsRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accessReview/users/{sapSystemId}": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Gets users for specified SAP system.", + "operationId": "GetSapUsers", + "parameters": [ + { + "name": "sapSystemId", + "in": "path", + "description": "Identifier of SAP system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SapUserDto" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SapUserDto" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SapUserDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SapUserDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SapUserDto" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SapUserDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SapUserDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SapUserDto" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SapUserDto" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SapUserDto" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SapUserDto" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SapUserDto" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SapUserDto" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SapUserDto" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SapUserDto" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SapUserDto" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accessReview/users/template/{sapSystemId}": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Gets HR information template for specified SAP system.", + "operationId": "GetSapUsersTemplate", + "parameters": [ + { + "name": "sapSystemId", + "in": "path", + "description": "Identifier of SAP system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accessReview/users/import/{accountId}/{sapSystemId}": { + "post": { + "tags": [ + "AccessReview" + ], + "summary": "Import SAP users to ERP system from file.", + "operationId": "ImportSapUsers", + "parameters": [ + { + "name": "accountId", + "in": "path", + "description": "Identifier of account.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "sapSystemId", + "in": "path", + "description": "Identifier of SAP system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "description": "Represents a file sent with the HttpRequest.", + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accessReview/reviewer/comment": { + "post": { + "tags": [ + "AccessReview" + ], + "summary": "Saves the reviewer comment.", + "operationId": "SaveReviewerComment", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ReviewerCommentRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ReviewerCommentRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ReviewerCommentRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ReviewerCommentRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ReviewerCommentRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ReviewerCommentRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ReviewerCommentRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ReviewerCommentRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ReviewerCommentRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ReviewerCommentRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ReviewerCommentRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReviewerCommentRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ReviewerCommentRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ReviewerCommentRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ReviewerCommentRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ReviewerCommentRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ReviewerCommentRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/accessReview/{reviewId}": { + "delete": { + "tags": [ + "AccessReview" + ], + "summary": "Deletes a review.", + "operationId": "DeleteReview", + "parameters": [ + { + "name": "reviewId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/accessReview/sendInitialEmail": { + "post": { + "tags": [ + "AccessReview" + ], + "summary": "Sends the reviewer initial email.", + "operationId": "SendReviewerInitialEmail", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SendInitialEmailRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SendInitialEmailRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/SendInitialEmailRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SendInitialEmailRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SendInitialEmailRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/SendInitialEmailRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SendInitialEmailRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SendInitialEmailRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/SendInitialEmailRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SendInitialEmailRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SendInitialEmailRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/SendInitialEmailRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/SendInitialEmailRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/SendInitialEmailRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/SendInitialEmailRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/SendInitialEmailRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/SendInitialEmailRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/accessReview/schedule/actionLog/{reviewId}": { + "post": { + "tags": [ + "AccessReview" + ], + "summary": "Schedules a Review Action Log", + "operationId": "ScheduleActionLog", + "parameters": [ + { + "name": "reviewId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/accessReview/schedule/report": { + "post": { + "tags": [ + "AccessReview" + ], + "summary": "Schedules a Review Report", + "operationId": "ScheduleReport", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessReviewReportRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessReviewReportRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/AccessReviewReportRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessReviewReportRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessReviewReportRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/AccessReviewReportRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessReviewReportRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessReviewReportRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/AccessReviewReportRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessReviewReportRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessReviewReportRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccessReviewReportRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/AccessReviewReportRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/AccessReviewReportRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/AccessReviewReportRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/AccessReviewReportRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/AccessReviewReportRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/accessReview/schedule/rolesRemoval/{reviewId}": { + "post": { + "tags": [ + "AccessReview" + ], + "summary": "Schedules Roles Removal", + "operationId": "ScheduleRolesRemoval", + "parameters": [ + { + "name": "reviewId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/accessReview/download/rolesRemoval/{reviewId}": { + "get": { + "tags": [ + "AccessReview" + ], + "summary": "Download Roles Removal Report", + "operationId": "DownloadRolesRemoval", + "parameters": [ + { + "name": "reviewId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/changeLogs/{jobId}/upload": { + "post": { + "tags": [ + "ChangeLogs" + ], + "summary": "Uploads change logs for specified job to storage.", + "operationId": "UploadChangeLogs", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "Identifier of the job.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "description": "File to upload.", + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/CompatibilityMatrix/ByType/{systemType}": { + "get": { + "tags": [ + "CompatibilityMatrix" + ], + "summary": "Get the list of compatibilities for a specific system Type", + "operationId": "GetCompatibilityMatrixBySystemType", + "parameters": [ + { + "name": "systemType", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ] + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SystemTypeCompatibilityMatrixModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SystemTypeCompatibilityMatrixModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/SystemTypeCompatibilityMatrixModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SystemTypeCompatibilityMatrixModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SystemTypeCompatibilityMatrixModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/SystemTypeCompatibilityMatrixModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SystemTypeCompatibilityMatrixModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SystemTypeCompatibilityMatrixModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/SystemTypeCompatibilityMatrixModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SystemTypeCompatibilityMatrixModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SystemTypeCompatibilityMatrixModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemTypeCompatibilityMatrixModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/SystemTypeCompatibilityMatrixModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/SystemTypeCompatibilityMatrixModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SystemTypeCompatibilityMatrixModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/SystemTypeCompatibilityMatrixModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + } + } + }, + "delete": { + "tags": [ + "CompatibilityMatrix" + ], + "summary": "Delete the compatibilities for a specific erp system type", + "operationId": "DeleteCompatibilityMatrixBySystemType", + "parameters": [ + { + "name": "systemType", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ] + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/CompatibilityMatrix/ByType": { + "post": { + "tags": [ + "CompatibilityMatrix" + ], + "summary": "Save the compatibilities for a specific erp system type", + "operationId": "CreateCompatibilityMatrixBySystemType", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixByTypeRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixByTypeRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixByTypeRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixByTypeRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixByTypeRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixByTypeRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixByTypeRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixByTypeRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixByTypeRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixByTypeRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixByTypeRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixByTypeRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixByTypeRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixByTypeRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixByTypeRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixByTypeRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixByTypeRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + }, + "patch": { + "tags": [ + "CompatibilityMatrix" + ], + "summary": "Update the compatibilities for a specific erp system type", + "operationId": "UpdateCompatibilityMatrixBySystemType", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixByTypeRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixByTypeRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixByTypeRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixByTypeRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixByTypeRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixByTypeRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixByTypeRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixByTypeRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixByTypeRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixByTypeRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixByTypeRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixByTypeRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixByTypeRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixByTypeRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixByTypeRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixByTypeRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixByTypeRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/CompatibilityMatrix/BySystem/{systemId}": { + "get": { + "tags": [ + "CompatibilityMatrix" + ], + "summary": "Get the list of compatibilities for a specific erp system", + "operationId": "GetCompatibilityMatrixBySystemId", + "parameters": [ + { + "name": "systemId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + } + } + }, + "delete": { + "tags": [ + "CompatibilityMatrix" + ], + "summary": "Delete the compatibilities for a specific erp system", + "operationId": "DeleteCompatibilityMatrixBySystemId", + "parameters": [ + { + "name": "systemId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/CompatibilityMatrix/BySystem": { + "post": { + "tags": [ + "CompatibilityMatrix" + ], + "summary": "Save the compatibilities for a specific erp system", + "operationId": "CreateCompatibilityMatrixBySystem", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixBySystemRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixBySystemRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixBySystemRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixBySystemRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixBySystemRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixBySystemRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixBySystemRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixBySystemRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixBySystemRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixBySystemRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixBySystemRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixBySystemRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixBySystemRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixBySystemRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixBySystemRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixBySystemRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/CreateCompatibilityMatrixBySystemRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + }, + "patch": { + "tags": [ + "CompatibilityMatrix" + ], + "summary": "Update the compatibilities for a specific erp system", + "operationId": "UpdateCompatibilityMatrixBySystem", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixBySystemRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixBySystemRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixBySystemRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixBySystemRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixBySystemRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixBySystemRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixBySystemRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixBySystemRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixBySystemRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixBySystemRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixBySystemRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixBySystemRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixBySystemRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixBySystemRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixBySystemRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixBySystemRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/UpdateCompatibilityMatrixBySystemRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/CompatibilityMatrix/AllSystems": { + "get": { + "tags": [ + "CompatibilityMatrix" + ], + "summary": "Get the entire list of system that a user has for a specific account and its compatibilities", + "operationId": "GetCompatibilityMatrixForAllSystems", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/SystemCompatibilityMatrixModel" + } + } + } + } + } + } + } + }, + "/api/customersettings/{customerId}/idletimeout": { + "get": { + "tags": [ + "CustomerSettings" + ], + "summary": "Gets an Idle timeout value for a customer.", + "operationId": "GetIdleTimeout", + "parameters": [ + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + }, + "post": { + "tags": [ + "CustomerSettings" + ], + "summary": "Sets an Idle timeout value for a customer.", + "operationId": "SetIdleTimeout", + "parameters": [ + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "application/json-patch+json": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + }, + "application/*+json": { + "schema": { + "type": "string" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/dashboard/userrisks/byrating/{jobId}": { + "get": { + "tags": [ + "Dashboard" + ], + "summary": "This endpoint returns user risks by rating.", + "operationId": "GetUserRisksByRating", + "parameters": [ + { + "name": "jobId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/dashboard/userrisks/byprocess/{jobId}": { + "get": { + "tags": [ + "Dashboard" + ], + "summary": "This endpoint returns user risks by business process.", + "operationId": "GetUserRisksByBusinessProcess", + "parameters": [ + { + "name": "jobId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/dashboard/userrisks/history/{jobId}": { + "get": { + "tags": [ + "Dashboard" + ], + "summary": "This endpoint returns the user risk history.", + "operationId": "GetUserRisksHistory", + "parameters": [ + { + "name": "jobId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/dashboard/userrisks/highest/{jobId}": { + "get": { + "tags": [ + "Dashboard" + ], + "summary": "This endpoint returns the count of users with risks by highest unmitigated executed.", + "operationId": "GetUserRisksbyHighestUnmitigatedExecuted", + "parameters": [ + { + "name": "jobId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/dashboard/roleRisksCount/{jobId}": { + "get": { + "tags": [ + "Dashboard" + ], + "summary": "This endpoint returns the count of roles with risks.", + "operationId": "GetRoleRisksCount", + "parameters": [ + { + "name": "jobId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/dashboard/status/{jobId}": { + "get": { + "tags": [ + "Dashboard" + ], + "summary": "This endpoint returns the status of the analysis.", + "operationId": "GetStatus", + "parameters": [ + { + "name": "jobId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/dashboard/snapshots/{erpSystemId}": { + "get": { + "tags": [ + "Dashboard" + ], + "summary": "Gets the list of risk snapshots for selected erp system.", + "operationId": "GetRiskSnapshots", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "The ERP system id to use to fetch the risk snapshots.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSnapshot" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSnapshot" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSnapshot" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSnapshot" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSnapshot" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSnapshot" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSnapshot" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSnapshot" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSnapshot" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSnapshot" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSnapshot" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSnapshot" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSnapshot" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSnapshot" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSnapshot" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSnapshot" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/datastorage/downloadfile/{fileType}/{key}": { + "get": { + "tags": [ + "DataStorage" + ], + "summary": "Returns a file using the metadata passed in to identify the location and destination", + "operationId": "DownloadFile", + "parameters": [ + { + "name": "key", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fileType", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "securityExtract", + "utilizationExtract", + "securityAnalysisResult", + "report", + "ruleBookExtract", + "whatIfAnalysisResult", + "importResult", + "sapChangeDocumentExtract", + "exportResult", + "accessReviewEmailTemplate", + "accessReviewRolesRemovalReport", + "rulebookChangeLog", + "extractCompletenessReportJob", + "changeLog" + ] + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/datastorage/downloadfile/{externalReference}": { + "get": { + "tags": [ + "DataStorage" + ], + "summary": "Returns a file by its External Reference.", + "operationId": "DownloadFile", + "parameters": [ + { + "name": "externalReference", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + }, + "deprecated": true + } + }, + "/api/datastorage/downloadfile/system/{erpSystemId}/externalreference/{externalReference}": { + "get": { + "tags": [ + "DataStorage" + ], + "summary": "Returns a file by its External Reference for a specified ERP System.", + "operationId": "DownloadFileForErpSystem", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "externalReference", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/datastorage/deletefile/{fileType}/{key}": { + "delete": { + "tags": [ + "DataStorage" + ], + "summary": "Removes a file using the metadata passed in to identify the location and destination", + "operationId": "DeleteFile", + "parameters": [ + { + "name": "key", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fileType", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "securityExtract", + "utilizationExtract", + "securityAnalysisResult", + "report", + "ruleBookExtract", + "whatIfAnalysisResult", + "importResult", + "sapChangeDocumentExtract", + "exportResult", + "accessReviewEmailTemplate", + "accessReviewRolesRemovalReport", + "rulebookChangeLog", + "extractCompletenessReportJob", + "changeLog" + ] + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/datastorage/getfiles/{fileType}/{erpSystemId}": { + "get": { + "tags": [ + "DataStorage" + ], + "summary": "Gets a list of files of specified type for specified ERP SAM system.", + "operationId": "GetFiles", + "parameters": [ + { + "name": "fileType", + "in": "path", + "description": "Type of the file.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "securityExtract", + "utilizationExtract", + "securityAnalysisResult", + "report", + "ruleBookExtract", + "whatIfAnalysisResult", + "importResult", + "sapChangeDocumentExtract", + "exportResult", + "accessReviewEmailTemplate", + "accessReviewRolesRemovalReport", + "rulebookChangeLog", + "extractCompletenessReportJob", + "changeLog" + ] + } + }, + { + "name": "erpSystemId", + "in": "path", + "description": "Identifier of ERP SAP system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfoModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfoModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfoModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfoModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfoModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfoModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfoModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfoModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfoModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfoModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfoModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfoModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfoModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfoModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfoModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/FileInfoModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + }, + "deprecated": true + } + }, + "/api/datastorage/downloadDistributionFile/{fileKey}": { + "get": { + "tags": [ + "DataStorage" + ], + "summary": "Downloads a distribution file from cloud storage with the specified key.", + "operationId": "DownloadDistributionFile", + "parameters": [ + { + "name": "fileKey", + "in": "path", + "description": "The key to the distribution file to download.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/datastorage/reportJobFileInfo/{jobId}": { + "get": { + "tags": [ + "DataStorage" + ], + "summary": "Get file info for a specific job.", + "operationId": "GetFileMetadataForJob", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "Identifier of Job.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam": { + "put": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Updates existing EAM request.", + "operationId": "UpdateRequest", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + } + }, + "description": "Emergency access request model." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + }, + "post": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Creates a new EAM request.", + "operationId": "AddNewRequest", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ValidationResult" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam/{requestId}": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Gets a particular EAM request.", + "operationId": "GetRequest", + "parameters": [ + { + "name": "requestId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + } + }, + "delete": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Retracts specified EAM request.", + "operationId": "Retract", + "parameters": [ + { + "name": "requestId", + "in": "path", + "description": "Identifier of the EAM request.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + }, + "deprecated": true + } + }, + "/api/eam/{requestId}/state": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Get the state of a particular EAM request.", + "operationId": "GetRequestState", + "parameters": [ + { + "name": "requestId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestState" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestState" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestState" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestState" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestState" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestState" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestState" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestState" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestState" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestState" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestState" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestState" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestState" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestState" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestState" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestState" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + } + } + }, + "/api/eam/{requestId}/comments": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Gets the comments of an EAM Request.", + "operationId": "GetComments", + "parameters": [ + { + "name": "requestId", + "in": "path", + "description": "The request ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + }, + "post": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Adds a comment on an EAM Request.", + "operationId": "AddComment", + "parameters": [ + { + "name": "requestId", + "in": "path", + "description": "The request ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "text": { + "description": "The text of the comment", + "type": "string" + }, + "attachment": { + "description": "The attachment of the comment", + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam/{requestId}/comments/{commentId}/attachment": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Gets the attachment of an EAM Request Comment.", + "operationId": "GetCommentAttachment", + "parameters": [ + { + "name": "requestId", + "in": "path", + "description": "The request ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "commentId", + "in": "path", + "description": "The comment ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam/{requestId}/comments/{commentId}/attachment/content": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Gets the attachment content of an EAM Request Comment.", + "operationId": "GetCommentAttachmentContent", + "parameters": [ + { + "name": "requestId", + "in": "path", + "description": "The request ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "commentId", + "in": "path", + "description": "The comment ID.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "byte", + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "byte", + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "byte", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "byte", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "byte", + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "byte", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "byte", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "byte", + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "byte", + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "byte", + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "byte", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "byte", + "type": "string" + } + }, + "application/xml": { + "schema": { + "format": "byte", + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "byte", + "type": "string" + } + }, + "text/plain": { + "schema": { + "format": "byte", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "byte", + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam/executeAction": { + "patch": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Executes the specified action for the specified EAM request.", + "operationId": "ExecuteAction", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/RequestActionModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/RequestActionModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/RequestActionModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/RequestActionModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/RequestActionModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/RequestActionModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/RequestActionModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/RequestActionModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/RequestActionModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/RequestActionModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/RequestActionModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/RequestActionModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/RequestActionModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/RequestActionModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/RequestActionModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/RequestActionModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/RequestActionModel" + } + } + }, + "description": "The parameters for the EAM request action to be executed." + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + }, + "deprecated": true + } + }, + "/api/eam/executeEamAction": { + "patch": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Executes the specified action for the specified EAM request.", + "operationId": "ExecuteEamAction", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "requestId": { + "description": "Represents the id of the EAM request.", + "type": "string", + "format": "uuid" + }, + "action": { + "description": "Represents the requested action to be performed.", + "type": "string", + "enum": [ + "undefined", + "approve", + "reject", + "accept", + "pause", + "stop", + "extend", + "contest", + "download", + "comment", + "retract" + ] + }, + "comment.Text": { + "description": "The text of the comment", + "type": "string" + }, + "comment.Attachment": { + "description": "The attachment of the comment", + "type": "string", + "format": "binary" + } + }, + "required": [ + "requestId", + "action" + ] + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam/download/{requestId}": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Downloads report related to the specified EAM request.", + "operationId": "DownloadRequestReport", + "parameters": [ + { + "name": "requestId", + "in": "path", + "description": "Identifier of the EAM request.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam/profiles/{erpSystemId}": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Gets all available EAM profiles for the specified system.", + "operationId": "GetProfiles", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam/profiles/{erpSystemId}/currentUser": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Gets all available EAM profiles for the specified system and logged-in user.", + "operationId": "GetCurrentUserProfiles", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + } + } + }, + "/api/eam/profiles/{erpSystemId}/user/{userId}": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Gets all available EAM profiles for the specified system and user.", + "operationId": "GetUserProfiles", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + } + } + }, + "/api/eam/profiles/{erpSystemId}/export": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Creates a CSV file with a report of the profile users for the specified system.", + "operationId": "ExportProfileUsers", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam/profile/{profileId}": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Gets an existing EAM profile.", + "operationId": "GetProfile", + "parameters": [ + { + "name": "profileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + }, + "delete": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Deletes an existing EAM profile.", + "operationId": "DeleteProfile", + "parameters": [ + { + "name": "profileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam/profile": { + "put": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Updates an existing EAM profile.", + "operationId": "UpdateProfile", + "requestBody": { + "$ref": "#/components/requestBodies/EmergencyAccessProfileModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + }, + "post": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Creates a new EAM profile.", + "operationId": "AddProfile", + "requestBody": { + "$ref": "#/components/requestBodies/EmergencyAccessProfileModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam/profile/{profileId}/ChangeLogs": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Gets change logs for an existing EAM profile.", + "operationId": "GetProfileChangeLogs", + "parameters": [ + { + "name": "profileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileChangeLog" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileChangeLog" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileChangeLog" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileChangeLog" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileChangeLog" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileChangeLog" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileChangeLog" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileChangeLog" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileChangeLog" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileChangeLog" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileChangeLog" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileChangeLog" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileChangeLog" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileChangeLog" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileChangeLog" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileChangeLog" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam/profile/{profileId}/ChangeLogs/export": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Gets change logs (in a csv) for an existing EAM profile.", + "operationId": "GetProfileChangeLogsFileStream", + "parameters": [ + { + "name": "profileId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam/dashboard/{erpSystemId}": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Gets the user's EAM dashboard data.", + "operationId": "GetUserDashboardData", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam/dashboard/{erpSystemId}/utilizationAttachmentRequests": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Gets the EAM dashboard data for utilization auto-attach and manual-upload.", + "operationId": "GetEamRequestsForUtilizationAttachment", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam/dashboard/{erpSystemId}/utilizationAttachmentRequests/ids": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Gets EAM Requests Candidates Ids for utilization auto-attach and manual-upload.", + "operationId": "GetEamRequestsIdsForUtilizationAttachment", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam/history/{erpSystemId}": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Gets the user's EAM history data.", + "operationId": "GetUserHistoryData", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessRequestSummaryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam/history/{erpSystemId}/profileRequestsByMonth": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Gets an aggregated report of profile requests by month.", + "operationId": "GetProfileRequestsPerMonth", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "numOfMonths", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 12, + "default": 12 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerMonth" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerMonth" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerMonth" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerMonth" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerMonth" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerMonth" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerMonth" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerMonth" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerMonth" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerMonth" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerMonth" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerMonth" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerMonth" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerMonth" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerMonth" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerMonth" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam/history/{erpSystemId}/profileRequestsByUser": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Gets an aggregated report of profile requests by user.", + "operationId": "GetProfileRequestsPerUser", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "numOfMonths", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 12, + "default": 12 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerUser" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerUser" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerUser" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerUser" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerUser" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerUser" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerUser" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerUser" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerUser" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerUser" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerUser" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerUser" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerUser" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerUser" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerUser" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ProfileRequestsPerUser" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam/deltas/{erpSystemId}": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Gets deltas of specified ERP system for specified dates range and reviewer.", + "operationId": "GetDeltas", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "Identifier of the ERP system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "startDate", + "in": "query", + "description": "Start date.", + "required": true, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "endDate", + "in": "query", + "description": "End date.", + "required": true, + "schema": { + "type": "string", + "format": "date-time" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json": { + "schema": { + "type": "boolean" + } + }, + "application/xml": { + "schema": { + "type": "boolean" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "boolean" + } + }, + "text/plain": { + "schema": { + "type": "boolean" + } + }, + "text/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam/deltas/{erpSystemId}/exist": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Determines if deltas available on specified ERP system for specified dates range and reviewer (reviewer inferred from the session).", + "operationId": "AreDeltasAvailable", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "Identifier of the ERP system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "startDate", + "in": "query", + "description": "Start date.", + "required": true, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "endDate", + "in": "query", + "description": "End date.", + "required": true, + "schema": { + "type": "string", + "format": "date-time" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json": { + "schema": { + "type": "boolean" + } + }, + "application/xml": { + "schema": { + "type": "boolean" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "boolean" + } + }, + "text/plain": { + "schema": { + "type": "boolean" + } + }, + "text/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + }, + "deprecated": true + } + }, + "/api/eam/reviewer/{reviewerId}/deltas/{erpSystemId}/exist": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Determines if deltas available on specified ERP system for specified dates range and a reviewer (specified on the route).", + "operationId": "AreDeltasAvailableForReviewer", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "Identifier of the ERP system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "reviewerId", + "in": "path", + "description": "Identifier of the reviewer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "startDate", + "in": "query", + "description": "Start date.", + "required": true, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "endDate", + "in": "query", + "description": "End date.", + "required": true, + "schema": { + "type": "string", + "format": "date-time" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json": { + "schema": { + "type": "boolean" + } + }, + "application/xml": { + "schema": { + "type": "boolean" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "boolean" + } + }, + "text/plain": { + "schema": { + "type": "boolean" + } + }, + "text/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam/deltas/{erpSystemId}/existInSystem": { + "get": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Determines if deltas available on specified ERP system for specified dates range.\r\nAvailable only for service users.", + "operationId": "AreDeltasAvailableInSystem", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "Identifier of the ERP system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "startDate", + "in": "query", + "description": "Start date.", + "required": true, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "endDate", + "in": "query", + "description": "End date.", + "required": true, + "schema": { + "type": "string", + "format": "date-time" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json": { + "schema": { + "type": "boolean" + } + }, + "application/xml": { + "schema": { + "type": "boolean" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "boolean" + } + }, + "text/plain": { + "schema": { + "type": "boolean" + } + }, + "text/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/eam/utilizationAutoAttach": { + "post": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Starts the execution of a utilization auto attachment for the specified request.", + "operationId": "ExecuteUtilizationAutoAttachment", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AutoAttachmentRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AutoAttachmentRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/AutoAttachmentRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AutoAttachmentRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AutoAttachmentRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/AutoAttachmentRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AutoAttachmentRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AutoAttachmentRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/AutoAttachmentRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AutoAttachmentRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AutoAttachmentRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutoAttachmentRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/AutoAttachmentRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/AutoAttachmentRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/AutoAttachmentRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/AutoAttachmentRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/AutoAttachmentRequest" + } + } + }, + "description": "The parameters needed for the auto attachment." + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + } + } + }, + "/api/eam/utilizationManualUpload/{requestId}": { + "post": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Executes the attachment of a manually uploaded utilization file.", + "operationId": "ExecuteUtilizationManualUpload", + "parameters": [ + { + "name": "requestId", + "in": "path", + "description": "The if of the EAM request in question.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "contentType": { + "type": "string" + }, + "contentDisposition": { + "type": "string" + }, + "headers": { + "type": "object" + }, + "length": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "fileName": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + } + } + }, + "/api/eam/sendAdminAwaitingReviewReminder/{userId}/{customerId}": { + "post": { + "tags": [ + "EmergencyAccessManagement" + ], + "summary": "Sends an EAM Admin Awaiting Review reminder email for provided user and customer.", + "operationId": "SendAdminAwaitingReviewReminder", + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "Identifier of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "customerId", + "in": "path", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + } + } + }, + "/api/ErpSystemBlacklists": { + "get": { + "tags": [ + "ErpSystemBlacklists" + ], + "summary": "Returns list of ERP System Blacklist Types.", + "operationId": "GetErpSystemBlacklistTypes", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + } + } + }, + "post": { + "tags": [ + "ErpSystemBlacklists" + ], + "summary": "Creates ERP System Blacklist Items.", + "operationId": "SaveErpSystemBlacklistItems", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SaveErpSystemBlacklistItemsModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SaveErpSystemBlacklistItemsModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/SaveErpSystemBlacklistItemsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SaveErpSystemBlacklistItemsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SaveErpSystemBlacklistItemsModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/SaveErpSystemBlacklistItemsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SaveErpSystemBlacklistItemsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SaveErpSystemBlacklistItemsModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/SaveErpSystemBlacklistItemsModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SaveErpSystemBlacklistItemsModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SaveErpSystemBlacklistItemsModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/SaveErpSystemBlacklistItemsModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/SaveErpSystemBlacklistItemsModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/SaveErpSystemBlacklistItemsModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/SaveErpSystemBlacklistItemsModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/SaveErpSystemBlacklistItemsModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/SaveErpSystemBlacklistItemsModel" + } + } + }, + "description": "ErpSystemId, ErpSystemBlacklistType, and ItemNames to create the Blacklist Items." + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/ErpSystemBlacklists/{erpSystemId}": { + "get": { + "tags": [ + "ErpSystemBlacklists" + ], + "summary": "Returns list of Blacklist Items of an Erp System based on erpSystemId.", + "operationId": "GetErpSystemBlacklistItemsForErpSystem", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "The id of the target ERP System.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + }, + "post": { + "tags": [ + "ErpSystemBlacklists" + ], + "summary": "Delete ERP System Blacklist Items based on ids.", + "operationId": "BulkDeleteErpSystemBlacklistItems", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/ErpSystemBlacklists/{erpSystemId}/{erpSystemBlacklistType}": { + "get": { + "tags": [ + "ErpSystemBlacklists" + ], + "summary": "Returns list of Blacklist Items of an ERP System based on erpSystemId and ErpSystemBlacklistType.", + "operationId": "GetErpSystemBlacklistItemsForErpSystemAndType", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "The id of the target ERP System.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "erpSystemBlacklistType", + "in": "path", + "description": "The ERP System Blacklist Type.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "role", + "user" + ] + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemBlacklistItem" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/erpSystemData/{erpSystemId}/users": { + "get": { + "tags": [ + "ErpSystemData" + ], + "summary": "Gets users for specified ERP system.", + "operationId": "GetUsers", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "Identifier of ERP system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "search", + "in": "query", + "description": "Search string, that will be used to filter results.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "bulkSearch", + "in": "query", + "description": "Bulk search string. Basically it's set of values separated by any delimiter.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/erpSystemData/{erpSystemId}/{userName}/isActive": { + "get": { + "tags": [ + "ErpSystemData" + ], + "summary": "Determines if user is active.", + "operationId": "IsUserActive", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "Identifier of ERP system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "userName", + "in": "path", + "description": "Name of ERP system.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUser" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/erpSystemData/{erpSystemId}/roles": { + "post": { + "tags": [ + "ErpSystemData" + ], + "summary": "Gets ERP roles for specified ERP system.", + "operationId": "GetRoles", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "Identifier of ERP system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/RolesSearchParameters" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/RolesSearchParameters" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/RolesSearchParameters" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/RolesSearchParameters" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/RolesSearchParameters" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/RolesSearchParameters" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/RolesSearchParameters" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/RolesSearchParameters" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/RolesSearchParameters" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/RolesSearchParameters" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/RolesSearchParameters" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/RolesSearchParameters" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/RolesSearchParameters" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/RolesSearchParameters" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/RolesSearchParameters" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/RolesSearchParameters" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/RolesSearchParameters" + } + } + }, + "description": "Search parameters." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRole" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRole" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRole" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRole" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRole" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRole" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRole" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRole" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRole" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRole" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRole" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRole" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRole" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRole" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRole" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRole" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/erpSystemData/{erpSystemId}/userRoles": { + "post": { + "tags": [ + "ErpSystemData" + ], + "summary": "Gets user-ro-role relationships for specified ERP system.", + "operationId": "GetUserRoles", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "Identifier of ERP system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UserRolesSearchParameters" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UserRolesSearchParameters" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/UserRolesSearchParameters" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UserRolesSearchParameters" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UserRolesSearchParameters" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/UserRolesSearchParameters" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UserRolesSearchParameters" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UserRolesSearchParameters" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/UserRolesSearchParameters" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UserRolesSearchParameters" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UserRolesSearchParameters" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserRolesSearchParameters" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/UserRolesSearchParameters" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/UserRolesSearchParameters" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/UserRolesSearchParameters" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/UserRolesSearchParameters" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/UserRolesSearchParameters" + } + } + }, + "description": "Search parameters." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUserRole" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUserRole" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUserRole" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUserRole" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUserRole" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUserRole" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUserRole" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUserRole" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUserRole" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUserRole" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUserRole" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUserRole" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUserRole" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUserRole" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUserRole" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpUserRole" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/erpSystems": { + "get": { + "tags": [ + "ErpSystems" + ], + "summary": "Gets the list of available ERP systems for the authenticated user's account.", + "operationId": "GetErpSystems", + "parameters": [ + { + "name": "accountId", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "customerId", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + } + } + }, + "/api/v2/erpSystems": { + "get": { + "tags": [ + "ErpSystems" + ], + "summary": "Gets the list of available ERP systems for the authenticated user's account with option to include connection info.", + "operationId": "GetErpSystemsWithConnectionInfo", + "parameters": [ + { + "name": "accountId", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "customerId", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "includeConnectionInfo", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + } + } + }, + "/api/erpSystems/{erpSystemId}": { + "get": { + "tags": [ + "ErpSystems" + ], + "summary": "Gets an ERP system by Id.\r\nDoesn't return sensitive information like passwords.", + "operationId": "GetErpSystem", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + } + } + } + }, + "/api/filteredDashboard/userrisks/byrating/{jobId}": { + "get": { + "tags": [ + "FilteredDashboard" + ], + "summary": "Returns a list of user risks grouped by rating.", + "operationId": "GetUserRisksByRating", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "Identifier of the risk snapshot job.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "customerId", + "in": "query", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "query", + "description": "Identifier of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "selectedAccessContexts", + "in": "query", + "description": "Selected filters.", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRisk" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/filteredDashboard/userrisks/byprocess/{jobId}": { + "get": { + "tags": [ + "FilteredDashboard" + ], + "summary": "Returns a list of user risks grouped by business process.", + "operationId": "GetUserRisksByProcess", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "Identifier of the risk snapshot job.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "customerId", + "in": "query", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "query", + "description": "Identifier of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "selectedAccessContexts", + "in": "query", + "description": "Selected filters.", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessProcessRisk" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/filteredDashboard/userrisks/history/{jobId}": { + "get": { + "tags": [ + "FilteredDashboard" + ], + "summary": "Returns the history of user risks.", + "operationId": "GetUserRisksHistory", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "Identifier of the risk snapshot job.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "customerId", + "in": "query", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "query", + "description": "Identifier of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "selectedAccessContexts", + "in": "query", + "description": "Selected filters.", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ConflictSummary" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/filteredDashboard/userrisks/highest/{jobId}": { + "get": { + "tags": [ + "FilteredDashboard" + ], + "summary": "Returns the highest unmitigated user risks.", + "operationId": "GetHighestUserRisks", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "Identifier of the risk snapshot job.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "customerId", + "in": "query", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "query", + "description": "Identifier of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "selectedAccessContexts", + "in": "query", + "description": "Selected filters.", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskRating" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/filteredDashboard/status/{jobId}": { + "get": { + "tags": [ + "FilteredDashboard" + ], + "summary": "Returns the status of analysis for users and roles.", + "operationId": "GetStatus", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "Identifier of the risk snapshot job.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "customerId", + "in": "query", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "query", + "description": "Identifier of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "selectedAccessContexts", + "in": "query", + "description": "Selected filters.", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": { + "format": "int32", + "type": "integer" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/ImportResults/{jobId}": { + "get": { + "tags": [ + "ImportResults" + ], + "summary": "Gets the import file results for the specified job id.", + "operationId": "GetImportResults", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The job id linked to the import results file.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportSapUsersResult" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportSapUsersResult" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportSapUsersResult" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportSapUsersResult" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportSapUsersResult" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportSapUsersResult" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportSapUsersResult" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportSapUsersResult" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportSapUsersResult" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportSapUsersResult" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportSapUsersResult" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportSapUsersResult" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportSapUsersResult" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportSapUsersResult" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportSapUsersResult" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportSapUsersResult" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/ImportResults/{fileType}/{customerId}/upload": { + "post": { + "tags": [ + "ImportResults" + ], + "summary": "Uploads import result file to storage.", + "operationId": "UploadFile", + "parameters": [ + { + "name": "fileType", + "in": "path", + "description": "Type of imported file.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "uploadedFile", + "importedResult" + ] + } + }, + { + "name": "customerId", + "in": "path", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/UploadFile" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/ImportResults/{fileType}/job/{jobId}/upload": { + "post": { + "tags": [ + "ImportResults" + ], + "summary": "Uploads import result file to storage.", + "operationId": "UploadFile", + "parameters": [ + { + "name": "fileType", + "in": "path", + "description": "Type of imported file.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "uploadedFile", + "importedResult" + ] + } + }, + { + "name": "jobId", + "in": "path", + "description": "Identifier of the job.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/UploadFile" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/ImportResults/{importResultRecordId}/setJobId/{jobId}": { + "patch": { + "tags": [ + "ImportResults" + ], + "summary": "Sets JobId property for import result record with specified identifier.", + "operationId": "SetJobId", + "parameters": [ + { + "name": "importResultRecordId", + "in": "path", + "description": "Identifier of import result record.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "jobId", + "in": "path", + "description": "Identifier of the job.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/Lookups/{erpSystemType}/productversion/{customerId}": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a list of erp product versions, based on the supplied parameters.", + "operationId": "GetErpProductVersions", + "parameters": [ + { + "name": "erpSystemType", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ] + } + }, + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/Lookups/{erpSystemType}/dateformats/{customerId}": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a list of supported date formats, based on the supplied parameters.", + "operationId": "GetSupportedDateFormats", + "parameters": [ + { + "name": "erpSystemType", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ] + } + }, + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/Lookups/{erpSystemType}/languages/{customerId}": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a list of supported languages, based on the supplied parameters.", + "operationId": "GetSupportedLanguages", + "parameters": [ + { + "name": "erpSystemType", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ] + } + }, + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Language" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Language" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Language" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Language" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Language" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Language" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Language" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Language" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Language" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Language" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Language" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Language" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Language" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Language" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Language" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Language" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/Lookups/{erpSystemType}/timezones/{customerId}": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a list of supported time zones, based on the supplied parameters.", + "operationId": "GetSupportedTimezones", + "parameters": [ + { + "name": "erpSystemType", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ] + } + }, + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Timezone" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Timezone" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Timezone" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Timezone" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Timezone" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Timezone" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Timezone" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Timezone" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Timezone" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Timezone" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Timezone" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Timezone" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Timezone" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Timezone" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Timezone" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Timezone" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/Lookups/{erpSystemType}/accounts/{customerId}": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a list of accounts assigned to user, based on the supplied parameters.", + "operationId": "GetUserAssignedAccounts", + "parameters": [ + { + "name": "erpSystemType", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ] + } + }, + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAssignedAccount" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAssignedAccount" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAssignedAccount" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAssignedAccount" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAssignedAccount" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAssignedAccount" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAssignedAccount" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAssignedAccount" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAssignedAccount" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAssignedAccount" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAssignedAccount" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAssignedAccount" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAssignedAccount" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAssignedAccount" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAssignedAccount" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserAssignedAccount" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/Lookups/eam/options": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets the configuration options for EAM Requests", + "operationId": "GetEamRequestOptions", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestOptionsModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestOptionsModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestOptionsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestOptionsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestOptionsModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestOptionsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestOptionsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestOptionsModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestOptionsModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestOptionsModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestOptionsModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestOptionsModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestOptionsModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestOptionsModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestOptionsModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestOptionsModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/realtimereports/whatif": { + "post": { + "tags": [ + "RealTimeReports" + ], + "summary": "Fetch Whatif data for a single user in realtime", + "operationId": "GetRealTimeWhatIfForSingleUser", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UserWhatIfRealTimeRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UserWhatIfRealTimeRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/UserWhatIfRealTimeRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UserWhatIfRealTimeRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UserWhatIfRealTimeRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/UserWhatIfRealTimeRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UserWhatIfRealTimeRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UserWhatIfRealTimeRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/UserWhatIfRealTimeRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UserWhatIfRealTimeRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UserWhatIfRealTimeRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserWhatIfRealTimeRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/UserWhatIfRealTimeRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/UserWhatIfRealTimeRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/UserWhatIfRealTimeRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/UserWhatIfRealTimeRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/UserWhatIfRealTimeRequest" + } + } + }, + "description": "request information like roles and groups to add or remove ErpMaestro.ArmServices.Common.Models.RealtimeReports.UserWhatIfRealTimeRequest" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Task_IActionResult_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Task_IActionResult_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/Task_IActionResult_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Task_IActionResult_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Task_IActionResult_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/Task_IActionResult_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Task_IActionResult_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Task_IActionResult_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/Task_IActionResult_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Task_IActionResult_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Task_IActionResult_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Task_IActionResult_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Task_IActionResult_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/Task_IActionResult_" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Task_IActionResult_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/Task_IActionResult_" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/layouts/{reportType}": { + "get": { + "tags": [ + "ReportLayouts" + ], + "summary": "Gets the user-saved or default report layout for the specified report type.", + "operationId": "GetReportLayout", + "parameters": [ + { + "name": "reportType", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "userSummary", + "riskSummary", + "riskLevelDetails", + "userTCodeLevelRiskDetails", + "authorizationObjectLevelHitDetails", + "userRemediations", + "roleSummary", + "executionSummaryMonthly", + "executionSummary", + "roleRemediations", + "roleMemberTCodeExecutions", + "roleTCodeLevelRiskDetails", + "rolesRankedByRisk", + "riskDescriptions", + "businessFunctionDescriptions", + "dailyChangeDocumentSummary", + "mitigatingControls", + "roleDetails", + "roleInherentRiskDetails", + "userPermissionLevelDetails", + "roleAuthorizationObjectLevelHitDetails" + ] + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + }, + "put": { + "tags": [ + "ReportLayouts" + ], + "summary": "Sets the user report layout for the specified report type.", + "operationId": "SetReportLayout", + "parameters": [ + { + "name": "reportType", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "userSummary", + "riskSummary", + "riskLevelDetails", + "userTCodeLevelRiskDetails", + "authorizationObjectLevelHitDetails", + "userRemediations", + "roleSummary", + "executionSummaryMonthly", + "executionSummary", + "roleRemediations", + "roleMemberTCodeExecutions", + "roleTCodeLevelRiskDetails", + "rolesRankedByRisk", + "riskDescriptions", + "businessFunctionDescriptions", + "dailyChangeDocumentSummary", + "mitigatingControls", + "roleDetails", + "roleInherentRiskDetails", + "userPermissionLevelDetails", + "roleAuthorizationObjectLevelHitDetails" + ] + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/ReportFieldConfigArray" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/layouts/{erpSystemType}/{reportType}": { + "get": { + "tags": [ + "ReportLayouts" + ], + "summary": "Returns the user-saved or default report layout for the specified ErpSystem and report type.", + "operationId": "GetMultiSystemReportLayout", + "parameters": [ + { + "name": "erpSystemType", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ] + } + }, + { + "name": "reportType", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "userSummary", + "riskSummary", + "riskLevelDetails", + "userTCodeLevelRiskDetails", + "authorizationObjectLevelHitDetails", + "userRemediations", + "roleSummary", + "executionSummaryMonthly", + "executionSummary", + "roleRemediations", + "roleMemberTCodeExecutions", + "roleTCodeLevelRiskDetails", + "rolesRankedByRisk", + "riskDescriptions", + "businessFunctionDescriptions", + "dailyChangeDocumentSummary", + "mitigatingControls", + "roleDetails", + "roleInherentRiskDetails", + "userPermissionLevelDetails", + "roleAuthorizationObjectLevelHitDetails" + ] + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ReportLayout" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + }, + "put": { + "tags": [ + "ReportLayouts" + ], + "summary": "Sets the user report layout for the specified ErpSystem and report type.", + "operationId": "SetMultiSystemReportLayout", + "parameters": [ + { + "name": "erpSystemType", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ] + } + }, + { + "name": "reportType", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "userSummary", + "riskSummary", + "riskLevelDetails", + "userTCodeLevelRiskDetails", + "authorizationObjectLevelHitDetails", + "userRemediations", + "roleSummary", + "executionSummaryMonthly", + "executionSummary", + "roleRemediations", + "roleMemberTCodeExecutions", + "roleTCodeLevelRiskDetails", + "rolesRankedByRisk", + "riskDescriptions", + "businessFunctionDescriptions", + "dailyChangeDocumentSummary", + "mitigatingControls", + "roleDetails", + "roleInherentRiskDetails", + "userPermissionLevelDetails", + "roleAuthorizationObjectLevelHitDetails" + ] + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/ReportFieldConfigArray" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/reports/usersummary/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets the user summary dataset for the specified job id.", + "operationId": "GetUserSummary", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "Identifier of the job.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "search", + "in": "query", + "description": "A search parameter to search the report.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "usersFilter", + "in": "query", + "description": "A comma separated list of ErpMaestro.ArmServices.Common.Models.UserSummary.UserId fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "customerId", + "in": "query", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "query", + "description": "Identifier of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "selectedAccessContexts", + "in": "query", + "description": "Selected filters.", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserSummary" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserSummary" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserSummary" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserSummary" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserSummary" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserSummary" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserSummary" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserSummary" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserSummary" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserSummary" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserSummary" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserSummary" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/v2/reports/risksummary/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets the risk summary dataset for the specified job id.", + "operationId": "GetRiskSummary", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job the report belongs to.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "search", + "in": "query", + "description": "A search parameter to search the report.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "usersFilter", + "in": "query", + "description": "A comma separated list of !:RiskSummaryModel.UserId fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "risksFilter", + "in": "query", + "description": "A comma separated list of !:RiskSummaryModel.RiskName fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "utilizationType", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "stad", + "cdpos" + ] + } + }, + { + "name": "customerId", + "in": "query", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "query", + "description": "Identifier of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "selectedAccessContexts", + "in": "query", + "description": "Selected filters.", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + } + } + }, + "/api/reports/risksummary/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets the risk summary dataset for the specified job id.", + "operationId": "GetRiskSummary", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job the report belongs to.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "utilizationType", + "in": "query", + "description": "Utilization Type.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "stad", + "cdpos" + ] + } + }, + { + "name": "usersFilter", + "in": "query", + "description": "Optional: A comma separated list of users to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "risksFilter", + "in": "query", + "description": "Optional: A comma separated list of risks to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskSummaryModel" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + } + }, + "deprecated": true + } + }, + "/api/reports/riskleveldetails/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets the risk level details dataset for the specified job id.\r\nThis endpoint will receive the filterable parameters from the\r\nodata formatted url.", + "operationId": "GetRiskLevelDetails", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job the report belongs to.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "usersFilter", + "in": "query", + "description": "A comma separated list of users to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "risksFilter", + "in": "query", + "description": "A comma separated list of risks to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "customerId", + "in": "query", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "query", + "description": "Identifier of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "selectedAccessContexts", + "in": "query", + "description": "Selected filters.", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskLevelDetails" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskLevelDetails" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskLevelDetails" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskLevelDetails" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskLevelDetails" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskLevelDetails" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskLevelDetails" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskLevelDetails" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskLevelDetails" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskLevelDetails" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskLevelDetails" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskLevelDetails" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskLevelDetails" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskLevelDetails" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskLevelDetails" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskLevelDetails" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/reports/usertcodelevelriskdetails/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets the User TCode level risk details dataset for the specified job id.", + "operationId": "GetUserConflictMatrix", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job the report belongs to.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "usersFilter", + "in": "query", + "description": "A comma separated list of ErpMaestro.ArmServices.Common.Models.Reports.UserConflictMatrixModel.UserId fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "risksFilter", + "in": "query", + "description": "A comma separated list of ErpMaestro.ArmServices.Common.Models.Reports.UserConflictMatrixModel.RuleCode fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "customerId", + "in": "query", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "query", + "description": "Identifier of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "selectedAccessContexts", + "in": "query", + "description": "Selected filters.", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserConflictMatrixModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserConflictMatrixModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserConflictMatrixModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserConflictMatrixModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserConflictMatrixModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserConflictMatrixModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserConflictMatrixModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserConflictMatrixModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserConflictMatrixModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserConflictMatrixModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserConflictMatrixModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserConflictMatrixModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserConflictMatrixModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserConflictMatrixModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserConflictMatrixModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserConflictMatrixModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/v2/reports/authorizationObjectLevelHitDetails/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets the business function hits dataset for the specified job id.", + "operationId": "GetBusinessFunctionHits", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job the report belongs to.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "usersFilter", + "in": "query", + "description": "A comma separated list of !:RiskSummaryModel.UserId fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "risksFilter", + "in": "query", + "description": "A comma separated list of !:RiskSummaryModel.RiskName fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "customerId", + "in": "query", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "query", + "description": "Identifier of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "selectedAccessContexts", + "in": "query", + "description": "Selected filters.", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/reports/authorizationObjectLevelHitDetails/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets the business function hits dataset for the specified job id.", + "operationId": "GetBusinessFunctionHits", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job the report belongs to.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "usersFilter", + "in": "query", + "description": "Optional: A comma separated list of ErpMaestro.ArmServices.Common.Models.Reports.BusinessFunctionHitModel.Username fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "risksFilter", + "in": "query", + "description": "Optional: A comma separated list of ErpMaestro.ArmServices.Common.Models.Reports.BusinessFunctionHitModel.BusinessFunctionCode fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionHitModel" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + } + }, + "deprecated": true + } + }, + "/api/reports/userRemediations/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets the User Recommendations dataset for the specified job id.", + "operationId": "GetUserRecommendations", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job the report belongs to.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "usersFilter", + "in": "query", + "description": "A comma separated list of ErpMaestro.ArmServices.Common.Models.Reports.UserRecommendationModel.UserId fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "rolesFilter", + "in": "query", + "description": "A comma separated list of ErpMaestro.ArmServices.Common.Models.Reports.UserRecommendationModel.Role fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "customerId", + "in": "query", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "query", + "description": "Identifier of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "selectedAccessContexts", + "in": "query", + "description": "Selected filters.", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRecommendationModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRecommendationModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRecommendationModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRecommendationModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRecommendationModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRecommendationModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRecommendationModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRecommendationModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRecommendationModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRecommendationModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRecommendationModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRecommendationModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRecommendationModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRecommendationModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRecommendationModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRecommendationModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/reports/roleSummary/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets the Role Summary dataset for the specified job id.", + "operationId": "GetRoleSummary", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job the report belongs to.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "rolesFilter", + "in": "query", + "description": "Optional: A comma separated list of ErpMaestro.ArmServices.Common.Models.Reports.RoleSummary.RoleName fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleSummary" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleSummary" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleSummary" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleSummary" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleSummary" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleSummary" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleSummary" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleSummary" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleSummary" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleSummary" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleSummary" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleSummary" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/reports/executionSummaryMonthly/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets the Utilization Summary Monthly dataset for the specified job id.", + "operationId": "GetExecutionSummaryMonthly", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job the report belongs to.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "usersFilter", + "in": "query", + "description": "A comma separated list of ErpMaestro.ArmServices.Common.Models.Reports.UtilizationSummaryMonthly.UserId fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "tcodesFilter", + "in": "query", + "description": "A comma separated list of ErpMaestro.ArmServices.Common.Models.Reports.UtilizationSummaryMonthly.Tcode fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "customerId", + "in": "query", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "query", + "description": "Identifier of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "selectedAccessContexts", + "in": "query", + "description": "Selected filters.", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummaryMonthly" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummaryMonthly" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummaryMonthly" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummaryMonthly" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummaryMonthly" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummaryMonthly" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummaryMonthly" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummaryMonthly" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummaryMonthly" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummaryMonthly" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummaryMonthly" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummaryMonthly" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummaryMonthly" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummaryMonthly" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummaryMonthly" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummaryMonthly" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/reports/executionSummary/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets the Utilization Summary dataset for the specified job id.", + "operationId": "GetExecutionSummary", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job the report belongs to.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "usersFilter", + "in": "query", + "description": "A comma separated list of ErpMaestro.ArmServices.Common.Models.Reports.UtilizationSummaryMonthly.UserId fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "tcodesFilter", + "in": "query", + "description": "A comma separated list of ErpMaestro.ArmServices.Common.Models.Reports.UtilizationSummaryMonthly.Tcode fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "customerId", + "in": "query", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "query", + "description": "Identifier of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "selectedAccessContexts", + "in": "query", + "description": "Selected filters.", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummary" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummary" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummary" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummary" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummary" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummary" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummary" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummary" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummary" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummary" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummary" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummary" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummary" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UtilizationSummary" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/reports/roleRemediations/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets the Role Remediations dataset for the specified job id.", + "operationId": "GetRoleRecommendations", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job the report belongs to.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "rolesFilter", + "in": "query", + "description": "Optional: A comma separated list of ErpMaestro.ArmServices.Common.Models.Reports.RoleRecommendationModel.RoleName fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleRecommendationModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleRecommendationModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleRecommendationModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleRecommendationModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleRecommendationModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleRecommendationModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleRecommendationModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleRecommendationModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleRecommendationModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleRecommendationModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleRecommendationModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleRecommendationModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleRecommendationModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleRecommendationModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleRecommendationModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleRecommendationModel" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/reports/roleMemberTCodeExecutions/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets the Role Member TCode Executions dataset for the specified job id.", + "operationId": "GetSecurityRolesReports", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job the report belongs to.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "usersFilter", + "in": "query", + "description": "A comma separated list of ErpMaestro.ArmServices.Common.Models.Reports.SecurityRolesReport.UserId fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "rolesFilter", + "in": "query", + "description": "A comma separated list of ErpMaestro.ArmServices.Common.Models.Reports.SecurityRolesReport.Role fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "tcodesFilter", + "in": "query", + "description": "A comma separated list of ErpMaestro.ArmServices.Common.Models.Reports.SecurityRolesReport.Tcode fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "customerId", + "in": "query", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "query", + "description": "Identifier of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "selectedAccessContexts", + "in": "query", + "description": "Selected filters.", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SecurityRolesReport" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SecurityRolesReport" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SecurityRolesReport" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SecurityRolesReport" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SecurityRolesReport" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SecurityRolesReport" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SecurityRolesReport" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SecurityRolesReport" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SecurityRolesReport" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SecurityRolesReport" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SecurityRolesReport" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SecurityRolesReport" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SecurityRolesReport" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SecurityRolesReport" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SecurityRolesReport" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SecurityRolesReport" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/reports/roleTCodeLevelRiskDetails/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets the Role TCode Level risk details dataset for the specified job id.", + "operationId": "GetRoleConflictMatrix", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job the report belongs to.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "rolesFilter", + "in": "query", + "description": "Optional: A comma separated list of ErpMaestro.ArmServices.Common.Models.Reports.RoleConflictMatrixModel.RoleName fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "risksFilter", + "in": "query", + "description": "Optional: A comma separated list of ErpMaestro.ArmServices.Common.Models.Reports.RoleConflictMatrixModel.RuleCode fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleConflictMatrixModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleConflictMatrixModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleConflictMatrixModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleConflictMatrixModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleConflictMatrixModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleConflictMatrixModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleConflictMatrixModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleConflictMatrixModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleConflictMatrixModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleConflictMatrixModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleConflictMatrixModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleConflictMatrixModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleConflictMatrixModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleConflictMatrixModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleConflictMatrixModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleConflictMatrixModel" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/reports/rolesRankedByRisk/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets the Roles Ranked By Risk dataset for the specified job id.", + "operationId": "GetRiskiestRoleSummary", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskiestRoleSummaryModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskiestRoleSummaryModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskiestRoleSummaryModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskiestRoleSummaryModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskiestRoleSummaryModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskiestRoleSummaryModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskiestRoleSummaryModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskiestRoleSummaryModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskiestRoleSummaryModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskiestRoleSummaryModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskiestRoleSummaryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskiestRoleSummaryModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskiestRoleSummaryModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskiestRoleSummaryModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskiestRoleSummaryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskiestRoleSummaryModel" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/reports/dailychangedocumentsummary/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets the daily change document summary for the specified job.", + "operationId": "GetDailyChangeDocumentSummary", + "parameters": [ + { + "name": "jobId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/DailyCdhdrPosUtilizationSummaryModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/DailyCdhdrPosUtilizationSummaryModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/DailyCdhdrPosUtilizationSummaryModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/DailyCdhdrPosUtilizationSummaryModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/DailyCdhdrPosUtilizationSummaryModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/DailyCdhdrPosUtilizationSummaryModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/DailyCdhdrPosUtilizationSummaryModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/DailyCdhdrPosUtilizationSummaryModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/DailyCdhdrPosUtilizationSummaryModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/DailyCdhdrPosUtilizationSummaryModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/DailyCdhdrPosUtilizationSummaryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/DailyCdhdrPosUtilizationSummaryModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/DailyCdhdrPosUtilizationSummaryModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/DailyCdhdrPosUtilizationSummaryModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/DailyCdhdrPosUtilizationSummaryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/DailyCdhdrPosUtilizationSummaryModel" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/reports/riskdescriptions/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets the risk descriptions for the specified job.", + "operationId": "GetRiskDescriptions", + "parameters": [ + { + "name": "jobId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "risksFilter", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskDescriptionModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskDescriptionModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskDescriptionModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskDescriptionModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskDescriptionModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskDescriptionModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskDescriptionModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskDescriptionModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskDescriptionModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskDescriptionModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskDescriptionModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskDescriptionModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskDescriptionModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskDescriptionModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskDescriptionModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RiskDescriptionModel" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/reports/businessfunctiondescriptions/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets the business function descriptions for the specified job.", + "operationId": "GetBusinessFunctionDescriptions", + "parameters": [ + { + "name": "jobId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "businessFunctionsFilter", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDescriptionModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDescriptionModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDescriptionModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDescriptionModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDescriptionModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDescriptionModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDescriptionModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDescriptionModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDescriptionModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDescriptionModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDescriptionModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDescriptionModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDescriptionModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDescriptionModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDescriptionModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionDescriptionModel" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/reports/mitigatingcontrols/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets the mitigating controls for the specified job.", + "operationId": "GetMitigatingControls", + "parameters": [ + { + "name": "jobId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlModel" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/reports/exportReport": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Exports the report.\r\nMay be used as an OData endpoint.", + "operationId": "ExportReport", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ExportReportRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ExportReportRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ExportReportRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ExportReportRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ExportReportRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ExportReportRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ExportReportRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ExportReportRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ExportReportRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ExportReportRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ExportReportRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportReportRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ExportReportRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ExportReportRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ExportReportRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ExportReportRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ExportReportRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/reports/roleDetails/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets a collection of Role Details, based on the supplied job id.", + "operationId": "GetRoleDetails", + "parameters": [ + { + "name": "jobId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleDetails" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleDetails" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleDetails" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleDetails" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleDetails" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleDetails" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleDetails" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleDetails" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleDetails" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleDetails" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleDetails" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleDetails" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleDetails" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleDetails" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleDetails" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleDetails" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/reports/roleInherentRiskDetails/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets a collection of Role Inherent Risk Details, based on the supplied job id.", + "operationId": "GetRoleInherentRiskDetails", + "parameters": [ + { + "name": "jobId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleInherentRiskDetails" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleInherentRiskDetails" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleInherentRiskDetails" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleInherentRiskDetails" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleInherentRiskDetails" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleInherentRiskDetails" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleInherentRiskDetails" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleInherentRiskDetails" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleInherentRiskDetails" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleInherentRiskDetails" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleInherentRiskDetails" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleInherentRiskDetails" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleInherentRiskDetails" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleInherentRiskDetails" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleInherentRiskDetails" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleInherentRiskDetails" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/reports/userPermissionLevelDetails/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets a collection of user permision Details", + "operationId": "GetUserPermissionLevelDetails", + "parameters": [ + { + "name": "jobId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "usersFilter", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "risksFilter", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserPermissionLevelDetailsModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserPermissionLevelDetailsModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserPermissionLevelDetailsModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserPermissionLevelDetailsModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserPermissionLevelDetailsModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserPermissionLevelDetailsModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserPermissionLevelDetailsModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserPermissionLevelDetailsModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserPermissionLevelDetailsModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserPermissionLevelDetailsModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserPermissionLevelDetailsModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserPermissionLevelDetailsModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserPermissionLevelDetailsModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserPermissionLevelDetailsModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserPermissionLevelDetailsModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserPermissionLevelDetailsModel" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/reports/roleAuthorizationObjectLevelHitDetails/{jobId}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Gets the role authorization hits, based on the supplied job id.", + "operationId": "GetRoleAuthorizationHits", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job the report belongs to.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "rolesFilter", + "in": "query", + "description": "Optional: A comma separated list of ErpMaestro.ArmServices.Common.Models.Reports.RoleAuthorizationHitModel.RoleName fields to filter the report by.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleAuthorizationHitModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleAuthorizationHitModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleAuthorizationHitModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleAuthorizationHitModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleAuthorizationHitModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleAuthorizationHitModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleAuthorizationHitModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleAuthorizationHitModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleAuthorizationHitModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleAuthorizationHitModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleAuthorizationHitModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleAuthorizationHitModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleAuthorizationHitModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleAuthorizationHitModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleAuthorizationHitModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleAuthorizationHitModel" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/SapSystem/{sapSystemId}/extract/{securityExtractId}/roles": { + "get": { + "tags": [ + "SapSystem" + ], + "summary": "Returns sap system roles", + "operationId": "GetRoleInfo", + "parameters": [ + { + "name": "sapSystemId", + "in": "path", + "description": "erp system id", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "securityExtractId", + "in": "path", + "description": "security extract id", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + }, + "deprecated": true + } + }, + "/api/SapSystem/{sapSystemId}/roles": { + "get": { + "tags": [ + "SapSystem" + ], + "summary": "Returns roles for specified SAP system.", + "operationId": "GetRoles", + "parameters": [ + { + "name": "sapSystemId", + "in": "path", + "description": "Identifier of SAP system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/SapSystem/customer/{customerId}/roles/locations": { + "get": { + "tags": [ + "SapSystem" + ], + "summary": "Returns role locations for selected customer id", + "operationId": "GetRoleLocations", + "parameters": [ + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleLocationModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleLocationModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleLocationModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleLocationModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleLocationModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleLocationModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleLocationModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleLocationModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleLocationModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleLocationModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleLocationModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleLocationModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleLocationModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleLocationModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleLocationModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleLocationModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + }, + "post": { + "tags": [ + "SapSystem" + ], + "summary": "Create a role location for selected customer id", + "operationId": "AddRoleLocation", + "parameters": [ + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/RoleLocationModel" + }, + "responses": { + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/SapSystem/customer/{customerId}/roles/locations/{roleLocationId}": { + "put": { + "tags": [ + "SapSystem" + ], + "summary": "Update a role location for selected customer id", + "operationId": "UpdateRoleLocation", + "parameters": [ + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "roleLocationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/RoleLocationModel" + }, + "responses": { + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + }, + "delete": { + "tags": [ + "SapSystem" + ], + "summary": "Update a role location for selected customer id", + "operationId": "DeleteRoleLocation", + "parameters": [ + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "roleLocationId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/SapSystem/roles": { + "put": { + "tags": [ + "SapSystem" + ], + "summary": "Update sap system role", + "operationId": "UpdateRole", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpRoleModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpRoleModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpRoleModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpRoleModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpRoleModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpRoleModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpRoleModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpRoleModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpRoleModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpRoleModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpRoleModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpRoleModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpRoleModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpRoleModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpRoleModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpRoleModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpRoleModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/SapSystem/{sapSystemId}/export/roles": { + "get": { + "tags": [ + "SapSystem" + ], + "summary": "Exports the specified ERP system's roles in a .xlsx file.", + "operationId": "ExportRoles", + "parameters": [ + { + "name": "sapSystemId", + "in": "path", + "description": "The ERP system id use to filter the ERP roles.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/SapSystem/{sapSystemId}/import/roles": { + "post": { + "tags": [ + "SapSystem" + ], + "summary": "Imports an Excel document containing SAP roles.", + "operationId": "ImportRoles", + "parameters": [ + { + "name": "sapSystemId", + "in": "path", + "description": "The ERP system id use to for the SAP roles.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "description": "The Excel file to be imported.", + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/SapSystem/{sapSystemId}/refresh/roles": { + "post": { + "tags": [ + "SapSystem" + ], + "summary": "Schedules a LoadSapInfoJob to refresh the SAP roles\r\nfor the latest security extract.", + "operationId": "RefreshRoles", + "parameters": [ + { + "name": "sapSystemId", + "in": "path", + "description": "The system id use to refresh the SAP roles.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + }, + "deprecated": true + } + }, + "/api/SapSystem": { + "put": { + "tags": [ + "SapSystem" + ], + "summary": "Updates an existing SAP system based on the specified parameters.\r\nReturns the object model of the updated system.", + "operationId": "Update", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UpdateSapSystemRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UpdateSapSystemRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/UpdateSapSystemRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UpdateSapSystemRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UpdateSapSystemRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/UpdateSapSystemRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UpdateSapSystemRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UpdateSapSystemRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/UpdateSapSystemRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UpdateSapSystemRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UpdateSapSystemRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateSapSystemRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/UpdateSapSystemRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/UpdateSapSystemRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/UpdateSapSystemRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/UpdateSapSystemRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/UpdateSapSystemRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + } + } + }, + "post": { + "tags": [ + "SapSystem" + ], + "summary": "Creates a new SAP system based on the specified parameters.\r\nReturns the object model of the newly created system.", + "operationId": "Create", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/CreateSapSystemRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/CreateSapSystemRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/CreateSapSystemRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/CreateSapSystemRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/CreateSapSystemRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/CreateSapSystemRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/CreateSapSystemRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/CreateSapSystemRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/CreateSapSystemRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/CreateSapSystemRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/CreateSapSystemRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateSapSystemRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/CreateSapSystemRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/CreateSapSystemRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/CreateSapSystemRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/CreateSapSystemRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/CreateSapSystemRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + } + } + } + }, + "/api/securityExtract/{erpSystemId}": { + "post": { + "tags": [ + "SecurityExtract" + ], + "summary": "Uploads new security extract.", + "operationId": "UploadExtract", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "Identifier of the ERP system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "fileExtract": { + "description": "File to upload.", + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/FileInfoModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/securityExtract/{erpSystemId}/refreshData": { + "post": { + "tags": [ + "SecurityExtract" + ], + "summary": "Refreshes extract info for specified ERP system.", + "operationId": "RefreshExtractInfo", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "Identifier of ERP system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/securityExtract/{erpSystemId}/loadExtractInfo": { + "post": { + "tags": [ + "SecurityExtract" + ], + "summary": "Schedules new LoadExtractInfo job.", + "operationId": "ScheduleLoadExtractInfoJob", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "Identifier of ERP system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/LoadExtractInfoModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/LoadExtractInfoModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/LoadExtractInfoModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/LoadExtractInfoModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/LoadExtractInfoModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/LoadExtractInfoModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/LoadExtractInfoModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/LoadExtractInfoModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/LoadExtractInfoModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/LoadExtractInfoModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/LoadExtractInfoModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoadExtractInfoModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/LoadExtractInfoModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/LoadExtractInfoModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/LoadExtractInfoModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/LoadExtractInfoModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/LoadExtractInfoModel" + } + } + }, + "description": "Represents Load Extract Info job parameters." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/service/erpsystems/{erpSystemId}": { + "get": { + "tags": [ + "Service" + ], + "summary": "Gets ERP system by Id. Returns all ERP system related information, including sensitive.", + "operationId": "GetErpSystem", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "404": { + "description": "Not Found" + } + } + } + }, + "/api/SuccessFactors": { + "put": { + "tags": [ + "SuccessFactorsSystem" + ], + "summary": "Updates an existing SF ERP system.", + "operationId": "UpdateSystem", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UpdateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UpdateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/UpdateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UpdateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UpdateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/UpdateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UpdateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UpdateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/UpdateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/UpdateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/UpdateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateErpSystemRequest_SfConnectionModel_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/UpdateErpSystemRequest_SfConnectionModel_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/UpdateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/UpdateErpSystemRequest_SfConnectionModel_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/UpdateErpSystemRequest_SfConnectionModel_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/UpdateErpSystemRequest_SfConnectionModel_" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + }, + "post": { + "tags": [ + "SuccessFactorsSystem" + ], + "summary": "Creates a new SF ERP system. Returns the unique identifier of the new system.", + "operationId": "CreateNewSystem", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/CreateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/CreateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/CreateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/CreateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/CreateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/CreateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/CreateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/CreateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/CreateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/CreateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/CreateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateErpSystemRequest_SfConnectionModel_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/CreateErpSystemRequest_SfConnectionModel_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/CreateErpSystemRequest_SfConnectionModel_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/CreateErpSystemRequest_SfConnectionModel_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/CreateErpSystemRequest_SfConnectionModel_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/CreateErpSystemRequest_SfConnectionModel_" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/SuccessFactors/{systemId}": { + "delete": { + "tags": [ + "SuccessFactorsSystem" + ], + "summary": "Deletes a SF ERP system.", + "operationId": "DeleteSystem", + "parameters": [ + { + "name": "systemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpSystemModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/SuccessFactors/ValidateConnectionInformation": { + "post": { + "tags": [ + "SuccessFactorsSystem" + ], + "summary": "Validates connection parameters", + "operationId": "ValidateConnectionInformation", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SfConnectionModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SfConnectionModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/SfConnectionModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SfConnectionModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SfConnectionModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/SfConnectionModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SfConnectionModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SfConnectionModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/SfConnectionModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SfConnectionModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SfConnectionModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/SfConnectionModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/SfConnectionModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/SfConnectionModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/SfConnectionModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/SfConnectionModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/SfConnectionModel" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/SuccessFactors/ValidateConnectionInformation/{erpSystemId}": { + "get": { + "tags": [ + "SuccessFactorsSystem" + ], + "summary": "Validates saved connection parameters by ERP System ID", + "operationId": "ValidateConnectionInformation", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ConnectionValidationResultModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/usercustomersettings/{customerId}/eamAdminReviewReminderEmailSettings": { + "get": { + "tags": [ + "UserCustomerSettings" + ], + "summary": "Returns email settings for EAM Admin Awaiting Review Reminders.", + "operationId": "GetEamAdminReviewReminderEmailSettings", + "parameters": [ + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + }, + "post": { + "tags": [ + "UserCustomerSettings" + ], + "summary": "Updates email settings for EAM Admin Awaiting Review Reminders.", + "operationId": "UpdateAdminReviewReminderEmailSettings", + "parameters": [ + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/EamAdminSummaryEmailSettingsModel" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/reports/userdetails/{customerId}/export": { + "get": { + "tags": [ + "UserManagement" + ], + "summary": "Creates a CSV file with a report of the users details for the specified customer.", + "operationId": "ExportUserDetails", + "parameters": [ + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + }, + "deprecated": true + } + }, + "/api/reports/userdetails/{customerId}/export/excel": { + "get": { + "tags": [ + "UserManagement" + ], + "summary": "Creates an Excel file with a report of the users details for the specified customer.", + "operationId": "ExportUserDetailsExcel", + "parameters": [ + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + }, + "deprecated": true + } + } + }, + "components": { + "requestBodies": { + "AccessContextModel": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessContextModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessContextModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/AccessContextModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessContextModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessContextModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/AccessContextModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessContextModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessContextModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/AccessContextModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessContextModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessContextModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccessContextModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/AccessContextModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/AccessContextModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/AccessContextModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/AccessContextModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/AccessContextModel" + } + } + }, + "description": "Metadata of the context." + }, + "AccessReviewDto": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/AccessReviewDto" + } + } + } + }, + "EmergencyAccessProfileModel": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + } + }, + "UploadFile": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "description": "File content.", + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "ReportFieldConfigArray": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportFieldConfig" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportFieldConfig" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportFieldConfig" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportFieldConfig" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportFieldConfig" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportFieldConfig" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportFieldConfig" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportFieldConfig" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportFieldConfig" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportFieldConfig" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportFieldConfig" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportFieldConfig" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportFieldConfig" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportFieldConfig" + } + } + }, + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportFieldConfig" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportFieldConfig" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportFieldConfig" + } + } + } + }, + "required": true + }, + "RoleLocationModel": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/RoleLocationModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/RoleLocationModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/RoleLocationModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/RoleLocationModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/RoleLocationModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/RoleLocationModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/RoleLocationModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/RoleLocationModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/RoleLocationModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/RoleLocationModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/RoleLocationModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleLocationModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/RoleLocationModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/RoleLocationModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/RoleLocationModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/RoleLocationModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/RoleLocationModel" + } + } + } + } + }, + "schemas": { + "AccessContextEntity": { + "description": "Represents a model for Access Context.", + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "Identifier of the Access Context.", + "type": "string" + }, + "customerId": { + "format": "uuid", + "description": "Identifier of the customer Access Context belongs to.", + "type": "string" + }, + "name": { + "description": "Name of the Access Context.", + "type": "string" + }, + "columnName": { + "description": "Name of the column Access Context belongs to.", + "type": "string" + }, + "columnValue": { + "description": "All available comma-separated values for column.", + "type": "string" + }, + "description": { + "description": "Description of the Access Context.", + "type": "string" + }, + "deletedDate": { + "format": "date-time", + "description": "Deleted date of access context.", + "type": "string" + }, + "splittedValues": { + "description": "List of splitted values from ErpMaestro.ArmServices.Common.Models.AccessContexts.AccessContextEntity.ColumnValue.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true + } + } + }, + "AccessContextModel": { + "description": "Represents a model for Access Context.", + "required": [ + "id", + "customerId", + "name", + "columnName", + "columnValue" + ], + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "Identifier of the Access Context.", + "type": "string" + }, + "customerId": { + "format": "uuid", + "description": "Identifier of the customer Access Context belongs to.", + "type": "string" + }, + "name": { + "description": "Name of the Access Context.", + "maxLength": 255, + "type": "string" + }, + "columnName": { + "description": "Name of the column Access Context belongs to.", + "maxLength": 100, + "type": "string" + }, + "columnValue": { + "description": "All available comma-separated values for column.", + "maxLength": 1000, + "type": "string" + }, + "description": { + "description": "Description of the Access Context.", + "maxLength": 1000, + "type": "string" + } + } + }, + "AccessReviewDashboardDto": { + "description": "Access review dashboards grid model", + "required": [ + "reviewName", + "reviewType", + "startDate", + "endDate", + "accountId", + "erpSystemId" + ], + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "Review ID", + "type": "string" + }, + "displayId": { + "description": "Represents a friendly version of the id for display purposes.\r\nUseful for UI filtering via OData.", + "type": "string", + "readOnly": true + }, + "reviewName": { + "description": "Review Name", + "type": "string" + }, + "reviewType": { + "$ref": "#/components/schemas/AccessReviewType" + }, + "displayReviewType": { + "description": "Represents a string version of the id for display and\r\nUI filtering via OData.", + "type": "string", + "readOnly": true + }, + "startDate": { + "format": "date-time", + "description": "Review Start Date", + "type": "string" + }, + "endDate": { + "format": "date-time", + "description": "Review End Date", + "type": "string" + }, + "accountId": { + "format": "int32", + "description": "Account ID", + "type": "integer" + }, + "erpSystemId": { + "format": "int32", + "description": "ERP System ID", + "type": "integer" + }, + "totalRows": { + "format": "int32", + "description": "Total number of review items", + "type": "integer" + }, + "reviewedRows": { + "format": "int32", + "description": "Number of review items reviewed", + "type": "integer" + }, + "reviewStatus": { + "$ref": "#/components/schemas/AccessReviewStatus" + }, + "displayReviewStatus": { + "description": "Review status for UI use", + "type": "string", + "readOnly": true + }, + "performedByType": { + "$ref": "#/components/schemas/PerformedByType" + }, + "displayPerformedByType": { + "description": "Performed By Type for UI use", + "type": "string", + "readOnly": true + }, + "createdBy": { + "description": "Created By", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "description": "Created Date", + "type": "string" + }, + "updatedBy": { + "description": "Updated By", + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "description": "Updated Date", + "type": "string" + }, + "percentComplete": { + "format": "int32", + "description": "Completion percentage", + "type": "integer" + }, + "percentSubmitted": { + "format": "int32", + "description": "Submission percentage for User To Role roles removal", + "type": "integer" + }, + "submittedReviewers": { + "format": "int32", + "description": "Number of reviewers that submitted the review", + "type": "integer" + }, + "totalReviewers": { + "format": "int32", + "description": "Total number of reviewers", + "type": "integer" + } + } + }, + "AccessReviewType": { + "enum": [ + "userToRole", + "roleToTcode", + "userToRisk", + "riskToMitigatingControl", + "rulebookDetails" + ], + "type": "string" + }, + "AccessReviewStatus": { + "enum": [ + "creatingReview", + "notStarted", + "inProgress", + "completed", + "overdue", + "blankReview", + "jobFailed", + "submitted", + "removingRoles", + "scheduled" + ], + "type": "string" + }, + "PerformedByType": { + "enum": [ + "managers", + "roleOwners", + "riskOwners" + ], + "type": "string" + }, + "AccessReviewDto": { + "description": "Access review administrator details", + "required": [ + "timeZoneId", + "reviewName", + "reviewType", + "startDate", + "endDate", + "accountId", + "erpSystemId" + ], + "type": "object", + "properties": { + "securityExtractId": { + "format": "int32", + "description": "Security Extract ID", + "type": "integer" + }, + "timeZoneId": { + "description": "Timezone ID", + "type": "string" + }, + "percentComplete": { + "format": "int32", + "description": "Completion percentage", + "type": "integer" + }, + "columnOptions": { + "description": "Review grid column options.", + "type": "string" + }, + "includeChangesSinceReviewId": { + "format": "uuid", + "description": "Review ID to include changes from", + "type": "string" + }, + "excludedRoles": { + "description": "Excluded Roles, none = include all", + "uniqueItems": true, + "type": "array", + "items": { + "type": "string" + } + }, + "includedUserGroups": { + "description": "Included User Groups, none = include all", + "uniqueItems": true, + "type": "array", + "items": { + "type": "string" + } + }, + "includedRuleBooks": { + "description": "Included Rulebooks", + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + }, + "hideEmptyColumns": { + "description": "Hide columns without values", + "type": "boolean" + }, + "initialEmailTemplate": { + "description": "Initial Email Template", + "type": "string" + }, + "remindersEmailTemplate": { + "description": "Reminders Email Template", + "type": "string" + }, + "finalEmailTemplate": { + "description": "Final Email Template", + "type": "string" + }, + "reminders": { + "description": "Reminder days", + "uniqueItems": true, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + }, + "monthsOfUtilization": { + "format": "int32", + "description": "Months of Utilization", + "type": "integer" + }, + "createMissingExtracts": { + "description": "Create missing extracts", + "type": "boolean" + }, + "percentSubmitted": { + "format": "int32", + "description": "Submission percentage for User To Role roles removal", + "type": "integer" + }, + "submittedReviewers": { + "format": "int32", + "description": "Submission percentage for User To Role roles removal", + "type": "integer" + }, + "totalReviewers": { + "format": "int32", + "description": "Total number of reviewers", + "type": "integer" + }, + "programCommandInstanceId": { + "format": "uuid", + "description": "Program Command Instance ID", + "type": "string" + }, + "enableGroupApprovals": { + "description": "Enable group approvals", + "type": "boolean" + }, + "includedRiskRatings": { + "description": "Included risk ratings, none = include all", + "uniqueItems": true, + "type": "array", + "items": { + "type": "string" + } + }, + "ignoreAdminLockedUsers": { + "description": "Ignore users locked by admin from analysis", + "type": "boolean" + }, + "ignoreFailedLoginUsers": { + "description": "Ignore users locked by failed login from analysis", + "type": "boolean" + }, + "id": { + "format": "uuid", + "description": "Review ID", + "type": "string" + }, + "displayId": { + "description": "Represents a friendly version of the id for display purposes.\r\nUseful for UI filtering via OData.", + "type": "string" + }, + "reviewName": { + "description": "Review Name", + "type": "string" + }, + "reviewType": { + "$ref": "#/components/schemas/AccessReviewType" + }, + "displayReviewType": { + "description": "Represents a string version of the id for display and\r\nUI filtering via OData.", + "type": "string" + }, + "startDate": { + "format": "date-time", + "description": "Review Start Date", + "type": "string" + }, + "endDate": { + "format": "date-time", + "description": "Review End Date", + "type": "string" + }, + "accountId": { + "format": "int32", + "description": "Account ID", + "type": "integer" + }, + "erpSystemId": { + "format": "int32", + "description": "ERP System ID", + "type": "integer" + }, + "totalRows": { + "format": "int32", + "description": "Total number of review items", + "type": "integer" + }, + "reviewedRows": { + "format": "int32", + "description": "Number of review items reviewed", + "type": "integer" + }, + "reviewStatus": { + "$ref": "#/components/schemas/AccessReviewStatus" + }, + "displayReviewStatus": { + "description": "Review status for UI use", + "type": "string" + }, + "performedByType": { + "$ref": "#/components/schemas/PerformedByType" + }, + "displayPerformedByType": { + "description": "Performed By Type for UI use", + "type": "string" + }, + "createdBy": { + "description": "Created By", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "description": "Created Date", + "type": "string" + }, + "updatedBy": { + "description": "Updated By", + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "description": "Updated Date", + "type": "string" + } + } + }, + "AccessReviewForReviewerDto": { + "description": "Access review for reviewer details", + "required": [ + "reviewName", + "reviewType", + "startDate", + "endDate", + "accountId", + "erpSystemId" + ], + "type": "object", + "properties": { + "columnOptions": { + "description": "Review grid column options.", + "type": "string" + }, + "emptyColumns": { + "description": "Empty review item columns to hide", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "enableGroupApprovals": { + "description": "Enable group approvals", + "type": "boolean" + }, + "comments": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AccessReviewCommentDto" + } + }, + "id": { + "format": "uuid", + "description": "Review ID", + "type": "string" + }, + "displayId": { + "description": "Represents a friendly version of the id for display purposes.\r\nUseful for UI filtering via OData.", + "type": "string" + }, + "reviewName": { + "description": "Review Name", + "type": "string" + }, + "reviewType": { + "$ref": "#/components/schemas/AccessReviewType" + }, + "displayReviewType": { + "description": "Represents a string version of the id for display and\r\nUI filtering via OData.", + "type": "string" + }, + "startDate": { + "format": "date-time", + "description": "Review Start Date", + "type": "string" + }, + "endDate": { + "format": "date-time", + "description": "Review End Date", + "type": "string" + }, + "accountId": { + "format": "int32", + "description": "Account ID", + "type": "integer" + }, + "erpSystemId": { + "format": "int32", + "description": "ERP System ID", + "type": "integer" + }, + "totalRows": { + "format": "int32", + "description": "Total number of review items", + "type": "integer" + }, + "reviewedRows": { + "format": "int32", + "description": "Number of review items reviewed", + "type": "integer" + }, + "reviewStatus": { + "$ref": "#/components/schemas/AccessReviewStatus" + }, + "displayReviewStatus": { + "description": "Review status for UI use", + "type": "string" + }, + "performedByType": { + "$ref": "#/components/schemas/PerformedByType" + }, + "displayPerformedByType": { + "description": "Performed By Type for UI use", + "type": "string" + }, + "createdBy": { + "description": "Created By", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "description": "Created Date", + "type": "string" + }, + "updatedBy": { + "description": "Updated By", + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "description": "Updated Date", + "type": "string" + } + } + }, + "AccessReviewCommentDto": { + "type": "object", + "properties": { + "decision": { + "$ref": "#/components/schemas/DecisionType" + }, + "comment": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "reviewerFullName": { + "type": "string" + }, + "oldReviewerFullName": { + "type": "string" + }, + "newReviewerFullName": { + "type": "string" + }, + "updatedBy": { + "type": "string" + } + } + }, + "DecisionType": { + "enum": [ + "undecided", + "approve", + "reject", + "delegate" + ], + "type": "string" + }, + "CompletedAndOverdueReviewsRequest": { + "required": [ + "erpSystemId" + ], + "type": "object", + "properties": { + "erpSystemId": { + "format": "int32", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + }, + "reviewType": { + "$ref": "#/components/schemas/AccessReviewType" + }, + "performedByType": { + "$ref": "#/components/schemas/PerformedByType" + } + } + }, + "AccessReviewLookup": { + "type": "object", + "properties": { + "accessReviewId": { + "format": "uuid", + "type": "string" + }, + "reviewName": { + "type": "string" + } + } + }, + "ReviewerStatusDto": { + "description": "Reviewer Status", + "type": "object", + "properties": { + "reviewerId": { + "format": "uuid", + "description": "Reviewer ID", + "type": "string" + }, + "reviewerFullName": { + "description": "Reviewer Full Name", + "type": "string" + }, + "reviewerEmail": { + "description": "Reviewer Email", + "type": "string" + }, + "reviewedRows": { + "format": "int32", + "description": "Number of review items reviewed", + "type": "integer" + }, + "totalRows": { + "format": "int32", + "description": "Total number of review items", + "type": "integer" + }, + "percentComplete": { + "format": "int32", + "description": "Completion percentage", + "type": "integer" + }, + "lastActionDate": { + "format": "date-time", + "description": "Latest update date", + "type": "string" + }, + "reviewStatus": { + "$ref": "#/components/schemas/AccessReviewStatus" + }, + "comment": { + "description": "Reviewer comment on review", + "type": "string" + }, + "reviewItemId": { + "format": "uuid", + "description": "ID of the reviewed item, e.g. RiskMitigatingControlReviewId, RoleTcodeReviewId, RulebookDetailsReviewId,\r\nUserRiskReviewIdv or UserRoleReviewId.\r\nNeeded for reviewer status delegation.", + "type": "string" + } + } + }, + "UserRoleReviewDto": { + "description": "User role review item", + "type": "object", + "properties": { + "userName": { + "description": "Gets or sets the name of the user.", + "type": "string" + }, + "fullName": { + "description": "Full name", + "type": "string" + }, + "firstName": { + "description": "First name", + "type": "string" + }, + "lastName": { + "description": "Last name", + "type": "string" + }, + "userGroup": { + "description": "User group", + "type": "string" + }, + "roleName": { + "description": "Gets or sets the name of the role.", + "type": "string" + }, + "roleDescription": { + "description": "Role description", + "type": "string" + }, + "reviewerFullName": { + "type": "string" + }, + "decision": { + "$ref": "#/components/schemas/DecisionType" + }, + "comment": { + "type": "string" + }, + "email": { + "description": "Email", + "type": "string" + }, + "jobTitle": { + "description": "Job title", + "type": "string" + }, + "department": { + "description": "Department", + "type": "string" + }, + "city": { + "description": "City", + "type": "string" + }, + "state": { + "description": "State", + "type": "string" + }, + "country": { + "description": "Country", + "type": "string" + }, + "costCenter": { + "description": "Cost center", + "type": "string" + }, + "isEmployee": { + "description": "Gets or sets a value indicating whether this instance is employee.", + "type": "boolean" + }, + "alternativeUserName": { + "description": "Gets or sets the name of the alternative user.", + "type": "string" + }, + "customAttribute1": { + "description": "Custom attribute 1", + "type": "string" + }, + "customAttribute2": { + "description": "Custom attribute 2", + "type": "string" + }, + "customAttribute3": { + "description": "Custom attribute 3", + "type": "string" + }, + "reviewerId": { + "format": "uuid", + "type": "string" + }, + "reviewItemId": { + "format": "uuid", + "type": "string" + }, + "numberOfTcodes": { + "format": "int32", + "description": "Number of tcodes", + "type": "integer" + }, + "percentUserGroup": { + "format": "int32", + "description": "Percent user group", + "type": "integer" + }, + "percentManager": { + "format": "int32", + "description": "Percent manager", + "type": "integer" + }, + "percentJobTitle": { + "format": "int32", + "description": "Percent job title", + "type": "integer" + }, + "roleExecutionCount": { + "format": "int32", + "description": "Role execution count", + "type": "integer" + }, + "isSubmitted": { + "description": "Gets or sets a value indicating whether this instance is submitted.", + "type": "boolean" + }, + "highestRiskForRole": { + "description": "Highest risk for role", + "type": "string" + }, + "numberOfHighCriticalRisks": { + "format": "int32", + "description": "Number of high critical risks", + "type": "integer" + }, + "numberOfRisks": { + "format": "int32", + "description": "Number of risks", + "type": "integer" + }, + "assignedFrom": { + "description": "Identifies if the user-role-profile relationship is associated with a Role or a Profile.", + "type": "string" + }, + "roleProfile": { + "description": "Identifies AssignedFrom as a user-to-role or user-to-profile assignment.", + "type": "string" + } + } + }, + "RoleTcodeReviewDto": { + "description": "Role to TCode review item", + "type": "object", + "properties": { + "reviewItemId": { + "format": "uuid", + "type": "string" + }, + "roleName": { + "description": "Role Name", + "type": "string" + }, + "roleDescription": { + "description": "Role Description", + "type": "string" + }, + "tcode": { + "description": "TCode name", + "type": "string" + }, + "tcodeDescription": { + "description": "TCode Description", + "type": "string" + }, + "isTcodeSensitive": { + "description": "Is TCode sensitive", + "type": "boolean" + }, + "decision": { + "$ref": "#/components/schemas/DecisionType" + }, + "comment": { + "type": "string" + }, + "reviewerId": { + "format": "uuid", + "type": "string" + }, + "reviewerFullName": { + "type": "string" + }, + "risks": { + "description": "Risks", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleTcodeReviewRisk" + } + }, + "risksCount": { + "format": "int32", + "description": "Risks Count", + "type": "integer" + } + } + }, + "RoleTcodeReviewRisk": { + "type": "object", + "properties": { + "roleTcodeReviewRiskId": { + "format": "uuid", + "type": "string" + }, + "roleTcodeReviewId": { + "format": "uuid", + "type": "string" + }, + "ruleCode": { + "type": "string" + }, + "ruleName": { + "type": "string" + }, + "ruleTypeCode": { + "$ref": "#/components/schemas/RuleTypeLookup" + }, + "riskRating": { + "type": "string" + } + } + }, + "RuleTypeLookup": { + "enum": [ + "undefined", + "sEN", + "sOD" + ], + "type": "string" + }, + "UserRoleRuleDto": { + "type": "object", + "properties": { + "userRoleRuleId": { + "format": "uuid", + "type": "string" + }, + "ruleCode": { + "type": "string" + }, + "ruleName": { + "type": "string" + }, + "ruleTypeCode": { + "type": "string" + }, + "riskRating": { + "type": "string" + }, + "businessFunctionCount": { + "format": "int32", + "type": "integer" + } + } + }, + "UserRiskReviewDto": { + "description": "User risk review item", + "type": "object", + "properties": { + "userName": { + "description": "User Name", + "type": "string" + }, + "fullName": { + "description": "Full name", + "type": "string" + }, + "firstName": { + "description": "First name", + "type": "string" + }, + "lastName": { + "description": "Last name", + "type": "string" + }, + "userGroup": { + "description": "User group", + "type": "string" + }, + "ruleCode": { + "description": "Rule code", + "type": "string" + }, + "ruleName": { + "description": "Gets or sets the name of the rule.", + "type": "string" + }, + "riskRating": { + "description": "Risk rating", + "type": "string" + }, + "ruleType": { + "description": "Gets or sets the type of the rule.", + "type": "string" + }, + "ruleBusinessProcess": { + "description": "Rule business process", + "type": "string" + }, + "hasMitigatingControl": { + "description": "Gets or sets a value indicating whether this instance has mitigating control.", + "type": "boolean" + }, + "sapRoles": { + "description": "Roles", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/UserRiskSapRolesInfoDto" + } + }, + "rolesCausingTheRiskCount": { + "format": "int32", + "description": "Roles causing the risk count", + "type": "integer" + }, + "reviewerFullName": { + "type": "string" + }, + "decision": { + "$ref": "#/components/schemas/DecisionType" + }, + "comment": { + "type": "string" + }, + "email": { + "description": "Email", + "type": "string" + }, + "jobTitle": { + "description": "Job title", + "type": "string" + }, + "department": { + "description": "Department", + "type": "string" + }, + "city": { + "description": "City", + "type": "string" + }, + "state": { + "description": "State", + "type": "string" + }, + "country": { + "description": "Country", + "type": "string" + }, + "costCenter": { + "description": "Cost center", + "type": "string" + }, + "isEmployee": { + "description": "Gets or sets a value indicating whether this instance is employee.", + "type": "boolean" + }, + "alternativeUserName": { + "description": "Gets or sets the name of the alternative user.", + "type": "string" + }, + "customAttribute1": { + "description": "Custom attribute 1", + "type": "string" + }, + "customAttribute2": { + "description": "Custom attribute 2", + "type": "string" + }, + "customAttribute3": { + "description": "Custom attribute 3", + "type": "string" + }, + "reviewerId": { + "format": "uuid", + "type": "string" + }, + "reviewItemId": { + "format": "uuid", + "type": "string" + } + } + }, + "UserRiskSapRolesInfoDto": { + "description": "Represents a model for role info for UserToRisk review item.", + "type": "object", + "properties": { + "userRiskSapRolesInfoId": { + "format": "uuid", + "description": "Identifier of role info.", + "type": "string" + }, + "userRiskReviewId": { + "format": "uuid", + "description": "Identifier of related UserToRisk review item.", + "type": "string" + }, + "roleName": { + "description": "Name of the role.", + "type": "string" + }, + "description": { + "description": "Description of the role.", + "type": "string" + } + } + }, + "RiskMitigatingControlReviewDto": { + "description": "Risk To Mitigating Control review item", + "type": "object", + "properties": { + "riskCode": { + "description": "Risk code", + "type": "string" + }, + "riskName": { + "description": "The name of the risk", + "type": "string" + }, + "riskRating": { + "description": "Risk rating", + "type": "string" + }, + "riskType": { + "description": "The type of the risk", + "type": "string" + }, + "businessProcess": { + "description": "Business process", + "type": "string" + }, + "mitigatingControlCode": { + "description": "Mitigating control code", + "type": "string" + }, + "mitigatingControlName": { + "description": "The name of the mitigating control", + "type": "string" + }, + "mitigatingControlType": { + "description": "The type of the mitigating control", + "type": "string" + }, + "frequency": { + "description": "Frequency", + "type": "string" + }, + "objective": { + "description": "Objective", + "type": "string" + }, + "requiresTesting": { + "description": "A value indicating whether item requires testing", + "type": "boolean" + }, + "appliedGlobally": { + "description": "A value indicating whether item is applied globally", + "type": "boolean" + }, + "reviewerFullName": { + "type": "string" + }, + "decision": { + "$ref": "#/components/schemas/DecisionType" + }, + "comment": { + "type": "string" + }, + "reviewItemId": { + "format": "uuid", + "type": "string" + }, + "reviewerId": { + "format": "uuid", + "type": "string" + } + } + }, + "RulebookDetailsReviewDto": { + "description": "Rulebook Details review item", + "type": "object", + "properties": { + "decision": { + "$ref": "#/components/schemas/DecisionType" + }, + "comment": { + "type": "string" + }, + "reviewItemId": { + "format": "uuid", + "type": "string" + }, + "reviewerFullName": { + "type": "string" + }, + "reviewerId": { + "format": "uuid", + "type": "string" + }, + "ruleBookCode": { + "description": "Rulebook code", + "type": "string" + }, + "ruleBookName": { + "description": "Rulebook Name", + "type": "string" + }, + "ruleBookDescription": { + "description": "Rulebook Description", + "type": "string" + }, + "ruleName": { + "description": "Rule Name", + "type": "string" + }, + "riskRating": { + "description": "Risk Rating", + "type": "string" + }, + "ruleTypeCode": { + "description": "Rule Type Code", + "type": "string" + }, + "businessProcess": { + "description": "Business Process", + "type": "string" + }, + "businessArea": { + "description": "Business Area", + "type": "string" + }, + "businessFunctionCount": { + "format": "int32", + "description": "Business Functions count", + "type": "integer" + }, + "mitigatingControlCount": { + "format": "int32", + "description": "Mitigating Controls count", + "type": "integer" + } + } + }, + "BusinessFunctionDto": { + "type": "object", + "properties": { + "businessFunctionCode": { + "type": "string" + }, + "businessFunctionName": { + "type": "string" + }, + "businessFunctionDescription": { + "type": "string" + }, + "authorizationObjectLogic": { + "$ref": "#/components/schemas/LogicOperator" + }, + "transactionCodeLogic": { + "$ref": "#/components/schemas/LogicOperator" + }, + "permissions": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionPermissionDto" + } + } + } + }, + "LogicOperator": { + "enum": [ + "undefined", + "and", + "or" + ], + "type": "string" + }, + "BusinessFunctionPermissionDto": { + "type": "object", + "properties": { + "transactionCode": { + "type": "string" + }, + "authorizationObjects": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionAuthorizationObjectDto" + } + } + } + }, + "BusinessFunctionAuthorizationObjectDto": { + "type": "object", + "properties": { + "authorizationObject": { + "type": "string" + }, + "authorizationFields": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/BusinessFunctionAuthorizationFieldDto" + } + } + } + }, + "BusinessFunctionAuthorizationFieldDto": { + "type": "object", + "properties": { + "authorizationField": { + "type": "string" + }, + "valueFrom": { + "type": "string" + }, + "valueTo": { + "type": "string" + } + } + }, + "MitigatingControlDto": { + "type": "object", + "properties": { + "mitigatingControlCode": { + "type": "string" + }, + "mitigatingControlName": { + "type": "string" + }, + "mitigatingControlType": { + "type": "string" + }, + "objective": { + "type": "string" + }, + "frequency": { + "type": "string" + } + } + }, + "TcodeDto": { + "type": "object", + "properties": { + "tcode": { + "type": "string" + }, + "ttext": { + "type": "string" + }, + "singleRole": { + "type": "string" + } + } + }, + "UserRoleToRemoveDto": { + "type": "object", + "properties": { + "userName": { + "type": "string" + }, + "roleName": { + "type": "string" + }, + "reviewerFullName": { + "type": "string" + } + } + }, + "DecideReviewRequest": { + "required": [ + "reviewItemIds", + "comment" + ], + "type": "object", + "properties": { + "reviewId": { + "format": "uuid", + "description": "Access Review ID", + "type": "string" + }, + "reviewItemIds": { + "description": "Review items", + "minLength": 1, + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + }, + "decision": { + "$ref": "#/components/schemas/DecisionType" + }, + "comment": { + "description": "Comment", + "type": "string" + } + } + }, + "DelegateReviewRequest": { + "required": [ + "comment" + ], + "type": "object", + "properties": { + "reviewId": { + "format": "uuid", + "description": "Access Review ID", + "type": "string" + }, + "oldReviewerId": { + "format": "uuid", + "description": "Existing reviewer ID", + "type": "string" + }, + "newReviewerId": { + "format": "uuid", + "description": "New reviewer ID", + "type": "string" + }, + "delegatorId": { + "format": "uuid", + "description": "Identifier of delegator.", + "type": "string" + }, + "comment": { + "description": "Comment", + "type": "string" + } + } + }, + "DelegateReviewItemsRequest": { + "required": [ + "reviewItemIds", + "comment" + ], + "type": "object", + "properties": { + "reviewItemIds": { + "description": "Review items", + "minLength": 1, + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + }, + "reviewId": { + "format": "uuid", + "description": "Access Review ID", + "type": "string" + }, + "oldReviewerId": { + "format": "uuid", + "description": "Existing reviewer ID", + "type": "string" + }, + "newReviewerId": { + "format": "uuid", + "description": "New reviewer ID", + "type": "string" + }, + "delegatorId": { + "format": "uuid", + "description": "Identifier of delegator.", + "type": "string" + }, + "comment": { + "description": "Comment", + "type": "string" + } + } + }, + "SapUserDto": { + "type": "object", + "properties": { + "id": { + "format": "uuid", + "type": "string" + }, + "username": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "fullName": { + "type": "string" + }, + "userGroup": { + "type": "string" + }, + "email": { + "type": "string" + }, + "managerUserId": { + "format": "uuid", + "type": "string" + }, + "managerUserName": { + "type": "string" + }, + "managerFullName": { + "type": "string" + }, + "managerEmail": { + "type": "string" + }, + "jobTitle": { + "type": "string" + }, + "department": { + "type": "string" + }, + "city": { + "type": "string" + }, + "state": { + "type": "string" + }, + "country": { + "type": "string" + }, + "costCenter": { + "type": "string" + }, + "isEmployee": { + "type": "boolean" + }, + "alternativeUserName": { + "type": "string" + }, + "customAttribute1": { + "type": "string" + }, + "customAttribute2": { + "type": "string" + }, + "customAttribute3": { + "type": "string" + } + } + }, + "ReviewerCommentRequest": { + "description": "Save reviewer comment request model.", + "required": [ + "comment" + ], + "type": "object", + "properties": { + "reviewId": { + "format": "uuid", + "description": "Access Review ID", + "type": "string" + }, + "comment": { + "description": "Comment", + "type": "string" + } + } + }, + "SendInitialEmailRequest": { + "type": "object", + "properties": { + "reviewId": { + "format": "uuid", + "description": "Access Review ID", + "type": "string" + }, + "reviewerId": { + "format": "uuid", + "description": "Reviewer ID", + "type": "string" + } + } + }, + "AccessReviewReportRequest": { + "type": "object", + "properties": { + "reviewId": { + "format": "uuid", + "description": "Access Review ID", + "type": "string" + }, + "signReport": { + "description": "Should report file be signed?", + "type": "boolean" + }, + "filterByReviewer": { + "description": "Filter by current user as a reviewer?", + "type": "boolean" + } + } + }, + "ErpSystemType": { + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ], + "type": "string" + }, + "SystemTypeCompatibilityMatrixModel": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/ErpSystemType" + }, + "canBeOverriden": { + "type": "boolean" + }, + "supportsUserBasedReports": { + "type": "boolean" + }, + "supportsRoleBasedReports": { + "type": "boolean" + }, + "supportsGroupBasedReports": { + "type": "boolean" + }, + "supportsUtilization": { + "type": "boolean" + }, + "supportsAccessContexts": { + "type": "boolean" + }, + "supportsExtractInfo": { + "type": "boolean" + }, + "supportsProvisioning": { + "type": "boolean" + } + } + }, + "CreateCompatibilityMatrixByTypeRequest": { + "required": [ + "type", + "canBeOverriden", + "supportsUserBasedReports", + "supportsRoleBasedReports", + "supportsGroupBasedReports", + "supportsUtilization", + "supportsAccessContexts", + "supportsExtractInfo", + "supportsProvisioning" + ], + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/ErpSystemType" + }, + "canBeOverriden": { + "type": "boolean" + }, + "supportsUserBasedReports": { + "type": "boolean" + }, + "supportsRoleBasedReports": { + "type": "boolean" + }, + "supportsGroupBasedReports": { + "type": "boolean" + }, + "supportsUtilization": { + "type": "boolean" + }, + "supportsAccessContexts": { + "type": "boolean" + }, + "supportsExtractInfo": { + "type": "boolean" + }, + "supportsProvisioning": { + "type": "boolean" + } + } + }, + "UpdateCompatibilityMatrixByTypeRequest": { + "required": [ + "type", + "canBeOverriden", + "supportsUserBasedReports", + "supportsRoleBasedReports", + "supportsGroupBasedReports", + "supportsUtilization", + "supportsAccessContexts", + "supportsExtractInfo", + "supportsProvisioning" + ], + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/ErpSystemType" + }, + "canBeOverriden": { + "type": "boolean" + }, + "supportsUserBasedReports": { + "type": "boolean" + }, + "supportsRoleBasedReports": { + "type": "boolean" + }, + "supportsGroupBasedReports": { + "type": "boolean" + }, + "supportsUtilization": { + "type": "boolean" + }, + "supportsAccessContexts": { + "type": "boolean" + }, + "supportsExtractInfo": { + "type": "boolean" + }, + "supportsProvisioning": { + "type": "boolean" + } + } + }, + "SystemCompatibilityMatrixModel": { + "type": "object", + "properties": { + "systemId": { + "format": "int32", + "type": "integer" + }, + "systemType": { + "$ref": "#/components/schemas/ErpSystemType" + }, + "supportsUserBasedReports": { + "type": "boolean" + }, + "supportsRoleBasedReports": { + "type": "boolean" + }, + "supportsGroupBasedReports": { + "type": "boolean" + }, + "supportsUtilization": { + "type": "boolean" + }, + "supportsAccessContexts": { + "type": "boolean" + }, + "supportsExtractInfo": { + "type": "boolean" + }, + "supportsProvisioning": { + "type": "boolean" + } + } + }, + "CreateCompatibilityMatrixBySystemRequest": { + "required": [ + "systemId", + "systemType" + ], + "type": "object", + "properties": { + "systemId": { + "format": "int32", + "type": "integer" + }, + "systemType": { + "$ref": "#/components/schemas/ErpSystemType" + }, + "supportsUserBasedReports": { + "type": "boolean" + }, + "supportsRoleBasedReports": { + "type": "boolean" + }, + "supportsGroupBasedReports": { + "type": "boolean" + }, + "supportsUtilization": { + "type": "boolean" + }, + "supportsAccessContexts": { + "type": "boolean" + }, + "supportsExtractInfo": { + "type": "boolean" + }, + "supportsProvisioning": { + "type": "boolean" + } + } + }, + "UpdateCompatibilityMatrixBySystemRequest": { + "required": [ + "systemId", + "systemType" + ], + "type": "object", + "properties": { + "systemId": { + "format": "int32", + "type": "integer" + }, + "systemType": { + "$ref": "#/components/schemas/ErpSystemType" + }, + "supportsUserBasedReports": { + "type": "boolean" + }, + "supportsRoleBasedReports": { + "type": "boolean" + }, + "supportsGroupBasedReports": { + "type": "boolean" + }, + "supportsUtilization": { + "type": "boolean" + }, + "supportsAccessContexts": { + "type": "boolean" + }, + "supportsExtractInfo": { + "type": "boolean" + }, + "supportsProvisioning": { + "type": "boolean" + } + } + }, + "UserRisk": { + "description": "Represents a user risk rating.", + "type": "object", + "properties": { + "riskRating": { + "$ref": "#/components/schemas/RiskRatingType" + }, + "executionLevel": { + "$ref": "#/components/schemas/ExecutionType" + }, + "mitigated": { + "description": "Represents whether the risk has been mitigated or not.", + "type": "boolean" + }, + "utilization": { + "$ref": "#/components/schemas/UtilizationType" + }, + "value": { + "format": "int32", + "description": "Represents the risk value.", + "type": "integer" + } + } + }, + "RiskRatingType": { + "enum": [ + "informational", + "low", + "medium", + "high", + "critical" + ], + "type": "string" + }, + "ExecutionType": { + "enum": [ + "none", + "notExecuted", + "partiallyExecuted", + "fullyExecuted", + "sensitiveAccess" + ], + "type": "string" + }, + "UtilizationType": { + "enum": [ + "stad", + "cdpos" + ], + "type": "string" + }, + "BusinessProcessRisk": { + "description": "Represents a business process risk rating.", + "type": "object", + "properties": { + "riskRating": { + "$ref": "#/components/schemas/RiskRatingType" + }, + "name": { + "description": "Represents the name of the business process.", + "type": "string" + }, + "executionLevel": { + "$ref": "#/components/schemas/ExecutionType" + }, + "mitigated": { + "description": "Represents whether the risk has been mitigated or not.", + "type": "boolean" + }, + "utilization": { + "$ref": "#/components/schemas/UtilizationType" + }, + "value": { + "format": "int32", + "description": "Represents the risk value.", + "type": "integer" + } + } + }, + "ConflictSummary": { + "description": "Represents a conflict summary.", + "type": "object", + "properties": { + "id": { + "format": "uuid", + "type": "string" + }, + "recurrenceId": { + "format": "uuid", + "type": "string" + }, + "riskRating": { + "$ref": "#/components/schemas/RiskRatingType" + }, + "businessProcessName": { + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "executionLevel": { + "$ref": "#/components/schemas/ExecutionType" + }, + "mitigated": { + "description": "Represents whether the risk has been mitigated or not.", + "type": "boolean" + }, + "utilization": { + "$ref": "#/components/schemas/UtilizationType" + }, + "value": { + "format": "int32", + "description": "Represents the risk value.", + "type": "integer" + } + } + }, + "RiskRating": { + "type": "object", + "properties": { + "riskRating": { + "$ref": "#/components/schemas/RiskRatingType" + }, + "value": { + "format": "int32", + "description": "The count of risks.", + "type": "integer" + } + } + }, + "RiskSnapshot": { + "description": "Represents a successfully completed risk snapshot.", + "type": "object", + "properties": { + "jobId": { + "format": "int64", + "description": "The id of the risk snapshot job.", + "type": "integer" + }, + "jobName": { + "description": "The name of the risk snapshot job.", + "type": "string" + }, + "securityExtractId": { + "format": "int32", + "description": "The id of the security extract used for this job.", + "type": "integer" + }, + "erpSystemId": { + "format": "int32", + "description": "The id of the ERP system.", + "type": "integer" + }, + "completedDate": { + "format": "date-time", + "description": "The date the snapshot job was completed.", + "type": "string" + }, + "analysisId": { + "format": "int32", + "description": "Represents the analysis unique identifier.", + "type": "integer" + } + } + }, + "FileTypeLookup": { + "enum": [ + "undefined", + "securityExtract", + "utilizationExtract", + "securityAnalysisResult", + "report", + "ruleBookExtract", + "whatIfAnalysisResult", + "importResult", + "sapChangeDocumentExtract", + "exportResult", + "accessReviewEmailTemplate", + "accessReviewRolesRemovalReport", + "rulebookChangeLog", + "extractCompletenessReportJob", + "changeLog" + ], + "type": "string" + }, + "Stream": { + "type": "object", + "properties": { + "canRead": { + "type": "boolean", + "readOnly": true + }, + "canSeek": { + "type": "boolean", + "readOnly": true + }, + "canTimeout": { + "type": "boolean", + "readOnly": true + }, + "canWrite": { + "type": "boolean", + "readOnly": true + }, + "length": { + "format": "int64", + "type": "integer", + "readOnly": true + }, + "position": { + "format": "int64", + "type": "integer" + }, + "readTimeout": { + "format": "int32", + "type": "integer" + }, + "writeTimeout": { + "format": "int32", + "type": "integer" + } + } + }, + "FileInfoModel": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "fileDataStorageId": { + "format": "uuid", + "type": "string" + }, + "fileName": { + "type": "string" + }, + "fileSizeInBytes": { + "format": "int64", + "type": "integer" + }, + "createdBy": { + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "accountId": { + "format": "int32", + "type": "integer" + }, + "fileUri": { + "type": "string" + }, + "fileType": { + "$ref": "#/components/schemas/FileTypeLookup" + }, + "jobId": { + "format": "int32", + "type": "integer" + }, + "reportType": { + "type": "string" + }, + "analysisType": { + "enum": [ + "user", + "role" + ], + "type": "string" + } + } + }, + "EmergencyAccessRequestModel": { + "description": "Represents the model for EAM requests.", + "required": [ + "id", + "profileId", + "requesterUserId", + "reason", + "transactionRequested", + "startDate", + "timeZoneId", + "duration" + ], + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "The id of the EAM request.", + "type": "string" + }, + "displayId": { + "description": "The display property for the id of the request.\r\nThis is needed to allow for OData filtering since OData\r\ndoes not support Guid types at the moment.", + "type": "string" + }, + "profileId": { + "format": "uuid", + "description": "The id of the selected EAM profile.", + "type": "string" + }, + "requesterUserId": { + "format": "uuid", + "description": "The id of the user making the request.", + "type": "string" + }, + "reason": { + "description": "The reason for the request.", + "type": "string" + }, + "transactionRequested": { + "description": "The transaction being requested.", + "type": "string" + }, + "comments": { + "description": "Comments to be recorded for the request.", + "type": "string" + }, + "startDate": { + "format": "date-time", + "description": "The date and time the request will take effect.", + "type": "string" + }, + "timeZoneId": { + "description": "The timezone of the request.", + "type": "string" + }, + "duration": { + "$ref": "#/components/schemas/DurationModel" + }, + "displayDuration": { + "description": "The display property for the duration of the request.\r\nThis is needed to allow for OData filtering since OData\r\ndoes not support complex types at the moment.", + "type": "string" + }, + "initialState": { + "$ref": "#/components/schemas/EmergencyAccessRequestState" + } + } + }, + "DurationModel": { + "description": "Represents a model where a duration can be specified in days, hours and/or minutes.", + "type": "object", + "properties": { + "days": { + "format": "int32", + "description": "The days part of the duration.", + "maximum": 2147483647, + "minimum": 0, + "type": "integer" + }, + "hours": { + "format": "int32", + "description": "The hours part of the duration.", + "maximum": 2147483647, + "minimum": 0, + "type": "integer" + }, + "minutes": { + "format": "int32", + "description": "The minutes part of the duration.", + "maximum": 59, + "minimum": 0, + "type": "integer" + } + } + }, + "EmergencyAccessRequestState": { + "enum": [ + "submitted", + "awaitingApproval", + "approved", + "rejected", + "awaitingReview", + "accepted", + "contested", + "accessProvisioned", + "generatingUsageReport", + "created", + "updated", + "retracted", + "error" + ], + "type": "string" + }, + "ValidationResult": { + "type": "object", + "properties": { + "memberNames": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true + }, + "errorMessage": { + "type": "string" + } + } + }, + "RequestActionModel": { + "description": "Represents a request for action for a particular EAM request.", + "required": [ + "requestId", + "action" + ], + "type": "object", + "properties": { + "requestId": { + "format": "uuid", + "description": "Represents the id of the EAM request.", + "type": "string" + }, + "action": { + "$ref": "#/components/schemas/EmergencyAccessActions" + }, + "comment": { + "description": "The action comment", + "type": "string" + } + } + }, + "EmergencyAccessActions": { + "enum": [ + "undefined", + "approve", + "reject", + "accept", + "pause", + "stop", + "extend", + "contest", + "download", + "comment", + "retract" + ], + "type": "string" + }, + "EmergencyAccessProfileModel": { + "description": "Represents the model for an EAM profile.", + "required": [ + "id", + "erpSystemId", + "name", + "description", + "roles", + "owners", + "requesters", + "approvers", + "reviewers", + "defaultDuration" + ], + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "The profile's unique identifier.", + "type": "string" + }, + "erpSystemId": { + "format": "int32", + "description": "The ERP system the profile belongs to.", + "type": "integer" + }, + "name": { + "description": "The name of the profile.", + "type": "string" + }, + "description": { + "description": "The description of the profile.", + "type": "string" + }, + "roles": { + "description": "A collection of role names assigned to the profile.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rulebookNames": { + "description": "A collection of rulebook names selected for the profile.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "owners": { + "description": "A collection of owner users selected for the profile.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessUserModel" + } + }, + "ownerNames": { + "description": "FullNames of owners converted to comma separated string.", + "type": "string", + "readOnly": true + }, + "requesters": { + "description": "A collection of requester users selected for the profile.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessUserModel" + } + }, + "approvers": { + "description": "A collection of approver users selected for the profile.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessUserModel" + } + }, + "reviewers": { + "description": "A collection of reviewer users selected for the profile.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessUserModel" + } + }, + "defaultDuration": { + "$ref": "#/components/schemas/DurationModel" + }, + "maxDuration": { + "$ref": "#/components/schemas/DurationModel" + }, + "enabled": { + "description": "A value indicating whether the profile is enabled.", + "type": "boolean" + }, + "createdBy": { + "description": "The user who created the profile.", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "description": "The date and time the profile was created.", + "type": "string" + } + } + }, + "EmergencyAccessUserModel": { + "description": "Represents the model for an EAM user.", + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "The user's unique identifier.", + "type": "string" + }, + "email": { + "description": "The user's email.", + "type": "string" + }, + "firstName": { + "description": "The user's first name.", + "type": "string" + }, + "lastName": { + "description": "The user's last name.", + "type": "string" + }, + "fullName": { + "description": "The user's full name.", + "type": "string" + }, + "username": { + "description": "The user's username.", + "type": "string" + }, + "isPreApprovedRequester": { + "description": "A value indicating whether the user is a pre-approved requester.", + "type": "boolean" + } + } + }, + "EmergencyAccessProfileChangeLog": { + "description": "Represents a change log for an EA profile.", + "type": "object", + "properties": { + "eventType": { + "description": "Event type.\r\nErpMaestro.ArmServices.Common.Models.EmergencyAccess.EmergencyAccessProfileChangeLogEventTypes", + "type": "string" + }, + "propertyName": { + "description": "Name of a changed property.", + "type": "string" + }, + "oldPropertyValues": { + "description": "Old values.", + "type": "string" + }, + "newPropertyValues": { + "description": "New values.", + "type": "string" + }, + "timestampUtc": { + "format": "date-time", + "description": "Time (UTC) when the propery was changed.", + "type": "string" + }, + "userName": { + "description": "A user who changed the property.", + "type": "string" + }, + "emergencyAccessProfileId": { + "description": "Id of the updated EA profile.", + "type": "string" + }, + "accountId": { + "description": "Account Id", + "type": "string" + }, + "customerId": { + "description": "Customer Id", + "type": "string" + } + } + }, + "EmergencyAccessRequestSummaryModel": { + "description": "Represents the summary model for an EAM request.", + "required": [ + "id", + "profileId", + "requesterUserId", + "reason", + "transactionRequested", + "startDate", + "timeZoneId", + "duration" + ], + "type": "object", + "properties": { + "state": { + "$ref": "#/components/schemas/EmergencyAccessRequestState" + }, + "displayState": { + "description": "Represents the description of the state.\r\nThis is needed to allow for OData filtering since OData\r\ndoes not support enum types at the moment.", + "type": "string" + }, + "profileName": { + "description": "The name of the profile assigned to the current request.", + "type": "string" + }, + "profileDescription": { + "description": "The description of the profile assigned to the current request.", + "type": "string" + }, + "requesterUsername": { + "description": "The username of the user assigned as a requester.", + "type": "string" + }, + "requesterName": { + "description": "The name of the user assigned as a requester.", + "type": "string" + }, + "requestedDate": { + "format": "date-time", + "description": "The date of the request.", + "type": "string" + }, + "roleNames": { + "description": "A collection of role names for the current request.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "displayRoleNames": { + "description": "The display property for the role names of the request.\r\nThis is needed to allow for OData filtering since OData\r\ndoes not support array types at the moment.", + "type": "string" + }, + "timeRemaining": { + "$ref": "#/components/schemas/DurationModel" + }, + "actions": { + "description": "Represents the available actions for the current request state.\r\nAlso based on user permissions.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessActions" + } + }, + "history": { + "description": "Represents the current request history.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RequestActivity" + } + }, + "isAdmin": { + "description": "A value indicating whether the user is an admin.", + "type": "boolean" + }, + "isOwner": { + "description": "A value indicating whether the user is an owner for the current request.", + "type": "boolean" + }, + "isRequester": { + "description": "A value indicating whether the user is the requester for the current request.", + "type": "boolean" + }, + "isApprover": { + "description": "A value indicating whether the user is an approver for the current request.", + "type": "boolean" + }, + "isReviewer": { + "description": "A value indicating whether the user is a reviewer for the current request.", + "type": "boolean" + }, + "provisionedDate": { + "format": "date-time", + "description": "The date request was provisioned", + "type": "string" + }, + "approvalDetails": { + "$ref": "#/components/schemas/RequestActivity" + }, + "rejectionDetails": { + "$ref": "#/components/schemas/RequestActivity" + }, + "hasDownloadLink": { + "description": "A flag used to determine if the response contains a downloaded link.\r\nThis is used for decisions if the link should be displayed to the user.", + "type": "boolean" + }, + "approvers": { + "description": "A collection of users that are approvers for this request.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessUserModel" + } + }, + "displayApproverNames": { + "description": "The display property for the approvers names.\r\nThis is needed to allow for OData filtering since OData\r\ndoes not support array types at the moment.", + "type": "string" + }, + "reviewers": { + "description": "A collection of users that are reviewers for this request.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessUserModel" + } + }, + "displayReviewerNames": { + "description": "The display property for the reviewers names.\r\nThis is needed to allow for OData filtering since OData\r\ndoes not support array types at the moment.", + "type": "string" + }, + "comment": { + "description": "Provides the optional comments of the request which is available when the activity state is \"created\".", + "type": "string", + "readOnly": true + }, + "eamRequestCommentCount": { + "format": "int32", + "description": "Number of EAM Request Comments of the EAM Request", + "type": "integer" + }, + "id": { + "format": "uuid", + "description": "The id of the EAM request.", + "type": "string" + }, + "displayId": { + "description": "The display property for the id of the request.\r\nThis is needed to allow for OData filtering since OData\r\ndoes not support Guid types at the moment.", + "type": "string" + }, + "profileId": { + "format": "uuid", + "description": "The id of the selected EAM profile.", + "type": "string" + }, + "requesterUserId": { + "format": "uuid", + "description": "The id of the user making the request.", + "type": "string" + }, + "reason": { + "description": "The reason for the request.", + "type": "string" + }, + "transactionRequested": { + "description": "The transaction being requested.", + "type": "string" + }, + "comments": { + "description": "Comments to be recorded for the request.", + "type": "string" + }, + "startDate": { + "format": "date-time", + "description": "The date and time the request will take effect.", + "type": "string" + }, + "timeZoneId": { + "description": "The timezone of the request.", + "type": "string" + }, + "duration": { + "$ref": "#/components/schemas/DurationModel" + }, + "displayDuration": { + "description": "The display property for the duration of the request.\r\nThis is needed to allow for OData filtering since OData\r\ndoes not support complex types at the moment.", + "type": "string" + }, + "initialState": { + "$ref": "#/components/schemas/EmergencyAccessRequestState" + } + } + }, + "RequestActivity": { + "type": "object", + "properties": { + "timeStamp": { + "format": "date-time", + "type": "string" + }, + "activity": { + "type": "string" + }, + "userName": { + "type": "string" + }, + "description": { + "type": "string" + }, + "fullName": { + "type": "string" + } + } + }, + "ProfileRequestsPerMonth": { + "description": "Represents the number of requests per month for a single profile.", + "type": "object", + "properties": { + "profileId": { + "format": "uuid", + "description": "The id of the profile.", + "type": "string" + }, + "profileName": { + "description": "The name of the profile.", + "type": "string" + }, + "requests": { + "description": "A collection of request counts by month.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RequestsPerMonth" + } + } + } + }, + "RequestsPerMonth": { + "description": "Represents the request count per month.", + "type": "object", + "properties": { + "month": { + "description": "Represents the month of the requests.", + "type": "string" + }, + "count": { + "format": "int32", + "description": "Represent how many requests in the given month.", + "type": "integer" + } + } + }, + "ProfileRequestsPerUser": { + "description": "Represents the number of requests per profile per user.", + "type": "object", + "properties": { + "username": { + "description": "The user's username.", + "type": "string" + }, + "profiles": { + "description": "A collection of profiles with request counts.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RequestsPerProfile" + } + } + } + }, + "RequestsPerProfile": { + "description": "Represents a profile and its request count.", + "type": "object", + "properties": { + "profileId": { + "format": "uuid", + "description": "The id of the profile.", + "type": "string" + }, + "profileName": { + "description": "The name of the profile.", + "type": "string" + }, + "requests": { + "format": "int32", + "description": "The request count.", + "type": "integer" + } + } + }, + "AutoAttachmentRequest": { + "description": "The model of the auto-attachment request.", + "required": [ + "eamRequestId", + "username" + ], + "type": "object", + "properties": { + "accountId": { + "format": "int32", + "description": "The id of the account under which the request is made.", + "type": "integer" + }, + "eamRequestId": { + "format": "uuid", + "description": "The id of the EAM request to apply the auto-attachment.", + "type": "string" + }, + "username": { + "description": "The username of the user making the request.", + "type": "string" + } + } + }, + "SaveErpSystemBlacklistItemsModel": { + "description": "Model used to save ERP System Blacklist Items.", + "type": "object", + "properties": { + "erpSystemId": { + "format": "int32", + "description": "The id of the target ERP System.", + "type": "integer" + }, + "erpSystemBlacklistType": { + "$ref": "#/components/schemas/ErpSystemBlacklistType" + }, + "itemNames": { + "description": "The names of the items.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "ErpSystemBlacklistType": { + "enum": [ + "role", + "user" + ], + "type": "string" + }, + "ErpSystemBlacklistItem": { + "type": "object", + "properties": { + "erpSystemBlacklistItemId": { + "format": "uuid", + "type": "string" + }, + "blacklistType": { + "$ref": "#/components/schemas/ErpSystemBlacklistType" + }, + "itemName": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "erpSystemId": { + "format": "int32", + "type": "integer" + }, + "erpSystem": { + "$ref": "#/components/schemas/ErpSystem" + }, + "key": { + "format": "uuid", + "type": "string", + "readOnly": true + } + } + }, + "ErpSystem": { + "type": "object", + "properties": { + "id": { + "format": "int32", + "type": "integer" + }, + "name": { + "type": "string" + }, + "accountId": { + "format": "int32", + "type": "integer" + }, + "softDeleted": { + "type": "boolean" + }, + "updatedBy": { + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "erpProductVersion": { + "type": "string" + }, + "serverAddress": { + "type": "string" + }, + "instanceName": { + "type": "string" + }, + "clientNumber": { + "type": "string" + }, + "systemNumber": { + "type": "string" + }, + "eamLogCollectionDelay": { + "format": "int32", + "type": "integer" + }, + "timeZoneId": { + "type": "string" + }, + "sapDateFormat": { + "$ref": "#/components/schemas/SapDateFormat" + }, + "sapLanguageCode": { + "type": "string" + }, + "includeUserAddr": { + "type": "boolean" + }, + "autoRefreshSapInfoAfterSecurityExtract": { + "type": "boolean" + }, + "isCuaEnabled": { + "type": "boolean" + }, + "cuaChildName": { + "type": "string" + }, + "cuaParentHost": { + "type": "string" + }, + "cuaParentClientNumber": { + "type": "string" + }, + "cuaParentSystemNumber": { + "type": "string" + } + } + }, + "SapDateFormat": { + "enum": [ + "undefined", + "yMD", + "yDM", + "mDY", + "dMY" + ], + "type": "string" + }, + "ErpUser": { + "description": "Represents user of ERP system.", + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "Identifier of the user.", + "type": "string" + }, + "username": { + "description": "Name of the user.", + "type": "string" + }, + "firstName": { + "description": "First name of the user.", + "type": "string" + }, + "lastName": { + "description": "Last name of the user.", + "type": "string" + }, + "fullName": { + "description": "Full name of the user.", + "type": "string" + }, + "email": { + "description": "Email of the user.", + "type": "string" + }, + "department": { + "description": "Department of the user.", + "type": "string" + }, + "costCenter": { + "description": "Cost Center of the user.", + "type": "string" + }, + "isActive": { + "description": "Determines if user is active.", + "type": "boolean" + } + } + }, + "RolesSearchParameters": { + "description": "Represents model for search filters related to roles.", + "type": "object", + "properties": { + "excludeUserNames": { + "description": "Collection of user names. The roles assigned to these users will be excluded from the result set.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "description": "Search string, that will be used to filter results.", + "type": "string" + }, + "bulkSearch": { + "description": "Bulk search string. Basically it's set of values separated by any delimiter.", + "type": "string" + } + } + }, + "ErpRole": { + "description": "Represents role of ERP system.", + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "Identifier of the role.", + "type": "string" + }, + "name": { + "description": "Name of the role.", + "type": "string" + }, + "description": { + "description": "Description of the role.", + "type": "string" + }, + "isActive": { + "description": "Determines if role is active.", + "type": "boolean" + } + } + }, + "UserRolesSearchParameters": { + "description": "Represents search parameters related to user roles.", + "type": "object", + "properties": { + "userNames": { + "description": "Names of users to include.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "excludeInactiveRoles": { + "description": "Determines if inactive roles should be excluded.", + "type": "boolean" + } + } + }, + "ErpUserRole": { + "description": "Represents user role.", + "type": "object", + "properties": { + "userName": { + "description": "Name of ERP user.", + "type": "string" + }, + "roleName": { + "description": "Name of ERP role.", + "type": "string" + }, + "roleDescription": { + "description": "Description of ERP role.", + "type": "string" + } + } + }, + "ErpSystemModel": { + "description": "Represents an ERP system in Access Risk Management. Doesn't contain sensitive information.", + "type": "object", + "properties": { + "id": { + "format": "int32", + "description": "The id of the ERP system.", + "type": "integer" + }, + "name": { + "description": "The name of the ERP system.", + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/ErpSystemType" + }, + "accountId": { + "format": "int32", + "description": "Represents the id of the legacy account.", + "type": "integer" + }, + "customerId": { + "format": "uuid", + "description": "Represents the id of the Gaia customer account.", + "type": "string" + }, + "softDeleted": { + "description": "Deletion flag.", + "type": "boolean" + }, + "updatedBy": { + "description": "The username of the user that last updated the entity.", + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "description": "The date/time value when the entity was last updated.", + "type": "string" + }, + "createdBy": { + "description": "The username of the user that created the entity.", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "description": "The date/time value when the entity was created.", + "type": "string" + }, + "connectionInfo": { + "$ref": "#/components/schemas/INonSensitiveConnectionInformation" + } + } + }, + "INonSensitiveConnectionInformation": { + "description": "Marker interface. ERP specific models must inherit it to return non sensitive connection information", + "type": "object", + "properties": {} + }, + "ImportSapUsersResult": { + "type": "object", + "properties": { + "lineIndex": { + "format": "int32", + "type": "integer" + }, + "result": { + "type": "string" + }, + "propertyName": { + "type": "string" + }, + "sheetName": { + "type": "string" + } + } + }, + "ImportTypeLookup": { + "enum": [ + "uploadedFile", + "importedResult" + ], + "type": "string" + }, + "Language": { + "type": "object", + "properties": { + "sapLanguageId": { + "format": "int32", + "type": "integer" + }, + "sapLanguageCode": { + "type": "string" + }, + "sapLanguageName": { + "type": "string" + } + } + }, + "Timezone": { + "type": "object", + "properties": { + "countryName": { + "type": "string" + }, + "countryCode": { + "type": "string" + } + } + }, + "UserAssignedAccount": { + "type": "object", + "properties": { + "accountID": { + "format": "int32", + "type": "integer" + }, + "businessName": { + "type": "string" + } + } + }, + "EmergencyAccessRequestOptionsModel": { + "description": "Represents the configuration options for EAM Requests", + "type": "object", + "properties": { + "maxEamRequestCommentFileSize": { + "format": "int32", + "description": "The max allowed size in bytes of uploaded files", + "type": "integer" + }, + "allowedEamRequestCommentFileExtensions": { + "description": "The allowed file extensions to be attached to comments", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "UserWhatIfRealTimeRequest": { + "description": "Model for a single user what-if realtime analysis request.", + "required": [ + "systemId", + "username" + ], + "type": "object", + "properties": { + "systemId": { + "format": "int32", + "description": "Reference to the system id that the analysis is running against.", + "type": "integer" + }, + "username": { + "description": "Username to analyze the role changes against.", + "maxLength": 255, + "type": "string" + }, + "rolesToAdd": { + "description": "List of roles to add for what-if analysis", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rolesToRemove": { + "description": "List of roles to remove for what-if analysis", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "groupsToAdd": { + "description": "List of roles to add for what-if analysis", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "groupsToRemove": { + "description": "List of roles to remove for what-if analysis", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "analysisId": { + "format": "int32", + "description": "Represents the analysis unique identifier.", + "type": "integer" + } + } + }, + "IActionResult": { + "type": "object", + "properties": {} + }, + "TaskStatus": { + "enum": [ + "created", + "waitingForActivation", + "waitingToRun", + "running", + "waitingForChildrenToComplete", + "ranToCompletion", + "canceled", + "faulted" + ], + "type": "string" + }, + "TaskCreationOptions": { + "enum": [ + "none", + "preferFairness", + "longRunning", + "attachedToParent", + "denyChildAttach", + "hideScheduler", + "runContinuationsAsynchronously" + ], + "type": "string" + }, + "ReportType": { + "enum": [ + "userSummary", + "riskSummary", + "riskLevelDetails", + "userTCodeLevelRiskDetails", + "authorizationObjectLevelHitDetails", + "userRemediations", + "roleSummary", + "executionSummaryMonthly", + "executionSummary", + "roleRemediations", + "roleMemberTCodeExecutions", + "roleTCodeLevelRiskDetails", + "rolesRankedByRisk", + "riskDescriptions", + "businessFunctionDescriptions", + "dailyChangeDocumentSummary", + "mitigatingControls", + "roleDetails", + "roleInherentRiskDetails", + "userPermissionLevelDetails", + "roleAuthorizationObjectLevelHitDetails" + ], + "type": "string" + }, + "ReportLayout": { + "description": "Represents a response to a call to the reports layout endpoint.", + "type": "object", + "properties": { + "links": { + "description": "Represents a collection of link keys for the report in question.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "columns": { + "description": "Represents a collection of ErpMaestro.ArmServices.Common.Models.ReportFieldConfig values containing the column configuration for the specified report type.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportFieldConfig" + } + }, + "filters": { + "description": "Represents a collection of ErpMaestro.ArmServices.Common.Models.Reports.ReportFilter values containing which filters are available to be used for this report.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportFilter" + } + } + } + }, + "ReportFieldConfig": { + "description": "Represents the field configuration for a report's column.", + "type": "object", + "properties": { + "fieldId": { + "description": "Represents the unique identifier of the field.\r\nUsually the name of the column.", + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/ReportFieldDataType" + }, + "enabled": { + "description": "Represents whether the report column is enabled or not.", + "type": "boolean" + }, + "width": { + "format": "int32", + "description": "Represents the width of the report column.", + "type": "integer" + } + } + }, + "ReportFilter": { + "description": "Represents the definition of a report filter.", + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/ReportFilterType" + }, + "fieldId": { + "description": "Represents the field to be used for filtering.", + "type": "string" + }, + "lookupFieldId": { + "description": "Represents the field to be used for filtering on the lookup side.", + "type": "string" + } + } + }, + "ReportFieldDataType": { + "enum": [ + "boolean", + "date", + "numeric", + "string" + ], + "type": "string" + }, + "ReportFilterType": { + "enum": [ + "undefined", + "users", + "roles", + "tcodes", + "businessProcesses", + "risks" + ], + "type": "string" + }, + "UserSummary": { + "description": "Represents a user summary record.", + "type": "object", + "properties": { + "userId": { + "description": "The user id.", + "type": "string" + }, + "username": { + "description": "The user name.", + "type": "string" + }, + "userGroup": { + "description": "The group the user belongs to.", + "type": "string" + }, + "numberOfAssignedRoles": { + "format": "int32", + "description": "The number of assigned roles.", + "type": "integer" + }, + "numberOfAssignedDirectProfiles": { + "format": "int32", + "description": "The number of assigned direct profiles.", + "type": "integer" + }, + "numberOfFullyExecutedCriticalOrHighRisks": { + "format": "int32", + "description": "The number of fully-executed critical or high risks.", + "type": "integer" + }, + "numberOfFullyExecutedOtherRisks": { + "format": "int32", + "description": "The number of other fully-executed risks.", + "type": "integer" + }, + "numberOfNotFullyExecutedCriticalOrHighRisks": { + "format": "int32", + "description": "The number of not fully-executed critical or high risks.", + "type": "integer" + }, + "numberOfNotFullyExecutedOtherRisks": { + "format": "int32", + "description": "The number of other not fully-executed risks.", + "type": "integer" + }, + "totalNumberOfRisks": { + "format": "int32", + "description": "The total number of risks.", + "type": "integer" + }, + "totalNumberOfUnmitigatedRisks": { + "format": "int32", + "description": "The total number of unmitigated risks.", + "type": "integer" + }, + "totalRecommendationCount": { + "format": "int32", + "description": "The total count of recommendations.", + "type": "integer" + }, + "highImpactRecommendationCount": { + "format": "int32", + "description": "The count of high-impact recommendations.", + "type": "integer" + }, + "highestLevelOfFullyExecutedUnmitigatedRisk": { + "description": "The highest level of fully-executed unmitigated risks.", + "type": "string" + }, + "highestLevelOfUnmitigatedRisk": { + "description": "The highest level of unmitigated risks.", + "type": "string" + } + } + }, + "RiskSummaryModel": { + "type": "object", + "properties": { + "riskRating": { + "type": "string" + }, + "ruleCode": { + "type": "string" + }, + "ruleName": { + "type": "string" + }, + "ruleType": { + "type": "string" + }, + "ruleBusinessProcess": { + "type": "string" + }, + "notExecuted": { + "format": "int32", + "type": "integer" + }, + "partiallyExecuted": { + "format": "int32", + "type": "integer" + }, + "fullyExecuted": { + "format": "int32", + "type": "integer" + }, + "sensitiveAccess": { + "format": "int32", + "type": "integer" + }, + "grandTotal": { + "format": "int32", + "type": "integer" + }, + "fullyExecutedRatio": { + "format": "double", + "type": "number" + } + } + }, + "RiskLevelDetails": { + "type": "object", + "properties": { + "ruleCode": { + "type": "string" + }, + "ruleName": { + "type": "string" + }, + "riskRating": { + "type": "string" + }, + "ruleType": { + "type": "string" + }, + "ruleBusinessProcess": { + "type": "string" + }, + "userId": { + "type": "string" + }, + "fullName": { + "type": "string" + }, + "userGroup": { + "type": "string" + }, + "allExecutionsCount": { + "type": "string" + }, + "stadUtilizationBucket": { + "type": "string" + }, + "executionsWithDataModificationCount": { + "type": "string" + }, + "cdhdrposUtilizationBucket": { + "type": "string" + }, + "mitigatingControls": { + "type": "string" + }, + "businessFunctions": { + "type": "string", + "readOnly": true + }, + "riskDescription": { + "type": "string" + }, + "isMitigated": { + "type": "boolean" + }, + "userName": { + "type": "string" + }, + "riskName": { + "type": "string" + } + } + }, + "UserConflictMatrixModel": { + "type": "object", + "properties": { + "rulebookName": { + "type": "string" + }, + "ruleCode": { + "type": "string" + }, + "ruleName": { + "type": "string" + }, + "riskRating": { + "type": "string" + }, + "ruleType": { + "type": "string" + }, + "ruleBusinessProcess": { + "type": "string" + }, + "businessFunctionCode": { + "type": "string" + }, + "businessFunctionName": { + "type": "string" + }, + "businessFunctionDescription": { + "type": "string" + }, + "userId": { + "type": "string" + }, + "fullName": { + "type": "string" + }, + "userGroup": { + "type": "string" + }, + "mitigatingControls": { + "type": "string" + }, + "assignedFrom": { + "type": "string" + }, + "roleProfile": { + "type": "string" + }, + "tcode": { + "type": "string" + }, + "tcodeDescription": { + "type": "string" + }, + "roleType": { + "type": "string" + }, + "stadUtilizationCount": { + "format": "int32", + "type": "integer" + }, + "cdhdrposUtilizationCount": { + "format": "int32", + "type": "integer" + }, + "roleHasInherentConflicts": { + "type": "boolean" + }, + "isMitigated": { + "type": "boolean", + "readOnly": true + } + } + }, + "BusinessFunctionHitModel": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "businessFunctionCode": { + "type": "string" + }, + "assignedFromRoleName": { + "type": "string" + }, + "assignedFromProfileName": { + "type": "string" + }, + "tcode": { + "type": "string" + }, + "sapAuthorizationName": { + "type": "string" + }, + "sapAuthorizationObject": { + "type": "string" + }, + "sapAuthorizationField": { + "type": "string" + }, + "sapAuthorizationValueFrom": { + "type": "string" + }, + "sapAuthorizationValueTo": { + "type": "string" + }, + "ruleAuthorizationObject": { + "type": "string" + }, + "ruleAuthorizationField": { + "type": "string" + }, + "ruleAuthorizationValueFrom": { + "type": "string" + }, + "ruleAuthorizationValueTo": { + "type": "string" + }, + "roleType": { + "type": "string" + }, + "roleIsDerived": { + "type": "boolean" + }, + "derivedParentRole": { + "type": "string" + }, + "parentProfile": { + "type": "string" + }, + "parentRoleName": { + "type": "string" + } + } + }, + "UserRecommendationModel": { + "type": "object", + "properties": { + "userId": { + "type": "string" + }, + "userName": { + "type": "string" + }, + "userGroup": { + "type": "string" + }, + "role": { + "type": "string" + }, + "recommendation": { + "type": "string" + }, + "difficulty": { + "type": "string" + }, + "impact": { + "type": "string" + }, + "highOrCriticalRiskCount": { + "format": "int32", + "type": "integer" + }, + "otherRiskCount": { + "format": "int32", + "type": "integer" + }, + "totalRiskCount": { + "format": "int32", + "type": "integer" + } + } + }, + "RoleSummary": { + "type": "object", + "properties": { + "roleName": { + "type": "string" + }, + "roleType": { + "type": "string" + }, + "numberOfUsersAssigned": { + "format": "int32", + "type": "integer" + }, + "numberOfNotUsedSensitiveTcodes": { + "format": "int32", + "type": "integer" + }, + "numberOfNotUsedNonSensitiveTcodes": { + "format": "int32", + "type": "integer" + }, + "numberOfUsersNotUsingRole": { + "format": "int32", + "type": "integer" + }, + "numberOfCriticalAndHighRisks": { + "format": "int32", + "type": "integer" + }, + "numberOfOtherRisks": { + "format": "int32", + "type": "integer" + }, + "numberOfChildren": { + "format": "int32", + "type": "integer" + }, + "derivedParent": { + "type": "string" + }, + "numberOfCompositeRoleMembership": { + "format": "int32", + "type": "integer" + }, + "numberOfDerivedChildren": { + "format": "int32", + "type": "integer" + }, + "numberOfFullyExecutedCriticalOrHighRisks": { + "format": "int32", + "type": "integer" + }, + "numberOfFullyExecutedOtherRisks": { + "format": "int32", + "type": "integer" + }, + "numberOfNotFullyExecutedCriticalHighRisks": { + "format": "int32", + "type": "integer" + }, + "numberOfNotFullyExecutedOtherRisks": { + "format": "int32", + "type": "integer" + }, + "highestLevelOfFullyExecutedRisks": { + "type": "string" + }, + "highestLevelOfRisks": { + "type": "string" + }, + "highImpactRecommendationCount": { + "format": "int32", + "type": "integer" + }, + "totalRecommendationCount": { + "format": "int32", + "type": "integer" + }, + "jobId": { + "format": "int32", + "type": "integer" + } + } + }, + "UtilizationSummaryMonthly": { + "type": "object", + "properties": { + "userId": { + "type": "string" + }, + "tcode": { + "type": "string" + }, + "tcodeDescription": { + "type": "string" + }, + "summaryDate": { + "type": "string" + }, + "stadUsageCount": { + "format": "int32", + "type": "integer" + }, + "cdHdrPosUsageCount": { + "format": "int32", + "type": "integer" + } + } + }, + "UtilizationSummary": { + "type": "object", + "properties": { + "userId": { + "type": "string" + }, + "tcode": { + "type": "string" + }, + "tcodeDescription": { + "type": "string" + }, + "stadUsageCount": { + "format": "int32", + "type": "integer" + }, + "cdHdrPosUsageCount": { + "format": "int32", + "type": "integer" + } + } + }, + "RoleRecommendationModel": { + "type": "object", + "properties": { + "roleName": { + "type": "string" + }, + "roleType": { + "type": "string" + }, + "recommendation": { + "type": "string" + }, + "itemToRemove": { + "type": "string" + }, + "itemDescription": { + "type": "string" + }, + "difficulty": { + "type": "string" + }, + "impact": { + "type": "string" + }, + "highOrCriticalRiskCount": { + "format": "int32", + "type": "integer" + }, + "totalRiskCount": { + "format": "int32", + "type": "integer" + }, + "impactedUserCount": { + "format": "int32", + "type": "integer" + }, + "highOrCriticalRisks": { + "type": "string" + }, + "allRisks": { + "type": "string" + } + } + }, + "SecurityRolesReport": { + "type": "object", + "properties": { + "userId": { + "type": "string" + }, + "role": { + "type": "string" + }, + "tcode": { + "type": "string" + }, + "description": { + "type": "string" + }, + "stadUtilizationCount": { + "format": "int32", + "type": "integer" + }, + "cdhdrposUtilizationCount": { + "format": "int32", + "type": "integer" + }, + "profile": { + "type": "string" + }, + "fullName": { + "type": "string" + }, + "parent": { + "type": "string" + }, + "low": { + "type": "string" + }, + "high": { + "type": "string" + } + } + }, + "RoleConflictMatrixModel": { + "type": "object", + "properties": { + "rulebookName": { + "type": "string" + }, + "ruleCode": { + "type": "string" + }, + "ruleName": { + "type": "string" + }, + "riskRating": { + "type": "string" + }, + "ruleType": { + "type": "string" + }, + "ruleBusinessProcess": { + "type": "string" + }, + "businessFunctionCode": { + "type": "string" + }, + "businessFunctionName": { + "type": "string" + }, + "businessFunctionDescription": { + "type": "string" + }, + "businessFunctionBusinessProcess": { + "type": "string" + }, + "roleName": { + "type": "string" + }, + "assignedFrom": { + "type": "string" + }, + "roleProfile": { + "type": "string" + }, + "roleProfileDescription": { + "type": "string" + }, + "tcode": { + "type": "string" + }, + "tcodeDescription": { + "type": "string" + }, + "roleType": { + "type": "string" + }, + "stadUtilizationCount": { + "format": "int32", + "type": "integer" + }, + "cdhdrposUtilizationCount": { + "format": "int32", + "type": "integer" + }, + "stadUtilizationBucket": { + "type": "string" + }, + "cdhdrposUtilizationBucket": { + "type": "string" + } + } + }, + "RiskiestRoleSummaryModel": { + "type": "object", + "properties": { + "roleName": { + "type": "string" + }, + "roleType": { + "type": "string" + }, + "critical": { + "format": "int32", + "type": "integer" + }, + "high": { + "format": "int32", + "type": "integer" + }, + "other": { + "format": "int32", + "type": "integer" + }, + "roleRiskRank": { + "format": "int32", + "type": "integer" + }, + "activeUserCount": { + "format": "int32", + "type": "integer" + }, + "userWeightedRiskRank": { + "format": "int32", + "type": "integer" + } + } + }, + "DailyCdhdrPosUtilizationSummaryModel": { + "description": "Represents the details of daily change document utilization.", + "type": "object", + "properties": { + "utilizationDate": { + "format": "date-time", + "description": "Represents the utilization date.", + "type": "string" + }, + "utilizationCount": { + "format": "int32", + "description": "Represents the utilization count.", + "type": "integer" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the ERP system.", + "type": "integer" + }, + "jobId": { + "format": "int32", + "description": "Represents the id of the job.", + "type": "integer" + } + } + }, + "RiskDescriptionModel": { + "type": "object", + "properties": { + "ruleCode": { + "type": "string" + }, + "ruleName": { + "type": "string" + }, + "riskRating": { + "type": "string" + }, + "description": { + "type": "string" + }, + "jobId": { + "format": "int32", + "type": "integer" + } + } + }, + "BusinessFunctionDescriptionModel": { + "description": "Represents the business function description.", + "type": "object", + "properties": { + "businessFunctionCode": { + "description": "Represents the business function code.", + "type": "string" + }, + "businessFunctionName": { + "description": "Represents the business function name.", + "type": "string" + }, + "description": { + "description": "Represents the business function description.", + "type": "string" + }, + "jobId": { + "format": "int32", + "description": "Represents the id of the job.", + "type": "integer" + } + } + }, + "MitigatingControlModel": { + "description": "Represents the mitigation control entity.", + "type": "object", + "properties": { + "mitigatingControlCode": { + "description": "Represents the mitigation control code.", + "type": "string" + }, + "mitigatingControlName": { + "description": "Represents the mitigation control name.", + "type": "string" + }, + "mitigatingControlType": { + "description": "Represents the mitigation control type.", + "type": "string" + }, + "mitigatingControlFrequency": { + "description": "Represents the mitigation control frequency.", + "type": "string" + }, + "mitigatingControlObjective": { + "description": "Represents the mitigation control objective.", + "type": "string" + }, + "mitigatingControlDescription": { + "description": "Represents the mitigation control description.", + "type": "string" + }, + "jobId": { + "format": "int32", + "description": "Represents the job id of the mitigation control.", + "type": "integer" + } + } + }, + "ExportReportRequest": { + "type": "object", + "properties": { + "jobId": { + "format": "int32", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + }, + "reportType": { + "$ref": "#/components/schemas/ReportType" + }, + "exportType": { + "$ref": "#/components/schemas/ReportExportType" + }, + "search": { + "type": "string" + }, + "usersFilter": { + "type": "string" + }, + "risksFilter": { + "type": "string" + }, + "rolesFilter": { + "type": "string" + }, + "tcodesFilter": { + "type": "string" + }, + "businessFunctionsFilter": { + "type": "string" + }, + "utilizationType": { + "$ref": "#/components/schemas/UtilizationType" + }, + "filteredRequest": { + "$ref": "#/components/schemas/FilteredReportRequest" + }, + "erpSystemType": { + "$ref": "#/components/schemas/ErpSystemType" + }, + "includedColumns": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "ReportExportType": { + "enum": [ + "excel", + "cSV" + ], + "type": "string" + }, + "FilteredReportRequest": { + "description": "Represents a model for report filters.", + "type": "object", + "properties": { + "customerId": { + "format": "uuid", + "description": "Identifier of the customer.", + "type": "string" + }, + "userId": { + "format": "uuid", + "description": "Identifier of the user.", + "type": "string" + }, + "selectedAccessContexts": { + "description": "Selected filters.", + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + }, + "RoleDetails": { + "description": "Provides detail information about a role.", + "type": "object", + "properties": { + "system": { + "description": "Represents the name of the system instance analyzed.", + "type": "string" + }, + "roleName": { + "description": "Represents the name of the role analyzed.", + "type": "string" + }, + "permission": { + "description": "Represents the technical StringValue field in the db of the permission identified as a function hit.", + "type": "string" + } + } + }, + "RoleInherentRiskDetails": { + "description": "Provides line item details of permission hits where all sides of the conflict exist within the same role.", + "type": "object", + "properties": { + "system": { + "description": "Represents the name of the system instance analyzed.", + "type": "string" + }, + "roleName": { + "description": "Represents the name of the role analyzed.", + "type": "string" + }, + "riskCode": { + "description": "Represents the unique identifier of the risk from the rulebook used for analysis.", + "type": "string" + }, + "riskName": { + "description": "Represents the descriptive name of the risk from the rulebook used for analysis.", + "type": "string" + }, + "riskRating": { + "description": "Represents the level of risk ascribed to the rule from the rulebook used for analysis. Values of this are the following: Informational, Low, Medium, High, Critical.", + "type": "string" + }, + "businessFunctionCode": { + "description": "Represents the unique identifier of one function of a risk.", + "type": "string" + }, + "businessFunctionName": { + "description": "Represents the descriptive name of one function of a risk.", + "type": "string" + }, + "businessFunctionDescription": { + "description": "Represents the descriptive text of one function of a risk.", + "type": "string" + }, + "permission": { + "description": "Represents the permission text value as seen in the user interface.", + "type": "string" + }, + "permissionAccessType": { + "description": "Represents the access type of the permission.", + "type": "string" + }, + "businessProcess": { + "description": "Represents the rule's business process.", + "type": "string" + }, + "permissionLogic": { + "$ref": "#/components/schemas/OperationLogic" + }, + "accessLogic": { + "$ref": "#/components/schemas/OperationLogic" + } + } + }, + "OperationLogic": { + "enum": [ + "undefined", + "and", + "or" + ], + "type": "string" + }, + "UserPermissionLevelDetailsModel": { + "type": "object", + "properties": { + "userName": { + "type": "string" + }, + "riskName": { + "description": "Represents the rule name", + "type": "string" + }, + "riskRating": { + "description": "Represents the rule rating", + "type": "string" + }, + "riskType": { + "description": "Represents the rule type", + "type": "string" + }, + "riskCode": { + "description": "Represents the rule code", + "type": "string" + }, + "permission": { + "description": "Represents the technical StringValue field in the db of the permission identified as a function hit", + "type": "string" + } + } + }, + "RoleAuthorizationHitModel": { + "description": "Represents the authorization line item details for role conflict data.\r\nDisplays each authorization hit from the role with the corresponding\r\nmatch from the function permission definition in the rulebook.", + "type": "object", + "properties": { + "roleName": { + "description": "Represents the analyzed role name (AGR_NAME) risk being\r\nsummarized in the business process conflict summary.", + "type": "string" + }, + "functionCode": { + "description": "Represents the unique identifier of the function from the rulebook used for analysis.", + "type": "string" + }, + "profileName": { + "description": "Represents the SAP security authorization profile identifier.\r\nUsually generated for a role, less often assigned directly to the user.\r\nTypically uses the format T-AA111111, but can be customized to to other\r\n10-character formats such as ZCUSTOM123.", + "type": "string" + }, + "tCode": { + "description": "Represents the SAP transaction code included in the role and causing a conflict\r\nbased upon the rulebook definition. Can be any combination of letters, numerals,\r\nand special characters between 2 and 20 characters long, such as /PRO/FUGERT, BP, FB02.", + "type": "string" + }, + "roleAuthorizationName": { + "description": "Represents the SAP security authorization identifier. Typically appends a two digit\r\nnumeral to the end of the associated authorization profile ID such as T-AA11111100.", + "type": "string" + }, + "roleObject": { + "description": "Represents the SAP security authorization object included in the role and causing a conflict.\r\nTypically a 4 to 10 character identifer with underscores such as S_TCODE, F_BKPF_BUK, M_RECH_WRK.", + "type": "string" + }, + "roleAuthorizationField": { + "description": "Represents the SAP security authorization object field included in the role\r\nand causing a conflict. Typically shorter than the authorization object and\r\nusually composed of only letters, such as ACTVT, KOART, TCD, JOBACTION.", + "type": "string" + }, + "roleAuthorizationValueFrom": { + "description": "Represents the SAP security authorization field value in the role. Can be\r\neither a single fixed value (01), a wildcard (*), or a combination (GROUP1*).\r\nThis field must be populated for an authorization.", + "type": "string" + }, + "roleAuthorizationValueTo": { + "description": "Represents the SAP security authorization field value in the role. Can be either a\r\nsingle fixed value (01), a wildcard (*), or a combination (GROUP1*). This field is\r\nleft blank unless the authorization is being defined as a range. The range would be\r\nanything between the FROM value through the TO value. For example, if the FROM value\r\nis A and the TO value is C, then the authorization grants access to any valid\r\nvalues falling in that range: A, Aaaz, B, B123, C.", + "type": "string" + }, + "ruleAuthorizationObject": { + "description": "Represents the SAP security authorization object included in the rulebook\r\ndefinition and causing a conflict. Typically a 4 to 10 character identifer\r\nwith underscores such as S_TCODE, F_BKPF_BUK, M_RECH_WRK.", + "type": "string" + }, + "ruleAuthorizationField": { + "description": "Represents the SAP security authorization object field included in the rulebook\r\ndefinition and causing a conflict. Typically shorter than the authorization object\r\nand usually composed of only letters, such as ACTVT, KOART, TCD, JOBACTION.", + "type": "string" + }, + "ruleAuthorizationValueFrom": { + "description": "Represents the SAP security authorization field value from the rulebook.\r\nCan be either a single fixed value (01), a wildcard (*), or a combination (GROUP1*).\r\nThis field should be populated for a valid rulebook definition.", + "type": "string" + }, + "ruleAuthorizationValueTo": { + "description": "Represents the SAP security authorization field value from the rulebook.\r\nCan be either a single fixed value (01), a wildcard (*), or a combination (GROUP1*).\r\nThis field is left blank unless the rule is being defined with a range.\r\nThe range would be anything between the FROM value through the TO value.\r\nFor example, if the FROM value is A and the TO value is C, then the rule is\r\nlooking for any value falling in that range: A, Aaaz, B, B123, C.", + "type": "string" + }, + "roleType": { + "description": "Represents the category of the role. Possible values are Single, Composite, Derived.", + "type": "string" + }, + "roleIsDerived": { + "description": "Represents a boolean value indicating whether a role has been derived from,\r\nor created based upon, another 'parent' role. Deriving roles is useful to\r\nmaintain fewer roles. One role granting access to function A can be derived\r\nto act upon object1 vs object2. So you could have parent role Z_FUNCTION_A\r\nand derived child roles ZD_FUNCTION_A_LOCATION1 and ZD_FUNCTION_A_LOCATION2.\r\nAny changes to access to Function A would only be updated in role Z_FUNCTION_A\r\nand those changes would be automatically applied to child roles.", + "type": "boolean" + }, + "derivedParentRole": { + "description": "Represents the name (AGR_NAME) of the Parent role if RoleIsDerived = TRUE and this a child role.", + "type": "string" + }, + "parentProfile": { + "description": "Represents the name of the composite profile assigned to the user if the access\r\nis inherited indirectly through a single profile that is part of a composite profile.\r\nThis is uncommon as composite profiles are not supposed to be used any longer.", + "type": "string" + }, + "parentRoleName": { + "description": "Represents the name of the composite role assigned to the user if the access is\r\ninherited indirectly through a single role that is part of a composite role.", + "type": "string" + } + } + }, + "ErpRoleModel": { + "description": "Describes erp role that can be assigned to user.", + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "Id of erp role", + "type": "string" + }, + "accountId": { + "format": "int32", + "description": "Account Id related to the role", + "type": "integer" + }, + "systemId": { + "format": "int32", + "description": "Erp system id related to the role", + "type": "integer" + }, + "securityExtractId": { + "format": "int32", + "description": "Security extract id that contains the role", + "type": "integer" + }, + "roleName": { + "description": "Role name", + "type": "string" + }, + "description": { + "description": "Role description", + "type": "string" + }, + "refreshDescriptionFromErp": { + "description": "Indicates that refresh is required", + "type": "boolean" + }, + "roleLocationId": { + "format": "uuid", + "description": "Id of role location", + "type": "string" + }, + "roleLocation": { + "$ref": "#/components/schemas/RoleLocationModel" + }, + "location": { + "description": "Role location name", + "type": "string" + }, + "roleOwnerNames": { + "description": "Concatenation of role owner names", + "type": "string", + "readOnly": true + }, + "roleApproverNames": { + "description": "Concatenation of approver names", + "type": "string", + "readOnly": true + }, + "roleOwners": { + "description": "Role owners", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleOwnerModel" + } + }, + "roleApprovers": { + "description": "Role approvers", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpRoleApproverModel" + } + }, + "updatedBy": { + "description": "Describes who updated the role", + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "description": "Last update date", + "type": "string" + } + } + }, + "RoleLocationModel": { + "description": "Describes role location", + "type": "object", + "properties": { + "roleLocationId": { + "format": "uuid", + "description": "Role location id", + "type": "string" + }, + "roleLocationName": { + "description": "Role location name", + "type": "string" + }, + "description": { + "description": "Role location description", + "type": "string" + } + } + }, + "RoleOwnerModel": { + "description": "Describes owner of the role.", + "type": "object", + "properties": { + "roleOwnerId": { + "format": "int32", + "description": "Id of the role owner.", + "type": "integer" + }, + "roleId": { + "format": "uuid", + "description": "Role id of role that owner owns", + "type": "string" + }, + "userId": { + "format": "uuid", + "description": "User id of the owner.", + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/UserModel" + } + } + }, + "ErpRoleApproverModel": { + "description": "Describes erp role approver who validates that\r\nthe user requesting access needs that role for performing their job.", + "type": "object", + "properties": { + "id": { + "format": "int32", + "description": "Id of the role approver.", + "type": "integer" + }, + "roleId": { + "format": "uuid", + "description": "Role Id of the role approver.", + "type": "string" + }, + "userId": { + "format": "uuid", + "description": "User Id of the role approver.", + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/UserModel" + } + } + }, + "UserModel": { + "description": "Represents user in legacy system", + "type": "object", + "properties": { + "id": { + "format": "uuid", + "type": "string" + }, + "username": { + "type": "string" + }, + "fullName": { + "type": "string" + }, + "email": { + "type": "string" + } + } + }, + "CreateSapSystemRequest": { + "description": "Create model for SAP systems.", + "required": [ + "accountId", + "name", + "type", + "customerId", + "connectionInfo" + ], + "type": "object", + "properties": { + "accountId": { + "format": "int32", + "description": "The id of the account the system belongs to.", + "type": "integer" + }, + "name": { + "description": "The name of the ERP system.", + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/ErpSystemType" + }, + "customerId": { + "format": "uuid", + "description": "Represents the id of the customer account.", + "type": "string" + }, + "connectionInfo": { + "$ref": "#/components/schemas/SapConnectionInfoModel" + } + } + }, + "SapConnectionInfoModel": { + "description": "Model that represents the SAP connection information.\r\nIt implements both marker interfaces to satisfy the current implementation\r\nof IErpSystemService, but should be removed once we move the ERP systems\r\nimplementations to the agent permanently.", + "required": [ + "erpProductVersion", + "serverAddress", + "instanceName", + "clientNumber", + "systemNumber", + "eamLogCollectionDelay", + "sapDateFormat" + ], + "type": "object", + "properties": { + "erpProductVersion": { + "description": "The version of the ERP system.", + "type": "string" + }, + "serverAddress": { + "description": "The address of the server where the system is deployed.", + "type": "string" + }, + "instanceName": { + "description": "The name of the system instance.", + "type": "string" + }, + "clientNumber": { + "description": "The client number.", + "type": "string" + }, + "systemNumber": { + "description": "The number of the system.", + "type": "string" + }, + "eamLogCollectionDelay": { + "format": "int32", + "description": "The delay in hours for EAM log collections.", + "maximum": 48, + "minimum": 1, + "type": "integer" + }, + "timeZone": { + "description": "The time zone of the system.", + "type": "string" + }, + "sapDateFormat": { + "$ref": "#/components/schemas/SapDateFormat" + }, + "sapLanguageCode": { + "description": "The SAP language code to use.", + "type": "string" + }, + "includeUserAddrTable": { + "description": "A value indicating whether to include the UserAddr table.", + "type": "boolean" + }, + "autoRefreshSapInfoAfterSecurityExtract": { + "description": "A value indicating whether to refresh the SAP info after a security extract.", + "type": "boolean" + }, + "isCuaEnabled": { + "description": "A value indicating whether Cua is enabled.", + "type": "boolean" + }, + "cuaChildName": { + "description": "The name of the Cua child.", + "type": "string" + }, + "cuaParentHost": { + "description": "The parent host of the Cua.", + "type": "string" + }, + "cuaParentClientNumber": { + "description": "The client number of the Cua parent.", + "type": "string" + }, + "cuaParentSystemNumber": { + "description": "The system number of the Cua parent.", + "type": "string" + } + } + }, + "UpdateSapSystemRequest": { + "description": "An object model for SAP system updates.", + "required": [ + "accountId", + "id", + "name" + ], + "type": "object", + "properties": { + "accountId": { + "format": "int32", + "description": "The id of the account the system belongs to.", + "type": "integer" + }, + "createdBy": { + "description": "The username of the user that created the entity.", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "description": "The date/time value when the entity was created.", + "type": "string" + }, + "updatedBy": { + "description": "The username of the user that last updated the entity.", + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "description": "The date/time value when the entity was last updated.", + "type": "string" + }, + "id": { + "format": "int32", + "description": "The id of the system to update", + "type": "integer" + }, + "name": { + "description": "The name of the ERP system.", + "type": "string" + }, + "connectionInfo": { + "$ref": "#/components/schemas/SapConnectionInfoModel" + } + } + }, + "LoadExtractInfoModel": { + "description": "Represents parameters for Load Extract Info job.", + "required": [ + "fileUrl" + ], + "type": "object", + "properties": { + "fileUrl": { + "description": "Url of the file on storage.", + "type": "string" + } + } + }, + "SfConnectionModel": { + "required": [ + "companyId", + "server", + "login", + "password", + "locale" + ], + "type": "object", + "properties": { + "companyId": { + "type": "string" + }, + "server": { + "type": "string" + }, + "login": { + "type": "string" + }, + "password": { + "type": "string" + }, + "locale": { + "type": "string" + } + } + }, + "ConnectionValidationResultModel": { + "description": "Represents connection information validation results", + "type": "object", + "properties": { + "valid": { + "description": "Flags if overall validation was successful", + "type": "boolean" + }, + "errors": { + "description": "List of errors", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "EamAdminSummaryEmailSettingsModel": { + "description": "Model contains settings for sending EAM Awaiting Review Reminders", + "required": [ + "enabled" + ], + "type": "object", + "properties": { + "enabled": { + "description": "Enabled/Disabled", + "type": "boolean" + }, + "frequency": { + "$ref": "#/components/schemas/EmailSendingFrequency" + }, + "date": { + "$ref": "#/components/schemas/EmailSendingDate" + }, + "time": { + "description": "Time of the day 00:00", + "type": "string" + }, + "timezone": { + "description": "Local timezone, id of timezone in the IANA", + "type": "string" + }, + "recurrenceJobId": { + "format": "uuid", + "description": "Unique identifier of the job which is used for triggering email send\r\nNull means that job is not created yet", + "type": "string" + } + } + }, + "EmailSendingFrequency": { + "enum": [ + "daily", + "weekly", + "monthly" + ], + "type": "string" + }, + "EmailSendingDate": { + "enum": [ + "everyWorkday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday", + "sunday", + "firstOfMonth", + "fifteenthOfMonth", + "lastOfMonth" + ], + "type": "string" + }, + "Task_IActionResult_": { + "type": "object", + "properties": { + "result": { + "$ref": "#/components/schemas/IActionResult" + }, + "id": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "exception": { + "type": "object", + "readOnly": true + }, + "status": { + "$ref": "#/components/schemas/TaskStatus" + }, + "isCanceled": { + "type": "boolean", + "readOnly": true + }, + "isCompleted": { + "type": "boolean", + "readOnly": true + }, + "isCompletedSuccessfully": { + "type": "boolean", + "readOnly": true + }, + "creationOptions": { + "$ref": "#/components/schemas/TaskCreationOptions" + }, + "asyncState": { + "type": "object", + "readOnly": true + }, + "isFaulted": { + "type": "boolean", + "readOnly": true + } + } + }, + "CreateErpSystemRequest_SfConnectionModel_": { + "description": "Represents data required to create new ERP system", + "required": [ + "name", + "type", + "customerId", + "connectionInfo" + ], + "type": "object", + "properties": { + "name": { + "description": "The name of the ERP system.", + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/ErpSystemType" + }, + "customerId": { + "format": "uuid", + "description": "Represents the id of the customer account.", + "type": "string" + }, + "connectionInfo": { + "$ref": "#/components/schemas/SfConnectionModel" + } + } + }, + "UpdateErpSystemRequest_SfConnectionModel_": { + "description": "Represents data required to update ERP system", + "required": [ + "id", + "name" + ], + "type": "object", + "properties": { + "id": { + "format": "int32", + "description": "The id of the system to update", + "type": "integer" + }, + "name": { + "description": "The name of the ERP system.", + "type": "string" + }, + "connectionInfo": { + "$ref": "#/components/schemas/SfConnectionModel" + } + } + } + } + } +} \ No newline at end of file diff --git a/static/arm-api/swagger-arm2.json b/static/arm-api/swagger-arm2.json new file mode 100644 index 000000000..cc0dfee45 --- /dev/null +++ b/static/arm-api/swagger-arm2.json @@ -0,0 +1,946 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "Access Risk Management ARM Web APIs", + "version": "v1" + }, + "paths": { + "/api/customer-sot": { + "get": { + "tags": [ + "CustomerSot" + ], + "summary": "Get Customers with Source of Truth based on OData functionality.", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomerAccountSotDto" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomerAccountSotDto" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomerAccountSotDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomerAccountSotDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomerAccountSotDto" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomerAccountSotDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomerAccountSotDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomerAccountSotDto" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomerAccountSotDto" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomerAccountSotDto" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomerAccountSotDto" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomerAccountSotDto" + } + } + }, + "application/xml": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomerAccountSotDto" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomerAccountSotDto" + } + } + }, + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomerAccountSotDto" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomerAccountSotDto" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=minimal": { + "schema": {} + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=full": { + "schema": {} + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=none": { + "schema": {} + }, + "application/json;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.streaming=false": { + "schema": {} + }, + "application/json": { + "schema": {} + }, + "application/xml": { + "schema": {} + }, + "application/prs.odatatestxx-odata": { + "schema": {} + }, + "text/plain": { + "schema": {} + }, + "text/json": { + "schema": {} + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=minimal": { + "schema": {} + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=full": { + "schema": {} + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=none": { + "schema": {} + }, + "application/json;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.streaming=false": { + "schema": {} + }, + "application/json": { + "schema": {} + }, + "application/xml": { + "schema": {} + }, + "application/prs.odatatestxx-odata": { + "schema": {} + }, + "text/plain": { + "schema": {} + }, + "text/json": { + "schema": {} + } + } + } + } + }, + "put": { + "tags": [ + "CustomerSot" + ], + "summary": "Update the SourceOfTruths of CustomerSots.", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ListOfCustomerSotSimpleDto" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ListOfCustomerSotSimpleDto" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ListOfCustomerSotSimpleDto" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ListOfCustomerSotSimpleDto" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ListOfCustomerSotSimpleDto" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ListOfCustomerSotSimpleDto" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ListOfCustomerSotSimpleDto" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ListOfCustomerSotSimpleDto" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ListOfCustomerSotSimpleDto" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ListOfCustomerSotSimpleDto" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ListOfCustomerSotSimpleDto" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListOfCustomerSotSimpleDto" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ListOfCustomerSotSimpleDto" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ListOfCustomerSotSimpleDto" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ListOfCustomerSotSimpleDto" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ListOfCustomerSotSimpleDto" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=minimal": { + "schema": {} + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=full": { + "schema": {} + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=none": { + "schema": {} + }, + "application/json;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.streaming=false": { + "schema": {} + }, + "application/json": { + "schema": {} + }, + "application/xml": { + "schema": {} + }, + "application/prs.odatatestxx-odata": { + "schema": {} + }, + "text/plain": { + "schema": {} + }, + "text/json": { + "schema": {} + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=minimal": { + "schema": {} + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=full": { + "schema": {} + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=none": { + "schema": {} + }, + "application/json;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.streaming=false": { + "schema": {} + }, + "application/json": { + "schema": {} + }, + "application/xml": { + "schema": {} + }, + "application/prs.odatatestxx-odata": { + "schema": {} + }, + "text/plain": { + "schema": {} + }, + "text/json": { + "schema": {} + } + } + } + } + } + }, + "/api/support-dashboard": { + "get": { + "tags": [ + "SupportDashboard" + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=minimal": { + "schema": {} + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=full": { + "schema": {} + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=none": { + "schema": {} + }, + "application/json;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.streaming=false": { + "schema": {} + }, + "application/json": { + "schema": {} + }, + "application/xml": { + "schema": {} + }, + "application/prs.odatatestxx-odata": { + "schema": {} + }, + "text/plain": { + "schema": {} + }, + "text/json": { + "schema": {} + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=minimal": { + "schema": {} + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=full": { + "schema": {} + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=none": { + "schema": {} + }, + "application/json;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.streaming=false": { + "schema": {} + }, + "application/json": { + "schema": {} + }, + "application/xml": { + "schema": {} + }, + "application/prs.odatatestxx-odata": { + "schema": {} + }, + "text/plain": { + "schema": {} + }, + "text/json": { + "schema": {} + } + } + } + } + } + }, + "/api/usersync": { + "post": { + "tags": [ + "UserSync" + ], + "summary": "Kick off User Sync Process by queuing a message.", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=minimal": { + "schema": {} + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=full": { + "schema": {} + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=none": { + "schema": {} + }, + "application/json;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.streaming=false": { + "schema": {} + }, + "application/json": { + "schema": {} + }, + "application/xml": { + "schema": {} + }, + "application/prs.odatatestxx-odata": { + "schema": {} + }, + "text/plain": { + "schema": {} + }, + "text/json": { + "schema": {} + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=minimal": { + "schema": {} + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=full": { + "schema": {} + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": {} + }, + "application/json;odata.metadata=none": { + "schema": {} + }, + "application/json;odata.streaming=true": { + "schema": {} + }, + "application/json;odata.streaming=false": { + "schema": {} + }, + "application/json": { + "schema": {} + }, + "application/xml": { + "schema": {} + }, + "application/prs.odatatestxx-odata": { + "schema": {} + }, + "text/plain": { + "schema": {} + }, + "text/json": { + "schema": {} + } + } + } + } + } + } + }, + "components": { + "schemas": { + "AuthenticationMethods": { + "enum": [ + 0, + 1, + 2, + 3, + 4 + ], + "type": "integer", + "format": "int32" + }, + "CustomerAccountSotDto": { + "type": "object", + "properties": { + "customerId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "accountId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "customerName": { + "type": "string", + "nullable": true + }, + "accountName": { + "type": "string", + "nullable": true + }, + "authenticationMethod": { + "$ref": "#/components/schemas/AuthenticationMethods" + }, + "sourceOfTruth": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "SourceOfTruth": { + "enum": [ + 0, + 1 + ], + "type": "integer", + "format": "int32" + }, + "SimpleSotDto": { + "type": "object", + "properties": { + "customerId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "accountId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "sourceOfTruth": { + "$ref": "#/components/schemas/SourceOfTruth" + } + }, + "additionalProperties": false + }, + "ListOfCustomerSotSimpleDto": { + "type": "object", + "properties": { + "simpleSotDtos": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SimpleSotDto" + }, + "nullable": true + } + }, + "additionalProperties": false + } + } + } +} \ No newline at end of file diff --git a/static/arm-api/swagger-authentication.json b/static/arm-api/swagger-authentication.json new file mode 100644 index 000000000..6f48dbede --- /dev/null +++ b/static/arm-api/swagger-authentication.json @@ -0,0 +1,7908 @@ +{ + "openapi": "3.0.0", + "info": { + "version": "1.0", + "title": "Access Risk Management Authentication Services" + }, + "paths": { + "/api/auth/login": { + "post": { + "tags": [ + "Auth" + ], + "summary": "Logs in the user with a username/ password and returns a JWT and refresh token.", + "operationId": "Login", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.AuthenticationServices.Models.Auth.LoginModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.AuthenticationResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/auth/loginwithusername": { + "post": { + "tags": [ + "Auth" + ], + "summary": "Logs in the user with just a username and returns a JWT and refresh token.", + "operationId": "LoginWithUsername", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UsernameLoginModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UsernameLoginModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UsernameLoginModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UsernameLoginModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UsernameLoginModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UsernameLoginModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UsernameLoginModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UsernameLoginModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UsernameLoginModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UsernameLoginModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UsernameLoginModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UsernameLoginModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UsernameLoginModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UsernameLoginModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UsernameLoginModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UsernameLoginModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UsernameLoginModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.AuthenticationResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/auth/refresh": { + "post": { + "tags": [ + "Auth" + ], + "summary": "Using a refresh token, get a new JWT.", + "operationId": "Refresh", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UserRefreshRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UserRefreshRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UserRefreshRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UserRefreshRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UserRefreshRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UserRefreshRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UserRefreshRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UserRefreshRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UserRefreshRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UserRefreshRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UserRefreshRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UserRefreshRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UserRefreshRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UserRefreshRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UserRefreshRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UserRefreshRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.UserRefreshRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.RefreshResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/auth/legacyLogin": { + "post": { + "tags": [ + "Auth" + ], + "summary": "Allows authentication via legacy EmHub/ AzureAD system.", + "operationId": "LoginWithLegacyCredentials", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.AuthenticationServices.Models.Auth.LoginModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.AuthenticationResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/auth/sso": { + "get": { + "tags": [ + "Auth" + ], + "summary": "When authenticated via an external IDP for SSO, the authentication service will return\r\na short-lived cookie called SsoToken that can be used to fetch a valid JWT and refresh\r\ntoken from the system.", + "operationId": "LoginViaSsoCookie", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.AuthenticationResponse" + } + } + } + } + } + } + }, + "/api/changeLogs/{customerId}/users": { + "post": { + "tags": [ + "ChangeLogs" + ], + "summary": "Schedules new User Management Change Logs job.", + "operationId": "ScheduleUsersChangeLog", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "fromDate", + "in": "query", + "description": "Start date of the reporting period.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "End date of the reporting period.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accounts/{legacyAccountId}": { + "get": { + "tags": [ + "Customer" + ], + "operationId": "GetCustomer", + "parameters": [ + { + "name": "legacyAccountId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accounts": { + "get": { + "tags": [ + "Customer" + ], + "summary": "Lists accounts in the system with some rudimentary searching and sorting functionality.", + "operationId": "List", + "parameters": [ + { + "name": "pageNum", + "in": "query", + "description": "", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 1 + } + }, + { + "name": "pageSize", + "in": "query", + "description": "", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 10 + } + }, + { + "name": "searchTerm", + "in": "query", + "description": "", + "required": false, + "schema": { + "type": "string", + "default": "" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + }, + "put": { + "tags": [ + "Customer" + ], + "summary": "Updates the specified account with the provided metadata.", + "operationId": "ModifyCustomer", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + }, + "post": { + "tags": [ + "Customer" + ], + "summary": "Creates a new account in the system.", + "operationId": "CreateCustomer", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accounts/{customerId}/{accountId}": { + "post": { + "tags": [ + "Customer" + ], + "summary": "Links customer and legacy account.\r\nThis endpoint is mainly used by AuthSync process, when new customer and account are created.", + "operationId": "SetLegacyAccountId", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "accountId", + "in": "path", + "description": "Identifier of the account.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + }, + "deprecated": true + } + }, + "/api/accounts/{customerId}/accessContext/enable": { + "patch": { + "tags": [ + "Customer" + ], + "summary": "Enables access contexts for the customer.", + "operationId": "EnableAccessContexts", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accounts/{customerId}/accessContext/disable": { + "patch": { + "tags": [ + "Customer" + ], + "summary": "Disables access contexts for the customer.", + "operationId": "DisableAccessContexts", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accounts/{customerId}/accessContext/areEnabled": { + "get": { + "tags": [ + "Customer" + ], + "summary": "Determines if access contexts are enabled for specified customer.", + "operationId": "AreAccessContextsEnabled", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accounts/customerInfo/{customerId}": { + "get": { + "tags": [ + "Customer" + ], + "summary": "Get information for a customer. Used by the client service.", + "operationId": "GetCustomerInfo", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.CustomerModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/impersonation/accounts": { + "get": { + "tags": [ + "Impersonation" + ], + "summary": "List of eligible accounts for impersonation", + "operationId": "GetAccountsForImpersonation", + "parameters": [ + { + "name": "search", + "in": "query", + "description": "", + "required": false, + "schema": { + "type": "string", + "default": "" + } + }, + { + "name": "pageNum", + "in": "query", + "description": "", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "pageSize", + "in": "query", + "description": "", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.MaestroCustomer" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + } + } + }, + "/api/impersonation/v{v}/customer/{customerId}/userdetails": { + "get": { + "tags": [ + "Impersonation" + ], + "summary": "Gets a list of user details for a given customer for Impersonation.\r\nIdentifier of the customer.", + "operationId": "GetCustomerUserDetailsV2", + "parameters": [ + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "search", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "v", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.V2.UserDetailsModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + } + } + }, + "/api/impersonation/token": { + "post": { + "tags": [ + "Impersonation" + ], + "summary": "Provides an access token to act on behal of the impersonated user.", + "operationId": "Impersonate", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Authorization.V2Core.Models.ImpersonationRequestModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Authorization.V2Core.Models.ImpersonationRequestModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Authorization.V2Core.Models.ImpersonationRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Authorization.V2Core.Models.ImpersonationRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Authorization.V2Core.Models.ImpersonationRequestModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Authorization.V2Core.Models.ImpersonationRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Authorization.V2Core.Models.ImpersonationRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Authorization.V2Core.Models.ImpersonationRequestModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Authorization.V2Core.Models.ImpersonationRequestModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Authorization.V2Core.Models.ImpersonationRequestModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Authorization.V2Core.Models.ImpersonationRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Authorization.V2Core.Models.ImpersonationRequestModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Authorization.V2Core.Models.ImpersonationRequestModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Authorization.V2Core.Models.ImpersonationRequestModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Authorization.V2Core.Models.ImpersonationRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Authorization.V2Core.Models.ImpersonationRequestModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Authorization.V2Core.Models.ImpersonationRequestModel" + } + } + }, + "description": "The impersonation request model parameters" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.AuthenticationResponse" + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/accounts/{accountId}/licenses": { + "get": { + "tags": [ + "License" + ], + "summary": "Lists all licensed modules for the specified customer (account)", + "operationId": "List", + "parameters": [ + { + "name": "accountId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.License.LicenseModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + }, + "post": { + "tags": [ + "License" + ], + "summary": "Sets/ creates the licensing for a module for the specified customer (account)", + "operationId": "Set", + "parameters": [ + { + "name": "accountId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.License.SetLicenseModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.License.SetLicenseModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.License.SetLicenseModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.License.SetLicenseModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.License.SetLicenseModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.License.SetLicenseModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.License.SetLicenseModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.License.SetLicenseModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.License.SetLicenseModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.License.SetLicenseModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.License.SetLicenseModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.License.SetLicenseModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.License.SetLicenseModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.License.SetLicenseModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.License.SetLicenseModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.License.SetLicenseModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.License.SetLicenseModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.License.LicenseModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/selfservice/register": { + "post": { + "tags": [ + "SelfService" + ], + "summary": "Allows a previously non-existent user to register with a new account, mainly used\r\nto sign up for a free trial.", + "operationId": "RegisterUser", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.AuthenticationServices.Models.SelfService.UserRegisterModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/selfservice/user/exists": { + "post": { + "tags": [ + "SelfService" + ], + "summary": "If the username currently exists in our data store, return true. Otherwise, return false.", + "operationId": "UserExists", + "requestBody": { + "$ref": "#/components/requestBodies/UserExistsUsername" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + } + } + } + }, + "/api/selfservice/company/exists": { + "post": { + "tags": [ + "SelfService" + ], + "summary": "If the company name currently exists in our data store, return true. Otherwise, return false.", + "operationId": "CompanyExists", + "requestBody": { + "$ref": "#/components/requestBodies/UserExistsUsername" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + } + } + } + }, + "/api/selfservice/setpassword": { + "post": { + "tags": [ + "SelfService" + ], + "summary": "With the provided token and new password, allows a user to set/ create their password.\r\nThis will also set their account as having their email address confirmed.", + "operationId": "SetPassword", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.SetPasswordModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.SetPasswordModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.SetPasswordModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.SetPasswordModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.SetPasswordModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.SetPasswordModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.SetPasswordModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.SetPasswordModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.SetPasswordModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.SetPasswordModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.SetPasswordModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.SetPasswordModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.SetPasswordModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.SetPasswordModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.SetPasswordModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.SetPasswordModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.SetPasswordModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request" + }, + "404": { + "description": "Not Found" + }, + "409": { + "description": "Conflict" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/selfservice/changepassword": { + "post": { + "tags": [ + "SelfService" + ], + "summary": "With the provided old and new passwords, allows a user to change their password.", + "operationId": "ChangePassword", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ChangePasswordModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ChangePasswordModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ChangePasswordModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ChangePasswordModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ChangePasswordModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ChangePasswordModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ChangePasswordModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ChangePasswordModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ChangePasswordModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ChangePasswordModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ChangePasswordModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ChangePasswordModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ChangePasswordModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ChangePasswordModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ChangePasswordModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ChangePasswordModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ChangePasswordModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Exceptions.IdentityException" + } + } + } + } + } + } + }, + "/api/selfservice/coworkers": { + "post": { + "tags": [ + "SelfService" + ], + "summary": "Registers a coworker at the same company as the authenticated user. If the user's token\r\nhas expired, you can \"re-register\" the user using this method to generate a new token.", + "operationId": "RegisterCoworker", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.RegisterCoworkerModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.RegisterCoworkerModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.RegisterCoworkerModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.RegisterCoworkerModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.RegisterCoworkerModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.RegisterCoworkerModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.RegisterCoworkerModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.RegisterCoworkerModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.RegisterCoworkerModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.RegisterCoworkerModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.RegisterCoworkerModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.RegisterCoworkerModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.RegisterCoworkerModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.RegisterCoworkerModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.RegisterCoworkerModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.RegisterCoworkerModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.RegisterCoworkerModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Exceptions.IdentityException" + } + } + } + } + } + } + }, + "/api/selfservice/legacycredential": { + "post": { + "tags": [ + "SelfService" + ], + "summary": "Returns the company credential used for legacy operations within the Access Analyzer,\r\nencrypted with the provided shared secret key. This communication should always go over TLS.", + "operationId": "GetLegacyCredential", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "application/json-patch+json": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + }, + "application/*+json": { + "schema": { + "type": "string" + } + } + }, + "description": "Shared key." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/service/getlegacyid/{customerId}": { + "get": { + "tags": [ + "Service" + ], + "summary": "Returns legacy account identifier by provided customer identifier, for a service account", + "operationId": "GetLegacyAccountId", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Unique customer identifier", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/service/customerId/{accountId}": { + "get": { + "tags": [ + "Service" + ], + "summary": "Gets identifier of customer by its legacy ID, for a service account", + "operationId": "GetCustomerId", + "parameters": [ + { + "name": "accountId", + "in": "path", + "description": "Legacy account ID.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/service/passwordResetToken/{userId}": { + "get": { + "tags": [ + "Service" + ], + "summary": "Generates PasswordReset token for specified user.", + "operationId": "GeneratePasswordResetToken", + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "Identifier of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/Signature/pgpsign": { + "post": { + "tags": [ + "Signature" + ], + "operationId": "PgpSign", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileStreamResult" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileStreamResult" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileStreamResult" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileStreamResult" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileStreamResult" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileStreamResult" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileStreamResult" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileStreamResult" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileStreamResult" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileStreamResult" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileStreamResult" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileStreamResult" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileStreamResult" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileStreamResult" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileStreamResult" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileStreamResult" + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.Services.ActionResults.OopsResult" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.Services.ActionResults.OopsResult" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.Services.ActionResults.OopsResult" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.Services.ActionResults.OopsResult" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.Services.ActionResults.OopsResult" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.Services.ActionResults.OopsResult" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.Services.ActionResults.OopsResult" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.Services.ActionResults.OopsResult" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.Services.ActionResults.OopsResult" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.Services.ActionResults.OopsResult" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.Services.ActionResults.OopsResult" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.Services.ActionResults.OopsResult" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.Services.ActionResults.OopsResult" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.Services.ActionResults.OopsResult" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.Services.ActionResults.OopsResult" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.Services.ActionResults.OopsResult" + } + } + } + } + } + } + }, + "/api/sso/saml2": { + "get": { + "tags": [ + "Sso" + ], + "summary": "Entry point for SAML2 SSO authentication. If the OID is registered in the system, should redirect\r\nthe user to the registered IDP for authentication.", + "operationId": "AuthenticateViaSaml2", + "parameters": [ + { + "name": "oid", + "in": "query", + "description": "The object id of the SSO client. For example, if the SSO client hits https://foo.erpmaestro.com/sso,\r\n the oid would be \"foo\".", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "redirectUrl", + "in": "query", + "description": "", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + }, + "post": { + "tags": [ + "Sso" + ], + "summary": "Creates a reference to an external identity provider for the SAML2 protocol. Only one external\r\nidentity provider can be used per customer.", + "operationId": "CreateSaml2IdentityProvider", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.CreateSaml2IdentityProviderModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.CreateSaml2IdentityProviderModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.CreateSaml2IdentityProviderModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.CreateSaml2IdentityProviderModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.CreateSaml2IdentityProviderModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.CreateSaml2IdentityProviderModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.CreateSaml2IdentityProviderModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.CreateSaml2IdentityProviderModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.CreateSaml2IdentityProviderModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.CreateSaml2IdentityProviderModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.CreateSaml2IdentityProviderModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.CreateSaml2IdentityProviderModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.CreateSaml2IdentityProviderModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.CreateSaml2IdentityProviderModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.CreateSaml2IdentityProviderModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.CreateSaml2IdentityProviderModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.CreateSaml2IdentityProviderModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/xml": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/plain": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + } + } + }, + "patch": { + "tags": [ + "Sso" + ], + "summary": "Modify/ update a previously registered SAML2 SSO IDP.", + "operationId": "ModifySaml2IdentityProvider", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.ModifySaml2IdentityProviderModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.ModifySaml2IdentityProviderModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.ModifySaml2IdentityProviderModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.ModifySaml2IdentityProviderModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.ModifySaml2IdentityProviderModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.ModifySaml2IdentityProviderModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.ModifySaml2IdentityProviderModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.ModifySaml2IdentityProviderModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.ModifySaml2IdentityProviderModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.ModifySaml2IdentityProviderModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.ModifySaml2IdentityProviderModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.ModifySaml2IdentityProviderModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.ModifySaml2IdentityProviderModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.ModifySaml2IdentityProviderModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.ModifySaml2IdentityProviderModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.ModifySaml2IdentityProviderModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.ModifySaml2IdentityProviderModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/sso/{idpId}": { + "delete": { + "tags": [ + "Sso" + ], + "summary": "Permanently removes a registered SAML2 SSO IDP. This should only be used when changing the IDP\r\nfor the customer to something else, otherwise disable the IDP via M:ErpMaestro.AuthenticationServices.Controllers.SsoController.ModifySaml2IdentityProvider(ErpMaestro.AuthenticationServices.Client.Models.ModifySaml2IdentityProviderModel).", + "operationId": "DeleteSsoIdp", + "parameters": [ + { + "name": "idpId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/sso/users": { + "post": { + "tags": [ + "Sso" + ], + "summary": "Associates a user with a customer's IDP and allows the claim type to be\r\nspecified or updates a previous association. Tenancy checking is NOT performed\r\nin the authentication service; this should be done before the service calls the endpoint.", + "operationId": "AddUserToSso", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserToSsoModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserToSsoModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserToSsoModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserToSsoModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserToSsoModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserToSsoModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserToSsoModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserToSsoModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserToSsoModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserToSsoModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserToSsoModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserToSsoModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserToSsoModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserToSsoModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserToSsoModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserToSsoModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserToSsoModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/sso/users/{userId}/customers/{customerId}": { + "delete": { + "tags": [ + "Sso" + ], + "summary": "Removes an association of an SSO user from a customer.", + "operationId": "RemoveUserFromSso", + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "customerId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/system/register": { + "post": { + "tags": [ + "System" + ], + "summary": "Allows a system admin to register a previously non-existent user with a new account.\r\nMainly used for ARM free trials.", + "operationId": "RegisterUser", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.AuthenticationServices.Models.SelfService.UserRegisterModel" + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/system/confirm": { + "patch": { + "tags": [ + "System" + ], + "summary": "Allows a system admin to confirm a user's email.", + "operationId": "ConfirmEmail", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ArmEmailConfirmationModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ArmEmailConfirmationModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ArmEmailConfirmationModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ArmEmailConfirmationModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ArmEmailConfirmationModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ArmEmailConfirmationModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ArmEmailConfirmationModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ArmEmailConfirmationModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ArmEmailConfirmationModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ArmEmailConfirmationModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ArmEmailConfirmationModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ArmEmailConfirmationModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ArmEmailConfirmationModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ArmEmailConfirmationModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ArmEmailConfirmationModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ArmEmailConfirmationModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.ArmEmailConfirmationModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/system/emhub/onboardUser": { + "post": { + "tags": [ + "System" + ], + "summary": "Adds EmHub user information to Auth Service.", + "operationId": "OnboardEmhubUser", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + }, + "deprecated": true + } + }, + "/api/system/emhub/updateUser": { + "post": { + "tags": [ + "System" + ], + "summary": "Updates user information from EmHub.", + "operationId": "UpdateEmhubUser", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + }, + "deprecated": true + } + }, + "/api/system/emhub/changePassword": { + "post": { + "tags": [ + "System" + ], + "summary": "Updates user password by information from EmHub.", + "operationId": "ChangeEmhubUserPassword", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubChangePasswordModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubChangePasswordModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubChangePasswordModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubChangePasswordModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubChangePasswordModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubChangePasswordModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubChangePasswordModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubChangePasswordModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubChangePasswordModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubChangePasswordModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubChangePasswordModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubChangePasswordModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubChangePasswordModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubChangePasswordModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubChangePasswordModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubChangePasswordModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubChangePasswordModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/systemSettings/getAccountId/{customerId}": { + "get": { + "tags": [ + "SystemSettings" + ], + "summary": "Returns legacy account identifier by provided customer identifier", + "operationId": "GetLegacyAccountIdByCustomerId", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Unique customer identifier", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/systemSettings/getCustomerId/{accountId}": { + "get": { + "tags": [ + "SystemSettings" + ], + "summary": "Gets identifier of customer by its legacy ID.", + "operationId": "GetCustomerIdByAccountId", + "parameters": [ + { + "name": "accountId", + "in": "path", + "description": "Legacy account ID.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/tenancyCheck/user/{userId}": { + "post": { + "tags": [ + "TenancyCheck" + ], + "summary": "Determines if user belongs to any of specified customers.", + "operationId": "DoesUserBelongToAnyOfCustomers", + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "Identifier of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + }, + "description": "Identifiers of customers." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json": { + "schema": { + "type": "boolean" + } + }, + "application/xml": { + "schema": { + "type": "boolean" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "boolean" + } + }, + "text/plain": { + "schema": { + "type": "boolean" + } + }, + "text/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/users": { + "get": { + "tags": [ + "User" + ], + "operationId": "List", + "parameters": [ + { + "name": "pageNum", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 1 + } + }, + { + "name": "pageSize", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "default": 10 + } + }, + { + "name": "searchTerm", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + }, + "post": { + "tags": [ + "User" + ], + "summary": "Creates a new user in the system under the specified customer (account).\r\nNote that this does not set a password for the account. Please see the associated endpoint \r\nfor setting a password for a user.", + "operationId": "Create", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Identity.IdentityError" + } + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + }, + "deprecated": true + } + }, + "/api/users/setupUser": { + "post": { + "tags": [ + "User" + ], + "summary": "Confirms the email and sets a user's password.", + "operationId": "SetupUser", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.SetupUserModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.SetupUserModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.SetupUserModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.SetupUserModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.SetupUserModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.SetupUserModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.SetupUserModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.SetupUserModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.SetupUserModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.SetupUserModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.SetupUserModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.SetupUserModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.SetupUserModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.SetupUserModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.SetupUserModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.SetupUserModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.SetupUserModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Identity.IdentityError" + } + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/users/resetPassword": { + "get": { + "tags": [ + "User" + ], + "summary": "Requests a password reset.", + "operationId": "RequestPasswordReset", + "parameters": [ + { + "name": "username", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "resetPasswordUrl", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Identity.IdentityError" + } + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + }, + "post": { + "tags": [ + "User" + ], + "summary": "Changes password using Reset token.", + "operationId": "ResetPassword", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ResetPasswordModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ResetPasswordModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ResetPasswordModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ResetPasswordModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ResetPasswordModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ResetPasswordModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ResetPasswordModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ResetPasswordModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ResetPasswordModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ResetPasswordModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ResetPasswordModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ResetPasswordModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ResetPasswordModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ResetPasswordModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ResetPasswordModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ResetPasswordModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ResetPasswordModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Identity.IdentityError" + } + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/users/currentUser/changePassword": { + "post": { + "tags": [ + "User" + ], + "summary": "Changes the password for the current user.", + "operationId": "ChangeMyPassword", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangePasswordModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangePasswordModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangePasswordModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangePasswordModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangePasswordModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangePasswordModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangePasswordModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangePasswordModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangePasswordModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangePasswordModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangePasswordModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangePasswordModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangePasswordModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangePasswordModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangePasswordModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangePasswordModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangePasswordModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Identity.IdentityError" + } + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/users/changeSysJobPassword": { + "post": { + "tags": [ + "User" + ], + "summary": "Changes the password for the specified sysJob user.", + "operationId": "ChangeSysJobPasswordHandler", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangeSysJobPasswordModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangeSysJobPasswordModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangeSysJobPasswordModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangeSysJobPasswordModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangeSysJobPasswordModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangeSysJobPasswordModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangeSysJobPasswordModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangeSysJobPasswordModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangeSysJobPasswordModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangeSysJobPasswordModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangeSysJobPasswordModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangeSysJobPasswordModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangeSysJobPasswordModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangeSysJobPasswordModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangeSysJobPasswordModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangeSysJobPasswordModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.User.ChangeSysJobPasswordModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Identity.IdentityError" + } + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/users/{userId}": { + "get": { + "tags": [ + "User" + ], + "summary": "Get a user from the system by id.", + "operationId": "GetUser", + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "The unique identifier for the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "403": { + "description": "Forbidden" + }, + "410": { + "description": "Client Error" + } + }, + "deprecated": true + }, + "delete": { + "tags": [ + "User" + ], + "summary": "Soft deletes the specified user.", + "operationId": "SoftDelete", + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "The id of the user to be deleted.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + } + }, + "patch": { + "tags": [ + "User" + ], + "summary": "Updates the metadata of the specified user.", + "operationId": "Update", + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Identity.IdentityError" + } + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + }, + "deprecated": true + } + }, + "/api/users/{username}/accounts": { + "get": { + "tags": [ + "User" + ], + "summary": "Gets the assigned customers for the specified user.", + "operationId": "GetUserCustomers", + "parameters": [ + { + "name": "username", + "in": "path", + "description": "The username of the user in question.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.UserAccountModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/users/currentuser/accounts": { + "get": { + "tags": [ + "User" + ], + "summary": "Gets the assigned customers for the currently logged in user.", + "operationId": "GetCurrentUserCustomers", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.UserAccountModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/users/currentuser": { + "get": { + "tags": [ + "User" + ], + "summary": "Gets the current user.", + "operationId": "GetCurrentUser", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/users/currentuser/customer": { + "get": { + "tags": [ + "User" + ], + "summary": "Gets the current customers", + "operationId": "GetCurrentCustomer", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/users/{customerId}/{userId}": { + "get": { + "tags": [ + "User" + ], + "summary": "Get a user from the system by id.", + "operationId": "GetUser", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "The unique identifier for the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "description": "The unique identifier for the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/users/{username}": { + "get": { + "tags": [ + "User" + ], + "summary": "Get a user from the system by username.", + "operationId": "GetByUsername", + "parameters": [ + { + "name": "username", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "403": { + "description": "Forbidden" + }, + "410": { + "description": "Client Error" + } + }, + "deprecated": true + } + }, + "/api/users/{customerId}/{username}": { + "get": { + "tags": [ + "User" + ], + "summary": "Get a user from the system by username.", + "operationId": "GetByUsername", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "The unique identifier for the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "username", + "in": "path", + "description": "The user name.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/accounts/{accountId}/users": { + "get": { + "tags": [ + "User" + ], + "summary": "Retrieves a list of users assigned to the specified account.", + "operationId": "ListByCustomer", + "parameters": [ + { + "name": "accountId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/users/checkisservice/{userId}": { + "get": { + "tags": [ + "User" + ], + "summary": "Checks if user is a service user. Mainly serves Gaia to EmHub communication, \r\nto be able to validate the user account is service account while performing sync.", + "operationId": "IsServiceUser", + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "Unique user identifier.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/support/{userId}/updatesysadmin": { + "post": { + "tags": [ + "User" + ], + "summary": "Updates isSysAdmin permission of provided user.", + "operationId": "UpdateSysAdminPermissions", + "parameters": [ + { + "name": "userId", + "in": "path", + "description": "Id of the user.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json": { + "schema": { + "type": "boolean" + } + }, + "application/xml": { + "schema": { + "type": "boolean" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "boolean" + } + }, + "application/json-patch+json": { + "schema": { + "type": "boolean" + } + }, + "text/json": { + "schema": { + "type": "boolean" + } + }, + "application/*+json": { + "schema": { + "type": "boolean" + } + } + }, + "description": "True/False." + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + } + } + }, + "/api/usercustomer/add": { + "post": { + "tags": [ + "UserCustomer" + ], + "summary": "Adds new relationship between user and customer. Allows change \"IsAdmin\" flag for existing relationship.", + "operationId": "RelateUserAndCustomer", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.UserToCustomer" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/usercustomer/update": { + "post": { + "tags": [ + "UserCustomer" + ], + "summary": "Updates relationship between user and customer.", + "operationId": "UpdateUserAndCustomer", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.UserToCustomer" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/usercustomer/remove": { + "post": { + "tags": [ + "UserCustomer" + ], + "summary": "Removes relationship between user and customer.", + "operationId": "UnbindUserAndCustomer", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel" + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/userPortability/{customerId}/export": { + "get": { + "tags": [ + "UserPortability" + ], + "summary": "Exports users for specified customer.", + "operationId": "ExportUsers", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/userPortability/{customerId}/import": { + "post": { + "tags": [ + "UserPortability" + ], + "summary": "Schedules new job to import users.", + "operationId": "ImportUsers", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "contentType": { + "type": "string" + }, + "contentDisposition": { + "type": "string" + }, + "headers": { + "type": "object" + }, + "length": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "fileName": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/customers/{customerId}/userroledetails": { + "get": { + "tags": [ + "UserRole" + ], + "summary": "Gets Customer to User Roles list", + "operationId": "GetUserRolesByCustomer", + "parameters": [ + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.CustomerToUserRoleMappingDetails" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + } + } + } + }, + "components": { + "requestBodies": { + "ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserModel": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserModel" + } + } + } + }, + "UserExistsUsername": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "application/json-patch+json": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + }, + "application/*+json": { + "schema": { + "type": "string" + } + } + } + }, + "ErpMaestro.AuthenticationServices.Client.Models.UserModel": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.UserModel" + } + } + } + }, + "ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel" + } + } + } + }, + "ErpMaestro.AuthenticationServices.Models.Auth.LoginModel": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.LoginModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.LoginModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.LoginModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.LoginModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.LoginModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.LoginModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.LoginModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.LoginModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.LoginModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.LoginModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.LoginModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.LoginModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.LoginModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.LoginModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.LoginModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.LoginModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Auth.LoginModel" + } + } + } + }, + "ErpMaestro.AuthenticationServices.Models.Customer.AccountModel": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.Customer.AccountModel" + } + } + } + }, + "ErpMaestro.AuthenticationServices.Models.SelfService.UserRegisterModel": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.UserRegisterModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.UserRegisterModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.UserRegisterModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.UserRegisterModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.UserRegisterModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.UserRegisterModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.UserRegisterModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.UserRegisterModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.UserRegisterModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.UserRegisterModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.UserRegisterModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.UserRegisterModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.UserRegisterModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.UserRegisterModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.UserRegisterModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.UserRegisterModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Models.SelfService.UserRegisterModel" + } + } + } + } + }, + "schemas": { + "ErpMaestro.AuthenticationServices.Models.Auth.LoginModel": { + "required": [ + "username", + "password" + ], + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "password": { + "format": "password", + "type": "string" + }, + "selectedCustomerId": { + "format": "uuid", + "type": "string" + }, + "isEamLogin": { + "type": "boolean" + }, + "fromLegacy": { + "type": "boolean" + } + } + }, + "ErpMaestro.AuthenticationServices.Core.Models.AuthenticationResponse": { + "description": "Response including an authentication token and a refresh token", + "type": "object", + "properties": { + "auth_token": { + "type": "string" + }, + "refresh_token": { + "type": "string" + } + } + }, + "Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry": { + "type": "object", + "properties": { + "rawValue": { + "type": "object" + }, + "attemptedValue": { + "type": "string" + }, + "errors": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelError" + }, + "readOnly": true + }, + "validationState": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState" + }, + "isContainerNode": { + "type": "boolean", + "readOnly": true + }, + "children": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry" + }, + "readOnly": true + } + } + }, + "Microsoft.AspNetCore.Mvc.ModelBinding.ModelError": { + "type": "object", + "properties": { + "exception": { + "type": "object", + "readOnly": true + }, + "errorMessage": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState": { + "enum": [ + "unvalidated", + "invalid", + "valid", + "skipped" + ], + "type": "string" + }, + "ErpMaestro.AuthenticationServices.Models.Auth.UsernameLoginModel": { + "description": "Model used to login only using a username. This should only be used by service accounts.", + "required": [ + "username" + ], + "type": "object", + "properties": { + "username": { + "description": "Username of the user logging in.", + "type": "string" + }, + "isEamLogin": { + "description": "Flag to tell the system whether or not this is an EAM login.", + "type": "boolean" + } + } + }, + "ErpMaestro.AuthenticationServices.Models.Auth.UserRefreshRequest": { + "required": [ + "refreshToken", + "username" + ], + "type": "object", + "properties": { + "refreshToken": { + "type": "string" + }, + "username": { + "type": "string" + }, + "selectedCustomerId": { + "format": "uuid", + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Client.RefreshResponse": { + "description": "Metadata associated with a Refresh Token", + "type": "object", + "properties": { + "token": { + "type": "string" + }, + "loginEndpoint": { + "type": "string" + }, + "status": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.RefreshTokenResponseStatuses" + }, + "message": { + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Client.RefreshTokenResponseStatuses": { + "enum": [ + "undefined", + "success", + "invalid", + "expired", + "unreadable", + "unrecognizedUser" + ], + "type": "string" + }, + "ErpMaestro.AuthenticationServices.Models.Customer.AccountModel": { + "required": [ + "name", + "isActive", + "moduleGracePeriod", + "minimumUsers", + "maximumUsers" + ], + "type": "object", + "properties": { + "id": { + "format": "uuid", + "type": "string" + }, + "authenticationMethod": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.AuthenticationMethods" + }, + "serializedAuthenticationMetadata": { + "description": "If ErpMaestro.AuthenticationServices.Models.Customer.AccountModel.AuthenticationMethod is set to ErpMaestro.AuthenticationServices.Core.Models.AuthenticationMethods.OnPremisesCustom, this\r\nproperty should contain a JSON\r\ndocument with the metadata necessary to connect to the custom authentication service. This is ignored if the\r\nErpMaestro.AuthenticationServices.Models.Customer.AccountModel.AuthenticationMethod\r\nis set to a different value.", + "type": "string" + }, + "name": { + "maxLength": 100, + "minLength": 0, + "type": "string" + }, + "isActive": { + "type": "boolean" + }, + "moduleGracePeriod": { + "format": "int32", + "description": "The number of days that the modules for this account may exceed their license expiration before becoming inactive.", + "type": "integer" + }, + "minimumUsers": { + "format": "int32", + "description": "This is currently not used except to give a floor for licensed users.", + "type": "integer" + }, + "maximumUsers": { + "format": "int32", + "description": "Maximum users in system to be licensed. Note: This is not enforced through automated means.", + "type": "integer" + }, + "externalId": { + "description": "A unique external identifier.", + "type": "string" + }, + "externalIdType": { + "description": "A unique external identifier type.", + "type": "string" + }, + "accessContextsEnabled": { + "description": "Determines if Access Context enabled for customer.", + "type": "boolean" + }, + "legacyAccountId": { + "format": "int32", + "description": "The ErpMaestro legacy account identifier.", + "type": "integer" + } + } + }, + "ErpMaestro.AuthenticationServices.Core.Models.AuthenticationMethods": { + "enum": [ + "undefined", + "azureActiveDirectory", + "nativeMaestro", + "onPremisesCustom", + "aDFS" + ], + "type": "string" + }, + "ErpMaestro.AuthenticationServices.Client.Models.CustomerModel": { + "required": [ + "name" + ], + "type": "object", + "properties": { + "id": { + "format": "uuid", + "type": "string" + }, + "name": { + "maxLength": 100, + "minLength": 0, + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Core.Models.MaestroCustomer": { + "required": [ + "name", + "isActive", + "moduleGracePeriod", + "minimumUsers", + "maximumUsers", + "isTrialAccount", + "legacyAccountId", + "createdUtcTimestamp", + "lastModifiedUtcTimestamp" + ], + "type": "object", + "properties": { + "id": { + "format": "uuid", + "type": "string" + }, + "authenticationMethod": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.AuthenticationMethods" + }, + "serializedAuthenticationMetadata": { + "type": "string" + }, + "name": { + "maxLength": 100, + "minLength": 0, + "type": "string" + }, + "isActive": { + "type": "boolean" + }, + "moduleGracePeriod": { + "format": "int32", + "type": "integer" + }, + "minimumUsers": { + "format": "int32", + "type": "integer" + }, + "maximumUsers": { + "format": "int32", + "type": "integer" + }, + "modules": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.MaestroModule" + } + }, + "users": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.UserToCustomer" + } + }, + "loginEndpoint": { + "maxLength": 250, + "minLength": 0, + "type": "string" + }, + "industry": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.Industries" + }, + "legacyCredentials": { + "type": "string" + }, + "isTrialAccount": { + "type": "boolean" + }, + "legacyAccountId": { + "format": "int32", + "description": "The ErpMaestro legacy account identifier.", + "type": "integer" + }, + "externalId": { + "description": "The external unique identifier for a given entity.\r\nFor example, this id would be a match between us and the CRM provider.\r\n(E.g.: SFDC company id - 0011a000003rd4TAAQ)", + "maxLength": 100, + "minLength": 0, + "type": "string" + }, + "externalIdType": { + "description": "The external unique identifier type for the entity id in ExternalId.\r\n(E.g.: SFDC, IBM, Oracle, etc.)", + "maxLength": 100, + "minLength": 0, + "type": "string" + }, + "externalIdentityProviderId": { + "format": "uuid", + "type": "string" + }, + "externalIdentityProvider": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.ExternalIdentityProvider" + }, + "ssoMode": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.SsoMode" + }, + "accessContextsEnabled": { + "description": "Determines if Access Context enabled for customer.", + "type": "boolean" + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "maxLength": 100, + "minLength": 0, + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Core.Models.MaestroModule": { + "required": [ + "customerId", + "expires", + "createdUtcTimestamp", + "lastModifiedUtcTimestamp" + ], + "type": "object", + "properties": { + "customerId": { + "format": "uuid", + "type": "string" + }, + "customer": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.MaestroCustomer" + }, + "module": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.MaestroModules" + }, + "expires": { + "format": "date-time", + "type": "string" + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "maxLength": 100, + "minLength": 0, + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Core.Models.UserToCustomer": { + "required": [ + "customerId", + "userId", + "isAdmin", + "createdUtcTimestamp", + "lastModifiedUtcTimestamp" + ], + "type": "object", + "properties": { + "customerId": { + "format": "uuid", + "type": "string" + }, + "customer": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.MaestroCustomer" + }, + "userId": { + "format": "uuid", + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.MaestroUser" + }, + "isAdmin": { + "type": "boolean" + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "maxLength": 100, + "minLength": 0, + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "hasApiAccess": { + "description": "Serves as a flag that determines if the user-at-customer has api access.", + "type": "boolean" + } + } + }, + "ErpMaestro.AuthenticationServices.Core.Models.Industries": { + "enum": [ + "undefined", + "agriculture, Forestry, Fishing and Hunting", + "mining", + "utilities", + "construction", + "computer and Electronics Manufacturing", + "other Manufacturing", + "wholesale", + "retail", + "transportation and Warehousing", + "publishing", + "software", + "telecommunications", + "broadcasting", + "information Services and Data Processing", + "other Information Industry", + "finance and Insurance", + "real Estate, Rental and Leasing", + "college, University, and Adult Education", + "primary/Secondary (K-12) Education", + "other Education Industry", + "health Care and Social Assistance", + "arts, Entertainment, and Recreation", + "hotel and Food Services", + "government and Public Administration", + "legal Services", + "scientific or Technical Services", + "homemaker", + "military", + "religious", + "other Industry" + ], + "type": "string" + }, + "ErpMaestro.AuthenticationServices.Core.Models.ExternalIdentityProvider": { + "description": "External Identity Providers (IDPs) are used to support Single Signon (SSO) for a customer's enterprise.\r\nIn this manner, the customer can manage their own users from their own systems, and we can trust their\r\nsystems to authenticate their users properly.", + "required": [ + "key", + "entityId", + "metadata", + "metadataType", + "claimType", + "singleSignOnType", + "customerId", + "enabled" + ], + "type": "object", + "properties": { + "id": { + "format": "uuid", + "type": "string" + }, + "key": { + "description": "The Key represents a unique identifier that is externally referenced for a specific IDP.\r\nFor example, if someone is connecting to https://foo.erpmaestro.com using SSO, the Key\r\nshould be \"foo\".", + "maxLength": 30, + "minLength": 0, + "type": "string" + }, + "entityId": { + "description": "The unique name the IDP identifies itself as, almost always a URL.", + "maxLength": 500, + "minLength": 0, + "type": "string" + }, + "metadata": { + "description": "Metadata contain the contents or link to contents of metadata necessary to properly authenticate\r\nagainst the external IDP. If the ErpMaestro.AuthenticationServices.Core.Models.ExternalIdentityProvider.MetadataType is of type ErpMaestro.AuthenticationServices.Client.Models.MetadataType.Url, this\r\nshould be a fully-qualified URL pointing to the metadata file. If it's of type ErpMaestro.AuthenticationServices.Client.Models.MetadataType.Xml,\r\nthe contents of this property should contain the XML of the metadata itself.", + "type": "string" + }, + "metadataType": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.MetadataType" + }, + "claimType": { + "description": "The claim type that can be referenced when trying to match a user to an external IDP source. Each IDP, upon\r\nauthenticating a user, will return a list of claims for that authenticated user. One or more of them may be\r\nsuitable for matching against their username in the authentication service, but only one can be chosen for any\r\nauthenticated assertion.", + "maxLength": 500, + "minLength": 0, + "type": "string" + }, + "singleSignOnType": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.SingleSignOnType" + }, + "customerId": { + "format": "uuid", + "description": "Customer ID for the customer that uses this IDP.", + "type": "string" + }, + "customer": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.MaestroCustomer" + }, + "enabled": { + "description": "Only enabled IDPs can be used to authenticate.", + "type": "boolean" + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Core.Models.SsoMode": { + "enum": [ + "undefined", + "required", + "optional", + "notAllowed" + ], + "type": "string" + }, + "ErpMaestro.AuthenticationServices.Client.MaestroModules": { + "enum": [ + "undefined", + "emergencyAccessManagement", + "secureProvisioning", + "reporting", + "financialImpactAnalysis", + "accessReviews", + "successFactors", + "sap" + ], + "type": "string" + }, + "ErpMaestro.AuthenticationServices.Core.Models.MaestroUser": { + "required": [ + "isActive", + "isSystem", + "isService", + "canImpersonate", + "canMangageCustomers", + "tokenGoodForXMinutes", + "role", + "isInternalUser", + "createdUtcTimestamp", + "lastModifiedUtcTimestamp", + "isDeleted", + "preferredLanguage", + "isSysAdmin" + ], + "type": "object", + "properties": { + "firstName": { + "maxLength": 35, + "minLength": 0, + "type": "string" + }, + "lastName": { + "maxLength": 35, + "minLength": 0, + "type": "string" + }, + "comments": { + "maxLength": 250, + "minLength": 0, + "type": "string" + }, + "isActive": { + "type": "boolean" + }, + "isSystem": { + "type": "boolean" + }, + "isService": { + "type": "boolean" + }, + "canImpersonate": { + "type": "boolean" + }, + "canMangageCustomers": { + "type": "boolean" + }, + "customers": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.UserToCustomer" + } + }, + "tokenGoodForXMinutes": { + "format": "int32", + "type": "integer" + }, + "role": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.Roles" + }, + "title": { + "maxLength": 100, + "minLength": 0, + "type": "string" + }, + "phone": { + "maxLength": 30, + "minLength": 0, + "type": "string" + }, + "isInternalUser": { + "type": "boolean" + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "maxLength": 100, + "minLength": 0, + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "isDeleted": { + "type": "boolean" + }, + "preferredLanguage": { + "maxLength": 50, + "minLength": 0, + "type": "string" + }, + "isSysAdmin": { + "type": "boolean" + }, + "isAnyCustomerActive": { + "type": "boolean", + "readOnly": true + }, + "authenticationMethod": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.AuthenticationMethods" + }, + "loginEndpoint": { + "type": "string", + "readOnly": true + }, + "userSettings": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.MaestroUserSetting" + } + }, + "userCustomerSettings": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.UserCustomerSetting" + } + }, + "userToIdentityProviders": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.UserToIdentityProvider" + } + }, + "isServiceOrSystem": { + "type": "boolean", + "readOnly": true + }, + "id": { + "format": "uuid", + "type": "string" + }, + "userName": { + "type": "string" + }, + "normalizedUserName": { + "type": "string" + }, + "email": { + "type": "string" + }, + "normalizedEmail": { + "type": "string" + }, + "emailConfirmed": { + "type": "boolean" + }, + "passwordHash": { + "type": "string" + }, + "securityStamp": { + "type": "string" + }, + "concurrencyStamp": { + "type": "string" + }, + "phoneNumber": { + "type": "string" + }, + "phoneNumberConfirmed": { + "type": "boolean" + }, + "twoFactorEnabled": { + "type": "boolean" + }, + "lockoutEnd": { + "format": "date-time", + "type": "string" + }, + "lockoutEnabled": { + "type": "boolean" + }, + "accessFailedCount": { + "format": "int32", + "type": "integer" + } + } + }, + "ErpMaestro.AuthenticationServices.Client.Models.MetadataType": { + "enum": [ + "undefined", + "url", + "xml" + ], + "type": "string" + }, + "ErpMaestro.AuthenticationServices.Client.Models.SingleSignOnType": { + "enum": [ + "undefined", + "saml2", + "azureActiveDirectory", + "genericOpenId" + ], + "type": "string" + }, + "ErpMaestro.AuthenticationServices.Core.Models.Roles": { + "enum": [ + "undefined", + "iT Security", + "iT Auditor", + "iT Manager", + "chief Information Officer", + "eRP Security/ Administration", + "other" + ], + "type": "string" + }, + "ErpMaestro.AuthenticationServices.Core.Models.MaestroUserSetting": { + "type": "object", + "properties": { + "userId": { + "format": "uuid", + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.MaestroUser" + }, + "name": { + "type": "string" + }, + "value": { + "type": "string" + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Core.Models.UserCustomerSetting": { + "description": "Represents a user setting that is specific per customer user belongs to", + "type": "object", + "properties": { + "userId": { + "format": "uuid", + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.MaestroUser" + }, + "customerId": { + "format": "uuid", + "type": "string" + }, + "customer": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.MaestroCustomer" + }, + "name": { + "type": "string" + }, + "value": { + "type": "string" + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Core.Models.UserToIdentityProvider": { + "required": [ + "claimValue" + ], + "type": "object", + "properties": { + "userId": { + "format": "uuid", + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.MaestroUser" + }, + "externalIdentityProviderId": { + "format": "uuid", + "type": "string" + }, + "externalIdentityProvider": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.ExternalIdentityProvider" + }, + "claimValue": { + "maxLength": 250, + "minLength": 0, + "type": "string" + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Client.Models.V2.UserDetailsModel": { + "description": "Used to display user details including SSO names in the user management UI.", + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "Represents the user's unique identifier.", + "type": "string" + }, + "username": { + "description": "If left blank, the ErpMaestro.AuthenticationServices.Client.Models.V2.UserDetailsModel.Email property will be used.", + "type": "string" + }, + "fullName": { + "description": "Represents the user's full name.", + "type": "string" + }, + "ssoName": { + "description": "Represents the user's single sign on name.", + "type": "string" + }, + "email": { + "description": "Represents the user's email address.", + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Authorization.V2Core.Models.ImpersonationRequestModel": { + "required": [ + "userNameToImpersonate", + "reasonForImpersonation", + "selectedCustomerId" + ], + "type": "object", + "properties": { + "userNameToImpersonate": { + "type": "string" + }, + "tokenShelfLife": { + "format": "int32", + "maximum": 900, + "minimum": 1, + "type": "integer" + }, + "reasonForImpersonation": { + "type": "string" + }, + "selectedCustomerId": { + "format": "uuid", + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Models.License.LicenseModel": { + "description": "Model that represents a license for a customer (account) to use a specific module.", + "type": "object", + "properties": { + "customerId": { + "format": "uuid", + "description": "The account Id in the auth/license system.", + "type": "string" + }, + "module": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.MaestroModules" + }, + "expires": { + "format": "date-time", + "description": "The expiration date of the licensed module.", + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Models.License.SetLicenseModel": { + "description": "Model that represents a license for a customer (account) to use a specific module.", + "type": "object", + "properties": { + "module": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.MaestroModules" + }, + "expires": { + "format": "date-time", + "description": "The expiration date of the licensed module.", + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Models.SelfService.UserRegisterModel": { + "description": "Used to register new system participants.", + "required": [ + "companyName", + "industry", + "companyId", + "email", + "firstName", + "lastName", + "role", + "password", + "minUsers", + "maxUsers" + ], + "type": "object", + "properties": { + "companyName": { + "description": "Name of the company user is registering for", + "maxLength": 100, + "minLength": 0, + "type": "string" + }, + "industry": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.Industries" + }, + "companyId": { + "description": "The external unique identifier for the company in question.\r\nThis id should be a match between us and the CRM provider.\r\n(E.g.: SFDC company id - 0011a000003rd4TAAQ)", + "maxLength": 100, + "minLength": 0, + "type": "string" + }, + "companyIdType": { + "description": "The type of the external unique identifier for the company in question.\r\n(E.g.: SFDC, IBM, Oracle, etc.)", + "maxLength": 100, + "minLength": 0, + "type": "string" + }, + "email": { + "description": "Unique email address of the user", + "maxLength": 250, + "minLength": 0, + "type": "string" + }, + "firstName": { + "description": "First (given) name of the user", + "maxLength": 35, + "minLength": 0, + "type": "string" + }, + "lastName": { + "description": "Last (family) name of the user", + "maxLength": 35, + "minLength": 0, + "type": "string" + }, + "role": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.Roles" + }, + "title": { + "description": "Optional title of user at the company", + "maxLength": 250, + "minLength": 0, + "type": "string" + }, + "phone": { + "description": "Optional phone number of user at the company", + "maxLength": 30, + "minLength": 0, + "type": "string" + }, + "password": { + "description": "Password of new account", + "maxLength": 1000, + "minLength": 0, + "type": "string" + }, + "minUsers": { + "format": "int32", + "description": "Minimum number of users in company's system", + "maximum": 2147483647, + "minimum": 0, + "type": "integer" + }, + "maxUsers": { + "format": "int32", + "description": "Maximum number of users in company's system", + "maximum": 2147483647, + "minimum": 0, + "type": "integer" + } + } + }, + "ErpMaestro.AuthenticationServices.Models.SelfService.SetPasswordModel": { + "description": "Model used for setting a user's password", + "required": [ + "newPassword", + "token" + ], + "type": "object", + "properties": { + "userName": { + "description": "UserName", + "type": "string" + }, + "userId": { + "format": "uuid", + "description": "The user id.", + "type": "string" + }, + "newPassword": { + "description": "The new password to be set", + "maxLength": 1000, + "minLength": 0, + "type": "string" + }, + "token": { + "description": "The reset token sent to the user's email address. The token contains the username.", + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Models.SelfService.ChangePasswordModel": { + "required": [ + "password", + "newPassword" + ], + "type": "object", + "properties": { + "password": { + "description": "Existing user password", + "maxLength": 1000, + "minLength": 0, + "type": "string" + }, + "newPassword": { + "description": "The new password to be set", + "maxLength": 1000, + "minLength": 0, + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Core.Exceptions.IdentityException": { + "type": "object", + "properties": { + "result": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Identity.IdentityResult" + }, + "message": { + "type": "string", + "readOnly": true + }, + "data": { + "type": "object", + "additionalProperties": { + "type": "object" + }, + "readOnly": true + }, + "innerException": { + "type": "object", + "readOnly": true + }, + "stackTrace": { + "type": "string", + "readOnly": true + }, + "helpLink": { + "type": "string" + }, + "source": { + "type": "string" + }, + "hResult": { + "format": "int32", + "type": "integer", + "readOnly": true + } + } + }, + "Microsoft.AspNetCore.Identity.IdentityResult": { + "type": "object", + "properties": { + "succeeded": { + "type": "boolean", + "readOnly": true + }, + "errors": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Identity.IdentityError" + }, + "readOnly": true + } + } + }, + "Microsoft.AspNetCore.Identity.IdentityError": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Models.SelfService.RegisterCoworkerModel": { + "description": "Metadata required to register a coworker.", + "required": [ + "firstName", + "lastName", + "email", + "role" + ], + "type": "object", + "properties": { + "firstName": { + "maxLength": 35, + "minLength": 0, + "type": "string" + }, + "lastName": { + "description": "Last Name", + "maxLength": 35, + "minLength": 0, + "type": "string" + }, + "email": { + "description": "Email address", + "maxLength": 250, + "minLength": 0, + "type": "string" + }, + "title": { + "description": "Work title/ position (optional)", + "maxLength": 100, + "minLength": 0, + "type": "string" + }, + "role": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Core.Models.Roles" + } + } + }, + "Microsoft.AspNetCore.Mvc.FileStreamResult": { + "type": "object", + "properties": { + "fileStream": { + "$ref": "#/components/schemas/System.IO.Stream" + }, + "contentType": { + "type": "string", + "readOnly": true + }, + "fileDownloadName": { + "type": "string" + }, + "lastModified": { + "format": "date-time", + "type": "string" + }, + "entityTag": { + "$ref": "#/components/schemas/Microsoft.Net.Http.Headers.EntityTagHeaderValue" + }, + "enableRangeProcessing": { + "type": "boolean" + } + } + }, + "System.IO.Stream": { + "type": "object", + "properties": { + "canRead": { + "type": "boolean", + "readOnly": true + }, + "canSeek": { + "type": "boolean", + "readOnly": true + }, + "canTimeout": { + "type": "boolean", + "readOnly": true + }, + "canWrite": { + "type": "boolean", + "readOnly": true + }, + "length": { + "format": "int64", + "type": "integer", + "readOnly": true + }, + "position": { + "format": "int64", + "type": "integer" + }, + "readTimeout": { + "format": "int32", + "type": "integer" + }, + "writeTimeout": { + "format": "int32", + "type": "integer" + } + } + }, + "Microsoft.Net.Http.Headers.EntityTagHeaderValue": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/components/schemas/Microsoft.Extensions.Primitives.StringSegment" + }, + "isWeak": { + "type": "boolean", + "readOnly": true + } + } + }, + "Microsoft.Extensions.Primitives.StringSegment": { + "type": "object", + "properties": { + "buffer": { + "type": "string", + "readOnly": true + }, + "offset": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "length": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "value": { + "type": "string", + "readOnly": true + }, + "hasValue": { + "type": "boolean", + "readOnly": true + } + } + }, + "ErpMaestro.Services.ActionResults.OopsResult": { + "type": "object", + "properties": {} + }, + "ErpMaestro.AuthenticationServices.Client.Models.CreateSaml2IdentityProviderModel": { + "description": "Used to register a SAML2 External Identity Provider (IDP)\r\nfor a given customer.", + "required": [ + "key", + "entityId", + "metadata", + "metadataType", + "claimType", + "customerId" + ], + "type": "object", + "properties": { + "key": { + "description": "The \"short\" vanity name that can identify the provider. If the customer were to connect to \"https://foo.erpmaestro.com\" for SSO,\r\nthe ErpMaestro.AuthenticationServices.Client.Models.CreateSaml2IdentityProviderModel.Key would be \"foo\". Must be unique.", + "maxLength": 30, + "minLength": 0, + "type": "string" + }, + "entityId": { + "description": "The unique entity id for the remote IDP. Usually this is in the form of \"https://some.url/some/path\".\r\nMust be unique.", + "maxLength": 500, + "minLength": 0, + "type": "string" + }, + "metadata": { + "description": "For SAML2, this contains either an XML metadata document, or a URL that resolves to an XML metadata document.\r\nThe contents should be specified by the ErpMaestro.AuthenticationServices.Client.Models.CreateSaml2IdentityProviderModel.MetadataType property.", + "type": "string" + }, + "metadataType": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.MetadataType" + }, + "claimType": { + "description": "Specifies the claim type that will be matched in the SAML2 response assertion to determine who the response assertion\r\nis meant to authenticate.", + "maxLength": 500, + "minLength": 0, + "type": "string" + }, + "customerId": { + "format": "uuid", + "description": "Relates the external IDP to a specific customer. Only one IDP can exist per customer, and only one customer can have a\r\nspecific IDP.", + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Client.Models.ModifySaml2IdentityProviderModel": { + "description": "Used to modify an existing SAML2 IDP.", + "required": [ + "identityProviderId", + "key", + "entityId", + "metadata", + "metadataType", + "claimType" + ], + "type": "object", + "properties": { + "identityProviderId": { + "format": "uuid", + "description": "The unique id of the IDP.", + "type": "string" + }, + "key": { + "description": "The \"short\" vanity name that can identify the provider. If the customer were to connect to \"https://foo.erpmaestro.com\" for SSO,\r\nthe ErpMaestro.AuthenticationServices.Client.Models.ModifySaml2IdentityProviderModel.Key would be \"foo\". Must be unique.", + "maxLength": 30, + "minLength": 0, + "type": "string" + }, + "entityId": { + "description": "The unique entity id for the remote IDP. Usually this is in the form of \"https://some.url/some/path\".\r\nMust be unique.", + "maxLength": 500, + "minLength": 0, + "type": "string" + }, + "metadata": { + "description": "For SAML2, this contains either an XML metadata document, or a URL that resolves to an XML metadata document.\r\nThe contents should be specified by the ErpMaestro.AuthenticationServices.Client.Models.ModifySaml2IdentityProviderModel.MetadataType property.", + "type": "string" + }, + "metadataType": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.Models.MetadataType" + }, + "claimType": { + "description": "Specifies the claim type that will be matched in the SAML2 response assertion to determine who the response assertion\r\nis meant to authenticate.", + "maxLength": 500, + "minLength": 0, + "type": "string" + }, + "isEnabled": { + "description": "Set to false to disable authentication via this IDP.", + "type": "boolean" + } + } + }, + "ErpMaestro.AuthenticationServices.Client.Models.UserToSsoModel": { + "description": "Used to create and modify SSO User settings for customer IDPs.\r\nA user can have zero or one associations with any given IDP,\r\nprovided he/she is associated with the related customer.", + "required": [ + "userId", + "customerId", + "claimType" + ], + "type": "object", + "properties": { + "userId": { + "format": "uuid", + "type": "string" + }, + "customerId": { + "format": "uuid", + "type": "string" + }, + "claimType": { + "maxLength": 512, + "minLength": 0, + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Models.SelfService.ArmEmailConfirmationModel": { + "description": "Used to confirm a new user's email after registration", + "required": [ + "username", + "emailConfirmed" + ], + "type": "object", + "properties": { + "username": { + "description": "Represents the unique email address of the user.", + "maxLength": 250, + "minLength": 0, + "type": "string" + }, + "emailConfirmed": { + "description": "Represents a value indicating whether the user's email has been confirmed.", + "type": "boolean" + } + } + }, + "ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserModel": { + "required": [ + "email", + "username" + ], + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "Identifier of the user.", + "type": "string" + }, + "email": { + "description": "Represents the user's email address.", + "type": "string" + }, + "firstName": { + "description": "Represents the user's first name.", + "maxLength": 35, + "minLength": 0, + "type": "string" + }, + "lastName": { + "description": "Represents the user's last name.", + "maxLength": 35, + "minLength": 0, + "type": "string" + }, + "username": { + "description": "Represents the username.", + "type": "string" + }, + "erpUserId": { + "description": "Represents identifier of related ERP user.", + "maxLength": 255, + "minLength": 0, + "type": "string" + }, + "singleSignOnName": { + "description": "Represents user name for SSO.", + "maxLength": 255, + "minLength": 0, + "type": "string" + }, + "isActive": { + "description": "Is user activated.", + "type": "boolean" + }, + "accounts": { + "description": "User accounts.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserAccountModel" + } + }, + "password": { + "description": "User's password, required for onboarding.", + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubUserAccountModel": { + "type": "object", + "properties": { + "accountId": { + "format": "int32", + "type": "integer" + }, + "accountName": { + "type": "string" + }, + "roleNames": { + "description": "Represents a collection of assigned roles.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "features": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubChangePasswordModel": { + "required": [ + "email", + "newPassword" + ], + "type": "object", + "properties": { + "email": { + "description": "Represents the user's email address.", + "type": "string" + }, + "username": { + "description": "If left blank, the ErpMaestro.AuthenticationServices.Client.AuthenticatedClient.EmHub.EmHubChangePasswordModel.Email property will be used.", + "type": "string" + }, + "newPassword": { + "description": "User's password to be set.", + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Client.Models.UserModel": { + "description": "Used to view/create/update users in the system.", + "required": [ + "email", + "preferredLanguage", + "createdUtcTimestamp", + "lastModifiedUtcTimestamp" + ], + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "Represents the user's unique identifier.", + "type": "string" + }, + "email": { + "description": "Represents the user's email address.", + "type": "string" + }, + "firstName": { + "description": "Represents the user's first name.", + "maxLength": 35, + "minLength": 0, + "type": "string" + }, + "lastName": { + "description": "Represents the user's last name.", + "maxLength": 35, + "minLength": 0, + "type": "string" + }, + "username": { + "description": "If left blank, the ErpMaestro.AuthenticationServices.Client.Models.UserModel.Email property will be used.", + "type": "string" + }, + "fullName": { + "description": "Represents the user's full name.", + "type": "string" + }, + "singleSignOnName": { + "description": "Represents the user's SSO name.", + "type": "string" + }, + "identityProviderConfigured": { + "description": "Determines if identity provider is configured for selected customer.", + "type": "boolean" + }, + "roleIds": { + "description": "Represents a collection of assigned role ids.", + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + }, + "userSettings": { + "description": "Represents a collection of user settings.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isActive": { + "description": "Represents a value indicating whether the user is an active user.", + "type": "boolean" + }, + "preferredLanguage": { + "description": "Represents the code of the user's preferred language.", + "maxLength": 50, + "type": "string" + }, + "isService": { + "description": "Represents a value indicating whether the user is a service user.", + "type": "boolean" + }, + "createdUtcTimestamp": { + "format": "date-time", + "description": "Represents the date and time the user was created.", + "type": "string" + }, + "lastModifiedBy": { + "description": "Represents the user that last modified the record.", + "maxLength": 100, + "minLength": 0, + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "description": "Represents the date and time the user was updated.", + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Models.User.SetupUserModel": { + "required": [ + "emailConfirmationToken", + "password" + ], + "type": "object", + "properties": { + "emailConfirmationToken": { + "type": "string" + }, + "userId": { + "format": "uuid", + "type": "string" + }, + "password": { + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Models.User.ResetPasswordModel": { + "required": [ + "resetToken", + "password" + ], + "type": "object", + "properties": { + "resetToken": { + "type": "string" + }, + "userId": { + "format": "uuid", + "type": "string" + }, + "password": { + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Models.User.ChangePasswordModel": { + "description": "Model containing the necessary parameters to change a user's password.", + "required": [ + "userId", + "currentPassword", + "newPassword" + ], + "type": "object", + "properties": { + "userId": { + "format": "uuid", + "description": "The id of the user.", + "type": "string" + }, + "currentPassword": { + "description": "The current password.", + "type": "string" + }, + "newPassword": { + "description": "The new password.", + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Models.User.ChangeSysJobPasswordModel": { + "required": [ + "userName", + "password" + ], + "type": "object", + "properties": { + "userName": { + "type": "string" + }, + "password": { + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Models.Customer.UserAccountModel": { + "required": [ + "name" + ], + "type": "object", + "properties": { + "id": { + "format": "uuid", + "type": "string" + }, + "name": { + "maxLength": 100, + "minLength": 0, + "type": "string" + } + } + }, + "ErpMaestro.AuthenticationServices.Models.UserCustomer.UserCustomerModel": { + "type": "object", + "properties": { + "userId": { + "format": "uuid", + "description": "The ID of user customer associated with.", + "type": "string" + }, + "customerId": { + "format": "uuid", + "description": "The ID of customer user associated with.", + "type": "string" + }, + "isAdmin": { + "description": "Determines that user is admin for specified customer. As a result, user can manage other users for the customer.", + "type": "boolean" + } + } + }, + "ErpMaestro.AuthenticationServices.Core.Models.CustomerToUserRoleMappingDetails": { + "description": "Represents the relationship between customers, users and user roles.", + "type": "object", + "properties": { + "customerId": { + "format": "uuid", + "description": "The unique identifier of the customer.", + "type": "string" + }, + "userId": { + "format": "uuid", + "description": "The unique identifier of the user.", + "type": "string" + }, + "userName": { + "description": "The user's username", + "type": "string" + }, + "roleId": { + "format": "uuid", + "description": "The unique identifier of the role.", + "type": "string" + }, + "roleName": { + "description": "Represents the role name.", + "type": "string" + }, + "roleDescription": { + "description": "Represents the role description.", + "type": "string" + }, + "roleCreatedUtcTimestamp": { + "format": "date-time", + "description": "Represents the date and time the role was created.", + "type": "string" + }, + "roleLastModifiedBy": { + "description": "Represents the user who last modified the role.", + "type": "string" + }, + "roleLastModifiedUtcTimestamp": { + "format": "date-time", + "description": "Represents the date and time the role was last modified.", + "type": "string" + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + } + } + } + } + } +} \ No newline at end of file diff --git a/static/arm-api/swagger-cloud-agent.json b/static/arm-api/swagger-cloud-agent.json new file mode 100644 index 000000000..7388cb155 --- /dev/null +++ b/static/arm-api/swagger-cloud-agent.json @@ -0,0 +1,1538 @@ +{ + "openapi": "3.0.0", + "info": { + "version": "v1", + "title": "Cloud Agent API" + }, + "paths": { + "/api/Extracts/RunSecurityExtract": { + "post": { + "tags": [ + "Extracts" + ], + "summary": "Schedules a security extract to run. Returns the task ID which references that extract.", + "operationId": "RunSecurityExtract", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/RunSecurityExtractRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/RunSecurityExtractRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/RunSecurityExtractRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/RunSecurityExtractRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/RunSecurityExtractRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/RunSecurityExtractRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/RunSecurityExtractRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/RunSecurityExtractRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/RunSecurityExtractRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/RunSecurityExtractRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/RunSecurityExtractRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/RunSecurityExtractRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/RunSecurityExtractRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/RunSecurityExtractRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/RunSecurityExtractRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/RunSecurityExtractRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/RunSecurityExtractRequest" + } + } + } + }, + "responses": { + "202": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + } + } + } + }, + "/api/Extracts/ReRunSecurityExtract": { + "post": { + "tags": [ + "Extracts" + ], + "summary": "Schedules a security extract for a repeated run. Returns the task ID which references that extract.", + "operationId": "ReRunSecurityExtract", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ReRunSecurityExtractRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ReRunSecurityExtractRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ReRunSecurityExtractRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ReRunSecurityExtractRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ReRunSecurityExtractRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ReRunSecurityExtractRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ReRunSecurityExtractRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ReRunSecurityExtractRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ReRunSecurityExtractRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ReRunSecurityExtractRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ReRunSecurityExtractRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReRunSecurityExtractRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ReRunSecurityExtractRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ReRunSecurityExtractRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ReRunSecurityExtractRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ReRunSecurityExtractRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ReRunSecurityExtractRequest" + } + } + } + }, + "responses": { + "202": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + } + } + } + }, + "/api/System/ValidateConnectionInformation": { + "post": { + "tags": [ + "System" + ], + "summary": "Validates connection information for ERP system.", + "operationId": "ValidateConnectionInformation", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ValidateConnectionInfoRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ValidateConnectionInfoRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ValidateConnectionInfoRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ValidateConnectionInfoRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ValidateConnectionInfoRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ValidateConnectionInfoRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ValidateConnectionInfoRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ValidateConnectionInfoRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ValidateConnectionInfoRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ValidateConnectionInfoRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ValidateConnectionInfoRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidateConnectionInfoRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ValidateConnectionInfoRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ValidateConnectionInfoRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ValidateConnectionInfoRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ValidateConnectionInfoRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ValidateConnectionInfoRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "500": { + "description": "Server Error", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + } + } + } + }, + "/api/TaskAuditTrails": { + "get": { + "tags": [ + "TaskAuditTrails" + ], + "summary": "OData endpoint to get a collection of Task Audit Trail.", + "operationId": "Get", + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/TaskAuditTrails/{id}": { + "get": { + "tags": [ + "TaskAuditTrails" + ], + "summary": "OData endpoint to get a Task Audit Trail by its ID.", + "operationId": "Get", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of the Task Audit Trail.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/Tasks/completed": { + "post": { + "tags": [ + "Tasks" + ], + "summary": "Creates an audit trail record which indicates a task has been \"Completed\". A FileOutput record is also created.", + "operationId": "SetTaskToCompleted", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SecurityExtractModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SecurityExtractModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/SecurityExtractModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SecurityExtractModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SecurityExtractModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/SecurityExtractModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SecurityExtractModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SecurityExtractModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/SecurityExtractModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/SecurityExtractModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/SecurityExtractModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/SecurityExtractModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/SecurityExtractModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/SecurityExtractModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/SecurityExtractModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/SecurityExtractModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/SecurityExtractModel" + } + } + }, + "description": "Represents the security extract model that contains the metadata used to set the status to completed." + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/Tasks/{id}/Errored": { + "post": { + "tags": [ + "Tasks" + ], + "summary": "Creates an audit trail record which indicates a task has errored.", + "operationId": "SetTaskToErrored", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "errorMessage", + "in": "query", + "description": "", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/Tasks/{referenceId}": { + "get": { + "tags": [ + "Tasks" + ], + "summary": "Returns current status of the task.", + "operationId": "GetTaskStatus", + "parameters": [ + { + "name": "referenceId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "404": { + "description": "Not Found" + } + } + } + }, + "/api/Tasks/{referenceId}/OutputFile": { + "get": { + "tags": [ + "Tasks" + ], + "summary": "Returns output file for the specified task.", + "operationId": "GetOutputFile", + "parameters": [ + { + "name": "referenceId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "404": { + "description": "Not Found" + } + } + } + }, + "/api/Tasks/{systemId}/OutputFiles": { + "get": { + "tags": [ + "Tasks" + ], + "summary": "Returns output files for the specified system of specified type.", + "operationId": "GetOutputFiles", + "parameters": [ + { + "name": "systemId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "taskType", + "in": "query", + "description": "", + "required": false, + "schema": { + "type": "integer", + "format": "int32", + "enum": [ + 0, + 1 + ] + } + }, + { + "name": "afterDate", + "in": "query", + "description": "", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "404": { + "description": "Not Found" + } + } + } + } + }, + "components": { + "schemas": { + "RunSecurityExtractRequest": { + "required": [ + "systemId", + "createdBy" + ], + "type": "object", + "properties": { + "systemId": { + "format": "int32", + "type": "integer" + }, + "referenceId": { + "maxLength": 500, + "minLength": 0, + "type": "string" + }, + "callbackUrl": { + "maxLength": 200, + "minLength": 0, + "type": "string" + }, + "createdBy": { + "maxLength": 255, + "minLength": 0, + "type": "string" + }, + "jobRequestId": { + "format": "int32", + "type": "integer" + }, + "customerId": { + "format": "uuid", + "type": "string" + }, + "name": { + "type": "string" + }, + "rulebookId": { + "format": "int32", + "type": "integer" + }, + "useLiveExtract": { + "type": "boolean" + }, + "taskId": { + "format": "int32", + "type": "integer" + }, + "serializedConnectionInfo": { + "type": "string" + }, + "resultFilePath": { + "type": "string" + } + } + }, + "ReRunSecurityExtractRequest": { + "type": "object", + "properties": { + "referenceId": { + "maxLength": 500, + "minLength": 0, + "type": "string" + } + } + }, + "ValidateConnectionInfoRequest": { + "type": "object", + "properties": { + "systemType": { + "enum": [ + "Undefined", + "Sap", + "SuccessFactors", + "Ariba", + "Concur", + "UConnect" + ], + "type": "string" + }, + "encryptedConnectionInfo": { + "type": "string" + } + } + }, + "SecurityExtractModel": { + "type": "object", + "properties": { + "createdBy": { + "type": "string" + }, + "customerId": { + "format": "uuid", + "type": "string" + }, + "jobRequestId": { + "format": "int32", + "type": "integer" + }, + "name": { + "type": "string" + }, + "pathToExtractDb": { + "type": "string" + }, + "referenceId": { + "type": "string" + }, + "rulebookId": { + "format": "int32", + "type": "integer" + }, + "systemId": { + "format": "int32", + "type": "integer" + }, + "useLiveExtract": { + "type": "boolean" + }, + "taskId": { + "format": "int32", + "type": "integer" + } + } + } + } + } +} \ No newline at end of file diff --git a/static/arm-api/swagger-jobs.json b/static/arm-api/swagger-jobs.json new file mode 100644 index 000000000..0f142fc4b --- /dev/null +++ b/static/arm-api/swagger-jobs.json @@ -0,0 +1,27234 @@ +{ + "openapi": "3.0.0", + "info": { + "version": "1.0", + "title": "Access Risk Management Jobs Service" + }, + "paths": { + "/api/activities/history/{erpSystemId}": { + "get": { + "tags": [ + "ActivityHistory" + ], + "summary": "Gets the activity history for the specified ERP system.", + "operationId": "GetActivityHistory", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "options", + "in": "query", + "required": false + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ActivityHistoryModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ActivityHistoryModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ActivityHistoryModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ActivityHistoryModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ActivityHistoryModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ActivityHistoryModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ActivityHistoryModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ActivityHistoryModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ActivityHistoryModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ActivityHistoryModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ActivityHistoryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ActivityHistoryModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ActivityHistoryModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ActivityHistoryModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ActivityHistoryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ActivityHistoryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + } + } + }, + "/api/v2/activities/history/{erpSystemId}": { + "get": { + "tags": [ + "ActivityHistory" + ], + "summary": "Gets the activity history for the specified ERP system.", + "operationId": "GetActivityHistoryV2", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "options", + "in": "query", + "required": false + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.WebApi.Models.ODataResponse_1_ErpMaestro.JobServices.Common.Models.ActivityHistoryModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.WebApi.Models.ODataResponse_1_ErpMaestro.JobServices.Common.Models.ActivityHistoryModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.WebApi.Models.ODataResponse_1_ErpMaestro.JobServices.Common.Models.ActivityHistoryModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.WebApi.Models.ODataResponse_1_ErpMaestro.JobServices.Common.Models.ActivityHistoryModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.WebApi.Models.ODataResponse_1_ErpMaestro.JobServices.Common.Models.ActivityHistoryModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.WebApi.Models.ODataResponse_1_ErpMaestro.JobServices.Common.Models.ActivityHistoryModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.WebApi.Models.ODataResponse_1_ErpMaestro.JobServices.Common.Models.ActivityHistoryModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.WebApi.Models.ODataResponse_1_ErpMaestro.JobServices.Common.Models.ActivityHistoryModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.WebApi.Models.ODataResponse_1_ErpMaestro.JobServices.Common.Models.ActivityHistoryModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.WebApi.Models.ODataResponse_1_ErpMaestro.JobServices.Common.Models.ActivityHistoryModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.WebApi.Models.ODataResponse_1_ErpMaestro.JobServices.Common.Models.ActivityHistoryModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.WebApi.Models.ODataResponse_1_ErpMaestro.JobServices.Common.Models.ActivityHistoryModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.WebApi.Models.ODataResponse_1_ErpMaestro.JobServices.Common.Models.ActivityHistoryModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.WebApi.Models.ODataResponse_1_ErpMaestro.JobServices.Common.Models.ActivityHistoryModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.WebApi.Models.ODataResponse_1_ErpMaestro.JobServices.Common.Models.ActivityHistoryModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.WebApi.Models.ODataResponse_1_ErpMaestro.JobServices.Common.Models.ActivityHistoryModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + } + } + }, + "/api/jobs/updateStatus": { + "post": { + "tags": [ + "Job" + ], + "summary": "Updates job status.", + "operationId": "UpdateStatus", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.JobServices.Common.Models.Local.JobStatusUpdate" + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/jobs/triggerStatusUpdate/{jobId}": { + "post": { + "tags": [ + "Job" + ], + "summary": "Updates job status.", + "operationId": "TriggerStatusUpdate", + "parameters": [ + { + "name": "jobId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/jobrunner/{erpSystem}/risksnapshotjob/{customerId}": { + "post": { + "tags": [ + "JobRunner" + ], + "summary": "Runs a new Risk Snapshot Job based on the supplied Erp System type.", + "operationId": "RunRiskSnapshotJob", + "parameters": [ + { + "name": "erpSystem", + "in": "path", + "description": "Represents the Erp System type to which the Risk Snapshot job will be applied.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ] + } + }, + { + "name": "customerId", + "in": "path", + "description": "Represents the customer/account unique identifier.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotJobParametersModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotJobParametersModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotJobParametersModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotJobParametersModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotJobParametersModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotJobParametersModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotJobParametersModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotJobParametersModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotJobParametersModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotJobParametersModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotJobParametersModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotJobParametersModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotJobParametersModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotJobParametersModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotJobParametersModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotJobParametersModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotJobParametersModel" + } + } + }, + "description": "Represents the model that contains the parameters required to run the Risk Snapshot job, based on the Erp System." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/legacyJobs/updateStatus": { + "post": { + "tags": [ + "LegacyJobs" + ], + "summary": "Updates a legacy job status in AccessAnalyzer.", + "operationId": "UpdateStatus", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.JobServices.Common.Models.Local.JobStatusUpdate" + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/legacyJobs/{jobId}/parameters": { + "get": { + "tags": [ + "LegacyJobs" + ], + "summary": "Gets job parameters by job ID.", + "operationId": "GetJobParameters", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "Identifier of the job.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.JobParameters" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.JobParameters" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.JobParameters" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.JobParameters" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.JobParameters" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.JobParameters" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.JobParameters" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.JobParameters" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.JobParameters" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.JobParameters" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.JobParameters" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.JobParameters" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.JobParameters" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.JobParameters" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.JobParameters" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.JobParameters" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/lookups/rulebooks": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets the available rulebooks.", + "operationId": "GetRulebooks", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Guid_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Guid_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Guid_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Guid_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Guid_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Guid_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Guid_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Guid_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Guid_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Guid_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Guid_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Guid_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Guid_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Guid_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Guid_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Guid_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + }, + "deprecated": true + } + }, + "/api/lookups/risks": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets the available rules.", + "operationId": "GetRisks", + "parameters": [ + { + "name": "search", + "in": "query", + "description": "Optional: A value to search the results on.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "bulkSearch", + "in": "query", + "description": "Optional: A single ruleCode value, or a comma, tab or line separated list of ruleCode values to search on.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.Rule" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.Rule" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.Rule" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.Rule" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.Rule" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.Rule" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.Rule" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.Rule" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.Rule" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.Rule" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.Rule" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.Rule" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.Rule" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.Rule" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.Rule" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.Rule" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/lookups/tcodes": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a collection of transaction codes.", + "operationId": "GetTCodes", + "parameters": [ + { + "name": "options", + "in": "query", + "description": "", + "required": false + }, + { + "name": "search", + "in": "query", + "description": "Optional: A value to search the results on.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "bulkSearch", + "in": "query", + "description": "Optional: A single tcode value, or a comma, tab or line separated list of tcode values to search on.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/lookups/businessFunction/{businessFunctionId}/permissions": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a collection of permissions by Business Function Id.", + "operationId": "GetPermissionsByBusinessFunction", + "parameters": [ + { + "name": "businessFunctionId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "options", + "in": "query", + "description": "", + "required": false + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCode" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/lookups/authObjects": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a collection of authorization objects.", + "operationId": "GetAuthObjects", + "parameters": [ + { + "name": "options", + "in": "query", + "description": "", + "required": false + }, + { + "name": "search", + "in": "query", + "description": "Optional: A value to search the results on.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "bulkSearch", + "in": "query", + "description": "Optional: A single auth object value, or a comma, tab or line separated list of auth object values to search on.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObject" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObject" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObject" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObject" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObject" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObject" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObject" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObject" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObject" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObject" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObject" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObject" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObject" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObject" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObject" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObject" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/lookups/authFields": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a collection of authorization object fields.", + "operationId": "GetAuthFields", + "parameters": [ + { + "name": "options", + "in": "query", + "description": "", + "required": false + }, + { + "name": "search", + "in": "query", + "description": "Optional: A value to search the results on.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "bulkSearch", + "in": "query", + "description": "Optional: A single auth object value, or a comma, tab or line separated list of auth object values to search on.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObjectField" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObjectField" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObjectField" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObjectField" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObjectField" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObjectField" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObjectField" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObjectField" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObjectField" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObjectField" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObjectField" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObjectField" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObjectField" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObjectField" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObjectField" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObjectField" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/lookups/businessfunctions": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets the available business functions.", + "operationId": "GetBusinessFunctions", + "parameters": [ + { + "name": "search", + "in": "query", + "description": "Optional: A value to search the results on.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "bulkSearch", + "in": "query", + "description": "Optional: A single businessFunctionCode value, or a comma, tab or line separated list of businessFunctionCode values to search on.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.BusinessFunction" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.BusinessFunction" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.BusinessFunction" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.BusinessFunction" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.BusinessFunction" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.BusinessFunction" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.BusinessFunction" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.BusinessFunction" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.BusinessFunction" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.BusinessFunction" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.BusinessFunction" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.BusinessFunction" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.BusinessFunction" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.BusinessFunction" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.BusinessFunction" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.BusinessFunction" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/lookups/securityExtracts/{erpSystemId}": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets the available security extracts for the specified system.", + "operationId": "GetSecurityExtracts", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "The id of the selected ERP system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.DateTimeOffset_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.DateTimeOffset_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.DateTimeOffset_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.DateTimeOffset_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.DateTimeOffset_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.DateTimeOffset_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.DateTimeOffset_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.DateTimeOffset_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.DateTimeOffset_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.DateTimeOffset_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.DateTimeOffset_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.DateTimeOffset_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.DateTimeOffset_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.DateTimeOffset_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.DateTimeOffset_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.DateTimeOffset_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + }, + "deprecated": true + } + }, + "/api/lookups/timezones": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a collection of key/value pairs representing the available time zones.", + "operationId": "GetTimeZones", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/lookups/systemusers/{erpSystemId}/{securityExtractId}": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets the available ERP system users for the specified system and extract.", + "operationId": "GetErpSystemUsers", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "The id of the selected ERP system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "securityExtractId", + "in": "path", + "description": "The id of the selected security extract.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "search", + "in": "query", + "description": "Optional: A value to search the results on.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "bulkSearch", + "in": "query", + "description": "Optional: A single username value, or a comma, tab or line separated list of username values to search on.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ErpSystemUser" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ErpSystemUser" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ErpSystemUser" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ErpSystemUser" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ErpSystemUser" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ErpSystemUser" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ErpSystemUser" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ErpSystemUser" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ErpSystemUser" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ErpSystemUser" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ErpSystemUser" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ErpSystemUser" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ErpSystemUser" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ErpSystemUser" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ErpSystemUser" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ErpSystemUser" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/lookups/userroles": { + "post": { + "tags": [ + "Lookups" + ], + "summary": "Gets the available ERP roles for the specified system, extract and ERP users.", + "operationId": "GetUserRoles", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + }, + "deprecated": true + } + }, + "/api/lookups/userroles/search": { + "post": { + "tags": [ + "Lookups" + ], + "summary": "Gets the available ERP roles for the specified system, extract and ERP users.", + "operationId": "GetUserRoles", + "parameters": [ + { + "name": "search", + "in": "query", + "description": "Optional: A value to search the results on.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "bulkSearch", + "in": "query", + "description": "Optional: A single roleName value, or a comma, tab or line separated list of roleName values to search on.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserRolesRequestModel" + } + } + }, + "description": "Parameteres of the request." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/lookups/roleRelations/{erpSystemId}/{securityExtractId}": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets the available parent/child relationships between ERP roles for the specified system and extract.", + "operationId": "GetRoleRelations", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "The id of the selected ERP system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "securityExtractId", + "in": "path", + "description": "The id of the selected security extract.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/lookups/isUserExpired/{erpSystemId}/{securityExtractId}/{userName}": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a value indicating whether the ERP user has expired.", + "operationId": "IsUserExpired", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "The id of the selected ERP system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "securityExtractId", + "in": "path", + "description": "The id of the selected security extract.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "userName", + "in": "path", + "description": "The userName of the ERP user.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json": { + "schema": { + "type": "boolean" + } + }, + "application/xml": { + "schema": { + "type": "boolean" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "boolean" + } + }, + "text/plain": { + "schema": { + "type": "boolean" + } + }, + "text/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/lookups/systemroles": { + "post": { + "tags": [ + "Lookups" + ], + "summary": "Gets the available ERP system roles for the specified system and extract. Excluding roles assigned to the passed users.", + "operationId": "GetErpSystemRoles", + "parameters": [ + { + "name": "search", + "in": "query", + "description": "Optional: A value to search the results on.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "bulkSearch", + "in": "query", + "description": "Optional: A single roleName value, or a comma, tab or line separated list of roleName values to search on.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.FilteredErpSystemRolesModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.FilteredErpSystemRolesModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.FilteredErpSystemRolesModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.FilteredErpSystemRolesModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.FilteredErpSystemRolesModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.FilteredErpSystemRolesModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.FilteredErpSystemRolesModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.FilteredErpSystemRolesModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.FilteredErpSystemRolesModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.FilteredErpSystemRolesModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.FilteredErpSystemRolesModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.FilteredErpSystemRolesModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.FilteredErpSystemRolesModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.FilteredErpSystemRolesModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.FilteredErpSystemRolesModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.FilteredErpSystemRolesModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.FilteredErpSystemRolesModel" + } + } + }, + "description": "Parameteres of the request." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Dtos.ErpSystemRoleDto" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Dtos.ErpSystemRoleDto" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Dtos.ErpSystemRoleDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Dtos.ErpSystemRoleDto" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Dtos.ErpSystemRoleDto" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Dtos.ErpSystemRoleDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Dtos.ErpSystemRoleDto" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Dtos.ErpSystemRoleDto" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Dtos.ErpSystemRoleDto" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Dtos.ErpSystemRoleDto" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Dtos.ErpSystemRoleDto" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Dtos.ErpSystemRoleDto" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Dtos.ErpSystemRoleDto" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Dtos.ErpSystemRoleDto" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Dtos.ErpSystemRoleDto" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Dtos.ErpSystemRoleDto" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/lookups/riskratings": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a collection of risk ratings for selected rulebooks.", + "operationId": "GetRiskRatings", + "parameters": [ + { + "name": "rulebookIds", + "in": "query", + "description": "An optional collection of rulebook ids to filter.", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskRatingModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskRatingModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskRatingModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskRatingModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskRatingModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskRatingModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskRatingModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskRatingModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskRatingModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskRatingModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskRatingModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskRatingModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskRatingModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskRatingModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskRatingModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskRatingModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + }, + "deprecated": true + } + }, + "/api/lookups/businessProcesses": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a collection of business processes for selected rulebooks.", + "operationId": "GetBusinessProcesses", + "parameters": [ + { + "name": "rulebookIds", + "in": "query", + "description": "A collection of selected rulebook ids.", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.BusinessProcessModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.BusinessProcessModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.BusinessProcessModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.BusinessProcessModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.BusinessProcessModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.BusinessProcessModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.BusinessProcessModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.BusinessProcessModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.BusinessProcessModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.BusinessProcessModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.BusinessProcessModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.BusinessProcessModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.BusinessProcessModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.BusinessProcessModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.BusinessProcessModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.BusinessProcessModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + }, + "deprecated": true + } + }, + "/api/lookups/utilizationExtracts/{erpSystemId}": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a collection of utilization extracts for a selected SAP System.", + "operationId": "GetUtilizationExtracts", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "The id of the selected ERP system.", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UtilizationExtractModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UtilizationExtractModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UtilizationExtractModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UtilizationExtractModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UtilizationExtractModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UtilizationExtractModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UtilizationExtractModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UtilizationExtractModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UtilizationExtractModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UtilizationExtractModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UtilizationExtractModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UtilizationExtractModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UtilizationExtractModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UtilizationExtractModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UtilizationExtractModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UtilizationExtractModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/lookups/securityAnalysis/{erpSystemId}": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a collection of risk ratings for selected rulebooks.", + "operationId": "GetSecurityAnalysis", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "analysisType", + "in": "query", + "description": "", + "required": false, + "schema": { + "type": "string", + "enum": [ + "undefined", + "role", + "user" + ] + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.SecurityAnalysisResult" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.SecurityAnalysisResult" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.SecurityAnalysisResult" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.SecurityAnalysisResult" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.SecurityAnalysisResult" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.SecurityAnalysisResult" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.SecurityAnalysisResult" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.SecurityAnalysisResult" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.SecurityAnalysisResult" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.SecurityAnalysisResult" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.SecurityAnalysisResult" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.SecurityAnalysisResult" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.SecurityAnalysisResult" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.SecurityAnalysisResult" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.SecurityAnalysisResult" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.SecurityAnalysisResult" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + }, + "deprecated": true + } + }, + "/api/lookups/usergroups/{erpSystemId}": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a collection of ERP System User Groups.", + "operationId": "GetUserGroups", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/lookups/{erpSystemType}/rulebooks/{customerId}": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a list of rulebooks, based on the supplied erp system type and customer id.", + "operationId": "GetErpSystemRulebooks", + "parameters": [ + { + "name": "erpSystemType", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ] + } + }, + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/lookups/{erpSystemType}/rulebooks/{customerId}/no-duplicates": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a list of rulebooks, based on the supplied erp system type and customer id.", + "operationId": "GetErpSystemNoDuplicatesRulebooks", + "parameters": [ + { + "name": "erpSystemType", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ] + } + }, + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/lookups/{erpSystemType}/securityExtracts/{customerId}/{erpSystemId}": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a list of security extracts, based on the supplied erp system type and customer id.", + "operationId": "GetErpSystemSecurityExtracts", + "parameters": [ + { + "name": "erpSystemType", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ] + } + }, + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/lookups/{erpSystemType}/securityAnalysis/{customerId}/{erpSystemId}": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a list of security analyses, based on the supplied erp system type and customer id.", + "operationId": "GetErpSystemSecurityAnalyses", + "parameters": [ + { + "name": "erpSystemType", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ] + } + }, + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "analysisType", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "undefined", + "role", + "user" + ] + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.OfflineExcelReports.SecurityAnalysis" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.OfflineExcelReports.SecurityAnalysis" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.OfflineExcelReports.SecurityAnalysis" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.OfflineExcelReports.SecurityAnalysis" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.OfflineExcelReports.SecurityAnalysis" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.OfflineExcelReports.SecurityAnalysis" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.OfflineExcelReports.SecurityAnalysis" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.OfflineExcelReports.SecurityAnalysis" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.OfflineExcelReports.SecurityAnalysis" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.OfflineExcelReports.SecurityAnalysis" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.OfflineExcelReports.SecurityAnalysis" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.OfflineExcelReports.SecurityAnalysis" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.OfflineExcelReports.SecurityAnalysis" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.OfflineExcelReports.SecurityAnalysis" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.OfflineExcelReports.SecurityAnalysis" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.OfflineExcelReports.SecurityAnalysis" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/lookups/{erpSystemType}/riskratings/{rulebookId}": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a list of risk ratings, based on the supplied erp system type and rulebook id.", + "operationId": "GetErpSystemRulebookRiskRatings", + "parameters": [ + { + "name": "erpSystemType", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ] + } + }, + { + "name": "rulebookId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "rulebookIds", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/lookups/{erpSystemType}/businessprocesses/{rulebookId}": { + "get": { + "tags": [ + "Lookups" + ], + "summary": "Gets a list of business processes, based on the supplied erp system type and rulebook id.", + "operationId": "GetErpSystemRulebookBusinessProcesses", + "parameters": [ + { + "name": "erpSystemType", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ] + } + }, + { + "name": "rulebookId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "rulebookIds", + "in": "query", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": false + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/programCommandInstances/secureProvisioning": { + "post": { + "tags": [ + "ProgramCommandInstances" + ], + "summary": "Creates a new program command instance for an automated provisioning.", + "operationId": "CreateSecureProvisioningProgramCommandInstance", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AutomatedProvisioningParametersModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AutomatedProvisioningParametersModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AutomatedProvisioningParametersModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AutomatedProvisioningParametersModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AutomatedProvisioningParametersModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AutomatedProvisioningParametersModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AutomatedProvisioningParametersModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AutomatedProvisioningParametersModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AutomatedProvisioningParametersModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AutomatedProvisioningParametersModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AutomatedProvisioningParametersModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AutomatedProvisioningParametersModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AutomatedProvisioningParametersModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AutomatedProvisioningParametersModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AutomatedProvisioningParametersModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AutomatedProvisioningParametersModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AutomatedProvisioningParametersModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ProgramCommandInstance" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ProgramCommandInstance" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ProgramCommandInstance" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ProgramCommandInstance" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ProgramCommandInstance" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ProgramCommandInstance" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ProgramCommandInstance" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ProgramCommandInstance" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ProgramCommandInstance" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ProgramCommandInstance" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ProgramCommandInstance" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ProgramCommandInstance" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ProgramCommandInstance" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ProgramCommandInstance" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ProgramCommandInstance" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ProgramCommandInstance" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + } + } + } + }, + "/api/properties/risksnapshot/{jobId}": { + "get": { + "tags": [ + "Properties" + ], + "summary": "Gets the risk snapshot properties for the specified job.", + "operationId": "GetRiskSnapshotProperties", + "parameters": [ + { + "name": "jobId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotProperties" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotProperties" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotProperties" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotProperties" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotProperties" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotProperties" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotProperties" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotProperties" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotProperties" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotProperties" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotProperties" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotProperties" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotProperties" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotProperties" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotProperties" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotProperties" + } + } + } + } + } + } + }, + "/api/recurrences/{erpSystemId}": { + "get": { + "tags": [ + "Recurrences" + ], + "summary": "Gets a collection of available recurrences for the specified ERP system.", + "operationId": "GetRecurrences", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "The id of the ERP system to filter by.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceTask" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceTask" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceTask" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceTask" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceTask" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceTask" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceTask" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceTask" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceTask" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceTask" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceTask" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceTask" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceTask" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceTask" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceTask" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceTask" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/recurrences/{recurrenceId}": { + "delete": { + "tags": [ + "Recurrences" + ], + "summary": "Deletes the specified recurrence.", + "operationId": "DeleteRecurrence", + "parameters": [ + { + "name": "recurrenceId", + "in": "path", + "description": "The id of the recurrence to be deleted", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/recurrences/{recurrenceId}/rerun": { + "post": { + "tags": [ + "Recurrences" + ], + "summary": "Deletes the specified recurrence.", + "operationId": "RerunRecurrence", + "parameters": [ + { + "name": "recurrenceId", + "in": "path", + "description": "The id of the recurrence to be deleted", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/schedule/risksnapshotjob": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new risk snapshot job.", + "operationId": "ScheduleRiskSnapshot", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + } + }, + "description": "The model of the risk snapshot job to be scheduled." + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + }, + "deprecated": true + } + }, + "/api/schedule/useranalysis": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new user security analysis job.", + "operationId": "ScheduleUserAnalysis", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/schedule/roleanalysis": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new role security analysis job.", + "operationId": "ScheduleRoleAnalysis", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/schedule/dormantUsersReport": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new Dormant Users Report job.", + "operationId": "ScheduleDormantUsersReport", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.DormantUsersReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.DormantUsersReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.DormantUsersReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.DormantUsersReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.DormantUsersReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.DormantUsersReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.DormantUsersReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.DormantUsersReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.DormantUsersReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.DormantUsersReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.DormantUsersReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.DormantUsersReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.DormantUsersReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.DormantUsersReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.DormantUsersReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.DormantUsersReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.DormantUsersReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/schedule/orphanedRolesReport": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new Orphaned Roles Report job.", + "operationId": "ScheduleOrphanedRolesReport", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OrphanedRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OrphanedRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OrphanedRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OrphanedRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OrphanedRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OrphanedRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OrphanedRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OrphanedRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OrphanedRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OrphanedRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OrphanedRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OrphanedRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OrphanedRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OrphanedRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OrphanedRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OrphanedRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OrphanedRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/schedule/utilizationDeltaReport": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new Utilization Delta Report job.", + "operationId": "ScheduleUtilizationDeltaReport", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationDeltaReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationDeltaReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationDeltaReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationDeltaReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationDeltaReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationDeltaReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationDeltaReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationDeltaReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationDeltaReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationDeltaReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationDeltaReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationDeltaReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationDeltaReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationDeltaReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationDeltaReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationDeltaReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationDeltaReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/schedule/eamReportOverview": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new EAM Report Overview job.", + "operationId": "ScheduleEamReportOverviewJob", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.EamReportOverviewParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.EamReportOverviewParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.EamReportOverviewParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.EamReportOverviewParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.EamReportOverviewParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.EamReportOverviewParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.EamReportOverviewParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.EamReportOverviewParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.EamReportOverviewParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.EamReportOverviewParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.EamReportOverviewParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.EamReportOverviewParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.EamReportOverviewParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.EamReportOverviewParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.EamReportOverviewParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.EamReportOverviewParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.EamReportOverviewParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + } + }, + "description": "Job parameters." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/schedule/securityRolesReport": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new Security Roles Report job.", + "operationId": "ScheduleSecurityRolesReport", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/schedule/oneClickReport": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new One Click Report job.", + "operationId": "ScheduleOneClickReport", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OneClickReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OneClickReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OneClickReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OneClickReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OneClickReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OneClickReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OneClickReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OneClickReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OneClickReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OneClickReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OneClickReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OneClickReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OneClickReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OneClickReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OneClickReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OneClickReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OneClickReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/schedule/securityExtract": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new Security Extract.", + "operationId": "ScheduleSecurityExtract", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityExtractJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityExtractJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityExtractJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityExtractJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityExtractJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityExtractJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityExtractJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityExtractJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityExtractJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityExtractJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityExtractJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityExtractJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityExtractJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityExtractJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityExtractJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityExtractJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityExtractJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/schedule/extractcompletnessreport": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new Security Extract Complestness Report.", + "operationId": "ScheduleExtractCompletenessReport", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityExtractCompletenessParametersModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityExtractCompletenessParametersModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityExtractCompletenessParametersModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityExtractCompletenessParametersModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityExtractCompletenessParametersModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityExtractCompletenessParametersModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityExtractCompletenessParametersModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityExtractCompletenessParametersModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityExtractCompletenessParametersModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityExtractCompletenessParametersModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityExtractCompletenessParametersModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityExtractCompletenessParametersModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityExtractCompletenessParametersModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityExtractCompletenessParametersModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityExtractCompletenessParametersModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityExtractCompletenessParametersModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityExtractCompletenessParametersModel" + } + } + }, + "description": "Represents the model that contains the parameters required to schedule the report." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/schedule/utilizationExtract": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new SAP Utilization Extract.", + "operationId": "ScheduleUtilizationExtract", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationExtractParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationExtractParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationExtractParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationExtractParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationExtractParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationExtractParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationExtractParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationExtractParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationExtractParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationExtractParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationExtractParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationExtractParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationExtractParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationExtractParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationExtractParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationExtractParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationExtractParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/schedule/whatif/users": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new users WhatIf analysis.", + "operationId": "ScheduleUsersWhatIf", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfUsersJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfUsersJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfUsersJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfUsersJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfUsersJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfUsersJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfUsersJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfUsersJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfUsersJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfUsersJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfUsersJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfUsersJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfUsersJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfUsersJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfUsersJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfUsersJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfUsersJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/schedule/whatif/singlerole": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new single-role WhatIf analysis.", + "operationId": "ScheduleSingleRoleWhatIf", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfSingleRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfSingleRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfSingleRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfSingleRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfSingleRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfSingleRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfSingleRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfSingleRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfSingleRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfSingleRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfSingleRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfSingleRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfSingleRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfSingleRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfSingleRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfSingleRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfSingleRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/schedule/whatif/compositerole": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new composite-role WhatIf analysis.", + "operationId": "ScheduleCompositeRoleWhatIf", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfCompositRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfCompositRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfCompositRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfCompositRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfCompositRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfCompositRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfCompositRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfCompositRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfCompositRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfCompositRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfCompositRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfCompositRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfCompositRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfCompositRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfCompositRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfCompositRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfCompositRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/schedule/importSapRoles": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new import sap roles job.", + "operationId": "ScheduleImportSapRoles", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.ImportSapRolesInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.ImportSapRolesInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.ImportSapRolesInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.ImportSapRolesInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.ImportSapRolesInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.ImportSapRolesInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.ImportSapRolesInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.ImportSapRolesInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.ImportSapRolesInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.ImportSapRolesInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.ImportSapRolesInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.ImportSapRolesInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.ImportSapRolesInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.ImportSapRolesInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.ImportSapRolesInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.ImportSapRolesInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.ImportSapRolesInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/schedule/loadSapInfo": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules an SAP info load job.", + "operationId": "ScheduleLoadSapInfo", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.LoadSapInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.LoadSapInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.LoadSapInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.LoadSapInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.LoadSapInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.LoadSapInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.LoadSapInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.LoadSapInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.LoadSapInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.LoadSapInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.LoadSapInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.LoadSapInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.LoadSapInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.LoadSapInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.LoadSapInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.LoadSapInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.LoadSapInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/schedule/userConflictMatrixReport": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new user conflict matrix report.", + "operationId": "ScheduleUserConflictMatrixReport", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/schedule/roleConflictMatrixReport": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new role conflict matrix report.", + "operationId": "ScheduleRoleConflictMatrixReport", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/schedule/businessProcessConflictMatrixReport": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new BP Conflict Matrix Report job.", + "operationId": "ScheduleBusinessProcessConflictMatrixReport", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.BpConflictsSummaryReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.BpConflictsSummaryReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.BpConflictsSummaryReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.BpConflictsSummaryReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.BpConflictsSummaryReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.BpConflictsSummaryReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.BpConflictsSummaryReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.BpConflictsSummaryReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.BpConflictsSummaryReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.BpConflictsSummaryReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.BpConflictsSummaryReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.BpConflictsSummaryReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.BpConflictsSummaryReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.BpConflictsSummaryReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.BpConflictsSummaryReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.BpConflictsSummaryReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.BpConflictsSummaryReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/schedule/accessReview": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new Access Review job.", + "operationId": "ScheduleAccessReview", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewParametersModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewParametersModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewParametersModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewParametersModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewParametersModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewParametersModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewParametersModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewParametersModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewParametersModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewParametersModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewParametersModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewParametersModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewParametersModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewParametersModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewParametersModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewParametersModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewParametersModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/schedule/accessReview/actionLog": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new Access Review Action log job.", + "operationId": "ScheduleAccessReviewLog", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewActionLogParametersModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewActionLogParametersModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewActionLogParametersModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewActionLogParametersModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewActionLogParametersModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewActionLogParametersModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewActionLogParametersModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewActionLogParametersModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewActionLogParametersModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewActionLogParametersModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewActionLogParametersModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewActionLogParametersModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewActionLogParametersModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewActionLogParametersModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewActionLogParametersModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewActionLogParametersModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewActionLogParametersModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/schedule/accessReview/report": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new Access Review Report job.", + "operationId": "ScheduleAccessReviewReport", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewReportParametersModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewReportParametersModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewReportParametersModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewReportParametersModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewReportParametersModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewReportParametersModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewReportParametersModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewReportParametersModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewReportParametersModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewReportParametersModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewReportParametersModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewReportParametersModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewReportParametersModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewReportParametersModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewReportParametersModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewReportParametersModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewReportParametersModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/schedule/accessReview/rolesRemoval": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules Access Review roles removal.", + "operationId": "ScheduleAccessReviewRolesRemoval", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewRemoveRolesParametersModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewRemoveRolesParametersModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewRemoveRolesParametersModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewRemoveRolesParametersModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewRemoveRolesParametersModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewRemoveRolesParametersModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewRemoveRolesParametersModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewRemoveRolesParametersModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewRemoveRolesParametersModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewRemoveRolesParametersModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewRemoveRolesParametersModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewRemoveRolesParametersModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewRemoveRolesParametersModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewRemoveRolesParametersModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewRemoveRolesParametersModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewRemoveRolesParametersModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.AccessReviewRemoveRolesParametersModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/xml": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/plain": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/schedule/restart/{jobId}/{erpSystemType}": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Restarts specified job.", + "operationId": "RestartJob", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "Identifier of the job.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "erpSystemType", + "in": "path", + "description": "The ERP system type. Defaults to SAP.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ] + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/schedule/{erpSystem}/risksnapshotjob/{customerId}": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules a new Risk Snapshot Job based on the supplied Erp System type.", + "operationId": "ScheduleRiskSnapshotJob", + "parameters": [ + { + "name": "erpSystem", + "in": "path", + "description": "Represents the Erp System type to which the Risk Snapshot job will be applied.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ] + } + }, + { + "name": "customerId", + "in": "path", + "description": "Represents the customer/account unique identifier.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_" + } + } + }, + "description": "Represents the model that contains the parameters required to schedule the Risk Snapshot job, based on the Erp System." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/schedule/changeLogs": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules new Change Logs Job.", + "operationId": "ScheduleChangeLogs", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ChangeLogParametersModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ChangeLogParametersModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ChangeLogParametersModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ChangeLogParametersModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ChangeLogParametersModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ChangeLogParametersModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ChangeLogParametersModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ChangeLogParametersModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ChangeLogParametersModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ChangeLogParametersModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ChangeLogParametersModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ChangeLogParametersModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ChangeLogParametersModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ChangeLogParametersModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ChangeLogParametersModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ChangeLogParametersModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ChangeLogParametersModel" + } + } + }, + "description": "Change log parameters model." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/schedule/importUsers": { + "post": { + "tags": [ + "Scheduler" + ], + "summary": "Schedules new Import Users job.", + "operationId": "ScheduleImportUsersJob", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ImportUsersParametersModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ImportUsersParametersModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ImportUsersParametersModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ImportUsersParametersModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ImportUsersParametersModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ImportUsersParametersModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ImportUsersParametersModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ImportUsersParametersModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ImportUsersParametersModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ImportUsersParametersModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ImportUsersParametersModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ImportUsersParametersModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ImportUsersParametersModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ImportUsersParametersModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ImportUsersParametersModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ImportUsersParametersModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ImportUsersParametersModel" + } + } + }, + "description": "Import Users parameters." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/securityAnalysis/analysisCompleted": { + "post": { + "tags": [ + "SecurityAnalysis" + ], + "summary": "Sends a message to the message bus when an analysis completes.", + "operationId": "AnalysisCompleted", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json-patch+json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/*+json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/securityAnalysis/{jobId}/conflicts": { + "get": { + "tags": [ + "SecurityAnalysis" + ], + "summary": "Gets a collection of conflicts based on the provided security analysis.", + "operationId": "GetSecurityAnalysisConflicts", + "parameters": [ + { + "name": "jobId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "search", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "bulkSearch", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityAnalisysParametersModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityAnalisysParametersModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityAnalisysParametersModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityAnalisysParametersModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityAnalisysParametersModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityAnalisysParametersModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityAnalisysParametersModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityAnalisysParametersModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityAnalisysParametersModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityAnalisysParametersModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityAnalisysParametersModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityAnalisysParametersModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityAnalisysParametersModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityAnalisysParametersModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityAnalisysParametersModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityAnalisysParametersModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "application/xml": { + "schema": { + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "string" + } + }, + "text/plain": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object" + } + }, + "application/json": { + "schema": { + "type": "object" + } + }, + "application/xml": { + "schema": { + "type": "object" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object" + } + }, + "text/plain": { + "schema": { + "type": "object" + } + }, + "text/json": { + "schema": { + "type": "object" + } + } + } + } + } + } + }, + "/api/whatif/resultslist/{erpSystemId}": { + "get": { + "tags": [ + "WhatIfAnalysis" + ], + "summary": "Gets a list of the available WhatIf analysis results.", + "operationId": "GetWhatIfAnalysisResults", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/whatif/{jobId}/type": { + "get": { + "tags": [ + "WhatIfAnalysis" + ], + "summary": "Gets the type of WhatIf for specified job.", + "operationId": "GetWhatIfType", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "Identifier of the job.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.WhatIfType" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.WhatIfType" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.WhatIfType" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.WhatIfType" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.WhatIfType" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.WhatIfType" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.WhatIfType" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.WhatIfType" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.WhatIfType" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.WhatIfType" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.WhatIfType" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.WhatIfType" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.WhatIfType" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.WhatIfType" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.WhatIfType" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.WhatIfType" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/whatif/results/{jobId}": { + "get": { + "tags": [ + "WhatIfAnalysis" + ], + "summary": "Gets the WhatIf analysis results for the specified job.", + "operationId": "GetWhatIfAnalysisResult", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job that produced the analysis result.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + }, + "deprecated": true + } + }, + "/api/whatif/results/{jobId}/{analysisType}": { + "get": { + "tags": [ + "WhatIfAnalysis" + ], + "summary": "Gets the WhatIf analysis results for the specified job and analysis type.", + "operationId": "GetWhatIfAnalysisResult", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "Identifier of WhatIf job.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "analysisType", + "in": "path", + "description": "Type of analysis results to show.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "role", + "user" + ] + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithRuleHitsModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithRuleHitsModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithRuleHitsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithRuleHitsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithRuleHitsModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithRuleHitsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithRuleHitsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithRuleHitsModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithRuleHitsModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithRuleHitsModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithRuleHitsModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithRuleHitsModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithRuleHitsModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithRuleHitsModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithRuleHitsModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithRuleHitsModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/whatif/results/{jobId}/permissionHits/{ruleId}": { + "get": { + "tags": [ + "WhatIfAnalysis" + ], + "summary": "Gets the WhatIf analysis results for the specified job and its permission hits.", + "operationId": "GetBusinessFunctionHits", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job that produced the analysis result.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "ruleId", + "in": "path", + "description": "The id of the rule to search for.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + }, + "deprecated": true + } + }, + "/api/whatif/results/{jobId}/{analysisType}/ruleHits/{ruleId}": { + "get": { + "tags": [ + "WhatIfAnalysis" + ], + "summary": "Gets the WhatIf analysis results for the specified job and its permission hits.", + "operationId": "GetBusinessFunctionHits", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job that produced the analysis result.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "ruleId", + "in": "path", + "description": "The id of the rule to search for.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "analysisType", + "in": "path", + "description": "Type of analysis results to show.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "role", + "user" + ] + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithPermissionHitsModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithPermissionHitsModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithPermissionHitsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithPermissionHitsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithPermissionHitsModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithPermissionHitsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithPermissionHitsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithPermissionHitsModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithPermissionHitsModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithPermissionHitsModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithPermissionHitsModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithPermissionHitsModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithPermissionHitsModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithPermissionHitsModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithPermissionHitsModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithPermissionHitsModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/whatif/results/{jobId}/comments": { + "get": { + "tags": [ + "WhatIfAnalysis" + ], + "summary": "Gets the WhatIf analysis results comments for the specified job.", + "operationId": "GetWhatIfAnalysisResultComments", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job that produced the analysis result.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + }, + "deprecated": true + }, + "post": { + "tags": [ + "WhatIfAnalysis" + ], + "summary": "Adds a comment to the WhatIf analysis results for the specified job.", + "operationId": "AddWhatIfAnalysisResultComments", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job that produced the analysis result.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.JobServices.Common.Models.CommentModel" + }, + "responses": { + "200": { + "description": "Success" + } + }, + "deprecated": true + } + }, + "/api/whatif/results/{jobId}/{analysisType}/comments": { + "get": { + "tags": [ + "WhatIfAnalysis" + ], + "summary": "Gets the WhatIf analysis results comments for the specified job and type.", + "operationId": "GetWhatIfAnalysisResultComments", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job that produced the analysis result.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "analysisType", + "in": "path", + "description": "Type of analysis results to show.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "role", + "user" + ] + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + }, + "post": { + "tags": [ + "WhatIfAnalysis" + ], + "summary": "Adds a comment to the WhatIf analysis results for the specified job.", + "operationId": "AddWhatIfAnalysisResultComments", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job that produced the analysis result.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "analysisType", + "in": "path", + "description": "Type of analysis results to show.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "role", + "user" + ] + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.JobServices.Common.Models.CommentModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/whatif/results/{jobId}/ruleHit/{ruleId}/comments": { + "get": { + "tags": [ + "WhatIfAnalysis" + ], + "summary": "Gets the WhatIf analysis results rule hit comments for the specified job.", + "operationId": "GetWhatIfAnalysisRuleHitComments", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job that produced the analysis result.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "ruleId", + "in": "path", + "description": "The id of the rule hit in question.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + }, + "post": { + "tags": [ + "WhatIfAnalysis" + ], + "summary": "Adds a new comment to the WhatIf analysis results rule hit specified.", + "operationId": "AddWhatIfAnalysisRuleHitComments", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job that produced the analysis result.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "ruleId", + "in": "path", + "description": "The id of the rule hit in question.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.JobServices.Common.Models.CommentModel" + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/whatif/reportkey/{jobId}": { + "get": { + "tags": [ + "WhatIfAnalysis" + ], + "summary": "Gets the WhatIf analysis report key for the specified job.", + "operationId": "GetWhatIfAnalysisReportKey", + "parameters": [ + { + "name": "jobId", + "in": "path", + "description": "The id of the job that produced the analysis result.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + } + } + } + } + }, + "components": { + "requestBodies": { + "ErpMaestro.JobServices.Common.Models.CommentModel": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + } + }, + "description": "The comments model with the information to add.", + "required": true + }, + "ErpMaestro.JobServices.Common.Models.Local.JobStatusUpdate": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.Local.JobStatusUpdate" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.Local.JobStatusUpdate" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.Local.JobStatusUpdate" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.Local.JobStatusUpdate" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.Local.JobStatusUpdate" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.Local.JobStatusUpdate" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.Local.JobStatusUpdate" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.Local.JobStatusUpdate" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.Local.JobStatusUpdate" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.Local.JobStatusUpdate" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.Local.JobStatusUpdate" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.Local.JobStatusUpdate" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.Local.JobStatusUpdate" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.Local.JobStatusUpdate" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.Local.JobStatusUpdate" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.Local.JobStatusUpdate" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.Local.JobStatusUpdate" + } + } + }, + "required": true + } + }, + "schemas": { + "Microsoft.AspNetCore.Http.HttpRequest": { + "type": "object", + "properties": { + "httpContext": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.HttpContext" + }, + "method": { + "type": "string" + }, + "scheme": { + "type": "string" + }, + "isHttps": { + "type": "boolean" + }, + "host": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.HostString" + }, + "pathBase": { + "type": "string" + }, + "path": { + "type": "string" + }, + "queryString": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.QueryString" + }, + "query": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_Microsoft.Extensions.Primitives.StringValues_Microsoft.Extensions.Primitives_Version_3.0.0.0_Culture_neutral_PublicKeyToken_adb9793829ddae60_" + } + }, + "protocol": { + "type": "string" + }, + "headers": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "readOnly": true + }, + "cookies": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + }, + "contentLength": { + "format": "int64", + "type": "integer" + }, + "contentType": { + "type": "string" + }, + "body": { + "$ref": "#/components/schemas/System.IO.Stream" + }, + "hasFormContentType": { + "type": "boolean", + "readOnly": true + }, + "form": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_Microsoft.Extensions.Primitives.StringValues_Microsoft.Extensions.Primitives_Version_3.0.0.0_Culture_neutral_PublicKeyToken_adb9793829ddae60_" + } + } + } + }, + "Microsoft.AspNet.OData.ODataQueryContext": { + "type": "object", + "properties": { + "defaultQuerySettings": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.DefaultQuerySettings" + }, + "model": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmModel" + }, + "elementType": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmType" + }, + "navigationSource": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmNavigationSource" + }, + "elementClrType": { + "type": "string", + "readOnly": true + }, + "path": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Routing.ODataPath" + }, + "requestContainer": { + "$ref": "#/components/schemas/System.IServiceProvider" + } + } + }, + "Microsoft.AspNet.OData.Query.ODataRawQueryOptions": { + "type": "object", + "properties": { + "filter": { + "type": "string", + "readOnly": true + }, + "apply": { + "type": "string", + "readOnly": true + }, + "orderBy": { + "type": "string", + "readOnly": true + }, + "top": { + "type": "string", + "readOnly": true + }, + "skip": { + "type": "string", + "readOnly": true + }, + "select": { + "type": "string", + "readOnly": true + }, + "expand": { + "type": "string", + "readOnly": true + }, + "count": { + "type": "string", + "readOnly": true + }, + "format": { + "type": "string", + "readOnly": true + }, + "skipToken": { + "type": "string", + "readOnly": true + }, + "deltaToken": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.AspNet.OData.Query.SelectExpandQueryOption": { + "type": "object", + "properties": { + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "rawSelect": { + "type": "string", + "readOnly": true + }, + "rawExpand": { + "type": "string", + "readOnly": true + }, + "validator": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.Validators.SelectExpandQueryValidator" + }, + "selectExpandClause": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.SelectExpandClause" + }, + "levelsMaxLiteralExpansionDepth": { + "format": "int32", + "type": "integer" + } + } + }, + "Microsoft.AspNet.OData.Query.ApplyQueryOption": { + "type": "object", + "properties": { + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "resultClrType": { + "type": "string", + "readOnly": true + }, + "applyClause": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.Aggregation.ApplyClause" + }, + "rawValue": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.AspNet.OData.Query.FilterQueryOption": { + "type": "object", + "properties": { + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "validator": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.Validators.FilterQueryValidator" + }, + "filterClause": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.FilterClause" + }, + "rawValue": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.AspNet.OData.Query.OrderByQueryOption": { + "type": "object", + "properties": { + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "orderByNodes": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.OrderByNode" + }, + "readOnly": true + }, + "rawValue": { + "type": "string", + "readOnly": true + }, + "validator": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.Validators.OrderByQueryValidator" + }, + "orderByClause": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.OrderByClause" + } + } + }, + "Microsoft.AspNet.OData.Query.SkipQueryOption": { + "type": "object", + "properties": { + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "rawValue": { + "type": "string", + "readOnly": true + }, + "value": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "validator": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.Validators.SkipQueryValidator" + } + } + }, + "Microsoft.AspNet.OData.Query.TopQueryOption": { + "type": "object", + "properties": { + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "rawValue": { + "type": "string", + "readOnly": true + }, + "value": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "validator": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.Validators.TopQueryValidator" + } + } + }, + "Microsoft.AspNet.OData.Query.CountQueryOption": { + "type": "object", + "properties": { + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "rawValue": { + "type": "string", + "readOnly": true + }, + "value": { + "type": "boolean", + "readOnly": true + }, + "validator": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.Validators.CountQueryValidator" + } + } + }, + "Microsoft.AspNet.OData.Query.Validators.ODataQueryValidator": { + "type": "object", + "properties": {} + }, + "Microsoft.AspNetCore.Http.HttpContext": { + "type": "object", + "properties": { + "features": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Type_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.Object_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + }, + "readOnly": true + }, + "request": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.HttpRequest" + }, + "response": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.HttpResponse" + }, + "connection": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.ConnectionInfo" + }, + "webSockets": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.WebSocketManager" + }, + "user": { + "$ref": "#/components/schemas/System.Security.Claims.ClaimsPrincipal" + }, + "items": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "requestServices": { + "$ref": "#/components/schemas/System.IServiceProvider" + }, + "requestAborted": { + "$ref": "#/components/schemas/System.Threading.CancellationToken" + }, + "traceIdentifier": { + "type": "string" + }, + "session": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.ISession" + } + } + }, + "Microsoft.AspNetCore.Http.HostString": { + "type": "object", + "properties": { + "value": { + "type": "string", + "readOnly": true + }, + "hasValue": { + "type": "boolean", + "readOnly": true + }, + "host": { + "type": "string", + "readOnly": true + }, + "port": { + "format": "int32", + "type": "integer", + "readOnly": true + } + } + }, + "Microsoft.AspNetCore.Http.QueryString": { + "type": "object", + "properties": { + "value": { + "type": "string", + "readOnly": true + }, + "hasValue": { + "type": "boolean", + "readOnly": true + } + } + }, + "System.IO.Stream": { + "type": "object", + "properties": { + "canRead": { + "type": "boolean", + "readOnly": true + }, + "canSeek": { + "type": "boolean", + "readOnly": true + }, + "canTimeout": { + "type": "boolean", + "readOnly": true + }, + "canWrite": { + "type": "boolean", + "readOnly": true + }, + "length": { + "format": "int64", + "type": "integer", + "readOnly": true + }, + "position": { + "format": "int64", + "type": "integer" + }, + "readTimeout": { + "format": "int32", + "type": "integer" + }, + "writeTimeout": { + "format": "int32", + "type": "integer" + } + } + }, + "Microsoft.AspNet.OData.Query.DefaultQuerySettings": { + "type": "object", + "properties": { + "enableExpand": { + "type": "boolean" + }, + "enableSelect": { + "type": "boolean" + }, + "enableCount": { + "type": "boolean" + }, + "enableOrderBy": { + "type": "boolean" + }, + "enableFilter": { + "type": "boolean" + }, + "maxTop": { + "format": "int32", + "type": "integer" + } + } + }, + "Microsoft.OData.Edm.IEdmModel": { + "type": "object", + "properties": { + "schemaElements": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmSchemaElement" + }, + "readOnly": true + }, + "vocabularyAnnotations": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.Vocabularies.IEdmVocabularyAnnotation" + }, + "readOnly": true + }, + "referencedModels": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmModel" + }, + "readOnly": true + }, + "declaredNamespaces": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true + }, + "directValueAnnotationsManager": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.Vocabularies.IEdmDirectValueAnnotationsManager" + }, + "entityContainer": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmEntityContainer" + } + } + }, + "Microsoft.OData.Edm.IEdmType": { + "type": "object", + "properties": { + "typeKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmTypeKind" + } + } + }, + "Microsoft.OData.Edm.IEdmNavigationSource": { + "type": "object", + "properties": { + "navigationPropertyBindings": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmNavigationPropertyBinding" + }, + "readOnly": true + }, + "path": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmPathExpression" + }, + "type": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmType" + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.AspNet.OData.Routing.ODataPath": { + "type": "object", + "properties": { + "edmType": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmType" + }, + "navigationSource": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmNavigationSource" + }, + "segments": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.ODataPathSegment" + }, + "readOnly": true + }, + "pathTemplate": { + "type": "string", + "readOnly": true + }, + "path": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.ODataPathSegment" + }, + "readOnly": true + } + } + }, + "System.IServiceProvider": { + "type": "object", + "properties": {} + }, + "Microsoft.AspNet.OData.Query.Validators.SelectExpandQueryValidator": { + "type": "object", + "properties": {} + }, + "Microsoft.OData.UriParser.SelectExpandClause": { + "type": "object", + "properties": { + "selectedItems": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.SelectItem" + }, + "readOnly": true + }, + "allSelected": { + "type": "boolean", + "readOnly": true + } + } + }, + "Microsoft.OData.UriParser.Aggregation.ApplyClause": { + "type": "object", + "properties": { + "transformations": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.Aggregation.TransformationNode" + }, + "readOnly": true + } + } + }, + "Microsoft.AspNet.OData.Query.Validators.FilterQueryValidator": { + "type": "object", + "properties": {} + }, + "Microsoft.OData.UriParser.FilterClause": { + "type": "object", + "properties": { + "expression": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.SingleValueNode" + }, + "rangeVariable": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.RangeVariable" + }, + "itemType": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmTypeReference" + } + } + }, + "Microsoft.AspNet.OData.Query.OrderByNode": { + "type": "object", + "properties": { + "direction": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.OrderByDirection" + } + } + }, + "Microsoft.AspNet.OData.Query.Validators.OrderByQueryValidator": { + "type": "object", + "properties": {} + }, + "Microsoft.OData.UriParser.OrderByClause": { + "type": "object", + "properties": { + "thenBy": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.OrderByClause" + }, + "expression": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.SingleValueNode" + }, + "direction": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.OrderByDirection" + }, + "rangeVariable": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.RangeVariable" + }, + "itemType": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmTypeReference" + } + } + }, + "Microsoft.AspNet.OData.Query.Validators.SkipQueryValidator": { + "type": "object", + "properties": {} + }, + "Microsoft.AspNet.OData.Query.Validators.TopQueryValidator": { + "type": "object", + "properties": {} + }, + "Microsoft.AspNet.OData.Query.Validators.CountQueryValidator": { + "type": "object", + "properties": {} + }, + "Microsoft.AspNetCore.Http.HttpResponse": { + "type": "object", + "properties": { + "httpContext": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.HttpContext" + }, + "statusCode": { + "format": "int32", + "type": "integer" + }, + "headers": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "readOnly": true + }, + "body": { + "$ref": "#/components/schemas/System.IO.Stream" + }, + "contentLength": { + "format": "int64", + "type": "integer" + }, + "contentType": { + "type": "string" + }, + "cookies": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.IResponseCookies" + }, + "hasStarted": { + "type": "boolean", + "readOnly": true + } + } + }, + "Microsoft.AspNetCore.Http.ConnectionInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "remoteIpAddress": { + "$ref": "#/components/schemas/System.Net.IPAddress" + }, + "remotePort": { + "format": "int32", + "type": "integer" + }, + "localIpAddress": { + "$ref": "#/components/schemas/System.Net.IPAddress" + }, + "localPort": { + "format": "int32", + "type": "integer" + }, + "clientCertificate": { + "$ref": "#/components/schemas/System.Security.Cryptography.X509Certificates.X509Certificate2" + } + } + }, + "Microsoft.AspNetCore.Http.WebSocketManager": { + "type": "object", + "properties": { + "isWebSocketRequest": { + "type": "boolean", + "readOnly": true + }, + "webSocketRequestedProtocols": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true + } + } + }, + "System.Security.Claims.ClaimsPrincipal": { + "type": "object", + "properties": { + "claims": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Security.Claims.Claim" + }, + "readOnly": true + }, + "identities": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Security.Claims.ClaimsIdentity" + }, + "readOnly": true + }, + "identity": { + "$ref": "#/components/schemas/System.Security.Principal.IIdentity" + } + } + }, + "System.Threading.CancellationToken": { + "type": "object", + "properties": { + "isCancellationRequested": { + "type": "boolean", + "readOnly": true + }, + "canBeCanceled": { + "type": "boolean", + "readOnly": true + }, + "waitHandle": { + "$ref": "#/components/schemas/System.Threading.WaitHandle" + } + } + }, + "Microsoft.AspNetCore.Http.ISession": { + "type": "object", + "properties": { + "isAvailable": { + "type": "boolean", + "readOnly": true + }, + "id": { + "type": "string", + "readOnly": true + }, + "keys": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true + } + } + }, + "Microsoft.OData.Edm.IEdmSchemaElement": { + "type": "object", + "properties": { + "schemaElementKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmSchemaElementKind" + }, + "namespace": { + "type": "string", + "readOnly": true + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.OData.Edm.Vocabularies.IEdmVocabularyAnnotation": { + "type": "object", + "properties": { + "qualifier": { + "type": "string", + "readOnly": true + }, + "term": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.Vocabularies.IEdmTerm" + }, + "target": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.Vocabularies.IEdmVocabularyAnnotatable" + }, + "value": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmExpression" + } + } + }, + "Microsoft.OData.Edm.Vocabularies.IEdmDirectValueAnnotationsManager": { + "type": "object", + "properties": {} + }, + "Microsoft.OData.Edm.IEdmEntityContainer": { + "type": "object", + "properties": { + "elements": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmEntityContainerElement" + }, + "readOnly": true + }, + "schemaElementKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmSchemaElementKind" + }, + "namespace": { + "type": "string", + "readOnly": true + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.OData.Edm.EdmTypeKind": { + "enum": [ + "none", + "primitive", + "entity", + "complex", + "collection", + "entityReference", + "enum", + "typeDefinition", + "untyped", + "path" + ], + "type": "string" + }, + "Microsoft.OData.Edm.IEdmNavigationPropertyBinding": { + "type": "object", + "properties": { + "navigationProperty": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmNavigationProperty" + }, + "target": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmNavigationSource" + }, + "path": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmPathExpression" + } + } + }, + "Microsoft.OData.Edm.IEdmPathExpression": { + "type": "object", + "properties": { + "pathSegments": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true + }, + "path": { + "type": "string", + "readOnly": true + }, + "expressionKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmExpressionKind" + } + } + }, + "Microsoft.OData.UriParser.ODataPathSegment": { + "type": "object", + "properties": { + "edmType": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmType" + }, + "identifier": { + "type": "string" + } + } + }, + "Microsoft.OData.UriParser.SelectItem": { + "type": "object", + "properties": {} + }, + "Microsoft.OData.UriParser.Aggregation.TransformationNode": { + "type": "object", + "properties": { + "kind": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.Aggregation.TransformationNodeKind" + } + } + }, + "Microsoft.OData.UriParser.SingleValueNode": { + "type": "object", + "properties": { + "typeReference": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmTypeReference" + }, + "kind": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.QueryNodeKind" + } + } + }, + "Microsoft.OData.UriParser.RangeVariable": { + "type": "object", + "properties": { + "name": { + "type": "string", + "readOnly": true + }, + "typeReference": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmTypeReference" + }, + "kind": { + "format": "int32", + "type": "integer", + "readOnly": true + } + } + }, + "Microsoft.OData.Edm.IEdmTypeReference": { + "type": "object", + "properties": { + "isNullable": { + "type": "boolean", + "readOnly": true + }, + "definition": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmType" + } + } + }, + "Microsoft.OData.UriParser.OrderByDirection": { + "enum": [ + "ascending", + "descending" + ], + "type": "string" + }, + "Microsoft.AspNetCore.Http.IResponseCookies": { + "type": "object", + "properties": {} + }, + "System.Net.IPAddress": { + "type": "object", + "properties": { + "addressFamily": { + "$ref": "#/components/schemas/System.Net.Sockets.AddressFamily" + }, + "scopeId": { + "format": "int64", + "type": "integer" + }, + "isIPv6Multicast": { + "type": "boolean", + "readOnly": true + }, + "isIPv6LinkLocal": { + "type": "boolean", + "readOnly": true + }, + "isIPv6SiteLocal": { + "type": "boolean", + "readOnly": true + }, + "isIPv6Teredo": { + "type": "boolean", + "readOnly": true + }, + "isIPv4MappedToIPv6": { + "type": "boolean", + "readOnly": true + } + } + }, + "System.Security.Cryptography.X509Certificates.X509Certificate2": { + "type": "object", + "properties": { + "archived": { + "type": "boolean" + }, + "extensions": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "object" + }, + "readOnly": true + }, + "friendlyName": { + "type": "string" + }, + "hasPrivateKey": { + "type": "boolean", + "readOnly": true + }, + "privateKey": { + "$ref": "#/components/schemas/System.Security.Cryptography.AsymmetricAlgorithm" + }, + "issuerName": { + "$ref": "#/components/schemas/System.Security.Cryptography.X509Certificates.X500DistinguishedName" + }, + "notAfter": { + "format": "date-time", + "type": "string", + "readOnly": true + }, + "notBefore": { + "format": "date-time", + "type": "string", + "readOnly": true + }, + "publicKey": { + "$ref": "#/components/schemas/System.Security.Cryptography.X509Certificates.PublicKey" + }, + "rawData": { + "format": "byte", + "type": "string", + "readOnly": true + }, + "serialNumber": { + "type": "string", + "readOnly": true + }, + "signatureAlgorithm": { + "$ref": "#/components/schemas/System.Security.Cryptography.Oid" + }, + "subjectName": { + "$ref": "#/components/schemas/System.Security.Cryptography.X509Certificates.X500DistinguishedName" + }, + "thumbprint": { + "type": "string", + "readOnly": true + }, + "version": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "handle": { + "type": "object", + "readOnly": true + }, + "issuer": { + "type": "string", + "readOnly": true + }, + "subject": { + "type": "string", + "readOnly": true + } + } + }, + "System.Security.Claims.Claim": { + "type": "object", + "properties": { + "issuer": { + "type": "string", + "readOnly": true + }, + "originalIssuer": { + "type": "string", + "readOnly": true + }, + "properties": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "readOnly": true + }, + "subject": { + "$ref": "#/components/schemas/System.Security.Claims.ClaimsIdentity" + }, + "type": { + "type": "string", + "readOnly": true + }, + "value": { + "type": "string", + "readOnly": true + }, + "valueType": { + "type": "string", + "readOnly": true + } + } + }, + "System.Security.Claims.ClaimsIdentity": { + "type": "object", + "properties": { + "authenticationType": { + "type": "string", + "readOnly": true + }, + "isAuthenticated": { + "type": "boolean", + "readOnly": true + }, + "actor": { + "$ref": "#/components/schemas/System.Security.Claims.ClaimsIdentity" + }, + "bootstrapContext": { + "type": "object" + }, + "claims": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Security.Claims.Claim" + }, + "readOnly": true + }, + "label": { + "type": "string" + }, + "name": { + "type": "string", + "readOnly": true + }, + "nameClaimType": { + "type": "string", + "readOnly": true + }, + "roleClaimType": { + "type": "string", + "readOnly": true + } + } + }, + "System.Security.Principal.IIdentity": { + "type": "object", + "properties": { + "authenticationType": { + "type": "string", + "readOnly": true + }, + "isAuthenticated": { + "type": "boolean", + "readOnly": true + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "System.Threading.WaitHandle": { + "type": "object", + "properties": { + "safeWaitHandle": { + "$ref": "#/components/schemas/Microsoft.Win32.SafeHandles.SafeWaitHandle" + } + } + }, + "Microsoft.OData.Edm.EdmSchemaElementKind": { + "enum": [ + "none", + "typeDefinition", + "term", + "action", + "entityContainer", + "function" + ], + "type": "string" + }, + "Microsoft.OData.Edm.Vocabularies.IEdmTerm": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmTypeReference" + }, + "appliesTo": { + "type": "string", + "readOnly": true + }, + "defaultValue": { + "type": "string", + "readOnly": true + }, + "schemaElementKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmSchemaElementKind" + }, + "namespace": { + "type": "string", + "readOnly": true + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.OData.Edm.Vocabularies.IEdmVocabularyAnnotatable": { + "type": "object", + "properties": {} + }, + "Microsoft.OData.Edm.IEdmExpression": { + "type": "object", + "properties": { + "expressionKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmExpressionKind" + } + } + }, + "Microsoft.OData.Edm.IEdmEntityContainerElement": { + "type": "object", + "properties": { + "containerElementKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmContainerElementKind" + }, + "container": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmEntityContainer" + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.OData.Edm.IEdmNavigationProperty": { + "type": "object", + "properties": { + "partner": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmNavigationProperty" + }, + "onDelete": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmOnDeleteAction" + }, + "containsTarget": { + "type": "boolean", + "readOnly": true + }, + "referentialConstraint": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmReferentialConstraint" + }, + "propertyKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmPropertyKind" + }, + "type": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmTypeReference" + }, + "declaringType": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmStructuredType" + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.OData.Edm.EdmExpressionKind": { + "enum": [ + "none", + "binaryConstant", + "booleanConstant", + "dateTimeOffsetConstant", + "decimalConstant", + "floatingConstant", + "guidConstant", + "integerConstant", + "stringConstant", + "durationConstant", + "null", + "record", + "collection", + "path", + "if", + "cast", + "isType", + "functionApplication", + "labeledExpressionReference", + "labeled", + "propertyPath", + "navigationPropertyPath", + "dateConstant", + "timeOfDayConstant", + "enumMember", + "annotationPath" + ], + "type": "string" + }, + "Microsoft.OData.UriParser.Aggregation.TransformationNodeKind": { + "enum": [ + "aggregate", + "groupBy", + "filter", + "compute" + ], + "type": "string" + }, + "Microsoft.OData.UriParser.QueryNodeKind": { + "enum": [ + "none", + "constant", + "convert", + "nonResourceRangeVariableReference", + "binaryOperator", + "unaryOperator", + "singleValuePropertyAccess", + "collectionPropertyAccess", + "singleValueFunctionCall", + "any", + "collectionNavigationNode", + "singleNavigationNode", + "singleValueOpenPropertyAccess", + "singleResourceCast", + "all", + "collectionResourceCast", + "resourceRangeVariableReference", + "singleResourceFunctionCall", + "collectionFunctionCall", + "collectionResourceFunctionCall", + "namedFunctionParameter", + "parameterAlias", + "entitySet", + "keyLookup", + "searchTerm", + "collectionOpenPropertyAccess", + "collectionComplexNode", + "singleComplexNode", + "count", + "singleValueCast", + "collectionPropertyNode", + "aggregatedCollectionPropertyNode", + "in", + "collectionConstant" + ], + "type": "string" + }, + "System.Net.Sockets.AddressFamily": { + "enum": [ + "unknown", + "unspecified", + "unix", + "interNetwork", + "impLink", + "pup", + "chaos", + "nS", + "ipx", + "iso", + "osi", + "ecma", + "dataKit", + "ccitt", + "sna", + "decNet", + "dataLink", + "lat", + "hyperChannel", + "appleTalk", + "netBios", + "voiceView", + "fireFox", + "banyan", + "atm", + "interNetworkV6", + "cluster", + "ieee12844", + "irda", + "networkDesigners", + "max" + ], + "type": "string" + }, + "System.Security.Cryptography.AsymmetricAlgorithm": { + "type": "object", + "properties": { + "keySize": { + "format": "int32", + "type": "integer" + }, + "legalKeySizes": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Security.Cryptography.KeySizes" + }, + "readOnly": true + }, + "signatureAlgorithm": { + "type": "string", + "readOnly": true + }, + "keyExchangeAlgorithm": { + "type": "string", + "readOnly": true + } + } + }, + "System.Security.Cryptography.X509Certificates.X500DistinguishedName": { + "type": "object", + "properties": { + "name": { + "type": "string", + "readOnly": true + }, + "oid": { + "$ref": "#/components/schemas/System.Security.Cryptography.Oid" + }, + "rawData": { + "format": "byte", + "type": "string" + } + } + }, + "System.Security.Cryptography.X509Certificates.PublicKey": { + "type": "object", + "properties": { + "encodedKeyValue": { + "$ref": "#/components/schemas/System.Security.Cryptography.AsnEncodedData" + }, + "encodedParameters": { + "$ref": "#/components/schemas/System.Security.Cryptography.AsnEncodedData" + }, + "key": { + "$ref": "#/components/schemas/System.Security.Cryptography.AsymmetricAlgorithm" + }, + "oid": { + "$ref": "#/components/schemas/System.Security.Cryptography.Oid" + } + } + }, + "System.Security.Cryptography.Oid": { + "type": "object", + "properties": { + "value": { + "type": "string" + }, + "friendlyName": { + "type": "string" + } + } + }, + "Microsoft.Win32.SafeHandles.SafeWaitHandle": { + "type": "object", + "properties": { + "isInvalid": { + "type": "boolean", + "readOnly": true + }, + "isClosed": { + "type": "boolean", + "readOnly": true + } + } + }, + "Microsoft.OData.Edm.EdmContainerElementKind": { + "enum": [ + "none", + "entitySet", + "actionImport", + "functionImport", + "singleton" + ], + "type": "string" + }, + "Microsoft.OData.Edm.EdmOnDeleteAction": { + "enum": [ + "none", + "cascade" + ], + "type": "string" + }, + "Microsoft.OData.Edm.IEdmReferentialConstraint": { + "type": "object", + "properties": { + "propertyPairs": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmReferentialConstraintPropertyPair" + }, + "readOnly": true + } + } + }, + "Microsoft.OData.Edm.EdmPropertyKind": { + "enum": [ + "none", + "structural", + "navigation" + ], + "type": "string" + }, + "Microsoft.OData.Edm.IEdmStructuredType": { + "type": "object", + "properties": { + "isAbstract": { + "type": "boolean", + "readOnly": true + }, + "isOpen": { + "type": "boolean", + "readOnly": true + }, + "baseType": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmStructuredType" + }, + "declaredProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmProperty" + }, + "readOnly": true + }, + "typeKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmTypeKind" + } + } + }, + "System.Security.Cryptography.KeySizes": { + "type": "object", + "properties": { + "minSize": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "maxSize": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "skipSize": { + "format": "int32", + "type": "integer", + "readOnly": true + } + } + }, + "System.Security.Cryptography.AsnEncodedData": { + "type": "object", + "properties": { + "oid": { + "$ref": "#/components/schemas/System.Security.Cryptography.Oid" + }, + "rawData": { + "format": "byte", + "type": "string" + } + } + }, + "Microsoft.OData.Edm.EdmReferentialConstraintPropertyPair": { + "type": "object", + "properties": { + "dependentProperty": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmStructuralProperty" + }, + "principalProperty": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmStructuralProperty" + } + } + }, + "Microsoft.OData.Edm.IEdmProperty": { + "type": "object", + "properties": { + "propertyKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmPropertyKind" + }, + "type": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmTypeReference" + }, + "declaringType": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmStructuredType" + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.OData.Edm.IEdmStructuralProperty": { + "type": "object", + "properties": { + "defaultValueString": { + "type": "string", + "readOnly": true + }, + "propertyKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmPropertyKind" + }, + "type": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmTypeReference" + }, + "declaringType": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmStructuredType" + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "ErpMaestro.JobServices.Common.Models.ActivityHistoryModel": { + "description": "Represents the activity history model.", + "type": "object", + "properties": { + "id": { + "description": "The id of the activity.", + "type": "string" + }, + "jobName": { + "description": "The name of the job activity.", + "type": "string" + }, + "jobType": { + "description": "The type of the job activity.", + "type": "string" + }, + "jobStatus": { + "description": "The status of the job activity.", + "type": "string" + }, + "jobResult": { + "description": "The result of the job activity.", + "type": "string" + }, + "description": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ActivityHistoryDescriptionModel" + }, + "createdBy": { + "description": "The user who created the activity.", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "description": "The date the activity was created.", + "type": "string" + }, + "completionDate": { + "format": "date-time", + "description": "The date the activity was completed.", + "type": "string" + }, + "fileId": { + "description": "Represents the file unique identifier. This value could be an int or a guid.", + "type": "string" + }, + "fileType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.FileType" + }, + "fileName": { + "description": "Represents the download file name.", + "type": "string" + }, + "metadata": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ActivityHistoryMetadata" + }, + "externalReference": { + "description": "Represents external reference that externally identifies object", + "type": "string" + } + } + }, + "ErpMaestro.JobServices.Common.Models.ActivityHistoryDescriptionModel": { + "description": "Represents the model for the activity history descriptions.", + "type": "object", + "properties": { + "title": { + "description": "The title of the description model.", + "type": "string" + }, + "items": { + "description": "The description items.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "ErpMaestro.JobServices.Common.Enumerations.FileType": { + "enum": [ + "undefined", + "securityExtract", + "utilizationExtract", + "securityAnalysisResult", + "report", + "ruleBookExtract", + "whatIfAnalysisResult", + "importResult", + "sapChangeDocumentExtract", + "exportResult", + "accessReviewEmailTemplate", + "accessReviewRolesRemovalReport", + "rulebookLog", + "changeLogs" + ], + "type": "string" + }, + "ErpMaestro.JobServices.Common.Models.ActivityHistoryMetadata": { + "description": "Represents the Activity History metadata item.", + "type": "object", + "properties": { + "isSecureProvisioningJob": { + "description": "Represents the [IsSecureProvisioningJob] flag.", + "type": "boolean" + }, + "accessReviewId": { + "format": "uuid", + "description": "Represents the unique [AccessReviewId] identifier.", + "type": "string" + } + } + }, + "ErpMaestro.JobServices.Common.Models.Local.JobStatusUpdate": { + "description": "Request to update job status", + "required": [ + "jobId", + "jobStatus" + ], + "type": "object", + "properties": { + "jobId": { + "format": "int32", + "description": "Job's id to update", + "type": "integer" + }, + "jobStatus": { + "description": "A new job status", + "type": "string" + }, + "jobResultText": { + "description": "Job status details", + "type": "string" + }, + "completionDate": { + "format": "date-time", + "description": "Completion date", + "type": "string" + }, + "executionTimeInSeconds": { + "format": "int32", + "description": "Execution time in seconds", + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.RiskSnapshotJobParametersModel": { + "description": "Serves as the Risk Snapshot job parameter model for SuccessFactors systems.", + "required": [ + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "customerId": { + "format": "uuid", + "description": "Represents customer Id", + "type": "string" + }, + "accountId": { + "format": "int32", + "description": "Represents legacy AccountId", + "type": "integer" + }, + "jobType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.JobType" + }, + "requestCreatedDate": { + "format": "date-time", + "description": "Represents the date and time the request was created.", + "type": "string" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "rulebookId": { + "format": "int32", + "description": "Represents the rulebook unique identifier.", + "type": "integer" + }, + "securityExtractId": { + "format": "int32", + "description": "Represents the security extract unique identifier.", + "type": "integer" + }, + "useLiveExtract": { + "description": "Serves as a flag to determine if a live security is intended to be used.\r\nWhen true, a security extract is created, otherwise, the SecurityExtractId\r\nwill be used.", + "type": "boolean" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Enumerations.JobType": { + "enum": [ + "securityAnalysisJob", + "whatIfAnalysisJob", + "whatIfAnalysisCompositeJob", + "whatIfAnalysisReportJob", + "securityRolesReportJob", + "roleConflictsMatrixReportJob", + "utilizationDeltaReportJob", + "loadSapInfoJob", + "loadSapRolesInfoJob", + "importSapRolesInfoJob", + "emImportRuleBooksJob", + "grcImportRuleBooksJob", + "userConflictsMatrixReportJob", + "bPConflictsSummaryReportJob", + "userBasedSecurityAnalysisJob", + "roleBasedSecurityAnalysisJob", + "conflictReportsJob", + "extractCompletenessReportJob", + "riskSnapshotJob", + "snapshotExportJob", + "rulebookExportJob", + "sapChangesExportJob", + "userRoleReviewsJob", + "accessReviewReport", + "importSapUsersJob", + "accessReviewActionLog", + "rulebookDetailsReviewsJob", + "userRiskReviewsJob", + "roleTcodeReviewsJob", + "riskMitigatingControlReviewsJob", + "secureProvisioningConflictAnalysisJob", + "orphanedRolesReportJob", + "dormantUsersReportJob", + "securityExtract", + "multiSystemRulebookImportJob", + "eamReportOverview", + "sfRiskSnapshotJob", + "changeLogs", + "importUsers" + ], + "type": "string" + }, + "ErpMaestro.Services.Common.Models.Enums.ErpSystemType": { + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ], + "type": "string" + }, + "ErpMaestro.JobServices.Common.Parameters.JobParameters": { + "description": "Job Parameters are the parameters that are passed in to the job that determine how it executes.", + "type": "object", + "properties": { + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "jobType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.JobType" + }, + "jobId": { + "format": "int32", + "description": "Represents the f of the job.", + "type": "integer" + }, + "accountId": { + "format": "int32", + "description": "Represents the id of the account.", + "type": "integer" + }, + "sapSystemId": { + "format": "int32", + "description": "Represents the id of the ERP system.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user who created the job.", + "type": "string" + }, + "updatedBy": { + "description": "Represents the user who updated the job.", + "type": "string" + }, + "requestCreatedDate": { + "format": "date-time", + "description": "Represents the date the job request was created.", + "type": "string" + }, + "isRiskSnapshotJob": { + "description": "Represents a value indicating whether the job is a Risk Snapshot.", + "type": "boolean", + "readOnly": true + }, + "recurrenceId": { + "format": "uuid", + "description": "Represents the id of the recurrence of the job.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "frontEndApplicationType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.FrontEndApplicationType" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the unique erp system identifier.", + "type": "integer" + }, + "email": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + } + } + }, + "ErpMaestro.JobServices.Common.Enumerations.FrontEndApplicationType": { + "enum": [ + "undefined", + "legacy", + "gaia" + ], + "type": "string" + }, + "ErpMaestro.JobServices.Common.Entities.Rule": { + "description": "Represents a rulebook rule (or risks).", + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "The unique identifier of the rule.", + "type": "string" + }, + "ruleCode": { + "description": "A value representing the rule code.", + "type": "string" + }, + "ruleName": { + "description": "A value representing the rule name.", + "type": "string" + }, + "ruleType": { + "description": "A value representing the rule type.\r\nE.g.: SOD, SEN.", + "type": "string" + }, + "riskRating": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.RiskRatingLookup" + }, + "businessFunctionCodes": { + "description": "A value representing a comma separated list of business function codes associated with the rule.", + "type": "string" + } + } + }, + "ErpMaestro.JobServices.Common.Enumerations.RiskRatingLookup": { + "enum": [ + "informational", + "low", + "medium", + "high", + "critical" + ], + "type": "string" + }, + "ErpMaestro.JobServices.Common.Models.TransactionCode": { + "description": "Represents a transaction code object.", + "type": "object", + "properties": { + "tCode": { + "description": "Represents the transaction code.", + "type": "string" + }, + "description": { + "description": "Represents the transaction code description.", + "type": "string" + }, + "objects": { + "description": "Represents the collection of objects assigned to this TCode.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObject" + } + } + } + }, + "ErpMaestro.JobServices.Common.Models.TransactionCodeObject": { + "description": "Represents a TCode authorization object.", + "type": "object", + "properties": { + "name": { + "description": "The name of the TCode authorization object.", + "type": "string" + }, + "fields": { + "description": "A collection of TCode authorization fields.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.TransactionCodeObjectField" + } + } + } + }, + "ErpMaestro.JobServices.Common.Models.TransactionCodeObjectField": { + "description": "Represents a TCode authorization object field.", + "type": "object", + "properties": { + "name": { + "description": "The name of the authorization object field.", + "type": "string" + }, + "from": { + "description": "The starting value of the authorization object field.", + "type": "string" + }, + "to": { + "description": "The ending value of the authorization object field.", + "type": "string" + } + } + }, + "ErpMaestro.JobServices.Common.Entities.BusinessFunction": { + "description": "Represents a business function.", + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "Represents the unique identifier for the business function.", + "type": "string" + }, + "accountId": { + "format": "int32", + "description": "Represents the id of the account the business function belongs to.", + "type": "integer" + }, + "businessFunctionCode": { + "description": "Represents the business function code.", + "type": "string" + }, + "businessFunctionName": { + "description": "Represents the business function name.", + "type": "string" + }, + "businessFunctionDescription": { + "description": "Represents the business function description.", + "type": "string" + }, + "tCodes": { + "description": "Represents a collection of transaction codes associated with the ErpMaestro.JobServices.Common.Entities.BusinessFunction.TCodesCsv value.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true + } + } + }, + "ErpMaestro.JobServices.Common.Entities.ErpSystemUser": { + "description": "Object model that represents an ERP system user.", + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "Represents the user id.", + "type": "string" + }, + "username": { + "description": "Represents the user's class.", + "type": "string" + }, + "firstName": { + "description": "Represents the user's first name.", + "type": "string" + }, + "lastName": { + "description": "Represents the user's last name.", + "type": "string" + }, + "fullName": { + "description": "Represents the user's last name.", + "type": "string" + }, + "userGroup": { + "description": "Represents the group this user is a part of.", + "type": "string" + }, + "email": { + "description": "Represents the email address of the user.", + "type": "string" + }, + "isEmployee": { + "description": "Represents a value indicating whether the user is an employee.", + "type": "boolean" + }, + "createdBy": { + "description": "Represents the name of the user who created this record.", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "description": "Represents the date this record was created.", + "type": "string" + }, + "lockFlag": { + "format": "int32", + "description": "User Lock Status.", + "type": "integer" + }, + "validFrom": { + "format": "date-time", + "description": "User valid from.", + "type": "string" + }, + "validTo": { + "format": "date-time", + "description": "User valid to.", + "type": "string" + }, + "isExpired": { + "description": "Represents a value specifying whether the user is expired.", + "type": "boolean", + "readOnly": true + }, + "userType": { + "description": "User Type.", + "type": "string" + }, + "managerUserId": { + "format": "uuid", + "type": "string" + }, + "managerUserName": { + "type": "string" + }, + "managerFullName": { + "type": "string" + }, + "jobTitle": { + "type": "string" + }, + "department": { + "type": "string" + }, + "city": { + "type": "string" + }, + "state": { + "type": "string" + }, + "country": { + "type": "string" + }, + "costCenter": { + "type": "string" + }, + "alternativeUserName": { + "type": "string" + }, + "customAttribute1": { + "type": "string" + }, + "customAttribute2": { + "type": "string" + }, + "customAttribute3": { + "type": "string" + }, + "userRoles": { + "description": "User roles.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ErpSystemUserRole" + } + } + } + }, + "ErpMaestro.JobServices.Common.Entities.ErpSystemUserRole": { + "type": "object", + "properties": { + "id": { + "format": "uuid", + "type": "string" + }, + "erpSystemUserId": { + "format": "uuid", + "type": "string" + }, + "roleName": { + "type": "string" + }, + "validFrom": { + "format": "date-time", + "type": "string" + }, + "validTo": { + "format": "date-time", + "type": "string" + }, + "erpSystemUser": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.ErpSystemUser" + } + } + }, + "ErpMaestro.JobServices.Common.Models.UserRolesRequestModel": { + "type": "object", + "properties": { + "erpSystemId": { + "format": "int32", + "type": "integer" + }, + "securityExtractId": { + "format": "int32", + "type": "integer" + }, + "userIds": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + }, + "excludeInactiveRoles": { + "type": "boolean" + } + } + }, + "ErpMaestro.JobServices.Common.Models.ErpSystemUserRoleDto": { + "type": "object", + "properties": { + "id": { + "format": "uuid", + "type": "string" + }, + "roleId": { + "format": "uuid", + "type": "string" + }, + "roleName": { + "type": "string" + }, + "roleLocationName": { + "type": "string" + }, + "userName": { + "type": "string" + }, + "description": { + "type": "string" + }, + "validFrom": { + "format": "date-time", + "type": "string" + }, + "validTo": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.JobServices.Common.Models.FilteredErpSystemRolesModel": { + "description": "Model for GetErpSystemRoles request with exclude roles assigned to specific users filter.", + "type": "object", + "properties": { + "erpSystemId": { + "format": "int32", + "description": "ERP system ID.", + "type": "integer" + }, + "excludeUserIds": { + "description": "Collection of user ids. The roles assigned to these users will be excluded from the result set.", + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + }, + "roleType": { + "description": "Role type.", + "enum": [ + "undefined", + "composite", + "single" + ], + "type": "string" + } + } + }, + "ErpMaestro.JobServices.Common.Dtos.ErpSystemRoleDto": { + "description": "Object DTO that represents an ERP system role.", + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "Represents the ERP system role unique identifier.", + "type": "string" + }, + "roleName": { + "description": "Represents the ERP system role name.", + "type": "string" + }, + "roleType": { + "description": "Represents the type of role.", + "enum": [ + "undefined", + "composite", + "single" + ], + "type": "string" + }, + "description": { + "description": "Represents a collection of ERP system role description.", + "type": "string" + }, + "roleLocationId": { + "format": "uuid", + "description": "Represents the ERP system role location id.", + "type": "string" + }, + "roleLocationName": { + "description": "Represents the ERP system role location name.", + "type": "string" + }, + "refreshDescriptionFromErp": { + "description": "Represents a value indicating whether to refresh the description from the ERP system.", + "type": "boolean" + }, + "createdBy": { + "description": "Represents the user that created the ERP system role.", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "description": "Represents the date the ERP system role was created.", + "type": "string" + }, + "updatedBy": { + "description": "Represents the user that last updated the ERP system role.", + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "description": "Represents the date last updated the ERP system role.", + "type": "string" + }, + "childrenRoles": { + "description": "Represents names of child roles.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "ErpMaestro.JobServices.Common.Models.RiskRatingModel": { + "type": "object", + "properties": { + "riskRatingId": { + "format": "int32", + "type": "integer" + }, + "riskRatingText": { + "type": "string" + } + } + }, + "ErpMaestro.JobServices.Common.Models.BusinessProcessModel": { + "type": "object", + "properties": { + "businessProcessCode": { + "type": "string" + }, + "accountId": { + "format": "int32", + "type": "integer" + }, + "businessProcessName": { + "type": "string" + }, + "businessProcessDescription": { + "type": "string" + }, + "businessProcessId": { + "format": "uuid", + "type": "string" + } + } + }, + "ErpMaestro.JobServices.Common.Models.UtilizationExtractModel": { + "type": "object", + "properties": { + "id": { + "format": "int32", + "type": "integer" + }, + "text": { + "type": "string", + "readOnly": true + }, + "periodStart": { + "format": "date-time", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.JobServices.Common.Enumerations.AnalysisType": { + "enum": [ + "undefined", + "role", + "user" + ], + "type": "string" + }, + "ErpMaestro.JobServices.Common.Entities.SecurityAnalysisResult": { + "description": "Represents a security analysis result record.", + "type": "object", + "properties": { + "id": { + "format": "int32", + "description": "Represents the id of the analysis result.", + "type": "integer" + }, + "type": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.AnalysisType" + }, + "name": { + "description": "Represents the name of the analysis result.", + "type": "string" + }, + "analysisDate": { + "format": "date-time", + "description": "Represents the date of the analysis result.", + "type": "string" + }, + "jobId": { + "format": "int32", + "description": "Represents the id of the job to which the analysis result refers.", + "type": "integer" + }, + "sourceExtractDate": { + "format": "date-time", + "description": "Represents the date of the source extract.", + "type": "string" + }, + "fileName": { + "description": "Name of the Security Analysis file.", + "type": "string" + }, + "fileSizeInBytes": { + "format": "int64", + "description": "Size of a file.", + "type": "integer" + }, + "createdBy": { + "description": "The user who created the analysis.", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "description": "The date the analysis was created.", + "type": "string" + }, + "fileUri": { + "description": "Represents the URI of the file.", + "type": "string" + } + } + }, + "ErpMaestro.JobServices.Common.Models.OfflineExcelReports.SecurityAnalysis": { + "description": "Serves as the item used to model the security analysis.", + "type": "object", + "properties": { + "analysisDate": { + "description": "Represents the formatted analysis date.", + "type": "string" + }, + "analysisName": { + "description": "Represents the formatted name of the analysis.", + "type": "string" + }, + "extractDate": { + "description": "Represents the formatted name of the extract.", + "type": "string" + }, + "analysisId": { + "format": "int32", + "description": "Represents the unique analysis identifier.", + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.AutomatedProvisioningParametersModel": { + "description": "Parameters model for the automated provisioning.", + "required": [ + "request", + "erpSystemId" + ], + "type": "object", + "properties": { + "request": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.SecureProvisioningRequest" + }, + "requiresRecurrenceJobParameters": { + "description": "Specifies whether the recurrence for the current agent command\r\nrequires the job parameters. For example, under the current implementation\r\nof the agent's security extract, job parameters are not needed to be\r\npresent in the recurrence record. Default value is true.", + "type": "boolean", + "readOnly": true + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Entities.SecureProvisioningRequest": { + "description": "Represents an entity for Secure Provisioning Request.", + "type": "object", + "properties": { + "secureProvisioningRequestId": { + "format": "uuid", + "description": "Identifier of the request.", + "type": "string" + }, + "provisioningAgentConnectorId": { + "format": "uuid", + "description": "Identifier of related agent connector.", + "type": "string" + }, + "accountId": { + "format": "int32", + "description": "Identifier of related account.", + "type": "integer" + }, + "securityExtractId": { + "format": "int32", + "description": "Identifier of related security extract.", + "type": "integer" + }, + "requestedBy": { + "description": "Name of the requester.", + "type": "string" + }, + "requestedFor": { + "description": "Name of the user for secure provisioning.", + "type": "string" + }, + "secureProvisioningStateLevel2": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.SecureProvisioningState" + }, + "roleChangesSerialized": { + "description": "Represents serialized object with changed roles.", + "type": "string" + }, + "requestActivitiesSerialized": { + "description": "Represents serialized object with request activities.", + "type": "string" + }, + "completionDate": { + "format": "date-time", + "description": "Date of the completion.", + "type": "string" + }, + "createdBy": { + "description": "Name of the user that created request.", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "description": "Created date.", + "type": "string" + }, + "updatedBy": { + "description": "Name of the user that updated request last time.", + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "description": "Updated date.", + "type": "string" + }, + "resultsText": { + "description": "Result of the request.", + "type": "string" + }, + "jobId": { + "format": "int32", + "description": "Identifier of related job.", + "type": "integer" + }, + "sapSystemId": { + "format": "int32", + "description": "Identifier of related SAP system.", + "type": "integer" + }, + "enableManagerApprovals": { + "description": "Determines if request if enabled for approval by manager.", + "type": "boolean" + } + } + }, + "ErpMaestro.JobServices.Common.Enumerations.SecureProvisioningState": { + "enum": [ + "draft", + "queuedForConflictCheck", + "checkingForConflicts", + "readyToSubmitForApproval", + "waitingOnRoleApproval", + "waitingOnRuleApproval", + "requestFullyApprovedAndAwaitingProvisioning", + "provisioningApprovedRequest", + "completedWithError", + "requestRejected", + "requestCancelled", + "success", + "errorCheckingForConflicts", + "waitingOnManagerApproval" + ], + "type": "string" + }, + "ErpMaestro.JobServices.Common.Entities.ProgramCommandInstance": { + "description": "Represents the program command instance entity.", + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "The command instance unique identifier.", + "type": "string" + }, + "programCommandId": { + "format": "uuid", + "type": "string" + }, + "programInstanceId": { + "format": "uuid", + "type": "string" + }, + "payload": { + "type": "string" + }, + "state": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "status": { + "type": "string" + }, + "erpSystemId": { + "format": "int32", + "type": "integer" + }, + "checkedOnDate": { + "format": "date-time", + "type": "string" + }, + "recurrenceId": { + "format": "uuid", + "description": "The recurrence id.", + "type": "string" + }, + "recurrence": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Entities.Recurrence" + } + } + }, + "ErpMaestro.JobServices.Common.Entities.Recurrence": { + "description": "Represents the recurrence entity.", + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "Represents the recurrence id.", + "type": "string" + }, + "name": { + "description": "Represents the recurrence name.", + "type": "string" + }, + "sapSystemId": { + "format": "int32", + "description": "Represents the recurrence SapSystem system.", + "type": "integer" + }, + "recurrenceType": { + "description": "Represents the recurrence type.\r\nIMPORTANT: This was changed from ErpMaestro.JobServices.Common.Enumerations.RecurrenceType to System.String\r\ndue to technical constrains with OData filters. It should not be considered the norm.", + "type": "string" + }, + "createdBy": { + "description": "Represents the user who created the recurrence.", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "description": "Represents the recurrence created date.", + "type": "string" + }, + "updatedBy": { + "description": "Represents the user who updated the recurrence.", + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "description": "Represents the recurrence updated date.", + "type": "string" + }, + "frequency": { + "description": "Represents the recurrence frequency description.", + "type": "string" + }, + "timeZone": { + "description": "Represents the recurrence time zone description.", + "type": "string" + }, + "lastRunDate": { + "format": "date-time", + "description": "Represents the recurrence last run date.", + "type": "string" + }, + "nextRunDate": { + "format": "date-time", + "description": "Represents the recurrence next run date.", + "type": "string" + } + } + }, + "ErpMaestro.JobServices.Common.Models.RiskSnapshotProperties": { + "type": "object", + "properties": { + "utilizationExtracts": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "createdBy": { + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "jobId": { + "format": "int32", + "type": "integer" + }, + "jobName": { + "type": "string" + }, + "accountId": { + "format": "int32", + "type": "integer" + }, + "ruleBooks": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "erpSystem": { + "type": "string" + }, + "extractDate": { + "format": "date-time", + "type": "string" + }, + "extractId": { + "format": "int32", + "type": "integer" + }, + "usedLiveSecurityExtract": { + "type": "boolean" + }, + "usedLiveUtilizationExtract": { + "type": "boolean" + } + } + }, + "ErpMaestro.JobServices.Common.Models.RecurrenceTask": { + "type": "object", + "properties": { + "id": { + "format": "uuid", + "type": "string" + }, + "displayId": { + "type": "string", + "readOnly": true + }, + "name": { + "type": "string" + }, + "erpSystemId": { + "format": "int32", + "type": "integer" + }, + "type": { + "description": "IMPORTANT: This was changed from ErpMaestro.JobServices.Common.Enumerations.RecurrenceType to System.String\r\ndue to technical constrains with OData filters. It should not be considered the norm.", + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "frequency": { + "type": "string" + }, + "timeZone": { + "type": "string" + }, + "lastRunDate": { + "format": "date-time", + "type": "string" + }, + "nextRunDate": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel": { + "description": "Represents the risk snapshot job parameters model.", + "required": [ + "rulebookIds", + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "useLiveUtilizationExtracts": { + "description": "Represents a value indicating whether to use live utilization extracts.", + "type": "boolean" + }, + "monthsOfUtilizations": { + "format": "int32", + "description": "Represents the number of months of utilizations to use for the job.", + "maximum": 12, + "minimum": 1, + "type": "integer" + }, + "securityExtractId": { + "format": "int32", + "description": "Represents the id of the security extract to use for the job.", + "type": "integer" + }, + "useLiveExtract": { + "description": "Represents a value indicating whether to use a live extract.", + "type": "boolean" + }, + "rulebookIds": { + "description": "Represents a collection of the rulebook ids to use for the job.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "object" + } + }, + "includeAdminLockedUsers": { + "description": "// Represents a value indicating whether to include users locked by an admin.", + "type": "boolean" + }, + "includeCommunication": { + "description": "// Represents a value indicating whether to include communication users.", + "type": "boolean" + }, + "includeDialog": { + "description": "// Represents a value indicating whether to include dialog users.", + "type": "boolean" + }, + "includeExpiredUsers": { + "description": "// Represents a value indicating whether to include expired users.", + "type": "boolean" + }, + "includeFailedLoginUsers": { + "description": "// Represents a value indicating whether to include users with failed logins.", + "type": "boolean" + }, + "includeReference": { + "description": "// Represents a value indicating whether to include reference users.", + "type": "boolean" + }, + "includeService": { + "description": "// Represents a value indicating whether to include service users.", + "type": "boolean" + }, + "includeSystem": { + "description": "// Represents a value indicating whether to include system users.", + "type": "boolean" + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.RecurrenceModel": { + "description": "Object model for the recurrence information.", + "required": [ + "name", + "frequency" + ], + "type": "object", + "properties": { + "name": { + "description": "Represents the recurrence name.", + "type": "string" + }, + "frequency": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.RecurrenceFrequency" + }, + "timeZoneId": { + "description": "Represents the recurrence time zone id.", + "type": "string" + }, + "dayOfMonth": { + "format": "int32", + "description": "Represents the recurrence day of the month (1-31).", + "maximum": 31, + "minimum": 1, + "type": "integer" + }, + "dayOfWeek": { + "description": "Represents the recurrence day of the week (Sun-Sat).", + "enum": [ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" + ], + "type": "string" + }, + "time": { + "description": "Represents the recurrence time of the day (hh:mm).", + "type": "string" + } + } + }, + "ErpMaestro.JobServices.Common.Enumerations.RecurrenceFrequency": { + "enum": [ + "none", + "monthly", + "weekly", + "daily" + ], + "type": "string" + }, + "ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel": { + "description": "Represents the object model for the user analysis parameters.", + "required": [ + "rulebookIds", + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "securityAnalysisType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.AnalysisType" + }, + "includeDialog": { + "description": "Represents a value indicating whether to include the dialog.", + "type": "boolean" + }, + "includeSystem": { + "description": "Represents a value indicating whether to include the system.", + "type": "boolean" + }, + "includeReference": { + "description": "Represents a value indicating whether to include the dialog.", + "type": "boolean" + }, + "includeCommunication": { + "description": "Represents a value indicating whether to include the communication.", + "type": "boolean" + }, + "includeService": { + "description": "Represents a value indicating whether to include the service.", + "type": "boolean" + }, + "includeExpiredUsers": { + "description": "Represents a value indicating whether to include expired users.", + "type": "boolean" + }, + "includeAdminLockedUsers": { + "description": "Represents a value indicating whether to include administrator-locked users.", + "type": "boolean" + }, + "includeFailedLoginUsers": { + "description": "Represents a value indicating whether to include failed login users.", + "type": "boolean" + }, + "includeUsers": { + "description": "Represents a value indicating whether to include the users.", + "type": "boolean" + }, + "users": { + "description": "Represents a collection of ErpMaestro.JobServices.Common.Entities.ErpSystemUser for the analysis.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SapUserDto" + } + }, + "securityExtractId": { + "format": "int32", + "description": "Represents the id of the security extract to use for the job.", + "type": "integer" + }, + "useLiveExtract": { + "description": "Represents a value indicating whether to use a live extract.", + "type": "boolean" + }, + "rulebookIds": { + "description": "Represents a collection of the rulebook ids to use for the job.", + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + }, + "futureJobRequest": { + "description": "Represents a future job request model.", + "type": "object" + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.SapUserDto": { + "description": "Represents the SAP user dto object as required by the EmHub controllers.\r\nThis has been introduced to satisfy posting recurrences to the EmHub.", + "type": "object", + "properties": { + "username": { + "description": "Gets or set the username of the user.", + "type": "string" + } + } + }, + "ErpMaestro.JobServices.Common.Models.RoleAnalysisParametersModel": { + "description": "Represents the object model for the role analysis parameters.", + "required": [ + "rulebookIds", + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "securityAnalysisType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.AnalysisType" + }, + "includeExpiredRoles": { + "description": "Represents a value indicating whether to include expired roles.", + "type": "boolean" + }, + "includeRoles": { + "description": "Represents a value indicating whether to include the users.", + "type": "boolean" + }, + "roleNames": { + "description": "Represents a collection of roles for the analysis.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "securityExtractId": { + "format": "int32", + "description": "Represents the id of the security extract to use for the job.", + "type": "integer" + }, + "useLiveExtract": { + "description": "Represents a value indicating whether to use a live extract.", + "type": "boolean" + }, + "rulebookIds": { + "description": "Represents a collection of the rulebook ids to use for the job.", + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + }, + "futureJobRequest": { + "description": "Represents a future job request model.", + "type": "object" + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.DormantUsersReportParametersModel": { + "required": [ + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "daysUntilDormant": { + "format": "int32", + "description": "Count of days to show dormant users.", + "type": "integer" + }, + "securityExtractId": { + "format": "int32", + "description": "Represents the id of the security extract to use for the job.", + "type": "integer" + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.OrphanedRolesReportParametersModel": { + "required": [ + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "securityExtractId": { + "format": "int32", + "description": "Represents the id of the security extract to use for the job.", + "type": "integer" + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.UtilizationDeltaReportParametersModel": { + "description": "Represents model for input parameters of UtilizationDeltaReportJob", + "required": [ + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "eamStartDate": { + "format": "date-time", + "description": "Gets or sets the eam start date.", + "type": "string" + }, + "eamEndDate": { + "format": "date-time", + "description": "Gets or sets the eam end date.", + "type": "string" + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.EamReportOverviewParametersModel": { + "description": "Represents a model for EAM Report Overview parameters.", + "required": [ + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "startDate": { + "format": "date-time", + "description": "Start date of dates range to export EAM requests.", + "type": "string" + }, + "endDate": { + "format": "date-time", + "description": "End date of dates range to export EAM requests.", + "type": "string" + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.SecurityRolesReportParametersModel": { + "required": [ + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "roles": { + "description": "Gets or sets the roles.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "securityExtractId": { + "format": "int32", + "description": "Security extract ID.", + "type": "integer" + }, + "useLiveExtract": { + "description": "Determines, if live extract should be used.", + "type": "boolean" + }, + "useLiveUtilizations": { + "type": "boolean" + }, + "monthsOfUtilizations": { + "format": "int32", + "type": "integer" + }, + "utilizationType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.UtilizationType" + }, + "utilizationExtractIds": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + }, + "changeStartDate": { + "format": "date-time", + "type": "string" + }, + "changeEndDate": { + "format": "date-time", + "type": "string" + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Enumerations.UtilizationType": { + "enum": [ + "sTAD", + "cDPOS" + ], + "type": "string" + }, + "ErpMaestro.JobServices.Common.Models.OneClickReportParametersModel": { + "required": [ + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "conflictReportType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.ConflictReportType" + }, + "selectedRiskRatings": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.RiskRatingLookup" + } + }, + "businessProcessCodes": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "rulebookIds": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + }, + "utilizationType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.UtilizationType" + }, + "useLiveUtilizationExtracts": { + "type": "boolean" + }, + "monthsOfUtilizations": { + "format": "int32", + "type": "integer" + }, + "selectedUtilizations": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + }, + "includeExpiredRoles": { + "type": "boolean" + }, + "includeAdminLockedUsers": { + "type": "boolean" + }, + "includeCommunication": { + "type": "boolean" + }, + "includeDialog": { + "type": "boolean" + }, + "includeExpiredUsers": { + "type": "boolean" + }, + "includeFailedLoginUsers": { + "type": "boolean" + }, + "includeReference": { + "type": "boolean" + }, + "includeService": { + "type": "boolean" + }, + "includeSystem": { + "type": "boolean" + }, + "securityExtractId": { + "format": "int32", + "description": "Represents the id of the security extract to use for the job.", + "type": "integer" + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Enumerations.ConflictReportType": { + "enum": [ + "userBasedReports", + "roleConflictsMatrix", + "securityRolesReport" + ], + "type": "string" + }, + "ErpMaestro.JobServices.Common.Models.SecurityExtractJobParametersModel": { + "required": [ + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "name": { + "type": "string", + "readOnly": true + }, + "customerId": { + "format": "uuid", + "description": "Represents customer Id", + "type": "string" + }, + "accountId": { + "format": "int32", + "description": "Represents legacy AccountId", + "type": "integer" + }, + "jobType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.JobType" + }, + "requestCreatedDate": { + "format": "date-time", + "description": "Represents the date and time the request was created.", + "type": "string" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "rulebookId": { + "format": "int32", + "description": "Represents the rulebook unique identifier.", + "type": "integer" + }, + "securityExtractId": { + "format": "int32", + "description": "Represents the security extract unique identifier.", + "type": "integer" + }, + "useLiveExtract": { + "description": "Serves as a flag to determine if a live security is intended to be used.\r\nWhen true, a security extract is created, otherwise, the SecurityExtractId\r\nwill be used.", + "type": "boolean" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.SecurityExtractCompletenessParametersModel": { + "required": [ + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "securityExtractId": { + "format": "int32", + "type": "integer" + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.UtilizationExtractParametersModel": { + "required": [ + "erpSystemId" + ], + "type": "object", + "properties": { + "monthOption": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.MonthOption" + }, + "startDate": { + "format": "date-time", + "type": "string" + }, + "requiresRecurrenceJobParameters": { + "description": "Specifies whether the recurrence for the current agent command\r\nrequires the job parameters. For example, under the current implementation\r\nof the agent's security extract, job parameters are not needed to be\r\npresent in the recurrence record. Default value is true.", + "type": "boolean", + "readOnly": true + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Enumerations.MonthOption": { + "enum": [ + "previousMonth", + "currentMonth" + ], + "type": "string" + }, + "ErpMaestro.JobServices.Common.Models.WhatIfUsersJobParametersModel": { + "description": "Represents the job parameters model for a Users WhatIf analysis.", + "required": [ + "rulebookIds", + "userNames", + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "rulebookIds": { + "description": "Represents a collection of the rulebook ids to use for the job.", + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + }, + "securityExtractId": { + "format": "int32", + "description": "", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + }, + "userNames": { + "description": "Represents a collection of user ids to target for the WhatIf analysis.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "roleChanges": { + "description": "A collection of role changes for the WhatIf analysis.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.WhatIfRoleChange" + } + }, + "targetedRoleChanges": { + "description": "A collection of role changes with included targets.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.TargetedWhatIfRoleChange" + } + }, + "roleChangesErpSystemId": { + "format": "int32", + "description": "Represents the id of the ERP system for the roles change.", + "type": "integer" + }, + "roleChangesSecurityExtractId": { + "format": "int32", + "description": "Represents the id of the security extract for the roles change.", + "type": "integer" + }, + "isSecureProvisioningJob": { + "description": "Determines if the WhatIf analysis is for a Secure Provisioning.", + "type": "boolean" + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Parameters.WhatIfRoleChange": { + "description": "Represents a WhatIf role change.", + "type": "object", + "properties": { + "sapRoleInfoId": { + "format": "uuid", + "type": "string", + "readOnly": true + }, + "id": { + "format": "uuid", + "type": "string" + }, + "roleName": { + "description": "THe name of the role to change.", + "type": "string" + }, + "roleChangeType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.WhatIfRoleChangeType" + } + } + }, + "ErpMaestro.JobServices.Common.Parameters.TargetedWhatIfRoleChange": { + "description": "Represents What if role change with target for the role change included. Original role change takes target from inclusive context.\r\nIf Target property is empty targeted role change won't be applied.", + "type": "object", + "properties": { + "targets": { + "description": "Targets for the role change", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "sapRoleInfoId": { + "format": "uuid", + "type": "string", + "readOnly": true + }, + "id": { + "format": "uuid", + "type": "string" + }, + "roleName": { + "description": "THe name of the role to change.", + "type": "string" + }, + "roleChangeType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.WhatIfRoleChangeType" + } + } + }, + "ErpMaestro.JobServices.Common.Enumerations.WhatIfRoleChangeType": { + "enum": [ + "undefined", + "add", + "remove", + "change" + ], + "type": "string" + }, + "ErpMaestro.JobServices.Common.Models.WhatIfSingleRoleJobParametersModel": { + "description": "Represents the job parameters model for a Single-Role WhatIf analysis.", + "required": [ + "rulebookIds", + "roleNames", + "tcodeChanges", + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "rulebookIds": { + "description": "Represents a collection of the rulebook ids to use for the job.", + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + }, + "securityExtractId": { + "format": "int32", + "description": "Represents the if of the security extract.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + }, + "roleNames": { + "description": "Represents a collection of roles to use for the job.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "tcodeChanges": { + "description": "A collection of TCode changes for the WhatIf analysis.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.WhatIfTcodeChange" + } + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Parameters.WhatIfTcodeChange": { + "description": "Represents a WhatIf TCode change.", + "type": "object", + "properties": { + "tcode": { + "description": "The name of the TCode.", + "type": "string" + }, + "objects": { + "description": "A collection of WhatIf TCode objects.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.WhatIfTcodeObject" + } + } + } + }, + "ErpMaestro.JobServices.Common.Parameters.WhatIfTcodeObject": { + "description": "Represents a WhatIf TCode object.", + "type": "object", + "properties": { + "object": { + "description": "Represents the object name.", + "type": "string" + }, + "fields": { + "description": "Represents a collection of object fields.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.WhatIfTcodeObjectField" + } + } + } + }, + "ErpMaestro.JobServices.Common.Parameters.WhatIfTcodeObjectField": { + "description": "Represents a WhatIf TCode object field.", + "type": "object", + "properties": { + "field": { + "description": "The field name.", + "type": "string" + }, + "from": { + "description": "The value from.", + "type": "string" + }, + "to": { + "description": "The value to.", + "type": "string" + } + } + }, + "ErpMaestro.JobServices.Common.Models.WhatIfCompositRoleJobParametersModel": { + "description": "Represents the job parameters model for a Users WhatIf analysis.", + "required": [ + "rulebookIds", + "roleName", + "roleChanges", + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "rulebookIds": { + "description": "Represents a collection of the rulebook ids to use for the job.", + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + }, + "securityExtractId": { + "format": "int32", + "description": "", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + }, + "roleName": { + "description": "Represents the name of the composite role for the WhatIf analysis.", + "type": "string" + }, + "roleChanges": { + "description": "A collection of role changes for the WhatIf analysis.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Parameters.WhatIfRoleChange" + } + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.ImportSapRolesInfoJobModel": { + "description": "The model containing the parameters for an SAP roles import job.", + "required": [ + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "uploadedSapRolesId": { + "format": "int32", + "description": "The id of the uploaded result record.", + "type": "integer" + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.LoadSapInfoJobModel": { + "description": "The model containing the parameters for an SAP roles import job.", + "required": [ + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "securityExtractId": { + "format": "int32", + "description": "The id of the security extract to use for the refresh.", + "type": "integer" + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.UserConflictMatrixParametersModel": { + "description": "Represents the model for a user conflict matrix report.", + "required": [ + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "conflictReportType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.ReportTypeLookup" + }, + "securityAnalysisConflictCodes": { + "description": "Represents a collection of conflict codes.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "securityAnalysisId": { + "format": "int32", + "description": "Represents the id of the security analysis to use.", + "type": "integer" + }, + "securityAnalysisJobId": { + "format": "int32", + "description": "Represents the id of the security analysis job.", + "type": "integer" + }, + "useNewData": { + "description": "Represents a value indicating whether a new security analysis should be used.", + "type": "boolean" + }, + "analysisJobParameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel" + }, + "utilizationExtractFileIds": { + "description": "Represents a collection of utilization extract ids.", + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + }, + "selectedRiskLevels": { + "description": "Represents a collection of risk levels to use.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.RiskRatingLookup" + } + }, + "businessProcessCodes": { + "description": "Represents a collection of business process codes to use.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "useLiveUtilizations": { + "type": "boolean" + }, + "monthsOfUtilizations": { + "format": "int32", + "type": "integer" + }, + "utilizationType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.UtilizationType" + }, + "utilizationExtractIds": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + }, + "changeStartDate": { + "format": "date-time", + "type": "string" + }, + "changeEndDate": { + "format": "date-time", + "type": "string" + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Enumerations.ReportTypeLookup": { + "enum": [ + "userConflictsMatrixReport", + "bpConflictsSummary", + "roleConflictsMatrixReport", + "whatIfAnalysisReport", + "securityRolesReport", + "utilizationDeltaReport", + "extractCompletenessReport", + "dormantUsersReport", + "orphanedRolesReport", + "eamReportOverview" + ], + "type": "string" + }, + "ErpMaestro.JobServices.Common.Models.RoleConflictMatrixParametersModel": { + "description": "Represents the model for a role conflict matrix report.", + "required": [ + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "conflictReportType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.ReportTypeLookup" + }, + "securityAnalysisConflictCodes": { + "description": "Represents a collection of conflict codes.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "securityAnalysisId": { + "format": "int32", + "description": "Represents the id of the security analysis to use.", + "type": "integer" + }, + "securityAnalysisJobId": { + "format": "int32", + "description": "Represents the id of the security analysis job.", + "type": "integer" + }, + "useNewData": { + "description": "Represents a value indicating whether a new security analysis should be used.", + "type": "boolean" + }, + "analysisJobParameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RoleAnalysisParametersModel" + }, + "utilizationExtractFileIds": { + "description": "Represents a collection of utilization extract ids.", + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + }, + "selectedRiskLevels": { + "description": "Represents a collection of risk levels to use.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.RiskRatingLookup" + } + }, + "businessProcessCodes": { + "description": "Represents a collection of business process codes to use.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "useLiveUtilizations": { + "type": "boolean" + }, + "monthsOfUtilizations": { + "format": "int32", + "type": "integer" + }, + "utilizationType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.UtilizationType" + }, + "utilizationExtractIds": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + }, + "changeStartDate": { + "format": "date-time", + "type": "string" + }, + "changeEndDate": { + "format": "date-time", + "type": "string" + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.BpConflictsSummaryReportParametersModel": { + "description": "Represents the model for a business process conflict matrix report.", + "required": [ + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "conflictReportType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.ReportTypeLookup" + }, + "securityAnalysisConflictCodes": { + "description": "Represents a collection of conflict codes.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "securityAnalysisId": { + "format": "int32", + "description": "Represents the id of the security analysis to use.", + "type": "integer" + }, + "securityAnalysisJobId": { + "format": "int32", + "description": "Represents the id of the security analysis job.", + "type": "integer" + }, + "useNewData": { + "description": "Represents a value indicating whether a new security analysis should be used.", + "type": "boolean" + }, + "analysisJobParameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel" + }, + "utilizationExtractFileIds": { + "description": "Represents a collection of utilization extract ids.", + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + }, + "selectedRiskLevels": { + "description": "Represents a collection of risk levels to use.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.RiskRatingLookup" + } + }, + "businessProcessCodes": { + "description": "Represents a collection of business process codes to use.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "useLiveUtilizations": { + "type": "boolean" + }, + "monthsOfUtilizations": { + "format": "int32", + "type": "integer" + }, + "utilizationType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.UtilizationType" + }, + "utilizationExtractIds": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + }, + "changeStartDate": { + "format": "date-time", + "type": "string" + }, + "changeEndDate": { + "format": "date-time", + "type": "string" + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.AccessReviewParametersModel": { + "description": "Access Review job parameters model.", + "required": [ + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "accessReviewId": { + "format": "uuid", + "description": "ID of a review.", + "type": "string" + }, + "excludedRoles": { + "description": "Roles to exclude from review", + "uniqueItems": true, + "type": "array", + "items": { + "type": "string" + } + }, + "includedUserGroups": { + "description": "User group to include in review, null to include all.", + "uniqueItems": true, + "type": "array", + "items": { + "type": "string" + } + }, + "includedRuleBooks": { + "description": "Rulebooks to include in review.", + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + }, + "monthsOfUtilization": { + "format": "int32", + "description": "Month of TCode utilization for a user.", + "type": "integer" + }, + "createMissingExtracts": { + "description": "Flag to indicate if live utilization extracts should be created.", + "type": "boolean" + }, + "includedRiskRatings": { + "description": "Included risk ratings, null to include all.", + "uniqueItems": true, + "type": "array", + "items": { + "type": "string" + } + }, + "ignoreAdminLockedUsers": { + "description": "Flag to indicate if to ignore admin locked users.", + "type": "boolean" + }, + "ignoreFailedLoginUsers": { + "description": "Flag to indicate if to ignore failed login users.", + "type": "boolean" + }, + "reviewType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.AccessReviewType" + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Enumerations.AccessReviewType": { + "enum": [ + "userToRole", + "roleToTcode", + "userToRisk", + "riskToMitigatingControl", + "rulebookDetails" + ], + "type": "string" + }, + "ErpMaestro.JobServices.Common.Models.AccessReviewActionLogParametersModel": { + "description": "Access Review action log job parameters model.", + "required": [ + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "accessReviewId": { + "format": "uuid", + "description": "ID of a review.", + "type": "string" + }, + "reviewerId": { + "format": "uuid", + "description": "ID of a reviewer requesting an action log.", + "type": "string" + }, + "exportType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.ReportExportType" + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Enumerations.ReportExportType": { + "enum": [ + "excel", + "cSV" + ], + "type": "string" + }, + "ErpMaestro.JobServices.Common.Models.AccessReviewReportParametersModel": { + "description": "Access Review report job parameters model.", + "required": [ + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "accessReviewId": { + "format": "uuid", + "description": "ID of a review.", + "type": "string" + }, + "reviewerId": { + "format": "uuid", + "description": "ID of a reviewer requesting an action log.", + "type": "string" + }, + "exportType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.ReportExportType" + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.AccessReviewRemoveRolesParametersModel": { + "required": [ + "erpSystemId" + ], + "type": "object", + "properties": { + "accessReviewId": { + "format": "uuid", + "type": "string" + }, + "requiresRecurrenceJobParameters": { + "description": "Specifies whether the recurrence for the current agent command\r\nrequires the job parameters. For example, under the current implementation\r\nof the agent's security extract, job parameters are not needed to be\r\npresent in the recurrence record. Default value is true.", + "type": "boolean", + "readOnly": true + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.ChangeLogParametersModel": { + "description": "Represents change logs parameters.", + "required": [ + "customerId", + "changeLogType", + "itemIds" + ], + "type": "object", + "properties": { + "customerId": { + "format": "uuid", + "description": "Identifier of the customer.", + "type": "string" + }, + "erpSystemId": { + "format": "int32", + "description": "Identifier of ERP system.", + "type": "integer" + }, + "changeLogType": { + "description": "Type of change logs: rulebook change logs, user management change logs, etc..", + "type": "string" + }, + "itemIds": { + "description": "Identifiers of items to generate logs.", + "minLength": 1, + "uniqueItems": false, + "type": "array", + "items": { + "type": "object" + } + }, + "fromDate": { + "format": "date-time", + "description": "Start date of the reporting period.", + "type": "string" + }, + "toDate": { + "format": "date-time", + "description": "End date of the reporting period.", + "type": "string" + } + } + }, + "ErpMaestro.JobServices.Common.Models.ImportUsersParametersModel": { + "description": "Represents model for Import Users job parameters.", + "required": [ + "customerId", + "importFileId" + ], + "type": "object", + "properties": { + "customerId": { + "format": "uuid", + "description": "Identifier of the customer.", + "type": "string" + }, + "importFileId": { + "format": "int32", + "description": "Identifier of imported file.", + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.SecurityAnalisysParametersModel": { + "required": [ + "rulebookIds", + "name", + "erpSystemId" + ], + "type": "object", + "properties": { + "securityAnalysisType": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.AnalysisType" + }, + "securityExtractId": { + "format": "int32", + "description": "Represents the id of the security extract to use for the job.", + "type": "integer" + }, + "useLiveExtract": { + "description": "Represents a value indicating whether to use a live extract.", + "type": "boolean" + }, + "rulebookIds": { + "description": "Represents a collection of the rulebook ids to use for the job.", + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + }, + "futureJobRequest": { + "description": "Represents a future job request model.", + "type": "object" + }, + "name": { + "description": "Represents the name of the job.", + "type": "string" + }, + "legacyAccountId": { + "format": "int32", + "description": "Represents the user's legacy account id.", + "type": "integer" + }, + "createdBy": { + "description": "Represents the user that is scheduling the job.", + "type": "string" + }, + "notificationEmail": { + "description": "Represents the email of the user to be notified when the job is done.", + "type": "string" + }, + "isSignatureRequested": { + "description": "Represents whether or not the user requested this report to be signed with a certificate.", + "type": "boolean" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the current ERP system.", + "maximum": 2147483647, + "minimum": 1, + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Enumerations.WhatIfType": { + "enum": [ + "undefined", + "user", + "singleRole", + "compositeRole" + ], + "type": "string" + }, + "ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithRuleHitsModel": { + "description": "Represents a WhatIf analysis result.", + "type": "object", + "properties": { + "ruleHits": { + "description": "Represents a collection of rule hits in the analysis result.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisRuleHitModel" + } + }, + "comments": { + "description": "Represents a collection of ErpMaestro.JobServices.Common.Models.CommentModel objects.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.CommentModel" + } + }, + "id": { + "format": "uuid", + "description": "Represents the unique identifier of the analysis result.", + "type": "string" + }, + "whatIfAnalysisName": { + "description": "Represents the name of the analysis result.", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "description": "Represents the date the analysis result was created.", + "type": "string" + }, + "createdBy": { + "description": "Represents the user who created the analysis result.", + "type": "string" + }, + "updatedBy": { + "description": "Represents the user who updated the analysis result.", + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "description": "Represents the date the analysis result was updated.", + "type": "string" + }, + "accountId": { + "format": "int32", + "description": "Represents the id of the account of the analysis result.", + "type": "integer" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the ERP system of the analysis result.", + "type": "integer" + }, + "jobId": { + "format": "int32", + "description": "Represents the id of the job that produced the analysis result.", + "type": "integer" + }, + "numberOfExistingUserConflicts": { + "format": "int32", + "description": "Represents the number of existing user conflicts.", + "type": "integer" + }, + "numberOfNewUserConflicts": { + "format": "int32", + "description": "Represents the number of new user conflicts.", + "type": "integer" + }, + "numberOfNewUnmitigatedUserConflicts": { + "format": "int32", + "description": "Represents the number of new unmitigated user conflicts.", + "type": "integer" + }, + "numberOfExistingUnmitigatedConflicts": { + "format": "int32", + "description": "Represents the number of existing unmitigated conflicts.", + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.WhatIfAnalysisRuleHitModel": { + "description": "Represents a rule hit for a WhatIf analysis result.", + "type": "object", + "properties": { + "username": { + "description": "Represents the user name in the rule hit.", + "type": "string" + }, + "ruleCode": { + "description": "Represents the code of the rulebook.", + "type": "string" + }, + "ruleBookName": { + "description": "Represents the name of the rulebook.", + "type": "string" + }, + "ruleId": { + "format": "uuid", + "description": "Represents the unique identifier of the rule.", + "type": "string" + }, + "ruleName": { + "description": "Represents the name of the rule.", + "type": "string" + }, + "ruleBusinessProcess": { + "description": "Represents the name of the business process.", + "type": "string" + }, + "riskRating": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.RiskRatingLookup" + }, + "mitigatingControls": { + "description": "Represents the mitigating controls for the rule hit.", + "type": "string" + }, + "businessFunctions": { + "description": "Represents a collection of business functions names for the rule hit.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "businessFunctionHits": { + "description": "Represents a dictionary of counts by conflict categories for the rule hit.", + "type": "object", + "properties": { + "CausedByChanges": { + "format": "int32", + "type": "integer" + }, + "ExistedBeforeChanges": { + "format": "int32", + "type": "integer" + }, + "GoneAfterChanges": { + "format": "int32", + "type": "integer" + }, + "ExistedBeforeAndCausedByChanges": { + "format": "int32", + "type": "integer" + } + } + }, + "approvers": { + "description": "Represents a collection of approvers for the rule hit.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "conflictSource": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.WhatIfConflictCategory" + }, + "commentsCount": { + "format": "int32", + "description": "Represents the number of comments for the current rule hit.", + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.CommentModel": { + "description": "Represents the model for the comments.", + "required": [ + "comment" + ], + "type": "object", + "properties": { + "comment": { + "description": "The contents of the comments.", + "type": "string" + }, + "author": { + "description": "The author of the comments.", + "type": "string" + }, + "date": { + "format": "date-time", + "description": "The date the comment was created.", + "type": "string" + } + } + }, + "ErpMaestro.JobServices.Common.Enumerations.WhatIfConflictCategory": { + "enum": [ + "causedByChanges", + "existedBeforeChanges", + "goneAfterChanges", + "existedBeforeAndCausedByChanges" + ], + "type": "string" + }, + "ErpMaestro.JobServices.Common.Models.WhatIfAnalysisResultWithPermissionHitsModel": { + "description": "Represents a WhatIf analysis result.", + "type": "object", + "properties": { + "permissionHits": { + "description": "Represents a collection of rule hits in the analysis result.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfAnalysisPermissionHitModel" + } + }, + "id": { + "format": "uuid", + "description": "Represents the unique identifier of the analysis result.", + "type": "string" + }, + "whatIfAnalysisName": { + "description": "Represents the name of the analysis result.", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "description": "Represents the date the analysis result was created.", + "type": "string" + }, + "createdBy": { + "description": "Represents the user who created the analysis result.", + "type": "string" + }, + "updatedBy": { + "description": "Represents the user who updated the analysis result.", + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "description": "Represents the date the analysis result was updated.", + "type": "string" + }, + "accountId": { + "format": "int32", + "description": "Represents the id of the account of the analysis result.", + "type": "integer" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the ERP system of the analysis result.", + "type": "integer" + }, + "jobId": { + "format": "int32", + "description": "Represents the id of the job that produced the analysis result.", + "type": "integer" + }, + "numberOfExistingUserConflicts": { + "format": "int32", + "description": "Represents the number of existing user conflicts.", + "type": "integer" + }, + "numberOfNewUserConflicts": { + "format": "int32", + "description": "Represents the number of new user conflicts.", + "type": "integer" + }, + "numberOfNewUnmitigatedUserConflicts": { + "format": "int32", + "description": "Represents the number of new unmitigated user conflicts.", + "type": "integer" + }, + "numberOfExistingUnmitigatedConflicts": { + "format": "int32", + "description": "Represents the number of existing unmitigated conflicts.", + "type": "integer" + } + } + }, + "ErpMaestro.JobServices.Common.Models.WhatIfAnalysisPermissionHitModel": { + "description": "Represents the WhatIf analysis permissions hit model.", + "type": "object", + "properties": { + "hitSource": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Enumerations.WhatIfConflictCategory" + }, + "businessFunctionCode": { + "description": "The business function code.", + "type": "string" + }, + "businessFunctionName": { + "description": "The business function name.", + "type": "string" + }, + "tCode": { + "description": "The TCode name.", + "type": "string" + }, + "tCodeDescription": { + "description": "The TCode description.", + "type": "string" + }, + "roleName": { + "description": "The role name.", + "type": "string" + }, + "profileName": { + "description": "The profile name.", + "type": "string" + }, + "object": { + "description": "The object name.", + "type": "string" + }, + "field": { + "description": "The field name.", + "type": "string" + }, + "valueFrom": { + "description": "The field value from.", + "type": "string" + }, + "valueTo": { + "description": "The field value to.", + "type": "string" + }, + "von": { + "description": "The field value from (Von in German).", + "type": "string" + }, + "bis": { + "description": "The field value to (Bis in German).", + "type": "string" + }, + "isDerived": { + "description": "A flag indicating whether the permission hit is derived..", + "type": "boolean" + }, + "derivedParentRole": { + "description": "The name of the parent role.", + "type": "string" + }, + "authorization": { + "description": "The name of the authorization.", + "type": "string" + }, + "analysisObject": { + "description": "The user or role object being analyzed.", + "type": "string" + } + } + }, + "Microsoft.AspNet.OData.Query.ODataQueryOptions_1_ErpMaestro.JobServices.Common.Models.ActivityHistoryModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "type": "object", + "properties": { + "ifMatch": { + "type": "object", + "readOnly": true + }, + "ifNoneMatch": { + "type": "object", + "readOnly": true + }, + "request": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.HttpRequest" + }, + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "rawValues": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.ODataRawQueryOptions" + }, + "selectExpand": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.SelectExpandQueryOption" + }, + "apply": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.ApplyQueryOption" + }, + "filter": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.FilterQueryOption" + }, + "orderBy": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.OrderByQueryOption" + }, + "skip": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.SkipQueryOption" + }, + "top": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.TopQueryOption" + }, + "count": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.CountQueryOption" + }, + "validator": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.Validators.ODataQueryValidator" + } + } + }, + "System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_Microsoft.Extensions.Primitives.StringValues_Microsoft.Extensions.Primitives_Version_3.0.0.0_Culture_neutral_PublicKeyToken_adb9793829ddae60_": { + "type": "object", + "properties": { + "key": { + "type": "string", + "readOnly": true + }, + "value": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true + } + } + }, + "System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_": { + "type": "object", + "properties": { + "key": { + "type": "string", + "readOnly": true + }, + "value": { + "type": "string", + "readOnly": true + } + } + }, + "System.Collections.Generic.KeyValuePair_2_System.Type_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.Object_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_": { + "type": "object", + "properties": { + "key": { + "type": "string", + "readOnly": true + }, + "value": { + "type": "object", + "readOnly": true + } + } + }, + "ErpMaestro.JobServices.WebApi.Models.ODataResponse_1_ErpMaestro.JobServices.Common.Models.ActivityHistoryModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "type": "object", + "properties": { + "@odata.context": { + "type": "string" + }, + "value": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ActivityHistoryModel" + } + }, + "@odata.count": { + "format": "int64", + "type": "integer" + } + } + }, + "System.Collections.Generic.KeyValuePair_2_System.Guid_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_": { + "type": "object", + "properties": { + "key": { + "format": "uuid", + "type": "string", + "readOnly": true + }, + "value": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.AspNet.OData.Query.ODataQueryOptions_1_ErpMaestro.JobServices.Common.Models.TransactionCode_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "type": "object", + "properties": { + "ifMatch": { + "type": "object", + "readOnly": true + }, + "ifNoneMatch": { + "type": "object", + "readOnly": true + }, + "request": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.HttpRequest" + }, + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "rawValues": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.ODataRawQueryOptions" + }, + "selectExpand": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.SelectExpandQueryOption" + }, + "apply": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.ApplyQueryOption" + }, + "filter": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.FilterQueryOption" + }, + "orderBy": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.OrderByQueryOption" + }, + "skip": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.SkipQueryOption" + }, + "top": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.TopQueryOption" + }, + "count": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.CountQueryOption" + }, + "validator": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.Validators.ODataQueryValidator" + } + } + }, + "Microsoft.AspNet.OData.Query.ODataQueryOptions_1_ErpMaestro.JobServices.Common.Models.BusinessFunctionPermissionDto_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "type": "object", + "properties": { + "ifMatch": { + "type": "object", + "readOnly": true + }, + "ifNoneMatch": { + "type": "object", + "readOnly": true + }, + "request": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.HttpRequest" + }, + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "rawValues": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.ODataRawQueryOptions" + }, + "selectExpand": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.SelectExpandQueryOption" + }, + "apply": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.ApplyQueryOption" + }, + "filter": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.FilterQueryOption" + }, + "orderBy": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.OrderByQueryOption" + }, + "skip": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.SkipQueryOption" + }, + "top": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.TopQueryOption" + }, + "count": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.CountQueryOption" + }, + "validator": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.Validators.ODataQueryValidator" + } + } + }, + "Microsoft.AspNet.OData.Query.ODataQueryOptions_1_ErpMaestro.JobServices.Common.Models.TransactionCodeObject_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "type": "object", + "properties": { + "ifMatch": { + "type": "object", + "readOnly": true + }, + "ifNoneMatch": { + "type": "object", + "readOnly": true + }, + "request": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.HttpRequest" + }, + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "rawValues": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.ODataRawQueryOptions" + }, + "selectExpand": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.SelectExpandQueryOption" + }, + "apply": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.ApplyQueryOption" + }, + "filter": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.FilterQueryOption" + }, + "orderBy": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.OrderByQueryOption" + }, + "skip": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.SkipQueryOption" + }, + "top": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.TopQueryOption" + }, + "count": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.CountQueryOption" + }, + "validator": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.Validators.ODataQueryValidator" + } + } + }, + "Microsoft.AspNet.OData.Query.ODataQueryOptions_1_ErpMaestro.JobServices.Common.Models.TransactionCodeObjectField_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "type": "object", + "properties": { + "ifMatch": { + "type": "object", + "readOnly": true + }, + "ifNoneMatch": { + "type": "object", + "readOnly": true + }, + "request": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.HttpRequest" + }, + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "rawValues": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.ODataRawQueryOptions" + }, + "selectExpand": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.SelectExpandQueryOption" + }, + "apply": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.ApplyQueryOption" + }, + "filter": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.FilterQueryOption" + }, + "orderBy": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.OrderByQueryOption" + }, + "skip": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.SkipQueryOption" + }, + "top": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.TopQueryOption" + }, + "count": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.CountQueryOption" + }, + "validator": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.Validators.ODataQueryValidator" + } + } + }, + "System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.DateTimeOffset_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_": { + "type": "object", + "properties": { + "key": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "value": { + "format": "date-time", + "type": "string", + "readOnly": true + } + } + }, + "System.Collections.Generic.KeyValuePair_2_System.Int32_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_": { + "type": "object", + "properties": { + "key": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "value": { + "type": "string", + "readOnly": true + } + } + }, + "ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "description": "Model used for scheduling a job.", + "required": [ + "parameters" + ], + "type": "object", + "properties": { + "parameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RiskSnapshotParametersModel" + }, + "recurrence": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceModel" + } + } + }, + "ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "description": "Model used for scheduling a job.", + "required": [ + "parameters" + ], + "type": "object", + "properties": { + "parameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserAnalysisParametersModel" + }, + "recurrence": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceModel" + } + } + }, + "ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleAnalysisParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "description": "Model used for scheduling a job.", + "required": [ + "parameters" + ], + "type": "object", + "properties": { + "parameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RoleAnalysisParametersModel" + }, + "recurrence": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceModel" + } + } + }, + "ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.DormantUsersReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "description": "Model used for scheduling a job.", + "required": [ + "parameters" + ], + "type": "object", + "properties": { + "parameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.DormantUsersReportParametersModel" + }, + "recurrence": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceModel" + } + } + }, + "ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OrphanedRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "description": "Model used for scheduling a job.", + "required": [ + "parameters" + ], + "type": "object", + "properties": { + "parameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.OrphanedRolesReportParametersModel" + }, + "recurrence": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceModel" + } + } + }, + "ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationDeltaReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "description": "Model used for scheduling a job.", + "required": [ + "parameters" + ], + "type": "object", + "properties": { + "parameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UtilizationDeltaReportParametersModel" + }, + "recurrence": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceModel" + } + } + }, + "ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.EamReportOverviewParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "description": "Model used for scheduling a job.", + "required": [ + "parameters" + ], + "type": "object", + "properties": { + "parameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.EamReportOverviewParametersModel" + }, + "recurrence": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceModel" + } + } + }, + "ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityRolesReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "description": "Model used for scheduling a job.", + "required": [ + "parameters" + ], + "type": "object", + "properties": { + "parameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityRolesReportParametersModel" + }, + "recurrence": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceModel" + } + } + }, + "ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.OneClickReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "description": "Model used for scheduling a job.", + "required": [ + "parameters" + ], + "type": "object", + "properties": { + "parameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.OneClickReportParametersModel" + }, + "recurrence": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceModel" + } + } + }, + "ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.SecurityExtractJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "description": "Model used for scheduling a job.", + "required": [ + "parameters" + ], + "type": "object", + "properties": { + "parameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.SecurityExtractJobParametersModel" + }, + "recurrence": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceModel" + } + } + }, + "ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UtilizationExtractParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "description": "Model used for scheduling a job.", + "required": [ + "parameters" + ], + "type": "object", + "properties": { + "parameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UtilizationExtractParametersModel" + }, + "recurrence": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceModel" + } + } + }, + "ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfUsersJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "description": "Model used for scheduling a job.", + "required": [ + "parameters" + ], + "type": "object", + "properties": { + "parameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfUsersJobParametersModel" + }, + "recurrence": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceModel" + } + } + }, + "ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfSingleRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "description": "Model used for scheduling a job.", + "required": [ + "parameters" + ], + "type": "object", + "properties": { + "parameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfSingleRoleJobParametersModel" + }, + "recurrence": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceModel" + } + } + }, + "ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.WhatIfCompositRoleJobParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "description": "Model used for scheduling a job.", + "required": [ + "parameters" + ], + "type": "object", + "properties": { + "parameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.WhatIfCompositRoleJobParametersModel" + }, + "recurrence": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceModel" + } + } + }, + "ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.ImportSapRolesInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "description": "Model used for scheduling a job.", + "required": [ + "parameters" + ], + "type": "object", + "properties": { + "parameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.ImportSapRolesInfoJobModel" + }, + "recurrence": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceModel" + } + } + }, + "ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.LoadSapInfoJobModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "description": "Model used for scheduling a job.", + "required": [ + "parameters" + ], + "type": "object", + "properties": { + "parameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.LoadSapInfoJobModel" + }, + "recurrence": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceModel" + } + } + }, + "ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.UserConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "description": "Model used for scheduling a job.", + "required": [ + "parameters" + ], + "type": "object", + "properties": { + "parameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.UserConflictMatrixParametersModel" + }, + "recurrence": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceModel" + } + } + }, + "ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.RoleConflictMatrixParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "description": "Model used for scheduling a job.", + "required": [ + "parameters" + ], + "type": "object", + "properties": { + "parameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RoleConflictMatrixParametersModel" + }, + "recurrence": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceModel" + } + } + }, + "ErpMaestro.JobServices.Common.Models.JobModel_1_ErpMaestro.JobServices.Common.Models.BpConflictsSummaryReportParametersModel_ErpMaestro.JobServices.Common_Version_2021.3.3.1_Culture_neutral_PublicKeyToken_null_": { + "description": "Model used for scheduling a job.", + "required": [ + "parameters" + ], + "type": "object", + "properties": { + "parameters": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.BpConflictsSummaryReportParametersModel" + }, + "recurrence": { + "$ref": "#/components/schemas/ErpMaestro.JobServices.Common.Models.RecurrenceModel" + } + } + } + } + } +} \ No newline at end of file diff --git a/static/arm-api/swagger-logging.json b/static/arm-api/swagger-logging.json new file mode 100644 index 000000000..bfc328a72 --- /dev/null +++ b/static/arm-api/swagger-logging.json @@ -0,0 +1,4198 @@ +{ + "openapi": "3.0.0", + "info": { + "version": "v1", + "title": "Access Risk Management Logging Web APIs" + }, + "paths": { + "/api/audit": { + "post": { + "tags": [ + "Audit" + ], + "summary": "Gets audit logs using presented filters from model.\r\nURL for GET requests has limit for its length. So, POST request type is used.", + "operationId": "GetLogs", + "parameters": [ + { + "name": "serviceName", + "in": "query", + "description": "Filter for audit logs by service name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "tableName", + "in": "query", + "description": "Filter for audit logs by table name.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + } + }, + "description": "Filter by keys." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/logs": { + "post": { + "tags": [ + "Logs" + ], + "summary": "Save anonymous log if token matches expected token", + "operationId": "SaveAnonymousLog", + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/AnonymousLog" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnonymousLog" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/AnonymousLog" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/AnonymousLog" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/logs/central": { + "post": { + "tags": [ + "Logs" + ], + "summary": "Responsible for performing bulk log uploads of the supplied logs.", + "operationId": "UploadBulkLogs", + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/CentralLog" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/CentralLog" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/CentralLog" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/CentralLog" + } + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/logs/frontend": { + "post": { + "tags": [ + "Logs" + ], + "summary": "This endpoint allows for the UI to write events to our centralized logging servers", + "operationId": "LogFrontEnd", + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/FrontEndLogModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/FrontEndLogModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/FrontEndLogModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/FrontEndLogModel" + } + } + }, + "description": "Represents a log entry." + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/msrb-audit/rulebooks": { + "post": { + "tags": [ + "MultiSystemRulebookAudit" + ], + "summary": "Gets audit logs for specified rulebooks using specified request parameters.", + "operationId": "GetRulebookLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + } + }, + "description": "Identifiers of the rulebooks." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/msrb-audit/businessFunctions": { + "post": { + "tags": [ + "MultiSystemRulebookAudit" + ], + "summary": "Gets audit logs for specified business functions using specified request parameters.", + "operationId": "GetBusinessFunctionLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/GetBusinessFunctionLogsBusinessfunctionids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/msrb-audit/mitigations": { + "post": { + "tags": [ + "MultiSystemRulebookAudit" + ], + "summary": "Gets audit logs for specified mitigations using specified request parameters.", + "operationId": "GetMitigationLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/GetMitigationLogsMitigationids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/msrb-audit/risks": { + "post": { + "tags": [ + "MultiSystemRulebookAudit" + ], + "summary": "Gets audit logs for specified risks using specified request parameters.", + "operationId": "GetRiskLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int64", + "type": "integer" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int64", + "type": "integer" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int64", + "type": "integer" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int64", + "type": "integer" + } + } + } + }, + "description": "Identifiers of the risks." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/msrb-audit/systems": { + "post": { + "tags": [ + "MultiSystemRulebookAudit" + ], + "summary": "Gets audit logs for specified systems using specified request parameters.", + "operationId": "GetSystemLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/GetSystemLogsSystemids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/msrb-audit/permissions": { + "post": { + "tags": [ + "MultiSystemRulebookAudit" + ], + "summary": "Gets audit logs for specified permissions using specified request parameters.", + "operationId": "GetPermissionLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int64", + "type": "integer" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int64", + "type": "integer" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int64", + "type": "integer" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int64", + "type": "integer" + } + } + } + }, + "description": "Identifiers of the permissions." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/msrb-audit/systemBusinessFunctions": { + "post": { + "tags": [ + "MultiSystemRulebookAudit" + ], + "summary": "Gets audit logs for system business functions using specified request parameters.", + "operationId": "GetSystemBusinessFunctionsLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/GetSystemLogsSystemids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/msrb-audit/riskMitigations": { + "post": { + "tags": [ + "MultiSystemRulebookAudit" + ], + "summary": "Gets audit logs for risk mitigations using specified request parameters.", + "operationId": "GetRiskMitigationsLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/GetMitigationLogsMitigationids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/msrb-audit/riskBusinessFunctions": { + "post": { + "tags": [ + "MultiSystemRulebookAudit" + ], + "summary": "Gets audit logs for risk business functions using specified request parameters.", + "operationId": "GetRiskBusinessFunctionsLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/GetBusinessFunctionLogsBusinessfunctionids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/audit/rulebooks": { + "post": { + "tags": [ + "RulebookAudit" + ], + "summary": "Gets audit logs for specified rulebooks using specified request parameters.", + "operationId": "GetRulebookLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + }, + "description": "Identifiers of the rulebooks." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/audit/businessFunctions": { + "post": { + "tags": [ + "RulebookAudit" + ], + "summary": "Gets audit logs for specified business functions using specified request parameters.", + "operationId": "GetBusinessFunctionLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + }, + "description": "Identifiers of the business functions." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/audit/businessFunctionPermissions": { + "post": { + "tags": [ + "RulebookAudit" + ], + "summary": "Gets audit logs for business function permissions using specified request parameters.", + "operationId": "GetBusinessFunctionPermissionLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + }, + "description": "Identifiers of related business functions." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/audit/mitigatingControls": { + "post": { + "tags": [ + "RulebookAudit" + ], + "summary": "Gets audit logs for specified mitigating controls using specified request parameters.", + "operationId": "GetMitigatingControlLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + }, + "description": "Identifiers of the mitigating controls." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/audit/mitigatingEntities": { + "post": { + "tags": [ + "RulebookAudit" + ], + "summary": "Gets audit logs for specified mitigating entities using specified request parameters.", + "operationId": "GetMitigatingEntityLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + }, + "description": "Identifiers of the mitigating entities." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/audit/mitigatingRules": { + "post": { + "tags": [ + "RulebookAudit" + ], + "summary": "Gets audit logs for specified mitigating rules using specified request parameters.", + "operationId": "GetMitigatingRuleLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + }, + "description": "Identifiers of the mitigating rules." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/audit/parameters": { + "post": { + "tags": [ + "RulebookAudit" + ], + "summary": "Gets audit logs for specified parameters using specified request parameters.", + "operationId": "GetParameterLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + }, + "description": "Identifiers of the parameters." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/audit/parameterDetails": { + "post": { + "tags": [ + "RulebookAudit" + ], + "summary": "Gets audit logs for specified parameter details using specified request parameters.", + "operationId": "GetParameterDetailLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + }, + "description": "Identifiers of the parameter details." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/audit/riskApprovers": { + "post": { + "tags": [ + "RulebookAudit" + ], + "summary": "Gets audit logs for specified risk approvers using specified request parameters.", + "operationId": "GetRiskApproverLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/GetRiskApproverLogsRuleids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/audit/riskOwners": { + "post": { + "tags": [ + "RulebookAudit" + ], + "summary": "Gets audit logs for specified risk owners using specified request parameters.", + "operationId": "GetRiskOwnerLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/GetRiskApproverLogsRuleids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/audit/rules": { + "post": { + "tags": [ + "RulebookAudit" + ], + "summary": "Gets audit logs for specified rules using specified request parameters.", + "operationId": "GetRuleLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + }, + "description": "Identifiers of the rules." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/audit/rulebookRules": { + "post": { + "tags": [ + "RulebookAudit" + ], + "summary": "Gets audit logs for specified rulebook rules using specified request parameters.", + "operationId": "GetRulebookRuleLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + }, + "description": "Identifiers of related rulebooks." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/audit/ruleBusinessFunctions": { + "post": { + "tags": [ + "RulebookAudit" + ], + "summary": "Gets audit logs for specified rule business functions using specified request parameters.", + "operationId": "GetRuleBusinessFunctionLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/GetRiskApproverLogsRuleids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/userManagementAudit/users": { + "post": { + "tags": [ + "UserManagementAudit" + ], + "summary": "Gets audit logs for specified users using specified request parameters.", + "operationId": "GetUserLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/GetUserLogsUserids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/userManagementAudit/userRoles": { + "post": { + "tags": [ + "UserManagementAudit" + ], + "summary": "Gets audit logs for specified user roles using specified request parameters.", + "operationId": "GetUserRoleLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/GetUserRoleLogsCustomerids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/userManagementAudit/userSettings": { + "post": { + "tags": [ + "UserManagementAudit" + ], + "summary": "Gets audit logs for specified user settings using specified request parameters.", + "operationId": "GetUserSettingLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/GetUserLogsUserids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/userManagementAudit/customerUsers": { + "post": { + "tags": [ + "UserManagementAudit" + ], + "summary": "Gets audit logs for specified customer users using specified request parameters.", + "operationId": "GetCustomerUserLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/GetUserRoleLogsCustomerids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/userManagementAudit/userIdentityProviders": { + "post": { + "tags": [ + "UserManagementAudit" + ], + "summary": "Gets audit logs for specified user identity providers using specified request parameters.", + "operationId": "GetUserIdentityProviderLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/GetUserLogsUserids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/userManagementAudit/userAccessContexts": { + "post": { + "tags": [ + "UserManagementAudit" + ], + "summary": "Gets audit logs for specified user access contexts using specified request parameters.", + "operationId": "GetUserAccessContextLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/GetUserLogsUserids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/userManagementAudit/accessContexts": { + "post": { + "tags": [ + "UserManagementAudit" + ], + "summary": "Gets audit logs for specified access contexts using specified request parameters.", + "operationId": "GetAccessContextLogs", + "parameters": [ + { + "name": "fromDate", + "in": "query", + "description": "Filter for audit logs by start date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "toDate", + "in": "query", + "description": "Filter for audit logs by end date.", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "skip", + "in": "query", + "description": "Determines how many items should be skipped.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "take", + "in": "query", + "description": "Determines how many items should be taken.", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + }, + "description": "Identifiers of the contexts." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/AuditEntryModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + } + }, + "components": { + "requestBodies": { + "GetBusinessFunctionLogsBusinessfunctionids": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int64", + "type": "integer" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int64", + "type": "integer" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int64", + "type": "integer" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int64", + "type": "integer" + } + } + } + }, + "description": "Identifiers of the business functions." + }, + "GetMitigationLogsMitigationids": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int64", + "type": "integer" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int64", + "type": "integer" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int64", + "type": "integer" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int64", + "type": "integer" + } + } + } + }, + "description": "Identifiers of the mitigations." + }, + "GetSystemLogsSystemids": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + } + } + }, + "description": "Identifiers of the systems." + }, + "GetRiskApproverLogsRuleids": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + }, + "description": "Identifiers of related rules." + }, + "GetUserLogsUserids": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + }, + "description": "Identifiers of the users." + }, + "GetUserRoleLogsCustomerids": { + "content": { + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + }, + "description": "Identifiers of the customers." + } + }, + "schemas": { + "AuditEntryModel": { + "description": "Represents model for an audit log item. Contains information about what, who and when changed.", + "type": "object", + "properties": { + "id": { + "format": "int64", + "description": "Identifier of the log item.", + "type": "integer" + }, + "serviceName": { + "description": "Name of the service audit log item belongs to.", + "type": "string" + }, + "tableName": { + "description": "Name of the table audit log item belongs to.", + "type": "string" + }, + "utcTimestamp": { + "format": "date-time", + "description": "Created date of audit log item, UTC.", + "type": "string" + }, + "operation": { + "$ref": "#/components/schemas/Operation" + }, + "user": { + "description": "Name of user, who created audit log item.", + "type": "string" + }, + "keyValues": { + "description": "Key values of related entity.", + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "oldValues": { + "description": "Old values of related entity.", + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "newValues": { + "description": "New values of related entity.", + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + }, + "Operation": { + "enum": [ + "?", + "i", + "u", + "d" + ], + "type": "string" + }, + "AnonymousLog": { + "description": "Anonymous log model\r\nShould have all fields in ErpMaestro.LoggingServices.Common.Models.Log\r\nexcept identity specific properties like Id, User, and Logger", + "required": [ + "application", + "level", + "machine", + "message", + "utcTimestamp" + ], + "type": "object", + "properties": { + "token": { + "type": "string" + }, + "id": { + "format": "int64", + "type": "integer" + }, + "application": { + "maxLength": 100, + "minLength": 0, + "type": "string" + }, + "exception": { + "type": "string" + }, + "level": { + "maxLength": 20, + "minLength": 0, + "type": "string" + }, + "logger": { + "maxLength": 250, + "minLength": 0, + "type": "string" + }, + "machine": { + "maxLength": 100, + "minLength": 0, + "type": "string" + }, + "message": { + "type": "string" + }, + "referenceId": { + "type": "string" + }, + "utcTimestamp": { + "format": "date-time", + "type": "string" + } + } + }, + "CentralLog": { + "required": [ + "application", + "level", + "machine", + "message", + "utcTimestamp" + ], + "type": "object", + "properties": { + "id": { + "format": "int64", + "type": "integer" + }, + "application": { + "maxLength": 100, + "minLength": 0, + "type": "string" + }, + "exception": { + "type": "string" + }, + "level": { + "maxLength": 20, + "minLength": 0, + "type": "string" + }, + "logger": { + "maxLength": 250, + "minLength": 0, + "type": "string" + }, + "machine": { + "maxLength": 100, + "minLength": 0, + "type": "string" + }, + "message": { + "type": "string" + }, + "referenceId": { + "type": "string" + }, + "utcTimestamp": { + "format": "date-time", + "type": "string" + } + } + }, + "FrontEndLogModel": { + "description": "Log model from the Front End", + "required": [ + "application", + "level", + "machine", + "message", + "utcTimestamp" + ], + "type": "object", + "properties": { + "application": { + "description": "Name of the applications that created this log entry", + "maxLength": 100, + "minLength": 0, + "type": "string" + }, + "exception": { + "description": "Exception data if any.", + "type": "string" + }, + "level": { + "description": "Level of the log entry. Trace, Info, Warn, Error, etc", + "maxLength": 20, + "minLength": 0, + "type": "string" + }, + "machine": { + "description": "Name of the machine where the event being logged happened", + "maxLength": 100, + "minLength": 0, + "type": "string" + }, + "message": { + "description": "Event log message text.", + "type": "string" + }, + "utcTimestamp": { + "format": "date-time", + "description": "When the even occurred. In UTC.", + "type": "string" + } + } + } + } + } +} \ No newline at end of file diff --git a/static/arm-api/swagger-provisioning.json b/static/arm-api/swagger-provisioning.json new file mode 100644 index 000000000..da6edc712 --- /dev/null +++ b/static/arm-api/swagger-provisioning.json @@ -0,0 +1,3854 @@ +{ + "openapi": "3.0.0", + "info": { + "version": "1.0", + "title": "Access Risk Management Provisioning Services Web APIs" + }, + "paths": { + "/api/provisioning/requests/{erpSystemId}": { + "get": { + "tags": [ + "AutomatedProvisioning" + ], + "summary": "Gets a list of provisioning request for the specified system.", + "operationId": "GetRequests", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "displayType", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "undefined", + "all", + "mine" + ] + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + }, + "deprecated": true + } + }, + "/api/provisioning/export/{erpSystemId}": { + "get": { + "tags": [ + "AutomatedProvisioning" + ], + "summary": "Exports a list of provisioning request as an Excel file.", + "operationId": "Export", + "parameters": [ + { + "name": "oDataOptions", + "in": "query", + "required": false + }, + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "displayType", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "undefined", + "all", + "mine" + ] + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/provisioning/requestDetails/{requestId}": { + "get": { + "tags": [ + "AutomatedProvisioning" + ], + "summary": "Gets a provisioning request for the specified id.", + "operationId": "GetRequest", + "parameters": [ + { + "name": "requestId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + }, + "deprecated": true + } + }, + "/api/provisioning/newUser": { + "post": { + "tags": [ + "AutomatedProvisioning" + ], + "summary": "Creates a new user provisioning request. Returns the unique identifier of the new request.", + "operationId": "NewUserProvisioningRequest", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.NewUserProvisioningRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.NewUserProvisioningRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.NewUserProvisioningRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.NewUserProvisioningRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.NewUserProvisioningRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.NewUserProvisioningRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.NewUserProvisioningRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.NewUserProvisioningRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.NewUserProvisioningRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.NewUserProvisioningRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.NewUserProvisioningRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.NewUserProvisioningRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.NewUserProvisioningRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.NewUserProvisioningRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.NewUserProvisioningRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.NewUserProvisioningRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.NewUserProvisioningRequest" + } + } + } + }, + "responses": { + "201": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/xml": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/plain": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + }, + "deprecated": true + } + }, + "/api/provisioning/existingUser": { + "post": { + "tags": [ + "AutomatedProvisioning" + ], + "summary": "Creates an existing user provisioning request. Returns the unique identifier of the new request.", + "operationId": "ExistingUserProvisioningRequest", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.ExistingUserProvisioningRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.ExistingUserProvisioningRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.ExistingUserProvisioningRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.ExistingUserProvisioningRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.ExistingUserProvisioningRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.ExistingUserProvisioningRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.ExistingUserProvisioningRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.ExistingUserProvisioningRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.ExistingUserProvisioningRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.ExistingUserProvisioningRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.ExistingUserProvisioningRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.ExistingUserProvisioningRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.ExistingUserProvisioningRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.ExistingUserProvisioningRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.ExistingUserProvisioningRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.ExistingUserProvisioningRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.ExistingUserProvisioningRequest" + } + } + } + }, + "responses": { + "201": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/xml": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/plain": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + }, + "deprecated": true + } + }, + "/api/provisioning/executeAction": { + "post": { + "tags": [ + "AutomatedProvisioning" + ], + "summary": "Creates a new user provisioning request. Returns the unique identifier of the new request.", + "operationId": "ExecuteAction", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningActionModel" + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/provisioning": { + "put": { + "tags": [ + "AutomatedProvisioning" + ], + "summary": "Updates an existing provisioning request.", + "operationId": "UpdateProvisioningRequest", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + }, + "deprecated": true + } + }, + "/api/v1/provisioning/executeActon/noValidations": { + "post": { + "tags": [ + "AutomatedProvisioning" + ], + "summary": "Approve the request if exist bypassing the approval validations", + "operationId": "ExecuteRequestV2BypassingValidation", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningActionModel" + }, + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/tenancycheck/erpsystem/{systemId}": { + "post": { + "tags": [ + "TenancyCheck" + ], + "summary": "Verifies if provided ERP System belongs to the Customer.", + "operationId": "ErpSystemTenancyCheck", + "parameters": [ + { + "name": "systemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/ErpSystemTenancyCheckCustomerids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json": { + "schema": { + "type": "boolean" + } + }, + "application/xml": { + "schema": { + "type": "boolean" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "boolean" + } + }, + "text/plain": { + "schema": { + "type": "boolean" + } + }, + "text/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/tenancycheck/username/{systemId}/{username}": { + "post": { + "tags": [ + "TenancyCheck" + ], + "summary": "Verifies if user with provided Username belongs to the Customer.", + "operationId": "UsernameTenancyCheck", + "parameters": [ + { + "name": "systemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "username", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/ErpSystemTenancyCheckCustomerids" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json": { + "schema": { + "type": "boolean" + } + }, + "application/xml": { + "schema": { + "type": "boolean" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "boolean" + } + }, + "text/plain": { + "schema": { + "type": "boolean" + } + }, + "text/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + }, + "deprecated": true + } + } + }, + "components": { + "requestBodies": { + "ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningActionModel": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningActionModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningActionModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningActionModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningActionModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningActionModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningActionModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningActionModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningActionModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningActionModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningActionModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningActionModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningActionModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningActionModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningActionModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningActionModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningActionModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningActionModel" + } + } + } + }, + "ErpSystemTenancyCheckCustomerids": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + } + } + }, + "schemas": { + "ErpMaestro.ProvisioningServices.Common.Enums.AuthorshipDisplayType": { + "enum": [ + "undefined", + "all", + "mine" + ], + "type": "string" + }, + "ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel": { + "description": "Represents the model for an automated provisioning request.", + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "The unique identifier of the request.", + "type": "string" + }, + "displayId": { + "description": "Represents a friendly version of the id for display purposes.", + "type": "string", + "readOnly": true + }, + "accountId": { + "format": "int32", + "description": "The id of the parent account.", + "type": "integer" + }, + "erpSystemId": { + "format": "int32", + "description": "The id of the parent ERP system.", + "type": "integer" + }, + "securityExtractId": { + "format": "int32", + "description": "The id of the security extract used in the request.", + "type": "integer" + }, + "state": { + "description": "The current state of the request.\r\nOne of the ErpMaestro.ProvisioningServices.Common.Enums.AutomatedProvisioningState elements.", + "type": "string", + "readOnly": true + }, + "results": { + "description": "Represents the current results of the request.", + "type": "string" + }, + "requestedFor": { + "description": "Represents the username of the user the request is for.", + "type": "string" + }, + "requestedBy": { + "description": "Represents the username of the user who performed the request.", + "type": "string" + }, + "requestDate": { + "format": "date-time", + "description": "Represents the date and time the request was made.", + "type": "string" + }, + "completionDate": { + "format": "date-time", + "description": "Represents the date and time the request was completed.", + "type": "string" + }, + "enableManagerApprovals": { + "description": "Represents if Manager Approvals are enabled.", + "type": "boolean" + }, + "approvers": { + "description": "Represents a collection of approvers for the request.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningApproverModel" + } + }, + "actions": { + "description": "Represents the available actions for the request based on ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningRequestModel.RequestState\r\nand user permissions. One of the ErpMaestro.ProvisioningServices.Common.Enums.AutomatedProvisioningActions elements.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Enums.AutomatedProvisioningActions" + } + }, + "activityHistory": { + "description": "Represents the activity history for the request.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.EmergencyAccess.RequestActivity" + } + }, + "roleChanges": { + "description": "Represents a collection of role changes for the request.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.RoleChange" + } + }, + "userDetails": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.SapUserModel" + }, + "comment": { + "description": "Represents the comments of the request.", + "type": "string" + }, + "provisionPartialRoles": { + "description": "Determines if request could be provisioned even if some of its roles have been rejected.", + "type": "boolean" + }, + "jobId": { + "format": "int32", + "description": "Job id", + "type": "integer" + }, + "cloneRolesFromUser": { + "description": "ERP user name to clone roles from", + "type": "string" + } + } + }, + "ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningApproverModel": { + "description": "Represents the model for an EAM user.", + "type": "object", + "properties": { + "userId": { + "format": "uuid", + "description": "The user's unique identifier.", + "type": "string" + }, + "email": { + "description": "The user's email.", + "type": "string" + }, + "fullName": { + "description": "The user's full name.", + "type": "string" + }, + "username": { + "description": "The user's username.", + "type": "string" + }, + "approvalState": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Enums.AutomatedProvisioningApprovalState" + }, + "approverType": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Enums.ApproverType" + } + } + }, + "ErpMaestro.ProvisioningServices.Common.Enums.AutomatedProvisioningActions": { + "enum": [ + "undefined", + "view", + "approve", + "reject" + ], + "type": "string" + }, + "ErpMaestro.ProvisioningServices.Common.Models.EmergencyAccess.RequestActivity": { + "type": "object", + "properties": { + "timeStamp": { + "format": "date-time", + "type": "string" + }, + "activity": { + "type": "string" + }, + "userName": { + "type": "string" + }, + "fullName": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "ErpMaestro.ProvisioningServices.Common.Models.RoleChange": { + "description": "Represents the model of a role change.", + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "The unique identifier of the role.", + "type": "string" + }, + "roleName": { + "description": "The role name.", + "type": "string" + }, + "description": { + "description": "Represents the description of the role changed.", + "type": "string" + }, + "changeType": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Enums.RoleChangeType" + }, + "validFrom": { + "format": "date-time", + "description": "The start date of the validity of the role.", + "type": "string" + }, + "validTo": { + "format": "date-time", + "description": "The end date of the validity of the role.", + "type": "string" + }, + "approvers": { + "description": "Role's approvers.", + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "approvalState": { + "description": "Role's state of approval", + "enum": [ + "waitingOnApprover", + "approved", + "rejected", + "noAction" + ], + "type": "string" + } + } + }, + "ErpMaestro.ProvisioningServices.Common.Models.SapUserModel": { + "description": "Represents the model for a SAP user.", + "required": [ + "username", + "email", + "lastName", + "userType" + ], + "type": "object", + "properties": { + "username": { + "description": "Represents the id of the user.", + "maxLength": 12, + "type": "string" + }, + "email": { + "description": "Represents the user's email address.", + "type": "string" + }, + "firstName": { + "description": "Represents the user's first name.", + "type": "string" + }, + "lastName": { + "description": "Represents the user's last name.", + "type": "string" + }, + "userType": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Enums.SapUserType" + }, + "userClass": { + "description": "Represents the user's class.", + "type": "string" + }, + "validFrom": { + "format": "date-time", + "description": "Represents the date from which the user is valid.", + "type": "string" + }, + "validTo": { + "format": "date-time", + "description": "Represents the date to which the user is valid.", + "type": "string" + } + } + }, + "ErpMaestro.ProvisioningServices.Common.Enums.AutomatedProvisioningApprovalState": { + "enum": [ + "waitingOnApprover", + "approved", + "rejected", + "noAction" + ], + "type": "string" + }, + "ErpMaestro.ProvisioningServices.Common.Enums.ApproverType": { + "enum": [ + "undefined", + "manager", + "roleApprover", + "ruleApprover" + ], + "type": "string" + }, + "ErpMaestro.ProvisioningServices.Common.Enums.RoleChangeType": { + "enum": [ + "add", + "remove", + "change" + ], + "type": "string" + }, + "ErpMaestro.ProvisioningServices.Common.Enums.SapUserType": { + "enum": [ + "a", + "b", + "c", + "l", + "s" + ], + "type": "string" + }, + "Microsoft.AspNetCore.Http.HttpRequest": { + "type": "object", + "properties": { + "httpContext": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.HttpContext" + }, + "method": { + "type": "string" + }, + "scheme": { + "type": "string" + }, + "isHttps": { + "type": "boolean" + }, + "host": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.HostString" + }, + "pathBase": { + "type": "string" + }, + "path": { + "type": "string" + }, + "queryString": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.QueryString" + }, + "query": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_Microsoft.Extensions.Primitives.StringValues_Microsoft.Extensions.Primitives_Version_3.0.0.0_Culture_neutral_PublicKeyToken_adb9793829ddae60_" + } + }, + "protocol": { + "type": "string" + }, + "headers": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "readOnly": true + }, + "cookies": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + } + }, + "contentLength": { + "format": "int64", + "type": "integer" + }, + "contentType": { + "type": "string" + }, + "body": { + "$ref": "#/components/schemas/System.IO.Stream" + }, + "hasFormContentType": { + "type": "boolean", + "readOnly": true + }, + "form": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_Microsoft.Extensions.Primitives.StringValues_Microsoft.Extensions.Primitives_Version_3.0.0.0_Culture_neutral_PublicKeyToken_adb9793829ddae60_" + } + } + } + }, + "Microsoft.AspNet.OData.ODataQueryContext": { + "type": "object", + "properties": { + "defaultQuerySettings": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.DefaultQuerySettings" + }, + "model": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmModel" + }, + "elementType": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmType" + }, + "navigationSource": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmNavigationSource" + }, + "elementClrType": { + "type": "string", + "readOnly": true + }, + "path": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Routing.ODataPath" + }, + "requestContainer": { + "$ref": "#/components/schemas/System.IServiceProvider" + } + } + }, + "Microsoft.AspNet.OData.Query.ODataRawQueryOptions": { + "type": "object", + "properties": { + "filter": { + "type": "string", + "readOnly": true + }, + "apply": { + "type": "string", + "readOnly": true + }, + "orderBy": { + "type": "string", + "readOnly": true + }, + "top": { + "type": "string", + "readOnly": true + }, + "skip": { + "type": "string", + "readOnly": true + }, + "select": { + "type": "string", + "readOnly": true + }, + "expand": { + "type": "string", + "readOnly": true + }, + "count": { + "type": "string", + "readOnly": true + }, + "format": { + "type": "string", + "readOnly": true + }, + "skipToken": { + "type": "string", + "readOnly": true + }, + "deltaToken": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.AspNet.OData.Query.SelectExpandQueryOption": { + "type": "object", + "properties": { + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "rawSelect": { + "type": "string", + "readOnly": true + }, + "rawExpand": { + "type": "string", + "readOnly": true + }, + "validator": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.Validators.SelectExpandQueryValidator" + }, + "selectExpandClause": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.SelectExpandClause" + }, + "levelsMaxLiteralExpansionDepth": { + "format": "int32", + "type": "integer" + } + } + }, + "Microsoft.AspNet.OData.Query.ApplyQueryOption": { + "type": "object", + "properties": { + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "resultClrType": { + "type": "string", + "readOnly": true + }, + "applyClause": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.Aggregation.ApplyClause" + }, + "rawValue": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.AspNet.OData.Query.FilterQueryOption": { + "type": "object", + "properties": { + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "validator": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.Validators.FilterQueryValidator" + }, + "filterClause": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.FilterClause" + }, + "rawValue": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.AspNet.OData.Query.OrderByQueryOption": { + "type": "object", + "properties": { + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "orderByNodes": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.OrderByNode" + }, + "readOnly": true + }, + "rawValue": { + "type": "string", + "readOnly": true + }, + "validator": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.Validators.OrderByQueryValidator" + }, + "orderByClause": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.OrderByClause" + } + } + }, + "Microsoft.AspNet.OData.Query.SkipQueryOption": { + "type": "object", + "properties": { + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "rawValue": { + "type": "string", + "readOnly": true + }, + "value": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "validator": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.Validators.SkipQueryValidator" + } + } + }, + "Microsoft.AspNet.OData.Query.SkipTokenQueryOption": { + "type": "object", + "properties": { + "rawValue": { + "type": "string", + "readOnly": true + }, + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "validator": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.Validators.SkipTokenQueryValidator" + }, + "querySettings": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.ODataQuerySettings" + }, + "queryOptions": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.ODataQueryOptions" + } + } + }, + "Microsoft.AspNet.OData.Query.TopQueryOption": { + "type": "object", + "properties": { + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "rawValue": { + "type": "string", + "readOnly": true + }, + "value": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "validator": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.Validators.TopQueryValidator" + } + } + }, + "Microsoft.AspNet.OData.Query.CountQueryOption": { + "type": "object", + "properties": { + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "rawValue": { + "type": "string", + "readOnly": true + }, + "value": { + "type": "boolean", + "readOnly": true + }, + "validator": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.Validators.CountQueryValidator" + } + } + }, + "Microsoft.AspNet.OData.Query.Validators.ODataQueryValidator": { + "type": "object", + "properties": {} + }, + "Microsoft.AspNetCore.Http.HttpContext": { + "type": "object", + "properties": { + "features": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Collections.Generic.KeyValuePair_2_System.Type_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.Object_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_" + }, + "readOnly": true + }, + "request": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.HttpRequest" + }, + "response": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.HttpResponse" + }, + "connection": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.ConnectionInfo" + }, + "webSockets": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.WebSocketManager" + }, + "user": { + "$ref": "#/components/schemas/System.Security.Claims.ClaimsPrincipal" + }, + "items": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "requestServices": { + "$ref": "#/components/schemas/System.IServiceProvider" + }, + "requestAborted": { + "$ref": "#/components/schemas/System.Threading.CancellationToken" + }, + "traceIdentifier": { + "type": "string" + }, + "session": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.ISession" + } + } + }, + "Microsoft.AspNetCore.Http.HostString": { + "type": "object", + "properties": { + "value": { + "type": "string", + "readOnly": true + }, + "hasValue": { + "type": "boolean", + "readOnly": true + }, + "host": { + "type": "string", + "readOnly": true + }, + "port": { + "format": "int32", + "type": "integer", + "readOnly": true + } + } + }, + "Microsoft.AspNetCore.Http.QueryString": { + "type": "object", + "properties": { + "value": { + "type": "string", + "readOnly": true + }, + "hasValue": { + "type": "boolean", + "readOnly": true + } + } + }, + "System.IO.Stream": { + "type": "object", + "properties": { + "canRead": { + "type": "boolean", + "readOnly": true + }, + "canSeek": { + "type": "boolean", + "readOnly": true + }, + "canTimeout": { + "type": "boolean", + "readOnly": true + }, + "canWrite": { + "type": "boolean", + "readOnly": true + }, + "length": { + "format": "int64", + "type": "integer", + "readOnly": true + }, + "position": { + "format": "int64", + "type": "integer" + }, + "readTimeout": { + "format": "int32", + "type": "integer" + }, + "writeTimeout": { + "format": "int32", + "type": "integer" + } + } + }, + "Microsoft.AspNet.OData.Query.DefaultQuerySettings": { + "type": "object", + "properties": { + "enableExpand": { + "type": "boolean" + }, + "enableSelect": { + "type": "boolean" + }, + "enableCount": { + "type": "boolean" + }, + "enableOrderBy": { + "type": "boolean" + }, + "enableFilter": { + "type": "boolean" + }, + "maxTop": { + "format": "int32", + "type": "integer" + }, + "enableSkipToken": { + "type": "boolean" + } + } + }, + "Microsoft.OData.Edm.IEdmModel": { + "type": "object", + "properties": { + "schemaElements": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmSchemaElement" + }, + "readOnly": true + }, + "vocabularyAnnotations": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.Vocabularies.IEdmVocabularyAnnotation" + }, + "readOnly": true + }, + "referencedModels": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmModel" + }, + "readOnly": true + }, + "declaredNamespaces": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true + }, + "directValueAnnotationsManager": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.Vocabularies.IEdmDirectValueAnnotationsManager" + }, + "entityContainer": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmEntityContainer" + } + } + }, + "Microsoft.OData.Edm.IEdmType": { + "type": "object", + "properties": { + "typeKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmTypeKind" + } + } + }, + "Microsoft.OData.Edm.IEdmNavigationSource": { + "type": "object", + "properties": { + "navigationPropertyBindings": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmNavigationPropertyBinding" + }, + "readOnly": true + }, + "path": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmPathExpression" + }, + "type": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmType" + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.AspNet.OData.Routing.ODataPath": { + "type": "object", + "properties": { + "edmType": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmType" + }, + "navigationSource": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmNavigationSource" + }, + "segments": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.ODataPathSegment" + }, + "readOnly": true + }, + "pathTemplate": { + "type": "string", + "readOnly": true + }, + "path": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.ODataPathSegment" + }, + "readOnly": true + } + } + }, + "System.IServiceProvider": { + "type": "object", + "properties": {} + }, + "Microsoft.AspNet.OData.Query.Validators.SelectExpandQueryValidator": { + "type": "object", + "properties": {} + }, + "Microsoft.OData.UriParser.SelectExpandClause": { + "type": "object", + "properties": { + "selectedItems": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.SelectItem" + }, + "readOnly": true + }, + "allSelected": { + "type": "boolean", + "readOnly": true + } + } + }, + "Microsoft.OData.UriParser.Aggregation.ApplyClause": { + "type": "object", + "properties": { + "transformations": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.Aggregation.TransformationNode" + }, + "readOnly": true + } + } + }, + "Microsoft.AspNet.OData.Query.Validators.FilterQueryValidator": { + "type": "object", + "properties": {} + }, + "Microsoft.OData.UriParser.FilterClause": { + "type": "object", + "properties": { + "expression": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.SingleValueNode" + }, + "rangeVariable": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.RangeVariable" + }, + "itemType": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmTypeReference" + } + } + }, + "Microsoft.AspNet.OData.Query.OrderByNode": { + "type": "object", + "properties": { + "direction": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.OrderByDirection" + } + } + }, + "Microsoft.AspNet.OData.Query.Validators.OrderByQueryValidator": { + "type": "object", + "properties": {} + }, + "Microsoft.OData.UriParser.OrderByClause": { + "type": "object", + "properties": { + "thenBy": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.OrderByClause" + }, + "expression": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.SingleValueNode" + }, + "direction": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.OrderByDirection" + }, + "rangeVariable": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.RangeVariable" + }, + "itemType": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmTypeReference" + } + } + }, + "Microsoft.AspNet.OData.Query.Validators.SkipQueryValidator": { + "type": "object", + "properties": {} + }, + "Microsoft.AspNet.OData.Query.Validators.SkipTokenQueryValidator": { + "type": "object", + "properties": {} + }, + "Microsoft.AspNet.OData.Query.ODataQuerySettings": { + "type": "object", + "properties": { + "ensureStableOrdering": { + "type": "boolean" + }, + "handleNullPropagation": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.HandleNullPropagationOption" + }, + "enableConstantParameterization": { + "type": "boolean" + }, + "enableCorrelatedSubqueryBuffering": { + "type": "boolean" + }, + "pageSize": { + "format": "int32", + "type": "integer" + }, + "handleReferenceNavigationPropertyExpandFilter": { + "type": "boolean" + } + } + }, + "Microsoft.AspNet.OData.Query.ODataQueryOptions": { + "type": "object", + "properties": { + "request": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.HttpRequest" + }, + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "rawValues": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.ODataRawQueryOptions" + }, + "selectExpand": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.SelectExpandQueryOption" + }, + "apply": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.ApplyQueryOption" + }, + "filter": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.FilterQueryOption" + }, + "orderBy": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.OrderByQueryOption" + }, + "skip": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.SkipQueryOption" + }, + "skipToken": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.SkipTokenQueryOption" + }, + "top": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.TopQueryOption" + }, + "count": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.CountQueryOption" + }, + "validator": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.Validators.ODataQueryValidator" + }, + "ifMatch": { + "type": "object", + "readOnly": true + }, + "ifNoneMatch": { + "type": "object", + "readOnly": true + } + } + }, + "Microsoft.AspNet.OData.Query.Validators.TopQueryValidator": { + "type": "object", + "properties": {} + }, + "Microsoft.AspNet.OData.Query.Validators.CountQueryValidator": { + "type": "object", + "properties": {} + }, + "Microsoft.AspNetCore.Http.HttpResponse": { + "type": "object", + "properties": { + "httpContext": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.HttpContext" + }, + "statusCode": { + "format": "int32", + "type": "integer" + }, + "headers": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "readOnly": true + }, + "body": { + "$ref": "#/components/schemas/System.IO.Stream" + }, + "contentLength": { + "format": "int64", + "type": "integer" + }, + "contentType": { + "type": "string" + }, + "cookies": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.IResponseCookies" + }, + "hasStarted": { + "type": "boolean", + "readOnly": true + } + } + }, + "Microsoft.AspNetCore.Http.ConnectionInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "remoteIpAddress": { + "$ref": "#/components/schemas/System.Net.IPAddress" + }, + "remotePort": { + "format": "int32", + "type": "integer" + }, + "localIpAddress": { + "$ref": "#/components/schemas/System.Net.IPAddress" + }, + "localPort": { + "format": "int32", + "type": "integer" + }, + "clientCertificate": { + "$ref": "#/components/schemas/System.Security.Cryptography.X509Certificates.X509Certificate2" + } + } + }, + "Microsoft.AspNetCore.Http.WebSocketManager": { + "type": "object", + "properties": { + "isWebSocketRequest": { + "type": "boolean", + "readOnly": true + }, + "webSocketRequestedProtocols": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true + } + } + }, + "System.Security.Claims.ClaimsPrincipal": { + "type": "object", + "properties": { + "claims": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Security.Claims.Claim" + }, + "readOnly": true + }, + "identities": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Security.Claims.ClaimsIdentity" + }, + "readOnly": true + }, + "identity": { + "$ref": "#/components/schemas/System.Security.Principal.IIdentity" + } + } + }, + "System.Threading.CancellationToken": { + "type": "object", + "properties": { + "isCancellationRequested": { + "type": "boolean", + "readOnly": true + }, + "canBeCanceled": { + "type": "boolean", + "readOnly": true + }, + "waitHandle": { + "$ref": "#/components/schemas/System.Threading.WaitHandle" + } + } + }, + "Microsoft.AspNetCore.Http.ISession": { + "type": "object", + "properties": { + "isAvailable": { + "type": "boolean", + "readOnly": true + }, + "id": { + "type": "string", + "readOnly": true + }, + "keys": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true + } + } + }, + "Microsoft.OData.Edm.IEdmSchemaElement": { + "type": "object", + "properties": { + "schemaElementKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmSchemaElementKind" + }, + "namespace": { + "type": "string", + "readOnly": true + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.OData.Edm.Vocabularies.IEdmVocabularyAnnotation": { + "type": "object", + "properties": { + "qualifier": { + "type": "string", + "readOnly": true + }, + "term": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.Vocabularies.IEdmTerm" + }, + "target": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.Vocabularies.IEdmVocabularyAnnotatable" + }, + "value": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmExpression" + } + } + }, + "Microsoft.OData.Edm.Vocabularies.IEdmDirectValueAnnotationsManager": { + "type": "object", + "properties": {} + }, + "Microsoft.OData.Edm.IEdmEntityContainer": { + "type": "object", + "properties": { + "elements": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmEntityContainerElement" + }, + "readOnly": true + }, + "schemaElementKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmSchemaElementKind" + }, + "namespace": { + "type": "string", + "readOnly": true + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.OData.Edm.EdmTypeKind": { + "enum": [ + "none", + "primitive", + "entity", + "complex", + "collection", + "entityReference", + "enum", + "typeDefinition", + "untyped", + "path" + ], + "type": "string" + }, + "Microsoft.OData.Edm.IEdmNavigationPropertyBinding": { + "type": "object", + "properties": { + "navigationProperty": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmNavigationProperty" + }, + "target": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmNavigationSource" + }, + "path": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmPathExpression" + } + } + }, + "Microsoft.OData.Edm.IEdmPathExpression": { + "type": "object", + "properties": { + "pathSegments": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true + }, + "path": { + "type": "string", + "readOnly": true + }, + "expressionKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmExpressionKind" + } + } + }, + "Microsoft.OData.UriParser.ODataPathSegment": { + "type": "object", + "properties": { + "edmType": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmType" + }, + "identifier": { + "type": "string" + } + } + }, + "Microsoft.OData.UriParser.SelectItem": { + "type": "object", + "properties": {} + }, + "Microsoft.OData.UriParser.Aggregation.TransformationNode": { + "type": "object", + "properties": { + "kind": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.Aggregation.TransformationNodeKind" + } + } + }, + "Microsoft.OData.UriParser.SingleValueNode": { + "type": "object", + "properties": { + "typeReference": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmTypeReference" + }, + "kind": { + "$ref": "#/components/schemas/Microsoft.OData.UriParser.QueryNodeKind" + } + } + }, + "Microsoft.OData.UriParser.RangeVariable": { + "type": "object", + "properties": { + "name": { + "type": "string", + "readOnly": true + }, + "typeReference": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmTypeReference" + }, + "kind": { + "format": "int32", + "type": "integer", + "readOnly": true + } + } + }, + "Microsoft.OData.Edm.IEdmTypeReference": { + "type": "object", + "properties": { + "isNullable": { + "type": "boolean", + "readOnly": true + }, + "definition": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmType" + } + } + }, + "Microsoft.OData.UriParser.OrderByDirection": { + "enum": [ + "ascending", + "descending" + ], + "type": "string" + }, + "Microsoft.AspNet.OData.Query.HandleNullPropagationOption": { + "enum": [ + "default", + "true", + "false" + ], + "type": "string" + }, + "Microsoft.AspNetCore.Http.IResponseCookies": { + "type": "object", + "properties": {} + }, + "System.Net.IPAddress": { + "type": "object", + "properties": { + "addressFamily": { + "$ref": "#/components/schemas/System.Net.Sockets.AddressFamily" + }, + "scopeId": { + "format": "int64", + "type": "integer" + }, + "isIPv6Multicast": { + "type": "boolean", + "readOnly": true + }, + "isIPv6LinkLocal": { + "type": "boolean", + "readOnly": true + }, + "isIPv6SiteLocal": { + "type": "boolean", + "readOnly": true + }, + "isIPv6Teredo": { + "type": "boolean", + "readOnly": true + }, + "isIPv4MappedToIPv6": { + "type": "boolean", + "readOnly": true + } + } + }, + "System.Security.Cryptography.X509Certificates.X509Certificate2": { + "type": "object", + "properties": { + "archived": { + "type": "boolean" + }, + "extensions": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "object" + }, + "readOnly": true + }, + "friendlyName": { + "type": "string" + }, + "hasPrivateKey": { + "type": "boolean", + "readOnly": true + }, + "privateKey": { + "$ref": "#/components/schemas/System.Security.Cryptography.AsymmetricAlgorithm" + }, + "issuerName": { + "$ref": "#/components/schemas/System.Security.Cryptography.X509Certificates.X500DistinguishedName" + }, + "notAfter": { + "format": "date-time", + "type": "string", + "readOnly": true + }, + "notBefore": { + "format": "date-time", + "type": "string", + "readOnly": true + }, + "publicKey": { + "$ref": "#/components/schemas/System.Security.Cryptography.X509Certificates.PublicKey" + }, + "rawData": { + "format": "byte", + "type": "string", + "readOnly": true + }, + "serialNumber": { + "type": "string", + "readOnly": true + }, + "signatureAlgorithm": { + "$ref": "#/components/schemas/System.Security.Cryptography.Oid" + }, + "subjectName": { + "$ref": "#/components/schemas/System.Security.Cryptography.X509Certificates.X500DistinguishedName" + }, + "thumbprint": { + "type": "string", + "readOnly": true + }, + "version": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "handle": { + "type": "object", + "readOnly": true + }, + "issuer": { + "type": "string", + "readOnly": true + }, + "subject": { + "type": "string", + "readOnly": true + } + } + }, + "System.Security.Claims.Claim": { + "type": "object", + "properties": { + "issuer": { + "type": "string", + "readOnly": true + }, + "originalIssuer": { + "type": "string", + "readOnly": true + }, + "properties": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "readOnly": true + }, + "subject": { + "$ref": "#/components/schemas/System.Security.Claims.ClaimsIdentity" + }, + "type": { + "type": "string", + "readOnly": true + }, + "value": { + "type": "string", + "readOnly": true + }, + "valueType": { + "type": "string", + "readOnly": true + } + } + }, + "System.Security.Claims.ClaimsIdentity": { + "type": "object", + "properties": { + "authenticationType": { + "type": "string", + "readOnly": true + }, + "isAuthenticated": { + "type": "boolean", + "readOnly": true + }, + "actor": { + "$ref": "#/components/schemas/System.Security.Claims.ClaimsIdentity" + }, + "bootstrapContext": { + "type": "object" + }, + "claims": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Security.Claims.Claim" + }, + "readOnly": true + }, + "label": { + "type": "string" + }, + "name": { + "type": "string", + "readOnly": true + }, + "nameClaimType": { + "type": "string", + "readOnly": true + }, + "roleClaimType": { + "type": "string", + "readOnly": true + } + } + }, + "System.Security.Principal.IIdentity": { + "type": "object", + "properties": { + "authenticationType": { + "type": "string", + "readOnly": true + }, + "isAuthenticated": { + "type": "boolean", + "readOnly": true + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "System.Threading.WaitHandle": { + "type": "object", + "properties": { + "safeWaitHandle": { + "$ref": "#/components/schemas/Microsoft.Win32.SafeHandles.SafeWaitHandle" + } + } + }, + "Microsoft.OData.Edm.EdmSchemaElementKind": { + "enum": [ + "none", + "typeDefinition", + "term", + "action", + "entityContainer", + "function" + ], + "type": "string" + }, + "Microsoft.OData.Edm.Vocabularies.IEdmTerm": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmTypeReference" + }, + "appliesTo": { + "type": "string", + "readOnly": true + }, + "defaultValue": { + "type": "string", + "readOnly": true + }, + "schemaElementKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmSchemaElementKind" + }, + "namespace": { + "type": "string", + "readOnly": true + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.OData.Edm.Vocabularies.IEdmVocabularyAnnotatable": { + "type": "object", + "properties": {} + }, + "Microsoft.OData.Edm.IEdmExpression": { + "type": "object", + "properties": { + "expressionKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmExpressionKind" + } + } + }, + "Microsoft.OData.Edm.IEdmEntityContainerElement": { + "type": "object", + "properties": { + "containerElementKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmContainerElementKind" + }, + "container": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmEntityContainer" + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.OData.Edm.IEdmNavigationProperty": { + "type": "object", + "properties": { + "partner": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmNavigationProperty" + }, + "onDelete": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmOnDeleteAction" + }, + "containsTarget": { + "type": "boolean", + "readOnly": true + }, + "referentialConstraint": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmReferentialConstraint" + }, + "propertyKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmPropertyKind" + }, + "type": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmTypeReference" + }, + "declaringType": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmStructuredType" + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.OData.Edm.EdmExpressionKind": { + "enum": [ + "none", + "binaryConstant", + "booleanConstant", + "dateTimeOffsetConstant", + "decimalConstant", + "floatingConstant", + "guidConstant", + "integerConstant", + "stringConstant", + "durationConstant", + "null", + "record", + "collection", + "path", + "if", + "cast", + "isType", + "functionApplication", + "labeledExpressionReference", + "labeled", + "propertyPath", + "navigationPropertyPath", + "dateConstant", + "timeOfDayConstant", + "enumMember", + "annotationPath" + ], + "type": "string" + }, + "Microsoft.OData.UriParser.Aggregation.TransformationNodeKind": { + "enum": [ + "aggregate", + "groupBy", + "filter", + "compute", + "expand" + ], + "type": "string" + }, + "Microsoft.OData.UriParser.QueryNodeKind": { + "enum": [ + "none", + "constant", + "convert", + "nonResourceRangeVariableReference", + "binaryOperator", + "unaryOperator", + "singleValuePropertyAccess", + "collectionPropertyAccess", + "singleValueFunctionCall", + "any", + "collectionNavigationNode", + "singleNavigationNode", + "singleValueOpenPropertyAccess", + "singleResourceCast", + "all", + "collectionResourceCast", + "resourceRangeVariableReference", + "singleResourceFunctionCall", + "collectionFunctionCall", + "collectionResourceFunctionCall", + "namedFunctionParameter", + "parameterAlias", + "entitySet", + "keyLookup", + "searchTerm", + "collectionOpenPropertyAccess", + "collectionComplexNode", + "singleComplexNode", + "count", + "singleValueCast", + "collectionPropertyNode", + "aggregatedCollectionPropertyNode", + "in", + "collectionConstant" + ], + "type": "string" + }, + "System.Net.Sockets.AddressFamily": { + "enum": [ + "unknown", + "unspecified", + "unix", + "interNetwork", + "impLink", + "pup", + "chaos", + "nS", + "ipx", + "iso", + "osi", + "ecma", + "dataKit", + "ccitt", + "sna", + "decNet", + "dataLink", + "lat", + "hyperChannel", + "appleTalk", + "netBios", + "voiceView", + "fireFox", + "banyan", + "atm", + "interNetworkV6", + "cluster", + "ieee12844", + "irda", + "networkDesigners", + "max" + ], + "type": "string" + }, + "System.Security.Cryptography.AsymmetricAlgorithm": { + "type": "object", + "properties": { + "keySize": { + "format": "int32", + "type": "integer" + }, + "legalKeySizes": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/System.Security.Cryptography.KeySizes" + }, + "readOnly": true + }, + "signatureAlgorithm": { + "type": "string", + "readOnly": true + }, + "keyExchangeAlgorithm": { + "type": "string", + "readOnly": true + } + } + }, + "System.Security.Cryptography.X509Certificates.X500DistinguishedName": { + "type": "object", + "properties": { + "name": { + "type": "string", + "readOnly": true + }, + "oid": { + "$ref": "#/components/schemas/System.Security.Cryptography.Oid" + }, + "rawData": { + "format": "byte", + "type": "string" + } + } + }, + "System.Security.Cryptography.X509Certificates.PublicKey": { + "type": "object", + "properties": { + "encodedKeyValue": { + "$ref": "#/components/schemas/System.Security.Cryptography.AsnEncodedData" + }, + "encodedParameters": { + "$ref": "#/components/schemas/System.Security.Cryptography.AsnEncodedData" + }, + "key": { + "$ref": "#/components/schemas/System.Security.Cryptography.AsymmetricAlgorithm" + }, + "oid": { + "$ref": "#/components/schemas/System.Security.Cryptography.Oid" + } + } + }, + "System.Security.Cryptography.Oid": { + "type": "object", + "properties": { + "value": { + "type": "string" + }, + "friendlyName": { + "type": "string" + } + } + }, + "Microsoft.Win32.SafeHandles.SafeWaitHandle": { + "type": "object", + "properties": { + "isInvalid": { + "type": "boolean", + "readOnly": true + }, + "isClosed": { + "type": "boolean", + "readOnly": true + } + } + }, + "Microsoft.OData.Edm.EdmContainerElementKind": { + "enum": [ + "none", + "entitySet", + "actionImport", + "functionImport", + "singleton" + ], + "type": "string" + }, + "Microsoft.OData.Edm.EdmOnDeleteAction": { + "enum": [ + "none", + "cascade" + ], + "type": "string" + }, + "Microsoft.OData.Edm.IEdmReferentialConstraint": { + "type": "object", + "properties": { + "propertyPairs": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmReferentialConstraintPropertyPair" + }, + "readOnly": true + } + } + }, + "Microsoft.OData.Edm.EdmPropertyKind": { + "enum": [ + "none", + "structural", + "navigation" + ], + "type": "string" + }, + "Microsoft.OData.Edm.IEdmStructuredType": { + "type": "object", + "properties": { + "isAbstract": { + "type": "boolean", + "readOnly": true + }, + "isOpen": { + "type": "boolean", + "readOnly": true + }, + "baseType": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmStructuredType" + }, + "declaredProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmProperty" + }, + "readOnly": true + }, + "typeKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmTypeKind" + } + } + }, + "System.Security.Cryptography.KeySizes": { + "type": "object", + "properties": { + "minSize": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "maxSize": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "skipSize": { + "format": "int32", + "type": "integer", + "readOnly": true + } + } + }, + "System.Security.Cryptography.AsnEncodedData": { + "type": "object", + "properties": { + "oid": { + "$ref": "#/components/schemas/System.Security.Cryptography.Oid" + }, + "rawData": { + "format": "byte", + "type": "string" + } + } + }, + "Microsoft.OData.Edm.EdmReferentialConstraintPropertyPair": { + "type": "object", + "properties": { + "dependentProperty": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmStructuralProperty" + }, + "principalProperty": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmStructuralProperty" + } + } + }, + "Microsoft.OData.Edm.IEdmProperty": { + "type": "object", + "properties": { + "propertyKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmPropertyKind" + }, + "type": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmTypeReference" + }, + "declaringType": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmStructuredType" + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "Microsoft.OData.Edm.IEdmStructuralProperty": { + "type": "object", + "properties": { + "defaultValueString": { + "type": "string", + "readOnly": true + }, + "propertyKind": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.EdmPropertyKind" + }, + "type": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmTypeReference" + }, + "declaringType": { + "$ref": "#/components/schemas/Microsoft.OData.Edm.IEdmStructuredType" + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "ErpMaestro.ProvisioningServices.Common.Models.NewUserProvisioningRequest": { + "description": "Represents the model for a new user provisioning request.", + "required": [ + "userDetails", + "erpSystemId" + ], + "type": "object", + "properties": { + "userDetails": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.SapUserModel" + }, + "accountId": { + "format": "int32", + "description": "Represents the id of the account under which the provisioning was requested.", + "type": "integer" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the ERP system.", + "type": "integer" + }, + "roleChanges": { + "description": "Represents a collection of role changes to check for conflicts.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.RoleChange" + } + }, + "comment": { + "description": "Represents optional comments for request.", + "type": "string" + }, + "provisionPartialRoles": { + "description": "Determines if request could be provisioned even if some of its roles have been rejected.", + "type": "boolean" + }, + "cloneRolesFromUser": { + "description": "ERP user name to clone roles from", + "type": "string" + } + } + }, + "ErpMaestro.ProvisioningServices.Common.Models.ExistingUserProvisioningRequest": { + "description": "Represents the model of an existing user provisioning request.", + "required": [ + "username", + "erpSystemId" + ], + "type": "object", + "properties": { + "username": { + "description": "Represents the username of the existing user.", + "type": "string" + }, + "enableManagerApprovals": { + "description": "Represents a value indicating whether to enable manager approvals.", + "type": "boolean" + }, + "accountId": { + "format": "int32", + "description": "Represents the id of the account under which the provisioning was requested.", + "type": "integer" + }, + "erpSystemId": { + "format": "int32", + "description": "Represents the id of the ERP system.", + "type": "integer" + }, + "roleChanges": { + "description": "Represents a collection of role changes to check for conflicts.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Models.RoleChange" + } + }, + "comment": { + "description": "Represents optional comments for request.", + "type": "string" + }, + "provisionPartialRoles": { + "description": "Determines if request could be provisioned even if some of its roles have been rejected.", + "type": "boolean" + }, + "cloneRolesFromUser": { + "description": "ERP user name to clone roles from", + "type": "string" + } + } + }, + "ErpMaestro.ProvisioningServices.Common.Models.AutomatedProvisioningActionModel": { + "description": "Represents the model for an automated provisioning action request.", + "required": [ + "requestId", + "action" + ], + "type": "object", + "properties": { + "requestId": { + "format": "uuid", + "description": "Represents the id of the automated provisioning request.", + "type": "string" + }, + "action": { + "$ref": "#/components/schemas/ErpMaestro.ProvisioningServices.Common.Enums.AutomatedProvisioningActions" + }, + "comment": { + "description": "Represents the comments for the specified request action.", + "type": "string" + } + } + }, + "Microsoft.AspNet.OData.Query.ODataQueryOptions_1_ErpMaestro.ProvisioningServices.DataAccess.Entities.SecureProvisioningRequest_ErpMaestro.ProvisioningServices.DataAccess_Version_2021.2.15.2_Culture_neutral_PublicKeyToken_null_": { + "type": "object", + "properties": { + "ifMatch": { + "type": "object", + "readOnly": true + }, + "ifNoneMatch": { + "type": "object", + "readOnly": true + }, + "request": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Http.HttpRequest" + }, + "context": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.ODataQueryContext" + }, + "rawValues": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.ODataRawQueryOptions" + }, + "selectExpand": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.SelectExpandQueryOption" + }, + "apply": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.ApplyQueryOption" + }, + "filter": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.FilterQueryOption" + }, + "orderBy": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.OrderByQueryOption" + }, + "skip": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.SkipQueryOption" + }, + "skipToken": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.SkipTokenQueryOption" + }, + "top": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.TopQueryOption" + }, + "count": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.CountQueryOption" + }, + "validator": { + "$ref": "#/components/schemas/Microsoft.AspNet.OData.Query.Validators.ODataQueryValidator" + } + } + }, + "System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_Microsoft.Extensions.Primitives.StringValues_Microsoft.Extensions.Primitives_Version_3.0.0.0_Culture_neutral_PublicKeyToken_adb9793829ddae60_": { + "type": "object", + "properties": { + "key": { + "type": "string", + "readOnly": true + }, + "value": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true + } + } + }, + "System.Collections.Generic.KeyValuePair_2_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.String_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_": { + "type": "object", + "properties": { + "key": { + "type": "string", + "readOnly": true + }, + "value": { + "type": "string", + "readOnly": true + } + } + }, + "System.Collections.Generic.KeyValuePair_2_System.Type_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_System.Object_System.Private.CoreLib_Version_4.0.0.0_Culture_neutral_PublicKeyToken_7cec85d7bea7798e_": { + "type": "object", + "properties": { + "key": { + "type": "string", + "readOnly": true + }, + "value": { + "type": "object", + "readOnly": true + } + } + } + } + } +} \ No newline at end of file diff --git a/static/arm-api/swagger-public.json b/static/arm-api/swagger-public.json new file mode 100644 index 000000000..d51289f72 --- /dev/null +++ b/static/arm-api/swagger-public.json @@ -0,0 +1,2828 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "Access Risk Management Public API", + "version": "1.0" + }, + "paths": { + "/api/v1/eam/profiles/{erpSystemId}": { + "get": { + "tags": [ + "Eam" + ], + "summary": "Gets a collection of EAM profiles for the specified ERP system.", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "The id of the ERP system to query.", + "required": true, + "schema": { + "maximum": 2147483647, + "minimum": 1, + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/v1/eam/profiles/{erpSystemId}/user/{userId}": { + "get": { + "tags": [ + "Eam" + ], + "summary": "Gets a collection of EAM profiles for the specified ERP system and user.", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "The id of the ERP system to query.", + "required": true, + "schema": { + "maximum": 2147483647, + "minimum": 1, + "type": "integer", + "format": "int32" + } + }, + { + "name": "userId", + "in": "path", + "description": "The id of the user that can utilize the profiles.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessProfileModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/v1/eam/{requestId}/state": { + "get": { + "tags": [ + "Eam" + ], + "summary": "Gets the state of a particular EAM request.", + "parameters": [ + { + "name": "requestId", + "in": "path", + "description": "The id of the EAM request to query.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "enum": [ + "Submitted", + "AwaitingApproval", + "Approved", + "Rejected", + "AwaitingReview", + "Accepted", + "Contested", + "AccessProvisioned", + "GeneratingUsageReport", + "Created", + "Updated", + "Retracted", + "Error" + ], + "type": "string" + } + }, + "application/json": { + "schema": { + "enum": [ + "Submitted", + "AwaitingApproval", + "Approved", + "Rejected", + "AwaitingReview", + "Accepted", + "Contested", + "AccessProvisioned", + "GeneratingUsageReport", + "Created", + "Updated", + "Retracted", + "Error" + ], + "type": "string" + } + }, + "text/json": { + "schema": { + "enum": [ + "Submitted", + "AwaitingApproval", + "Approved", + "Rejected", + "AwaitingReview", + "Accepted", + "Contested", + "AccessProvisioned", + "GeneratingUsageReport", + "Created", + "Updated", + "Retracted", + "Error" + ], + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/v1/eam/{requestId}/report": { + "get": { + "tags": [ + "Eam" + ], + "summary": "Downloads the report related to the specified EAM request.", + "parameters": [ + { + "name": "requestId", + "in": "path", + "description": "The identifier of the EAM request.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/v1/eam": { + "post": { + "tags": [ + "Eam" + ], + "summary": "Creates a new EAM request.", + "requestBody": { + "description": "The object containing the parameters to create the new EAM request.", + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/EmergencyAccessRequestModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/v1/lookup/customer/{customerId}/erpSystem/{erpSystemId}/users": { + "get": { + "tags": [ + "Lookup" + ], + "summary": "Get all the users for a particular Customer and Erp system.", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Id of the customer", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "erpSystemId", + "in": "path", + "description": "Id of the erp system.", + "required": true, + "schema": { + "maximum": 2147483647, + "minimum": 1, + "type": "integer", + "format": "int32" + } + }, + { + "name": "search", + "in": "query", + "description": "Optional filter criteria.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SapUserDTO" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SapUserDTO" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SapUserDTO" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + } + } + } + }, + "/api/v1/lookup/erpsystem/{erpSystemId}/roles": { + "get": { + "tags": [ + "Lookup" + ], + "summary": "Get all the roles for a particular Customer and Erp system.", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "Id of the erp system.", + "required": true, + "schema": { + "maximum": 2147483647, + "minimum": 1, + "type": "integer", + "format": "int32" + } + }, + { + "name": "search", + "in": "query", + "description": "Optional filter criteria.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleDTO" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleDTO" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleDTO" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + } + } + } + }, + "/api/v1/lookup/customer/{customerId}/mitigatingControls": { + "get": { + "tags": [ + "Lookup" + ], + "summary": "Get all the mitigating controls for a particular Customer.", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Id of the customer", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "search", + "in": "query", + "description": "Optional filter criteria.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDetailsModel" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDetailsModel" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDetailsModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + } + } + }, + "post": { + "tags": [ + "Lookup" + ], + "summary": "Create a new mitigating control", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Id of the customer", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Model to be use for the creation of the mitigating control", + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/MitigatingControlDetailsModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/MitigatingControlDetailsModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/MitigatingControlDetailsModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/MitigatingControlDetailsModel" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/MitigatingControlDetailsModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/MitigatingControlDetailsModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/MitigatingControlDetailsModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + } + } + }, + "patch": { + "tags": [ + "Lookup" + ], + "summary": "Update a new mitigating control", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Id of the customer", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Model of the mitigating control to be updated.", + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/MitigatingControlDetailsModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/MitigatingControlDetailsModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/MitigatingControlDetailsModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/MitigatingControlDetailsModel" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDetailsModel" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDetailsModel" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingControlDetailsModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + } + } + } + }, + "/api/v1/provisioning/newuser": { + "post": { + "tags": [ + "Provisioning" + ], + "summary": "Creates a new user provisioning request. Returns the unique identifier of the new request.", + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/NewUserProvisioningRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/NewUserProvisioningRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/NewUserProvisioningRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/NewUserProvisioningRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "type": "string", + "format": "uuid" + } + }, + "application/json": { + "schema": { + "type": "string", + "format": "uuid" + } + }, + "text/json": { + "schema": { + "type": "string", + "format": "uuid" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/v1/provisioning/existinguser": { + "post": { + "tags": [ + "Provisioning" + ], + "summary": "Creates an existing user provisioning request. Returns the unique identifier of the new request.", + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ExistingUserProvisioningRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExistingUserProvisioningRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ExistingUserProvisioningRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ExistingUserProvisioningRequest" + } + } + } + }, + "responses": { + "201": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "type": "string", + "format": "uuid" + } + }, + "application/json": { + "schema": { + "type": "string", + "format": "uuid" + } + }, + "text/json": { + "schema": { + "type": "string", + "format": "uuid" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/v1/provisioning/{requestId}/erpSystem/{erpSystemId}": { + "post": { + "tags": [ + "Provisioning" + ], + "summary": "Approve provisioning request bypassing all validations.", + "parameters": [ + { + "name": "requestId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/v1/whatif/customer/{customerId}/erpSystem/{erpSystemId}/useranalysis/{jobId}": { + "get": { + "tags": [ + "Whatif" + ], + "parameters": [ + { + "name": "jobId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/Stream" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + } + } + } + }, + "/api/v1/whatif/customer/{customerId}/erpSystem/{erpSystemId}/useranalysis": { + "post": { + "tags": [ + "Whatif" + ], + "summary": "Performs a \"what-if\" analysis for the specified user and the specified roles.", + "parameters": [ + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "erpSystemId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "description": "The request parameters for the \"what-if\" analysis.", + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/UserWhatIfAnalysisRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserWhatIfAnalysisRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/UserWhatIfAnalysisRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/UserWhatIfAnalysisRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "type": "integer", + "format": "int32" + } + }, + "application/json": { + "schema": { + "type": "integer", + "format": "int32" + } + }, + "text/json": { + "schema": { + "type": "integer", + "format": "int32" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + } + } + } + }, + "/api/v1/whatif/roleanalysis": { + "post": { + "tags": [ + "Whatif" + ], + "summary": "Performs a \"what-if\" analysis for the specified collection of roles.", + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/RolesWhatIfAnalysisRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/RolesWhatIfAnalysisRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/RolesWhatIfAnalysisRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/RolesWhatIfAnalysisRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/RolesWhatIfAnalysisRequestWhatIfAnalysisResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/RolesWhatIfAnalysisRequestWhatIfAnalysisResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/RolesWhatIfAnalysisRequestWhatIfAnalysisResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + } + } + } + }, + "/api/v1/whatif/useranalysis/igi/{systemId}/{userId}": { + "post": { + "tags": [ + "Whatif" + ], + "summary": "Performs a \"what-if\" analysis for the specified user and the specified entitlements.", + "parameters": [ + { + "name": "systemId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "userId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "The [IGI] request parameters for the \"what-if\" analysis.", + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/IgiWhatIfAnalysisRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/IgiWhatIfAnalysisRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/IgiWhatIfAnalysisRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/IgiWhatIfAnalysisRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/IgiWhatIfAnalysisResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/IgiWhatIfAnalysisResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/IgiWhatIfAnalysisResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + } + }, + "deprecated": true + } + } + }, + "components": { + "schemas": { + "EmergencyAccessUserModel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "email": { + "type": "string", + "nullable": true + }, + "firstName": { + "type": "string", + "nullable": true + }, + "lastName": { + "type": "string", + "nullable": true + }, + "fullName": { + "type": "string", + "nullable": true + }, + "username": { + "type": "string", + "nullable": true + }, + "isPreApprovedRequester": { + "type": "boolean" + } + }, + "additionalProperties": false + }, + "DurationModel": { + "type": "object", + "properties": { + "days": { + "maximum": 2147483647, + "minimum": 0, + "type": "integer", + "format": "int32" + }, + "hours": { + "maximum": 2147483647, + "minimum": 0, + "type": "integer", + "format": "int32" + }, + "minutes": { + "maximum": 59, + "minimum": 0, + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "EmergencyAccessProfileModel": { + "required": [ + "approvers", + "defaultDuration", + "description", + "erpSystemId", + "id", + "name", + "owners", + "requesters", + "reviewers", + "roles" + ], + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "erpSystemId": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "roles": { + "type": "array", + "items": { + "type": "string" + } + }, + "rulebookNames": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "owners": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessUserModel" + } + }, + "ownerNames": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "requesters": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessUserModel" + } + }, + "approvers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessUserModel" + } + }, + "reviewers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EmergencyAccessUserModel" + } + }, + "defaultDuration": { + "allOf": [ + { + "$ref": "#/components/schemas/DurationModel" + } + ] + }, + "maxDuration": { + "allOf": [ + { + "$ref": "#/components/schemas/DurationModel" + } + ], + "nullable": true + }, + "enabled": { + "type": "boolean" + }, + "createdBy": { + "type": "string", + "nullable": true + }, + "createdDate": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "ProblemDetails": { + "type": "object", + "properties": { + "type": { + "type": "string", + "nullable": true + }, + "title": { + "type": "string", + "nullable": true + }, + "status": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "detail": { + "type": "string", + "nullable": true + }, + "instance": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": { + "type": "object", + "additionalProperties": false + } + }, + "Stream": { + "type": "object", + "properties": { + "canRead": { + "type": "boolean", + "readOnly": true + }, + "canSeek": { + "type": "boolean", + "readOnly": true + }, + "canTimeout": { + "type": "boolean", + "readOnly": true + }, + "canWrite": { + "type": "boolean", + "readOnly": true + }, + "length": { + "type": "integer", + "format": "int64", + "readOnly": true + }, + "position": { + "type": "integer", + "format": "int64" + }, + "readTimeout": { + "type": "integer", + "format": "int32" + }, + "writeTimeout": { + "type": "integer", + "format": "int32" + } + }, + "additionalProperties": false + }, + "EmergencyAccessRequestModel": { + "required": [ + "duration", + "id", + "profileId", + "reason", + "requesterUserId", + "startDate", + "timeZoneId", + "transactionRequested" + ], + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "displayId": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "profileId": { + "type": "string", + "format": "uuid" + }, + "requesterUserId": { + "type": "string", + "format": "uuid" + }, + "reason": { + "type": "string" + }, + "transactionRequested": { + "type": "string" + }, + "comments": { + "type": "string", + "nullable": true + }, + "startDate": { + "type": "string", + "format": "date-time" + }, + "timeZoneId": { + "type": "string" + }, + "duration": { + "allOf": [ + { + "$ref": "#/components/schemas/DurationModel" + } + ] + }, + "displayDuration": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "initialState": { + "enum": [ + "Submitted", + "AwaitingApproval", + "Approved", + "Rejected", + "AwaitingReview", + "Accepted", + "Contested", + "AccessProvisioned", + "GeneratingUsageReport", + "Created", + "Updated", + "Retracted", + "Error" + ], + "type": "string" + } + }, + "additionalProperties": false + }, + "SapUserDTO": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "nullable": true + }, + "fullName": { + "type": "string", + "nullable": true + }, + "userType": { + "type": "string", + "nullable": true + }, + "userGroup": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "RoleDTO": { + "type": "object", + "properties": { + "roleName": { + "type": "string", + "nullable": true + }, + "roleDescription": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "MitigatingRuleUserModel": { + "required": [ + "reason", + "username" + ], + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "username": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "additionalProperties": false + }, + "MitigatingRuleModel": { + "required": [ + "reason" + ], + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "ruleId": { + "type": "string", + "format": "uuid" + }, + "ruleName": { + "type": "string", + "nullable": true + }, + "reason": { + "type": "string" + }, + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingRuleUserModel" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "MitigatingControlDetailsModel": { + "required": [ + "accountId", + "code", + "description", + "frequency", + "id", + "name", + "objective", + "ownerUsername", + "type" + ], + "type": "object", + "properties": { + "accountId": { + "type": "integer", + "format": "int32" + }, + "ownerUsername": { + "type": "string" + }, + "type": { + "enum": [ + "Undefined", + "ManualPreventative", + "AutomaticDetective", + "AutomativePreventative", + "ManualDetective" + ], + "type": "string" + }, + "code": { + "type": "string" + }, + "objective": { + "type": "string" + }, + "frequency": { + "enum": [ + "Daily", + "Weekly", + "Monthly", + "Quarterly", + "BiAnnual", + "Annual", + "AdHoc" + ], + "type": "string" + }, + "requiresTesting": { + "type": "boolean" + }, + "createdBy": { + "type": "string", + "nullable": true + }, + "createdDate": { + "type": "string", + "format": "date-time" + }, + "updatedBy": { + "type": "string", + "nullable": true + }, + "updatedDate": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MitigatingRuleModel" + }, + "nullable": true + }, + "id": { + "type": "string", + "format": "uuid" + }, + "mitigatingControlCode": { + "type": "string", + "nullable": true + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + }, + "additionalProperties": false + }, + "SapUserModel": { + "required": [ + "email", + "lastName", + "username", + "userType" + ], + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "Represents the id of the user." + }, + "email": { + "type": "string", + "description": "Represents the user's email address." + }, + "firstName": { + "type": "string", + "description": "Represents the user's first name.", + "nullable": true + }, + "lastName": { + "type": "string", + "description": "Represents the user's last name." + }, + "userType": { + "enum": [ + "A", + "B", + "C", + "L", + "S" + ], + "type": "string", + "description": "Represents the user's SAP user type." + }, + "userClass": { + "type": "string", + "description": "Represents the user's class.", + "nullable": true + }, + "validFrom": { + "type": "string", + "description": "Represents the date from which the user is valid.", + "format": "date-time", + "nullable": true + }, + "validTo": { + "type": "string", + "description": "Represents the date to which the user is valid.", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the model for a SAP user." + }, + "RoleChange": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The unique identifier of the role.", + "format": "uuid" + }, + "roleName": { + "type": "string", + "description": "The role name.", + "nullable": true + }, + "changeType": { + "enum": [ + "Add", + "Remove", + "Change" + ], + "type": "string", + "description": "The role change type." + }, + "validFrom": { + "type": "string", + "description": "The start date of the validity of the role.", + "format": "date-time", + "nullable": true + }, + "validTo": { + "type": "string", + "description": "The end date of the validity of the role.", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the model of a role change." + }, + "NewUserProvisioningRequest": { + "required": [ + "userDetails" + ], + "type": "object", + "properties": { + "userDetails": { + "allOf": [ + { + "$ref": "#/components/schemas/SapUserModel" + } + ], + "description": "Represents the details of the new user." + }, + "accountId": { + "type": "integer", + "description": "Represents the id of the account under which the provisioning was requested.", + "format": "int32" + }, + "erpSystemId": { + "type": "integer", + "description": "Represents the id of the ERP system.", + "format": "int32" + }, + "roleChanges": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleChange" + }, + "description": "Represents a collection of role changes to check for conflicts.", + "nullable": true + }, + "comment": { + "type": "string", + "description": "Represents optional comments for request.", + "nullable": true + }, + "provisionPartialRoles": { + "type": "boolean", + "description": "Determines if request could be provisioned even if some of its roles have been rejected." + } + }, + "additionalProperties": false, + "description": "Represents the model for a new user provisioning request." + }, + "ExistingUserProvisioningRequest": { + "required": [ + "username" + ], + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "Represents the username of the existing user." + }, + "enableManagerApprovals": { + "type": "boolean", + "description": "Represents a value indicating whether to enable manager approvals." + }, + "accountId": { + "type": "integer", + "description": "Represents the id of the account under which the provisioning was requested.", + "format": "int32" + }, + "erpSystemId": { + "type": "integer", + "description": "Represents the id of the ERP system.", + "format": "int32" + }, + "roleChanges": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleChange" + }, + "description": "Represents a collection of role changes to check for conflicts.", + "nullable": true + }, + "comment": { + "type": "string", + "description": "Represents optional comments for request.", + "nullable": true + }, + "provisionPartialRoles": { + "type": "boolean", + "description": "Determines if request could be provisioned even if some of its roles have been rejected." + } + }, + "additionalProperties": false, + "description": "Represents the model of an existing user provisioning request." + }, + "UserWhatIfAnalysisRequest": { + "required": [ + "systemId", + "username" + ], + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "Represents the user to be used for the analysis." + }, + "rolesToAdd": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Represents the collection of roles to add for the \"whatif\" analysis.", + "nullable": true + }, + "rolesToRemove": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Represents the collection of roles to remove for the \"whatif\" analysis.", + "nullable": true + }, + "systemId": { + "type": "string", + "description": "Represents the id of the user system." + } + }, + "additionalProperties": false, + "description": "Represents the request parameters needed to execute a \"whatif\" analysis." + }, + "RolesWhatIfAnalysisRequest": { + "required": [ + "systemId" + ], + "type": "object", + "properties": { + "rolesToAnalyze": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Represents the collection of roles to be analyzed.", + "nullable": true + }, + "systemId": { + "type": "string", + "description": "Represents the id of the user system." + } + }, + "additionalProperties": false, + "description": "Represents the roles what-if analysis request." + }, + "RuleViolation": { + "type": "object", + "properties": { + "ruleName": { + "type": "string", + "description": "The name of the rule that's been violated.", + "nullable": true + }, + "ruleDescription": { + "type": "string", + "description": "The description of the rule that's been violated.", + "nullable": true + }, + "riskLevel": { + "enum": [ + "Undefined", + "Informational", + "Low", + "Medium", + "High", + "Critical" + ], + "type": "string", + "description": "The level of risk the rule represents." + }, + "riskType": { + "enum": [ + "Undefined", + "SOD", + "SEN", + "PRIV" + ], + "type": "string", + "description": "The type of risk the rule represents." + } + }, + "additionalProperties": false, + "description": "Represents a rule violation." + }, + "RolesWhatIfAnalysisRequestWhatIfAnalysisResponse": { + "type": "object", + "properties": { + "request": { + "allOf": [ + { + "$ref": "#/components/schemas/RolesWhatIfAnalysisRequest" + } + ], + "description": "Represents the initial request parameters.", + "nullable": true + }, + "requestTimestampUtc": { + "type": "string", + "description": "Represents the time at which the request was received.", + "format": "date-time" + }, + "extractTimestampUtc": { + "type": "string", + "description": "Represents the timestamp of the security extract used in the analysis.", + "format": "date-time" + }, + "rulebookTimestampUtc": { + "type": "string", + "description": "Represents the timestamp of the rulebook version used in the analysis.", + "format": "date-time" + }, + "ruleViolations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RuleViolation" + }, + "description": "Represents the list of rule violations generated by the request.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "The response object that represents the rule violations, if any, that were\r\nproduced as a result of the \"whatif\" analysis." + }, + "IgiEntitlement": { + "required": [ + "functionality_type", + "name" + ], + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Represents the name of the entitlement." + }, + "application_name": { + "type": "string", + "nullable": true + }, + "type": { + "type": "integer", + "description": "Represents the type of the entitlement.", + "format": "int32" + }, + "functionality_type": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "Represents an IGI entitlement object." + }, + "IgiWhatIfAnalysisRequest": { + "type": "object", + "properties": { + "listEntitlements2Add": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IgiEntitlement" + }, + "description": "Represents a collection of entitlements to add.", + "nullable": true + }, + "listEntitlements2Rem": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IgiEntitlement" + }, + "description": "Represents a collection of entitlements to remove.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the IGI \"what-if\" analysis request." + }, + "IgiRelatedPermission": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Represents the name of the permission.", + "nullable": true + }, + "functionality_type": { + "enum": [ + "Undefined", + "SapNWGroupProfile", + "SapNWProfileProfile", + "SAPNWRoleProfile" + ], + "type": "string", + "description": "Represents the available functionality types in IGI." + }, + "application_name": { + "type": "string", + "nullable": true + }, + "type": { + "type": "integer", + "description": "Represents the permission type.", + "format": "int32" + } + }, + "additionalProperties": false, + "description": "Represents an IGI permission to be used in a \"what-if\" analysis." + }, + "IgiActivity": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Represents the name of the activity.", + "nullable": true + }, + "code": { + "type": "string", + "description": "Represents the code of the activity.", + "nullable": true + }, + "description": { + "type": "string", + "description": "Represents the description of the activity.", + "nullable": true + }, + "path": { + "type": "integer", + "description": "Represents the path of the activity.", + "format": "int32" + }, + "riskHier": { + "type": "boolean", + "description": "Represents whether the activity has a risk hierarchy." + }, + "relatedPermissions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IgiRelatedPermission" + }, + "description": "Represents a collection of related IGI permissions.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents an IGI Activity object." + }, + "IgiRisk": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Represents the name of the risk.", + "nullable": true + }, + "description": { + "type": "string", + "description": "Represents the description of the risk.", + "nullable": true + }, + "risk_level": { + "enum": [ + "Undefined", + "LOW", + "MEDIUM", + "HIGH" + ], + "type": "string", + "description": "Enumeration of available IGI risk levels." + }, + "riskType_name": { + "enum": [ + "Undefined", + "SA", + "SoD" + ], + "type": "string", + "description": "Enumeration of the available IGI risk types." + }, + "activities": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IgiActivity" + }, + "description": "Represents the activities in conflict.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents an IGI risk." + }, + "IgiError": { + "type": "object", + "properties": { + "errorCode": { + "type": "string", + "description": "Represents the error code.", + "nullable": true + }, + "errorMessage": { + "type": "string", + "description": "Represents the error message.", + "nullable": true + }, + "referenceId": { + "type": "string", + "description": "A value representing an id to reference the error in our logs.", + "format": "uuid" + } + }, + "additionalProperties": false, + "description": "Represents an error in the \"what-if\" analysis response." + }, + "IgiWhatIfAnalysisResponse": { + "type": "object", + "properties": { + "violations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IgiRisk" + }, + "description": "Represents a collection of ErpMaestro.Services.PublicApi.WebApi.Models.IGI.IgiRisk objects containing the risk violation details.", + "nullable": true + }, + "error": { + "allOf": [ + { + "$ref": "#/components/schemas/IgiError" + } + ], + "description": "Represents an error in the \"what-if\" analysis.", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Represents the \"what-if\" analysis response object." + } + } + }, + "tags": [ + { + "name": "Eam", + "description": "Contains a collection of endpoints that allow EAM operations." + }, + { + "name": "Lookup", + "description": "Contains a collection of endpoints that allow \"look up\" information." + }, + { + "name": "Provisioning", + "description": "Contains a collection of endpoints that allow secure provisioning operations." + }, + { + "name": "Whatif", + "description": "Contains a collection of endpoints that allow \"what-if\" analysis operations." + } + ] +} \ No newline at end of file diff --git a/static/arm-api/swagger-rulebook.json b/static/arm-api/swagger-rulebook.json new file mode 100644 index 000000000..bbe7be1b6 --- /dev/null +++ b/static/arm-api/swagger-rulebook.json @@ -0,0 +1,12103 @@ +{ + "openapi": "3.0.0", + "info": { + "version": "v1", + "title": "Access Risk Management Rulebook Services" + }, + "paths": { + "/api/businessfunctions": { + "post": { + "tags": [ + "BusinessFunction" + ], + "summary": "Creates new business function.", + "operationId": "CreateFunction", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/xml": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/plain": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "409": { + "description": "Conflict" + }, + "500": { + "description": "Server Error" + } + } + }, + "patch": { + "tags": [ + "BusinessFunction" + ], + "summary": "Updates existing business function.", + "operationId": "UpdateFunction", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/xml": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/plain": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Not Found" + }, + "409": { + "description": "Conflict" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/businessfunctions/{functionId}/{accountId}": { + "delete": { + "tags": [ + "BusinessFunction" + ], + "summary": "Deletes business function.", + "operationId": "DeleteFunction", + "parameters": [ + { + "name": "functionId", + "in": "path", + "description": "Identifier of business function.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "accountId", + "in": "path", + "description": "Identifier of related account. Will be used by service account only.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/mitigatingControls": { + "get": { + "tags": [ + "MitigatingControls" + ], + "summary": "Gets a collection of available mitigating controls.", + "operationId": "GetMitigatingControls", + "parameters": [ + { + "name": "search", + "in": "query", + "description": "Optional parameter to search for one or more mitigation controls.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + } + } + }, + "post": { + "tags": [ + "MitigatingControls" + ], + "summary": "Adds a new mitigating control.", + "operationId": "AddMitigatingControl", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "409": { + "description": "Conflict" + }, + "500": { + "description": "Server Error" + } + } + }, + "patch": { + "tags": [ + "MitigatingControls" + ], + "summary": "Updates an existing mitigating control.", + "operationId": "UpdateMitigatingControl", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "409": { + "description": "Conflict" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/mitigatingControls/accounts/{accountId}/bulk": { + "get": { + "tags": [ + "MitigatingControls" + ], + "summary": "Mitigating Controls Bulk search.", + "operationId": "GetMitigatingControlsBulk", + "parameters": [ + { + "name": "accountId", + "in": "path", + "description": "AccountId", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "mitigatingControlsCodes", + "in": "query", + "description": "string: list of codes separated by comma.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/mitigatingControls/accounts/{accountId}": { + "get": { + "tags": [ + "MitigatingControls" + ], + "summary": "Gets a collection of available mitigating controls by AccountId.\r\nFor service client communication", + "operationId": "GetMitigatingControlsByAccountId", + "parameters": [ + { + "name": "accountId", + "in": "path", + "description": "Account Id", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "search", + "in": "query", + "description": "Optional parameter to search for one or more mitigation controls.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/mitigatingControls/accounts/{accountId}/detail": { + "get": { + "tags": [ + "MitigatingControls" + ], + "summary": "Gets a collection of available mitigating controls details by AccountId.\r\nFor service client communication", + "operationId": "GetMitigatingControlsDetailsByAccountId", + "parameters": [ + { + "name": "accountId", + "in": "path", + "description": "Account Id", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "search", + "in": "query", + "description": "Optional parameter to search for one or more mitigation controls.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/mitigatingControls/{mitigatingControlId}": { + "get": { + "tags": [ + "MitigatingControls" + ], + "summary": "Gets a mitigating control.", + "operationId": "GetMitigatingControlDetails", + "parameters": [ + { + "name": "mitigatingControlId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/mitigatingControls/{mitigatingControlId}/{accountId}": { + "delete": { + "tags": [ + "MitigatingControls" + ], + "summary": "Deletes a mitigating control.", + "operationId": "DeleteMitigatingControl", + "parameters": [ + { + "name": "mitigatingControlId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "accountId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/mitigatingControls/rules/{mitigatingControlId}": { + "post": { + "tags": [ + "MitigatingControls" + ], + "summary": "Saves mitigating rules for specified mitigating control.", + "operationId": "SaveMitigatingRules", + "parameters": [ + { + "name": "mitigatingControlId", + "in": "path", + "description": "Identifier of mitigating control.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + } + }, + "description": "Rules to mitigate." + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + }, + "patch": { + "tags": [ + "MitigatingControls" + ], + "summary": "Adds new mitigating rules for the specified mitigating control.\r\nIt adds all or some of the rules depending on whether the rules are already mapped to the control.", + "operationId": "AddMitigatingRules", + "parameters": [ + { + "name": "mitigatingControlId", + "in": "path", + "description": "The unique identifier of mitigating control.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + } + } + }, + "description": "The new rules to add." + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/mitigatingControls/rules/{mitigatingControlId}/{ruleId}": { + "delete": { + "tags": [ + "MitigatingControls" + ], + "summary": "Deletes specified rule mitigating.", + "operationId": "DeleteMitigatingRule", + "parameters": [ + { + "name": "mitigatingControlId", + "in": "path", + "description": "Identifier of the mitigating control.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "ruleId", + "in": "path", + "description": "Identifier of the rule.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/mitigatingControls/entities/{ruleMitigationId}": { + "post": { + "tags": [ + "MitigatingControls" + ], + "summary": "Saves rule mitigation entities for specified rule mitigation.", + "operationId": "SaveRuleMitigationEntities", + "parameters": [ + { + "name": "ruleMitigationId", + "in": "path", + "description": "Identifier of the rule mitigation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + } + }, + "description": "Rule mitigation entities." + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + }, + "patch": { + "tags": [ + "MitigatingControls" + ], + "summary": "Adds new rule mitigation entities for the specified rule mitigation.\r\nIt adds all or some of the entities depending on whether the entities\r\nare already mapped to the rule mitigation.", + "operationId": "AddRuleMitigationEntities", + "parameters": [ + { + "name": "ruleMitigationId", + "in": "path", + "description": "The unique identifier of the rule mitigation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + } + }, + "description": "The new mitigation user entities." + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/mitigatingControls/accounts/{accountId}/rule/{ruleId}": { + "get": { + "tags": [ + "MitigatingControls" + ], + "summary": "Gets a collection of available mitigating controls for a particular rule and account.", + "operationId": "GetMitigatingControlsForRule", + "parameters": [ + { + "name": "accountId", + "in": "path", + "description": "Parameter to search for data in the account.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "ruleId", + "in": "path", + "description": "Id to search the mitigating controls for the rule", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/mitigatingControls/accounts/{accountId}/ruleToControlMapping": { + "get": { + "tags": [ + "MitigatingControls" + ], + "summary": "Gets mapping for rules and mitigating controls for specified account.", + "operationId": "GetRulesToMitigatingControlsMapping", + "parameters": [ + { + "name": "accountId", + "in": "path", + "description": "Identifier of the account.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/multiSystemMitigations/all/{customerId}": { + "get": { + "tags": [ + "MultiSystemMitigations" + ], + "summary": "Gets a collection of available mitigations.", + "operationId": "GetMitigations", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "search", + "in": "query", + "description": "Optional parameter to search for one or more mitigations.", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationItem" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationItem" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationItem" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationItem" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationItem" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationItem" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationItem" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationItem" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationItem" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationItem" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationItem" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationItem" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationItem" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationItem" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationItem" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationItem" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + } + } + } + }, + "/api/multiSystemMitigations/{mitigationId}/customer/{customerId}": { + "get": { + "tags": [ + "MultiSystemMitigations" + ], + "summary": "Gets a multisystem mitigation.\r\n/// Id of a multisystem Mitigation.", + "operationId": "GetMultiSystemMitigation", + "parameters": [ + { + "name": "mitigationId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + } + } + }, + "401": { + "description": "Unauthorized" + } + } + }, + "delete": { + "tags": [ + "MultiSystemMitigations" + ], + "summary": "Deletes specified rule mitigating.", + "operationId": "DeleteMitigatingRule", + "parameters": [ + { + "name": "mitigationId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "customerId", + "in": "path", + "description": "Identifier of the mitigation.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + }, + "patch": { + "tags": [ + "MultiSystemMitigations" + ], + "summary": "Updates an existing mitigating control.", + "operationId": "UpdateMitigation", + "parameters": [ + { + "name": "mitigationId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "409": { + "description": "Conflict" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/multiSystemMitigations/customer/{customerId}": { + "post": { + "tags": [ + "MultiSystemMitigations" + ], + "summary": "Adds a new MultiSystem Mitigation", + "operationId": "AddMitigation", + "parameters": [ + { + "name": "customerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "404": { + "description": "Not Found" + }, + "409": { + "description": "Conflict" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/multiSystemMitigations/{customerId}/risks": { + "get": { + "tags": [ + "MultiSystemMitigations" + ], + "summary": "Gets risks for a rulebook.", + "operationId": "GetRulebookRisks", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Identifier of the rulebook.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskItem" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskItem" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskItem" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskItem" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskItem" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskItem" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskItem" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskItem" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskItem" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskItem" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskItem" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskItem" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskItem" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskItem" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskItem" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskItem" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/MultiSystemRulebooks/all/{customerId}": { + "get": { + "tags": [ + "MultiSystemRulebook" + ], + "summary": "Gets a list of rulebooks for specified customer.", + "operationId": "GetRulebooks", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Identifier of the customer.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/MultiSystemRulebooks/{id}": { + "get": { + "tags": [ + "MultiSystemRulebook" + ], + "summary": "Gets a rulebook.", + "operationId": "GetRulebookModel", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "Identifier of the rulebook.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/MultiSystemRulebooks": { + "put": { + "tags": [ + "MultiSystemRulebook" + ], + "summary": "Updates a rulebook.", + "operationId": "UpdateRulebook", + "parameters": [ + { + "name": "updatedBy", + "in": "query", + "description": "Name of the user who updates rulebook.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "customerId", + "in": "query", + "description": "Identifier of the customer.", + "required": false, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + }, + "post": { + "tags": [ + "MultiSystemRulebook" + ], + "summary": "Creates a rulebook.", + "operationId": "CreateRulebook", + "parameters": [ + { + "name": "createdBy", + "in": "query", + "description": "Name of the user who creates rulebook.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "customerId", + "in": "query", + "description": "Identifier of the customer.", + "required": false, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/MultiSystemRulebooks/{rulebookId}": { + "delete": { + "tags": [ + "MultiSystemRulebook" + ], + "summary": "Responsible for deleting a rulebook.", + "operationId": "DeleteRulebook", + "parameters": [ + { + "name": "rulebookId", + "in": "path", + "description": "Represents the identifier of the rulebook that will be soft deleted.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/MultiSystemRulebooks/changelog": { + "post": { + "tags": [ + "MultiSystemRulebook" + ], + "summary": "Runs job on the background to collect all logs related to specified job item of \"Rulebook Change Log\" type.", + "operationId": "QueueChangeLog", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.MultiSystemChangeLogRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.MultiSystemChangeLogRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.MultiSystemChangeLogRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.MultiSystemChangeLogRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.MultiSystemChangeLogRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.MultiSystemChangeLogRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.MultiSystemChangeLogRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.MultiSystemChangeLogRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.MultiSystemChangeLogRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.MultiSystemChangeLogRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.MultiSystemChangeLogRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.MultiSystemChangeLogRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.MultiSystemChangeLogRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.MultiSystemChangeLogRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.MultiSystemChangeLogRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.MultiSystemChangeLogRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.MultiSystemChangeLogRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/MultiSystemRulebooks/component/systems/{rulebookId}": { + "get": { + "tags": [ + "MultiSystemRulebook" + ], + "summary": "Responsible for returning all rulebook systems, based on the supplied rulebookId.\r\nThis includes all systems from rulebook.", + "operationId": "GetAllRulebookSystems", + "parameters": [ + { + "name": "rulebookId", + "in": "path", + "description": "Represents the unique rulebook identifier used to return data.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/MultiSystemRulebooks/component/systems/{rulebookId}/{erpSystemType}": { + "get": { + "tags": [ + "MultiSystemRulebook" + ], + "summary": "Responsible for returning all rulebook systems, based on the supplied rulebookId and erpSystemType.", + "operationId": "GetRulebookSystems", + "parameters": [ + { + "name": "rulebookId", + "in": "path", + "description": "Represents the unique rulebook identifier used to return data.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "erpSystemType", + "in": "path", + "description": "Represents the supported erp system type.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ] + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/MultiSystemRulebooks/component/risks/{rulebookId}": { + "get": { + "tags": [ + "MultiSystemRulebook" + ], + "summary": "Responsible for returning all risks, based on the supplied rulebookId.", + "operationId": "GetRulebookRisks", + "parameters": [ + { + "name": "rulebookId", + "in": "path", + "description": "Represents the unique rulebook identifier used to return data.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/MultiSystemRulebooks/component/businessfunctions/{rulebookId}": { + "get": { + "tags": [ + "MultiSystemRulebook" + ], + "summary": "Responsible for returning all business functions, based on the supplied rulebookId.", + "operationId": "GetRulebookBusinessFunctions", + "parameters": [ + { + "name": "rulebookId", + "in": "path", + "description": "Represents the unique rulebook identifier used to return data.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/MultiSystemRulebooks/component/permissions/{rulebookId}/{erpSystemType}": { + "get": { + "tags": [ + "MultiSystemRulebook" + ], + "summary": "Responsible for returning all rulebook permissions, based on the supplied rulebookId and erpSystemType.", + "operationId": "GetRulebookPermissions", + "parameters": [ + { + "name": "rulebookId", + "in": "path", + "description": "Represents the unique rulebook identifier used to return data.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "erpSystemType", + "in": "path", + "description": "Represents the supported erp system type.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ] + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/Portability/{customerId}/import": { + "post": { + "tags": [ + "Portability" + ], + "summary": "Importing rulebook file", + "operationId": "ImportRulebook", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "Unique customer identifier", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "rulebook": { + "description": "Contains rulebook file with file info", + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/Portability/{rulebookId}/export": { + "post": { + "tags": [ + "Portability" + ], + "summary": "Exports specified rulebook by its identifier.", + "operationId": "ExportRulebook", + "parameters": [ + { + "name": "rulebookId", + "in": "path", + "description": "Identifier of the rulebook.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/Portability/BlankMultiSystemRulebook.xlsx": { + "get": { + "tags": [ + "Portability" + ], + "summary": "Downloads blank multi-system rulebook file.", + "operationId": "DownloadTemplateFile", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + } + } + } + } + } + }, + "/api/rules": { + "post": { + "tags": [ + "Rule" + ], + "summary": "Creates new rule.", + "operationId": "CreateRule", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RuleModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/xml": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/plain": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "409": { + "description": "Conflict" + }, + "500": { + "description": "Server Error" + } + } + }, + "patch": { + "tags": [ + "Rule" + ], + "summary": "Updates the existing rule.", + "operationId": "UpdateRule", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RuleModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/xml": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/plain": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Not Found" + }, + "409": { + "description": "Conflict" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/rules/{ruleId}/{accountId}": { + "delete": { + "tags": [ + "Rule" + ], + "summary": "Removes specified rule.", + "operationId": "Delete", + "parameters": [ + { + "name": "ruleId", + "in": "path", + "description": "Identifier of the rule.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "accountId", + "in": "path", + "description": "Identifier of related account. Will be used by service account only.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/rulebooks": { + "get": { + "tags": [ + "Rulebook" + ], + "summary": "Gets the rulebook list for current account.", + "operationId": "GetRulebooks", + "parameters": [ + { + "name": "search", + "in": "query", + "description": "", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + }, + "post": { + "tags": [ + "Rulebook" + ], + "summary": "Creates new rulebook.", + "operationId": "CreateRulebook", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "description": "Rulebook to create." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/xml": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/plain": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "409": { + "description": "Conflict" + }, + "500": { + "description": "Server Error" + } + } + }, + "patch": { + "tags": [ + "Rulebook" + ], + "summary": "Updates rulebook.", + "operationId": "UpdateRulebook", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "description": "Rulebook to update." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/xml": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/plain": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Not Found" + }, + "409": { + "description": "Conflict" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/rulebooks/{rulebookId}": { + "delete": { + "tags": [ + "Rulebook" + ], + "summary": "Deletes specified rulebook which should be related to user's selected account.", + "operationId": "DeleteRulebook", + "parameters": [ + { + "name": "rulebookId", + "in": "path", + "description": "Identifier of the rulebook.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/rulebooks/delete": { + "delete": { + "tags": [ + "Rulebook" + ], + "summary": "Deletes specified rulebooks which should be related to user's selected account.", + "operationId": "DeleteRulebooks", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json-patch+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + }, + "description": "List of rulebook identifiers.", + "required": true + }, + "responses": { + "200": { + "description": "Success" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/rulebooks/{rulebookId}/rules/{ruleId}": { + "post": { + "tags": [ + "Rulebook" + ], + "summary": "Adds rule to the rulebook.", + "operationId": "AddRule", + "parameters": [ + { + "name": "rulebookId", + "in": "path", + "description": "Identifier of the rulebook.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "ruleId", + "in": "path", + "description": "Identifier of the rule.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Not Found" + }, + "409": { + "description": "Conflict" + }, + "500": { + "description": "Server Error" + } + } + }, + "delete": { + "tags": [ + "Rulebook" + ], + "summary": "Removes rule from the rulebook.", + "operationId": "RemoveRule", + "parameters": [ + { + "name": "rulebookId", + "in": "path", + "description": "Identifier of the rulebook.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "ruleId", + "in": "path", + "description": "Identifier of the rule.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/rulebooks/{accountId}": { + "get": { + "tags": [ + "Rulebook" + ], + "summary": "Gets the rulebook list for the specified account.", + "operationId": "GetRulebooks", + "parameters": [ + { + "name": "accountId", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int32", + "minimum": 1, + "maximum": 2147483647 + } + }, + { + "name": "search", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/rulebooks/byrulebookids": { + "post": { + "tags": [ + "Rulebook" + ], + "summary": "Gets the rulebook list for the specified rulebooks' ids.", + "operationId": "GetRulebooks", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json-patch+json": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel" + } + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/rulebooks/provisioningCheck": { + "get": { + "tags": [ + "Rulebook" + ], + "summary": "Gets a value indicating whether the selected account for the logged-in user\r\nhas at least one rulebook marked for provisioning.", + "operationId": "LoggedInAccountHasRulebookForProvisioning", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "type": "boolean" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "type": "boolean" + } + }, + "application/json": { + "schema": { + "type": "boolean" + } + }, + "application/xml": { + "schema": { + "type": "boolean" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "type": "boolean" + } + }, + "text/plain": { + "schema": { + "type": "boolean" + } + }, + "text/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/rulebook/importemfile/{accountId}": { + "post": { + "tags": [ + "Rulebook" + ], + "summary": "Imports Access Risk Management Rulebook file.", + "operationId": "ImportEmRulebookFile", + "parameters": [ + { + "name": "accountId", + "in": "path", + "description": "Identifier of the account. Will be used by service account only.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "description": "A Rulebook file. Template could be downloaded by this endpoint: /api/rulebook/emimporttemplate", + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/rulebook/importgrcfile/{accountId}": { + "post": { + "tags": [ + "Rulebook" + ], + "summary": "Imports SAP GRC Rulebook file.", + "operationId": "ImportGrcRulebookFile", + "parameters": [ + { + "name": "accountId", + "in": "path", + "description": "Identifier of the account. Will be used by service account only.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "description": "A Rulebook file. Instructions for creation this file available by this endpoint: /api/rulebook/grcimportinstructions", + "type": "string", + "format": "binary" + }, + "defaultLanguage": { + "type": "string" + }, + "senRulebookName": { + "type": "string" + }, + "sodRulebookName": { + "type": "string" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Success" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/rulebook/emimporttemplate": { + "get": { + "tags": [ + "Rulebook" + ], + "summary": "Returns EM Import rulebook template file", + "operationId": "GetEmImportTemplate", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + } + } + } + } + } + }, + "/api/rulebook/grcimportinstructions": { + "get": { + "tags": [ + "Rulebook" + ], + "summary": "Returns GRC Import rulebook instructions file", + "operationId": "GetGrcImportInstructions", + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.FileResult" + } + } + } + } + } + } + }, + "/api/rulebook/export": { + "post": { + "tags": [ + "Rulebook" + ], + "summary": "Creates and runs job for exporting specified rulebooks", + "operationId": "ExportRulebooks", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/json-patch+json": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + }, + "application/*+json": { + "schema": { + "uniqueItems": true, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + } + } + }, + "description": "IDs of rulebooks to export" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/rulebook/changelog": { + "post": { + "tags": [ + "Rulebook" + ], + "summary": "Runs job on the background to collect all logs related to specified job item of \"Rulebook Change Log\" type.", + "operationId": "QueueChangeLog", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.ChangeLogRequest" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.ChangeLogRequest" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.ChangeLogRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.ChangeLogRequest" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.ChangeLogRequest" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.ChangeLogRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.ChangeLogRequest" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.ChangeLogRequest" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.ChangeLogRequest" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.ChangeLogRequest" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.ChangeLogRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.ChangeLogRequest" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.ChangeLogRequest" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.ChangeLogRequest" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.ChangeLogRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.ChangeLogRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.ChangeLogRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/json": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/xml": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/plain": { + "schema": { + "format": "int32", + "type": "integer" + } + }, + "text/json": { + "schema": { + "format": "int32", + "type": "integer" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/rulebook/riskmappings/{accountId}": { + "get": { + "tags": [ + "Rulebook" + ], + "summary": "Returns list of existing Rulebook Risk Mappings", + "operationId": "GetRiskMappings", + "parameters": [ + { + "name": "accountId", + "in": "path", + "description": "Unique account id", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RulebookImportRiskMapping" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RulebookImportRiskMapping" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RulebookImportRiskMapping" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RulebookImportRiskMapping" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RulebookImportRiskMapping" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RulebookImportRiskMapping" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RulebookImportRiskMapping" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RulebookImportRiskMapping" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RulebookImportRiskMapping" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RulebookImportRiskMapping" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RulebookImportRiskMapping" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RulebookImportRiskMapping" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RulebookImportRiskMapping" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RulebookImportRiskMapping" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RulebookImportRiskMapping" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RulebookImportRiskMapping" + } + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/rulebook/riskmappings": { + "post": { + "tags": [ + "Rulebook" + ], + "summary": "Updates risk mappings of account", + "operationId": "UpdateRiskMappings", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.UpdateRiskMappingsModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.UpdateRiskMappingsModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.UpdateRiskMappingsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.UpdateRiskMappingsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.UpdateRiskMappingsModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.UpdateRiskMappingsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.UpdateRiskMappingsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.UpdateRiskMappingsModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.UpdateRiskMappingsModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.UpdateRiskMappingsModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.UpdateRiskMappingsModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.UpdateRiskMappingsModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.UpdateRiskMappingsModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.UpdateRiskMappingsModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.UpdateRiskMappingsModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.UpdateRiskMappingsModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.UpdateRiskMappingsModel" + } + } + }, + "description": "Contains AccountId and list of new risk mappings" + }, + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/rulebooks/createFromTemplate/{accountId}": { + "post": { + "tags": [ + "Rulebook" + ], + "summary": "Creates rulebooks and related data for specified account from template.", + "operationId": "CreateRulebooksFromTemplate", + "parameters": [ + { + "name": "accountId", + "in": "path", + "description": "Identifier of the account.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/rulebooks/all/{accountId}": { + "delete": { + "tags": [ + "Rulebook" + ], + "summary": "Removes all rulebooks and related data from specified account.", + "operationId": "DeleteAllRulebookData", + "parameters": [ + { + "name": "accountId", + "in": "path", + "description": "Identifier of the account.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/rulebookdashboard/rulebooks/{rulebookId}/rules": { + "get": { + "tags": [ + "RulebookDasboard" + ], + "operationId": "GetRules", + "parameters": [ + { + "name": "rulebookId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Not Found" + } + } + } + }, + "/api/rulebookdashboard/rulebooks/{rulebookId}/rules/{ruleId}/businessfunctions": { + "get": { + "tags": [ + "RulebookDasboard" + ], + "operationId": "GetRulesBusinessFunctions", + "parameters": [ + { + "name": "rulebookId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "ruleId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Not Found" + } + } + } + }, + "/api/rulebookdashboard/rulebooks/{rulebookId}/rules/{ruleId}/businessfunctions/{businessFunctionId}/tcodes": { + "get": { + "tags": [ + "RulebookDasboard" + ], + "operationId": "GetBusinessFunctionTCodes", + "parameters": [ + { + "name": "rulebookId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "ruleId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "businessFunctionId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Not Found" + } + } + } + }, + "/api/rulebookparameters": { + "post": { + "tags": [ + "RulebookParameter" + ], + "summary": "Creates new rulebook parameter.", + "operationId": "CreateParameter", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + } + }, + "description": "Parameter metadata." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/xml": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/plain": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "409": { + "description": "Conflict" + }, + "500": { + "description": "Server Error" + } + } + }, + "patch": { + "tags": [ + "RulebookParameter" + ], + "summary": "Updates existing rulebook parameter.", + "operationId": "UpdateParameter", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel" + } + } + }, + "description": "Rulebook parameter." + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/xml": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/plain": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Not Found" + }, + "409": { + "description": "Conflict" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/rulebookparameters/{parameterId}/{accountId}": { + "delete": { + "tags": [ + "RulebookParameter" + ], + "summary": "Deletes specified rulebook parameter.", + "operationId": "DeleteParameter", + "parameters": [ + { + "name": "parameterId", + "in": "path", + "description": "Identifier of the parameter.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "accountId", + "in": "path", + "description": "Identifier of related account. Will be used by service account only.", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "401": { + "description": "Unauthorized" + }, + "404": { + "description": "Not Found" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/rulebookParametersDetails": { + "post": { + "tags": [ + "RulebookParameterDetails" + ], + "summary": "Creates new detail for specified parameter.", + "operationId": "CreateDetail", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterDetailModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/xml": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/plain": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "409": { + "description": "Conflict" + }, + "500": { + "description": "Server Error" + } + } + }, + "patch": { + "tags": [ + "RulebookParameterDetails" + ], + "summary": "Updates existing detail of specified parameter.", + "operationId": "UpdateDetail", + "requestBody": { + "$ref": "#/components/requestBodies/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterDetailModel" + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/xml": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/plain": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "409": { + "description": "Conflict" + }, + "500": { + "description": "Server Error" + } + } + } + }, + "/api/rulebookParametersDetails/{detailId}": { + "delete": { + "tags": [ + "RulebookParameterDetails" + ], + "summary": "Deletes specified detail.", + "operationId": "DeleteDetail", + "parameters": [ + { + "name": "detailId", + "in": "path", + "description": "Identifier of parameter detail.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/json": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/xml": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/plain": { + "schema": { + "format": "uuid", + "type": "string" + } + }, + "text/json": { + "schema": { + "format": "uuid", + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized" + }, + "403": { + "description": "Forbidden" + }, + "500": { + "description": "Server Error" + } + } + } + } + }, + "components": { + "requestBodies": { + "ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionModel": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionModel" + } + } + }, + "description": "Function metadata." + }, + "ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails" + } + } + }, + "required": true + }, + "ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook" + } + } + }, + "description": "Rulebook model." + }, + "ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterDetailModel": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterDetailModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterDetailModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterDetailModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterDetailModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterDetailModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterDetailModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterDetailModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterDetailModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterDetailModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterDetailModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterDetailModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterDetailModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterDetailModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterDetailModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterDetailModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterDetailModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterDetailModel" + } + } + }, + "description": "Detail model" + }, + "ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel" + } + } + }, + "required": true + }, + "ErpMaestro.RulebookServices.Common.Models.Rulebooks.RuleModel": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RuleModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RuleModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RuleModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RuleModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RuleModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RuleModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RuleModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RuleModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RuleModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RuleModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RuleModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RuleModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RuleModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RuleModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RuleModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RuleModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RuleModel" + } + } + }, + "description": "Rule metadata." + } + }, + "schemas": { + "ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionModel": { + "description": "Represents a model for business function.", + "required": [ + "code", + "name", + "description", + "businessProcessId" + ], + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "Identifier of the function.", + "type": "string" + }, + "code": { + "description": "Code of the function.", + "type": "string" + }, + "name": { + "description": "Name of the function.", + "type": "string" + }, + "description": { + "description": "Description of the function.", + "type": "string" + }, + "businessProcessId": { + "format": "uuid", + "description": "Identifier of related business process.", + "type": "string" + }, + "tCodeOperator": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Enumerations.LogicOperator" + }, + "objectOperator": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Enumerations.LogicOperator" + }, + "permissions": { + "description": "List of permissions.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionPermissionModel" + } + }, + "accountId": { + "format": "int32", + "description": "Identifier of related account. It will be used by service account only.", + "type": "integer" + } + } + }, + "ErpMaestro.RulebookServices.Common.Enumerations.LogicOperator": { + "enum": [ + "undefined", + "and", + "or" + ], + "type": "string" + }, + "ErpMaestro.RulebookServices.Common.Models.Rulebooks.BusinessFunctionPermissionModel": { + "description": "Model for permission of business function.", + "type": "object", + "properties": { + "name": { + "description": "Name of the permission.", + "type": "string" + }, + "objects": { + "description": "List of objects.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.AuthorizationObjectModel" + } + } + } + }, + "ErpMaestro.RulebookServices.Common.Models.Rulebooks.AuthorizationObjectModel": { + "description": "Represents a model for authorization object.", + "type": "object", + "properties": { + "name": { + "description": "Name of the object.", + "type": "string" + }, + "fields": { + "description": "List of fields.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.AuthorizationFieldModel" + } + } + } + }, + "ErpMaestro.RulebookServices.Common.Models.Rulebooks.AuthorizationFieldModel": { + "description": "Represents a model for authorization field.", + "type": "object", + "properties": { + "name": { + "description": "Name of the field.", + "type": "string" + }, + "valueFrom": { + "description": "Beginning of values range.", + "type": "string" + }, + "valueTo": { + "description": "End of values range.", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlListItemModel": { + "description": "Represents a mitigating control list item model.", + "required": [ + "id", + "name", + "description" + ], + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "The unique identifier for the mitigating control.", + "type": "string" + }, + "mitigatingControlCode": { + "description": "The mitigating control code.", + "type": "string" + }, + "name": { + "description": "The name of the mitigating control.", + "type": "string" + }, + "description": { + "description": "The description of the mitigating control.", + "type": "string" + }, + "type": { + "description": "Represents the mitigating control type.", + "type": "string" + }, + "ownerUsername": { + "description": "Represents the username of the owner.", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingControlDetailsModel": { + "description": "Represents a mitigating control details model.", + "required": [ + "accountId", + "ownerUsername", + "type", + "code", + "objective", + "frequency", + "id", + "name", + "description" + ], + "type": "object", + "properties": { + "accountId": { + "format": "int32", + "description": "The id of the account to which the mitigating control belongs.", + "type": "integer" + }, + "ownerUsername": { + "description": "The user who owns the mitigating control.", + "type": "string" + }, + "type": { + "description": "The mitigating control type.", + "type": "string" + }, + "code": { + "description": "The mitigating control code.", + "type": "string" + }, + "objective": { + "description": "The mitigating control objective.", + "type": "string" + }, + "frequency": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Enumerations.MitigatingControlFrequency" + }, + "requiresTesting": { + "description": "A value indicating whether the mitigating control requires testing.", + "type": "boolean" + }, + "createdBy": { + "description": "The user who created the mitigating control.", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "description": "The date the mitigating control was created.", + "type": "string" + }, + "updatedBy": { + "description": "The user who updated the mitigating control.", + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "description": "The date the mitigating control was updated.", + "type": "string" + }, + "rules": { + "description": "A collection of mitigating control rules.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel" + } + }, + "id": { + "format": "uuid", + "description": "The unique identifier for the mitigating control.", + "type": "string" + }, + "mitigatingControlCode": { + "description": "The mitigating control code.", + "type": "string" + }, + "name": { + "description": "The name of the mitigating control.", + "type": "string" + }, + "description": { + "description": "The description of the mitigating control.", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.Common.Enumerations.MitigatingControlFrequency": { + "enum": [ + "daily", + "weekly", + "monthly", + "quarterly", + "biAnnual", + "annual", + "adHoc" + ], + "type": "string" + }, + "ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleModel": { + "description": "Represents the mitigating control rule model.", + "required": [ + "reason" + ], + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "The id of the mitigating rule record.", + "type": "string" + }, + "ruleId": { + "format": "uuid", + "description": "The id of the rule associated with the mitigation control rule.", + "type": "string" + }, + "ruleName": { + "description": "The name of the rule associated with the mitigation control rule.", + "type": "string" + }, + "ruleCode": { + "description": "The code of the rule associated with the mitigation control rule.", + "type": "string" + }, + "reason": { + "description": "The reason for creating this rule.", + "type": "string" + }, + "users": { + "description": "A collection of users mapped to the rule.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel" + } + } + } + }, + "ErpMaestro.RulebookServices.Common.Models.MitigatingControls.MitigatingRuleUserModel": { + "description": "Represents the mitigating control rule user model.", + "required": [ + "username", + "reason" + ], + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "The id of the mitigating rule user record.", + "type": "string" + }, + "username": { + "description": "The id of the user mapped to the rule.", + "type": "string" + }, + "reason": { + "description": "The reason for mapping the user.", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationItem": { + "description": "MultiSystem Mitigation DTO", + "type": "object", + "properties": { + "id": { + "format": "int64", + "type": "integer" + }, + "code": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.Common.Models.MultiSystem.MitigationDetails": { + "description": "MultiSystem Mitigation DTO", + "type": "object", + "properties": { + "id": { + "format": "int64", + "type": "integer" + }, + "code": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "ruleBookId": { + "format": "int32", + "type": "integer" + }, + "risks": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskItem" + } + } + } + }, + "ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskItem": { + "description": "MultiSystem Risk DTO", + "type": "object", + "properties": { + "id": { + "format": "int64", + "type": "integer" + }, + "code": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "businessProcess": { + "type": "string" + }, + "rating": { + "$ref": "#/components/schemas/ErpMaestro.Services.RulebookAbstractions.Commons.Enums.Rating" + }, + "type": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskType" + }, + "filterType": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Enumerations.FilterType" + }, + "filterValue": { + "type": "string" + } + } + }, + "ErpMaestro.Services.RulebookAbstractions.Commons.Enums.Rating": { + "enum": [ + "undefined", + "informational", + "low", + "medium", + "high", + "critical" + ], + "type": "string" + }, + "ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskType": { + "enum": [ + "undefined", + "segregationOfDuties", + "sensitiveAccess", + "leastPrivilege" + ], + "type": "string" + }, + "ErpMaestro.RulebookServices.Common.Enumerations.FilterType": { + "enum": [ + "undefined", + "user", + "role", + "group" + ], + "type": "string" + }, + "ErpMaestro.RulebookServices.Common.Models.MultiSystem.Rulebook": { + "description": "Represents a model for multi-system rulebook and related data.", + "type": "object", + "properties": { + "dbId": { + "format": "int32", + "description": "Identifier of the rulebook.", + "type": "integer" + }, + "name": { + "description": "Name of the rulebook.", + "type": "string" + }, + "customerId": { + "format": "uuid", + "description": "Identifier of the customer.", + "type": "string" + }, + "createdBy": { + "description": "Name of the user, who created rulebook.", + "type": "string" + }, + "createdDate": { + "format": "date-time", + "description": "Date, when rulebook was created.", + "type": "string" + }, + "updatedBy": { + "description": "Name of the user, who updated rulebook.", + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "description": "Date, when rulebook was updated last time.", + "type": "string" + }, + "risks": { + "description": "Related risks.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Risk" + } + }, + "businessFunctions": { + "description": "Related business functions.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.BusinessFunction" + } + }, + "mitigations": { + "description": "Related mitigations.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Mitigation" + } + }, + "systems": { + "description": "Related systems.", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.System" + } + } + } + }, + "ErpMaestro.RulebookServices.Common.Models.MultiSystem.Risk": { + "type": "object", + "properties": { + "dbId": { + "format": "int64", + "type": "integer" + }, + "code": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "businessProcess": { + "type": "string" + }, + "rating": { + "$ref": "#/components/schemas/ErpMaestro.Services.RulebookAbstractions.Commons.Enums.Rating" + }, + "type": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskType" + }, + "enabled": { + "type": "boolean" + }, + "businessFunctions": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.BusinessFunction" + } + }, + "mitigations": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskMitigation" + } + } + } + }, + "ErpMaestro.RulebookServices.Common.Models.MultiSystem.BusinessFunction": { + "type": "object", + "properties": { + "dbId": { + "format": "int64", + "type": "integer" + }, + "code": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "businessProcess": { + "type": "string" + }, + "permissionLogic": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Enumerations.LogicOperator" + }, + "accessLogic": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Enumerations.LogicOperator" + }, + "risks": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Risk" + } + }, + "systems": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.System" + } + }, + "permissions": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Permission" + } + } + } + }, + "ErpMaestro.RulebookServices.Common.Models.MultiSystem.Mitigation": { + "type": "object", + "properties": { + "dbId": { + "format": "int64", + "type": "integer" + }, + "code": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "risks": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskMitigation" + } + } + } + }, + "ErpMaestro.RulebookServices.Common.Models.MultiSystem.System": { + "type": "object", + "properties": { + "dbId": { + "format": "int32", + "type": "integer" + }, + "name": { + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/ErpMaestro.Services.Common.Models.Enums.ErpSystemType" + }, + "description": { + "type": "string" + }, + "code": { + "type": "string" + }, + "businessFunctions": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.BusinessFunction" + } + } + } + }, + "ErpMaestro.RulebookServices.Common.Models.MultiSystem.RiskMitigation": { + "type": "object", + "properties": { + "risk": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Risk" + }, + "mitigation": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.Mitigation" + }, + "type": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Enumerations.FilterType" + }, + "value": { + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.Common.Models.MultiSystem.Permission": { + "type": "object", + "properties": { + "dbId": { + "format": "int64", + "type": "integer" + }, + "externalReference": { + "type": "string" + }, + "description": { + "type": "string" + }, + "businessFunction": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.MultiSystem.BusinessFunction" + }, + "system": { + "$ref": "#/components/schemas/ErpMaestro.Services.Common.Models.Enums.ErpSystemType" + }, + "access": { + "type": "string" + } + } + }, + "ErpMaestro.Services.Common.Models.Enums.ErpSystemType": { + "enum": [ + "undefined", + "sap", + "successFactors", + "ariba", + "concur", + "uConnect" + ], + "type": "string" + }, + "ErpMaestro.RulebookServices.Common.Models.Rulebooks.MultiSystemChangeLogRequest": { + "required": [ + "rulebookIds" + ], + "type": "object", + "properties": { + "customerId": { + "format": "uuid", + "description": "Customer ID.", + "type": "string" + }, + "rulebookIds": { + "description": "IDs of all rulebooks that should be reported.", + "uniqueItems": false, + "type": "array", + "items": { + "format": "int32", + "type": "integer" + } + }, + "fromDate": { + "format": "date-time", + "description": "Start date of the reporting period.", + "type": "string" + }, + "toDate": { + "format": "date-time", + "description": "End date of the reporting period.", + "type": "string" + } + } + }, + "Microsoft.AspNetCore.Mvc.FileResult": { + "type": "object", + "properties": { + "contentType": { + "type": "string", + "readOnly": true + }, + "fileDownloadName": { + "type": "string" + }, + "lastModified": { + "format": "date-time", + "type": "string" + }, + "entityTag": { + "$ref": "#/components/schemas/Microsoft.Net.Http.Headers.EntityTagHeaderValue" + }, + "enableRangeProcessing": { + "type": "boolean" + } + } + }, + "Microsoft.Net.Http.Headers.EntityTagHeaderValue": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/components/schemas/Microsoft.Extensions.Primitives.StringSegment" + }, + "isWeak": { + "type": "boolean", + "readOnly": true + } + } + }, + "Microsoft.Extensions.Primitives.StringSegment": { + "type": "object", + "properties": { + "buffer": { + "type": "string", + "readOnly": true + }, + "offset": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "length": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "value": { + "type": "string", + "readOnly": true + }, + "hasValue": { + "type": "boolean", + "readOnly": true + } + } + }, + "ErpMaestro.RulebookServices.Common.Models.Rulebooks.RuleModel": { + "description": "Represents a rule model.", + "required": [ + "code", + "name" + ], + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "Identifier of the rule.", + "type": "string" + }, + "code": { + "description": "Code of the rule.", + "type": "string" + }, + "name": { + "description": "Name of the rule.", + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Enumerations.RuleTypeLookup" + }, + "riskDescription": { + "description": "Description of the rule.", + "type": "string" + }, + "riskNotes": { + "description": "Notes for related risk.", + "type": "string" + }, + "riskRatingId": { + "format": "int32", + "description": "Identifier of risk rating.", + "type": "integer" + }, + "businessProcessId": { + "format": "uuid", + "description": "Identifier of related business process.", + "type": "string" + }, + "businessAreaId": { + "format": "uuid", + "description": "Identifier of related business area.", + "type": "string" + }, + "rulebooks": { + "description": "Selected rulebooks for the rule.", + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + }, + "businessFunctions": { + "description": "Selected business functions for the rulebook.", + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + }, + "riskOwners": { + "description": "Owners of related risk.", + "maxLength": 4, + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + }, + "riskApprovers": { + "description": "Approvers of related risk.", + "maxLength": 4, + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + }, + "accountId": { + "format": "int32", + "description": "Identifier of related account. It will be used by service account only.", + "type": "integer" + } + } + }, + "ErpMaestro.RulebookServices.Common.Enumerations.RuleTypeLookup": { + "enum": [ + "sEN", + "sOD" + ], + "type": "string" + }, + "ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookListItemModel": { + "description": "Represents a rulebook list item model.", + "required": [ + "code", + "name", + "description" + ], + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "The unique identifier of the rulebook.", + "type": "string" + }, + "code": { + "description": "The rulebook code.", + "type": "string" + }, + "name": { + "description": "The rulebook name.", + "type": "string" + }, + "description": { + "description": "Description of the rulebook.", + "type": "string" + }, + "usedForAutomatedProvisioning": { + "description": "A value indicating whether the rulebook is used for automated provisioning.", + "type": "boolean" + }, + "enabled": { + "description": "A value indicating whether the rulebook enabled.", + "type": "boolean" + }, + "updatedDate": { + "format": "date-time", + "description": "A value indicating the date and time the rulebook was last updated.", + "type": "string" + }, + "accountId": { + "format": "int32", + "description": "Identifier of related account. It will be used by service account only.", + "type": "integer" + } + } + }, + "ErpMaestro.RulebookServices.Common.Models.Rulebooks.ChangeLogRequest": { + "required": [ + "rulebookIds" + ], + "type": "object", + "properties": { + "accountId": { + "format": "int32", + "description": "Account ID.", + "type": "integer" + }, + "rulebookIds": { + "description": "IDs of all rulebooks that should be reported.", + "uniqueItems": false, + "type": "array", + "items": { + "format": "uuid", + "type": "string" + } + }, + "fromDate": { + "format": "date-time", + "description": "Start date of the reporting period.", + "type": "string" + }, + "toDate": { + "format": "date-time", + "description": "End date of the reporting period.", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.RulebookImportRiskMapping": { + "type": "object", + "properties": { + "rulebookImportRiskMappingId": { + "format": "int32", + "type": "integer" + }, + "accountId": { + "format": "int32", + "type": "integer" + }, + "fromRiskId": { + "format": "int32", + "type": "integer" + }, + "toRiskId": { + "format": "int32", + "type": "integer" + }, + "riskRating": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RiskRating" + }, + "account": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.Account" + }, + "id": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.RiskRating": { + "type": "object", + "properties": { + "riskRatingId": { + "format": "int32", + "type": "integer" + }, + "riskRatingText": { + "type": "string" + }, + "rulebookImportRiskMappings": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RulebookImportRiskMapping" + } + }, + "rules": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.Rule" + } + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.Account": { + "type": "object", + "properties": { + "id": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "accountID": { + "format": "int32", + "type": "integer" + }, + "businessName": { + "type": "string" + }, + "accountType": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "startDate": { + "format": "date-time", + "type": "string" + }, + "trialEndDate": { + "format": "date-time", + "type": "string" + }, + "notes": { + "type": "string" + }, + "licensedNumberOfUsers": { + "format": "int32", + "type": "integer" + }, + "licensedUserCountExceededThreshold": { + "format": "int32", + "type": "integer" + }, + "isOnPrem": { + "type": "boolean" + }, + "dataServerHostName": { + "type": "string" + }, + "parentAccountId": { + "format": "int32", + "type": "integer" + }, + "canHaveChildAccounts": { + "type": "boolean" + }, + "jobRequestsQueueSettings": { + "type": "string" + }, + "disableFileDeletion": { + "type": "boolean" + }, + "nameFormat": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Enumerations.NameFormat" + }, + "isDisabled": { + "type": "boolean" + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.Rule": { + "type": "object", + "properties": { + "ruleCode": { + "type": "string" + }, + "accountId": { + "format": "int32", + "type": "integer" + }, + "ruleName": { + "type": "string" + }, + "ruleTypeCode": { + "type": "string" + }, + "riskRatingId": { + "format": "int32", + "type": "integer" + }, + "riskDescription": { + "type": "string" + }, + "riskNotes": { + "type": "string" + }, + "ruleId": { + "format": "uuid", + "type": "string" + }, + "businessProcessId": { + "format": "uuid", + "type": "string" + }, + "businessAreaId": { + "format": "uuid", + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "rowVersion": { + "format": "byte", + "type": "string" + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "businessArea": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.BusinessArea" + }, + "businessProcess": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.BusinessProcess" + }, + "riskRating": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RiskRating" + }, + "ruleType": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RuleType" + }, + "keywords": { + "type": "string" + }, + "ruleBusinessFunctions": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RuleBusinessFunctions" + } + }, + "rulebookRules": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RulebookRules" + } + }, + "ruleMitigations": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RuleMitigation" + } + }, + "ruleApprovals": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RuleApproval" + } + }, + "riskOwners": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RiskOwner" + } + }, + "riskApprovers": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RiskApprover" + } + }, + "securityAnalysisStatistics": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.SecurityAnalysisStatistic" + } + }, + "id": { + "format": "uuid", + "type": "string", + "readOnly": true + }, + "deletedDate": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.Common.Enumerations.NameFormat": { + "enum": [ + "fullName", + "userId", + "firstName_LastName", + "lastName_FirstName" + ], + "type": "string" + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.BusinessArea": { + "type": "object", + "properties": { + "businessAreaCode": { + "type": "string" + }, + "accountId": { + "format": "int32", + "type": "integer" + }, + "areaName": { + "type": "string" + }, + "areaDescription": { + "type": "string" + }, + "businessAreaId": { + "format": "uuid", + "type": "string" + }, + "rules": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.Rule" + } + }, + "id": { + "format": "uuid", + "type": "string", + "readOnly": true + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "deletedDate": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.BusinessProcess": { + "type": "object", + "properties": { + "businessProcessCode": { + "type": "string" + }, + "accountId": { + "format": "int32", + "type": "integer" + }, + "businessProcessName": { + "type": "string" + }, + "businessProcessDescription": { + "type": "string" + }, + "businessProcessId": { + "format": "uuid", + "type": "string" + }, + "businessFunctions": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.BusinessFunction" + } + }, + "rules": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.Rule" + } + }, + "id": { + "format": "uuid", + "type": "string", + "readOnly": true + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "deletedDate": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.RuleType": { + "type": "object", + "properties": { + "ruleTypeCode": { + "type": "string" + }, + "ruleTypeName": { + "type": "string" + }, + "ruleTypeDescription": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "rowVersion": { + "format": "byte", + "type": "string" + }, + "rules": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.Rule" + } + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.RuleBusinessFunctions": { + "type": "object", + "properties": { + "ruleId": { + "format": "uuid", + "type": "string" + }, + "businessFunctionId": { + "format": "uuid", + "type": "string" + }, + "rule": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.Rule" + }, + "businessFunction": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.BusinessFunction" + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.RulebookRules": { + "type": "object", + "properties": { + "rulebookId": { + "format": "uuid", + "type": "string" + }, + "ruleId": { + "format": "uuid", + "type": "string" + }, + "rulebook": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.Rulebook" + }, + "rule": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.Rule" + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.RuleMitigation": { + "type": "object", + "properties": { + "ruleMitigationId": { + "format": "uuid", + "type": "string" + }, + "accountId": { + "format": "int32", + "type": "integer" + }, + "ownerUser": { + "type": "string" + }, + "mitigatingControlId": { + "format": "uuid", + "type": "string" + }, + "reason": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "ruleId": { + "format": "uuid", + "type": "string" + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "mitigatingControl": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.MitigatingControl" + }, + "ruleMitigationEntities": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RuleMitigationEntity" + } + }, + "rule": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.Rule" + }, + "id": { + "format": "uuid", + "type": "string", + "readOnly": true + }, + "deletedDate": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.RuleApproval": { + "type": "object", + "properties": { + "ruleApprovalId": { + "format": "uuid", + "type": "string" + }, + "secureProvisioningRequestId": { + "format": "uuid", + "type": "string" + }, + "ruleId": { + "format": "uuid", + "type": "string" + }, + "reasonForRejection": { + "type": "string" + }, + "actionUserId": { + "format": "uuid", + "type": "string" + }, + "approvalState": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Constants.ApprovalState" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "notificationSentDate": { + "format": "date-time", + "type": "string" + }, + "completionDate": { + "format": "date-time", + "type": "string" + }, + "ruleCode": { + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.User" + }, + "rule": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.Rule" + }, + "id": { + "format": "uuid", + "type": "string", + "readOnly": true + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.RiskOwner": { + "type": "object", + "properties": { + "riskOwnerId": { + "format": "int32", + "type": "integer" + }, + "ruleId": { + "format": "uuid", + "type": "string" + }, + "userId": { + "format": "uuid", + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "rowVersion": { + "format": "byte", + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.User" + }, + "rule": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.Rule" + }, + "id": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.RiskApprover": { + "type": "object", + "properties": { + "riskApproverId": { + "format": "int32", + "type": "integer" + }, + "ruleId": { + "format": "uuid", + "type": "string" + }, + "userId": { + "format": "uuid", + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "rowVersion": { + "format": "byte", + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.User" + }, + "rule": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.Rule" + }, + "id": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.SecurityAnalysisStatistic": { + "type": "object", + "properties": { + "conflictHitCount": { + "format": "int32", + "type": "integer" + }, + "securityAnalysisStatisticId": { + "format": "int32", + "type": "integer" + }, + "ruleBookId": { + "format": "uuid", + "type": "string" + }, + "ruleId": { + "format": "uuid", + "type": "string" + }, + "jobId": { + "format": "int32", + "type": "integer" + }, + "ruleBook": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.Rulebook" + }, + "rule": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.Rule" + }, + "jobRequest": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.JobRequest" + }, + "id": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.BusinessFunction": { + "type": "object", + "properties": { + "accountId": { + "format": "int32", + "type": "integer" + }, + "businessFunctionId": { + "format": "uuid", + "type": "string" + }, + "businessFunctionCode": { + "type": "string" + }, + "businessFunctionName": { + "type": "string" + }, + "businessFunctionDescription": { + "type": "string" + }, + "authorizationObjectLogic": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Enumerations.LogicOperator" + }, + "transactionCodeLogic": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Enumerations.LogicOperator" + }, + "createdBy": { + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "rowVersion": { + "format": "byte", + "type": "string" + }, + "businessProcessId": { + "format": "uuid", + "type": "string" + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "businessProcess": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.BusinessProcess" + }, + "ruleBusinessFunctions": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RuleBusinessFunctions" + } + }, + "businessFunctionPermissions": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.BusinessFunctionPermission" + } + }, + "id": { + "format": "uuid", + "type": "string", + "readOnly": true + }, + "deletedDate": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.Rulebook": { + "type": "object", + "properties": { + "ruleBookCode": { + "type": "string" + }, + "accountId": { + "format": "int32", + "type": "integer" + }, + "ruleBookDescr": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "createdBy": { + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "usedForSecureProvisioning": { + "type": "boolean" + }, + "ruleBookId": { + "format": "uuid", + "type": "string" + }, + "ruleBookName": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "rowVersion": { + "format": "byte", + "type": "string" + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "rulebookRules": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RulebookRules" + } + }, + "securityAnalysisStatistics": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.SecurityAnalysisStatistic" + } + }, + "id": { + "format": "uuid", + "type": "string", + "readOnly": true + }, + "deletedDate": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.MitigatingControl": { + "type": "object", + "properties": { + "mitigatingControlId": { + "format": "uuid", + "type": "string" + }, + "accountId": { + "format": "int32", + "type": "integer" + }, + "ownerUser": { + "type": "string" + }, + "mitigatingControlCode": { + "type": "string" + }, + "mitigatingControlName": { + "type": "string" + }, + "mitigatingControlType": { + "type": "string" + }, + "description": { + "type": "string" + }, + "objective": { + "type": "string" + }, + "frequency": { + "type": "string" + }, + "requiresTesting": { + "type": "boolean" + }, + "createdBy": { + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "ruleMitigations": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RuleMitigation" + } + }, + "id": { + "format": "uuid", + "type": "string", + "readOnly": true + }, + "deletedDate": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.RuleMitigationEntity": { + "type": "object", + "properties": { + "ruleMitigationEntityId": { + "format": "uuid", + "type": "string" + }, + "accountId": { + "format": "int32", + "type": "integer" + }, + "ruleMitigationId": { + "format": "uuid", + "type": "string" + }, + "sapEntityId": { + "type": "string" + }, + "sapEntityType": { + "type": "string" + }, + "mitigationReason": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "ruleMitigation": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.RuleMitigation" + }, + "id": { + "format": "uuid", + "type": "string", + "readOnly": true + }, + "deletedDate": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.Common.Constants.ApprovalState": { + "enum": [ + "undefined", + "waitingOnApprover", + "approved", + "rejected" + ], + "type": "string" + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.User": { + "type": "object", + "properties": { + "userId": { + "format": "uuid", + "type": "string" + }, + "userName": { + "type": "string" + }, + "accountUsers": { + "uniqueItems": true, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.AccountUser" + } + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.JobRequest": { + "type": "object", + "properties": { + "id": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "jobId": { + "format": "int32", + "type": "integer" + }, + "jobTypeName": { + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "completedDate": { + "format": "date-time", + "type": "string" + }, + "jobServerId": { + "format": "int32", + "type": "integer" + }, + "jobResultText": { + "type": "string" + }, + "accountId": { + "format": "int32", + "type": "integer" + }, + "createdBy": { + "type": "string" + }, + "jobParameters": { + "type": "string" + }, + "jobName": { + "type": "string" + }, + "jobStatus": { + "type": "string" + }, + "jobTypeCode": { + "type": "string" + }, + "sapSystemId": { + "format": "int32", + "type": "integer" + }, + "recurrenceId": { + "format": "uuid", + "type": "string" + }, + "executionTimeInSeconds": { + "format": "int32", + "type": "integer" + }, + "account": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.Account" + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.BusinessFunctionPermission": { + "type": "object", + "properties": { + "businessFunctionPermissionId": { + "format": "uuid", + "type": "string" + }, + "businessFunctionId": { + "format": "uuid", + "type": "string" + }, + "transactionCode": { + "type": "string" + }, + "authorizationObject": { + "type": "string" + }, + "authorizationField": { + "type": "string" + }, + "valueFrom": { + "type": "string" + }, + "valueTo": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "createdDate": { + "format": "date-time", + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "updatedDate": { + "format": "date-time", + "type": "string" + }, + "rowVersion": { + "format": "byte", + "type": "string" + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "businessFunction": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.BusinessFunction" + }, + "id": { + "format": "uuid", + "type": "string", + "readOnly": true + }, + "deletedDate": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.DataAccess.Entities.AccountUser": { + "type": "object", + "properties": { + "accountId": { + "format": "int32", + "type": "integer" + }, + "userId": { + "format": "uuid", + "type": "string" + }, + "user": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.DataAccess.Entities.User" + }, + "createdUtcTimestamp": { + "format": "date-time", + "type": "string" + }, + "lastModifiedBy": { + "type": "string" + }, + "lastModifiedUtcTimestamp": { + "format": "date-time", + "type": "string" + } + } + }, + "ErpMaestro.RulebookServices.Common.Models.Rulebooks.UpdateRiskMappingsModel": { + "description": "Model is used in UpdateRiskMapping endpoint", + "type": "object", + "properties": { + "accountId": { + "format": "int32", + "description": "Unique account identifier", + "type": "integer" + }, + "riskMappings": { + "description": "List of actual rulebook risk mappings", + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookImportRiskMappingModel" + } + } + } + }, + "ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookImportRiskMappingModel": { + "description": "Represents model of !:Domain.RulebookImportRiskMapping", + "type": "object", + "properties": { + "id": { + "format": "int32", + "description": "Unique identifier of RulebookImportRiskMapping", + "type": "integer" + }, + "accountId": { + "format": "int32", + "description": "Unique Account identifier", + "type": "integer" + }, + "fromRiskId": { + "format": "int32", + "description": "Unique identifier of Risk from which performs mapping", + "type": "integer" + }, + "toRiskId": { + "format": "int32", + "description": "Unique identifier of Risk to which performs mapping", + "type": "integer" + } + } + }, + "ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterModel": { + "description": "Represents model for rulebook parameter.", + "required": [ + "name", + "description" + ], + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "Identifier of the parameter.", + "type": "string" + }, + "name": { + "description": "Name of the parameter.", + "type": "string" + }, + "description": { + "description": "Description of the parameter.", + "type": "string" + }, + "accountId": { + "format": "int32", + "description": "Identifier of related account. It will be used by service account only.", + "type": "integer" + } + } + }, + "ErpMaestro.RulebookServices.Common.Models.Rulebooks.RulebookParameterDetailModel": { + "description": "Represents model for rulebook parameter detail.", + "required": [ + "value" + ], + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "Identifier of parameter detail.", + "type": "string" + }, + "value": { + "description": "Value of the parameter.", + "type": "string" + }, + "parameterId": { + "format": "uuid", + "description": "Identifier of related parameter.", + "type": "string" + } + } + } + } + } +} \ No newline at end of file diff --git a/static/arm-api/swagger-scheduling.json b/static/arm-api/swagger-scheduling.json new file mode 100644 index 000000000..889b95356 --- /dev/null +++ b/static/arm-api/swagger-scheduling.json @@ -0,0 +1,3059 @@ +{ + "openapi": "3.0.0", + "info": { + "version": "v1", + "title": "Scheduling Service API" + }, + "paths": { + "/api/scheduledtasks": { + "post": { + "tags": [ + "ScheduledTasks" + ], + "summary": "Adds or updates a scheduled task, and returns the task object. Updates can only change the following properties:\r\nIsEnabled, Description, Method, OnBehalfOf, Url, Payload, Tags", + "operationId": "CreateOrUpdateScheduledTask", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + } + } + } + } + } + }, + "/api/scheduledtasks/{scheduledTaskId}": { + "delete": { + "tags": [ + "ScheduledTasks" + ], + "summary": "Deletes a scheduled task. This endpoint can only be executed by a service account", + "operationId": "DeleteScheduledTask", + "parameters": [ + { + "name": "scheduledTaskId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + } + } + } + } + } + }, + "/api/scheduledtasks/{scheduledTaskId}/trigger": { + "get": { + "tags": [ + "ScheduledTasks" + ], + "summary": "re-triggers a scheduled task to run immediately", + "operationId": "TriggerScheduledTask", + "parameters": [ + { + "name": "scheduledTaskId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + } + } + } + } + } + }, + "/api/scheduledtasks/{customerId}/tags": { + "get": { + "tags": [ + "ScheduledTasks" + ], + "summary": "Returns a list of tag names currently in use by the customer for allowing the customer to select\r\ncommonly used values from a dropdown.", + "operationId": "GetTagNames", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "/api/scheduledtasks/{customerId}/tags/{tagName}": { + "get": { + "tags": [ + "ScheduledTasks" + ], + "summary": "Returns a list of values the customer has used for the specified tag. Used by the UI in auto-suggesting\r\nvalues to tag a task with.", + "operationId": "GetTagValues", + "parameters": [ + { + "name": "customerId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "tagName", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "/api/scheduledtasks/search": { + "post": { + "tags": [ + "ScheduledTasks" + ], + "summary": "Returns a list of qualifying scheduled tasks belonging to the customer that matches all specified tags\r\nand search string. The optional search string is only compared to the name and description of the\r\nscheduled task.", + "operationId": "Search", + "requestBody": { + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskSearchModel" + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskSearchModel" + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskSearchModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskSearchModel" + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskSearchModel" + } + }, + "application/json;odata.metadata=full": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskSearchModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskSearchModel" + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskSearchModel" + } + }, + "application/json;odata.metadata=none": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskSearchModel" + } + }, + "application/json;odata.streaming=true": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskSearchModel" + } + }, + "application/json;odata.streaming=false": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskSearchModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskSearchModel" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskSearchModel" + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskSearchModel" + } + }, + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskSearchModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskSearchModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ScheduledTaskSearchModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json;odata.metadata=minimal;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + } + }, + "application/json;odata.metadata=minimal;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + } + }, + "application/json;odata.metadata=minimal": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + } + }, + "application/json;odata.metadata=full;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + } + }, + "application/json;odata.metadata=full": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + } + }, + "application/json;odata.metadata=none;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + } + }, + "application/json;odata.metadata=none": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + } + }, + "application/json;odata.streaming=true": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + } + }, + "application/json;odata.streaming=false": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + } + }, + "application/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + } + }, + "application/xml": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + } + }, + "application/prs.odatatestxx-odata": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + } + }, + "text/plain": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + } + }, + "text/json": { + "schema": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ScheduledTaskModel" + } + } + } + } + } + } + } + }, + "/odata/scheduledtasks": { + "get": { + "tags": [ + "ScheduledTasks" + ], + "summary": "Retrieves the scheduled tasks available for the specified customer as per\r\nthe ODATA query.", + "operationId": "CustomerGet", + "parameters": [ + { + "name": "customerId", + "in": "query", + "description": "", + "required": false, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/odata/{accountId}/scheduledtasks": { + "get": { + "tags": [ + "ScheduledTasks" + ], + "summary": "Retrieves the scheduled tasks available for the specified customer as per\r\nthe ODATA query.", + "operationId": "AccountGet", + "parameters": [ + { + "name": "accountId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "options", + "in": "query", + "description": "", + "required": false + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + } + }, + "tags": [ + { + "name": "ScheduledTasks", + "description": "Manages scheduled tasks." + } + ], + "components": { + "schemas": { + "ScheduledTaskModel": { + "description": "A Scheduled Request is a call to a service endpoint at some point in the future.\r\nAll requests take the form of SOA Web API endpoints to be invoked.", + "required": [ + "name", + "url", + "method", + "scheduledExecutionTimestamp" + ], + "type": "object", + "properties": { + "id": { + "format": "uuid", + "description": "Gets or sets the unique identifier of the scheduled task.", + "type": "string" + }, + "customerId": { + "format": "uuid", + "description": "If there is a customer associated with this request, (something that we would\r\nlike to group on), put the id value in here.", + "type": "string" + }, + "accountId": { + "format": "int32", + "description": "If there is an accountId associated with this request, (something that we would\r\nlike to group on), put the id value in here.", + "type": "integer" + }, + "tags": { + "description": "A list of free-text metadata that can be used to categorize this scheduled\r\nrequest.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "The descriptive name of the scheduled request.", + "maxLength": 250, + "minLength": 8, + "type": "string" + }, + "description": { + "description": "A (optional) more comprehensive description of the scheduled task than the descriptive name,\r\nused for business justification or execution notes.", + "maxLength": 2000, + "minLength": 0, + "type": "string" + }, + "url": { + "description": "The SOA endpoint to hit, which will actually kick off the scheduled task. Do not set this value\r\nto a non-SOA Web API endpoint as it will expose the scheduling service's authentication token\r\nto the destination server.", + "maxLength": 500, + "minLength": 0, + "type": "string" + }, + "method": { + "description": "Specifies the HTTP method that hitting the ErpMaestro.SchedulingService.Common.Models.ScheduledTaskModel.Url endpoint will use; default is GET, but acceptable\r\nvalues include POST, PATCH, PUT, and DELETE.", + "maxLength": 30, + "minLength": 0, + "type": "string" + }, + "payload": { + "description": "If the ErpMaestro.SchedulingService.Common.Models.ScheduledTaskModel.Method supports a payload (POST, PATCH, PUT) and this is not null,\r\nit will be included with the request.", + "type": "object" + }, + "onBehalfOf": { + "description": "If specified, sets the \"On-Behalf-Of\" header to the set value. Useful for attributing an action\r\nto a specified user.", + "maxLength": 250, + "minLength": 0, + "type": "string" + }, + "scheduledExecutionTimestamp": { + "format": "date-time", + "description": "Gets or sets the timestamp of when the scheduled task is to be invoked.", + "type": "string" + }, + "recurrencePattern": { + "$ref": "#/components/schemas/RecurrencePattern" + }, + "isEnabled": { + "description": "Gets or sets the enabled state of the scheduled task. Default !:true. A disabled task will not execute.", + "type": "boolean" + }, + "lastExecution": { + "format": "date-time", + "type": "string" + } + } + }, + "RecurrencePattern": { + "description": "Sets a recurrence pattern for when to repeat.\r\n\r\n* `NotRecurring` - Recurrence is not set for this task.\r\n* `Hourly` - Recurs on an hourly basis at the same minutes past the hour as the scheduled execution.\r\n* `Daily` - Recurs on a daily basis at the same hour and minutes past the hour as the scheduled execution.\r\n* `Weekly` - Recurs on the same day of the week, same hour and same minutes past the hour as the scheduled execution.\r\n* `Monthly` - Recurs on the same day of the month, same hour and same minutes past the hour as the scheduled execution.\r\n* `Quarterly` - Recurs on the same day of the month, same hour and same minutes past the hour as the scheduled execution,\n but only every 3 months (January, April, July, October).\r\n* `Annually` - Recurs on the same month, same day of the month, same hour and same minutes past the hour as the scheduled execution,\n once per year.\r\n* `OnWorkDays` - Recurs on each working day (Monday, Tuesday, Wednesday, Thursday, Friday)\r\n* `LastDayOfMonth` - Recurs on each last day of month\r\n", + "enum": [ + "notRecurring", + "hourly", + "daily", + "weekly", + "monthly", + "quarterly", + "annually", + "onWorkDays", + "lastDayOfMonth" + ], + "type": "string" + }, + "ScheduledTaskSearchModel": { + "description": "Used to search for scheduled tasks in the Scheduling Service.", + "required": [ + "customerId" + ], + "type": "object", + "properties": { + "tags": { + "description": "Gets or sets a collection of tags and values that must match the scheduled task(s).", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "searchTerm": { + "description": "Gets or sets the (optional) text that must match in the name or description.", + "type": "string" + }, + "customerId": { + "format": "uuid", + "description": "Gets or sets the customer id that the scheduled task belongs to.", + "type": "string" + }, + "maxRecords": { + "format": "int32", + "description": "Gets or sets the number of matching records to return. Default value is 10.", + "maximum": 1000, + "minimum": 1, + "type": "integer" + } + } + }, + "HttpRequest": { + "type": "object", + "properties": { + "httpContext": { + "$ref": "#/components/schemas/HttpContext" + }, + "method": { + "type": "string" + }, + "scheme": { + "type": "string" + }, + "isHttps": { + "type": "boolean" + }, + "host": { + "$ref": "#/components/schemas/HostString" + }, + "pathBase": { + "type": "string" + }, + "path": { + "type": "string" + }, + "queryString": { + "$ref": "#/components/schemas/QueryString" + }, + "query": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/KeyValuePair_String_StringValues_" + } + }, + "protocol": { + "type": "string" + }, + "headers": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "readOnly": true + }, + "cookies": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/KeyValuePair_String_String_" + } + }, + "contentLength": { + "format": "int64", + "type": "integer" + }, + "contentType": { + "type": "string" + }, + "body": { + "$ref": "#/components/schemas/Stream" + }, + "hasFormContentType": { + "type": "boolean", + "readOnly": true + }, + "form": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/KeyValuePair_String_StringValues_" + } + } + } + }, + "ODataQueryContext": { + "type": "object", + "properties": { + "defaultQuerySettings": { + "$ref": "#/components/schemas/DefaultQuerySettings" + }, + "model": { + "$ref": "#/components/schemas/IEdmModel" + }, + "elementType": { + "$ref": "#/components/schemas/IEdmType" + }, + "navigationSource": { + "$ref": "#/components/schemas/IEdmNavigationSource" + }, + "elementClrType": { + "type": "string", + "readOnly": true + }, + "path": { + "$ref": "#/components/schemas/ODataPath" + }, + "requestContainer": { + "$ref": "#/components/schemas/IServiceProvider" + } + } + }, + "ODataRawQueryOptions": { + "type": "object", + "properties": { + "filter": { + "type": "string", + "readOnly": true + }, + "apply": { + "type": "string", + "readOnly": true + }, + "orderBy": { + "type": "string", + "readOnly": true + }, + "top": { + "type": "string", + "readOnly": true + }, + "skip": { + "type": "string", + "readOnly": true + }, + "select": { + "type": "string", + "readOnly": true + }, + "expand": { + "type": "string", + "readOnly": true + }, + "count": { + "type": "string", + "readOnly": true + }, + "format": { + "type": "string", + "readOnly": true + }, + "skipToken": { + "type": "string", + "readOnly": true + }, + "deltaToken": { + "type": "string", + "readOnly": true + } + } + }, + "SelectExpandQueryOption": { + "type": "object", + "properties": { + "context": { + "$ref": "#/components/schemas/ODataQueryContext" + }, + "rawSelect": { + "type": "string", + "readOnly": true + }, + "rawExpand": { + "type": "string", + "readOnly": true + }, + "validator": { + "$ref": "#/components/schemas/SelectExpandQueryValidator" + }, + "selectExpandClause": { + "$ref": "#/components/schemas/SelectExpandClause" + }, + "levelsMaxLiteralExpansionDepth": { + "format": "int32", + "type": "integer" + } + } + }, + "ApplyQueryOption": { + "type": "object", + "properties": { + "context": { + "$ref": "#/components/schemas/ODataQueryContext" + }, + "resultClrType": { + "type": "string", + "readOnly": true + }, + "applyClause": { + "$ref": "#/components/schemas/ApplyClause" + }, + "rawValue": { + "type": "string", + "readOnly": true + } + } + }, + "FilterQueryOption": { + "type": "object", + "properties": { + "context": { + "$ref": "#/components/schemas/ODataQueryContext" + }, + "validator": { + "$ref": "#/components/schemas/FilterQueryValidator" + }, + "filterClause": { + "$ref": "#/components/schemas/FilterClause" + }, + "rawValue": { + "type": "string", + "readOnly": true + } + } + }, + "OrderByQueryOption": { + "type": "object", + "properties": { + "context": { + "$ref": "#/components/schemas/ODataQueryContext" + }, + "orderByNodes": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/OrderByNode" + }, + "readOnly": true + }, + "rawValue": { + "type": "string", + "readOnly": true + }, + "validator": { + "$ref": "#/components/schemas/OrderByQueryValidator" + }, + "orderByClause": { + "$ref": "#/components/schemas/OrderByClause" + } + } + }, + "SkipQueryOption": { + "type": "object", + "properties": { + "context": { + "$ref": "#/components/schemas/ODataQueryContext" + }, + "rawValue": { + "type": "string", + "readOnly": true + }, + "value": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "validator": { + "$ref": "#/components/schemas/SkipQueryValidator" + } + } + }, + "SkipTokenQueryOption": { + "type": "object", + "properties": { + "rawValue": { + "type": "string", + "readOnly": true + }, + "context": { + "$ref": "#/components/schemas/ODataQueryContext" + }, + "validator": { + "$ref": "#/components/schemas/SkipTokenQueryValidator" + }, + "querySettings": { + "$ref": "#/components/schemas/ODataQuerySettings" + }, + "queryOptions": { + "$ref": "#/components/schemas/ODataQueryOptions" + } + } + }, + "TopQueryOption": { + "type": "object", + "properties": { + "context": { + "$ref": "#/components/schemas/ODataQueryContext" + }, + "rawValue": { + "type": "string", + "readOnly": true + }, + "value": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "validator": { + "$ref": "#/components/schemas/TopQueryValidator" + } + } + }, + "CountQueryOption": { + "type": "object", + "properties": { + "context": { + "$ref": "#/components/schemas/ODataQueryContext" + }, + "rawValue": { + "type": "string", + "readOnly": true + }, + "value": { + "type": "boolean", + "readOnly": true + }, + "validator": { + "$ref": "#/components/schemas/CountQueryValidator" + } + } + }, + "ODataQueryValidator": { + "type": "object", + "properties": {} + }, + "HttpContext": { + "type": "object", + "properties": { + "features": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/KeyValuePair_Type_Object_" + }, + "readOnly": true + }, + "request": { + "$ref": "#/components/schemas/HttpRequest" + }, + "response": { + "$ref": "#/components/schemas/HttpResponse" + }, + "connection": { + "$ref": "#/components/schemas/ConnectionInfo" + }, + "webSockets": { + "$ref": "#/components/schemas/WebSocketManager" + }, + "user": { + "$ref": "#/components/schemas/ClaimsPrincipal" + }, + "items": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "requestServices": { + "$ref": "#/components/schemas/IServiceProvider" + }, + "requestAborted": { + "$ref": "#/components/schemas/CancellationToken" + }, + "traceIdentifier": { + "type": "string" + }, + "session": { + "$ref": "#/components/schemas/ISession" + } + } + }, + "HostString": { + "type": "object", + "properties": { + "value": { + "type": "string", + "readOnly": true + }, + "hasValue": { + "type": "boolean", + "readOnly": true + }, + "host": { + "type": "string", + "readOnly": true + }, + "port": { + "format": "int32", + "type": "integer", + "readOnly": true + } + } + }, + "QueryString": { + "type": "object", + "properties": { + "value": { + "type": "string", + "readOnly": true + }, + "hasValue": { + "type": "boolean", + "readOnly": true + } + } + }, + "Stream": { + "type": "object", + "properties": { + "canRead": { + "type": "boolean", + "readOnly": true + }, + "canSeek": { + "type": "boolean", + "readOnly": true + }, + "canTimeout": { + "type": "boolean", + "readOnly": true + }, + "canWrite": { + "type": "boolean", + "readOnly": true + }, + "length": { + "format": "int64", + "type": "integer", + "readOnly": true + }, + "position": { + "format": "int64", + "type": "integer" + }, + "readTimeout": { + "format": "int32", + "type": "integer" + }, + "writeTimeout": { + "format": "int32", + "type": "integer" + } + } + }, + "DefaultQuerySettings": { + "type": "object", + "properties": { + "enableExpand": { + "type": "boolean" + }, + "enableSelect": { + "type": "boolean" + }, + "enableCount": { + "type": "boolean" + }, + "enableOrderBy": { + "type": "boolean" + }, + "enableFilter": { + "type": "boolean" + }, + "maxTop": { + "format": "int32", + "type": "integer" + }, + "enableSkipToken": { + "type": "boolean" + } + } + }, + "IEdmModel": { + "type": "object", + "properties": { + "schemaElements": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/IEdmSchemaElement" + }, + "readOnly": true + }, + "vocabularyAnnotations": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/IEdmVocabularyAnnotation" + }, + "readOnly": true + }, + "referencedModels": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/IEdmModel" + }, + "readOnly": true + }, + "declaredNamespaces": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true + }, + "directValueAnnotationsManager": { + "$ref": "#/components/schemas/IEdmDirectValueAnnotationsManager" + }, + "entityContainer": { + "$ref": "#/components/schemas/IEdmEntityContainer" + } + } + }, + "IEdmType": { + "type": "object", + "properties": { + "typeKind": { + "$ref": "#/components/schemas/EdmTypeKind" + } + } + }, + "IEdmNavigationSource": { + "type": "object", + "properties": { + "navigationPropertyBindings": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/IEdmNavigationPropertyBinding" + }, + "readOnly": true + }, + "path": { + "$ref": "#/components/schemas/IEdmPathExpression" + }, + "type": { + "$ref": "#/components/schemas/IEdmType" + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "ODataPath": { + "type": "object", + "properties": { + "edmType": { + "$ref": "#/components/schemas/IEdmType" + }, + "navigationSource": { + "$ref": "#/components/schemas/IEdmNavigationSource" + }, + "segments": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataPathSegment" + }, + "readOnly": true + }, + "pathTemplate": { + "type": "string", + "readOnly": true + }, + "path": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ODataPathSegment" + }, + "readOnly": true + } + } + }, + "IServiceProvider": { + "type": "object", + "properties": {} + }, + "SelectExpandQueryValidator": { + "type": "object", + "properties": {} + }, + "SelectExpandClause": { + "type": "object", + "properties": { + "selectedItems": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/SelectItem" + }, + "readOnly": true + }, + "allSelected": { + "type": "boolean", + "readOnly": true + } + } + }, + "ApplyClause": { + "type": "object", + "properties": { + "transformations": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/TransformationNode" + }, + "readOnly": true + } + } + }, + "FilterQueryValidator": { + "type": "object", + "properties": {} + }, + "FilterClause": { + "type": "object", + "properties": { + "expression": { + "$ref": "#/components/schemas/SingleValueNode" + }, + "rangeVariable": { + "$ref": "#/components/schemas/RangeVariable" + }, + "itemType": { + "$ref": "#/components/schemas/IEdmTypeReference" + } + } + }, + "OrderByNode": { + "type": "object", + "properties": { + "direction": { + "$ref": "#/components/schemas/OrderByDirection" + } + } + }, + "OrderByQueryValidator": { + "type": "object", + "properties": {} + }, + "OrderByClause": { + "type": "object", + "properties": { + "thenBy": { + "$ref": "#/components/schemas/OrderByClause" + }, + "expression": { + "$ref": "#/components/schemas/SingleValueNode" + }, + "direction": { + "$ref": "#/components/schemas/OrderByDirection" + }, + "rangeVariable": { + "$ref": "#/components/schemas/RangeVariable" + }, + "itemType": { + "$ref": "#/components/schemas/IEdmTypeReference" + } + } + }, + "SkipQueryValidator": { + "type": "object", + "properties": {} + }, + "SkipTokenQueryValidator": { + "type": "object", + "properties": {} + }, + "ODataQuerySettings": { + "type": "object", + "properties": { + "ensureStableOrdering": { + "type": "boolean" + }, + "handleNullPropagation": { + "$ref": "#/components/schemas/HandleNullPropagationOption" + }, + "enableConstantParameterization": { + "type": "boolean" + }, + "enableCorrelatedSubqueryBuffering": { + "type": "boolean" + }, + "pageSize": { + "format": "int32", + "type": "integer" + }, + "handleReferenceNavigationPropertyExpandFilter": { + "type": "boolean" + } + } + }, + "ODataQueryOptions": { + "type": "object", + "properties": { + "request": { + "$ref": "#/components/schemas/HttpRequest" + }, + "context": { + "$ref": "#/components/schemas/ODataQueryContext" + }, + "rawValues": { + "$ref": "#/components/schemas/ODataRawQueryOptions" + }, + "selectExpand": { + "$ref": "#/components/schemas/SelectExpandQueryOption" + }, + "apply": { + "$ref": "#/components/schemas/ApplyQueryOption" + }, + "filter": { + "$ref": "#/components/schemas/FilterQueryOption" + }, + "orderBy": { + "$ref": "#/components/schemas/OrderByQueryOption" + }, + "skip": { + "$ref": "#/components/schemas/SkipQueryOption" + }, + "skipToken": { + "$ref": "#/components/schemas/SkipTokenQueryOption" + }, + "top": { + "$ref": "#/components/schemas/TopQueryOption" + }, + "count": { + "$ref": "#/components/schemas/CountQueryOption" + }, + "validator": { + "$ref": "#/components/schemas/ODataQueryValidator" + }, + "ifMatch": { + "type": "object", + "readOnly": true + }, + "ifNoneMatch": { + "type": "object", + "readOnly": true + } + } + }, + "TopQueryValidator": { + "type": "object", + "properties": {} + }, + "CountQueryValidator": { + "type": "object", + "properties": {} + }, + "HttpResponse": { + "type": "object", + "properties": { + "httpContext": { + "$ref": "#/components/schemas/HttpContext" + }, + "statusCode": { + "format": "int32", + "type": "integer" + }, + "headers": { + "type": "object", + "additionalProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + } + }, + "readOnly": true + }, + "body": { + "$ref": "#/components/schemas/Stream" + }, + "contentLength": { + "format": "int64", + "type": "integer" + }, + "contentType": { + "type": "string" + }, + "cookies": { + "$ref": "#/components/schemas/IResponseCookies" + }, + "hasStarted": { + "type": "boolean", + "readOnly": true + } + } + }, + "ConnectionInfo": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "remoteIpAddress": { + "$ref": "#/components/schemas/IPAddress" + }, + "remotePort": { + "format": "int32", + "type": "integer" + }, + "localIpAddress": { + "$ref": "#/components/schemas/IPAddress" + }, + "localPort": { + "format": "int32", + "type": "integer" + }, + "clientCertificate": { + "$ref": "#/components/schemas/X509Certificate2" + } + } + }, + "WebSocketManager": { + "type": "object", + "properties": { + "isWebSocketRequest": { + "type": "boolean", + "readOnly": true + }, + "webSocketRequestedProtocols": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true + } + } + }, + "ClaimsPrincipal": { + "type": "object", + "properties": { + "claims": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Claim" + }, + "readOnly": true + }, + "identities": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/ClaimsIdentity" + }, + "readOnly": true + }, + "identity": { + "$ref": "#/components/schemas/IIdentity" + } + } + }, + "CancellationToken": { + "type": "object", + "properties": { + "isCancellationRequested": { + "type": "boolean", + "readOnly": true + }, + "canBeCanceled": { + "type": "boolean", + "readOnly": true + }, + "waitHandle": { + "$ref": "#/components/schemas/WaitHandle" + } + } + }, + "ISession": { + "type": "object", + "properties": { + "isAvailable": { + "type": "boolean", + "readOnly": true + }, + "id": { + "type": "string", + "readOnly": true + }, + "keys": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true + } + } + }, + "IEdmSchemaElement": { + "type": "object", + "properties": { + "schemaElementKind": { + "$ref": "#/components/schemas/EdmSchemaElementKind" + }, + "namespace": { + "type": "string", + "readOnly": true + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "IEdmVocabularyAnnotation": { + "type": "object", + "properties": { + "qualifier": { + "type": "string", + "readOnly": true + }, + "term": { + "$ref": "#/components/schemas/IEdmTerm" + }, + "target": { + "$ref": "#/components/schemas/IEdmVocabularyAnnotatable" + }, + "value": { + "$ref": "#/components/schemas/IEdmExpression" + } + } + }, + "IEdmDirectValueAnnotationsManager": { + "type": "object", + "properties": {} + }, + "IEdmEntityContainer": { + "type": "object", + "properties": { + "elements": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/IEdmEntityContainerElement" + }, + "readOnly": true + }, + "schemaElementKind": { + "$ref": "#/components/schemas/EdmSchemaElementKind" + }, + "namespace": { + "type": "string", + "readOnly": true + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "EdmTypeKind": { + "description": "\r\n\r\n* `None` - \r\n* `Primitive` - \r\n* `Entity` - \r\n* `Complex` - \r\n* `Collection` - \r\n* `EntityReference` - \r\n* `Enum` - \r\n* `TypeDefinition` - \r\n* `Untyped` - \r\n* `Path` - \r\n", + "enum": [ + "none", + "primitive", + "entity", + "complex", + "collection", + "entityReference", + "enum", + "typeDefinition", + "untyped", + "path" + ], + "type": "string" + }, + "IEdmNavigationPropertyBinding": { + "type": "object", + "properties": { + "navigationProperty": { + "$ref": "#/components/schemas/IEdmNavigationProperty" + }, + "target": { + "$ref": "#/components/schemas/IEdmNavigationSource" + }, + "path": { + "$ref": "#/components/schemas/IEdmPathExpression" + } + } + }, + "IEdmPathExpression": { + "type": "object", + "properties": { + "pathSegments": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true + }, + "path": { + "type": "string", + "readOnly": true + }, + "expressionKind": { + "$ref": "#/components/schemas/EdmExpressionKind" + } + } + }, + "ODataPathSegment": { + "type": "object", + "properties": { + "edmType": { + "$ref": "#/components/schemas/IEdmType" + }, + "identifier": { + "type": "string" + } + } + }, + "SelectItem": { + "type": "object", + "properties": {} + }, + "TransformationNode": { + "type": "object", + "properties": { + "kind": { + "$ref": "#/components/schemas/TransformationNodeKind" + } + } + }, + "SingleValueNode": { + "type": "object", + "properties": { + "typeReference": { + "$ref": "#/components/schemas/IEdmTypeReference" + }, + "kind": { + "$ref": "#/components/schemas/QueryNodeKind" + } + } + }, + "RangeVariable": { + "type": "object", + "properties": { + "name": { + "type": "string", + "readOnly": true + }, + "typeReference": { + "$ref": "#/components/schemas/IEdmTypeReference" + }, + "kind": { + "format": "int32", + "type": "integer", + "readOnly": true + } + } + }, + "IEdmTypeReference": { + "type": "object", + "properties": { + "isNullable": { + "type": "boolean", + "readOnly": true + }, + "definition": { + "$ref": "#/components/schemas/IEdmType" + } + } + }, + "OrderByDirection": { + "description": "\r\n\r\n* `Ascending` - \r\n* `Descending` - \r\n", + "enum": [ + "ascending", + "descending" + ], + "type": "string" + }, + "HandleNullPropagationOption": { + "description": "\r\n\r\n* `Default` - \r\n* `True` - \r\n* `False` - \r\n", + "enum": [ + "default", + "true", + "false" + ], + "type": "string" + }, + "IResponseCookies": { + "type": "object", + "properties": {} + }, + "IPAddress": { + "type": "object", + "properties": { + "addressFamily": { + "$ref": "#/components/schemas/AddressFamily" + }, + "scopeId": { + "format": "int64", + "type": "integer" + }, + "isIPv6Multicast": { + "type": "boolean", + "readOnly": true + }, + "isIPv6LinkLocal": { + "type": "boolean", + "readOnly": true + }, + "isIPv6SiteLocal": { + "type": "boolean", + "readOnly": true + }, + "isIPv6Teredo": { + "type": "boolean", + "readOnly": true + }, + "isIPv4MappedToIPv6": { + "type": "boolean", + "readOnly": true + } + } + }, + "X509Certificate2": { + "type": "object", + "properties": { + "archived": { + "type": "boolean" + }, + "extensions": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "object" + }, + "readOnly": true + }, + "friendlyName": { + "type": "string" + }, + "hasPrivateKey": { + "type": "boolean", + "readOnly": true + }, + "privateKey": { + "$ref": "#/components/schemas/AsymmetricAlgorithm" + }, + "issuerName": { + "$ref": "#/components/schemas/X500DistinguishedName" + }, + "notAfter": { + "format": "date-time", + "type": "string", + "readOnly": true + }, + "notBefore": { + "format": "date-time", + "type": "string", + "readOnly": true + }, + "publicKey": { + "$ref": "#/components/schemas/PublicKey" + }, + "rawData": { + "format": "byte", + "type": "string", + "readOnly": true + }, + "serialNumber": { + "type": "string", + "readOnly": true + }, + "signatureAlgorithm": { + "$ref": "#/components/schemas/Oid" + }, + "subjectName": { + "$ref": "#/components/schemas/X500DistinguishedName" + }, + "thumbprint": { + "type": "string", + "readOnly": true + }, + "version": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "handle": { + "type": "object", + "readOnly": true + }, + "issuer": { + "type": "string", + "readOnly": true + }, + "subject": { + "type": "string", + "readOnly": true + } + } + }, + "Claim": { + "type": "object", + "properties": { + "issuer": { + "type": "string", + "readOnly": true + }, + "originalIssuer": { + "type": "string", + "readOnly": true + }, + "properties": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "readOnly": true + }, + "subject": { + "$ref": "#/components/schemas/ClaimsIdentity" + }, + "type": { + "type": "string", + "readOnly": true + }, + "value": { + "type": "string", + "readOnly": true + }, + "valueType": { + "type": "string", + "readOnly": true + } + } + }, + "ClaimsIdentity": { + "type": "object", + "properties": { + "authenticationType": { + "type": "string", + "readOnly": true + }, + "isAuthenticated": { + "type": "boolean", + "readOnly": true + }, + "actor": { + "$ref": "#/components/schemas/ClaimsIdentity" + }, + "bootstrapContext": { + "type": "object" + }, + "claims": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/Claim" + }, + "readOnly": true + }, + "label": { + "type": "string" + }, + "name": { + "type": "string", + "readOnly": true + }, + "nameClaimType": { + "type": "string", + "readOnly": true + }, + "roleClaimType": { + "type": "string", + "readOnly": true + } + } + }, + "IIdentity": { + "type": "object", + "properties": { + "authenticationType": { + "type": "string", + "readOnly": true + }, + "isAuthenticated": { + "type": "boolean", + "readOnly": true + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "WaitHandle": { + "type": "object", + "properties": { + "safeWaitHandle": { + "$ref": "#/components/schemas/SafeWaitHandle" + } + } + }, + "EdmSchemaElementKind": { + "description": "\r\n\r\n* `None` - \r\n* `TypeDefinition` - \r\n* `Term` - \r\n* `Action` - \r\n* `EntityContainer` - \r\n* `Function` - \r\n", + "enum": [ + "none", + "typeDefinition", + "term", + "action", + "entityContainer", + "function" + ], + "type": "string" + }, + "IEdmTerm": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/IEdmTypeReference" + }, + "appliesTo": { + "type": "string", + "readOnly": true + }, + "defaultValue": { + "type": "string", + "readOnly": true + }, + "schemaElementKind": { + "$ref": "#/components/schemas/EdmSchemaElementKind" + }, + "namespace": { + "type": "string", + "readOnly": true + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "IEdmVocabularyAnnotatable": { + "type": "object", + "properties": {} + }, + "IEdmExpression": { + "type": "object", + "properties": { + "expressionKind": { + "$ref": "#/components/schemas/EdmExpressionKind" + } + } + }, + "IEdmEntityContainerElement": { + "type": "object", + "properties": { + "containerElementKind": { + "$ref": "#/components/schemas/EdmContainerElementKind" + }, + "container": { + "$ref": "#/components/schemas/IEdmEntityContainer" + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "IEdmNavigationProperty": { + "type": "object", + "properties": { + "partner": { + "$ref": "#/components/schemas/IEdmNavigationProperty" + }, + "onDelete": { + "$ref": "#/components/schemas/EdmOnDeleteAction" + }, + "containsTarget": { + "type": "boolean", + "readOnly": true + }, + "referentialConstraint": { + "$ref": "#/components/schemas/IEdmReferentialConstraint" + }, + "propertyKind": { + "$ref": "#/components/schemas/EdmPropertyKind" + }, + "type": { + "$ref": "#/components/schemas/IEdmTypeReference" + }, + "declaringType": { + "$ref": "#/components/schemas/IEdmStructuredType" + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "EdmExpressionKind": { + "description": "\r\n\r\n* `None` - \r\n* `BinaryConstant` - \r\n* `BooleanConstant` - \r\n* `DateTimeOffsetConstant` - \r\n* `DecimalConstant` - \r\n* `FloatingConstant` - \r\n* `GuidConstant` - \r\n* `IntegerConstant` - \r\n* `StringConstant` - \r\n* `DurationConstant` - \r\n* `Null` - \r\n* `Record` - \r\n* `Collection` - \r\n* `Path` - \r\n* `If` - \r\n* `Cast` - \r\n* `IsType` - \r\n* `FunctionApplication` - \r\n* `LabeledExpressionReference` - \r\n* `Labeled` - \r\n* `PropertyPath` - \r\n* `NavigationPropertyPath` - \r\n* `DateConstant` - \r\n* `TimeOfDayConstant` - \r\n* `EnumMember` - \r\n* `AnnotationPath` - \r\n", + "enum": [ + "none", + "binaryConstant", + "booleanConstant", + "dateTimeOffsetConstant", + "decimalConstant", + "floatingConstant", + "guidConstant", + "integerConstant", + "stringConstant", + "durationConstant", + "null", + "record", + "collection", + "path", + "if", + "cast", + "isType", + "functionApplication", + "labeledExpressionReference", + "labeled", + "propertyPath", + "navigationPropertyPath", + "dateConstant", + "timeOfDayConstant", + "enumMember", + "annotationPath" + ], + "type": "string" + }, + "TransformationNodeKind": { + "description": "\r\n\r\n* `Aggregate` - \r\n* `GroupBy` - \r\n* `Filter` - \r\n* `Compute` - \r\n* `Expand` - \r\n", + "enum": [ + "aggregate", + "groupBy", + "filter", + "compute", + "expand" + ], + "type": "string" + }, + "QueryNodeKind": { + "description": "\r\n\r\n* `None` - \r\n* `Constant` - \r\n* `Convert` - \r\n* `NonResourceRangeVariableReference` - \r\n* `BinaryOperator` - \r\n* `UnaryOperator` - \r\n* `SingleValuePropertyAccess` - \r\n* `CollectionPropertyAccess` - \r\n* `SingleValueFunctionCall` - \r\n* `Any` - \r\n* `CollectionNavigationNode` - \r\n* `SingleNavigationNode` - \r\n* `SingleValueOpenPropertyAccess` - \r\n* `SingleResourceCast` - \r\n* `All` - \r\n* `CollectionResourceCast` - \r\n* `ResourceRangeVariableReference` - \r\n* `SingleResourceFunctionCall` - \r\n* `CollectionFunctionCall` - \r\n* `CollectionResourceFunctionCall` - \r\n* `NamedFunctionParameter` - \r\n* `ParameterAlias` - \r\n* `EntitySet` - \r\n* `KeyLookup` - \r\n* `SearchTerm` - \r\n* `CollectionOpenPropertyAccess` - \r\n* `CollectionComplexNode` - \r\n* `SingleComplexNode` - \r\n* `Count` - \r\n* `SingleValueCast` - \r\n* `CollectionPropertyNode` - \r\n* `AggregatedCollectionPropertyNode` - \r\n* `In` - \r\n* `CollectionConstant` - \r\n", + "enum": [ + "none", + "constant", + "convert", + "nonResourceRangeVariableReference", + "binaryOperator", + "unaryOperator", + "singleValuePropertyAccess", + "collectionPropertyAccess", + "singleValueFunctionCall", + "any", + "collectionNavigationNode", + "singleNavigationNode", + "singleValueOpenPropertyAccess", + "singleResourceCast", + "all", + "collectionResourceCast", + "resourceRangeVariableReference", + "singleResourceFunctionCall", + "collectionFunctionCall", + "collectionResourceFunctionCall", + "namedFunctionParameter", + "parameterAlias", + "entitySet", + "keyLookup", + "searchTerm", + "collectionOpenPropertyAccess", + "collectionComplexNode", + "singleComplexNode", + "count", + "singleValueCast", + "collectionPropertyNode", + "aggregatedCollectionPropertyNode", + "in", + "collectionConstant" + ], + "type": "string" + }, + "AddressFamily": { + "description": "\r\n\r\n* `Unspecified` - \r\n* `Unix` - \r\n* `InterNetwork` - \r\n* `ImpLink` - \r\n* `Pup` - \r\n* `Chaos` - \r\n* `NS` - \r\n* `NS` - \r\n* `Osi` - \r\n* `Osi` - \r\n* `Ecma` - \r\n* `DataKit` - \r\n* `Ccitt` - \r\n* `Sna` - \r\n* `DecNet` - \r\n* `DataLink` - \r\n* `Lat` - \r\n* `HyperChannel` - \r\n* `AppleTalk` - \r\n* `NetBios` - \r\n* `VoiceView` - \r\n* `FireFox` - \r\n* `Banyan` - \r\n* `Atm` - \r\n* `InterNetworkV6` - \r\n* `Cluster` - \r\n* `Ieee12844` - \r\n* `Irda` - \r\n* `NetworkDesigners` - \r\n* `Max` - \r\n* `Unknown` - \r\n", + "enum": [ + "unknown", + "unspecified", + "unix", + "interNetwork", + "impLink", + "pup", + "chaos", + "nS", + "ipx", + "iso", + "osi", + "ecma", + "dataKit", + "ccitt", + "sna", + "decNet", + "dataLink", + "lat", + "hyperChannel", + "appleTalk", + "netBios", + "voiceView", + "fireFox", + "banyan", + "atm", + "interNetworkV6", + "cluster", + "ieee12844", + "irda", + "networkDesigners", + "max" + ], + "type": "string" + }, + "AsymmetricAlgorithm": { + "type": "object", + "properties": { + "keySize": { + "format": "int32", + "type": "integer" + }, + "legalKeySizes": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/KeySizes" + }, + "readOnly": true + }, + "signatureAlgorithm": { + "type": "string", + "readOnly": true + }, + "keyExchangeAlgorithm": { + "type": "string", + "readOnly": true + } + } + }, + "X500DistinguishedName": { + "type": "object", + "properties": { + "name": { + "type": "string", + "readOnly": true + }, + "oid": { + "$ref": "#/components/schemas/Oid" + }, + "rawData": { + "format": "byte", + "type": "string" + } + } + }, + "PublicKey": { + "type": "object", + "properties": { + "encodedKeyValue": { + "$ref": "#/components/schemas/AsnEncodedData" + }, + "encodedParameters": { + "$ref": "#/components/schemas/AsnEncodedData" + }, + "key": { + "$ref": "#/components/schemas/AsymmetricAlgorithm" + }, + "oid": { + "$ref": "#/components/schemas/Oid" + } + } + }, + "Oid": { + "type": "object", + "properties": { + "value": { + "type": "string" + }, + "friendlyName": { + "type": "string" + } + } + }, + "SafeWaitHandle": { + "type": "object", + "properties": { + "isInvalid": { + "type": "boolean", + "readOnly": true + }, + "isClosed": { + "type": "boolean", + "readOnly": true + } + } + }, + "EdmContainerElementKind": { + "description": "\r\n\r\n* `None` - \r\n* `EntitySet` - \r\n* `ActionImport` - \r\n* `FunctionImport` - \r\n* `Singleton` - \r\n", + "enum": [ + "none", + "entitySet", + "actionImport", + "functionImport", + "singleton" + ], + "type": "string" + }, + "EdmOnDeleteAction": { + "description": "\r\n\r\n* `None` - \r\n* `Cascade` - \r\n", + "enum": [ + "none", + "cascade" + ], + "type": "string" + }, + "IEdmReferentialConstraint": { + "type": "object", + "properties": { + "propertyPairs": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/EdmReferentialConstraintPropertyPair" + }, + "readOnly": true + } + } + }, + "EdmPropertyKind": { + "description": "\r\n\r\n* `None` - \r\n* `Structural` - \r\n* `Navigation` - \r\n", + "enum": [ + "none", + "structural", + "navigation" + ], + "type": "string" + }, + "IEdmStructuredType": { + "type": "object", + "properties": { + "isAbstract": { + "type": "boolean", + "readOnly": true + }, + "isOpen": { + "type": "boolean", + "readOnly": true + }, + "baseType": { + "$ref": "#/components/schemas/IEdmStructuredType" + }, + "declaredProperties": { + "uniqueItems": false, + "type": "array", + "items": { + "$ref": "#/components/schemas/IEdmProperty" + }, + "readOnly": true + }, + "typeKind": { + "$ref": "#/components/schemas/EdmTypeKind" + } + } + }, + "KeySizes": { + "type": "object", + "properties": { + "minSize": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "maxSize": { + "format": "int32", + "type": "integer", + "readOnly": true + }, + "skipSize": { + "format": "int32", + "type": "integer", + "readOnly": true + } + } + }, + "AsnEncodedData": { + "type": "object", + "properties": { + "oid": { + "$ref": "#/components/schemas/Oid" + }, + "rawData": { + "format": "byte", + "type": "string" + } + } + }, + "EdmReferentialConstraintPropertyPair": { + "type": "object", + "properties": { + "dependentProperty": { + "$ref": "#/components/schemas/IEdmStructuralProperty" + }, + "principalProperty": { + "$ref": "#/components/schemas/IEdmStructuralProperty" + } + } + }, + "IEdmProperty": { + "type": "object", + "properties": { + "propertyKind": { + "$ref": "#/components/schemas/EdmPropertyKind" + }, + "type": { + "$ref": "#/components/schemas/IEdmTypeReference" + }, + "declaringType": { + "$ref": "#/components/schemas/IEdmStructuredType" + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "IEdmStructuralProperty": { + "type": "object", + "properties": { + "defaultValueString": { + "type": "string", + "readOnly": true + }, + "propertyKind": { + "$ref": "#/components/schemas/EdmPropertyKind" + }, + "type": { + "$ref": "#/components/schemas/IEdmTypeReference" + }, + "declaringType": { + "$ref": "#/components/schemas/IEdmStructuredType" + }, + "name": { + "type": "string", + "readOnly": true + } + } + }, + "ODataQueryOptions_ScheduledTask_": { + "type": "object", + "properties": { + "ifMatch": { + "type": "object", + "readOnly": true + }, + "ifNoneMatch": { + "type": "object", + "readOnly": true + }, + "request": { + "$ref": "#/components/schemas/HttpRequest" + }, + "context": { + "$ref": "#/components/schemas/ODataQueryContext" + }, + "rawValues": { + "$ref": "#/components/schemas/ODataRawQueryOptions" + }, + "selectExpand": { + "$ref": "#/components/schemas/SelectExpandQueryOption" + }, + "apply": { + "$ref": "#/components/schemas/ApplyQueryOption" + }, + "filter": { + "$ref": "#/components/schemas/FilterQueryOption" + }, + "orderBy": { + "$ref": "#/components/schemas/OrderByQueryOption" + }, + "skip": { + "$ref": "#/components/schemas/SkipQueryOption" + }, + "skipToken": { + "$ref": "#/components/schemas/SkipTokenQueryOption" + }, + "top": { + "$ref": "#/components/schemas/TopQueryOption" + }, + "count": { + "$ref": "#/components/schemas/CountQueryOption" + }, + "validator": { + "$ref": "#/components/schemas/ODataQueryValidator" + } + } + }, + "KeyValuePair_String_StringValues_": { + "type": "object", + "properties": { + "key": { + "type": "string", + "readOnly": true + }, + "value": { + "uniqueItems": false, + "type": "array", + "items": { + "type": "string" + }, + "readOnly": true + } + } + }, + "KeyValuePair_String_String_": { + "type": "object", + "properties": { + "key": { + "type": "string", + "readOnly": true + }, + "value": { + "type": "string", + "readOnly": true + } + } + }, + "KeyValuePair_Type_Object_": { + "type": "object", + "properties": { + "key": { + "type": "string", + "readOnly": true + }, + "value": { + "type": "object", + "readOnly": true + } + } + } + } + } +} \ No newline at end of file diff --git a/static/arm-api/swagger-utilization-tracking.json b/static/arm-api/swagger-utilization-tracking.json new file mode 100644 index 000000000..949fa24b9 --- /dev/null +++ b/static/arm-api/swagger-utilization-tracking.json @@ -0,0 +1,664 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "Access Risk Management Utilization Tracking", + "version": "v1" + }, + "paths": { + "/api/utilization/changedocument": { + "post": { + "tags": [ + "ChangeDocument" + ], + "summary": "Responsible for creating a new Change Document record, based on the supplied model.", + "requestBody": { + "description": "Represents the Change Document model that will be created.", + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.UtilizationTracking.Common.Models.ChangeDocumentModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.UtilizationTracking.Common.Models.ChangeDocumentModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.UtilizationTracking.Common.Models.ChangeDocumentModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.UtilizationTracking.Common.Models.ChangeDocumentModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "type": "integer", + "format": "int64" + } + }, + "application/json": { + "schema": { + "type": "integer", + "format": "int64" + } + }, + "text/json": { + "schema": { + "type": "integer", + "format": "int64" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + } + } + }, + "patch": { + "tags": [ + "ChangeDocument" + ], + "summary": "Responsible for updating an existing Change Document record, based on the supplied model.", + "requestBody": { + "description": "Represents the Change Document model that will be updated.", + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.UtilizationTracking.Common.Models.ChangeDocumentModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.UtilizationTracking.Common.Models.ChangeDocumentModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.UtilizationTracking.Common.Models.ChangeDocumentModel" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.UtilizationTracking.Common.Models.ChangeDocumentModel" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.UtilizationTracking.Common.Models.ChangeDocumentModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.UtilizationTracking.Common.Models.ChangeDocumentModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.UtilizationTracking.Common.Models.ChangeDocumentModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + } + } + } + }, + "/api/utilization/changedocument/{changeDocumentId}": { + "get": { + "tags": [ + "ChangeDocument" + ], + "summary": "Returns a Change Document record, based on the supplied change document identifier.", + "parameters": [ + { + "name": "changeDocumentId", + "in": "path", + "description": "Represents the Change Document identifier.", + "required": true, + "schema": { + "type": "integer", + "description": "Represents the Change Document identifier.", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.UtilizationTracking.Common.Models.ChangeDocumentModel" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.UtilizationTracking.Common.Models.ChangeDocumentModel" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ErpMaestro.UtilizationTracking.Common.Models.ChangeDocumentModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + } + } + } + }, + "/api/utilization/changedocument/eamid/{emergencyAccessRequestId}": { + "get": { + "tags": [ + "ChangeDocument" + ], + "summary": "Returns a collection of Change Document records, based on the supplied emergency access request identifier.", + "parameters": [ + { + "name": "emergencyAccessRequestId", + "in": "path", + "description": "Represents the Emergency Access Request identifier.", + "required": true, + "schema": { + "type": "string", + "description": "Represents the Emergency Access Request identifier.", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.UtilizationTracking.Common.Models.ChangeDocumentModel" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.UtilizationTracking.Common.Models.ChangeDocumentModel" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ErpMaestro.UtilizationTracking.Common.Models.ChangeDocumentModel" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + } + } + } + }, + "/api/utilization/changedocument/hasData/{emergencyAccessRequestId}": { + "get": { + "tags": [ + "ChangeDocument" + ], + "summary": "Determines if there are any Change Document record(s) for the given emergencyAccessRequestId.", + "parameters": [ + { + "name": "emergencyAccessRequestId", + "in": "path", + "description": "Represents the unique identifier of the Emergency Access Request.", + "required": true, + "schema": { + "type": "string", + "description": "Represents the unique identifier of the Emergency Access Request.", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "type": "boolean" + } + }, + "application/json": { + "schema": { + "type": "boolean" + } + }, + "text/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + }, + "application/json": { + "schema": { + "type": "string" + } + }, + "text/json": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "text/plain": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + }, + "text/json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + } + } + } + }, + "/api/utilization/eam/{eamRequestId}/hasAvailableData": { + "get": { + "tags": [ + "EamUtilization" + ], + "summary": "Returns a boolean indicating if the specified EAM request has utilization data on UTS", + "parameters": [ + { + "name": "eamRequestId", + "in": "path", + "description": "Id for EAM Request", + "required": true, + "schema": { + "type": "string", + "description": "Id for EAM Request", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/utilization/eam/{eamRequestId}/availableData": { + "get": { + "tags": [ + "EamUtilization" + ], + "summary": "Returns utilization data for an specific EAM Request in an Aggregate form ErpMaestro.UtilizationTracking.Common.Models.AggregateUtilizationResponse", + "parameters": [ + { + "name": "eamRequestId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/api/utilization/eam/{erpSystemId}/{eamRequestId}": { + "post": { + "tags": [ + "EamUtilization" + ], + "summary": "Upload and process utilization data for an EAM request after validate the relation between the Erp System and the EAM request", + "parameters": [ + { + "name": "erpSystemId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "integer", + "description": "", + "format": "int32" + } + }, + { + "name": "eamRequestId", + "in": "path", + "description": "", + "required": true, + "schema": { + "type": "string", + "description": "", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "contentType": { + "type": "string", + "nullable": true + }, + "contentDisposition": { + "type": "string", + "nullable": true + }, + "headers": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + }, + "nullable": true + }, + "length": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string", + "nullable": true + }, + "fileName": { + "type": "string", + "nullable": true + } + } + }, + "encoding": { + "contentType": { + "style": "form" + }, + "contentDisposition": { + "style": "form" + }, + "headers": { + "style": "form" + }, + "length": { + "style": "form" + }, + "name": { + "style": "form" + }, + "fileName": { + "style": "form" + } + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + } + }, + "components": { + "schemas": { + "ErpMaestro.UtilizationTracking.Common.Models.ChangeDocumentModel": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "emergencyAccessRequestId": { + "type": "string", + "format": "uuid" + }, + "erpSystemId": { + "type": "integer", + "format": "int32" + }, + "documentData": { + "type": "string", + "nullable": true + }, + "createdDateUtc": { + "type": "string", + "format": "date-time" + }, + "createdBy": { + "type": "string", + "nullable": true + }, + "updatedDateUtc": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "updatedBy": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + } + } + } +} \ No newline at end of file diff --git a/static/idn-api/beta/CegsManagedClients-beta.1.0-oas3-swagger.yaml b/static/idn-api/beta/CegsManagedClients-beta.1.0-oas3-swagger.yaml new file mode 100644 index 000000000..6d3e6f6b2 --- /dev/null +++ b/static/idn-api/beta/CegsManagedClients-beta.1.0-oas3-swagger.yaml @@ -0,0 +1,41 @@ +# +# Copyright (C) 2020 SailPoint Technologies, Inc. All rights reserved. +# +openapi: 3.0.0 +info: + title: Managed Client API + description: This is an API for accessing and managing client information. + contact: + email: scrum-denali@sailpoint.com + version: 1.0.0-oas3 + x-copyright-year: 2021 +servers: + - url: http://localhost:7100/v3/ +tags: + - name: Managed Clients + description: Operations for accessing and managing client information, including client polls. +paths: + /managed-clients: + $ref: "../beta/paths/managed-clients.yaml" + /managed-clients/{id}: + $ref: "../beta/paths/managed-clients-path.yaml" + /managed-clients/{id}/status: + $ref: "../beta/paths/managed-client-status.yaml" + /managed-clients/{id}/request-credentials: + $ref: "../beta/paths/managed-clients-credentials.yaml" + +components: + securitySchemes: + bearerAuth: + type: oauth2 + description: This API uses OAuth 2 with the client credentials grant flow. + flows: + clientCredentials: + tokenUrl: https://acme-solar.api.cloud.sailpoint.com/oauth/token + scopes: + idn:managed-client:create: ManagedClient create access + idn:managed-client:read: ManagedClient read access + idn:managed-client:update: ManagedClient update access + idn:managed-client:delete: ManagedClient delete access + idn:managed-client-status:read: ManagedClientStatus read access + idn:managed-client-status:update: ManagedClientStatus update access diff --git a/static/idn-api/beta/CegsManagedClusterTypes-beta.1.0-oas3-swagger.yaml b/static/idn-api/beta/CegsManagedClusterTypes-beta.1.0-oas3-swagger.yaml new file mode 100644 index 000000000..984cab293 --- /dev/null +++ b/static/idn-api/beta/CegsManagedClusterTypes-beta.1.0-oas3-swagger.yaml @@ -0,0 +1,36 @@ +# +# Copyright (C) 2021 SailPoint Technologies, Inc. All rights reserved. +# +openapi: 3.0.0 +info: + title: Managed Cluster Types API + description: This is an API for accessing and managing Cluster type information (IDN/IAI/etc). + contact: + email: scrum-denali@sailpoint.com + version: 1.0.0-oas3 + x-copyright-year: 2021 +servers: + - url: http://localhost:7100/v3/ +tags: + - name: Managed Cluster Types + description: Operations for accessing and managing Cluster type information (IDN/IAI/etc). +paths: + /managed-cluster-types: + $ref: '../beta/paths/managed-cluster-types.yaml' + /managed-cluster-types/{id}: + $ref: '../beta/paths/managed-cluster-types-path.yaml' + + +components: + securitySchemes: + bearerAuth: + type: oauth2 + description: This API uses OAuth 2 with the client credentials grant flow. + flows: + clientCredentials: + tokenUrl: https://acme-solar.api.cloud.sailpoint.com/oauth/token + scopes: + idn:managed-cluster-types:create: ManagedClusterType create access + idn:managed-cluster-types:read: ManagedClusterType read access + idn:managed-cluster-types:update: ManagedClusterType update access + idn:managed-cluster-types:delete: ManagedClusterType delete access diff --git a/static/idn-api/beta/CegsManagedClusters-beta.1.0-oas3-swagger.yaml b/static/idn-api/beta/CegsManagedClusters-beta.1.0-oas3-swagger.yaml new file mode 100644 index 000000000..7dc8b468e --- /dev/null +++ b/static/idn-api/beta/CegsManagedClusters-beta.1.0-oas3-swagger.yaml @@ -0,0 +1,58 @@ +# +# Copyright (C) 2020 SailPoint Technologies, Inc. All rights reserved. +# +openapi: 3.0.0 +info: + title: Managed Clusters API + description: This is an API for accessing and managing client Clusters, including log configuration. + contact: + email: scrum-denali@sailpoint.com + version: 1.0.0-oas3 + x-copyright-year: 2020 +servers: + - url: http://localhost:7100/v3/ +tags: + - name: Managed Clusters + description: Operations for accessing and managing client Clusters, including Log Configuration +paths: + /managed-clusters: + $ref: "../beta/paths/managed-clusters-full.yaml" + /managed-clusters/{id}: + $ref: "../beta/paths/managed-cluster-path-full.yaml" + /managed-clusters/{id}/status: + $ref: "../beta/paths/managed-cluster-status.yaml" + /managed-clusters/{id}/log-config: + $ref: "../beta/paths/managed-cluster-log-config.yaml" + /managed-clusters/{id}/upgrade: + $ref: "../beta/paths/managed-cluster-upgrade.yaml" + /managed-clusters/{id}/reboot: + $ref: "../beta/paths/managed-cluster-reboot.yaml" + /managed-clusters/{id}/jobs: + $ref: "../beta/paths/managed-cluster-jobs.yaml" + /managed-clusters/{id}/process-config: + $ref: "../beta/paths/managed-cluster-processes.yaml" + /managed-clusters/{id}/set-encryption-keys: + $ref: "../beta/paths/managed-clusters-set-encryption-keys.yaml" + /managed-clusters/cache: + $ref: '../beta/paths/managed-cluster-cache.yaml' + + +components: + securitySchemes: + bearerAuth: + type: oauth2 + description: This API uses OAuth 2 with the client credentials grant flow. + flows: + clientCredentials: + tokenUrl: https://acme-solar.api.cloud.sailpoint.com/oauth/token + scopes: + idn:managed-cluster:read: ManagedCluster read access + idn:managed-cluster-log-config:read: ManagedCluster log configuration read access + idn:managed-cluster-log-config:write: ManagedCluster log configuration write access + idn:managed-cluster:upgrade: ManagedCluster client version upgrade access + idn:managed-cluster-jobs:read: ManagedCluster read cache for jobs + idn:managed-cluster:create: ManagedCluster create access + idn:managed-cluster:update: ManagedCluster update access + idn:managed-cluster:delete: ManagedCluster delete access + idn:managed-cluster-status:read: ManagedClusterStatus read access + idn:managed-process:read: ManagedProcess read access diff --git a/static/idn-api/beta/CegsManagedProcesses-beta.1.0-oas3-swagger.yaml b/static/idn-api/beta/CegsManagedProcesses-beta.1.0-oas3-swagger.yaml new file mode 100644 index 000000000..d112da05d --- /dev/null +++ b/static/idn-api/beta/CegsManagedProcesses-beta.1.0-oas3-swagger.yaml @@ -0,0 +1,36 @@ +# +# Copyright (C) 2021 SailPoint Technologies, Inc. All rights reserved. +# +openapi: 3.0.0 +info: + title: Managed Processes API + description: This is an API for accessing and managing Cluster upgrade process information. + contact: + email: scrum-denali@sailpoint.com + version: 1.0.0-oas3 + x-copyright-year: 2021 +servers: + - url: http://localhost:7100/v3/ +tags: + - name: Managed Processes + description: Operations for accessing and managing Cluster upgrade process information +paths: + /managed-processes: + $ref: '../beta/paths/managed-processes.yaml' + /managed-processes/{id}: + $ref: '../beta/paths/managed-processes-path.yaml' + + +components: + securitySchemes: + bearerAuth: + type: oauth2 + description: This API uses OAuth 2 with the client credentials grant flow. + flows: + clientCredentials: + tokenUrl: https://acme-solar.api.cloud.sailpoint.com/oauth/token + scopes: + idn:managed-process:create: ManagedProcess create access + idn:managed-process:read: ManagedProcess read access + idn:managed-process:update: ManagedProcess update access + idn:managed-process:delete: ManagedProcess delete access diff --git a/static/idn-api/beta/GovRole-beta.1.0-oas3-swagger.yaml b/static/idn-api/beta/GovRole-beta.1.0-oas3-swagger.yaml new file mode 100644 index 000000000..d041a31dc --- /dev/null +++ b/static/idn-api/beta/GovRole-beta.1.0-oas3-swagger.yaml @@ -0,0 +1,53 @@ +# +# Copyright (C) 2022 SailPoint Technologies, Inc. All rights reserved. +# +openapi: 3.0.0 +info: + title: Gov Role API + description: This is an API for accessing Gov Role + contact: + email: scrum-lanai@sailpoint.com + version: 1.0.0-oas3 + x-copyright-year: 2022 +servers: + - url: http://localhost:7100/v3/ +tags: + - name: Gov Role + description: Gov Role +paths: + /access-profiles: + $ref: '../beta/paths/access-profiles.yaml' + /access-profiles/{id}: + $ref: '../beta/paths/access-profile.yaml' + /access-profiles/access-profile-bulk-delete: + $ref: '../beta/paths/access-profile-bulk-delete.yaml' + /access-profiles/{id}/entitlements: + $ref: '../beta/paths/access-profile-entitlements.yaml' + /access-profiles/cleanup: + $ref: '../beta/paths/access-profiles-cleanup.yaml' + /roles: + $ref: '../beta/paths/roles.yaml' + /roles/{id}: + $ref: '../beta/paths/role.yaml' + /access-roles/change-segment-assignments: + $ref: '../beta/paths/access-roles-change-segment-assignments.yaml' +components: + securitySchemes: + bearerAuth: + type: oauth2 + description: This API uses OAuth 2 with the client credentials grant flow. + flows: + clientCredentials: + tokenUrl: https://acme-solar.api.cloud.sailpoint.com/oauth/token + scopes: + 'idn:access-profile:read': Right to read Access Profiles + 'idn:access-profile:manage': Right to create, update, and delete Access Profiles + 'idn:role:create': Right to create Roles + 'idn:role:read': Right to read Roles + 'idn:role:update': Right to update Roles + 'idn:role:delete': Right to delete + 'idn:role-checked:create': Right for Role Suadmins to create Roles + 'idn:role-checked:read': Right for Role Subadmins to read Roles + 'idn:role-checked:update': Right for Role Subadmins to update Roles + 'idn:role-checked:delete': Right for Role Subadmins to delete Roles + 'idn:segments:write': Write access to segments diff --git a/static/idn-api/beta/ServiceDeskIntegrations-beta.3.0-oas3-swagger.yaml b/static/idn-api/beta/ServiceDeskIntegrations-beta.3.0-oas3-swagger.yaml new file mode 100644 index 000000000..65bbe6d74 --- /dev/null +++ b/static/idn-api/beta/ServiceDeskIntegrations-beta.3.0-oas3-swagger.yaml @@ -0,0 +1,41 @@ +# +# Copyright (C) 2020 SailPoint Technologies, Inc. All rights reserved. +# +openapi: 3.0.0 +info: + title: Service Desk Integration API + description: This is an API for creating and accessing ServiceNow service desk integrations. + contact: + email: scrum-denali@sailpoint.com + version: 3.0.0-oas3 + x-copyright-year: 2020 +servers: + - url: http://localhost:7100/v3/ +tags: + - name: Service Desk Integration + description: Operations for creating and accessing ServiceNow service desk integrations +paths: + /service-desk-integrations: + $ref: "../beta/paths/service-desk-integrations.yaml" + /service-desk-integrations/{id}: + $ref: "../beta/paths/service-desk-integration.yaml" + /service-desk-integrations/types: + $ref: "../beta/paths/service-desk-integration-types.yaml" + /service-desk-integrations/templates/{scriptName}: + $ref: "../beta/paths/service-desk-integration-template.yaml" + /service-desk-integrations/status-check-configuration: + $ref: "../beta/paths/service-desk-integration-configuration.yaml" + +components: + securitySchemes: + bearerAuth: + type: oauth2 + description: This API uses OAuth 2 with the client credentials grant flow. + flows: + clientCredentials: + tokenUrl: https://acme-solar.api.cloud.sailpoint.com/oauth/token + scopes: + idn:service-desk-integration:read: Service Desk integration read access + idn:service-desk-integration:write: Service Desk integration write access + idn:service-desk-admin:read: Service Desk admin read access + idn:service-desk-admin:write: Service Desk admin write access diff --git a/static/idn-api/beta/TaskManager-beta.1.0-oas3-swagger.yaml b/static/idn-api/beta/TaskManager-beta.1.0-oas3-swagger.yaml new file mode 100644 index 000000000..e772fcaf4 --- /dev/null +++ b/static/idn-api/beta/TaskManager-beta.1.0-oas3-swagger.yaml @@ -0,0 +1,43 @@ +# +# Copyright (C) 2019-2020 SailPoint Technologies, Inc. All rights reserved. +# +openapi: 3.0.0 +info: + title: Task Management API + description: This is an API for managing task execution. + contact: + email: scrum-denali@sailpoint.com + version: 1.0.0-oas3 + x-copyright-year: 2019-2020 +servers: + - url: http://localhost:7100/v3/ +tags: + - name: Task Management + description: Operations on TaskDefinition, TaskInvocation and TaskStatus +paths: + /task-definitions: + $ref: "../beta/paths/task-definitions.yaml" + /task-definitions/{id}: + $ref: "../beta/paths/task-definition.yaml" + /task-execution/run: + $ref: "../beta/paths/task-execution-run.yaml" + /task-execution/{id}/cancel: + $ref: "../beta/paths/task-execution-cancel.yaml" + /task-status/{id}: + $ref: "../beta/paths/task-status.yaml" + /task-status/pending-tasks: + $ref: "../beta/paths/task-status-pending.yaml" + +components: + securitySchemes: + bearerAuth: + type: oauth2 + description: This API uses OAuth 2 with the client credentials grant flow. + flows: + clientCredentials: + tokenUrl: https://acme-solar.api.cloud.sailpoint.com/oauth/token + scopes: + idn:task-definition:read: Task Definition read access + idn:task-definition:write: Task Definition write access + idn:task-management:read: Task Management read access (Task Status) + idn:task-management:write: Task Management write access (Task Execution) diff --git a/static/idn-api/beta/paths/access-profile-bulk-delete.yaml b/static/idn-api/beta/paths/access-profile-bulk-delete.yaml new file mode 100644 index 000000000..d7ff6fdd0 --- /dev/null +++ b/static/idn-api/beta/paths/access-profile-bulk-delete.yaml @@ -0,0 +1,86 @@ +post: + operationId: bulkDeleteAccessProfiles + summary: Delete Access Profile(s) + tags: + - Access Profiles + description: >- + This API initiates a bulk deletion of one or more Access Profiles. + + + By default, if any of the indicated Access Profiles are in use, no deletions will be performed and the **inUse** + field of the response indicates the usages that must be removed first. If the request field **bestEffortOnly** is + **true**, however, usages are reported in the **inUse** response field but all other indicated Access Profiles will + be deleted. + + + A token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. In addition, + a SOURCE_SUBADMIN may only use this API to delete Access Profiles which are associated with Sources they are able + to administer. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../../v3/schemas/access/AccessProfileBulkDeleteRequest.yaml' + example: + { + "bestEffortOnly": true, + "accessProfileIds": [ "2c91808876438bb2017668b91919ecca","2c91808876438ba801766e129f151816" ] + } + responses: + '200': + description: Returned only if **bestEffortOnly** is **false**, and one or more Access Profiles are in use. + content: + application/json: + schema: + $ref: '../../v3/schemas/access/AccessProfileBulkDeleteResponse.yaml' + example: + { + "pending": [], + "inUse": [ + { + "accessProfileId": "2c91808876438ba801766e129f151816", + "usages": [ + { + "type": "Role", + "id": "2c9180887643764201766e9f6e121518" + } + ] + } + ] + } + '202': + description: Returned if at least one deletion will be performed. + content: + application/json: + schema: + $ref: '../../v3/schemas/access/AccessProfileBulkDeleteResponse.yaml' + example: + { + "taskId":"2c91808a7813090a01781412a1119a20", + "pending":["2c91808a7813090a017813fe1919ecca"], + "inUse": [ + { + "accessProfileId": "2c91808876438ba801766e129f151816", + "usages": [ + { + "type": "Role", + "id": "2c9180887643764201766e9f6e121518" + } + ] + } + ] + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:access-profile:manage' diff --git a/static/idn-api/beta/paths/access-profile-entitlements.yaml b/static/idn-api/beta/paths/access-profile-entitlements.yaml new file mode 100644 index 000000000..dfaab3847 --- /dev/null +++ b/static/idn-api/beta/paths/access-profile-entitlements.yaml @@ -0,0 +1,91 @@ +get: + operationId: listAccessProfileEntitlements + tags: + - Access Profiles + summary: List Access Profile's Entitlements + description: >- + This API lists the Entitlements associated with a given Access Profile + + + A token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to invoke this API. In + addition, a token with SOURCE_SUBADMIN authority must have access to the Source associated with the given + Access Profile + parameters: + - name: id + in: path + description: ID of the containing Access Profile + required: true + schema: + type: string + example: 2c91808a7813090a017814121919ecca + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#filtering-results) + + + Filtering is supported for the following Entitlement fields and operators: + + **id**: *eq, in* + + + **name**: *eq, sw* + + + **attribute**: *eq, sw* + + + **value**: *eq, sw* + + + **created, modified**: *gt, lt, ge, le* + + + **owner.id**: *eq, in* + + + **source.id**: *eq, in* + example: attribute eq "memberOf" + required: false + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#sorting-results) + + + Sorting is supported for the following fields: **name, attribute, value, created, modified** + example: name,-modified + required: false + responses: + '200': + description: List of Entitlements + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/Entitlement.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:access-profile:read' + + + diff --git a/static/idn-api/beta/paths/access-profile.yaml b/static/idn-api/beta/paths/access-profile.yaml new file mode 100644 index 000000000..d72fb346f --- /dev/null +++ b/static/idn-api/beta/paths/access-profile.yaml @@ -0,0 +1,197 @@ +get: + operationId: getAccessProfile + tags: + - Access Profiles + summary: Get an Access Profile + description: >- + This API returns an Access Profile by its ID. + + + A token with API, ORG_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to + call this API. + parameters: + - in: path + name: id + required: true + schema: + type: string + description: >- + ID of the Access Profile + example: 2c9180837ca6693d017ca8d097500149 + responses: + '200': + description: An AccessProfile + content: + application/json: + schema: + $ref: '../../v3/schemas/access/AccessProfile.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:access-profile:read' +patch: + operationId: patchAccessProfile + tags: + - Access Profiles + summary: Patch a specified Access Profile + description: >- + This API updates an existing Access Profile. The following fields are patchable: + + + **name**, **description**, **enabled**, **owner**, **requestable**, + **accessRequestConfig**, **revokeRequestConfig**, **segments**, **entitlements**, **provisioningCriteria** + + + > You can only add or replace **entitlements** that exist on the source that the access profile is attached to. + You can use the **list entitlements** endpoint with the **filters** query parameter to get a list of available entitlements on the access profile's source. + + + > Patching the value of the **requestable** field is only supported for customers enabled with the new Request + Center. Otherwise, attempting to modify this field results in a 400 error. + + + A token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. In addition, a + SOURCE_SUBADMIN may only use this API to patch Access Profiles which are associated with Sources they are able to + administer. + parameters: + - name: id + in: path + description: ID of the Access Profile to patch + required: true + schema: + type: string + example: 2c91808a7813090a017814121919ecca + requestBody: + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + examples: + Add Entitlements: + description: Add one or more entitlements to the end of the list + value: + - op: add + path: /entitlements + value: + - id: 2c9180857725c14301772a93bb77242d + type: ENTITLEMENT + name: AD User Group + Insert Entitlement: + description: Add an entitlement at the beginning of the entitlement list + value: + - op: add + path: /entitlements/0 + value: + id: 2c9180857725c14301772a93bb77242d + type: ENTITLEMENT + name: AD User Group + Replace Entitlements: + description: Replace all entitlements with a new list of entitlements + value: + - op: replace + path: /entitlements + value: + - id: 2c9180857725c14301772a93bb77242d + type: ENTITLEMENT + name: AD User Group + Remove Entitlement: + description: Remove the first entitlement in the list + value: + - op: remove + path: /entitlements/0 + required: true + responses: + '200': + description: Responds with the Access Profile as updated. + content: + application/json: + schema: + $ref: '../../v3/schemas/access/AccessProfile.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:access-profile:manage' +delete: + operationId: deleteAccessProfile + tags: + - Access Profiles + summary: Delete the specified Access Profile + description: >- + This API deletes an existing Access Profile. + + + The Access Profile must not be in use. If it is, a 400 error is returned. + + + A token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to invoke this API. In addition, + a SOURCE_SUBADMIN token must be able to administer the Source associated with the Access Profile. + parameters: + - name: id + in: path + description: ID of the Access Profile to delete + required: true + schema: + type: string + example: 2c91808a7813090a017814121919ecca + responses: + '202': + description: Accepted - Returned if the request was successfully accepted into the system. + content: + application/json: + schema: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: A DTO with a TaskResult reference of the delete job + example: + { + "type": "TASK_RESULT", + "id": "ff8080817e8cc815017e8ce4b6910003", + "name": null + } + '400': + description: Returned when an access profile cannot be deleted as it's being used. + content: + application/json: + schema: + $ref: '../../v3/schemas/ErrorResponseDto.yaml' + examples: + 400.2.1.0 Object in use by another: + description: Returned when an access profile cannot be deleted as it's being used + value: + detailCode: 400.2.1.0 Object in use by another + trackingId: c9c1033c55b84ebc9e93e926dcf8b8b3 + messages: + - locale: en-US + localeOrigin: DEFAULT + text: The "testAccessProfile" access profile can't be deleted because it's in use. + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:access-profile:manage' + diff --git a/static/idn-api/beta/paths/access-profiles-cleanup.yaml b/static/idn-api/beta/paths/access-profiles-cleanup.yaml new file mode 100644 index 000000000..bdcdee078 --- /dev/null +++ b/static/idn-api/beta/paths/access-profiles-cleanup.yaml @@ -0,0 +1,24 @@ +post: + operationId: cleanupAccessProfiles + summary: Cleanup invalid access profiles. + description: >- + Used by internal services to cleanup invalid access profiles in the system. An access profile is considered invalid, + if it contains no valid entitlements. The references to the deleted entitlements should be cleaned up from the + invalid access profiles. Then the access profiles are disabled. According to the current implementation, this API is + scheduled to be called by a periodic task once a day at 12:00 AM. + tags: + - Internal Use Only + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + diff --git a/static/idn-api/beta/paths/access-profiles.yaml b/static/idn-api/beta/paths/access-profiles.yaml new file mode 100644 index 000000000..637913174 --- /dev/null +++ b/static/idn-api/beta/paths/access-profiles.yaml @@ -0,0 +1,153 @@ +get: + operationId: listAccessProfiles + tags: + - Access Profiles + summary: List Access Profiles + description: >- + This API returns a list of Access Profiles. + + + A token with API, ORG_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to + call this API. + parameters: + - in: query + name: for-subadmin + schema: + type: string + description: >- + If provided, filters the returned list according to what is visible to the indicated ROLE_SUBADMIN or + SOURCE_SUBADMIN Identity. The value of the parameter is either an Identity ID, or the special value **me**, + which is shorthand for the calling Identity's ID. + + + A 400 Bad Request error is returned if the **for-subadmin** parameter is specified for an Identity that is not + a subadmin. + example: 8c190e6787aa4ed9a90bd9d5344523fb + required: false + - $ref: '../../v3/parameters/limit50.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#filtering-results) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **name**: *eq, sw* + + + **created, modified**: *gt, lt, ge, le* + + + **owner.id**: *eq, in* + + + **requestable**: *eq* + + + **source.id**: *eq, in* + example: name eq "SailPoint Support" + required: false + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#sorting-results) + + + Sorting is supported for the following fields: **name, created, modified** + example: name,-modified + required: false + - in: query + name: for-segment-ids + schema: + type: string + format: comma-separated + description: >- + If present and not empty, additionally filters Access Profiles to those which are assigned to the Segment(s) + with the specified IDs. + + + If segmentation is currently unavailable, specifying this parameter results in an error. + example: 0b5c9f25-83c6-4762-9073-e38f7bb2ae26,2e8d8180-24bc-4d21-91c6-7affdb473b0d + required: false + - in: query + name: include-unsegmented + schema: + type: boolean + default: true + description: >- + Whether or not the response list should contain unsegmented Access Profiles. + If *for-segment-ids* is absent or empty, specifying *include-unsegmented* as false results in an error. + example: false + required: false + responses: + '200': + description: List of Access Profiles + content: + application/json: + schema: + type: array + items: + $ref: '../../v3/schemas/access/AccessProfile.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:access-profile:read' +post: + operationId: createAccessProfile + tags: + - Access Profiles + summary: Create an Access Profile + description: >- + This API creates an Access Profile. + + + A token with API, ORG_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to + call this API. In addition, a token with only ROLE_SUBADMIN or SOURCE_SUBADMIN authority must be associated with the + Access Profile's Source. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../../v3/schemas/access/AccessProfile.yaml' + responses: + '201': + description: Access Profile created + content: + application/json: + schema: + $ref: '../../v3/schemas/access/AccessProfile.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:access-profile:manage' diff --git a/static/idn-api/beta/paths/access-request-approval-summary.yaml b/static/idn-api/beta/paths/access-request-approval-summary.yaml new file mode 100644 index 000000000..dba607a1a --- /dev/null +++ b/static/idn-api/beta/paths/access-request-approval-summary.yaml @@ -0,0 +1,49 @@ +get: + operationId: approvalSummary + summary: Get the number of pending, approved and rejected access requests approvals + tags: + - Access Request Approvals + description: >- + This endpoint returns the number of pending, approved and rejected access requests approvals. + See "owner-id" query parameter below for authorization info. + parameters: + - in: query + name: owner-id + schema: + type: string + description: >- + The id of the owner or approver identity of the approvals. If present, the value returns approval summary for the specified identity. + * ORG_ADMIN users can call this with any identity ID value. + * ORG_ADMIN user can also fetch all the approvals in the org, when owner-id is not used. + * Non ORG_ADMIN users can only specify *me* or pass their own identity ID value. + + - in: query + name: from-date + schema: + type: string + description: >- + From date is the date and time from which the results will be shown. It should be in a valid ISO-8601 format + + + example: from-date=2020-03-19T19:59:11Z + responses: + '200': + description: Number of pending, approved, rejected access request approvals. + content: + application/json: + schema: + $ref: '../schemas/ApprovalSummary.yaml' + '400': + description: Client Error - Returned if the query parameter is invalid. + content: + application/json: + schema: + $ref: '../../v3/schemas/ErrorResponseDto.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/access-roles-change-segment-assignments.yaml b/static/idn-api/beta/paths/access-roles-change-segment-assignments.yaml new file mode 100644 index 000000000..8403e19a3 --- /dev/null +++ b/static/idn-api/beta/paths/access-roles-change-segment-assignments.yaml @@ -0,0 +1,42 @@ +post: + operationId: accessRolesChangeSegmentAssignments + tags: + - Segments + summary: Change Segment assignments for roles and access-profiles only. + description: >- + This API allows to change the Segment assignments for roles and access-profiles. + + + No more than 50 changes can be made in a single call. A 400 error will result if more changes than that are + specified. + + + Note that segmentation changes may take time to propagate through the system. + + + + A token with ORG_ADMIN or API authority is required to call this API. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/AccessRolesChangeSegmentAssignments.yaml' + responses: + '202': + description: Accepted for processing, indicates no errors detected. + $ref: '../../v3/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + + security: + - bearerAuth: + - 'idn:segments:write' \ No newline at end of file diff --git a/static/idn-api/beta/paths/account-activities.yaml b/static/idn-api/beta/paths/account-activities.yaml new file mode 100644 index 000000000..e2f33232a --- /dev/null +++ b/static/idn-api/beta/paths/account-activities.yaml @@ -0,0 +1,90 @@ +get: + operationId: listAccountActivities + tags: + - Account Activities + summary: List Account Activities + description: >- + This gets a collection of account activities that satisfy the given query parameters. + parameters: + - in: query + name: requested-for + schema: + type: string + description: >- + The identity that the activity was requested for. *me* indicates the current user. Mutually exclusive with + *regarding-identity*. + required: false + - in: query + name: requested-by + schema: + type: string + description: >- + The identity that requested the activity. *me* indicates the current user. Mutually exclusive with + *regarding-identity*. + required: false + - in: query + name: regarding-identity + schema: + type: string + description: >- + The specified identity will be either the requester or target of the account activity. *me* indicates the + current user. Mutually exclusive with *requested-for* and *requested-by*. + required: false + - in: query + name: type + schema: + type: string + description: The type of account activity. + required: false + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **type**: *eq, in* + + + **created**: *gt, lt, ge, le* + + + **modified**: *gt, lt, ge, le* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **type, created, modified** + responses: + '200': + description: List of account activities + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/CancelableAccountActivity.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + + diff --git a/static/idn-api/beta/paths/account-activity.yaml b/static/idn-api/beta/paths/account-activity.yaml new file mode 100644 index 000000000..8369eae10 --- /dev/null +++ b/static/idn-api/beta/paths/account-activity.yaml @@ -0,0 +1,36 @@ +get: + operationId: getAccountActivity + tags: + - Account Activities + summary: Get Account Activity + description: >- + This gets a single account activity by its id. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The account activity id + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: An account activity object + content: + application/json: + schema: + $ref: '../schemas/CancelableAccountActivity.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + + diff --git a/static/idn-api/beta/paths/account-aggregation-status.yaml b/static/idn-api/beta/paths/account-aggregation-status.yaml new file mode 100644 index 000000000..a3e510bc5 --- /dev/null +++ b/static/idn-api/beta/paths/account-aggregation-status.yaml @@ -0,0 +1,49 @@ +get: + operationId: getAccountAggregationStatus + tags: + - Account Aggregations + summary: In-progress Account Aggregation status + description: >- + This API returns the status of an *in-progress* account aggregation, along with the total number of **NEW**, + **CHANGED** and **DELETED** accounts found since the previous aggregation, and the number of those accounts that + have been processed so far. + + + Accounts that have not changed since the previous aggregation are not included in **totalAccounts** and + **processedAccounts** counts returned by this API. This is distinct from **Accounts Scanned** shown in the + Aggregation UI, which indicates total accounts scanned regardless of whether they changed or not. + + + Since this endpoint reports on the status of an *in-progress* account aggregation, totalAccounts and + processedAccounts may change between calls to this endpoint. + + + *Only available up to an hour after the aggregation completes. May respond with *404 Not Found* after that.* + + + A token with ORG_ADMIN, SOURCE_ADMIN, SOURCE_SUBADMIN or DASHBOARD authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The account aggregation id + example: 2c91808477a6b0c60177a81146b8110b + responses: + '200': + description: An account aggregation status object + content: + application/json: + schema: + $ref: '../schemas/AccountAggregationStatus.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/account.yaml b/static/idn-api/beta/paths/account.yaml new file mode 100644 index 000000000..fbd7210f2 --- /dev/null +++ b/static/idn-api/beta/paths/account.yaml @@ -0,0 +1,171 @@ +get: + operationId: getAccount + tags: + - Accounts + summary: Account Details + description: >- + This API returns the details for a single account based on the ID. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:account:read + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The account ID + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: An account object + content: + application/json: + schema: + $ref: '../schemas/Account.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +patch: + operationId: updateAccount + tags: + - Accounts + summary: Update Account + description: >- + This updates account details. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:account:update + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The account ID + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + description: >- + A list of account update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + content: + application/json-patch+json: + schema: + type: array + items: + type: object + example: + - op: "replace" + path: "/identityId" + value: "2c9180845d1edece015d27a975983e21" + responses: + '202': + description: Accepted. Update request accepted and is in progress. + $ref: '../../v3/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +put: + operationId: putAccount + tags: + - Accounts + summary: Update Account + description: >- + This API submits an account update task and returns the task ID. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:account:update + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The account ID + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/AccountAttributes.yaml' + responses: + '202': + description: Async task details + content: + application/json: + schema: + $ref: '../schemas/AccountsAsyncResult.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: deleteAccount + tags: + - Accounts + summary: Delete Account + description: >- + This API submits an account delete task and returns the task ID. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:account:delete + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The account ID + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '202': + description: Async task details + content: + application/json: + schema: + $ref: '../schemas/AccountsAsyncResult.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/accounts-id-disable.yaml b/static/idn-api/beta/paths/accounts-id-disable.yaml new file mode 100644 index 000000000..bc57b34d8 --- /dev/null +++ b/static/idn-api/beta/paths/accounts-id-disable.yaml @@ -0,0 +1,45 @@ +post: + operationId: disableAccount + tags: + - Accounts + summary: Disable Account + description: >- + This API submits a task to disable the account and returns the task ID. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:account:disable + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The account id + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/AccountToggleRequest.yaml' + responses: + '202': + description: Async task details + content: + application/json: + schema: + $ref: '../schemas/AccountsAsyncResult.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/accounts-id-enable.yaml b/static/idn-api/beta/paths/accounts-id-enable.yaml new file mode 100644 index 000000000..f42c95d4e --- /dev/null +++ b/static/idn-api/beta/paths/accounts-id-enable.yaml @@ -0,0 +1,45 @@ +post: + operationId: enableAccount + tags: + - Accounts + summary: Enable Account + description: >- + This API submits a task to enable account and returns the task ID. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:account:enable + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The account id + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/AccountToggleRequest.yaml' + responses: + '202': + description: Async task details + content: + application/json: + schema: + $ref: '../schemas/AccountsAsyncResult.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/accounts-id-entitlements.yaml b/static/idn-api/beta/paths/accounts-id-entitlements.yaml new file mode 100644 index 000000000..e7f51e103 --- /dev/null +++ b/static/idn-api/beta/paths/accounts-id-entitlements.yaml @@ -0,0 +1,67 @@ +get: + operationId: getAccountEntitlements + tags: + - Accounts + summary: Account Entitlements + description: >- + This API returns entitlements of the account. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:account-entitlement:read + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The account id + example: ef38f94347e94562b5bb8424a56397d8 + - in: query + name: count + description: >- + If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned + if *limit* and *offset* were ignored(total count). + required: false + schema: + type: boolean + default: false + - in: query + name: limit + description: Max number of results to return. + required: false + schema: + type: integer + minimum: 1 + maximum: 250 + default: 250 + - in: query + name: offset + description: Offset into the full result set. Usually specified with *limit* to paginate through the results. + required: false + schema: + type: integer + minimum: 0 + default: 0 + responses: + '200': + description: An array of account entitlements + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/EntitlementDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/accounts-id-reload.yaml b/static/idn-api/beta/paths/accounts-id-reload.yaml new file mode 100644 index 000000000..42b23887b --- /dev/null +++ b/static/idn-api/beta/paths/accounts-id-reload.yaml @@ -0,0 +1,39 @@ +post: + operationId: reloadAccount + tags: + - Accounts + summary: Reload Account + description: >- + This API asynchronously reloads the account directly from the connector and performs a one-time aggregation process. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:account:reload + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The account id + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '202': + description: Async task details + content: + application/json: + schema: + $ref: '../schemas/AccountsAsyncResult.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/accounts-id-unlock.yaml b/static/idn-api/beta/paths/accounts-id-unlock.yaml new file mode 100644 index 000000000..293a0247c --- /dev/null +++ b/static/idn-api/beta/paths/accounts-id-unlock.yaml @@ -0,0 +1,45 @@ +post: + operationId: unlockAccount + tags: + - Accounts + summary: Unlock Account + description: >- + This API submits a task to unlock an account and returns the task ID. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:account:unlock + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The account id + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/AccountUnlockRequest.yaml' + responses: + '202': + description: Async task details + content: + application/json: + schema: + $ref: '../schemas/AccountsAsyncResult.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/accounts.yaml b/static/idn-api/beta/paths/accounts.yaml new file mode 100644 index 000000000..c9e921dc5 --- /dev/null +++ b/static/idn-api/beta/paths/accounts.yaml @@ -0,0 +1,152 @@ +get: + operationId: listAccounts + tags: + - Accounts + summary: Accounts List + description: >- + This returns a list of accounts. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:account-list:read + parameters: + - in: query + name: detailLevel + schema: + type: string + enum: [ SLIM, FULL ] + description: >- + Determines whether Slim, or increased level of detail is provided for each account in the returned list. + FULL is the default behavior. + example: FULL + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **identityId**: *eq* + + + **name**: *eq, in* + + + **nativeIdentity**: *eq, in* + + + **sourceId**: *eq, in* + + + **uncorrelated**: *eq* + responses: + '200': + description: List of account objects + content: + application/json: + schema: + type: array + items: + oneOf: + - $ref: '../schemas/SlimAccount.yaml' + - $ref: '../schemas/FullAccount.yaml' + + examples: + Slim Accounts: + description: List of slim accounts that would result with *detailLevel = SLIM* + value: + - "attributes": null + "created": "2021-09-28T02:15:44.644Z" + "description": null + "disabled": false + "features": "PROVISIONING, GROUP_PROVISIONING, SYNC_PROVISIONING, AUTHENTICATE" + "hasEntitlements": true + "id": "2c9180867c184ff6017c2a2fbf031667" + "identityId": "2c9180867c184ff6017c2a2fbf031666" + "locked": false + "manuallyCorrelated": false + "modified": "2021-09-28T02:16:12.207Z" + "name": "Geovanni.0a7cad6df" + "nativeIdentity": "CN=Geovanni 0a7cad6df,OU=hpun,OU=org-data-service,DC=TestAutomationAD,DC=local" + "sourceId": "2c91808b7c28b350017c2a2ec5790aa1" + "uuid": "{e4218fa4-da52-4bb0-aa41-d2dcc08a7ad8}" + + + Full Accounts: + description: List of slim accounts that would result with *detailLevel = FULL* or not specifying it + value: + - "attributes": null + "authoritative": true + "created": "2021-09-28T02:15:44.644Z" + "description": null + "disabled": false + "features": "PROVISIONING, GROUP_PROVISIONING, SYNC_PROVISIONING, AUTHENTICATE" + "hasEntitlements": true + "id": "2c9180867c184ff6017c2a2fbf031667" + "identityId": "2c9180867c184ff6017c2a2fbf031666" + "locked": false + "manuallyCorrelated": false + "modified": "2021-09-28T02:16:12.207Z" + "name": "Geovanni.0a7cad6df" + "nativeIdentity": "CN=Geovanni 0a7cad6df,OU=hpun,OU=org-data-service,DC=TestAutomationAD,DC=local" + "sourceId": "2c91808b7c28b350017c2a2ec5790aa1" + "systemAccount": false + "uncorrelated": false + "uuid": "{e4218fa4-da52-4bb0-aa41-d2dcc08a7ad8}" + + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +post: + operationId: createAccount + tags: + - Accounts + summary: Create Account + description: >- + This API submits an account creation task and returns the task ID. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:account:create + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/AccountAttributes.yaml' + responses: + '202': + description: Async task details + content: + application/json: + schema: + $ref: '../schemas/AccountsAsyncResult.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/ai-access-request-recommendations-ignored.yaml b/static/idn-api/beta/paths/ai-access-request-recommendations-ignored.yaml new file mode 100644 index 000000000..d6f7ac692 --- /dev/null +++ b/static/idn-api/beta/paths/ai-access-request-recommendations-ignored.yaml @@ -0,0 +1,91 @@ +post: + operationId: addAccessRequestRecommendationsIgnoredItem + tags: + - IAI Access Request Recommendations + summary: Notification of Ignored Access Request Recommendations + description: >- + This API ignores a recommended access request item. + Once an item is ignored, it will be marked as ignored=true if it is still a recommended item. + The consumer can decide to hide ignored recommendations. + requestBody: + description: The recommended access item to ignore for an identity. + required: true + content: + application/json: + schema: + $ref: '../../beta/schemas/AccessRequestRecommendationActionItemDto.yaml' + responses: + '201': + description: Recommendation successfully stored as ignored. + content: + application/json: + schema: + $ref: '../../beta/schemas/AccessRequestRecommendationActionItemResponseDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +get: + operationId: getAccessRequestRecommendationsIgnoredItems + tags: + - IAI Access Request Recommendations + summary: List of Ignored Access Request Recommendations + description: >- + This API returns the list of ignored access request recommendations. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter recommendations using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki-API-Standard-Collection-Parameters/ta-p/156407) + + + Filtering is supported for the following fields and operators: + + + **access.id**: *eq, in* + + + **access.type**: *eq, in* + + + **identityId**: *eq, in* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **access.id, access.type, identityId, timestamp** + responses: + '200': + description: Returns list of ignored access request recommendations. + content: + application/json: + schema: + type: array + items: + $ref: '../../beta/schemas/AccessRequestRecommendationActionItemResponseDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/ai-access-request-recommendations-requested.yaml b/static/idn-api/beta/paths/ai-access-request-recommendations-requested.yaml new file mode 100644 index 000000000..fe0543ada --- /dev/null +++ b/static/idn-api/beta/paths/ai-access-request-recommendations-requested.yaml @@ -0,0 +1,91 @@ +post: + operationId: addAccessRequestRecommendationsRequestedItem + tags: + - IAI Access Request Recommendations + summary: Notification of Requested Access Request Recommendations + description: >- + This API consumes a notification that a recommended access + request item was requested. This API does not actually make the request, it is just a notification. + This will help provide feedback in order to improve our recommendations. + requestBody: + description: The recommended access item that was requested for an identity. + required: true + content: + application/json: + schema: + $ref: '../../beta/schemas/AccessRequestRecommendationActionItemDto.yaml' + responses: + '201': + description: Notification successfully acknowledged. + content: + application/json: + schema: + $ref: '../../beta/schemas/AccessRequestRecommendationActionItemResponseDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +get: + operationId: getAccessRequestRecommendationsRequestedItems + tags: + - IAI Access Request Recommendations + summary: List of Requested Access Request Recommendations + description: >- + This API returns a list of requested access request recommendations. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter recommendations using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki-API-Standard-Collection-Parameters/ta-p/156407) + + + Filtering is supported for the following fields and operators: + + + **access.id**: *eq, in* + + + **access.type**: *eq, in* + + + **identityId**: *eq, in* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **access.id, access.type, identityId, timestamp** + responses: + '200': + description: Returns the list of requested access request recommendations. + content: + application/json: + schema: + type: array + items: + $ref: '../../beta/schemas/AccessRequestRecommendationActionItemResponseDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/ai-access-request-recommendations-viewed-bulk-create.yaml b/static/idn-api/beta/paths/ai-access-request-recommendations-viewed-bulk-create.yaml new file mode 100644 index 000000000..db8456c09 --- /dev/null +++ b/static/idn-api/beta/paths/ai-access-request-recommendations-viewed-bulk-create.yaml @@ -0,0 +1,37 @@ +post: + operationId: addAccessRequestRecommendationsViewedItems + tags: + - IAI Access Request Recommendations + summary: Notification of Viewed Access Request Recommendations in Bulk + description: >- + This API consumes a notification that a set of recommended access request item were viewed. + Future recommendations with these items will be marked with viewed=true. This can be useful for the + consumer to determine if there are any new/unviewed recommendations. + requestBody: + description: The recommended access items that were viewed for an identity. + required: true + content: + application/json: + schema: + type: array + items: + $ref: '../../beta/schemas/AccessRequestRecommendationActionItemDto.yaml' + responses: + '201': + description: Recommendations successfully stored as viewed. + content: + application/json: + schema: + type: array + items: + $ref: '../../beta/schemas/AccessRequestRecommendationActionItemResponseDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/ai-access-request-recommendations-viewed.yaml b/static/idn-api/beta/paths/ai-access-request-recommendations-viewed.yaml new file mode 100644 index 000000000..f48e8fd42 --- /dev/null +++ b/static/idn-api/beta/paths/ai-access-request-recommendations-viewed.yaml @@ -0,0 +1,91 @@ +post: + operationId: addAccessRequestRecommendationsViewedItem + tags: + - IAI Access Request Recommendations + summary: Notification of Viewed Access Request Recommendations + description: >- + This API consumes a notification that a recommended access request item was viewed. + Future recommendations with this item will be marked with viewed=true. This can be useful for the + consumer to determine if there are any new/unviewed recommendations. + requestBody: + description: The recommended access that was viewed for an identity. + required: true + content: + application/json: + schema: + $ref: '../../beta/schemas/AccessRequestRecommendationActionItemDto.yaml' + responses: + '201': + description: Recommendation successfully stored as viewed. + content: + application/json: + schema: + $ref: '../../beta/schemas/AccessRequestRecommendationActionItemResponseDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +get: + operationId: getAccessRequestRecommendationsViewedItems + tags: + - IAI Access Request Recommendations + summary: List of Viewed Access Request Recommendations + description: >- + This API returns the list of viewed access request recommendations. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter recommendations using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki-API-Standard-Collection-Parameters/ta-p/156407) + + + Filtering is supported for the following fields and operators: + + + **access.id**: *eq, in* + + + **access.type**: *eq, in* + + + **identityId**: *eq, in* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **access.id, access.type, identityId, timestamp** + responses: + '200': + description: Returns list of viewed access request recommendations. + content: + application/json: + schema: + type: array + items: + $ref: '../../beta/schemas/AccessRequestRecommendationActionItemResponseDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/ai-access-request-recommendations.yaml b/static/idn-api/beta/paths/ai-access-request-recommendations.yaml new file mode 100644 index 000000000..b2432c6fe --- /dev/null +++ b/static/idn-api/beta/paths/ai-access-request-recommendations.yaml @@ -0,0 +1,88 @@ +get: + operationId: accessRequestRecommendations + tags: + - IAI Access Request Recommendations + summary: Identity Access Request Recommendations + description: >- + This API returns the access request recommendations for the specified identity. The default identity is *me* which indicates the current user. + parameters: + - in: query + name: identity-id + description: >- + Get access request recommendations for an identityId. *me* indicates the current user. + schema: + type: string + default: me + required: false + example: 2c91808570313110017040b06f344ec9 + - in: query + name: limit + description: >- + Max number of results to return. + required: false + schema: + type: integer + minimum: 0 + maximum: 15 + default: 15 + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: include-translation-messages + description: >- + If *true* it will populate a list of translation messages in the response. + schema: + type: boolean + default: false + required: false + example: false + - in: query + name: filters + schema: + type: string + description: >- + Filter recommendations using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki-API-Standard-Collection-Parameters/ta-p/156407) + + + Filtering is supported for the following fields and operators: + + + **access.name**: *co* + + + **access.type**: *eq, in* + + + **access.description**: *co* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **access.name, access.type** + + + By default the recommendations are sorted by highest confidence first. + responses: + '200': + description: List of access request recommendations for the identityId + content: + application/json: + schema: + type: array + items: + $ref: '../../beta/schemas/AccessRequestRecommendationItemDetail.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/approve-access-request-approval.yaml b/static/idn-api/beta/paths/approve-access-request-approval.yaml new file mode 100644 index 000000000..2f3c84114 --- /dev/null +++ b/static/idn-api/beta/paths/approve-access-request-approval.yaml @@ -0,0 +1,35 @@ +post: + operationId: approveRequest + summary: Approves an access request approval. + tags: + - Access Request Approvals + description: >- + This endpoint approves an access request approval. Only the owner of the approval and ORG_ADMIN users are allowed to perform this action. + parameters: + - in: path + name: approvalId + schema: + type: string + required: true + description: The id of the approval. + example: 2c91808b7294bea301729568c68c002e + requestBody: + description: Reviewer's comment. + required: false + content: + application/json: + schema: + $ref: "../schemas/CommentDto.yaml" + responses: + '202': + $ref: '../../v3/responses/202.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/assign-verified-from-addresses.yaml b/static/idn-api/beta/paths/assign-verified-from-addresses.yaml new file mode 100644 index 000000000..9556815a5 --- /dev/null +++ b/static/idn-api/beta/paths/assign-verified-from-addresses.yaml @@ -0,0 +1,34 @@ +post: + operationId: assignVerifiedFromAddresses + tags: + - Notifications + summary: Assign Verified From Address + description: >- + Assign pre-existing verified, From email address to current tenant. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/EmailStatusDto.yaml' + example: + email: "sender@example.com" + responses: + '201': + description: Verified Email Status + content: + application/json: + schema: + $ref: '../schemas/EmailStatusDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/attr-sync-config-source.yaml b/static/idn-api/beta/paths/attr-sync-config-source.yaml new file mode 100644 index 000000000..6244ef1f5 --- /dev/null +++ b/static/idn-api/beta/paths/attr-sync-config-source.yaml @@ -0,0 +1,84 @@ + +get: + operationId: getSourceAttrSyncConfig + tags: + - Sources + summary: Attribute Sync Config + description: >- + This API returns the existing attribute synchronization configuration for a source specified by the + given ID. The response contains all attributes, regardless of whether they enabled or not. + + A token with ORG_ADMIN authority is required to call this API. + parameters: + - in: path + name: id + required: true + schema: + type: string + description: The source id + example: 2c9180835d191a86015d28455b4a2329 + responses: + '200': + description: Attribute synchronization configuration for a source + content: + application/json: + schema: + $ref: '../schemas/AttrSyncSourceConfig.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + +put: + operationId: putSourceAttrSyncConfig + tags: + - Sources + summary: Update Attribute Sync Config + description: >- + Replaces the attribute synchronization configuration for the source specified by the given ID with the + configuration provided in the request body. Only the "enabled" field of the values in the "attributes" + array is mutable. Attempting to change other attributes or add new values to the "attributes" array + will result in an error. + + A token with ORG_ADMIN authority is required to call this API. + parameters: + - in: path + name: id + required: true + schema: + type: string + description: The source id + example: 2c9180835d191a86015d28455b4a2329 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/AttrSyncSourceConfig.yaml' + responses: + '200': + description: Updated attribute synchronization configuration for a source + content: + application/json: + schema: + $ref: '../schemas/AttrSyncSourceConfig.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/attr-sync-config-tenant.yaml b/static/idn-api/beta/paths/attr-sync-config-tenant.yaml new file mode 100644 index 000000000..e6cffce21 --- /dev/null +++ b/static/idn-api/beta/paths/attr-sync-config-tenant.yaml @@ -0,0 +1,107 @@ + +get: + operationId: getTenantAttrSyncConfig + tags: + - Attribute Synchronization + summary: Tenant Attribute Sync Config + description: >- + This API returns the attribute synchronization configuration for a tenant. The response contains + configuration data for individual identity attributes and the corresponding target sources that + should be sychronized when a value changes. + + A token with ORG_ADMIN authority is required to call this API. + responses: + '200': + description: Attribute synchronization configuration for a tenant + content: + application/json: + schema: + $ref: '../schemas/AttrSyncTenantConfig.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + +post: + operationId: createTenantAttrSyncConfig + tags: + - Attribute Synchronization + summary: New Tenant Attribute Sync Config + description: >- + This API creates a new attribute synchronization configuration for a tenant. The payload contains + configuration data for individual identity attributes and the corresponding target sources that + should be sychronized when a value changes. + + A token with ORG_ADMIN authority is required to call this API. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/AttrSyncTenantConfig.yaml' + responses: + '200': + description: Newly created attribute synchronization configuration for a tenant + content: + application/json: + schema: + $ref: '../schemas/AttrSyncTenantConfig.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + +put: + operationId: replaceTenantAttrSyncConfig + tags: + - Attribute Synchronization + summary: Update Tenant Attribute Sync Config + description: >- + This API replaces an existing attribute synchronization configuration for a tenant. Only the + "attributes" property is mutable. The "attributes" property contains the synchronization configuration + for the individual identity attributes and the corresponding target sources that should be + synchronized when a value changes. + + A token with ORG_ADMIN authority is required to call this API. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/AttrSyncTenantConfig.yaml' + responses: + '200': + description: Updated attribute synchronization configuration for a tenant + content: + application/json: + schema: + $ref: '../schemas/AttrSyncTenantConfig.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + \ No newline at end of file diff --git a/static/idn-api/beta/paths/auth-org-config.yaml b/static/idn-api/beta/paths/auth-org-config.yaml new file mode 100644 index 000000000..070ca150e --- /dev/null +++ b/static/idn-api/beta/paths/auth-org-config.yaml @@ -0,0 +1,27 @@ +get: + operationId: getAuthOrgConfig + tags: + - Auth Org Configuration + summary: Get Auth Org Configuration + description: >- + This gets the details of an org's auth configuration. + + Requires security scope of: 'sp:auth-org:read' + responses: + '200': + description: Auth org configuration for the tenant. + content: + application/json: + schema: + $ref: '../schemas/AuthOrgConfiguration.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + # security: + # - bearerAuth: + # - 'sp:auth-org:read' diff --git a/static/idn-api/beta/paths/auth-org-lockout-config.yaml b/static/idn-api/beta/paths/auth-org-lockout-config.yaml new file mode 100644 index 000000000..069e75cb4 --- /dev/null +++ b/static/idn-api/beta/paths/auth-org-lockout-config.yaml @@ -0,0 +1,117 @@ +get: + operationId: getAuthOrgLockoutConfig + tags: + - Auth Org Configuration + summary: Get the org's auth org lockout configuration. + description: >- + This API returns the details of an org's lockout auth configuration.
        + Requires security scope of: 'sp:auth-org:read' + responses: + '200': + description: Lockout configuration for the tenant's auth org. + content: + application/json: + schema: + $ref: '../schemas/LockoutConfiguration.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + # security: + # - bearerAuth: + # - 'sp:auth-org:read' +post: + operationId: createAuthOrgLockoutConfig + tags: + - Auth Org Configuration + summary: Create the org's auth org lockout configuration. + description: >- + This API returns the details of an org's lockout auth configuration.
        + Requires security scope of: 'sp:auth-org:create' + requestBody: + required: true + description: >- + Lockout configuration creation request body.
        +
        + The following constraints ensure the request body conforms to certain logical guidelines, which are: + 1. maximumAttempts >= 1 && maximumAttempts <= 15 + 2. lockoutDuration >= 5 && lockoutDuration <= 60 + 3. lockoutWindow >= 5 && lockoutDuration <= 60 + content: + application/json: + schema: + $ref: '../schemas/LockoutConfiguration.yaml' + responses: + '200': + description: Lockout configuration for the tenant. + content: + application/json: + schema: + $ref: '../schemas/LockoutConfiguration.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + # security: + # - bearerAuth: + # - 'sp:auth-org:create' +patch: + operationId: patchAuthOrgLockoutConfig + tags: + - Auth Org Configuration + summary: Update the org's auth org lockout configuration + description: >- + This API updates an existing lockout configuration for an org using PATCH
        + Requires security scope of: 'sp:auth-org:update' + requestBody: + required: true + description: >- + A list of auth org lockout configuration update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.
        +
        + Ensures that the patched Lockout Config conforms to certain logical guidelines, which are: + 1. maximumAttempts >= 1 && maximumAttempts <= 15 + 2. lockoutDuration >= 5 && lockoutDuration <= 60 + 3. lockoutWindow >= 5 && lockoutDuration <= 60 + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + example: + - op: "replace" + path: "/maximumAttempts" + value: 7, + - op: "add" + path: "/lockoutDuration" + value: 35 + responses: + '200': + description: Updated Auth Org lockout configuration. + content: + application/json: + schema: + $ref: '../schemas/LockoutConfiguration.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + # security: + # - bearerAuth: + # - 'sp:auth-org:update' diff --git a/static/idn-api/beta/paths/auth-org-network-config.yaml b/static/idn-api/beta/paths/auth-org-network-config.yaml new file mode 100644 index 000000000..2bdbc73be --- /dev/null +++ b/static/idn-api/beta/paths/auth-org-network-config.yaml @@ -0,0 +1,115 @@ +get: + operationId: getAuthOrgNetworkConfig + tags: + - Auth Org Configuration + summary: Get the org's auth org network configuration. + description: >- + This API returns the details of an org's network auth configuration.
        + Requires security scope of: 'sp:auth-org:read' + responses: + '200': + description: Network configuration for the tenant's auth org. + content: + application/json: + schema: + $ref: '../schemas/NetworkConfiguration.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + # security: + # - bearerAuth: + # - 'sp:auth-org:read' +post: + operationId: createAuthOrgNetworkConfig + tags: + - Auth Org Configuration + summary: Create the org's auth org network configuration. + description: >- + This API returns the details of an org's network auth configuration.
        + Requires security scope of: 'sp:auth-org:create' + requestBody: + required: true + description: >- + Network configuration creation request body.
        +
        + The following constraints ensure the request body conforms to certain logical guidelines, which are: + 1. Each string element in the range array must be a valid ip address or ip subnet mask. + 2. Each string element in the geolocation array must be 2 characters, and they can only be uppercase letters. + content: + application/json: + schema: + $ref: '../schemas/NetworkConfiguration.yaml' + responses: + '200': + description: Network configuration for the tenant. + content: + application/json: + schema: + $ref: '../schemas/NetworkConfiguration.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + # security: + # - bearerAuth: + # - 'sp:auth-org:create' +patch: + operationId: patchAuthOrgNetworkConfig + tags: + - Auth Org Configuration + summary: Update the org's auth org network configuration + description: >- + This API updates an existing network configuration for an org using PATCH
        + Requires security scope of: 'sp:auth-org:update' + requestBody: + required: true + description: >- + A list of auth org network configuration update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.
        +
        + Ensures that the patched Network Config conforms to certain logical guidelines, which are: + 1. Each string element in the range array must be a valid ip address or ip subnet mask. + 2. Each string element in the geolocation array must be 2 characters, and they can only be uppercase letters. + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + example: + - op: "replace" + path: "/whitelisted" + value: false, + - op: "add" + path: "/geolocation" + value: ["AF", "HN", "ES"] + responses: + '200': + description: Updated Auth Org network configuration. + content: + application/json: + schema: + $ref: '../schemas/NetworkConfiguration.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + # security: + # - bearerAuth: + # - 'sp:auth-org:update' diff --git a/static/idn-api/beta/paths/auth-org-service-provider-config.yaml b/static/idn-api/beta/paths/auth-org-service-provider-config.yaml new file mode 100644 index 000000000..3a4738029 --- /dev/null +++ b/static/idn-api/beta/paths/auth-org-service-provider-config.yaml @@ -0,0 +1,125 @@ +get: + operationId: getAuthOrgServiceProviderConfig + tags: + - Auth Org Configuration + summary: Get Service Provider Configuration. + description: >- + This API returns the details of an org's service provider auth configuration.
        + Requires security scope of: 'sp:auth-org:read' + responses: + '200': + description: Service provider configuration for the tenant. + content: + application/json: + schema: + $ref: '../schemas/ServiceProviderConfiguration.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + # security: + # - bearerAuth: + # - 'sp:auth-org:read' +patch: + operationId: patchAuthOrgServiceProviderConfig + tags: + - Auth Org Configuration + summary: Update Service Provider Configuration + description: >- + This API updates an existing service provider configuration for an org using PATCH.
        + Requires security scope of: 'sp:auth-org:update' + requestBody: + required: true + description: >- + A list of auth org service provider configuration update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.
        +
        + Note:
        + /federationProtocolDetails/0 is IdpDetails
        + /federationProtocolDetails/1 is SpDetails
        +
        + Ensures that the patched ServiceProviderConfig conforms to certain logical guidelines, which are: + 1. Do not add or remove any elements in the federation protocol details in the service provider configuration. + 2. Do not modify, add, or delete the service provider details element in the federation protocol details. + 3. If this is the first time the patched ServiceProviderConfig enables Remote IDP sign-in, it must also include IDPDetails. + 4. If the patch enables Remote IDP sign in, the entityID in the IDPDetails cannot be null. IDPDetails must include an entityID. + 5. Any JIT configuration update must be valid. + + Just in time configuration update must be valid when enabled. This includes: + - A Source ID + - Source attribute mappings + - Source attribute maps have all the required key values (firstName, lastName, email) + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + example: + - op: "replace" + path: "/enabled" + value: true, + - op: "add" + path: "/federationProtocolDetails/0/jitConfiguration" + value: { + "enabled": true, + "sourceId": "2c9180857377ed2901739c12a2da5ac8", + "sourceAttributeMappings": { + "firstName": "okta.firstName", + "lastName": "okta.lastName", + "email": "okta.email", + "employeeNumber": "okta.employeeNumber" + } + } + responses: + '200': + description: Auth Org Service Provider configuration updated. + content: + application/json: + schema: + $ref: '../schemas/ServiceProviderConfiguration.yaml' + '400': + description: Client Error - Returned if the request body is invalid. + content: + application/json: + schema: + $ref: '../../v3/schemas/ErrorResponseDto.yaml' + examples: + 400.1 Bad Request Content: + description: Response for bad request content + value: + detailCode: 400.1 Bad Request Content + trackingId: e7eab60924f64aa284175b9fa3309599 + messages: + - locale: en + localeOrigin: REQUEST + text: firstName is required; accountName is required; + 400.1.3 Illegal value: + description: Response for Illegal value + value: + detailCode: 400.1.3 Illegal value + trackingId: e7eab60924f64aa284175b9fa3309599 + messages: + - locale: en + localeOrigin: REQUEST + text: JIT source id is invalid. + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + # security: + # - bearerAuth: + # - 'sp:auth-org:update' diff --git a/static/idn-api/beta/paths/auth-org-session-config.yaml b/static/idn-api/beta/paths/auth-org-session-config.yaml new file mode 100644 index 000000000..ce698f59c --- /dev/null +++ b/static/idn-api/beta/paths/auth-org-session-config.yaml @@ -0,0 +1,117 @@ +get: + operationId: getAuthOrgSessionConfig + tags: + - Auth Org Configuration + summary: Get the org's auth org session configuration. + description: >- + This API returns the details of an org's session auth configuration.
        + Requires security scope of: 'sp:auth-org:read' + responses: + '200': + description: Session configuration for the tenant's auth org. + content: + application/json: + schema: + $ref: '../schemas/SessionConfiguration.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + # security: + # - bearerAuth: + # - 'sp:auth-org:read' +post: + operationId: createAuthOrgSessionConfig + tags: + - Auth Org Configuration + summary: Create the org's auth org session configuration. + description: >- + This API returns the details of an org's session auth configuration.
        + Requires security scope of: 'sp:auth-org:create' + requestBody: + required: true + description: >- + Session configuration creation request body.
        +
        + The following constraints ensure the request body conforms to certain logical guidelines, which are: + 1. maxSessionTime >= 1 && maxSessionTime <= 10080 (1 week) + 2. maxIdleTime >= 1 && maxIdleTime <= 1440 (1 day) + 3. maxSessionTime must have a greater duration than maxIdleTime. + content: + application/json: + schema: + $ref: '../schemas/SessionConfiguration.yaml' + responses: + '200': + description: Session configuration for the tenant. + content: + application/json: + schema: + $ref: '../schemas/SessionConfiguration.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + # security: + # - bearerAuth: + # - 'sp:auth-org:create' +patch: + operationId: patchAuthOrgSessionConfig + tags: + - Auth Org Configuration + summary: Update the org's auth org session configuration + description: >- + This API updates an existing session configuration for an org using PATCH
        + Requires security scope of: 'sp:auth-org:update' + requestBody: + required: true + description: >- + A list of auth org session configuration update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.
        +
        + Ensures that the patched Session Config conforms to certain logical guidelines, which are: + 1. maxSessionTime >= 1 && maxSessionTime <= 10080 (1 week) + 2. maxIdleTime >= 1 && maxIdleTime <= 1440 (1 day) + 3. maxSessionTime must have a greater duration than maxIdleTime. + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + example: + - op: "replace" + path: "/rememberMe" + value: true, + - op: "add" + path: "/maxSessionTime" + value: 480 + responses: + '200': + description: Updated Auth Org session configuration. + content: + application/json: + schema: + $ref: '../schemas/SessionConfiguration.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + # security: + # - bearerAuth: + # - 'sp:auth-org:update' diff --git a/static/idn-api/beta/paths/auth-user-password.yaml b/static/idn-api/beta/paths/auth-user-password.yaml new file mode 100644 index 000000000..de9ffd1bc --- /dev/null +++ b/static/idn-api/beta/paths/auth-user-password.yaml @@ -0,0 +1,46 @@ +post: + operationId: updateAuthUserPassword + tags: + - Auth User + summary: Auth User Password Update + description: Update a password of existing user in the authentication system by overwriting the password with new password. + # security: + # - bearerAuth: + # - 'sp:auth-user-password:update' + parameters: + - in: path + name: id + description: >- + Identity ID + required: true + schema: + type: string + requestBody: + required: true + description: | + Auth User Password Update Request. This overwrites the existing user password in the authentication system. + + Requires security scope of 'sp:auth-user-password:update' + content: + application/json: + schema: + $ref: '../schemas/PasswordUpdateRequest.yaml' + responses: + '200': + description: Auth user updated. + content: + application/json: + schema: + $ref: '../schemas/AuthUser.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/auth-user.yaml b/static/idn-api/beta/paths/auth-user.yaml new file mode 100644 index 000000000..d7aaf348a --- /dev/null +++ b/static/idn-api/beta/paths/auth-user.yaml @@ -0,0 +1,184 @@ +get: + operationId: getAuthUser + tags: + - Auth User + summary: Auth User Details + description: >- + This API returns the specified user's authentication system details. + + Requires security scope of: 'sp:auth-user:read' + parameters: + - in: path + name: id + description: >- + Identity ID + required: true + schema: + type: string + example: ef38f94347e94562b5bb8424a56397d8 +# security: +# - bearerAuth: +# - 'sp:auth-user:read' + responses: + '200': + description: The specified user's authentication system details. + content: + application/json: + schema: + $ref: '../schemas/AuthUser.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + +patch: + operationId: patchAuthUser + tags: + - Auth User + summary: Auth User Update - PATCH + description: Update an existing user in the authentication system with a PATCH request. +# security: +# - bearerAuth: +# - 'sp:auth-user:update' + parameters: + - in: path + name: id + description: >- + Identity ID + required: true + schema: + type: string + requestBody: + required: true + description: | + A list of auth user update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + + PATCH can only be applied to the following fields: + * "capabilities" + + A list of valid capabilities can be found using the GET ams/v3/authorization/authorization-capabilities/ endpoint. + Capabilities can only be patched if they are administrator assignable, as indicated by the 'adminAssignable' field from the output of list authorization-capabilities. + Capabilities that have a legacy group ('legacyGroup' field) need to be patched using the legacyGroup name (e.g. 'ORG_ADMIN'). + Capabilities that are adminAssignable but do not have a legacyGroup can be patched using the ams id (e.g. 'cam:new-role'). + + A 400.1.1 Illegal update attempt detail code indicates that you attempted to PATCH a field that is not allowed. + + Requires security scope of 'sp:auth-user:update' + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + example: + - op: "replace" + path: "/capabilities" + value: ["ORG_ADMIN"] + responses: + '200': + description: Auth user updated. + content: + application/json: + schema: + $ref: '../schemas/AuthUser.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + +put: + operationId: updateAuthUser + tags: + - Auth User + summary: Auth User Update - Overwrite + description: Update an existing user in the authentication system by over overwriting the information with new information. + # security: + # - bearerAuth: + # - 'sp:auth-user:update' + parameters: + - in: path + name: id + description: >- + Identity ID + required: true + schema: + type: string + requestBody: + required: true + description: | + Auth User Save Request. This overwrites the existing user details in the authentication system. + + Requires security scope of 'sp:auth-user:update' + content: + application/json: + schema: + $ref: '../schemas/AuthUserSaveRequest.yaml' + responses: + '200': + description: Auth user updated. + content: + application/json: + schema: + $ref: '../schemas/AuthUser.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + +delete: + operationId: deleteAuthUser + tags: + - Auth User + summary: Delete an Auth User + description: Delete an existing user in the authentication system. + # security: + # - bearerAuth: + # - 'sp:auth-user:delete' + parameters: + - in: path + name: id + description: >- + Identity ID + required: true + schema: + type: string + responses: + '204': + $ref: '../../v3/responses/204.yaml' + description: The user was successfully deleted from the authentication system. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/auth.yaml b/static/idn-api/beta/paths/auth.yaml new file mode 100644 index 000000000..805cb246d --- /dev/null +++ b/static/idn-api/beta/paths/auth.yaml @@ -0,0 +1,27 @@ +post: + operationId: forgot-username + tags: + - Forgot Username + summary: Retrieve Forgotten Username + description: This API sends an email to allow a user to retrieve a forgotten username when a valid email address associated with a valid account is provided. + requestBody: + required: true + description: | + Forgotten username request. The username is sent by email to the provided address if the the mail is valid for the organization. + + A token with anonymous authority can call this API. + content: + application/json: + schema: + $ref: '../schemas/ForgotUsernameRequest.yaml' + responses: + '202': + description: Accepted is always returned for a successfully formatted request, even if the email address is not + valid for the username. If the email address is valid, matches the username, and the username is enabled, a + notification is sent. + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/authmfa/confirm-registration.yaml b/static/idn-api/beta/paths/authmfa/confirm-registration.yaml new file mode 100644 index 000000000..e12e274b4 --- /dev/null +++ b/static/idn-api/beta/paths/authmfa/confirm-registration.yaml @@ -0,0 +1,37 @@ +post: + operationId: authMfaConfirmRegistration + tags: + - Auth MFA + summary: Confirm a user's registration for MFA + description: >- + For a user who is not currently registered for MFA and who has just scanned the QR code containing the TOTP URL provided by the /generate-secret
        + endpoint, confirms registration for MFA by validating a new TOTP code generated by the authenticator used to scan the QR code containing the TOTP URL.
        +
        + Request requires a unique header as proof of partial authentication. This header is called 'slpt-auth-mfa', and it must contain a special
        + MFA token for calling this endpoint.
        +
        + While no specific right is required for a user to confirm registration, it is expected that the caller first make a request to the /generate-secret
        + endpoint so that a TOTP secret exists as a basis for registration confirmation. It is also assumed that the caller has previously verified that the user is
        + associated with an auth profile that has MFA enabled. + requestBody: + description: Request body containing TOTP code to validate. + required: true + content: + application/json: + schema: + $ref: '../../schemas/TotpCodeRequest.yaml' + responses: + '200': + description: Response indicating that the user's MFA has been verified. + content: + application/json: + schema: + $ref: '../../schemas/MfaVerificationResponse.yaml' + '400': + $ref: '../../../v3/responses/400.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '429': + $ref: '../../../v3/responses/429.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/authmfa/generate-mfa-token.yaml b/static/idn-api/beta/paths/authmfa/generate-mfa-token.yaml new file mode 100644 index 000000000..9ea9f4be7 --- /dev/null +++ b/static/idn-api/beta/paths/authmfa/generate-mfa-token.yaml @@ -0,0 +1,44 @@ +post: + operationId: authMfaGenerateMfaToken + tags: + - Auth MFA + summary: Generate a special token for calling sp-mfa /totp/** APIs + description: >- + Generates an MFA token and establishes an unverified MFA-on-login context state.
        + Callable by either an internal service or an authenticated user.
        +
        + When called by an internal service, the calling service must present the target user's external id as the requestedFor value.
        +
        + When called by an authenticated user, the proxying service must present "me" as the the requestedFor value.
        +
        + The following rights are required to access this endpoint: sp:mfa-token-all:create, sp:mfa-token-self:create
        +
        + If an external id is presented as the request body's requestedFor value, the caller must possess the sp:mfa-token-all:create right.
        +
        + This implies that an internal service is obtaining an MFA token on behalf of a user. + requestBody: + description: Request body containing requestedFor value. + required: true + content: + application/json: + schema: + $ref: '../../schemas/GetMfaTokenRequest.yaml' + responses: + '200': + description: Response containing an MFA Token. + content: + application/json: + schema: + $ref: '../../schemas/GetMfaTokenResponse.yaml' + '400': + $ref: '../../../v3/responses/400.yaml' + '401': + $ref: '../../../v3/responses/401.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '404': + $ref: '../../../v3/responses/404.yaml' + '429': + $ref: '../../../v3/responses/429.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/authmfa/generate-secret.yaml b/static/idn-api/beta/paths/authmfa/generate-secret.yaml new file mode 100644 index 000000000..80c78fffd --- /dev/null +++ b/static/idn-api/beta/paths/authmfa/generate-secret.yaml @@ -0,0 +1,28 @@ +post: + operationId: authMfaGenerateSecret + tags: + - Auth MFA + summary: Generate a TOTP secret embedded within a TOTP link for use with an authenticator + description: >- + For a user who is not currently registered for MFA, generates a secret to share with the user's chosen authenticator app.
        +
        + Request requires a unique header as proof of partial authentication called 'slpt-auth-mfa', and it must contain a special
        + MFA token for calling this endpoint.
        +
        + While no specific right is required for a user to generate a secret, it is expected that the caller first verify that
        + the user is associated with an auth profile that has MFA enabled.
        + responses: + '200': + description: Response containing user's username, a newly-generated secret, and a TOTP link for a QR code generator to use. + content: + application/json: + schema: + $ref: '../../schemas/GetSecretResponse.yaml' + '400': + $ref: '../../../v3/responses/400.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '429': + $ref: '../../../v3/responses/429.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/authmfa/mfa-registration-reset.yaml b/static/idn-api/beta/paths/authmfa/mfa-registration-reset.yaml new file mode 100644 index 000000000..33a99f6e7 --- /dev/null +++ b/static/idn-api/beta/paths/authmfa/mfa-registration-reset.yaml @@ -0,0 +1,40 @@ +post: + operationId: authMfaRegistrationReset + tags: + - Auth MFA + summary: Disable a user's registration for MFA + description: >- + Disables a user's registration for MFA. The specified user is tied to the `requestedFor` body param and can either be an external id,
        + when resetting the registration on someone else's behalf, or "me", when resetting the registration for one's self.
        +
        + Either of The following rights is necessary to access this endpoint:
        +
          +
        • sp:mfa-login-registration-reset-all:execute
        • +
        • sp:mfa-login-registration-reset-self:execute
        • +
        +
        + The first right allows someone else or a system to reset a user's registration for MFA. The second right allows the user to reset his or her own registration for MFA. + requestBody: + description: MFA registration reset request body. + required: true + content: + application/json: + schema: + $ref: '../../schemas/MfaResetRequest.yaml' + responses: + '200': + description: Response indicating that the user is registered for MFA. + content: + application/json: + schema: + $ref: '../../schemas/MfaRegistrationResponse.yaml' + '400': + $ref: '../../../v3/responses/400.yaml' + '401': + $ref: '../../../v3/responses/401.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '429': + $ref: '../../../v3/responses/429.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/authmfa/registration-status.yaml b/static/idn-api/beta/paths/authmfa/registration-status.yaml new file mode 100644 index 000000000..5a89d4911 --- /dev/null +++ b/static/idn-api/beta/paths/authmfa/registration-status.yaml @@ -0,0 +1,34 @@ +get: + operationId: authMfaRegistrationStatus + tags: + - Auth MFA + summary: Determine whether the user is registered for MFA + description: >- + Gives the caller an indication of whether or not the user associated with the externalId path param is registered for MFA.
        +
        + The following right is necessary to access this endpoint: sp:mfa-login-registration:read.
        +
        + It is also assumed that the caller has previously verified that the user is associated with an auth profile that has MFA enabled. + parameters: + - in: path + name: externalId + schema: + type: string + required: true + description: The user's external ID + example: 2c9180867b50d088017b554662fb281e + responses: + '200': + description: Response indicating that the user is registered for MFA. + content: + application/json: + schema: + $ref: '../../schemas/MfaRegistrationResponse.yaml' + '401': + $ref: '../../../v3/responses/401.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '429': + $ref: '../../../v3/responses/429.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/authmfa/verify-code.yaml b/static/idn-api/beta/paths/authmfa/verify-code.yaml new file mode 100644 index 000000000..3d5229e4a --- /dev/null +++ b/static/idn-api/beta/paths/authmfa/verify-code.yaml @@ -0,0 +1,35 @@ +post: + operationId: authMfaVerifyCode + tags: + - Auth MFA + summary: Validate a TOTP code generated by a user's authenticator + description: >- + For a user who is registered for MFA, validates a TOTP code generated by the user's authenticator.
        +
        + Request requires a unique header as proof of partial authentication. This header is called 'slpt-auth-mfa', and it must contain a special
        + MFA token for calling this endpoint.
        +
        + While no specific right is required for a user to have a TOTP code verified, it is assumed that the caller has previously verified that the user is
        + associated with an auth profile that has MFA enabled and that the user has already registered an authenticator for multi-factor authentication. + requestBody: + description: Request body containing TOTP code to validate. + required: true + content: + application/json: + schema: + $ref: '../../schemas/TotpCodeRequest.yaml' + responses: + '200': + description: Response indicating that the user's MFA has been verified. + content: + application/json: + schema: + $ref: '../../schemas/MfaVerificationResponse.yaml' + '400': + $ref: '../../../v3/responses/400.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '429': + $ref: '../../../v3/responses/429.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/authorization-capabilities.yaml b/static/idn-api/beta/paths/authorization-capabilities.yaml new file mode 100644 index 000000000..40d333bf3 --- /dev/null +++ b/static/idn-api/beta/paths/authorization-capabilities.yaml @@ -0,0 +1,33 @@ +get: + operationId: listAuthoriztionCapabilities + # security: + # - bearerAuth: + # - 'idn:authorization-model:read' + tags: + - Authorization Model + summary: List Authorization Model Capabilities + description: >- + This API returns the list of capabilities from the Authorization Model Service. + + Request will require the following security scope: + + - 'idn:authorization-model:read' + responses: + '200': + description: List of Capabilities + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/AmsCapability.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/bulk-add-tagged-objects.yaml b/static/idn-api/beta/paths/bulk-add-tagged-objects.yaml new file mode 100644 index 000000000..28408a6a2 --- /dev/null +++ b/static/idn-api/beta/paths/bulk-add-tagged-objects.yaml @@ -0,0 +1,35 @@ +post: + operationId: addTagsToManyObjects + tags: + - Tagged Objects + summary: Tag Multiple Objects + description: >- + This API adds tags to multiple objects. + + + A token with API, CERT_ADMIN, ORG_ADMIN, REPORT_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN + authority is required to call this API. + requestBody: + required: true + description: Supported object types are ROLE, IDENTITY and SOD_POLICY. + content: + application/json: + schema: + $ref: '../schemas/BulkTaggedObject.yaml' + responses: + '200': + description: Request succeeded. + content: + application/json: + schema: + $ref: '../schemas/BulkTaggedObject.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/bulk-remove-tagged-objects.yaml b/static/idn-api/beta/paths/bulk-remove-tagged-objects.yaml new file mode 100644 index 000000000..7da98e246 --- /dev/null +++ b/static/idn-api/beta/paths/bulk-remove-tagged-objects.yaml @@ -0,0 +1,31 @@ +post: + operationId: removeTagsToManyObject + tags: + - Tagged Objects + summary: Remove Tags from Multiple Objects + description: >- + This API removes tags from multiple objects. + + + A token with API, CERT_ADMIN, ORG_ADMIN, REPORT_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN + authority is required to call this API. + requestBody: + description: Supported object types are ROLE, IDENTITY and SOD_POLICY. + required: true + content: + application/json: + schema: + $ref: '../schemas/BulkTaggedObject.yaml' + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/bulk-update-auth-user.yaml b/static/idn-api/beta/paths/bulk-update-auth-user.yaml new file mode 100644 index 000000000..f1954a464 --- /dev/null +++ b/static/idn-api/beta/paths/bulk-update-auth-user.yaml @@ -0,0 +1,50 @@ +post: + operationId: bulkUpdateAuthUser + tags: + - Auth User + summary: Auth User Bulk Update + description: Update up to 25 existing auth users in a batch. + # security: + # - bearerAuth: + # - 'sp:auth-user:update' + requestBody: + required: true + description: | + A list of auth user update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + + PATCH can only be applied to the following fields: + * "capabilities" + + A list of valid capabilities can be found using the GET ams/v3/authorization/authorization-capabilities/ endpoint. + Capabilities can only be patched if they are administrator assignable, as indicated by the 'adminAssignable' field from the output of list authorization-capabilities. + Capabilities that have a legacy group ('legacyGroup' field) need to be patched using the legacyGroup name (e.g. 'ORG_ADMIN'). + Capabilities that are adminAssignable but do not have a legacyGroup can be patched using the ams id (e.g. 'cam:new-role'). + + A 400.1.1 Illegal update attempt detail code indicates that you attempted to PATCH a field that is not allowed. + + Requires security scope of 'sp:auth-user:update' + content: + application/json: + schema: + $ref: '../schemas/BulkUpdateAuthUser.yaml' + responses: + '200': + description: All Auth users successfully updated. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/AuthUser.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/campaign-activate.yaml b/static/idn-api/beta/paths/campaign-activate.yaml new file mode 100644 index 000000000..7afe7c6f3 --- /dev/null +++ b/static/idn-api/beta/paths/campaign-activate.yaml @@ -0,0 +1,47 @@ +post: + operationId: activateCampaign + tags: + - Certification Campaigns + summary: Activate a Campaign + description: >- + Submits a job to activate the campaign with the given Id. The campaign must be staged. + + Requires roles of CERT_ADMIN and ORG_ADMIN + # security: + # - bearerAuth: + # - CERT_ADMIN + # - ORG_ADMIN + requestBody: + description: + Optional. If no timezone is specified, the standard UTC timezone is used (i.e. UTC+00:00). + Although this can take any timezone, the intended value is the caller's timezone. The activation time + calculated from the given timezone may cause the campaign deadline time to be modified, but it will remain + within the original date. The timezone must be in a valid ISO 8601 format. + required: false + content: + application/json: + schema: + $ref: '../schemas/ActivateCampaignOptions.yaml' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The campaign id + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '202': + $ref: '../../v3/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/campaign-admin-cert-reassign.yaml b/static/idn-api/beta/paths/campaign-admin-cert-reassign.yaml new file mode 100644 index 000000000..af3473848 --- /dev/null +++ b/static/idn-api/beta/paths/campaign-admin-cert-reassign.yaml @@ -0,0 +1,49 @@ +post: + operationId: adminReassign + tags: + - Certification Campaigns + summary: Reassign Certifications + description: >- + This API reassigns the specified certifications from one identity to another. A token with ORG_ADMIN or CERT_ADMIN + authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The certification campaign ID + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/AdminReviewReassign.yaml' + responses: + '202': + description: The reassign task that has been submitted. + content: + application/json: + schema: + $ref: '../schemas/CertificationTask.yaml' + example: + id: 2c918086719eec070171a7e3355a360a + type: ADMIN_REASSIGN + targetType: CAMPAIGN + targetId: 2c918086719eec070171a7e3355a834c + status: QUEUED + errors: [] + created: '2020-09-24T18:10:47.693Z' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/campaign-complete.yaml b/static/idn-api/beta/paths/campaign-complete.yaml new file mode 100644 index 000000000..08670eae4 --- /dev/null +++ b/static/idn-api/beta/paths/campaign-complete.yaml @@ -0,0 +1,46 @@ +post: + operationId: completeCampaign + tags: + - Certification Campaigns + summary: Complete a Campaign + description: >- + Completes a certification campaign only if it is past the due date. This is provided to admins so that they + can complete a certification even if all items have not been completed. + + Requires roles of CERT_ADMIN and ORG_ADMIN + # security: + # - bearerAuth: + # - CERT_ADMIN + # - ORG_ADMIN + requestBody: + description: + Optional. Default behavior is for the campaign to auto-approve upon completion, + unless autoCompleteAction=REVOKE + required: false + content: + application/json: + schema: + $ref: '../schemas/CompleteCampaignOptions.yaml' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The campaign id + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '202': + $ref: '../../v3/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/campaign-reports-configuration.yaml b/static/idn-api/beta/paths/campaign-reports-configuration.yaml new file mode 100644 index 000000000..cf4806ec9 --- /dev/null +++ b/static/idn-api/beta/paths/campaign-reports-configuration.yaml @@ -0,0 +1,67 @@ +get: + operationId: getCampaignReportsConfig + tags: + - Certification Campaigns + summary: Get Campaign Reports Configuration + description: >- + Fetches configuration for campaign reports. Currently it includes only one element - identity attributes defined as custom report columns. + + Requires roles of CERT_ADMIN and ORG_ADMIN. + + # security: + # - bearerAuth: + # - CERT_ADMIN + # - ORG_ADMIN + responses: + '200': + description: Campaign Report Configuration + content: + application/json: + schema: + $ref: '../schemas/CampaignReportsConfig.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +put: + operationId: setCampaignReportsConfig + tags: + - Certification Campaigns + summary: Set Campaign Reports Configuration + description: >- + Overwrites configuration for campaign reports. + + Requires roles CERT_ADMIN and ORG_ADMIN. + + # security: + # - bearerAuth: + # - CERT_ADMIN + # - ORG_ADMIN + requestBody: + required: true + description: Campaign Report Configuration + content: + application/json: + schema: + $ref: '../schemas/CampaignReportsConfig.yaml' + responses: + '200': + description: The persisted Campaign Report Configuration + content: + application/json: + schema: + $ref: '../schemas/CampaignReportsConfig.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/campaign-reports.yaml b/static/idn-api/beta/paths/campaign-reports.yaml new file mode 100644 index 000000000..7d39a5094 --- /dev/null +++ b/static/idn-api/beta/paths/campaign-reports.yaml @@ -0,0 +1,42 @@ +get: + operationId: getCampaignReports + tags: + - Certification Campaigns + summary: Get Campaign Reports + description: >- + Fetches all reports for a certification campaign by campaign ID. + + Requires roles of CERT_ADMIN, DASHBOARD, ORG_ADMIN and REPORT_ADMIN + # security: + # - bearerAuth: + # - CERT_ADMIN + # - DASHBOARD + # - ORG_ADMIN + # - REPORT_ADMIN + parameters: + - in: path + name: id + schema: + type: string + example: 2c91808571bcfcf80171c23e4b4221fc + required: true + description: The ID of the campaign for which reports are being fetched. + responses: + '200': + description: Array of campaign report objects. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/CampaignReport.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/campaign-run-remediation-scan.yaml b/static/idn-api/beta/paths/campaign-run-remediation-scan.yaml new file mode 100644 index 000000000..4c0f6bc4a --- /dev/null +++ b/static/idn-api/beta/paths/campaign-run-remediation-scan.yaml @@ -0,0 +1,36 @@ +post: + operationId: runCampaignRemediationScan + tags: + - Certification Campaigns + summary: Run Campaign Remediation Scan + description: >- + Kicks off remediation scan task for a certification campaign. + + Requires roles of CERT_ADMIN and ORG_ADMIN + # security: + # - bearerAuth: + # - CERT_ADMIN + # - ORG_ADMIN + parameters: + - in: path + name: id + schema: + type: string + example: 2c91808571bcfcf80171c23e4b4221fc + required: true + description: The ID of the campaign for which remediation scan is being run. + responses: + '202': + $ref: '../../v3/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/campaign-run-report.yaml b/static/idn-api/beta/paths/campaign-run-report.yaml new file mode 100644 index 000000000..fb2fd7d87 --- /dev/null +++ b/static/idn-api/beta/paths/campaign-run-report.yaml @@ -0,0 +1,45 @@ +post: + operationId: runCampaignReport + tags: + - Certification Campaigns + summary: Run Campaign Report + description: >- + Runs a report for a certification campaign. + + Requires the following roles: CERT_ADMIN, DASHBOARD, ORG_ADMIN and REPORT_ADMIN. + + # security: + # - bearerAuth: + # - CERT_ADMIN + # - DASHBOARD + # - ORG_ADMIN + # - REPORT_ADMIN + parameters: + - in: path + name: id + schema: + type: string + example: 2c91808571bcfcf80171c23e4b4221fc + required: true + description: The ID of the campaign for which report is being run. + - in: path + name: type + schema: + $ref: '../schemas/ReportType.yaml' + required: true + description: The type of the report to run. + responses: + '202': + $ref: '../../v3/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/campaign-template-generate.yaml b/static/idn-api/beta/paths/campaign-template-generate.yaml new file mode 100644 index 000000000..eb1952540 --- /dev/null +++ b/static/idn-api/beta/paths/campaign-template-generate.yaml @@ -0,0 +1,48 @@ +post: + operationId: generateCampaignTemplate + tags: + - Certification Campaigns + summary: Generate a Campaign from Template + # security: + # - bearerAuth: + # - ORG_ADMIN + description: >- + Generates a new campaign from a campaign template. + + The campaign object contained in the template has special formatting applied to its name and description + fields in order to determine the generated campaign's name/description. Placeholders in those fields are + formatted with the current date and time upon generation. + + Placeholders consist of a percent sign followed by a letter indicating what should be inserted; for + example, "%Y" will insert the current year; a campaign template named "Campaign for %y" would generate a + campaign called "Campaign for 2020" (assuming the year at generation time is 2020). + + Valid placeholders are the date/time conversion suffix characters supported by [java.util.Formatter](https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html). + + Requires roles ORG_ADMIN. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the campaign template to use for generation. + responses: + '200': + description: >- + Indicates a campaign was successfully generated from this template, and returns a reference to the + new campaign. + content: + application/json: + schema: + $ref: '../../v3/schemas/CampaignReference.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/campaign-template-schedule.yaml b/static/idn-api/beta/paths/campaign-template-schedule.yaml new file mode 100644 index 000000000..105275586 --- /dev/null +++ b/static/idn-api/beta/paths/campaign-template-schedule.yaml @@ -0,0 +1,162 @@ +get: + operationId: getCampaignTemplateSchedule + tags: + - Certification Campaigns + summary: Gets a Campaign Template's Schedule + description: >- + Gets the schedule for a campaign template. Returns a 404 if there is no schedule set. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the campaign template whose schedule is being fetched. + responses: + '200': + description: >- + The current schedule for the campaign template. See the PUT endpoint documentation for + more examples. + content: + application/json: + schema: + $ref: '../schemas/Schedule.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +put: + operationId: setCampaignTemplateSchedule + tags: + - Certification Campaigns + summary: Sets a Campaign Template's Schedule + description: >- + Sets the schedule for a campaign template. If a schedule already exists, it will be overwritten with + the new one. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the campaign template being scheduled. + requestBody: + content: + application/json: + schema: + $ref: '../schemas/Schedule.yaml' + examples: + 'Monthly': + description: Runs on the 15th and last day of the month, at 5PM. + value: + type: MONTHLY + hours: + type: LIST + values: + - "17" + days: + type: LIST + values: + - "15" + 'Once a year': + description: Runs every January 1st at midnight. + value: + type: ANNUALLY + hours: + type: LIST + values: + - "0" + days: + type: LIST + values: + - "--01-01" + 'Quarterly': + description: Runs once a quarter (every 3 months) on the first of the month at 1AM. + value: + type: ANNUALLY + hours: + type: LIST + values: + - "1" + days: + type: LIST + values: + - "1" + months: + type: LIST + values: + - "1" + interval: 3 + 'Yearly on Specific Days': + description: Runs on March 12 and December 5 at 1AM, every year. + value: + type: ANNUALLY + hours: + type: LIST + values: + - "1" + days: + type: LIST + values: + - "--03-12" + - "--12-05" + 'On a Specific Date': + description: Runs at 1AM on February 18th, 2020 + value: + type: CALENDAR + hours: + type: LIST + values: + - "1" + days: + type: LIST + values: + - "2020-02-18" + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: deleteCampaignTemplateSchedule + tags: + - Certification Campaigns + summary: Deletes a Campaign Template's Schedule + description: >- + Deletes the schedule for a campaign template. Returns a 404 if there is no schedule set. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the campaign template whose schedule is being deleted. + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/campaign-template.yaml b/static/idn-api/beta/paths/campaign-template.yaml new file mode 100644 index 000000000..e2894efff --- /dev/null +++ b/static/idn-api/beta/paths/campaign-template.yaml @@ -0,0 +1,134 @@ +get: + operationId: getCampaignTemplate + tags: + - Certification Campaigns + summary: Get a Campaign Template + description: Fetches a campaign template by ID. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The desired campaign template's ID. + responses: + '200': + description: The data for the campaign matching the given ID. + content: + application/json: + schema: + $ref: '../schemas/CampaignTemplate.yaml' + examples: + Manager: + $ref: '../schemas/campaign/examples/CampaignTemplateManager.yaml' + Search: + $ref: '../schemas/campaign/examples/CampaignTemplateSearch.yaml' + Source Owner: + $ref: '../schemas/campaign/examples/CampaignTemplateSourceOwner.yaml' + RoleComposition: + $ref: '../schemas/campaign/examples/CampaignTemplateRoleComposition.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +patch: + operationId: patchCampaignTemplate + tags: + - Certification Campaigns + summary: Update a Campaign Template + description: Allows updating individual fields on a campaign template using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the campaign template being modified. + example: 2c9180835d191a86015d28455b4a2329 + requestBody: + required: true + description: | + A list of campaign update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + + The following fields are patchable: + * name + * description + * ownerRef + * deadlineDuration + * campaign (all fields that are allowed during create) + content: + application/json-patch+json: + schema: + type: array + items: + type: object + example: + - op: "replace" + path: "/description" + value: "Updated description!" + - op: "replace" + path: "/campaign/filter/id" + value: "ff80818155fe8c080155fe8d925b0316" + responses: + '200': + description: >- + Indicates the PATCH operation succeeded, and returns the template's new representation. + content: + application/json: + schema: + $ref: '../schemas/CampaignTemplate.yaml' + examples: + Manager: + $ref: '../schemas/campaign/examples/CampaignTemplateManager.yaml' + Search: + $ref: '../schemas/campaign/examples/CampaignTemplateSearch.yaml' + Source Owner: + $ref: '../schemas/campaign/examples/CampaignTemplateSourceOwner.yaml' + RoleComposition: + $ref: '../schemas/campaign/examples/CampaignTemplateRoleComposition.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: deleteCampaignTemplate + tags: + - Certification Campaigns + summary: Delete a Campaign Template + description: Deletes a campaign template by ID. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the campaign template being deleted. + example: 2c9180835d191a86015d28455b4a2329 + responses: + '204': + $ref: '../../v3/responses/204.yaml' + description: The Source was successfully deleted. + '404': + $ref: '../../v3/responses/404.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/campaign-templates.yaml b/static/idn-api/beta/paths/campaign-templates.yaml new file mode 100644 index 000000000..16f809f4d --- /dev/null +++ b/static/idn-api/beta/paths/campaign-templates.yaml @@ -0,0 +1,96 @@ +get: + operationId: listCampaignTemplates + tags: + - Certification Campaigns + summary: List Campaign Templates + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **name, created, modified** + - in: query + name: filters + schema: + type: string + format: comma-separated + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields: **name, id** + responses: + '200': + description: List of campaign template objects + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/CampaignTemplate.yaml' + example: + $ref: '../schemas/campaign/examples/CampaignTemplates.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +post: + operationId: createCampaignTemplate + tags: + - Certification Campaigns + summary: Create a Campaign Template + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/CampaignTemplate.yaml' + examples: + Manager: + $ref: '../schemas/campaign/examples/CreateCampaignTemplateManager.yaml' + Search: + $ref: '../schemas/campaign/examples/CreateCampaignTemplateSearch.yaml' + Source Owner: + $ref: '../schemas/campaign/examples/CreateCampaignTemplateSourceOwner.yaml' + RoleComposition: + $ref: '../schemas/campaign/examples/CreateCampaignTemplateRoleComposition.yaml' + responses: + '200': + description: Created successfully. + content: + application/json: + schema: + $ref: '../schemas/CampaignTemplate.yaml' + examples: + Manager: + $ref: '../schemas/campaign/examples/CampaignTemplateManager.yaml' + Search: + $ref: '../schemas/campaign/examples/CampaignTemplateSearch.yaml' + Source Owner: + $ref: '../schemas/campaign/examples/CampaignTemplateSourceOwner.yaml' + RoleComposition: + $ref: '../schemas/campaign/examples/CampaignTemplateRoleComposition.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/campaign.yaml b/static/idn-api/beta/paths/campaign.yaml new file mode 100644 index 000000000..ddc97ef2c --- /dev/null +++ b/static/idn-api/beta/paths/campaign.yaml @@ -0,0 +1,120 @@ +get: + operationId: getCampaign + tags: + - Certification Campaigns + summary: Get a campaign + description: >- + Retrieves information for an existing campaign using the campaign's ID. Authorized callers must be a + reviewer for this campaign, an ORG_ADMIN, or a CERT_ADMIN. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the campaign to be retrieved + example: 2c91808571bcfcf80171c23e4b4221fc + responses: + '200': + description: A campaign object + content: + application/json: + schema: + $ref: '../schemas/SlimCampaign.yaml' + examples: + Manager: + $ref: '../schemas/campaign/examples/SlimCampaignManager.yaml' + Search: + $ref: '../schemas/campaign/examples/SlimCampaignSearch.yaml' + Source Owner: + $ref: '../schemas/campaign/examples/SlimCampaignSourceOwner.yaml' + RoleComposition: + $ref: '../schemas/campaign/examples/SlimCampaignRoleComposition.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +patch: + operationId: updateCampaign + tags: + - Certification Campaigns + summary: Update a Campaign + description: Allows updating individual fields on a campaign using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + # security: + # - bearerAuth: + # - ORG_ADMIN + # - CERT_ADMIN + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the campaign template being modified. + example: 2c91808571bcfcf80171c23e4b4221fc + requestBody: + required: true + description: | + A list of campaign update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + The fields that can be patched differ based on the status of the campaign. + + In the *STAGED* status, the following fields can be patched: + * name + * description + * recommendationsEnabled + * deadline + * emailNotificationEnabled + * autoRevokeAllowed + + In the *ACTIVE* status, the following fields can be patched: + * deadline + content: + application/json-patch+json: + schema: + type: array + items: + type: object + example: + - op: "replace" + path: "/name" + value: "This field has been updated!" + - op: "copy" + from: "/name" + path: "/description" + responses: + '200': + description: >- + Indicates the PATCH operation succeeded, and returns the campaign's new representation. + content: + application/json: + schema: + $ref: '../schemas/SlimCampaign.yaml' + examples: + Manager: + $ref: '../schemas/campaign/examples/SlimCampaignManager.yaml' + Search: + $ref: '../schemas/campaign/examples/SlimCampaignSearch.yaml' + Source Owner: + $ref: '../schemas/campaign/examples/SlimCampaignSourceOwner.yaml' + RoleComposition: + $ref: '../schemas/campaign/examples/SlimCampaignRoleComposition.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/campaigns-delete.yaml b/static/idn-api/beta/paths/campaigns-delete.yaml new file mode 100644 index 000000000..bd3306c5b --- /dev/null +++ b/static/idn-api/beta/paths/campaigns-delete.yaml @@ -0,0 +1,35 @@ +post: + operationId: deleteCampaigns + tags: + - Certification Campaigns + summary: Deletes Campaigns + description: >- + Deletes campaigns whose Ids are specified in the provided list of campaign Ids. + Authorized callers must be an ORG_ADMIN or a CERT_ADMIN. +# security: +# - bearerAuth: +# - CERT_ADMIN +# - ORG_ADMIN + requestBody: + description: The ids of the campaigns to delete. + required: true + content: + application/json: + schema: + $ref: '../../beta/schemas/DeleteCampaignsRequest.yaml' + + responses: + '202': + $ref: '../../v3/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/campaigns.yaml b/static/idn-api/beta/paths/campaigns.yaml new file mode 100644 index 000000000..8075180f2 --- /dev/null +++ b/static/idn-api/beta/paths/campaigns.yaml @@ -0,0 +1,141 @@ +get: + operationId: getActiveCampaigns + tags: + - Certification Campaigns + summary: List Campaigns + description: >- + Gets campaigns and returns them in a list. Can provide increased level of detail for each campaign if provided + the correct query. + # security: + # - bearerAuth: + # - CERT_ADMIN + # - DASHBOARD + # - ORG_ADMIN + # - REPORT_ADMIN + # - ROLE_ADMIN + # - SOURCE_ADMIN + # - SOURCE_SUBADMIN + parameters: + - in: query + name: detail + schema: + type: string + enum: [SLIM, FULL] + required: false + description: >- + Determines whether slim, or increased level of detail is provided for each campaign in the returned list. + Slim is the default behavior. + example: FULL + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + required: false + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **name**: *eq, sw* + + + **status**: *eq, in* + example: name eq "Manager Campaign" + - in: query + name: sorters + schema: + type: string + format: comma-separated + required: false + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **name** + example: name + responses: + '200': + description: A list of campaign objects. + content: + application/json: + schema: + type: array + items: + oneOf: + - $ref: '../schemas/SlimCampaign.yaml' + - $ref: '../schemas/Campaign.yaml' + + examples: + Slim Campaign: + $ref: '../schemas/campaign/examples/SlimCampaigns.yaml' + Full Campaign: + $ref: '../schemas/campaign/examples/FullCampaigns.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +post: + operationId: createCampaign + tags: + - Certification Campaigns + summary: Create a campaign + description: Creates a new Certification Campaign with the information provided in the request body. + #security: + # - bearerAuth: + # - ORG_ADMIN + # - CERT_ADMIN + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/Campaign.yaml' + examples: + Manager: + $ref: '../schemas/campaign/examples/CreateCampaignManager.yaml' + Search: + $ref: '../schemas/campaign/examples/CreateCampaignSearch.yaml' + Source Owner: + $ref: '../schemas/campaign/examples/CreateCampaignSourceOwner.yaml' + Role Composition: + $ref: '../schemas/campaign/examples/CreateCampaignRoleComposition.yaml' + responses: + '200': + description: Indicates that the campaign requested was successfully created and returns its representation. + content: + application/json: + schema: + $ref: '../schemas/Campaign.yaml' + examples: + Manager: + $ref: '../schemas/campaign/examples/FullCampaignManager.yaml' + Search: + $ref: '../schemas/campaign/examples/FullCampaignSearch.yaml' + Source Owner: + $ref: '../schemas/campaign/examples/FullCampaignSourceOwner.yaml' + Role Composition: + $ref: '../schemas/campaign/examples/FullCampaignRoleComposition.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/certification-task.yaml b/static/idn-api/beta/paths/certification-task.yaml new file mode 100644 index 000000000..5e21e16fd --- /dev/null +++ b/static/idn-api/beta/paths/certification-task.yaml @@ -0,0 +1,36 @@ +get: + operationId: getCertificationTask + tags: + - Certifications + - Certification Campaigns + summary: Certification Task by ID + description: >- + This API returns the certification task for the specified ID. A token with ORG_ADMIN or CERT_ADMIN authority is + required to call this API. Reviewers for the specified certification can also call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The task ID + example: 63b32151-26c0-42f4-9299-8898dc1c9daa + responses: + '200': + description: A certification task + content: + application/json: + schema: + $ref: '../../beta/schemas/CertificationTask.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/certification-tasks.yaml b/static/idn-api/beta/paths/certification-tasks.yaml new file mode 100644 index 000000000..8c4d718ca --- /dev/null +++ b/static/idn-api/beta/paths/certification-tasks.yaml @@ -0,0 +1,58 @@ +get: + operationId: getPendingCertificationTasks + tags: + - Certifications + - Certification Campaigns + summary: List of Pending Certification Tasks + description: >- + This API returns a list of pending (`QUEUED` or `IN_PROGRESS`) certification tasks. Any authenticated token can call + this API, but only certification tasks you are authorized to review will be returned. + parameters: + - in: query + name: reviewer-identity + schema: + type: string + description: The ID of reviewer identity. *me* indicates the current user. + required: false + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **targetId**: *eq, in* + + + **type**: *eq, in* + responses: + '200': + description: A list of pending certification tasks + content: + application/json: + schema: + type: array + items: + $ref: '../../beta/schemas/CertificationTask.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/certification.yaml b/static/idn-api/beta/paths/certification.yaml new file mode 100644 index 000000000..ad50bf487 --- /dev/null +++ b/static/idn-api/beta/paths/certification.yaml @@ -0,0 +1,35 @@ +get: + operationId: getCertification + tags: + - Certifications + summary: Certification by ID + description: >- + This API returns a single certification by its ID. A token with ORG_ADMIN or CERT_ADMIN authority is required to + call this API. Reviewers for this certification can also call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The certification ID + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: A certification object + content: + application/json: + schema: + $ref: '../../beta/schemas/CertificationDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/certifications-access-summaries.yaml b/static/idn-api/beta/paths/certifications-access-summaries.yaml new file mode 100644 index 000000000..f40086a44 --- /dev/null +++ b/static/idn-api/beta/paths/certifications-access-summaries.yaml @@ -0,0 +1,81 @@ +get: + operationId: getAccessSummaries + tags: + - Certification Summaries + summary: Access Summaries + description: >- + This API returns a list of access summaries for the specified certification and type. A token with ORG_ADMIN or + CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The certification ID + example: ef38f94347e94562b5bb8424a56397d8 + - in: path + name: type + schema: + $ref: '../../beta/schemas/CertificationItemType.yaml' + required: true + description: The type of review item to retrieve summaries for + example: ACCESS_PROFILE + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **completed**: *eq, ne* + + + **entity.id**: *eq, in* + + + **entity.name**: *eq, sw* + + + **entitlement.sourceName**: *eq, sw* + + + **accessProfile.sourceName**: *eq, sw* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **entity.name** + responses: + '200': + description: List of access summaries + content: + application/json: + schema: + type: array + items: + $ref: '../../beta/schemas/ReviewData.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/certifications-decide.yaml b/static/idn-api/beta/paths/certifications-decide.yaml new file mode 100644 index 000000000..1dc95eb5a --- /dev/null +++ b/static/idn-api/beta/paths/certifications-decide.yaml @@ -0,0 +1,56 @@ +post: + operationId: makeDecision + tags: + - Certifications + summary: Decide on a Certification Item + description: >- + The API makes a decision to approve or revoke a certification item. A token with ORG_ADMIN or CERT_ADMIN authority + is required to call this API. Reviewers for this certification can also call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the certification on which to make a decision + example: ef38f94347e94562b5bb8424a56396b5 + requestBody: + required: true + description: An array of decisions to be made. + content: + application/json: + schema: + type: array + items: + $ref: '../../v3/schemas/ReviewDecision.yaml' + maxItems: 250 + example: + - id: ef38f94347e94562b5bb8424a56396b5 + decision: APPROVE + bulk: true + recommendation: null + comments: This user still needs access to this source. + - id: ef38f94347e94562b5bb8424a56397d8 + decision: APPROVE + bulk: true + recommendation: null + comments: This user still needs access to this source too. + responses: + '200': + description: A certification object + content: + application/json: + schema: + $ref: '../../beta/schemas/CertificationDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/certifications-decision-summary.yaml b/static/idn-api/beta/paths/certifications-decision-summary.yaml new file mode 100644 index 000000000..09635402f --- /dev/null +++ b/static/idn-api/beta/paths/certifications-decision-summary.yaml @@ -0,0 +1,52 @@ +get: + operationId: getDecisionSummary + tags: + - Certification Summaries + summary: Summary of Certification Decisions + description: >- + This API returns a summary of the decisions made on an certification. A token with ORG_ADMIN or CERT_ADMIN authority + is required to call this API. Reviewers for this certification can also call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The certification ID + example: ef38f94347e94562b5bb8424a56397d8 + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **targetSummary.id**: *eq, in* + responses: + '200': + description: Summary of the decisions made + content: + application/json: + schema: + type: array + items: + $ref: '../../beta/schemas/DecisionSummary.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/certifications-entitlement-permissions.yaml b/static/idn-api/beta/paths/certifications-entitlement-permissions.yaml new file mode 100644 index 000000000..9132df83a --- /dev/null +++ b/static/idn-api/beta/paths/certifications-entitlement-permissions.yaml @@ -0,0 +1,96 @@ +get: + operationId: getCertificationEntitlementPermissions + tags: + - Certifications + summary: Permissions for Entitlement in a Certification + description: >- + This API returns the permissions associated with an entitlement that is part of a certification campaign. The + entitlement provided must match the entitlement from an entitlement certification item, or be part of an access + profile which has its own access profile certification item. A token with ORG_ADMIN or CERT_ADMIN authority is + required to call this API. Reviewers for this certification can also call this API. + parameters: + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Supported fields and primitive operators: + + + **target**: *eq, sw* + + + **rights**: *ca* + + + Supported composite operators: + + + *and, or* + + + All field values (second filter operands) are case-insensitive for this API. + + + Only a single *and* or *or* composite filter operator may be used. It must also be used between + a target filter and a rights filter, not between 2 filters for the same field. + + For example, + + + The following is valid: + + *?filters=rights+ca+(%22CREATE%22)+and+target+eq+%22SYS.OBJAUTH2%22* + + + The following is invalid: + + *?filters=rights+ca+(%22CREATE%22)+and+rights+ca+(%SELECT%22)* + - in: path + name: id + schema: + type: string + required: true + description: The certification ID + example: ef38f94347e94562b5bb8424a56397d8 + - in: path + name: itemId + schema: + type: string + required: true + description: The certification item ID + example: 2c91808671bcbab40171bd945d961227 + - in: path + name: entitlementId + schema: + type: string + required: true + description: The entitlement ID + example: ef38f94347e94562b5bb8424a56397d8 + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + responses: + '200': + description: A list of permissions associated with the given entitlement ID + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/PermissionDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/certifications-reassign-async.yaml b/static/idn-api/beta/paths/certifications-reassign-async.yaml new file mode 100644 index 000000000..38b1ab9a7 --- /dev/null +++ b/static/idn-api/beta/paths/certifications-reassign-async.yaml @@ -0,0 +1,42 @@ +post: + operationId: reassignCertsAsync + tags: + - Certifications + summary: Reassign Certifications Asynchronously + description: >- + This API initiates a task to reassign up to 500 identities or items in a certification to another reviewer. The + `certification-tasks` API can be used to get an updated status on the task and determine when the reassignment is + complete. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this + certification can also call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The certification ID + requestBody: + required: true + content: + application/json: + schema: + $ref: "../../v3/schemas/ReviewReassign.yaml" + responses: + '202': + description: A certification task object for the reassignment which can be queried for status. + content: + application/json: + schema: + $ref: '../../beta/schemas/CertificationTask.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/certifications-reassign.yaml b/static/idn-api/beta/paths/certifications-reassign.yaml new file mode 100644 index 000000000..d97a3d494 --- /dev/null +++ b/static/idn-api/beta/paths/certifications-reassign.yaml @@ -0,0 +1,40 @@ +post: + operationId: reassignCertifications + tags: + - Certifications + summary: Reassign Identities or Items + description: >- + This API reassigns up to 50 identities or items in a certification to another reviewer. A token with ORG_ADMIN or + CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The certification ID + requestBody: + required: true + content: + application/json: + schema: + $ref: "../../v3/schemas/ReviewReassign.yaml" + responses: + '200': + description: The certification details after completing the reassignment. + content: + application/json: + schema: + $ref: '../../beta/schemas/CertificationDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/certifications-review-items-activity.yaml b/static/idn-api/beta/paths/certifications-review-items-activity.yaml new file mode 100644 index 000000000..6b3268aa7 --- /dev/null +++ b/static/idn-api/beta/paths/certifications-review-items-activity.yaml @@ -0,0 +1,42 @@ +get: + operationId: listReviewItemsActivityData + tags: + - Certifications + summary: List of Review Items Activity Data + description: >- + This API returns activity data for a list of review items for an identity campaign certification. The activity data applies to the results of the previous call to review-items API. A token with ORG_ADMIN or + CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The certification ID + example: ef38f94347e94562b5bb8424a56397d8 + - in: path + name: activityDataId + schema: + type: string + required: true + description: Id of the activity dataset, needs to match value of HTTP header “SLPT-Activity-Data-ID” returned by review-items call. + example: ff1567bf5d564996af4915f3ab061a1b + responses: + '200': + description: A list of review item ids with activity data + content: + application/json: + schema: + $ref: '../../beta/schemas/ReviewItemsActivityTask.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/certifications-review-items.yaml b/static/idn-api/beta/paths/certifications-review-items.yaml new file mode 100644 index 000000000..75ce5ecd5 --- /dev/null +++ b/static/idn-api/beta/paths/certifications-review-items.yaml @@ -0,0 +1,93 @@ +get: + operationId: listReviewItems + tags: + - Certifications + summary: List of Review Items + description: >- + This API returns a list of review items for and identity campaign certification. A token with ORG_ADMIN or + CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The certification ID + example: ef38f94347e94562b5bb8424a56397d8 + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **completed***: *eq, ne* + + + **targetSummary.id**: *eq, in* + + + **targetSummary.name**: *eq, sw* + + + **reviewData.entity.id**: *eq, in* + + + **reviewData.entity.name**: *eq, sw* + + + **reviewData.entity.type**: *eq* + + + **reviewData.entitlement.sourceName**: *eq, sw* + + + **reviewData.accessProfile.sourceName**: *eq, sw* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **targetSummary.name, reviewData.entity.type, reviewData.entity.name, reviewData.entitlement.sourceName, reviewData.accessProfile.sourceName** + - in: query + name: activity-data + schema: + type: boolean + default: false + description: >- + If set to true, the response will include HTTP header "SLPT-Activity-Data-ID" which will allow the caller to query for certification items activity data in a separate call. + responses: + '200': + description: A list of review items + content: + application/json: + schema: + type: array + items: + $ref: '../../beta/schemas/ReviewItem.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/certifications-reviewers.yaml b/static/idn-api/beta/paths/certifications-reviewers.yaml new file mode 100644 index 000000000..7b55488d0 --- /dev/null +++ b/static/idn-api/beta/paths/certifications-reviewers.yaml @@ -0,0 +1,70 @@ +get: + operationId: listReviewers + tags: + - Certifications + summary: List of Reviewers for the certification + description: >- + This API returns a list of reviewers for the certification. A token with ORG_ADMIN or + CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The certification ID + example: ef38f94347e94562b5bb8424a56397d8 + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators (Filtering is done by reviewer's fields): + + + **id**: *eq, in* + + + **name**: *eq, sw* + + + **email**: *eq, sw* + + + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **name, email** + responses: + '200': + description: A list of reviewers + content: + application/json: + schema: + type: array + items: + $ref: '../../v3/schemas/IdentityReferenceWithNameAndEmail.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/certifications-sign-off.yaml b/static/idn-api/beta/paths/certifications-sign-off.yaml new file mode 100644 index 000000000..ff8791b1e --- /dev/null +++ b/static/idn-api/beta/paths/certifications-sign-off.yaml @@ -0,0 +1,36 @@ +post: + operationId: signOffCertification + tags: + - Certifications + summary: Finalize Certification Decisions + description: >- + This API finalizes all decisions made on an certification and initiates any remediations required. A token with + ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this + API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The certification ID + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: A certification object + content: + application/json: + schema: + $ref: '../../beta/schemas/CertificationDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/certifications-target-summaries.yaml b/static/idn-api/beta/paths/certifications-target-summaries.yaml new file mode 100644 index 000000000..b61138878 --- /dev/null +++ b/static/idn-api/beta/paths/certifications-target-summaries.yaml @@ -0,0 +1,77 @@ +get: + operationId: getTargetSummaries + tags: + - Certification Summaries + summary: Target Summaries for a Certification + description: >- + This API returns a list of the target summaries for a specific certification. A token with ORG_ADMIN or CERT_ADMIN + authority is required to call this API. Reviewers for this certification can also call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The certification ID + example: ef38f94347e94562b5bb8424a56397d8 + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **completed**: *eq, ne* + + + **name**: *eq, sw* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **name** + responses: + '200': + description: List of target summaries + content: + application/json: + schema: + type: array + items: + $ref: '../../beta/schemas/TargetSummary.yaml' + example: + - id: 2c91808772a504f50172a9540e501ba7 + name: Derek Grey + targetId: 2c9180857182306001719937379633e4 + completed: false + - id: 2c91808772a504f50172a9540e501ba8 + name: Mary LeMasters + targetId: 2c9180857182306001719937377a33de + completed: true + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/certifications-target-summary.yaml b/static/idn-api/beta/paths/certifications-target-summary.yaml new file mode 100644 index 000000000..452b45818 --- /dev/null +++ b/static/idn-api/beta/paths/certifications-target-summary.yaml @@ -0,0 +1,40 @@ +get: + operationId: getTargetSummary + tags: + - Certification Summaries + summary: Summary for a Certification Target + description: >- + This API returns the summary for a target on a specified certification. A token with ORG_ADMIN or CERT_ADMIN + authority is required to call this API. Reviewers for this certification can also call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The certification ID + example: ef38f94347e94562b5bb8424a56397d8 + - in: path + name: targetSummaryId + schema: + type: string + required: true + description: The target summary ID + example: 2c91808772a504f50172a9540e501ba8 + responses: + '200': + description: A target summary + content: + application/json: + schema: + $ref: '../../beta/schemas/TargetSummary.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/certifications.yaml b/static/idn-api/beta/paths/certifications.yaml new file mode 100644 index 000000000..f5f59e618 --- /dev/null +++ b/static/idn-api/beta/paths/certifications.yaml @@ -0,0 +1,71 @@ +get: + operationId: listCertifications + tags: + - Certifications + summary: Certifications by IDs + description: >- + This API returns a list of certifications that satisfy the given query parameters. Any authenticated token can call + this API, but only certifications you are authorized to review will be returned. + parameters: + - in: query + name: reviewer-identitiy + schema: + type: string + description: The ID of reviewer identity. *me* indicates the current user. + required: false + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **phase**: *eq* + + + **completed**: *eq, ne* + + + **campaignRef.campaignType**: *eq, in* + + + **campaignRef.id**: *eq, in* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **name, due, signed** + responses: + '200': + description: List of certifications + content: + application/json: + schema: + type: array + items: + $ref: '../../beta/schemas/CertificationDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/common-access-classify-request.yaml b/static/idn-api/beta/paths/common-access-classify-request.yaml new file mode 100644 index 000000000..2213805ad --- /dev/null +++ b/static/idn-api/beta/paths/common-access-classify-request.yaml @@ -0,0 +1,31 @@ +get: + operationId: getCommonAccessClassifyRequest + summary: Returns the metadata of the common access classification request + tags: + - IAI Common Access + description: >- + This endpoint returns details of a prior common access classification request. + Requires authorization scope of iai:access-modeling:read + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The common access classification request id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + responses: + '200': + description: Succeeded. Returns details of an earlier common access classification request. + content: + application/json: + schema: + $ref: '../schemas/CommonAccessClassifyResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/common-access-classify.yaml b/static/idn-api/beta/paths/common-access-classify.yaml new file mode 100644 index 000000000..cc1923d20 --- /dev/null +++ b/static/idn-api/beta/paths/common-access-classify.yaml @@ -0,0 +1,32 @@ +post: + operationId: commonAccessClassify + summary: Classify common access + tags: + - IAI Common Access + description: >- + This is an internal API that classifies common access. At this time there are no parameters. + Requires authorization scope of iai:access-modeling:create + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/CommonAccessClassifyRequest.yaml' + responses: + '202': + description: Common access request accepted. Returns details of the common access classification request. + content: + application/json: + schema: + $ref: '../schemas/CommonAccessClassifyResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + diff --git a/static/idn-api/beta/paths/common-access-update-status.yaml b/static/idn-api/beta/paths/common-access-update-status.yaml new file mode 100644 index 000000000..3e10634ba --- /dev/null +++ b/static/idn-api/beta/paths/common-access-update-status.yaml @@ -0,0 +1,31 @@ +post: + operationId: commonAccessBulkUpdateStatus + summary: Bulk update common access status + tags: + - IAI Common Access + description: >- + This submits an update request to the common access application. At this time there are no parameters. + Requires authorization scope of iai:access-modeling:update + requestBody: + description: Confirm or deny in bulk the common access ids that are (or aren't) common access + required: true + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/CommonAccessIDStatus.yaml' + responses: + '202': + $ref: '../../v3/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + diff --git a/static/idn-api/beta/paths/common-access.yaml b/static/idn-api/beta/paths/common-access.yaml new file mode 100644 index 000000000..71e06d6c5 --- /dev/null +++ b/static/idn-api/beta/paths/common-access.yaml @@ -0,0 +1,95 @@ +get: + operationId: getCommonAccess + summary: Get a paginated list of common access + tags: + - IAI Common Access + description: >- + This endpoint returns the current common access for a customer. The returned items can be filtered and sorted. + Requires authorization scope of iai:access-modeling:read + parameters: + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407) + + + Filtering is supported for the following fields and operators: + + + **status**: *eq* "CONFIRMED" or "DENIED" + **reviewedByUser** *eq* true or false + **access.id**: *eq* "id" + **access.type**: *eq* "ROLE" or "ACCESS_PROFILE" + **access.name**: *sw* "Administrator" + **access.description**: *sw* "admin" + required: false + style: form + explode: true + schema: + type: string + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407) + + + Sorting is supported for the following fields: **access.name,status** + + + By default the common access items are sorted by name, ascending. + responses: + '200': + description: Succeeded. Returns a list of common access for a customer. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/CommonAccessResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +post: + operationId: createCommonAccess + summary: Create common access items + tags: + - IAI Common Access + description: >- + This API is used to add roles/access profiles to the list of common access for a customer. + Requires authorization scope of iai:access-modeling:create + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/CommonAccessItemRequest.yaml' + responses: + '202': + description: Returns details of the common access classification request. + content: + application/json: + schema: + $ref: '../schemas/CommonAccessItemResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + + diff --git a/static/idn-api/beta/paths/completed-access-request-approvals.yaml b/static/idn-api/beta/paths/completed-access-request-approvals.yaml new file mode 100644 index 000000000..5c1017cf0 --- /dev/null +++ b/static/idn-api/beta/paths/completed-access-request-approvals.yaml @@ -0,0 +1,67 @@ +get: + operationId: listCompletedApprovals + summary: Completed Access Request Approvals List + tags: + - Access Request Approvals + description: >- + This endpoint returns list of completed approvals. + See *owner-id* query parameter below for authorization info. + parameters: + - in: query + name: owner-id + schema: + type: string + description: >- + If present, the value returns only completed approvals for the specified identity. + * ORG_ADMIN users can call this with any identity ID value. + * ORG_ADMIN users can also fetch all the approvals in the org, when owner-id is not used. + * Non-ORG_ADMIN users can only specify *me* or pass their own identity ID value. + + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **requestedFor.id**: *eq, in* + + + **modified**: *gt, lt, ge, le* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **created, modified** + responses: + '200': + description: List of Completed Approvals. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/CompletedApproval.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/connector-messages.yaml b/static/idn-api/beta/paths/connector-messages.yaml new file mode 100644 index 000000000..7060dfdc5 --- /dev/null +++ b/static/idn-api/beta/paths/connector-messages.yaml @@ -0,0 +1,60 @@ +post: + operationId: processConnectorMessage + summary: Route a connector message to the requested message handler. + description: >- + Used by internal services to process connector messages. + + Requires roles of ORG_ADMIN and API + # security: + # - bearerAuth: + # - ORG_ADMIN + # - API + tags: + - Rosetta message handling + parameters: + - in: path + name: clusterId + schema: + type: string + required: true + description: The id of the cluster responsible for processing the message. + example: ef38f94347e94562b5bb8424a56397d8 + - in: path + name: messageType + schema: + type: string + enum: + - aggregate + - check-status + - diagnostics + - discover-schema + - do-health-check + - get-object + - passthrough-authentication + - provision + - streaming-aggregation + - test-connection + required: true + description: >- + The message type to be invoked. Each message type has its own arguments and responses + that are defined in the documentation for each connector type (i.e., Active directory, + RACF, SAP, Etc). The connector being used is defined by the source the message is + being invoked for defined by the message's applicationId. + Note - Additional message types may be added in the future. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/ConnectorMessage.yaml' + responses: + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/connector-rule-validate.yaml b/static/idn-api/beta/paths/connector-rule-validate.yaml new file mode 100644 index 000000000..1a280a848 --- /dev/null +++ b/static/idn-api/beta/paths/connector-rule-validate.yaml @@ -0,0 +1,35 @@ +post: + tags: + - Connector Rule Management + operationId: validateConnectorRule + summary: Validate Connector Rule + description: >- + Returns a list of issues within the code to fix, if any. + + A token with ORG_ADMIN authority is required to call this API. + + requestBody: + required: true + description: The code to validate + content: + application/json: + schema: + $ref: '../schemas/SourceCode.yaml' + responses: + '200': + description: The status of the code's eligibility as a connector rule + content: + application/json: + schema: + $ref: '../schemas/ConnectorRuleValidationResponse.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:connector-rule:read' diff --git a/static/idn-api/beta/paths/connector-rule.yaml b/static/idn-api/beta/paths/connector-rule.yaml new file mode 100644 index 000000000..ef4a1b337 --- /dev/null +++ b/static/idn-api/beta/paths/connector-rule.yaml @@ -0,0 +1,116 @@ +get: + tags: + - Connector Rule Management + summary: Connector-Rule by ID + operationId: getConnectorRule + description: >- + Returns the connector rule specified by ID. + + A token with ORG_ADMIN authority is required to call this API. + + parameters: + - name: id + in: path + description: ID of the connector rule to retrieve + required: true + style: simple + explode: false + schema: + type: string + responses: + '200': + description: Connector rule with the given ID + content: + application/json: + schema: + $ref: '../schemas/ConnectorRuleResponse.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + security: + - bearerAuth: + - 'idn:connector-rule:read' + +put: + tags: + - Connector Rule Management + summary: Update a Connector Rule + description: >- + Updates an existing connector rule with the one provided in the request body. + Note that the fields 'id', 'name', and 'type' are immutable. + + A token with ORG_ADMIN authority is required to call this API. + + operationId: updateConnectorRule + parameters: + - name: id + in: path + description: ID of the connector rule to update + required: true + style: simple + explode: false + schema: + type: string + requestBody: + description: >- + The connector rule with updated data + content: + application/json: + schema: + $ref: '../schemas/ConnectorRuleUpdateRequest.yaml' + responses: + '200': + description: The updated connector rule + content: + application/json: + schema: + $ref: '../schemas/ConnectorRuleResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:connector-rule:write' + +delete: + tags: + - Connector Rule Management + summary: Delete a Connector-Rule + description: >- + Deletes the connector rule specified by the given ID. + + A token with ORG_ADMIN authority is required to call this API. + + operationId: deleteConnectorRule + parameters: + - name: id + in: path + description: ID of the connector rule to delete + required: true + style: simple + explode: false + schema: + type: string + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:connector-rule:write' + diff --git a/static/idn-api/beta/paths/connector-rules.yaml b/static/idn-api/beta/paths/connector-rules.yaml new file mode 100644 index 000000000..cdce888f8 --- /dev/null +++ b/static/idn-api/beta/paths/connector-rules.yaml @@ -0,0 +1,69 @@ +get: + tags: + - Connector Rule Management + operationId: getConnectorRuleList + summary: List Connector Rules + description: >- + Returns the list of connector rules. + + A token with ORG_ADMIN authority is required to call this API. + + responses: + '200': + description: A list of connector rules + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/ConnectorRuleResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:connector-rule:read' +post: + tags: + - Connector Rule Management + operationId: createConnectorRule + summary: Create Connector Rule + description: >- + Creates a new connector rule. + + A token with ORG_ADMIN authority is required to call this API. + + requestBody: + required: true + description: The connector rule to create + content: + application/json: + schema: + $ref: '../schemas/ConnectorRuleCreateRequest.yaml' + responses: + '201': + description: The created connector rule + content: + application/json: + schema: + $ref: '../schemas/ConnectorRuleResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:connector-rule:write' diff --git a/static/idn-api/beta/paths/connectors.yaml b/static/idn-api/beta/paths/connectors.yaml new file mode 100644 index 000000000..6239d9795 --- /dev/null +++ b/static/idn-api/beta/paths/connectors.yaml @@ -0,0 +1,58 @@ +get: + tags: + - Connectors + operationId: getConnectorList + summary: Gets connector list + description: >- + Fetches list of connectors that have 'RELEASED' status using filtering and pagination. + + A token with ORG_ADMIN authority is required to call this API. + parameters: + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + Filtering is supported for the following fields and operators: + + + **name**: *sw* + + + **type**: *eq* + + + **directConnect**: *eq* + example: directConnect eq "true" + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: locale + schema: + type: string + enum: [de, no, fi, sv, ru, pt, ko, zh-TW, en, it, fr, zh-CN, hu, es, cs, ja, pl, da, nl] + example: de + description: >- + The locale to apply to the config. If no viable locale is given, it will default to "en" + responses: + '200': + description: A Connector Dto object + content: + application/json: + schema: + $ref: '../schemas/V3ConnectorDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/custom-password-instruction.yaml b/static/idn-api/beta/paths/custom-password-instruction.yaml new file mode 100644 index 000000000..e17759cbf --- /dev/null +++ b/static/idn-api/beta/paths/custom-password-instruction.yaml @@ -0,0 +1,100 @@ +get: + operationId: getCustomPasswordInstructions + tags: + - Custom Password Instructions + summary: Get Custom Password Instructions by Page ID + description: >- + This API returns the custom password instructions for the specified page ID. + A token with ORG_ADMIN authority is required to call this API. + parameters: + - in: path + name: pageId + schema: + type: string + enum: + - change-password:enter-password + - change-password:finish + - flow-selection:select + - forget-username:user-email + - mfa:enter-code + - mfa:enter-kba + - mfa:select + - reset-password:enter-password + - reset-password:enter-username + - reset-password:finish + - unlock-account:enter-username + - unlock-account:finish + required: true + description: The page ID of custom password instructions to query. + example: mfa:select + - in: query + name: locale + schema: + type: string + description: The locale for the custom instructions, a BCP47 language tag. The default value is \"default\". + responses: + '200': + description: Reference to the custom password instructions. + content: + application/json: + schema: + $ref: '../schemas/CustomPasswordInstruction.yaml' + example: + { + "pageId": "reset-password:enter-password", + "locale": "default", + "pageContent": "See company password policies for details by clicking here" + } + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: deleteCustomPasswordInstructions + tags: + - Custom Password Instructions + summary: Delete Custom Password Instructions by page ID + description: >- + This API delete the custom password instructions for the specified page ID. + A token with ORG_ADMIN authority is required to call this API. + parameters: + - in: path + name: pageId + schema: + type: string + enum: + - change-password:enter-password + - change-password:finish + - flow-selection:select + - forget-username:user-email + - mfa:enter-code + - mfa:enter-kba + - mfa:select + - reset-password:enter-password + - reset-password:enter-username + - reset-password:finish + - unlock-account:enter-username + - unlock-account:finish + required: true + description: The page ID of custom password instructions to delete. + example: mfa:select + - in: query + name: locale + schema: + type: string + description: The locale for the custom instructions, a BCP47 language tag. The default value is \"default\". + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/custom-password-instructions.yaml b/static/idn-api/beta/paths/custom-password-instructions.yaml new file mode 100644 index 000000000..cc492dc34 --- /dev/null +++ b/static/idn-api/beta/paths/custom-password-instructions.yaml @@ -0,0 +1,37 @@ +post: + operationId: createCustomPasswordInstructions + tags: + - Custom Password Instructions + summary: Create Custom Password Instructions + description: >- + This API creates the custom password instructions for the specified page ID. + A token with ORG_ADMIN authority is required to call this API. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/CustomPasswordInstruction.yaml' + example: { + "pageId": "reset-password:enter-password", + "pageContent": "See company password policies for details by clicking here" + } + responses: + '200': + description: Reference to the custom password instructions. + content: + application/json: + schema: + $ref: '../schemas/CustomPasswordInstruction.yaml' + example: + { + "pageId": "reset-password:enter-password", + "locale": "default", + "pageContent": "See company password policies for details by clicking here" + } + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/data-pipeline-events-qualifier-related.yaml b/static/idn-api/beta/paths/data-pipeline-events-qualifier-related.yaml new file mode 100644 index 000000000..c05e2b948 --- /dev/null +++ b/static/idn-api/beta/paths/data-pipeline-events-qualifier-related.yaml @@ -0,0 +1,31 @@ +get: + operationId: getRelatedQualifiers + tags: + - IAI Data Pipeline Events + summary: Get related qualifiers of a given qualifier + description: >- + Given a qualifier, this will return a list of related qualifiers + + Requires security scope of 'iai:data-pipeline:read' + parameters: + - in: path + name: qualifier + schema: + type: string + required: true + description: >- + Filter results based on the specified qualifier. + example: "20210205164448" + responses: + '200': + description: Data pipeline qualifier and related qualifiers + content: + application/json: + schema: + $ref: '../schemas/DataPipelineRelatedQualifiers.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' diff --git a/static/idn-api/beta/paths/data-pipeline-events-qualifier.yaml b/static/idn-api/beta/paths/data-pipeline-events-qualifier.yaml new file mode 100644 index 000000000..0ac2cf184 --- /dev/null +++ b/static/idn-api/beta/paths/data-pipeline-events-qualifier.yaml @@ -0,0 +1,31 @@ +get: + operationId: getQualifier + tags: + - IAI Data Pipeline Events + summary: Get data for a given qualifier + description: >- + This presents events and metadata for a given qualifier + + Requires security scope of 'iai:data-pipeline:read' + parameters: + - in: path + name: qualifier + schema: + type: string + required: true + description: >- + Filter results based on the specified qualifier. + example: "20210205164448" + responses: + '200': + description: Data pipeline event metadata + content: + application/json: + schema: + $ref: '../schemas/DataPipelineSummary.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' diff --git a/static/idn-api/beta/paths/data-pipeline-events.yaml b/static/idn-api/beta/paths/data-pipeline-events.yaml new file mode 100644 index 000000000..d36272b01 --- /dev/null +++ b/static/idn-api/beta/paths/data-pipeline-events.yaml @@ -0,0 +1,106 @@ +get: + operationId: getDataPipelineEvents + tags: + - IAI Data Pipeline Events + summary: Get List of Pipeline events + description: >- + This presents a list of events and metadata for each pipeline of a customer. + They are summarized per qualifier. + The default object response is a summary with only the qualifier, dagId and type. + + Requires security scope of 'iai:data-pipeline:read' + parameters: + - in: query + name: dagId + example: ida-sp-one-streaming-144 + schema: + type: string + description: >- + Filter results based on specified Directed Acyclic Graph id. + - in: query + name: type + example: IAI_PIPELINE_STREAMING + schema: + type: string + enum: + - IAI_PIPELINE_META + - IAI_PIPELINE_STREAMING + - IAI_PIPELINE_BATCH + - IAI_PIPELINE_QUALIFIER_ACTIVATED + - IAI_PIPELINE_FEATURESTORE + - IAI_PIPELINE_IDENTITYGRAPH + - IAI_PIPELINE_MATERIALIZER + - IAI_PIPELINE_LOW_SIMILARITY_OUTLIERS + - IAI_PIPELINE_PEERGROUPS + description: >- + The type of the data pipeline event. + - in: query + name: detailed + example: false + schema: + type: boolean + description: >- + Indicates if we want to list detailed parameters to support old behavior. + responses: + '200': + description: The response will return a detailed view (already defined) or a summary view {qualifier, type, dagId} depending on 'detailed' parameter + content: + application/json: + schema: + type: array + items: + oneOf: + - $ref: '../schemas/DataPipelineQualifiers.yaml' + - $ref: '../schemas/DataPipelineSummary.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +post: + operationId: postDataPipelineEvents + tags: + - IAI Data Pipeline Events + summary: Creates Data Pipeline Event + description: >- + This creates a Data Pipeline Event for a customer in context. + + Requires security scope of 'iai:data-pipeline:create' + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/DataPipelineEvent.yaml' + example: + timestamp: "2020-09-08T19:32:17.292Z" + dagId: ida-sp-one-streaming-144 + qualifier: "20200909123456" + type: IAI_PIPELINE_STREAMING + operation: ActivateQualifier + status: success + details: + taskTryNumber: "2" + taskDuration: "234" + responses: + '201': + description: Created. + content: + application/json: + schema: + $ref: '../schemas/DataPipelineEvent.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/data-pipelines.yaml b/static/idn-api/beta/paths/data-pipelines.yaml new file mode 100644 index 000000000..258a3c85d --- /dev/null +++ b/static/idn-api/beta/paths/data-pipelines.yaml @@ -0,0 +1,29 @@ +get: + operationId: getDataPipelines + tags: + - IAI Data Pipeline + summary: Lists all data pipelines for a customer + description: >- + This gets the list of data pipelines for a customer in context. + + Requires security scope of 'iai:data-pipeline:read' + responses: + '200': + description: List of data pipelines for a customer. + content: + application/json: + schema: + $ref: '../schemas/DataPipeline.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + # security: + # - bearerAuth: + # - 'iai:data-pipeline:read' diff --git a/static/idn-api/beta/paths/delete-lifecycle-state.yaml b/static/idn-api/beta/paths/delete-lifecycle-state.yaml new file mode 100644 index 000000000..640cafbb8 --- /dev/null +++ b/static/idn-api/beta/paths/delete-lifecycle-state.yaml @@ -0,0 +1,41 @@ +delete: + operationId: deleteLifecycleState + tags: + - Lifecycle States + summary: Lifecycle State Delete + description: | + This endpoint deletes a lifecycle state and updates the corresponding Identity Profile. + + A token with ORG_ADMIN or API authority is required to call this API. + parameters: + - in: path + name: identity-profile-id + description: >- + Identity Profile ID + required: true + schema: + type: string + - in: path + name: lifecycle-state-id + description: >- + Lifecycle State ID + required: true + schema: + type: string + responses: + '202': + description: Accepted - Returned if the request was successfully accepted into the system. + content: + application/json: + schema: + $ref: '../schemas/BaseReferenceDto.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/ears-entitlement-bulk-update.yaml b/static/idn-api/beta/paths/ears-entitlement-bulk-update.yaml new file mode 100644 index 000000000..9966f8fab --- /dev/null +++ b/static/idn-api/beta/paths/ears-entitlement-bulk-update.yaml @@ -0,0 +1,38 @@ +post: + operationId: entitlementsBulkUpdate + tags: + - Entitlements + summary: Bulk update an entitlement list + description: >- + This API applies an update to every entitlement of the list. + + + The number of entitlements to update is limited to 50 items maximum. + + + The JsonPatch update follows the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard.
        + allowed operations :
        + **{ "op": "replace", "path": "/privileged", "value": boolean }**
        + **{ "op": "replace", "path": "/requestable","value": boolean }**
        + + + A token with ORG_ADMIN or API authority is required to call this API. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/EntitlementBulkUpdateRequest.yaml' + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/ears-entitlement-children.yaml b/static/idn-api/beta/paths/ears-entitlement-children.yaml new file mode 100644 index 000000000..ec3b348fb --- /dev/null +++ b/static/idn-api/beta/paths/ears-entitlement-children.yaml @@ -0,0 +1,71 @@ +get: + operationId: listEntitlementchildren + tags: + - Entitlements + summary: List of entitlements children + description: >- + This API returns a list of all child entitlements of a given entitlement. + + + A token with ORG_ADMIN or API authority is required to call this API. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: path + name: id + schema: + type: string + required: true + description: Entitlement Id + example: 2c91808874ff91550175097daaec161c + responses: + '200': + description: List of entitlements children from an entitlement + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/Entitlement.yaml' + example: + [ + { + "sourceSchemaObjectType": "group", + "attribute": "memberOf", + "attributes": { + "GroupType": "Security", + "sAMAccountName": "LauncherTestGroup1", + "GroupScope": "Global", + "objectguid": "{01a6e70b-9705-4155-a5c6-492a9bcc8c64}", + "objectSid": "S-1-5-21-3585869415-1648031554-2909195034-1633", + "cn": "LauncherTestGroup1", + "msDS-PrincipalName": "AUTOMATIONAD\\LauncherTestGroup1" + }, + "value": "CN=LauncherTestGroup1,OU=LauncherTestOrg,OU=slpt-automation,DC=TestAutomationAD,DC=local", + "description": "some description", + "privileged": false, + "cloudGoverned": false, + "source": { + "type": "SOURCE", + "id": "2c9180877504c40e0175097d5ce707c8", + "name": "EndToEnd-ADSource" + }, + "id": "2c91808c74ff913f0175097daa9d59cd", + "name": "LauncherTestGroup1", + "created": "2020-10-08T18:33:52.029Z", + "modified": "2021-01-19T16:53:35.707Z" + } + ] + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/ears-entitlement-parents.yaml b/static/idn-api/beta/paths/ears-entitlement-parents.yaml new file mode 100644 index 000000000..442ce2b14 --- /dev/null +++ b/static/idn-api/beta/paths/ears-entitlement-parents.yaml @@ -0,0 +1,71 @@ +get: + operationId: listEntitlementParents + tags: + - Entitlements + summary: List of entitlements parents + description: >- + This API returns a list of all parent entitlements of a given entitlement. + + + A token with ORG_ADMIN or API authority is required to call this API. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: path + name: id + schema: + type: string + required: true + description: Entitlement Id + example: 2c91808c74ff913f0175097daa9d59cd + responses: + '200': + description: List of entitlements parents from an entitlement + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/Entitlement.yaml' + example: + [ + { + "sourceSchemaObjectType": "group", + "attribute": "memberOf", + "attributes": { + "GroupType": "Security", + "sAMAccountName": "LauncherTestGroup1", + "GroupScope": "Global", + "objectguid": "{01a6e70b-9705-4155-a5c6-492a9bcc8c64}", + "objectSid": "S-1-5-21-3585869415-1648031554-2909195034-1633", + "cn": "LauncherTestGroup1", + "msDS-PrincipalName": "AUTOMATIONAD\\LauncherTestGroup1" + }, + "value": "CN=LauncherTestGroup1,OU=LauncherTestOrg,OU=slpt-automation,DC=TestAutomationAD,DC=local", + "description": "some description", + "privileged": false, + "cloudGoverned": false, + "source": { + "type": "SOURCE", + "id": "2c9180877504c40e0175097d5ce707c8", + "name": "EndToEnd-ADSource" + }, + "id": "2c91808c74ff913f0175097daa9d59cd", + "name": "LauncherTestGroup1", + "created": "2020-10-08T18:33:52.029Z", + "modified": "2021-01-19T16:53:35.707Z" + } + ] + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/ears-entitlement.yaml b/static/idn-api/beta/paths/ears-entitlement.yaml new file mode 100644 index 000000000..0dc4839ee --- /dev/null +++ b/static/idn-api/beta/paths/ears-entitlement.yaml @@ -0,0 +1,64 @@ +get: + operationId: getEntitlement + tags: + - Entitlements + summary: Get an Entitlement + description: >- + This API returns an Entitlement by its ID. + + + A token with ORG_ADMIN or API authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: Entitlement Id + example: 2c91808874ff91550175097daaec161c + responses: + '200': + description: An Entitlement + content: + application/json: + schema: + $ref: '../schemas/Entitlement.yaml' + example: + { + "sourceSchemaObjectType": "group", + "attribute": "memberOf", + "attributes": { + "GroupType": "Security", + "sAMAccountName": "LauncherTestGroup1", + "GroupScope": "Global", + "objectguid": "{01a6e70b-9705-4155-a5c6-492a9bcc8c64}", + "objectSid": "S-1-5-21-3585869415-1648031554-2909195034-1633", + "cn": "LauncherTestGroup1", + "msDS-PrincipalName": "AUTOMATIONAD\\LauncherTestGroup1" + }, + "value": "CN=LauncherTestGroup1,OU=LauncherTestOrg,OU=slpt-automation,DC=TestAutomationAD,DC=local", + "description": "some description", + "privileged": false, + "cloudGoverned": false, + "source": { + "type": "SOURCE", + "id": "2c9180877504c40e0175097d5ce707c8", + "name": "EndToEnd-ADSource" + }, + "id": "2c91808c74ff913f0175097daa9d59cd", + "name": "LauncherTestGroup1", + "created": "2020-10-08T18:33:52.029Z", + "modified": "2021-01-19T16:53:35.707Z" + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/ears-identity-entitlement.yaml b/static/idn-api/beta/paths/ears-identity-entitlement.yaml new file mode 100644 index 000000000..70c8788e3 --- /dev/null +++ b/static/idn-api/beta/paths/ears-identity-entitlement.yaml @@ -0,0 +1,58 @@ +get: + operationId: listEntitlementsByIdentity + tags: + - Identities + summary: List of entitlements by Identity. + description: >- + The API returns a list of all entitlements assigned to an identity, either directly or through the role or access profile. + A token with ORG_ADMIN or API authority is required to call this API. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: path + name: id + schema: + type: string + required: true + description: Identity Id + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: List of all Entitlements for given Identity + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/IdentityEntitlements.yaml' + example: + [ + { + "type": "ENTITLEMENT", + "id": "2c918087682f9a86016839c050861ab1", + "name": "CN=Information Access,OU=test,OU=test-service,DC=TestAD,DC=local" + }, + { + "type": "ENTITLEMENT", + "id": "2c918087682f9a86016839c0509c1ab2", + "name": "CN=Information Technology,OU=test,OU=test-service,DC=TestAD,DC=local" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180886bd256ae016bd2593fe5009e", + "name": "CN=HelpDesk,OU=test,OU=test-service,DC=TestAD,DC=local" + } + ] + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/email-requests.yaml b/static/idn-api/beta/paths/email-requests.yaml new file mode 100644 index 000000000..8ef2618e7 --- /dev/null +++ b/static/idn-api/beta/paths/email-requests.yaml @@ -0,0 +1,27 @@ +post: + operationId: sendEmailRequest + summary: Generate user email notifications. + description: >- + Used by internal services to generate user email notifications. + tags: + - Internal Use Only + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/EmailRequest.yaml' + responses: + '202': + $ref: '../../v3/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + diff --git a/static/idn-api/beta/paths/entitlements.yaml b/static/idn-api/beta/paths/entitlements.yaml new file mode 100644 index 000000000..5033f586b --- /dev/null +++ b/static/idn-api/beta/paths/entitlements.yaml @@ -0,0 +1,234 @@ +get: + operationId: listEntitlements + tags: + - Entitlements + summary: Gets a list of entitlements. + description: >- + This API returns a list of entitlements. + + + This API can be used in one of the two following ways: + either getting entitlements for a specific **account-id**, + or getting via use of **filters** (those two options are exclusive). + + + Any authenticated token can call this API. + parameters: + - in: query + name: account-id + schema: + type: string + description: >- + The account ID. + If specified, returns only entitlements associated with the given Account. + Can not be specified with the **filters**, **segmented-for-identity**, **for-segment-ids**, or + **include-unsegmented** param(s). + example: ef38f94347e94562b5bb8424a56397d8 + required: false + - in: query + name: segmented-for-identity + schema: + type: string + description: >- + If present and not empty, additionally filters Entitlements to those which are assigned to the Segment(s) which + are visible to the Identity with the specified ID. By convention, the value **me** can stand in for the current + user's Identity ID. + + Can not be specified with the **account-id** or **for-segment-ids** param(s). It is also illegal to specify a + value that refers to a different user's Identity. + example: me + required: false + - in: query + name: for-segment-ids + schema: + type: string + format: comma-separated + description: >- + If present and not empty, additionally filters Access Profiles to those which are assigned to the Segment(s) + with the specified IDs. + + Can not be specified with the **account-id** or **segmented-for-identity** param(s). + example: 041727d4-7d95-4779-b891-93cf41e98249,a378c9fa-bae5-494c-804e-a1e30f69f649 + required: false + - in: query + name: include-unsegmented + schema: + type: boolean + default: true + description: >- + Whether or not the response list should contain unsegmented Entitlements. + If **for-segment-ids** and **segmented-for-identity** are both absent or empty, specifying + **include-unsegmented=false** results in an error. + example: true + required: false + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + Sorting is supported for the following fields: **id, name, created, modified, type, attribute, value, source.id** + example: name,-modified + required: false + style: form + explode: true + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **name**: *eq, in, sw* + + + **type**: *eq, in* + + + **attribute**: *eq, in* + + + **value**: *eq, in, sw* + + + **source.id**: *eq, in* + + + **requestable**: *eq* + example: attribute eq "memberOf" + required: false + style: form + explode: true + - in: query + name: cursor + schema: + type: string + description: >- + This endpoint supports cursor-based pagination as an alternative to pagination using **limit** and **offset**. + Use of cursors is optional but may deliver significantly better performance when paginating over large result + sets, particularly when sorting is involved. + + + To obtain an initial cursor value, the initial request must be made with **offset=0** and **count=false**, or + by omitting those parameters. Other query parameters may be specified on the initial request, to specify + filtering and sorting for example. The response to this initial request will provide a cursor value in the + **Slpt-Cursor** response header. Thereafter, passing in the last returned value of **Slpt-Cursor** as the value + of the **cursor** parameter on the following request will return the next page of results, and so on. The end of + the result set is signalled when a request returns without providing a value for **Slpt-Cursor**. + + + The **cursor** param is generally incompatible with other parameters; the second and subsequent requests should + only pass that parameter and no others. A 400 Bad Request will be returned if any incompatible parameter values + are passed along with the **cursor**. + + + Cursors expire after 15 minutes; a 400 Bad Request is returned if an expired value is provided for **cursor**. + example: 9602877a-1c11-4c02-a399-7273ea2158da + required: false + responses: + '200': + description: List of entitlements + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/Entitlement.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +patch: + operationId: patchEntitlement + tags: + - Entitlements + summary: Patch a specified Entitlement + description: >- + This API updates an existing Entitlement using [JSON Patch](https://tools.ietf.org/html/rfc6902) syntax. + + + The following fields are patchable: + **requestable**, **privileged**, **segments** + + + A token with ORG_ADMIN or SOURCE_ADMIN authority is required to call this API. + parameters: + - name: id + in: path + description: ID of the Entitlement to patch + required: true + schema: + type: string + example: 2c91808a7813090a017814121e121518 + requestBody: + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + examples: + Make an Entitlement Requestable and Privileged in One Call: + description: This example shows how multiple fields may be updated with a single patch call. + value: + [ + { + "op": "replace", + "path": "/requestable", + "value": true + }, + { + "op": "replace", + "path": "/privileged", + "value": true + } + ] + + Assign an Entitlement to a Segment: + description: >- + This example illustrates the use of patch to assign an Entitlement to a Segment by adding the Segment's ID to the + Entitlement's segments array. + value: + [ + { + "op": "add", + "path": "/segments/-", + "value": "f7b1b8a3-5fed-4fd4-ad29-82014e137e19" + } + ] + responses: + '200': + description: Responds with the Entitlement as updated. + content: + application/json: + schema: + $ref: '../schemas/Entitlement.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/forward-access-request-approval.yaml b/static/idn-api/beta/paths/forward-access-request-approval.yaml new file mode 100644 index 000000000..7ceb2c454 --- /dev/null +++ b/static/idn-api/beta/paths/forward-access-request-approval.yaml @@ -0,0 +1,37 @@ +post: + operationId: forwardRequest + summary: Forwards an access request approval to a new owner. + tags: + - Access Request Approvals + description: >- + This endpoint forwards an access request approval. Only the owner of the approval and ORG_ADMIN users are allowed to perform this action. + parameters: + - in: path + name: approvalId + schema: + type: string + required: true + description: The id of the approval. + example: 2c91808b7294bea301729568c68c002e + requestBody: + description: Information about the forwarded approval. + required: true + content: + application/json: + schema: + $ref: "../schemas/ForwardApprovalDto.yaml" + responses: + '202': + $ref: '../../v3/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/historical-identities.yaml b/static/idn-api/beta/paths/historical-identities.yaml new file mode 100644 index 000000000..ded375e53 --- /dev/null +++ b/static/idn-api/beta/paths/historical-identities.yaml @@ -0,0 +1,47 @@ +get: + operationId: listIdentities + summary: Lists all the identities + description: >- + This gets the list of identities for the customer. This list end point does not support count=true request param. The total + count of identities would never be returned even if the count param is specified in the request + Requires authorization scope of 'idn:identity-history:read' + tags: + - Identity History + parameters: + - in: query + name: starts-with-query + schema: + type: string + description: This param is used for starts-with search for first, last and display name of the identity + example: Ada + - in: query + name: is-deleted + schema: + type: boolean + description: Indicates if we want to only list down deleted identities or not. + example: true + - in: query + name: is-active + schema: + type: boolean + description: Indicates if we want to only list active or inactive identities. + example: true + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + responses: + '200': + description: List of identities for the customer. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/IdentityListItem.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth : [] \ No newline at end of file diff --git a/static/idn-api/beta/paths/historical-identity-access-items.yaml b/static/idn-api/beta/paths/historical-identity-access-items.yaml new file mode 100644 index 000000000..81f37d8fe --- /dev/null +++ b/static/idn-api/beta/paths/historical-identity-access-items.yaml @@ -0,0 +1,99 @@ +get: + operationId: listIdentityAccessItems + tags: + - Identity History + summary: Gets a list of access items for the identity filtered by item type + description: >- + This method retrieves a list of access item for the identity filtered by the access item type + Requires authorization scope of 'idn:identity-history:read' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The identity id + example: '8c190e6787aa4ed9a90bd9d5344523fb' + - in: query + name: type + schema: + type: string + description: The type of access item for the identity. If not provided, it defaults to account + example: account + responses: + '200': + description: The list of access items. + content: + application/json: + schema: + type: array + items: + oneOf: + - $ref: '../schemas/AccessItemAccessProfileResponse.yaml' + - $ref: '../schemas/AccessItemAccountResponse.yaml' + - $ref: '../schemas/AccessItemAppResponse.yaml' + - $ref: '../schemas/AccessItemEntitlementResponse.yaml' + - $ref: '../schemas/AccessItemRoleResponse.yaml' + + examples: + Access Profile: + description: An access profile response + value: + - accessType: accessProfile + id: 2c918087763e69d901763e72e97f006f + name: sample + sourceName: DataScienceDataset + sourceId: 2793o32dwd + description: AccessProfile - Workday/Citizenship access + displayName: Dr. Arden Rogahn MD + entitlementCount: 12 + appDisplayName: AppName + + Account: + description: An account response + value: + - accessType: account + id: 2c918087763e69d901763e72e97f006f + nativeIdentity: dr.arden.ogahn.d + sourceName: DataScienceDataset + sourceId: 2793o32dwd + entitlementCount: 12 + displayName: Dr. Arden Rogahn MD + + App: + description: An app response + value: + - accessType: app + id: 2c918087763e69d901763e72e97f006f + name: appName + + Entitlement: + description: An entitlement event + value: + - accessType: entitlement + id: 2c918087763e69d901763e72e97f006f + attribute: groups + value: Upward mobility access + type: group + sourceName: DataScienceDataset + sourceId: 2793o32dwd + description: Entitlement - Workday/Citizenship access + displayName: Dr. Arden Rogahn MD + + Role: + description: A role response + value: + - accessType: role + id: 2c918087763e69d901763e72e97f006f + name: sample + description: Role - Workday/Citizenship access + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/historical-identity-compare-type.yaml b/static/idn-api/beta/paths/historical-identity-compare-type.yaml new file mode 100644 index 000000000..96cfb5fc1 --- /dev/null +++ b/static/idn-api/beta/paths/historical-identity-compare-type.yaml @@ -0,0 +1,63 @@ +get: + operationId: compareIdentitySnapshotsAccessType + tags: + - Identity History + summary: Gets a list of differences of specific accessType for the given identity between 2 snapshots + description: >- + This method gets a list of differences of specific accessType for the given identity between 2 snapshots + Requires authorization scope of 'idn:identity-history:read' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The identity id + example: 8c190e6787aa4ed9a90bd9d5344523fb + - in: path + name: accessType + schema: + type: string + required: true + description: The specific type which needs to be compared + example: role + - in: query + name: access-associated + schema: + type: boolean + description: Indicates if added or removed access needs to be returned. true - added, false - removed, null - both added & removed + example: '2007-03-01T13:00:00Z' + - in: query + name: snapshot1 + schema: + type: string + description: The snapshot 1 of identity + example: '2008-03-01T13:00:00Z' + - in: query + name: snapshot2 + schema: + type: string + description: The snapshot 2 of identity + example: '2009-03-01T13:00:00Z' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + responses: + '200': + description: A list of events for the identity + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/AccessItemDiff.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/historical-identity-compare.yaml b/static/idn-api/beta/paths/historical-identity-compare.yaml new file mode 100644 index 000000000..ff566dc0b --- /dev/null +++ b/static/idn-api/beta/paths/historical-identity-compare.yaml @@ -0,0 +1,59 @@ +get: + operationId: compareIdentitySnapshots + tags: + - Identity History + summary: Gets a difference of count for each access item types for the given identity between 2 snapshots + description: >- + This method gets a difference of count for each access item types for the given identity between 2 snapshots + Requires authorization scope of 'idn:identity-history:read' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The identity id + example: 8c190e6787aa4ed9a90bd9d5344523fb + - in: query + name: snapshot1 + schema: + type: string + description: The snapshot 1 of identity + example: '2007-03-01T13:00:00Z' + - in: query + name: snapshot2 + schema: + type: string + description: The snapshot 2 of identity + example: '2008-03-01T13:00:00Z' + - in: query + name: accessItemTypes + schema: + type: array + items: + type: string + description: >- + An optional list of access item types (app, account, entitlement, etc...) to return. + If null or empty, all access items types are returned + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + responses: + '200': + description: A IdentityCompare object with difference details for each access item type + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/IdentityCompareResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/historical-identity-events.yaml b/static/idn-api/beta/paths/historical-identity-events.yaml new file mode 100644 index 000000000..f121b09a8 --- /dev/null +++ b/static/idn-api/beta/paths/historical-identity-events.yaml @@ -0,0 +1,203 @@ +get: + operationId: getEvents + tags: + - Identity History + summary: Lists all events for the given identity + description: >- + This method retrieves all access events for the identity + Requires authorization scope of 'idn:identity-history:read' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The identity id + example: '8c190e6787aa4ed9a90bd9d5344523fb' + - in: query + name: from + schema: + type: string + description: The optional instant from which to return the access events + example: '2007-03-01T13:00:00Z' + - in: query + name: eventTypes + schema: + type: array + items: + type: string + description: An optional list of event types to return. If null or empty, all events are returned + example: + - AccessAddedEvent + - AccessRemovedEvent + - in: query + name: accessItemTypes + schema: + type: array + items: + type: string + description: >- + An optional list of access item types (app, account, entitlement, etc...) to return. + If null or empty, all access items types are returned + example: + - entitlement + - account + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + responses: + '200': + description: The list of events for the identity + content: + application/json: + schema: + type: array + items: + anyOf: + - $ref: '../schemas/AccessItemAssociated.yaml' + - $ref: '../schemas/AccessItemRemoved.yaml' + - $ref: '../schemas/AttributesChanged.yaml' + - $ref: '../schemas/AccessRequested.yaml' + - $ref: '../schemas/IdentityCertified.yaml' + - $ref: '../schemas/AccountStatusChanged.yaml' + + examples: + AccessItemAssociated: + description: An Access item associated event + value: + - accessItem: + id: 8c190e6787aa4ed9a90bd9d5344523fb + accessType: account + nativeIdentity: 127999 + sourceName: JDBC Entitlements Source + entitlementCount: 0 + displayName: Sample Name + eventType: AccessItemAssociated + identityId: 8a80828f643d484f01643e14202e206f + dt: '2019-03-08T22:37:33.901Z' + governanceEvent: + name: Access Request 58 + dt: '2019-03-08T22:37:33.901Z' + type: accessRequest + governanceId: 2c91808a77ff216301782327a50f09e1 + owners: + - id: bc693f07e7b645539626c25954c58554 + displayName: Jon Snow + reviewers: + - id: bc693f07e7b645539626c25954c58554 + displayName: Jon Snow + decisionMaker: + id: bc693f07e7b645539626c25954c58554 + displayName: Jon Snow + + AccessItemRemoved: + description: An Access item removed event + value: + - accessItem: + id: 8c190e6787aa4ed9a90bd9d5344523fb + accessType: account + nativeIdentity: 127999 + sourceName: JDBC Entitlements Source + entitlementCount: 0 + displayName: Sample Name + eventType: AccessItemRemoved + identityId: 8a80828f643d484f01643e14202e206f + dt: '2019-03-08T22:37:33.901Z' + governanceEvent: + name: Manager Certification for Jon Snow + dt: '2019-03-08T22:37:33.901Z' + type: certification + governanceId: 2c91808a77ff216301782327a50f09bf + owners: + - id: bc693f07e7b645539626c25954c58554 + displayName: Jon Snow + reviewers: + - id: bc693f07e7b645539626c25954c58554 + displayName: Jon Snow + decisionMaker: + id: bc693f07e7b645539626c25954c58554 + displayName: Jon Snow + + AttributesChanged: + description: An attribute changed event + value: + - attributeChanges: + - name: firstname + previousValue: adam + newValue: zampa + eventType: AttributesChanged + identityId: 8a80828f643d484f01643e14202e206f + dt: '2019-03-08T22:37:33.901Z' + + AccessRequested: + description: An access requested event + value: + accessRequest: + requesterId: 2c91808a77ff216301782327a50f09bf + requestName: Bing C + items: + - operation: Add + accessItemType: role + name: Role-1 + decision: APPROVED + description: The role descrition + sourceId: 8a80828f643d484f01643e14202e206f + sourceName: Source1 + approvalInfos: + - name: John Snow + id: 8a80828f643d484f01643e14202e2000 + status: Approved + eventType: AccessRequested + identityId: 8a80828f643d484f01643e14202e206f + dt: '2019-03-08T22:37:33.901Z' + + IdentityCertified: + description: An identity certified event + value: + - certification: + id: 2c91808a77ff216301782327a50f09bf + name: Cert name + signedDate: '2019-03-08T22:37:33.901Z' + certifiers: + - id: 8a80828f643d484f01643e14202e206f + displayName: John Snow + reviewers: + - id: 8a80828f643d484f01643e14202e206f + displayName: Daenerys Targaryen + signer: + id: 8a80828f643d484f01643e14202e206f + displayName: Tyrion Lannister + eventType: IdentityCertified + identityId: 8a80828f643d484f01643e14202e206f + dt: '2019-03-08T22:37:33.901Z' + + AccountStatusChanged: + description: An account status changed event + value: + - account: + id: 2c91808a77ff216301782327a50f09bf + nativeIdentity: 127999 + displayName: Sample Name + sourceId: 8a80828f643d484f01643e14202e206f + sourceName: JDBC Entitlements Source + entitlementCount: 0 + accessType: account + statusChange: + previousStatus: ENABLED + newStatus: DISABLED + eventType: AccountStatusChanged + identityId: 8a80828f643d484f01643e14202e206f + dt: '2019-03-08T22:37:33.901Z' + + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/historical-identity-snapshot-date-access-items.yaml b/static/idn-api/beta/paths/historical-identity-snapshot-date-access-items.yaml new file mode 100644 index 000000000..2c61b9e4a --- /dev/null +++ b/static/idn-api/beta/paths/historical-identity-snapshot-date-access-items.yaml @@ -0,0 +1,106 @@ +get: + operationId: listIdentitySnapshotAccessItems + tags: + - Identity History + summary: Gets the list of identity access items at a given date filterd by item type + description: >- + This method retrieves the list of identity access items at a given date filterd by item type + Requires authorization scope of 'idn:identity-history:read' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The identity id + example: '8c190e6787aa4ed9a90bd9d5344523fb' + - in: path + name: date + schema: + type: string + required: true + description: The specified date + example: '2007-03-01T13:00:00Z' + - in: query + name: type + schema: + type: string + description: The access item type + example: account + responses: + '200': + description: The identity object. + content: + application/json: + schema: + type: array + items: + oneOf: + - $ref: '../schemas/AccessItemAccessProfileResponse.yaml' + - $ref: '../schemas/AccessItemAccountResponse.yaml' + - $ref: '../schemas/AccessItemAppResponse.yaml' + - $ref: '../schemas/AccessItemEntitlementResponse.yaml' + - $ref: '../schemas/AccessItemRoleResponse.yaml' + + examples: + Access Item AccessProfile Response: + description: An access profile response + value: + - type: accessProfile + id: 2c918087763e69d901763e72e97f006f + name: sample + sourceName: DataScienceDataset + sourceId: 2793o32dwd + description: AccessProfile - Workday/Citizenship access + displayName: Dr. Arden Rogahn MD + entitlementCount: 12 + appDisplayName: AppName + + Access Item Account Response: + description: An account response + value: + - type: account + id: 2c918087763e69d901763e72e97f006f + nativeIdentity: dr.arden.ogahn.d + sourceName: DataScienceDataset + sourceId: 2793o32dwd + entitlementCount: 12 + displayName: Dr. Arden Rogahn MD + + Access Item App Response: + description: An app response + value: + - type: app + id: 2c918087763e69d901763e72e97f006f + name: appName + + Access Item Entitlement Response: + description: An entitlement event + value: + - type: entitlement + id: 2c918087763e69d901763e72e97f006f + attribute: groups + value: Upward mobility access + entitlementType: entitlement + sourceName: DataScienceDataset + sourceId: 2793o32dwd + description: Entitlement - Workday/Citizenship access + displayName: Dr. Arden Rogahn MD + + Access Item Role Response: + description: A role response + value: + - type: role + id: 2c918087763e69d901763e72e97f006f + name: sample + description: Role - Workday/Citizenship access + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/historical-identity-snapshot-date.yaml b/static/idn-api/beta/paths/historical-identity-snapshot-date.yaml new file mode 100644 index 000000000..5d8bdd150 --- /dev/null +++ b/static/idn-api/beta/paths/historical-identity-snapshot-date.yaml @@ -0,0 +1,40 @@ +get: + operationId: getIdentitySnapshot + tags: + - Identity History + summary: Gets an identity snapshot at a given date + description: >- + This method retrieves a specified identity snapshot at a given date + Requires authorization scope of 'idn:identity-history:read' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The identity id + example: '8c190e6787aa4ed9a90bd9d5344523fb' + - in: path + name: date + schema: + type: string + description: The specified date + example: '2007-03-01T13:00:00Z' + required: true + responses: + '200': + description: The identity object. + content: + application/json: + schema: + $ref: '../schemas/IdentityHistoryResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/historical-identity-snapshot-summary.yaml b/static/idn-api/beta/paths/historical-identity-snapshot-summary.yaml new file mode 100644 index 000000000..807e5de8a --- /dev/null +++ b/static/idn-api/beta/paths/historical-identity-snapshot-summary.yaml @@ -0,0 +1,58 @@ +get: + operationId: getIdentitySnapshotSummary + tags: + - Identity History + summary: Gets the summary for the event count for a specific identity + description: >- + This method gets the summary for the event count for a specific identity by month/day + Requires authorization scope of 'idn:identity-history:read' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The identity id + example: 8c190e6787aa4ed9a90bd9d5344523fb + - in: query + name: before + schema: + type: string + description: The date before which snapshot summary is required + example: '2007-03-01T13:00:00Z' + - in: query + name: interval + schema: + type: string + enum: + - day + - month + description: The interval indicating day or month. Defaults to month if not specified + - in: query + name: time-zone + schema: + type: string + description: The time zone. Defaults to UTC if not provided + example: 'UTC' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + responses: + '200': + description: A summary list of identity changes in date histogram format. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/MetricResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/historical-identity-snapshots.yaml b/static/idn-api/beta/paths/historical-identity-snapshots.yaml new file mode 100644 index 000000000..46378dec5 --- /dev/null +++ b/static/idn-api/beta/paths/historical-identity-snapshots.yaml @@ -0,0 +1,52 @@ +get: + operationId: listIdentitySnapshots + tags: + - Identity History + summary: Lists all the snapshots for the identity + description: >- + This method retrieves all the snapshots for the identity + Requires authorization scope of 'idn:identity-history:read' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The identity id + example: 8c190e6787aa4ed9a90bd9d5344523fb + - in: query + name: start + schema: + type: string + description: The specified start date + example: '2007-03-01T13:00:00Z' + - in: query + name: interval + schema: + type: string + enum: + - day + - month + description: The interval indicating the range in day or month for the specified interval-name + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + responses: + '200': + description: A list of identity summary for each snapshot. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/IdentitySnapshotSummaryResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/historical-identity-start-date.yaml b/static/idn-api/beta/paths/historical-identity-start-date.yaml new file mode 100644 index 000000000..3bddb2965 --- /dev/null +++ b/static/idn-api/beta/paths/historical-identity-start-date.yaml @@ -0,0 +1,34 @@ +get: + operationId: getStartDate + tags: + - Identity History + summary: Gets the start date of the identity + description: >- + This method retrieves start date of the identity + Requires authorization scope of 'idn:identity-history:read' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The identity id + example: 8c190e6787aa4ed9a90bd9d5344523fb + responses: + '200': + description: The start date of the identity + content: + application/json: + schema: + type: string + example: '2017-03-01T13:00:00.000Z' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/historical-identity.yaml b/static/idn-api/beta/paths/historical-identity.yaml new file mode 100644 index 000000000..04f506991 --- /dev/null +++ b/static/idn-api/beta/paths/historical-identity.yaml @@ -0,0 +1,31 @@ +get: + operationId: getIdentity + tags: + - Identity History + summary: Gets the most recent snapshot of a specific identity + description: >- + This method retrieves a specified identity + Requires authorization scope of 'idn:identity-history:read' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The identity id + example: '8c190e6787aa4ed9a90bd9d5344523fb' + responses: + '200': + description: The identity object. + content: + application/json: + schema: + $ref: '../schemas/IdentityHistoryResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/iai-configuration.yaml b/static/idn-api/beta/paths/iai-configuration.yaml new file mode 100644 index 000000000..e163b0895 --- /dev/null +++ b/static/idn-api/beta/paths/iai-configuration.yaml @@ -0,0 +1,101 @@ +get: + operationId: getConfiguration + tags: + - IAI Configuration + summary: Return Specified IAI Configuration + description: >- + This gets a specific IAI configuration for a customer by type. + + Requires authorization scope of 'iai:configuration:read' + parameters: + - in: path + name: type + schema: + type: string + required: true + description: The configuration type + example: 'idn' + responses: + '200': + description: IAI configuration for a customer. + content: + application/json: + schema: + $ref: '../schemas/IaiConfigurationDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + # security: + # - bearerAuth: + # - 'iai:configuration:read' +put: + operationId: updateConfiguration + tags: + - IAI Configuration + summary: Update Specified IAI Configuration + description: >- + This updates a given configuration for a customer by type. + + Requires authorization scope of 'iai:configuration:update' + parameters: + - in: path + name: type + schema: + type: string + required: true + description: The configuration type + example: 'idn' + responses: + '200': + description: The updated configuration object. + content: + application/json: + schema: + $ref: '../schemas/IaiConfigurationDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + # security: + # - bearerAuth: + # - 'iai:configuration:update' +delete: + operationId: deleteConfiguration + tags: + - IAI Configuration + summary: Delete Specified IAI Configuration + description: >- + This deletes a given configuration for a customer by type. + + Requires authorization scope of 'iai:configuration:delete' + parameters: + - in: path + name: type + schema: + type: string + required: true + description: The configuration type + example: 'idn' + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + # security: + # - bearerAuth: + # - 'iai:configuration:delete' diff --git a/static/idn-api/beta/paths/iai-configurations.yaml b/static/idn-api/beta/paths/iai-configurations.yaml new file mode 100644 index 000000000..0ca71f0c1 --- /dev/null +++ b/static/idn-api/beta/paths/iai-configurations.yaml @@ -0,0 +1,79 @@ +get: + operationId: listConfigurations + tags: + - IAI Configuration + summary: Lists all IAI Configurations for a customer + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://app.getguru.com/card/crkL5RGi/WIP-V3-Standard-Collection-Parameters) + + + Filtering is supported for the following fields and operators: + + + **attributes**: *co, sw* + description: >- + This gets the list of IAI configurations for a customer in context. + + Requires authorization scope of iai:configuration:read + responses: + '200': + description: An list of IAI configurations for a customers. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/IaiConfigurationDto.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + # security: + # - bearerAuth: + # - 'iai:configuration:read' +post: + operationId: createConfiguration + summary: Creates an IAI configuration for a customer + tags: + - IAI Configuration + description: >- + This submits a create IAI configuration request to the IdentityAI, where it will be saved for the customer in context. This + return a result with the configuration '../schemas/IaiConfigurationDto.yaml' + + Requires authorization scope of 'iai:configuration:create' + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/IaiConfigurationDto.yaml' + responses: + '201': + description: Created. The IAI configuration for the customer + content: + application/json: + schema: + $ref: '../schemas/IaiConfigurationDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + # security: + # - bearerAuth: + # - 'iai:configuration:create' diff --git a/static/idn-api/beta/paths/iai-data-role-entitlement-identities.yaml b/static/idn-api/beta/paths/iai-data-role-entitlement-identities.yaml new file mode 100644 index 000000000..d801502dc --- /dev/null +++ b/static/idn-api/beta/paths/iai-data-role-entitlement-identities.yaml @@ -0,0 +1,68 @@ +get: + operationId: getRoleEntitlementIdentities + summary: Get Identities for a Role by Entitlements with/without entitlement + tags: + - IAI Data Roles + description: >- + This endpoint returns the identities for a role with or without the specified entitlement. + parameters: + - in: path + name: roleId + schema: + type: string + required: true + description: The role ID + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: query + name: entitlementId + description: Returns only identities in the specified role that have the specified entitlement. If no entitlment is specified, all identities in the role are returned. + required: false + style: form + explode: true + schema: + type: string + - in: query + name: hasEntitlement + description: Do the identities have the entitlementId or not (if entitlementId included, otherwise ignored) + required: false + style: form + explode: true + schema: + type: boolean + default: false + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: sorters + description: sort by name + required: false + style: form + explode: true + schema: + type: string + - in: query + name: filters + description: filter param by "starts with" for name + required: false + style: form + explode: true + schema: + type: string + responses: + '200': + description: Succeeded. Returns a list of identities for the role with/without the specified entitlement + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/IaiDataRoleEntitlementIdentity.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/iai-data-role-entitlements.yaml b/static/idn-api/beta/paths/iai-data-role-entitlements.yaml new file mode 100644 index 000000000..765bc78b9 --- /dev/null +++ b/static/idn-api/beta/paths/iai-data-role-entitlements.yaml @@ -0,0 +1,51 @@ +get: + operationId: getRoleEntitlements + summary: Get Entitlements for a Role + tags: + - IAI Data Roles + description: >- + This endpoint gets the entitlements in a role. (This endpoint does not get entitlements in a role that's contained in given role.) + parameters: + - in: path + name: roleId + schema: + type: string + required: true + description: The role id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: sorters + description: sort by name + required: false + style: form + explode: true + schema: + type: string + - in: query + name: filters + description: filter param by "starts with" for name + required: false + style: form + explode: true + schema: + type: string + responses: + '200': + description: Succeeded. Returns a list of entitlements for all the identities in a role + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/IaiDataRoleEntitlement.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/iai-data-role-identities-entitlements.yaml b/static/idn-api/beta/paths/iai-data-role-identities-entitlements.yaml new file mode 100644 index 000000000..18750d007 --- /dev/null +++ b/static/idn-api/beta/paths/iai-data-role-identities-entitlements.yaml @@ -0,0 +1,67 @@ +get: + operationId: getRoleIdentitiesEntitlements + summary: Get entitlements for all identities in a role + tags: + - IAI Data Roles + description: >- + This endpoint gets the entitlements for all identities in a role (which may contain entitlements not in the role). + parameters: + - in: path + name: roleId + schema: + type: string + required: true + description: The role id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: minPopularity + description: Return only entitlements above specified min popularity + required: false + style: form + explode: true + schema: + type: integer + - in: query + name: maxPopularityInOrg + description: Return only entitlements below specified max popularity in org + required: false + style: form + explode: true + schema: + type: integer + - in: query + name: sorters + description: sort by name + required: false + style: form + explode: true + schema: + type: string + - in: query + name: filters + description: filter param by "starts with" for name + required: false + style: form + explode: true + schema: + type: string + responses: + '200': + description: Succeeded. Returns a list of entitlements for all the identities in a role + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/IaiDataRoleIdentityEntitlement.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/iai-data-roles.yaml b/static/idn-api/beta/paths/iai-data-roles.yaml new file mode 100644 index 000000000..bf130f424 --- /dev/null +++ b/static/idn-api/beta/paths/iai-data-roles.yaml @@ -0,0 +1,43 @@ +get: + operationId: getRoles + summary: Get Roles for a Customer + tags: + - IAI Data Roles + description: >- + This endpoint returns the current roles for a customer. The returned roles can be filtered based on the assignable field. + parameters: + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **isAssignable**: *eq* "true" or "false" + required: false + style: form + explode: true + schema: + type: string + responses: + '200': + description: Succeeded. Returns a list of roles for a customer. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/IaiDataRole.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/identity-certifications-item-permissions.yaml b/static/idn-api/beta/paths/identity-certifications-item-permissions.yaml new file mode 100644 index 000000000..58ab808dd --- /dev/null +++ b/static/idn-api/beta/paths/identity-certifications-item-permissions.yaml @@ -0,0 +1,88 @@ +get: + operationId: getIdentityCertificationItemPermissions + tags: + - Certifications + summary: Permissions for Entitlement Certification Item + description: >- + This API returns the permissions associated with an entitlement certification item based on the certification item's + ID. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification + can also call this API. + parameters: + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Supported fields and primitive operators: + + + **target**: *eq, sw* + + + **rights**: *ca* + + + Supported composite operators: + + + *and, or* + + + All field values (second filter operands) are case-insensitive for this API. + + + Only a single *and* or *or* composite filter operator may be used. It must also be used between + a target filter and a rights filter, not between 2 filters for the same field. + + For example, + + + The following is valid: + + *?filters=rights+ca+(%22CREATE%22)+and+target+eq+%22SYS.OBJAUTH2%22* + + + The following is invalid: + + *?filters=rights+ca+(%22CREATE%22)+and+rights+ca+(%SELECT%22)* + - in: path + name: certificationId + schema: + type: string + required: true + description: The certification ID + example: ef38f94347e94562b5bb8424a56397d8 + - in: path + name: itemId + schema: + type: string + required: true + description: The certification item ID + example: 2c91808671bcbab40171bd945d961227 + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + responses: + '200': + description: A list of permissions associated with the given itemId + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/PermissionDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/identity-certifications-reassign-async.yaml b/static/idn-api/beta/paths/identity-certifications-reassign-async.yaml new file mode 100644 index 000000000..2fab2c6e2 --- /dev/null +++ b/static/idn-api/beta/paths/identity-certifications-reassign-async.yaml @@ -0,0 +1,42 @@ +post: + operationId: reassignIdentityCertsAsync + tags: + - Certifications + summary: Reassign Certifications Asynchronously + description: >- + This API initiates a task to reassign up to 500 identities or items in an identity campaign certification to another + reviewer. The `certification-tasks` API can be used to get an updated status on the task and determine when the + reassignment is complete. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for + this certification can also call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The identity campaign certification ID + requestBody: + required: true + content: + application/json: + schema: + $ref: "../../v3/schemas/ReviewReassign.yaml" + responses: + '200': + description: A certification task object for the reassignment which can be queried for status. + content: + application/json: + schema: + $ref: '../schemas/IdentityCertificationTask.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/identity-certifications-task-status.yaml b/static/idn-api/beta/paths/identity-certifications-task-status.yaml new file mode 100644 index 000000000..f122208f7 --- /dev/null +++ b/static/idn-api/beta/paths/identity-certifications-task-status.yaml @@ -0,0 +1,40 @@ +get: + operationId: getIdentityCertificationTaskStatus + tags: + - Certifications + summary: Certification Task Status + description: >- + This API returns the status of a certification task. A token with ORG_ADMIN or CERT_ADMIN authority is required to + call this API. Reviewers for this certification can also call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The identity campaign certification ID + - in: path + name: taskId + schema: + type: string + required: true + description: The certification task ID + responses: + '200': + description: A certification task object. + content: + application/json: + schema: + $ref: '../schemas/IdentityCertificationTask.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/identity-certifications-tasks-pending.yaml b/static/idn-api/beta/paths/identity-certifications-tasks-pending.yaml new file mode 100644 index 000000000..9744ce3f9 --- /dev/null +++ b/static/idn-api/beta/paths/identity-certifications-tasks-pending.yaml @@ -0,0 +1,37 @@ +get: + operationId: getIdentityCertificationPendingTasks + tags: + - Certifications + summary: Pending Certification Tasks + description: >- + This API returns the status of all pending (`QUEUED` or `IN_PROGRESS`) tasks for an identity campaign certification. + A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can + also call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The identity campaign certification ID + responses: + '200': + description: A list of pending (`QUEUED` or `IN_PROGRESS`) certification task objects. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/IdentityCertificationTask.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/identity-group-applications.yaml b/static/idn-api/beta/paths/identity-group-applications.yaml new file mode 100644 index 000000000..8112fc33f --- /dev/null +++ b/static/idn-api/beta/paths/identity-group-applications.yaml @@ -0,0 +1,43 @@ +get: + operationId: getApplications + summary: Applications by Identity Group + tags: + - IAI Identity Groups + description: >- + The Applications by Identity Group API returns an aggregation of all applications/sources for identity accounts originating with in the identity group. + parameters: + - in: path + name: identityGroupId + schema: + type: string + required: true + description: The identity group id + example: 'ff8081814d2a8036014d701f3fbf53fa' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://app.getguru.com/card/crkL5RGi/WIP-V3-Standard-Collection-Parameters) + Filtering is supported for the following fields and operators: + **attributes**: *eq, sw* + responses: + '200': + description: The applications for an identity group + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/BaseReferenceDto.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth : [] \ No newline at end of file diff --git a/static/idn-api/beta/paths/identity-group-distribution.yaml b/static/idn-api/beta/paths/identity-group-distribution.yaml new file mode 100644 index 000000000..d3d275bcc --- /dev/null +++ b/static/idn-api/beta/paths/identity-group-distribution.yaml @@ -0,0 +1,43 @@ +get: + operationId: getSummary + summary: Identity Group Summary + tags: + - IAI Identity Groups + description: >- + The Identity Group Summary returns a summary for the identity group. + parameters: + - in: path + name: identityGroupId + schema: + type: string + required: true + description: The identity group id + example: 'ff8081814d2a8036014d701f3fbf53fa' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://app.getguru.com/card/crkL5RGi/WIP-V3-Standard-Collection-Parameters) + Filtering is supported for the following fields and operators: + **attributes**: *eq, sw* + responses: + '200': + description: A summary of identity group + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/IdentityAttributeDistributionDto.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth : [] \ No newline at end of file diff --git a/static/idn-api/beta/paths/identity-group-entitlement-popularities.yaml b/static/idn-api/beta/paths/identity-group-entitlement-popularities.yaml new file mode 100644 index 000000000..b12786cb2 --- /dev/null +++ b/static/idn-api/beta/paths/identity-group-entitlement-popularities.yaml @@ -0,0 +1,43 @@ +get: + operationId: getEntitlementPopularities + summary: Popular Entitlements in an Identity Group + tags: + - IAI Identity Groups + description: >- + The Popular Entitlements in an Identity Group API returns a list of the popular entitlements for the identity group. + parameters: + - in: path + name: identityGroupId + schema: + type: string + required: true + description: The identity group id + example: 'ff8081814d2a8036014d701f3fbf53fa' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://app.getguru.com/card/crkL5RGi/WIP-V3-Standard-Collection-Parameters) + Filtering is supported for the following fields and operators: + **attributes**: *eq, sw* + responses: + '200': + description: The popular entitlements in an identity group + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/EntitlementPopularityDto.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth : [] \ No newline at end of file diff --git a/static/idn-api/beta/paths/identity-group-identities.yaml b/static/idn-api/beta/paths/identity-group-identities.yaml new file mode 100644 index 000000000..1c83490cd --- /dev/null +++ b/static/idn-api/beta/paths/identity-group-identities.yaml @@ -0,0 +1,43 @@ +get: + operationId: getIdentities + summary: Identities in an Identity Group + tags: + - IAI Identity Groups + description: >- + The Identities in an Identity Group API returns a list of identities associated with an identity group based on the group ID. + parameters: + - in: path + name: identityGroupId + schema: + type: string + required: true + description: The identity group id + example: 'ff8081814d2a8036014d701f3fbf53fa' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://app.getguru.com/card/crkL5RGi/WIP-V3-Standard-Collection-Parameters) + Filtering is supported for the following fields and operators: + **attributes**: *eq, sw* + responses: + '200': + description: The identities for an identity group + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/IdentityRefWithAttributes.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth : [] \ No newline at end of file diff --git a/static/idn-api/beta/paths/identity-group.yaml b/static/idn-api/beta/paths/identity-group.yaml new file mode 100644 index 000000000..2a048393b --- /dev/null +++ b/static/idn-api/beta/paths/identity-group.yaml @@ -0,0 +1,31 @@ +get: + operationId: getIdentityGroup + summary: Identity group by group id + tags: + - IAI Identity Groups + description: >- + This gets an specified identity group + parameters: + - in: path + name: identityGroupId + schema: + type: string + required: true + description: The identity group id + example: 'ff8081814d2a8036014d701f3fbf53fa' + responses: + '200': + description: An identity group for a customer. + content: + application/json: + schema: + type: object + $ref: '../schemas/IdentityGroupDto.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth : [] \ No newline at end of file diff --git a/static/idn-api/beta/paths/identity-groups.yaml b/static/idn-api/beta/paths/identity-groups.yaml new file mode 100644 index 000000000..2254e291e --- /dev/null +++ b/static/idn-api/beta/paths/identity-groups.yaml @@ -0,0 +1,69 @@ +get: + operationId: listIdentityGroups + summary: Identity Groups list + tags: + - IAI Identity Groups + description: >- + The Identity Groups List API returns a list of all identity groups. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://app.getguru.com/card/crkL5RGi/WIP-V3-Standard-Collection-Parameters) + Filtering is supported for the following fields and operators: + **attributes**: *eq, sw* + responses: + '200': + description: A list of identity groups for the customer. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/IdentityGroupDto.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth : [] +post: + operationId: createIdentityGroup + summary: Creates Identity Group + tags: + - IAI Identity Groups + description: >- + The Create Identity Group API is used to create a new identity group. The request is submitted to IdentityAI where it is saved. + The API returns a result that includes the identity group ID. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/IdentityGroupDto.yaml' + responses: + '200': + description: The created identity group for the customer + content: + application/json: + schema: + $ref: '../schemas/IdentityGroupDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth : [] \ No newline at end of file diff --git a/static/idn-api/beta/paths/identity-profile-default-config.yaml b/static/idn-api/beta/paths/identity-profile-default-config.yaml new file mode 100644 index 000000000..1d559c2fb --- /dev/null +++ b/static/idn-api/beta/paths/identity-profile-default-config.yaml @@ -0,0 +1,42 @@ +get: + operationId: getDefaultIdentityAttributeConfig + tags: + - Identity Profiles + summary: Gets the default identity attribute config + description: >- + This returns the default identity attribute config + + A token with ORG_ADMIN authority is required to call this API to get the default identity attribute config. + parameters: + - in: path + name: identity-profile-id + schema: + type: string + format: uuid + required: true + description: The Identity Profile ID + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: An Identity Attribute Config object + content: + application/json: + schema: + $ref: '../schemas/IdentityAttributeConfig.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:identity-profile-default-mapping:read' + + diff --git a/static/idn-api/beta/paths/identity-profile-lifecycle-state.yaml b/static/idn-api/beta/paths/identity-profile-lifecycle-state.yaml new file mode 100644 index 000000000..a9d710333 --- /dev/null +++ b/static/idn-api/beta/paths/identity-profile-lifecycle-state.yaml @@ -0,0 +1,127 @@ +get: + operationId: listLifecycleStates + tags: + - Lifecycle States + summary: Lifecycle State + description: | + This endpoint returns a lifecycle state. + + A token with ORG_ADMIN or API authority is required to call this API. + parameters: + - in: path + name: identity-profile-id + description: >- + Identity Profile ID + required: true + schema: + type: string + - in: path + name: lifecycle-state-id + description: >- + Lifecycle State ID + required: true + schema: + type: string + responses: + '200': + description: lifecycle-state + content: + application/json: + schema: + $ref: '../schemas/LifecycleState.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + +patch: + operationId: updateLifecycleStates + tags: + - Lifecycle States + summary: Update Lifecycle State + description: | + This API updates individual lifecycle state fields using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + + A token with ORG_ADMIN or API authority is required to call this API. + parameters: + - in: path + name: identity-profile-id + description: >- + Identity Profile ID + required: true + schema: + type: string + - in: path + name: lifecycle-state-id + description: >- + Lifecycle State ID + required: true + schema: + type: string + requestBody: + required: true + description: | + A list of lifecycle state update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + + The following fields can be updated: + * enabled + * description + * accountActions + * accessProfileIds + * emailNotificationOption + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + example: + - op: "replace" + path: "/description" + value: "Updated description!" + - op: "replace" + path: "/accessProfileIds" + value: + - "2c918087742bab150174407a80f3125e" + - "2c918087742bab150174407a80f3124f" + - op: "replace" + path: "/accountActions" + value: + - "action": "ENABLE" + "sourceIds": + - "2c9180846a2f82fb016a481c1b1560c5" + - "2c9180846a2f82fb016a481c1b1560cc" + - "action": "DISABLE" + "sourceIds": + - "2c91808869a0c9980169a207258513fb" + - op: "replace" + path: "/emailNotificationOption" + value: + "notifyManagers": true + "notifyAllAdmins": false + "notifySpecificUsers": false + "emailAddressList": [] + responses: + '200': + description: >- + Updated lifecycle-state. + content: + application/json: + schema: + $ref: '../schemas/LifecycleState.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/identity-profile-refresh-identities.yaml b/static/idn-api/beta/paths/identity-profile-refresh-identities.yaml new file mode 100644 index 000000000..5109b3f9e --- /dev/null +++ b/static/idn-api/beta/paths/identity-profile-refresh-identities.yaml @@ -0,0 +1,39 @@ +post: + operationId: refreshIdentityProfile + tags: + - Identity Profiles + summary: Refreshes all the identities under this profile + description: >- + This refreshes all identities under the profile + + A token with ORG_ADMIN authority is required to call this API to refresh identities under this Identity Profile. + parameters: + - in: path + name: identity-profile-id + schema: + type: string + format: uuid + required: true + description: The Identity Profile ID to be refreshed + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '202': + description: Accepted status after all refreshes have launched + $ref: '../../v3/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:identity-profile:refresh' + + diff --git a/static/idn-api/beta/paths/identity-profile.yaml b/static/idn-api/beta/paths/identity-profile.yaml new file mode 100644 index 000000000..27e15dd97 --- /dev/null +++ b/static/idn-api/beta/paths/identity-profile.yaml @@ -0,0 +1,147 @@ +get: + operationId: getIdentityProfile + tags: + - Identity Profiles + summary: Gets a single Identity Profile + description: >- + This returns a single Identity Profile based on ID. + + A token with ORG_ADMIN or API authority is required to call this API. + parameters: + - in: path + name: identity-profile-id + schema: + type: string + format: uuid + required: true + description: The Identity Profile ID + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: An Identity Profile object + content: + application/json: + schema: + $ref: '../schemas/IdentityProfile.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:identity-profile:read' + +delete: + operationId: deleteIdentityProfile + tags: + - Identity Profiles + summary: Delete an Identity Profile + description: >- + This deletes an Identity Profile based on ID. + + A token with ORG_ADMIN authority is required to call this API to delete an Identity Profile. + parameters: + - in: path + name: identity-profile-id + schema: + type: string + format: uuid + required: true + description: The Identity Profile ID. + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '202': + description: Accepted - Returned if the request was successfully accepted into the system. + content: + application/json: + schema: + $ref: '../schemas/BaseReferenceDto.yaml' + description: An object with a TaskResult reference of the delete job. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:identity-profile:delete' + +patch: + operationId: updateIdentityProfile + tags: + - Identity Profiles + summary: Update the Identity Profile + description: >- + This updates the specified Identity Profile. + + A token with ORG_ADMIN authority is required to call this API to update the Identity Profile. + Some fields of the Schema cannot be updated. These fields are listed below. + + * id + + * name + + * created + + * modified + parameters: + - in: path + name: identity-profile-id + schema: + type: string + format: uuid + required: true + description: The Identity Profile ID + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + description: >- + A list of Identity Profile update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + example: + - op: "replace" + path: "/description" + value: "Updated description!" + responses: + '200': + description: >- + The updated Identity Profile. + content: + application/json: + schema: + $ref: '../schemas/IdentityProfile.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:identity-profile:update' diff --git a/static/idn-api/beta/paths/identity-profiles-bulk-delete.yaml b/static/idn-api/beta/paths/identity-profiles-bulk-delete.yaml new file mode 100644 index 000000000..bf63752be --- /dev/null +++ b/static/idn-api/beta/paths/identity-profiles-bulk-delete.yaml @@ -0,0 +1,40 @@ +post: + operationId: deleteIdentityProfiles + tags: + - Identity Profiles + summary: Delete Identity Profiles + description: >- + This deletes multiple Identity Profiles via a list of supplied IDs. + + On success, this endpoint will return a reference to the bulk delete task result. + + A token with ORG_ADMIN authority is required to call this API to delete a list of Identity Profiles. + requestBody: + description: Identity Profile bulk delete request body. + required: true + content: + application/json: + schema: + $ref: '../schemas/IdentityProfileBulkDelete.yaml' + + responses: + '202': + description: Accepted - Returned if the request was successfully accepted into the system. + content: + application/json: + schema: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: An object with a TaskResult reference of the bulk delete job + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:identity-profile:delete' diff --git a/static/idn-api/beta/paths/identity-profiles-export.yaml b/static/idn-api/beta/paths/identity-profiles-export.yaml new file mode 100644 index 000000000..d52380805 --- /dev/null +++ b/static/idn-api/beta/paths/identity-profiles-export.yaml @@ -0,0 +1,63 @@ +get: + operationId: exportIdentityProfiles + tags: + - Identity Profiles + summary: Export Identity Profiles + description: >- + This exports existing identity profiles in the format specified by the sp-config service. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, ne* + + + **name**: *eq, ne* + + + **priority**: *eq, ne* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **id**, **name**, **priority** + responses: + '200': + description: List of export objects with identity profiles. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/IdentityProfileExportedObject.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:identity-profile:read' diff --git a/static/idn-api/beta/paths/identity-profiles-id.yaml b/static/idn-api/beta/paths/identity-profiles-id.yaml new file mode 100644 index 000000000..1937a6f9d --- /dev/null +++ b/static/idn-api/beta/paths/identity-profiles-id.yaml @@ -0,0 +1,101 @@ +delete: + operationId: deleteIdentityProfile + tags: + - Identity Profiles + summary: Delete an Identity Profile + description: >- + This API endpoint deletes an Identity Profile based on its ID. + + A token with ORG_ADMIN authority is required to call this API to delete an Identity Profile. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Identity Profile ID. + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '202': + description: Accepted - Returned if the request was successfully accepted into the system. + content: + application/json: + schema: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: A DTO with a TaskResult reference of the delete job + '401': + $ref: '../../v3/responses/401.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:identity-profile:delete' + +patch: + operationId: updateIdentityProfile + tags: + - Identity Profiles + summary: Update the Identity Profile + description: >- + This update the specified Identity Profile. + + A token with ORG_ADMIN authority is required to call this API to update the Identity Profile. + Some fields of the Schema cannot be updated. These fields are listed below. + + * id + + * name + + * created + + * modified + security: + - bearerAuth: + - 'idn:identity-profile:update' + parameters: + - in: path + name: id + schema: + type: string + format: uuid + required: true + description: The Identity Profile ID + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + description: >- + A list of Identity Profile update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + example: + - op: "replace" + path: "/description" + value: "Updated description!" + responses: + '200': + description: >- + The updated Identity Profile. + content: + application/json: + schema: + $ref: '../schemas/IdentityProfile.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/identity-profiles-identity-preview.yaml b/static/idn-api/beta/paths/identity-profiles-identity-preview.yaml new file mode 100644 index 000000000..a93405cec --- /dev/null +++ b/static/idn-api/beta/paths/identity-profiles-identity-preview.yaml @@ -0,0 +1,39 @@ +post: + operationId: generateIdentityPreview + tags: + - Identity Profiles + summary: Generate Identity Profile Preview + description: >- + This generates a non-persisted IdentityDetails object that will represent + as the preview of the identities attribute when the given policy's + attribute config is applied. + + A token with ORG_ADMIN authority is required to call this API to generate an identity preview. + requestBody: + description: Identity Preview request body. + required: true + content: + application/json: + schema: + $ref: '../schemas/IdentityPreviewRequest.yaml' + responses: + '200': + description: >- + Object representing the preview object with all of the identity attributes using the current mappings. + content: + application/json: + schema: + $ref: '../schemas/IdentityPreviewResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:identity-profile:preview' diff --git a/static/idn-api/beta/paths/identity-profiles-import.yaml b/static/idn-api/beta/paths/identity-profiles-import.yaml new file mode 100644 index 000000000..93b60f3b0 --- /dev/null +++ b/static/idn-api/beta/paths/identity-profiles-import.yaml @@ -0,0 +1,36 @@ +post: + operationId: importIdentityProfiles + summary: Import Identity Profiles + description: >- + This imports previously exported identity profiles. + tags: + - Identity Profiles + requestBody: + description: Previously exported Identity Profiles. + required: true + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/IdentityProfileExportedObject.yaml' + responses: + '200': + description: The result of importing Identity Profiles. + content: + application/json: + schema: + $ref: '../schemas/ObjectImportResult.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:identity-profile:create' diff --git a/static/idn-api/beta/paths/identity-profiles.yaml b/static/idn-api/beta/paths/identity-profiles.yaml new file mode 100644 index 000000000..35bc0f044 --- /dev/null +++ b/static/idn-api/beta/paths/identity-profiles.yaml @@ -0,0 +1,100 @@ +get: + operationId: listIdentityProfiles + tags: + - Identity Profiles + summary: Identity Profiles list + description: >- + This returns a list of Identity Profiles based on the specified query parameters. + + A token with ORG_ADMIN or API authority is required to call this API to get a list of Identity Profiles. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, ne* + + + **name**: *eq, ne* + + + **priority**: *eq, ne* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **id**, **name**, **priority** + responses: + '200': + description: List of identityProfiles. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/IdentityProfile.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:identity-profile:read' + +post: + operationId: createIdentityProfile + summary: Create an Identity Profile + description: >- + This creates an Identity Profile + + A token with ORG_ADMIN authority is required to call this API to create an Identity Profile. + tags: + - Identity Profiles + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/IdentityProfile.yaml' + responses: + '201': + description: The created Identity Profile + content: + application/json: + schema: + $ref: '../schemas/IdentityProfile.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:identity-profile:create' + diff --git a/static/idn-api/beta/paths/identity-set-lifecycle-state.yaml b/static/idn-api/beta/paths/identity-set-lifecycle-state.yaml new file mode 100644 index 000000000..2c36eb014 --- /dev/null +++ b/static/idn-api/beta/paths/identity-set-lifecycle-state.yaml @@ -0,0 +1,54 @@ +post: + operationId: setLifecycleState + tags: + - Lifecycle States + summary: Set Lifecycle State + description: | + This endpoint will set/update an identity's lifecycle state to the one provided and updates the corresponding Identity Profile. + + A token with ORG_ADMIN or API authority is required to call this API. + parameters: + - in: path + name: identity-id + description: >- + The ID of the identity to update + required: true + example: 2c9180857893f1290178944561990364 + schema: + type: string + format: uuid + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + lifecycleStateId: + type: string + format: uuid + description: The ID of the lifecycle state to set + example: 2c9180877a86e408017a8c19fefe046c + responses: + '200': + description: OK - Returned if the request was successfully accepted into the system. + content: + application/json: + schema: + type: object + properties: + accountActivityId: + type: string + format: uuid + example: 2c9180837ab5b716017ab7c6c9ef1e20 + description: The ID of the IdentityRequest object that was generated when the workflow launches + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/identity-synchronize-attributes.yaml b/static/idn-api/beta/paths/identity-synchronize-attributes.yaml new file mode 100644 index 000000000..3c58e5f9c --- /dev/null +++ b/static/idn-api/beta/paths/identity-synchronize-attributes.yaml @@ -0,0 +1,45 @@ +post: + operationId: synchronizeAttributesForIdentity + tags: + - Identities + summary: Attribute synchronization for single identity. + description: >- + This end-point performs attribute synchronization for a selected identity. + The endpoint can be called once in 10 seconds per identity. + A token with ORG_ADMIN or API authority is required to call this API. + parameters: + - in: path + name: identityId + schema: + type: string + required: true + description: The Identity id + responses: + '202': + description: An Identity Sync job + content: + application/json: + schema: + $ref: '../schemas/IdentitySyncJob.yaml' + example: + { + "id": "0f11f2a4-7c94-4bf3-a2bd-742580fe3dfc", + "status": "IN_PROGRESS", + "payload": + { + "type": "SYNCHRONIZE_IDENTITY_ATTRIBUTES", + "dataJson": "{\"identityId\":\"2c918083746f642c01746f990884012a\"}" + } + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/identity-team.yaml b/static/idn-api/beta/paths/identity-team.yaml new file mode 100644 index 000000000..79ffaa742 --- /dev/null +++ b/static/idn-api/beta/paths/identity-team.yaml @@ -0,0 +1,36 @@ +get: + operationId: getTeamSummary + tags: + - Identities + summary: Get team summary by identityId + description: >- + This returns reference to a given identity’s manager, and the count of Identities that are managed by the provided identity. + parameters: + - in: path + name: identityId + description: >- + The ID of the identity to build the team summary + required: true + example: 2c9180857893f1290178944561990364 + schema: + type: string + responses: + '200': + description: Returns reference to a given identity’s manager, and the count of Identities that are managed by the provided identity + content: + application/json: + schema: + type: object + $ref: '../schemas/TeamSummaryDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/identity.yaml b/static/idn-api/beta/paths/identity.yaml new file mode 100644 index 000000000..2872885e9 --- /dev/null +++ b/static/idn-api/beta/paths/identity.yaml @@ -0,0 +1,121 @@ +head: + operationId: identityExistsById + tags: + - Identities + summary: Check if identity exists + description: >- + The API returns successful response if the requested identity exists and not found error if it doesn`t. + A token with ORG_ADMIN authority is required to call this API. + parameters: + - in: path + name: identityId + schema: + type: string + required: true + description: Identity Id + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '204': + description: If an identity with the passed identityId exists. + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + +delete: + operationId: deleteIdentity + tags: + - Identities + summary: Deletes an identity. + description: >- + The API returns successful response if the requested identity was deleted. + A token with ORG_ADMIN authority is required to call this API. + parameters: + - in: path + name: identityId + schema: + type: string + required: true + description: Identity Id + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '400': + description: >- + Client Error - Returned if the request body is invalid. It may indicate that the specified identity is marked as protected and cannot be deleted. + content: + application/json: + schema: + $ref: '../../v3/schemas/ErrorResponseDto.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + +patch: + operationId: patchIdentity + tags: + - Internal Use Only + summary: Update an Identity + description: >- + Allows updating individual fields on an Identity using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + This endpoint is internal only and not intended to be moved to V3. + When HEAD and DELETE endpoints are moved to V3 we will need to separate this entity and keep PATCH in beta only. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the identity being modified. + example: 2c9180835d191a86015d28455b4a2329 + requestBody: + required: true + description: >- + A list of identity update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + + The following fields are patchable: + * internalCloudStatus + content: + application/json-patch+json: + schema: + type: array + items: + type: object + example: + - op: "replace" + path: "/internalCloudStatus" + value: "UNREGISTERED" + responses: + '200': + description: >- + Indicates the PATCH operation succeeded, and returns the identity's new representation. + content: + application/json: + schema: + $ref: '../../beta/schemas/InternalIdentityDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/internal-password-sync-groups.yaml b/static/idn-api/beta/paths/internal-password-sync-groups.yaml new file mode 100644 index 000000000..77879425a --- /dev/null +++ b/static/idn-api/beta/paths/internal-password-sync-groups.yaml @@ -0,0 +1,35 @@ +get: + operationId: getPasswordSyncGroupsForInternal + tags: + - Password + summary: Get Password Sync Group List + description: >- + This API returns a list of password sync groups by source ID or password policy ID. Return an empty list if there is no sync group found. + parameters: + - in: query + name: passwordPolicyId + schema: + type: string + description: The ID of the password policy for password sync groups + example: 40289f65762537580176255dd2080002 + - in: query + name: sourceId + schema: + type: string + description: The ID of the source in the password sync group + example: 2c918083746f642c01746f990884012a + responses: + '200': + description: A list of password sync groups that meet the query condition. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/PasswordSyncGroup.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/lifecycle-states.yaml b/static/idn-api/beta/paths/lifecycle-states.yaml new file mode 100644 index 000000000..6f596b988 --- /dev/null +++ b/static/idn-api/beta/paths/lifecycle-states.yaml @@ -0,0 +1,89 @@ +get: + operationId: listLifecycleStates + tags: + - Lifecycle States + summary: Lifecycle States List + description: | + This endpoint returns a list of lifecycle states associated with an Identity Profile. + + A token with ORG_ADMIN or API authority is required to call this API. + parameters: + - in: path + name: identity-profile-id + description: >- + Identity Profile ID + required: true + schema: + type: string + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **created, modified** + responses: + '200': + description: List of lifecycle-states + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/LifecycleState.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + +post: + operationId: createLifecycleState + tags: + - Lifecycle States + summary: Lifecycle State Create + description: | + This endpoint creates a new lifecycle state. + + A token with ORG_ADMIN or API authority is required to call this API. + parameters: + - in: path + name: identity-profile-id + description: >- + Identity Profile ID + required: true + schema: + type: string + requestBody: + description: Lifecycle State + required: true + content: + application/json: + schema: + $ref: '../schemas/LifecycleState.yaml' + responses: + '201': + description: lifecycle-state + content: + application/json: + schema: + $ref: '../schemas/LifecycleState.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/managed-client-status.yaml b/static/idn-api/beta/paths/managed-client-status.yaml new file mode 100644 index 000000000..c8fd01d23 --- /dev/null +++ b/static/idn-api/beta/paths/managed-client-status.yaml @@ -0,0 +1,85 @@ +get: + tags: + - Managed Clients + summary: Get a specified Managed Client Status. + description: Retrieve Managed Client Status by ID. + operationId: getClientStatus + parameters: + - name: id + in: path + description: ID of the Managed Client Status to get + required: true + schema: + type: string + example: aClientId + - name: type + in: query + description: Type of the Managed Client Status to get + required: true + schema: + $ref: '../schemas/ManagedClientType.yaml' + example: VA + responses: + "200": + description: Responds with Managed Client Status having the given ID and Type. + content: + application/json: + schema: + $ref: '../schemas/ManagedClientStatus.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-client-status:read' +post: + tags: + - Managed Clients + summary: Handle a status request from a client + description: Update a status detail passed in from the client + operationId: updateStatus + parameters: + - name: id + in: path + description: ID of the Managed Client Status to update + required: true + schema: + type: string + example: aClientId + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/ManagedClientStatus.yaml' + responses: + "200": + description: Responds with the updated Managed Client Status. + content: + application/json: + schema: + $ref: '../schemas/ManagedClientStatusAggResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-client-status:update' \ No newline at end of file diff --git a/static/idn-api/beta/paths/managed-clients-credentials.yaml b/static/idn-api/beta/paths/managed-clients-credentials.yaml new file mode 100644 index 000000000..463021c6a --- /dev/null +++ b/static/idn-api/beta/paths/managed-clients-credentials.yaml @@ -0,0 +1,37 @@ +post: + tags: + - Managed Clients + summary: Request new AWS credentials + description: >- + This API is used by client instances to request new AWS credentials. + operationId: requestCredentials + parameters: + - name: id + in: path + description: The Managed Client ID + required: true + schema: + type: string + example: aClientId + responses: + "200": + description: Responds with a AWSCredentialsResponse + content: + application/json: + schema: + $ref: '../schemas/AWSCredentialsResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-client:read' \ No newline at end of file diff --git a/static/idn-api/beta/paths/managed-clients-path.yaml b/static/idn-api/beta/paths/managed-clients-path.yaml new file mode 100644 index 000000000..9c4bafde3 --- /dev/null +++ b/static/idn-api/beta/paths/managed-clients-path.yaml @@ -0,0 +1,113 @@ +get: + tags: + - Managed Clients + summary: Get a Managed Client + description: >- + Get a Managed Client. + operationId: getManagedClient + parameters: + - name: id + in: path + description: The Managed Client ID + required: true + schema: + type: string + example: aClientId + responses: + "200": + description: Responds with a ManagedClient + content: + application/json: + schema: + $ref: '../schemas/ManagedClient.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-client:read' +patch: + tags: + - Managed Clients + summary: Update a Managed Clients + description: >- + Update an existing Managed Client. + operationId: updateManagedClient + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Managed Client ID + example: aClientId + requestBody: + required: true + description: The JSONPatch payload used to update the schema. + content: + application/json-patch+json: + schema: + $ref: '../schemas/JsonPatch.yaml' + responses: + "200": + description: The updated ManagedClient + content: + application/json: + schema: + $ref: '../schemas/ManagedClient.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-client:update' +delete: + operationId: deleteManagedClient + tags: + - Managed Clients + summary: Delete a Managed Client + description: >- + Delete an existing Managed Client. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Managed Client ID + example: aClientId + responses: + '204': + $ref: '../../v3/responses/204.yaml' + description: The Managed Client was successfully deleted. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-client:delete' diff --git a/static/idn-api/beta/paths/managed-clients.yaml b/static/idn-api/beta/paths/managed-clients.yaml new file mode 100644 index 000000000..d70994452 --- /dev/null +++ b/static/idn-api/beta/paths/managed-clients.yaml @@ -0,0 +1,94 @@ +get: + tags: + - Managed Clients + summary: Get Managed Clients + description: >- + Get a list of Managed Clients. + operationId: getManagedClients + parameters: + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filtering is supported for the following fields and operators: + + + **alertKey**: *eq* + **apiGatewayBaseUrl**: *eq* + **clientId**: *eq* + **clusterId**: *eq* + **cookbook**: *eq* + **description**: *eq* + **ipAddress**: *eq* + **lastSeen**: *eq* + **name**: *eq* + **sinceLastSeen**: *eq* + **status**: *eq* + **type**: *eq* + **vaDownloadUrl**: *eq* + **vaVersion**: *eq* + responses: + "200": + description: Responds with a list of ManagedClient based on the query params provided + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/ManagedClient.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-client:read' +post: + tags: + - Managed Clients + summary: Create new Managed Clients + description: >- + Create a new Managed Client. + + The API returns a result that includes the Managed Client ID. + operationId: createManagedClient + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/ManagedClient.yaml' + responses: + "200": + description: The created ManagedClient + content: + application/json: + schema: + $ref: '../schemas/ManagedClient.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-client:create' diff --git a/static/idn-api/beta/paths/managed-cluster-cache.yaml b/static/idn-api/beta/paths/managed-cluster-cache.yaml new file mode 100644 index 000000000..04ad317b1 --- /dev/null +++ b/static/idn-api/beta/paths/managed-cluster-cache.yaml @@ -0,0 +1,43 @@ +delete: + tags: + - Managed Clusters + summary: Clear Clusters cache + description: >- + Clear Clusters cache. + operationId: clearManagedClustersCache + parameters: + - in: query + name: pod + required: true + schema: + type: string + description: The cluster pod. Required + - in: query + name: org + schema: + type: string + description: The cluster org. Required if the cluster id was set. + - in: query + name: clusterId + schema: + type: string + description: The cluster id + responses: + '202': + description: Accepted. Delete request accepted and is in progress. + $ref: '../../v3/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster:delete' diff --git a/static/idn-api/beta/paths/managed-cluster-jobs.yaml b/static/idn-api/beta/paths/managed-cluster-jobs.yaml new file mode 100644 index 000000000..eb9e96956 --- /dev/null +++ b/static/idn-api/beta/paths/managed-cluster-jobs.yaml @@ -0,0 +1,44 @@ +get: + tags: + - Managed Clusters + summary: Retrieve all Managed Cluster jobs + description: >- + Retrieve all Managed Cluster cached Redis jobs for the given cluster ID. + + AMS Security: Devops, Internal, OrgAdmin + A token with SaaS Platform Internal or DevOps or Org Admin is required to access this endpoint. + operationId: getManagedClusterJobs + parameters: + - name: id + in: path + description: ID of the cluster to upgrade + required: true + style: simple + explode: false + schema: + type: string + example: aClusterId + responses: + "200": + description: Responds with a list of VaJob. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/VaJob.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster-jobs:read' diff --git a/static/idn-api/beta/paths/managed-cluster-log-config.yaml b/static/idn-api/beta/paths/managed-cluster-log-config.yaml new file mode 100644 index 000000000..eda0bf4dc --- /dev/null +++ b/static/idn-api/beta/paths/managed-cluster-log-config.yaml @@ -0,0 +1,73 @@ +get: + tags: + - Managed Clusters + summary: get ManagedCluster Log Configuration for a specified cluster + description: Get log configuration for a managed cluster. + operationId: getClientLogConfiguration + parameters: + - name: id + in: path + description: ID of the ManagedCluster to get log configuration for + required: true + style: simple + explode: false + schema: + type: string + example: aClusterId + responses: + "200": + description: ManagedCluster log configuration matching the given cluster ID + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/ClientLogConfiguration.yaml' + "400": + $ref: '../../v3/responses/400.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + "404": + $ref: '../../v3/responses/404.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster-log-config:read' +put: + tags: + - Managed Clusters + summary: Update log configuration for a specified cluster. + description: Update log configuration for a managed cluster. + operationId: updateClientLogConfiguration + parameters: + - name: id + in: path + description: ID of the ManagedCluster to update log configuration for + required: true + style: simple + explode: false + schema: + type: string + example: aClusterId + requestBody: + description: ClientLogConfiguration for the given ManagedCluster + content: + application/json: + schema: + $ref: '../schemas/ClientLogConfiguration.yaml' + required: true + responses: + "200": + description: Responds with updated ClientLogConfiguration for the given ManagedCluster. + content: + application/json: + schema: + $ref: '../schemas/ClientLogConfiguration.yaml' + "400": + $ref: '../../v3/responses/400.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + "404": + $ref: '../../v3/responses/404.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster-log-config:write' diff --git a/static/idn-api/beta/paths/managed-cluster-path-full.yaml b/static/idn-api/beta/paths/managed-cluster-path-full.yaml new file mode 100644 index 000000000..1f261ca4c --- /dev/null +++ b/static/idn-api/beta/paths/managed-cluster-path-full.yaml @@ -0,0 +1,108 @@ +get: + tags: + - Managed Clusters + summary: Get a specified ManagedCluster. + description: Retrieve a ManagedCluster by ID. + operationId: getManagedCluster + parameters: + - name: id + in: path + description: ID of the ManagedCluster to get + required: true + style: simple + explode: false + schema: + type: string + example: aClusterId + responses: + "200": + description: Responds with ManagedCluster having the given ID. + content: + application/json: + schema: + $ref: '../schemas/ManagedCluster.yaml' + "400": + $ref: '../../v3/responses/400.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + "404": + $ref: '../../v3/responses/404.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster:read' +patch: + tags: + - Managed Clusters + summary: Update a Managed Cluster + description: >- + Update an existing Managed Cluster. + operationId: updateManagedCluster + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Managed Cluster ID + example: aClusterId + requestBody: + required: true + description: The JSONPatch payload used to update the schema. + content: + application/json-patch+json: + schema: + $ref: '../schemas/JsonPatch.yaml' + responses: + "200": + description: The updated Managed Cluster + content: + application/json: + schema: + $ref: '../schemas/ManagedCluster.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster:update' +delete: + operationId: deleteManagedCluster + tags: + - Managed Clusters + summary: Delete a Managed Cluster + description: >- + Delete an existing Managed Cluster. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Managed Cluster ID + example: aClusterId + responses: + '204': + $ref: '../../v3/responses/204.yaml' + description: The Managed Cluster was successfully deleted. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster:delete' diff --git a/static/idn-api/beta/paths/managed-cluster-path-internal.yaml b/static/idn-api/beta/paths/managed-cluster-path-internal.yaml new file mode 100644 index 000000000..84d05539c --- /dev/null +++ b/static/idn-api/beta/paths/managed-cluster-path-internal.yaml @@ -0,0 +1,76 @@ +patch: + tags: + - Managed Clusters + summary: Update a Managed Cluster + description: >- + Update an existing Managed Cluster. + operationId: updateManagedCluster + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Managed Cluster ID + example: aClusterId + requestBody: + required: true + description: The JSONPatch payload used to update the schema. + content: + application/json-patch+json: + schema: + $ref: '../schemas/JsonPatch.yaml' + responses: + "200": + description: The updated Managed Cluster + content: + application/json: + schema: + $ref: '../schemas/ManagedCluster.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster:update' +delete: + operationId: deleteManagedCluster + tags: + - Managed Clusters + summary: Delete a Managed Cluster + description: >- + Delete an existing Managed Cluster. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Managed Cluster ID + example: aClusterId + responses: + '204': + $ref: '../../v3/responses/204.yaml' + description: The Managed Cluster was successfully deleted. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster:delete' diff --git a/static/idn-api/beta/paths/managed-cluster-path.yaml b/static/idn-api/beta/paths/managed-cluster-path.yaml new file mode 100644 index 000000000..5c61f8124 --- /dev/null +++ b/static/idn-api/beta/paths/managed-cluster-path.yaml @@ -0,0 +1,32 @@ +get: + tags: + - Managed Clusters + summary: Get a specified ManagedCluster. + description: Retrieve a ManagedCluster by ID. + operationId: getManagedCluster + parameters: + - name: id + in: path + description: ID of the ManagedCluster to get + required: true + style: simple + explode: false + schema: + type: string + example: aClusterId + responses: + "200": + description: Responds with ManagedCluster having the given ID. + content: + application/json: + schema: + $ref: '../schemas/ManagedCluster.yaml' + "400": + $ref: '../../v3/responses/400.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + "404": + $ref: '../../v3/responses/404.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster:read' diff --git a/static/idn-api/beta/paths/managed-cluster-processes.yaml b/static/idn-api/beta/paths/managed-cluster-processes.yaml new file mode 100644 index 000000000..0f76b47ce --- /dev/null +++ b/static/idn-api/beta/paths/managed-cluster-processes.yaml @@ -0,0 +1,40 @@ +get: + tags: + - Managed Clusters + summary: Retrieve all Managed Cluster processes + description: Retrieve a list of the ManagedProcesses that this particular VA instance is configured for. + operationId: getManagedClusterProcesses + parameters: + - name: id + in: path + description: ID of the Managed Cluster + required: true + style: simple + explode: false + schema: + type: string + example: aClusterId + responses: + "200": + description: Responds with a list of ManagedProcessConfiguration. + content: + application/json: + schema: + type: object + additionalProperties: + $ref: '../schemas/ManagedProcessConfiguration.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-process:read' diff --git a/static/idn-api/beta/paths/managed-cluster-reboot.yaml b/static/idn-api/beta/paths/managed-cluster-reboot.yaml new file mode 100644 index 000000000..af005aef1 --- /dev/null +++ b/static/idn-api/beta/paths/managed-cluster-reboot.yaml @@ -0,0 +1,41 @@ +post: + tags: + - Managed Clusters + summary: Reboot a cluster's VAs + description: >- + Reboot a clusters VAs manual call + + AMS Security: API, Internal + A token with SYSTEM_ADMINISTRATOR authority is required to call this API. + operationId: rebootCluster + parameters: + - name: id + in: path + description: ID of the cluster to reboot + required: true + style: simple + explode: false + schema: + type: string + example: aClusterId + + responses: + "200": + description: Responds with updated UpgradeClusterConfig for the given ManagedCluster. + content: + application/json: + schema: + $ref: '../schemas/ClusterUpgradeData.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster:update' \ No newline at end of file diff --git a/static/idn-api/beta/paths/managed-cluster-status.yaml b/static/idn-api/beta/paths/managed-cluster-status.yaml new file mode 100644 index 000000000..fbc2f5ab6 --- /dev/null +++ b/static/idn-api/beta/paths/managed-cluster-status.yaml @@ -0,0 +1,36 @@ +get: + tags: + - Managed Clusters + summary: Get a specified Managed Cluster Status. + description: Retrieve Managed Cluster Status by ID. + operationId: getManagedClusterStatus + parameters: + - name: id + in: path + description: ID of the Managed Cluster Status to get + required: true + schema: + type: string + example: aClusterId + responses: + "200": + description: Responds with Managed Cluster Status having the given ID. + content: + application/json: + schema: + $ref: '../schemas/ManagedClusterStatus.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster-status:read' diff --git a/static/idn-api/beta/paths/managed-cluster-types-path.yaml b/static/idn-api/beta/paths/managed-cluster-types-path.yaml new file mode 100644 index 000000000..d318f22ea --- /dev/null +++ b/static/idn-api/beta/paths/managed-cluster-types-path.yaml @@ -0,0 +1,122 @@ +get: + tags: + - Managed Cluster Types + summary: Get a Managed Cluster Type + description: >- + Get a Managed Cluster Type. + + AMS Security: Devops, Internal + A token with SaaS Platform Internal or DevOps is required to access this endpoint. + operationId: getManagedClusterType + parameters: + - name: id + in: path + description: The Managed Cluster Type ID + required: true + schema: + type: string + example: aClusterTypeId + responses: + "200": + description: Responds with a ManagedClusterType + content: + application/json: + schema: + $ref: '../schemas/ManagedClusterType.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster-types:read' +patch: + tags: + - Managed Cluster Types + summary: Update a Managed Cluster Type + description: >- + Update an existing Managed Cluster Type. + + AMS Security: Devops, Internal + A token with SaaS Platform Internal or DevOps is required to access this endpoint. + operationId: updateManagedClusterType + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Managed Cluster Type ID + example: aClusterTypeId + requestBody: + required: true + description: The JSONPatch payload used to update the schema. + content: + application/json-patch+json: + schema: + $ref: '../schemas/JsonPatch.yaml' + responses: + "200": + description: The updated ManagedClusterType + content: + application/json: + schema: + $ref: '../schemas/ManagedClusterType.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster-types:update' +delete: + operationId: deleteManagedClusterType + tags: + - Managed Cluster Types + summary: Delete a Managed Cluster Type + description: >- + Delete an existing Managed Cluster Type. + + AMS Security: Devops, Internal + A token with SaaS Platform Internal or DevOps is required to access this endpoint. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Managed Cluster Type ID + example: aClusterTypeId + responses: + '204': + $ref: '../../v3/responses/204.yaml' + description: The Managed Cluster Type was successfully deleted. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster-types:delete' diff --git a/static/idn-api/beta/paths/managed-cluster-types.yaml b/static/idn-api/beta/paths/managed-cluster-types.yaml new file mode 100644 index 000000000..9c338957e --- /dev/null +++ b/static/idn-api/beta/paths/managed-cluster-types.yaml @@ -0,0 +1,93 @@ +get: + tags: + - Managed Cluster Types + summary: Get Managed Cluster Types + description: >- + Get a list of Managed Cluster Types. + + AMS Security: Devops, Internal + A token with SaaS Platform Internal or DevOps is required to access this endpoint. + operationId: getManagedClusterTypes + parameters: + - name: type + in: query + description: Type descriptor + schema: + type: string + example: IDN + - name: pod + in: query + description: Pinned pod (or default) + schema: + type: string + example: megapod-useast1 + - name: org + in: query + description: Pinned org (or default) + schema: + type: string + example: denali-xyz + responses: + "200": + description: Responds with a list of ManagedClusterType based on the query params provided + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/ManagedClusterType.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster-types:read' +post: + tags: + - Managed Cluster Types + summary: Create new Managed Cluster Type + description: >- + Create a new Managed Cluster Type. + + AMS Security: Devops, Internal + A token with SaaS Platform Internal or DevOps is required to access this endpoint. + + The API returns a result that includes the Managed Cluster Type ID + operationId: createManagedClusterType + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/ManagedClusterType.yaml' + responses: + "200": + description: The created ManagedClusterType + content: + application/json: + schema: + $ref: '../schemas/ManagedClusterType.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster-types:create' diff --git a/static/idn-api/beta/paths/managed-cluster-upgrade.yaml b/static/idn-api/beta/paths/managed-cluster-upgrade.yaml new file mode 100644 index 000000000..3a1fe257f --- /dev/null +++ b/static/idn-api/beta/paths/managed-cluster-upgrade.yaml @@ -0,0 +1,47 @@ +post: + tags: + - Managed Clusters + summary: Upgrade a cluster's VAs + description: >- + Upgrade a clusters VAs manual call + + AMS Security: API, Internal + A token with SYSTEM_ADMINISTRATOR authority is required to call this API. + operationId: upgradeCluster + parameters: + - name: id + in: path + description: ID of the cluster to upgrade + required: true + style: simple + explode: false + schema: + type: string + example: aClusterId + requestBody: + description: UpgradeCluster configuration data for the given ManagedCluster + content: + application/json: + schema: + $ref: '../schemas/ClusterUpgradeData.yaml' + required: true + responses: + "200": + description: Responds with updated UpgradeClusterConfig for the given ManagedCluster. + content: + application/json: + schema: + $ref: '../schemas/ClusterUpgradeData.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster:upgrade' \ No newline at end of file diff --git a/static/idn-api/beta/paths/managed-clusters-create.yaml b/static/idn-api/beta/paths/managed-clusters-create.yaml new file mode 100644 index 000000000..ed396cae1 --- /dev/null +++ b/static/idn-api/beta/paths/managed-clusters-create.yaml @@ -0,0 +1,37 @@ +post: + tags: + - Managed Clusters + summary: Create new Managed Cluster + description: >- + Create a new Managed Cluster. + + The API returns a result that includes the Managed Cluster ID. + operationId: createManagedCluster + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/ManagedCluster.yaml' + responses: + "200": + description: The created ManagedClient + content: + application/json: + schema: + $ref: '../schemas/ManagedCluster.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster:create' diff --git a/static/idn-api/beta/paths/managed-clusters-full.yaml b/static/idn-api/beta/paths/managed-clusters-full.yaml new file mode 100644 index 000000000..171e44744 --- /dev/null +++ b/static/idn-api/beta/paths/managed-clusters-full.yaml @@ -0,0 +1,78 @@ +get: + tags: + - Managed Clusters + summary: Retrieve all Managed Clusters. + description: Retrieve all Managed Clusters for the current Org, based on request context. + operationId: getManagedClusters + parameters: + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filtering is supported for the following fields and operators: + + + **operational**: *eq* + responses: + "200": + description: Responds with a list of ManagedCluster. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/ManagedCluster.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster:read' +post: + tags: + - Managed Clusters + summary: Create new Managed Cluster + description: >- + Create a new Managed Cluster. + + The API returns a result that includes the Managed Cluster ID. + operationId: createManagedCluster + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/ManagedCluster.yaml' + responses: + "200": + description: The created ManagedClient + content: + application/json: + schema: + $ref: '../schemas/ManagedCluster.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster:create' diff --git a/static/idn-api/beta/paths/managed-clusters-set-encryption-keys.yaml b/static/idn-api/beta/paths/managed-clusters-set-encryption-keys.yaml new file mode 100644 index 000000000..7734c386c --- /dev/null +++ b/static/idn-api/beta/paths/managed-clusters-set-encryption-keys.yaml @@ -0,0 +1,47 @@ +post: + tags: + - Managed Clusters + summary: Set new encryption keys for a Managed Cluster + description: >- + Set new encryption keys for a Managed Cluster + + AMS Security: idn:remote-client-management + A token with SaaS Platform idn:admin or sp:internal-service or idn:devops is required to access this endpoint. + operationId: setEncryptionKeys + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Managed Cluster ID + example: aClusterId + requestBody: + required: true + description: The PublicCertificate used to update the keyPair value in persistence. + content: + application/json-patch+json: + schema: + $ref: '../schemas/SetEncryptionKeysData.yaml' + responses: + "200": + description: Set new encryption keys for a Managed Cluster + content: + application/json: + schema: + $ref: '../schemas/ManagedCluster.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster:update' \ No newline at end of file diff --git a/static/idn-api/beta/paths/managed-clusters.yaml b/static/idn-api/beta/paths/managed-clusters.yaml new file mode 100644 index 000000000..88026c702 --- /dev/null +++ b/static/idn-api/beta/paths/managed-clusters.yaml @@ -0,0 +1,41 @@ +get: + tags: + - Managed Clusters + summary: Retrieve all Managed Clusters. + description: Retrieve all Managed Clusters for the current Org, based on request context. + operationId: getManagedClusters + parameters: + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filtering is supported for the following fields and operators: + + + **operational**: *eq* + responses: + "200": + description: Responds with a list of ManagedCluster. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/ManagedCluster.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-cluster:read' diff --git a/static/idn-api/beta/paths/managed-processes-path.yaml b/static/idn-api/beta/paths/managed-processes-path.yaml new file mode 100644 index 000000000..1bc62568b --- /dev/null +++ b/static/idn-api/beta/paths/managed-processes-path.yaml @@ -0,0 +1,122 @@ +get: + tags: + - Managed Processes + summary: Get a Managed Process + description: >- + Get a Managed Process. + + AMS Security: Devops, Internal + A token with SaaS Platform Internal or DevOps is required to access this endpoint. + operationId: getManagedProcess + parameters: + - name: id + in: path + description: The Managed Process ID + required: true + schema: + type: string + example: aProcessId + responses: + "200": + description: Responds with a ManagedProcess + content: + application/json: + schema: + $ref: '../schemas/ManagedProcess.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-process:read' +patch: + tags: + - Managed Processes + summary: Update a Managed Processes + description: >- + Update an existing Managed Process. + + AMS Security: Devops, Internal + A token with SaaS Platform Internal or DevOps is required to access this endpoint. + operationId: updateManagedProcess + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Managed Process ID + example: aProcessId + requestBody: + required: true + description: The JSONPatch payload used to update the schema. + content: + application/json-patch+json: + schema: + $ref: '../schemas/JsonPatch.yaml' + responses: + "200": + description: The updated ManagedProcess + content: + application/json: + schema: + $ref: '../schemas/ManagedProcess.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-process:update' +delete: + operationId: deleteManagedProcess + tags: + - Managed Processes + summary: Delete a Managed Process + description: >- + Delete an existing Managed Process. + + AMS Security: Devops, Internal + A token with SaaS Platform Internal or DevOps is required to access this endpoint. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Managed Process ID + example: aProcessId + responses: + '204': + $ref: '../../v3/responses/204.yaml' + description: The Managed Process was successfully deleted. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-process:delete' diff --git a/static/idn-api/beta/paths/managed-processes.yaml b/static/idn-api/beta/paths/managed-processes.yaml new file mode 100644 index 000000000..8276f590b --- /dev/null +++ b/static/idn-api/beta/paths/managed-processes.yaml @@ -0,0 +1,93 @@ +get: + tags: + - Managed Processes + summary: Get Managed Processes + description: >- + Get a list of Managed Processes. + + AMS Security: Devops, Internal + A token with SaaS Platform Internal or DevOps is required to access this endpoint. + operationId: getManagedProcesses + parameters: + - name: process + in: query + description: Configuration process + schema: + type: string + example: charon + - name: pod + in: query + description: Configuration pod + schema: + type: string + example: megapod-useast1 + - name: org + in: query + description: Configuration org + schema: + type: string + example: denali-xyz + responses: + "200": + description: Responds with a list of ManagedProcess based on the query params provided + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/ManagedProcess.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-process:read' +post: + tags: + - Managed Processes + summary: Create new Managed Processes + description: >- + Create a new Managed Process. + + AMS Security: Devops, Internal + A token with SaaS Platform Internal or DevOps is required to access this endpoint. + + The API returns a result that includes the Managed Process ID. + operationId: createManagedProcess + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/ManagedProcess.yaml' + responses: + "200": + description: The created ManagedProcess + content: + application/json: + schema: + $ref: '../schemas/ManagedProcess.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:managed-process:create' diff --git a/static/idn-api/beta/paths/message-catalog.yaml b/static/idn-api/beta/paths/message-catalog.yaml new file mode 100644 index 000000000..a2b24a682 --- /dev/null +++ b/static/idn-api/beta/paths/message-catalog.yaml @@ -0,0 +1,39 @@ +get: + operationId: getMessageCatalogs + summary: Get Message catalogs + tags: + - IAI Recommendations + - IAI Access Request Recommendations + description: >- + The getMessageCatalogs API returns message catalog based on the language headers in the requested object. + parameters: + - in: path + name: catalog-id + schema: + type: string + enum: + - recommender + - access-request-recommender + required: true + description: The ID of the message catalog. + responses: + '200': + description: The message catalogs based on the request headers + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/MessageCatalogDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: [] \ No newline at end of file diff --git a/static/idn-api/beta/paths/mfa-config-test.yaml b/static/idn-api/beta/paths/mfa-config-test.yaml new file mode 100644 index 000000000..10cdfa021 --- /dev/null +++ b/static/idn-api/beta/paths/mfa-config-test.yaml @@ -0,0 +1,45 @@ +get: + operationId: testMFAConfig + tags: + - MFA Configuration + summary: Test configuration of a MFA method + description: >- + This API validates that the configuration is valid and will properly authenticate with the MFA provider identified by the method path parameter. +
        + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:mfa-config:read + parameters: + - in: path + name: method + schema: + type: string + example: okta-verify + required: true + description: >- + The name of the MFA method. +
        + The currently supported method name is okta-verify. + responses: + '200': + description: The result of configuration test for the MFA provider. + content: + application/json: + schema: + $ref: '../schemas/MfaConfigTestResponse.yaml' + example: + { + "state": "SUCCESS", + "error": null + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/mfa-config.yaml b/static/idn-api/beta/paths/mfa-config.yaml new file mode 100644 index 000000000..668bb66a6 --- /dev/null +++ b/static/idn-api/beta/paths/mfa-config.yaml @@ -0,0 +1,108 @@ +get: + operationId: getMFAConfig + tags: + - MFA Configuration + summary: Get configuration of a MFA method + description: >- + This API returns the configuration of a given MFA method. +
        + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:mfa-config:read + parameters: + - in: path + name: method + schema: + type: string + example: okta-verify + required: true + description: >- + The name of the MFA method. +
        + The currently supported method name is okta-verify. + responses: + '200': + description: MFA configuration of a given method. + content: + application/json: + schema: + $ref: '../schemas/MfaConfig.yaml' + example: + { + "enabled": true, + "host": "www.example.com", + "accessKey": "dk778Y3QlA5UqocYpdU3rEkzrK2D497y", + "identityAttribute": "email" + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + +put: + operationId: setMFAConfig + tags: + - MFA Configuration + summary: Set configuration of a MFA method + description: >- + This API sets the configuration of a given MFA method. +
        + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:mfa-config:write + parameters: + - in: path + name: method + schema: + type: string + example: okta-verify + required: true + description: >- + The name of the MFA method. +
        + The currently supported method name is okta-verify. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/MfaConfig.yaml' + example: + { + "enabled": true, + "host": "www.example.com", + "accessKey": "dk778Y3QlA5UqocYpdU3rEkzrK2D497y", + "identityAttribute": "email" + } + responses: + '200': + description: MFA configuration of a given method. + content: + application/json: + schema: + $ref: '../schemas/MfaConfig.yaml' + example: + { + "enabled": true, + "host": "www.example.com", + "accessKey": "dk778Y3QlA5UqocYpdU3rEkzrK2D497y", + "identityAttribute": "email" + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/non-employee-approval-list.yaml b/static/idn-api/beta/paths/non-employee-approval-list.yaml new file mode 100644 index 000000000..1f9cffe30 --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-approval-list.yaml @@ -0,0 +1,57 @@ +get: + operationId: nonEmployeeApprovalList + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Get List of Non-Employee Approval Requests + description: >- + This gets a list of non-employee approval requests. + parameters: + - in: query + name: requested-for + schema: + type: string + description: >- + The identity for whom the request was made. *me* indicates the current user. + required: false + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)

        + Filtering is supported for the following fields and operators:

        + **approvalStatus**: *eq*

        + *Example:* approvalStatus eq "PENDING" + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#toc-hId-2058949)

        + Sorting is supported for the following fields: **created, modified** + + responses: + '200': + description: List of approval items. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/NonEmployeeApprovalItem.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/non-employee-approval-summary.yaml b/static/idn-api/beta/paths/non-employee-approval-summary.yaml new file mode 100644 index 000000000..fbdbb39c5 --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-approval-summary.yaml @@ -0,0 +1,37 @@ +get: + operationId: nonEmployeeApprovalSummary + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Get Summary of Non-Employee Approval Requests + description: >- + This request will retrieve a summary of non-employee approval requests.

        + There are two contextual uses for the `requested-for` path parameter:
        + 1. The current user is the Org Admin, in which case he or she may request a summary of all non-employee approval requests assigned to a particular approver by passing in that approver's id.
        + 2. The current user is an approver, in which case "me" should be provided as the `requested-for` value. This will provide the approver with a summary of the approval items assigned to him or her. + parameters: + - in: path + name: requested-for + schema: + type: string + description: >- + The identity (UUID) of the approver for whom for whom the summary is being retrieved. Use "me" instead to indicate the current user. + required: true + responses: + '200': + description: summary of non-employee approval requests + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeApprovalSummary.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/non-employee-approve-get.yaml b/static/idn-api/beta/paths/non-employee-approve-get.yaml new file mode 100644 index 000000000..4f69b5c06 --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-approve-get.yaml @@ -0,0 +1,41 @@ +get: + operationId: nonEmployeeApprovalGet + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Get a non-employee approval item detail + description: >- + Approves a non-employee approval request and notifies the next approver. + parameters: + - in: path + name: id + description: >- + Non-Employee approval item id (UUID) + required: true + schema: + type: string + - in: query + name: include-detail + description: >- + The object nonEmployeeRequest will not be included detail when set to false. *Default value is true* + required: false + schema: + type: string + responses: + '200': + description: Non-Employee approval item object. + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeApprovalItemDetail.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/non-employee-approve-request.yaml b/static/idn-api/beta/paths/non-employee-approve-request.yaml new file mode 100644 index 000000000..523edfa47 --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-approve-request.yaml @@ -0,0 +1,40 @@ +post: + operationId: nonEmployeeApproveRequest + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Approve a Non-Employee Request + description: >- + Approves a non-employee approval request and notifies the next approver. + parameters: + - in: path + name: id + description: >- + Non-Employee approval item id (UUID) + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeApprovalDecision.yaml' + responses: + '200': + description: Non-Employee approval item object. + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeApprovalItem.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/non-employee-bulk-upload-jobs-fail.yaml b/static/idn-api/beta/paths/non-employee-bulk-upload-jobs-fail.yaml new file mode 100644 index 000000000..5f0dff858 --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-bulk-upload-jobs-fail.yaml @@ -0,0 +1,48 @@ +post: + # security: + # - bearerAuth: + # - 'idn:helpdesk' + operationId: nonEmployeeBulkUploadJobFail + tags: + - Non-Employee Lifecycle Management + summary: Fail Bulk Upload + description: | + This API does not stop the job. It flags the job as failed. The job continues to run if it was + running when the API was invoked. + + Before you submit this request, verify the transaction is actually failed in Kibana. When + the NON_EMPLOYEE_CREATE_PASSED events have stopped, then the job is completed. + + Important: This API does not stop the job, it flags the job as failed. The job continues to run if + the it was running when the API was invoked. If invoked while the transaction is still running, + other jobs are allowed to start but the second job to start will fail. + + A token with idn:nesr:update authority is required to call this API. + + This is for internal use only. + parameters: + - in: path + name: bulkUploadJobId + description: >- + Bulk Upload Job ID (UUID) + required: true + schema: + type: string + responses: + '200': + description: >- + The bulk upload job was marked as failed. + content: + application/json: + schema: + $ref: '../../beta/schemas/NonEmployeeBulkUploadJob.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/non-employee-record.yaml b/static/idn-api/beta/paths/non-employee-record.yaml new file mode 100644 index 000000000..d3bdccf64 --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-record.yaml @@ -0,0 +1,168 @@ +get: + operationId: nonEmployeeRecordGet + # security: + # - bearerAuth: + # - 'idn:nesr:read' + tags: + - Non-Employee Lifecycle Management + summary: Get a Non-Employee Record + description: >- + This gets a non-employee record. + + Request will require the following scope: + + 'idn:nesr:read' + + parameters: + - in: path + name: id + description: >- + Non-Employee record id (UUID) + required: true + example: 2c91808b6ef1d43e016efba0ce470904 + schema: + type: string + responses: + '200': + description: Non-Employee record object + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeRecord.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +put: + operationId: nonEmployeeRecordUpdate + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Update Non-Employee Record + description: >- + This request will update a non-employee record. + parameters: + - in: path + name: id + description: >- + Non-employee record id (UUID) + required: true + schema: + type: string + requestBody: + description: Non-employee record creation request body. Attributes are restricted by user type. Owner of source can update end date. Organization admins can update all available fields. + required: true + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeRequestBody.yaml' + responses: + '200': + description: An updated non-employee record. + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeRecord.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +patch: + operationId: nonEmployeeRecordPatch + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Patch Non-Employee Record + description: >- + This request will patch a non-employee record. + parameters: + - in: path + name: id + description: >- + Non-employee record id (UUID) + required: true + schema: + type: string + requestBody: + description: A list of non-employee update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. Attributes are restricted by user type. Owner of source can update end date. Organization admins can update all available fields. + required: true + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + example: + - op: "replace" + path: "/endDate" + value: {"2019-08-23T18:40:35.772Z"} + responses: + '200': + description: A patched non-employee record. + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeRecord.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: nonEmployeeRecordDelete + # security: + # - bearerAuth: + # - 'idn:nesr:delete' + tags: + - Non-Employee Lifecycle Management + summary: Delete Non-Employee Record + description: >- + This request will delete a non-employee record. + + Request will require the following security scope: + + 'idn:nesr:delete' + parameters: + - in: path + name: id + description: >- + Non-Employee record id (UUID) + required: true + schema: + type: string + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/non-employee-records-bulk-delete.yaml b/static/idn-api/beta/paths/non-employee-records-bulk-delete.yaml new file mode 100644 index 000000000..514c3fa86 --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-records-bulk-delete.yaml @@ -0,0 +1,44 @@ +post: + operationId: nonEmployeeRecordBulkDelete + # security: + # - bearerAuth: + # - 'idn:nesr:delete' + tags: + - Non-Employee Lifecycle Management + summary: Delete Multiple Non-Employee Records + description: >- + This request will delete multiple non-employee records based on the non-employee ids provided. + + Request will require the following scope: + + 'idn:nesr:delete' + + requestBody: + description: Non-Employee bulk delete request body. + required: true + content: + application/json: + schema: + type: object + properties: + ids: + description: List of non-employee ids. + type: array + items: + type: string + format: uuid + required: + - ids + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/non-employee-records.yaml b/static/idn-api/beta/paths/non-employee-records.yaml new file mode 100644 index 000000000..d3b10ead4 --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-records.yaml @@ -0,0 +1,92 @@ +post: + operationId: nonEmployeeRecordCreation + # security: + # - bearerAuth: + # - 'idn:nesr:create' + tags: + - Non-Employee Lifecycle Management + summary: Create Non-Employee Record + description: >- + This request will create a non-employee record. + + Request will require the following security scope: + + 'idn:nesr:create' + + requestBody: + description: Non-Employee record creation request body. + required: true + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeRequestBody.yaml' + responses: + '200': + description: Created non-employee record. + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeRecord.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +get: + operationId: nonEmployeeRecordList + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: List Non-Employee Records + description: >- + This gets a list of non-employee records. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + required: false + name: sorters + schema: + type: string + format: comma-separated + example: accountName,sourceId + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#toc-hId-2058949)

        + Sorting is supported for the following fields: **id, accountName, sourceId, manager, firstName, lastName, email, phone, startDate, endDate, created, modified** + - in: query + name: filters + required: false + schema: + type: string + example: sourceId eq "2c91808568c529c60168cca6f90c1313" + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)

        + Filtering is supported for the following fields and operators:

        + **sourceId**: *eq*

        + *Example:* sourceId eq "2c91808568c529c60168cca6f90c1313" + responses: + '200': + description: Non-Employee record objects + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/NonEmployeeRecord.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/non-employee-reject-request.yaml b/static/idn-api/beta/paths/non-employee-reject-request.yaml new file mode 100644 index 000000000..912f2b777 --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-reject-request.yaml @@ -0,0 +1,40 @@ +post: + operationId: nonEmployeeRejectRequest + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Reject a Non-Employee Request + description: >- + This endpoint will reject an approval item request and notify user. + parameters: + - in: path + name: id + description: >- + Non-Employee approval item id (UUID) + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeRejectApprovalDecision.yaml' + responses: + '200': + description: Non-Employee approval item object. + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeApprovalItem.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/non-employee-request-summary-get.yaml b/static/idn-api/beta/paths/non-employee-request-summary-get.yaml new file mode 100644 index 000000000..40dfcc0fc --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-request-summary-get.yaml @@ -0,0 +1,38 @@ +get: + operationId: nonEmployeeRequestSummaryGet + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Get Summary of Non-Employee Requests + description: >- + This request will retrieve a summary of non-employee requests.

        + There are two contextual uses for the `requested-for` path parameter:
        + 1. The current user is the Org Admin, in which case he or she may request a summary of all non-employee approval requests assigned to a particular account manager by passing in that manager's id.
        + 2. The current user is an account manager, in which case "me" should be provided as the `requested-for` value. This will provide the user with a summary of the non-employee requests in the source(s) he or she manages. + parameters: + - in: path + name: requested-for + description: >- + The identity (UUID) of the non-employee account manager for whom the summary is being retrieved. Use "me" instead to indicate the current user. + required: true + schema: + type: string + format: uuid (if user is Org Admin) + responses: + '200': + description: Non-Employee request summary object. + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeRequestSummary.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/non-employee-request.yaml b/static/idn-api/beta/paths/non-employee-request.yaml new file mode 100644 index 000000000..4f82e94a2 --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-request.yaml @@ -0,0 +1,76 @@ +get: + operationId: nonEmployeeRequestGet + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Get a Non-Employee Request + description: >- + This gets a non-employee request. + parameters: + - in: path + name: id + example: 2c91808b6ef1d43e016efba0ce470904 + description: >- + Non-Employee request id (UUID) + required: true + schema: + type: string + responses: + '200': + description: Non-Employee request object. + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeRequest.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: nonEmployeeRequestDeletion + # security: + # - bearerAuth: + # - 'idn:nesr:delete' + tags: + - Non-Employee Lifecycle Management + summary: Delete Non-Employee Request + description: >- + This request will delete a non-employee request. + + Request will require the following scope: + + 'idn:nesr:delete' + + parameters: + - in: path + name: id + description: >- + Non-Employee request id in the UUID format + required: true + schema: + type: string + format: uuid + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/non-employee-requests.yaml b/static/idn-api/beta/paths/non-employee-requests.yaml new file mode 100644 index 000000000..25e77d0b3 --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-requests.yaml @@ -0,0 +1,117 @@ +post: + operationId: nonEmployeeRequestCreation + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Create Non-Employee Request + description: >- + This request will create a non-employee request and notify the approver + requestBody: + description: Non-Employee creation request body + required: true + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeRequestBody.yaml' + responses: + '200': + description: Non-Employee request creation object + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeRequest.yaml' + '400': + description: Client Error - Returned if the request body is invalid. + content: + application/json: + schema: + $ref: '../../v3/schemas/ErrorResponseDto.yaml' + examples: + 400.1 Bad Request Content: + description: Response for bad request content + value: + detailCode: 400.1 Bad Request Content + trackingId: e7eab60924f64aa284175b9fa3309599 + messages: + - locale: en + localeOrigin: REQUEST + text: firstName is required; accountName is required; + 400.1.409 Reference conflict: + description: Response for reference conflict + value: + detailCode: 400.1.409 Reference conflict + trackingId: e7eab60924f64aa284175b9fa3309599 + messages: + - locale: en + localeOrigin: REQUEST + text: Unable to create Non-Employee because the accountName "existed" is already being used. + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +get: + operationId: nonEmployeeRequestList + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: List Non-Employee Requests + description: >- + This gets a list of non-employee requests. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: requested-for + required: true + schema: + type: string + example: me + description: >- + The identity for whom the request was made. *me* indicates the current user. + - in: query + name: sorters + required: false + schema: + type: string + format: comma-separated + example: approvalStatus,firstName + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#toc-hId-2058949)

        + Sorting is supported for the following fields: **created, approvalStatus, firstName, lastName, email, phone, accountName, startDate, endDate** + - in: query + name: filters + required: false + schema: + type: string + example: sourceId eq "2c91808568c529c60168cca6f90c1313" + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)

        + Filtering is supported for the following fields and operators:

        + **sourceId**: *eq*

        + *Example:* sourceId eq "2c91808568c529c60168cca6f90c1313" + responses: + '200': + description: List of non-employee request objects. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/NonEmployeeRequest.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/non-employee-source-aggregate.yaml b/static/idn-api/beta/paths/non-employee-source-aggregate.yaml new file mode 100644 index 000000000..cfe9a3737 --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-source-aggregate.yaml @@ -0,0 +1,35 @@ +post: + operationId: nonEmployeeSourceAggregateGet + # security: + # - bearerAuth: + # - 'idn:nesr:create' + tags: + - Non-Employee Lifecycle Management + summary: Aggregate all accounts for a Non-Employee Source + description: >- + This fetches all the non-employee records related to a non-employee source and publishes an aggregation event for each one. + + Requires auth scope of 'idn:nesr:create' + parameters: + - in: path + name: sourceId + description: >- + Non-Employee sourceId + required: true + schema: + type: string + responses: + '202': + $ref: '../../v3/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/non-employee-source.yaml b/static/idn-api/beta/paths/non-employee-source.yaml new file mode 100644 index 000000000..dd91e185c --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-source.yaml @@ -0,0 +1,126 @@ +get: + operationId: nonEmployeeSourceGet + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Get a Non-Employee Source + description: >- + This gets a non-employee source. + parameters: + - in: path + example: 2c91808b7c28b350017c2a2ec5790aa1 + name: sourceId + description: >- + Source Id + required: true + schema: + type: string + responses: + '200': + description: Non-Employee source object. + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeSource.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +patch: + operationId: nonEmployeeSourcePatch + # security: + # - bearerAuth: + # - 'idn:nesr:update' + tags: + - Non-Employee Lifecycle Management + summary: Patch a Non-Employee Source + description: >- + patch a non-employee source. (Partial Update)
        + Patchable field: **name, description, approvers, accountManagers** + + Request will require the following security scope: + + 'idn:nesr:update' + parameters: + - in: path + name: sourceId + description: >- + Source Id + required: true + schema: + type: string + requestBody: + description: A list of non-employee source update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + required: true + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + example: + - op: "replace" + path: "/name" + value: { "new name" } + - op: "replace" + path: "/approvers" + value: [ "2c91809f703bb37a017040a2fe8748c7", "48b1f463c9e8427db5a5071bd81914b8" ] + responses: + '200': + description: A patched non-employee source object. + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeSource.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: nonEmployeeSourceDelete + # security: + # - bearerAuth: + # - 'idn:nesr:delete' + tags: + - Non-Employee Lifecycle Management + summary: Delete Non-Employee Source + description: >- + This request will delete a non-employee source. + + Request will require the following security scope: + + 'idn:nesr:delete' + parameters: + - in: path + name: sourceId + description: >- + Source Id + required: true + schema: + type: string + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/non-employee-sources-bulk-upload-details.yaml b/static/idn-api/beta/paths/non-employee-sources-bulk-upload-details.yaml new file mode 100644 index 000000000..bd717a718 --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-sources-bulk-upload-details.yaml @@ -0,0 +1,40 @@ +get: + operationId: nonEmployeeBulkUploadDetails + # security: + # - bearerAuth: + # - 'idn:nesr:read' + tags: + - Non-Employee Lifecycle Management + summary: Details of bulk upload job on source + description: | + This API returns the details of the newest bulk upload job for the specified source. + + A token with idn:nesr:read authority is required to call this API. + + This is for internal use only. + parameters: + - in: path + name: id + description: >- + Source ID (UUID) + required: true + schema: + type: string + responses: + '200': + description: >- + Details of the newest bulk-upload job, if any. + content: + application/json: + schema: + $ref: '../../beta/schemas/NonEmployeeBulkUploadJob.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/non-employee-sources-bulk-upload-non-employees.yaml b/static/idn-api/beta/paths/non-employee-sources-bulk-upload-non-employees.yaml new file mode 100644 index 000000000..e21b2a19d --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-sources-bulk-upload-non-employees.yaml @@ -0,0 +1,66 @@ +post: + operationId: nonEmployeeRecordsBulkUpload + # security: + # - bearerAuth: + # - 'idn:nesr:create' + tags: + - Non-Employee Lifecycle Management + summary: Imports, or Updates, Non-Employee Records + description: >- + This post will import, or update, Non-Employee records found in the CSV. + + Request will need the following security scope: + + 'idn:nesr:create' + parameters: + - in: path + name: id + description: >- + Source Id (UUID) + required: true + schema: + type: string + requestBody: + description: The form-data "name" attribute for the file content must be "data". See the schema specification. + content: + multipart/form-data: + schema: + type: object + properties: + data: + type: string + format: base64 + required: + - data + example: + { data: + "accountName,firstName,lastName,phone,email,manager,startDate,endDate + Jon.Smith, Jon, Smith, 555-555-5555, jon@jon.doe.nope.com, Jim Smith, 2020-04-05T08:00:00-10:00, 2020-08-07T19:00:00-10:00 + William.Chaffin, William, Chaffin, 555-555-5555, william@chaffins.nope.com, Bertram Chaffin, 2020-04-05T08:00:00-10:00, 2020-08-07T19:00:00-10:00" + } + responses: + '202': + description: >- + The CSV was accepted to be bulk inserted now or at a later time. + content: + application/json: + schema: + $ref: '../../beta/schemas/NonEmployeeBulkUploadJob.yaml' + '400': + description: | + Client Error - Returned if the request body is invalid. + The response body will contain the list of specific errors with one on each line. + content: + application/json: + schema: + $ref: '../../v3/schemas/ErrorResponseDto.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/non-employee-sources-bulk-upload-status.yaml b/static/idn-api/beta/paths/non-employee-sources-bulk-upload-status.yaml new file mode 100644 index 000000000..517241207 --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-sources-bulk-upload-status.yaml @@ -0,0 +1,40 @@ +get: + operationId: nonEmployeeBulkUploadStatus + # security: + # - bearerAuth: + # - 'idn:nesr:read' + tags: + - Non-Employee Lifecycle Management + summary: Obtain the status of bulk upload on the source + description: | + The nonEmployeeBulkUploadStatus API returns the status of the newest bulk upload job for the specified source. + + Request will need the following scope: + + 'idn:nesr:read' + parameters: + - in: path + name: id + description: >- + Source ID (UUID) + required: true + schema: + type: string + responses: + '200': + description: >- + Status of the newest bulk-upload job, if any. + content: + application/json: + schema: + $ref: '../../beta/schemas/NonEmployeeBulkUploadStatus.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/non-employee-sources-export-non-employees.yaml b/static/idn-api/beta/paths/non-employee-sources-export-non-employees.yaml new file mode 100644 index 000000000..311e3badf --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-sources-export-non-employees.yaml @@ -0,0 +1,43 @@ +get: + operationId: nonEmployeeRecordsExport + # security: + # - bearerAuth: + # - 'idn:nesr:read' + tags: + - Non-Employee Lifecycle Management + summary: Exports Non-Employee Records to CSV + description: >- + This requests a CSV download for all non-employees from a provided source. + + Request will need the following security scope: + + 'idn:nesr:read' + parameters: + - in: path + name: id + description: >- + Source Id (UUID) + required: true + schema: + type: string + responses: + '200': + description: Exported CSV + content: + text/csv: + example: | + accountName,firstName,lastName,phone,email,manager,startDate,endDate + Jon.Smith, Jon, Smith, 555-555-5555, jon@jon.doe.nope.com, Jim Smith, 2020-04-05T08:00:00-10:00,2020-08-07T19:00:00-10:00 + William.Chaffin, William, Chaffin, 555-555-5555, william@chaffins.nope.com, Bertram Chaffin, 2020-04-05T08:00:00-10:00,2020-08-07T19:00:00-10:00 + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/non-employee-sources-export-schema-attributes-template.yaml b/static/idn-api/beta/paths/non-employee-sources-export-schema-attributes-template.yaml new file mode 100644 index 000000000..c4160057e --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-sources-export-schema-attributes-template.yaml @@ -0,0 +1,41 @@ +get: + operationId: nonEmployeeExportSourceSchemaTemplate + # security: + # - bearerAuth: + # - 'idn:nesr:read' + tags: + - Non-Employee Lifecycle Management + summary: Exports Source Schema Template + description: >- + This requests a download for the Source Schema Template for a provided source. + + Request will require the following security scope: + + idn:nesr:read' + parameters: + - in: path + name: id + description: >- + Source Id (UUID) + required: true + schema: + type: string + responses: + '200': + description: Exported Source Schema Template + content: + text/csv: + example: | + accountName,firstName,lastName,phone,email,manager,startDate,endDate + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/non-employee-sources-schema-attribute.yaml b/static/idn-api/beta/paths/non-employee-sources-schema-attribute.yaml new file mode 100644 index 000000000..4c8f3fc4f --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-sources-schema-attribute.yaml @@ -0,0 +1,137 @@ +get: + operationId: getSchemaAttribute + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Get Schema Attribute Non-Employee Source + description: This API gets a schema attribute by Id for the specified Non-Employee SourceId. + parameters: + - in: path + name: attributeId + schema: + type: string + required: true + description: The Schema Attribute Id (UUID) + - in: path + name: sourceId + schema: + type: string + required: true + description: The Source id + responses: + '200': + description: The Schema Attribute + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeSchemaAttribute.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +patch: + operationId: patchSchemaAttribute + # security: + # - bearerAuth: + # - 'idn:nesr:update' + tags: + - Non-Employee Lifecycle Management + summary: Patch a Schema Attribute for Non-Employee Source + description: | + This end-point patches a specific schema attribute for a non-employee SourceId. + + Request will require a security scope of: + + 'idn:nesr:update' + parameters: + - in: path + name: attributeId + schema: + type: string + required: true + description: The Schema Attribute Id (UUID) + - in: path + name: sourceId + schema: + type: string + required: true + description: The Source id + requestBody: + description: A list of schema attribute update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + The following properties are allowed for update ':' 'label', 'helpText', 'placeholder', 'required'. + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + example: + - op: "replace" + path: "/label" + value: { "new attribute label" } + required: true + responses: + '200': + description: The Schema Attribute was successfully patched. + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeSchemaAttribute.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: deleteSchemaAttribute + # security: + # - bearerAuth: + # - 'idn:nesr:delete' + tags: + - Non-Employee Lifecycle Management + summary: Delete a Schema Attribute for Non-Employee Source + description: | + This end-point deletes a specific schema attribute for a non-employee source. + + Request will require a security scope of: + + 'idn:nesr:delete' + parameters: + - in: path + name: attributeId + schema: + type: string + required: true + description: The Schema Attribute Id (UUID) + - in: path + name: sourceId + schema: + type: string + required: true + description: The Source id + responses: + '204': + $ref: '../../v3/responses/204.yaml' + description: The Schema Attribute was successfully deleted. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/non-employee-sources-schema-attributes.yaml b/static/idn-api/beta/paths/non-employee-sources-schema-attributes.yaml new file mode 100644 index 000000000..6b3d201dd --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-sources-schema-attributes.yaml @@ -0,0 +1,121 @@ +get: + operationId: getSchemaAttributes + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: List Schema Attributes Non-Employee Source + description: This API gets the list of schema attributes for the specified Non-Employee SourceId. There are 8 + mandatory attributes added to each new Non-Employee Source automatically. Additionaly, user can + add up to 10 custom attributes. This interface returns all the mandatory attributes followed by + any custom attributes. At most, a total of 18 attributes will be returned. + parameters: + - in: path + name: sourceId + schema: + type: string + required: true + description: The Source id + responses: + '200': + description: A list of Schema Attributes + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/NonEmployeeSchemaAttribute.yaml' + maxItems: 18 + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +post: + operationId: createSchemaAttribute + # security: + # - bearerAuth: + # - 'idn:nesr:create' + tags: + - Non-Employee Lifecycle Management + summary: Create a new Schema Attribute for Non-Employee Source + description: >- + This API creates a new schema attribute for Non-Employee Source. The schema technical name must be + unique in the source. Attempts to create a schema attribute with an existing name will result in a + "400.1.409 Reference conflict" response. At most, 10 custom attributes can be created per schema. Attempts + to create more than 10 will result in a "400.1.4 Limit violation" response. + + Request requires a security scope of: + + 'idn:nesr:create' + parameters: + - in: path + name: sourceId + schema: + type: string + required: true + description: The Source id + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeSchemaAttributeBody.yaml' + responses: + '200': + description: >- + Schema Attribute created. + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeSchemaAttribute.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: deleteSchemaAttributes + # security: + # - bearerAuth: + # - 'idn:nesr:delete' + tags: + - Non-Employee Lifecycle Management + summary: Delete all custom schema attributes for Non-Employee Source + description: >- + This end-point deletes all custom schema attributes for a non-employee source. + + Request requires a security scope of: + + 'idn:nesr:delete' + parameters: + - in: path + name: sourceId + schema: + type: string + required: true + description: The Source id + responses: + '204': + $ref: '../../v3/responses/204.yaml' + description: All custon Schema Attributes were successfully deleted. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/non-employee-sources.yaml b/static/idn-api/beta/paths/non-employee-sources.yaml new file mode 100644 index 000000000..0205f88eb --- /dev/null +++ b/static/idn-api/beta/paths/non-employee-sources.yaml @@ -0,0 +1,96 @@ +post: + operationId: nonEmployeeSourcesCreation + # security: + # - bearerAuth: + # - 'idn:nesr:create' + tags: + - Non-Employee Lifecycle Management + summary: Create Non-Employee Source + description: >- + This request will create a non-employee source. + + Request will require the following security scope: + + 'idn:nesr:create' + requestBody: + description: Non-Employee source creation request body. + required: true + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeSourceRequestBody.yaml' + responses: + '200': + description: Created non-employee source. + content: + application/json: + schema: + $ref: '../schemas/NonEmployeeSourceWithCloudExternalId.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +get: + operationId: nonEmployeeSourcesList + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: List Non-Employee Sources + description: >- + This gets a list of non-employee sources. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + required: true + name: requested-for + example: me + schema: + type: string + description: >- + The identity for whom the request was made. *me* indicates the current user. + - in: query + required: true + name: non-employee-count + example: false + schema: + type: boolean + description: >- + The flag to determine whether return a non-employee count associate with source. + - in: query + name: sorters + required: false + schema: + type: string + format: comma-separated + example: name,created + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#toc-hId-2058949)

        + Sorting is supported for the following fields: **name, created** + responses: + '200': + description: List of non-employee sources objects. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/NonEmployeeSourceWithNECount.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/notification-preferences.yaml b/static/idn-api/beta/paths/notification-preferences.yaml new file mode 100644 index 000000000..ae93be700 --- /dev/null +++ b/static/idn-api/beta/paths/notification-preferences.yaml @@ -0,0 +1,90 @@ +get: + operationId: getNotificationPreference + tags: + - Notifications + summary: Get Notification Preferences for tenant. + description: >- + Returns the notification preferences for tenant. Note that if the key doesn't exist, then a 404 will be returned. + + Request will require the following legacy roles: ORG_ADMIN and API + # security: + # - bearerAuth: + # - ORG_ADMIN + # - API + parameters: + - in: path + name: key + required: true + schema: + type: string + description: The notification key. + responses: + '200': + description: Return preference for the given notification key. + content: + application/json: + schema: + $ref: '../schemas/PreferencesDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' +put: + operationId: putNotificationPreference + tags: + - Notifications + summary: Overwrite the preferences for the given notification key. + description: >- + In the notification world, a notification flows through these salient stages - + 1. Interest matching, + 2. Preferences + 3. Template Rendering. + + The default notification preferences make up a part of the second stage, along with user preferences (which is a future goal). The expectation is for + admins to be able to set default preferences for their org, like opting in to or out of certain notifications, and configuring future preferences as + we tack on more features. The key in the Dto is not necessary but if it is provided and doesn't match the key in the URI, then a 400 will be thrown. + + Request will require the following legacy roles: ORG_ADMIN and API + # security: + # - bearerAuth: + # - ORG_ADMIN + # - API + parameters: + - in: path + name: key + required: true + schema: + type: string + description: The notification key. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/PreferencesDto.yaml' + responses: + '200': + description: The preferences were successfully replaced, and an echo of the new preferences are sent back to caller. + content: + application/json: + schema: + $ref: '../schemas/PreferencesDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + + + diff --git a/static/idn-api/beta/paths/notification-template-context.yaml b/static/idn-api/beta/paths/notification-template-context.yaml new file mode 100644 index 000000000..bcbcd6920 --- /dev/null +++ b/static/idn-api/beta/paths/notification-template-context.yaml @@ -0,0 +1,38 @@ +get: + operationId: getNotificationsTemplateContext + tags: + - Notifications + summary: Get Notification Template Context + description: >- + The notification service (Hermes) maintains metadata to construct the notification templates or supply any information during the event propagation. + The data-store where this information is retrieved is called "Global Context" (a.k.a. notification template context). It defines a set of attributes + that will be available per tenant (organization). + + Regarding authorization, the access token contains the tenant and will grant access to the one requested. + + Requires the following security scope: idn:notification-templates:read + # security: + # - bearerAuth: + # - 'idn:notification-templates:read' + + responses: + '200': + description: Notification template context attributes for a specific tenant. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/NotificationTemplateContext.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + + diff --git a/static/idn-api/beta/paths/notification-template-defaults.yaml b/static/idn-api/beta/paths/notification-template-defaults.yaml new file mode 100644 index 000000000..087f5d892 --- /dev/null +++ b/static/idn-api/beta/paths/notification-template-defaults.yaml @@ -0,0 +1,48 @@ +get: + operationId: listNotificationTemplateDefaults + tags: + - Notifications + summary: List Notification Template Defaults + description: >- + This lists the default templates used for notifications, such as emails from IdentityNow. Since this is a beta feature, it doesn't include all the templates. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **key**: *eq, in* + + + **medium**: *eq* + + + **locale**: *eq* + responses: + '200': + description: >- + A list of the default template objects + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/TemplateDtoDefault.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/notification-template.yaml b/static/idn-api/beta/paths/notification-template.yaml new file mode 100644 index 000000000..036b89814 --- /dev/null +++ b/static/idn-api/beta/paths/notification-template.yaml @@ -0,0 +1,37 @@ +get: + operationId: getNotificationTemplate + tags: + - Notifications + summary: Get Notification Template By Id + description: >- + This gets a template that you have modified for your site by Id. + parameters: + - name: id + in: path + description: Id of the Notification Template + required: true + style: simple + explode: false + schema: + type: string + example: c17bea3a-574d-453c-9e04-4365fbf5af0b + responses: + '200': + description: >- + A template object for your site + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/TemplateDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/notification-templates-bulk-delete.yaml b/static/idn-api/beta/paths/notification-templates-bulk-delete.yaml new file mode 100644 index 000000000..6eff9c8cd --- /dev/null +++ b/static/idn-api/beta/paths/notification-templates-bulk-delete.yaml @@ -0,0 +1,28 @@ +post: + operationId: bulkDeleteNotificationTemplates + tags: + - Notifications + summary: Bulk Delete Notification Templates + description: >- + This lets you bulk delete templates that you previously created for your site. Since this is a beta feature, you can only delete a subset of your notifications, i.e. ones that show up in the list call. + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/TemplateBulkDeleteDto.yaml' + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/notification-templates.yaml b/static/idn-api/beta/paths/notification-templates.yaml new file mode 100644 index 000000000..e1bce5f8c --- /dev/null +++ b/static/idn-api/beta/paths/notification-templates.yaml @@ -0,0 +1,79 @@ +get: + operationId: listNotificationTemplates + tags: + - Notifications + summary: List Notification Templates For Your Site + description: >- + This lists the templates that you have modified for your site. Since this is a beta feature, it doesn't include all your modified templates. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **key**: *eq, in* + + + **medium**: *eq* + + + **locale**: *eq* + responses: + '200': + description: >- + A list of template objects for your site + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/TemplateDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +post: + operationId: createNotificationTemplate + tags: + - Notifications + summary: Create Notification Template + description: >- + This creates a template for your site + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/TemplateDto.yaml' + responses: + '200': + description: >- + A template object for your site + content: + application/json: + schema: + $ref: '../schemas/TemplateDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/oauth-client.yaml b/static/idn-api/beta/paths/oauth-client.yaml new file mode 100644 index 000000000..4371f7957 --- /dev/null +++ b/static/idn-api/beta/paths/oauth-client.yaml @@ -0,0 +1,154 @@ +get: + operationId: getOauthClient + # security: + # - bearerAuth: + # - 'idn:oathkeeper-client:read' + tags: + - OAuth Clients + summary: Get OAuth Client + description: >- + This gets details of an OAuth client. + + Request will require the following security scope: + + - 'idn:oathkeeper-client:read' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The OAuth client id + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: Request succeeded. + content: + application/json: + schema: + $ref: '../schemas/GetOAuthClientResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: deleteOauthClient + # security: + # - bearerAuth: + # - 'idn:oathkeeper-client:delete' + # - 'idn:oathkeeper-internal-client:delete' + tags: + - OAuth Clients + summary: Delete OAuth Client + description: >- + This deletes an OAuth client. + + Request will require the following security scopes: + + - 'idn:oathkeeper-client:delete' + - 'idn:oathkeeper-internal-client:delete' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The OAuth client id + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '204': + description: No content. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +patch: + operationId: patchOauthClient + # security: + # - bearerAuth: + # - 'idn:oathkeeper-client:update' + tags: + - OAuth Clients + summary: Patch OAuth Client + description: >- + This performs a targeted update to the field(s) of an OAuth client. + + Request will require a security scope of + + 'idn:oathkeeper-client:update' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The OAuth client id + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + description: | + A list of OAuth client update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + + The following fields are patchable: + * tenant + * businessName + * homepageUrl + * name + * description + * accessTokenValiditySeconds + * refreshTokenValiditySeconds + * redirectUris + * grantTypes + * accessType + * enabled + * strongAuthSupported + * claimsSupported + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + example: + - op: "replace" + path: "/strongAuthSupported" + value: true + - op: "replace" + path: "/businessName" + value: "acme-solar" + responses: + '200': + description: >- + Indicates the PATCH operation succeeded, and returns the OAuth client's new representation. + content: + application/json: + schema: + $ref: '../schemas/GetOAuthClientResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/oauth-clients.yaml b/static/idn-api/beta/paths/oauth-clients.yaml new file mode 100644 index 000000000..a9431b13a --- /dev/null +++ b/static/idn-api/beta/paths/oauth-clients.yaml @@ -0,0 +1,72 @@ +get: + operationId: listOauthClients + # security: + # - bearerAuth: + # - 'idn:oathkeeper-client-list:read' + tags: + - OAuth Clients + summary: List OAuth Clients + description: >- + This gets a list of OAuth clients. + + Request will require the following security scope: + + - 'idn:oathkeeper-client-list:read' + responses: + '200': + description: List of OAuth clients. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/GetOAuthClientResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +post: + operationId: createOauthClient + # security: + # - bearerAuth: + # - 'idn:oathkeeper-client:create' + # - 'idn:oathkeeper-internal-client:create' + tags: + - OAuth Clients + summary: Create OAuth Client + description: >- + This creates an OAuth client. + + Request will require the following security scope: + + - 'idn:oathkeeper-client:create' + - 'idn:oathkeeper-internal-client:create' + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/CreateOAuthClientRequest.yaml' + responses: + '200': + description: Request succeeded. + content: + application/json: + schema: + $ref: '../schemas/CreateOAuthClientResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/org-config-valid-time-zones.yaml b/static/idn-api/beta/paths/org-config-valid-time-zones.yaml new file mode 100644 index 000000000..b9005e3e6 --- /dev/null +++ b/static/idn-api/beta/paths/org-config-valid-time-zones.yaml @@ -0,0 +1,43 @@ +get: + operationId: getValidTimeZones + tags: + - Org Config + summary: Get list of time zones + description: >- + Get a list of valid time zones that can be set in org configurations. + + Request will require the following security scope: + + - 'idn:org-config-user:read' + + - 'idn:org-config:read' + + - 'idn:org-config-internal:read' + responses: + '200': + description: Request successful + content: + application/json: + schema: + type: array + items: + type: string + example: + - "Etc/GMT-6" + - "Etc/GMT+8" + - "EST" + - "America/Chicago" + - "America/Toronto" + - "Asia/Gaza" + - "Europe/Brussels" + - "Europe/Kiev" + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/org-config.yaml b/static/idn-api/beta/paths/org-config.yaml new file mode 100644 index 000000000..76989a342 --- /dev/null +++ b/static/idn-api/beta/paths/org-config.yaml @@ -0,0 +1,75 @@ +get: + operationId: getOrgConfig + tags: + - Org Config + summary: Get Org configuration settings + description: >- + Get org configuration with only external (org admin) accessible properties for the current org. Request will require the following security scope: + + - 'idn:org-config:read' + + - 'idn:org-config-internal:read' + responses: + '200': + description: Request succeeded. + content: + application/json: + schema: + $ref: '../schemas/OrgConfig.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +patch: + operationId: patchOrgConfig + tags: + - Org Config + summary: Patch an Org configuration property + description: >- + Patch configuration of the current org using http://jsonpatch.com/ syntax. Commonly used for changing the time zone of an org. + + Request will require a security scope of: + + - 'idn:org-config:write' + + - 'idn:org-config-internal:write' + requestBody: + description: A list of schema attribute update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + example: + - op: "replace" + path: "/timeZone" + value: "America/Toronto" + required: true + responses: + '200': + description: The Org was successfully patched. + content: + application/json: + schema: + $ref: '../schemas/OrgConfig.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/outlier-summaries-latest.yaml b/static/idn-api/beta/paths/outlier-summaries-latest.yaml new file mode 100644 index 000000000..a450074ba --- /dev/null +++ b/static/idn-api/beta/paths/outlier-summaries-latest.yaml @@ -0,0 +1,40 @@ +get: + operationId: getLatestOutlierSnapshots + tags: + - IAI Outliers + summary: IAI Identity Outliers Latest Summary + description: >- + This API returns a most recent snapshot of each outlier type, each containing: the number of identities that customer has, the number of outliers, and the type of outlier + + Requires authorization scope of 'iai:outliers-management:read' + parameters: + - name: type + in: query + description: Type of the identity outliers snapshot to filter on + required: false + schema: + type: string + enum: + - LOW_SIMILARITY + - STRUCTURAL + responses: + '200': + description: Succeeded. Returns list of objects. Each object is a summary to give high level statistics/counts of outliers + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/LatestOutlierSummary.yaml' + '202': + $ref: '../../v3/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/outlier-summaries.yaml b/static/idn-api/beta/paths/outlier-summaries.yaml new file mode 100644 index 000000000..19107faea --- /dev/null +++ b/static/idn-api/beta/paths/outlier-summaries.yaml @@ -0,0 +1,68 @@ +get: + operationId: getOutlierSnapshots + tags: + - IAI Outliers + summary: IAI Identity Outliers Summary + description: >- + This API receives a summary containing: the number of identities that customer has, the number of outliers, and the type of outlier + + Requires authorization scope of 'iai:outliers-management:read' + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - name: type + in: query + description: Type of the identity outliers snapshot to filter on + required: false + schema: + type: string + enum: + - LOW_SIMILARITY + - STRUCTURAL + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#filtering-results) + + Filtering is supported for the following field and operators: + + **snapshotDate**: *ge, le* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#sorting-results) + + Sorting is supported for the following field: **snapshotDate** + example: snapshotDate + required: false + responses: + '200': + description: Succeeded. Returns list of objects. Each object is a summary to give high level statistics/counts of outliers + headers: + X-Total-Count: + description: The total result count. + schema: + type: integer + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/OutlierSummary.yaml' + '202': + $ref: '../../v3/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/outliers-bulk-outlier-detection.yaml b/static/idn-api/beta/paths/outliers-bulk-outlier-detection.yaml new file mode 100644 index 000000000..94e4b9f86 --- /dev/null +++ b/static/idn-api/beta/paths/outliers-bulk-outlier-detection.yaml @@ -0,0 +1,28 @@ +post: + operationId: bulkOutlierDetection + tags: + - IAI Outliers + summary: IAI Identity Outliers + description: >- + This API receives a list of identities (and metadata about the identities) that IAI defines as outliers + + Requires authorization scope of 'iai:outliers-management:detect' + requestBody: + description: Contains list of identities classified as outliers, the time the outlier detection ran, and a state to give metadata about why an outlier is an outlier + content: + application/json: + schema: + $ref: '../schemas/OutliersBulkDetectionRequest.yaml' + responses: + '202': + $ref: '../../v3/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/outliers-export.yaml b/static/idn-api/beta/paths/outliers-export.yaml new file mode 100644 index 000000000..f8d4841bd --- /dev/null +++ b/static/idn-api/beta/paths/outliers-export.yaml @@ -0,0 +1,38 @@ +get: + operationId: exportOutliersZip + tags: + - IAI Outliers + summary: IAI Identity Outliers Export + description: >- + This API exports a list of ignored outliers to a CSV as well as list of non-ignored outliers to a CSV. These two CSVs will be zipped and exported + Columns will include: identityID, type, firstDetectionDate, latestDetectionDate, ignored, & attributes (defined set of identity attributes) + + Requires authorization scope of 'iai:outliers-management:read' + parameters: + - name: type + in: query + description: Type of the identity outliers snapshot to filter on + required: false + schema: + type: string + enum: + - LOW_SIMILARITY + - STRUCTURAL + responses: + '200': + description: Succeeded. Returns zip of 2 CSVs to download. 1 CSV for ignored outliers and 1 for non-ignored outliers + content: + application/zip: + schema: + type: string + format: binary + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/outliers-ignore.yaml b/static/idn-api/beta/paths/outliers-ignore.yaml new file mode 100644 index 000000000..56bece17b --- /dev/null +++ b/static/idn-api/beta/paths/outliers-ignore.yaml @@ -0,0 +1,32 @@ +post: + operationId: ignoreOutliers + tags: + - IAI Outliers + summary: IAI Identity Outliers Ignore + description: >- + This API receives a list of IdentityIDs in the request, changes the outliers to be ignored--returning a 204 if successful. + + Requires authorization scope of 'iai:outliers-management:update' + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + type: string + description: List of identity IDs to ignore from outlier listing + example: ['abc123def456', 'ghi789jkl012'] + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/outliers-unignore.yaml b/static/idn-api/beta/paths/outliers-unignore.yaml new file mode 100644 index 000000000..be18b3567 --- /dev/null +++ b/static/idn-api/beta/paths/outliers-unignore.yaml @@ -0,0 +1,32 @@ +post: + operationId: unIgnoreOutliers + tags: + - IAI Outliers + summary: IAI Identity Outliers Unignore + description: >- + This API receives a list of IdentityIDs in the request, changes the outliers to be un-ignored--returning a 204 if successful. + + Requires authorization scope of 'iai:outliers-management:update' + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + type: string + description: List of identity IDs to un-ignore from outlier listing + example: ['abc123def456', 'ghi789jkl012'] + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/outliers.yaml b/static/idn-api/beta/paths/outliers.yaml new file mode 100644 index 000000000..7e9e5c4b5 --- /dev/null +++ b/static/idn-api/beta/paths/outliers.yaml @@ -0,0 +1,83 @@ +get: + operationId: getOutliers + tags: + - IAI Outliers + summary: IAI Get Identity Outliers + description: >- + This API receives a list of outliers, containing data such as: identityId, outlier type, detection dates, identity attributes, if identity is ignore, and certification information + + Requires authorization scope of 'iai:outliers-management:read' + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - name: type + in: query + description: Type of the identity outliers snapshot to filter on + required: false + schema: + type: string + enum: + - LOW_SIMILARITY + - STRUCTURAL + example: LOW_SIMILARITY + - in: query + name: filters + required: false + schema: + type: string + example: attributes.displayName sw "John" and certStatus eq "false" + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#filtering-results) + + + Filtering is supported for the following Entitlement fields and operators: + + **attributes**: *eq, sw, co, in* + + + **firstDetectionDate**: *ge, le* + + + **certStatus**: *eq* + + + **ignored**: *eq* + + + **score**: *ge, le* + - in: query + name: sorters + required: false + schema: + type: string + format: comma-separated + example: attributes.displayName,firstDetectionDate,-score + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + Sorting is supported for the following fields: **firstDetectionDate, attributes, score** + responses: + '200': + description: Succeeded. Returns list of objects. Each object contains information about outliers + headers: + X-Total-Count: + description: The total result count. + schema: + type: integer + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/Outlier.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/password-change-status.yaml b/static/idn-api/beta/paths/password-change-status.yaml new file mode 100644 index 000000000..e2143b0cf --- /dev/null +++ b/static/idn-api/beta/paths/password-change-status.yaml @@ -0,0 +1,35 @@ +get: + operationId: getPasswordChangeStatus + tags: + - Password Management + summary: Get Password Change Request Status + description: >- + This API returns the status of a password change request. A token with identity owner or trusted API client application authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + responses: + '200': + description: Status of the password change request + content: + application/json: + schema: + $ref: '../schemas/PasswordStatus.yaml' + example: { + "status": "IN_PROCESS", + "reqeustId": "089899f13a8f4da7824996191587bab9", + "error": null, + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/password-dictionary.yaml b/static/idn-api/beta/paths/password-dictionary.yaml new file mode 100644 index 000000000..df33006c5 --- /dev/null +++ b/static/idn-api/beta/paths/password-dictionary.yaml @@ -0,0 +1,163 @@ +get: + operationId: getPasswordDictionary + tags: + - Password Dictionary + summary: Get Password Dictionary + description: >- + This gets password dictionary for the organization. + + A token with ORG_ADMIN authority is required to call this API. + responses: + '200': + description: >- + + The password dictionary file can contain lines that are: + + 1. comment lines - the first character is '#', can be 128 Unicode codepoints in length, and are ignored during processing + + 2. empty lines + + 3. locale line - the first line that starts with "locale=" is considered to be locale line, the rest are treated as normal content lines + + 4. line containing the password dictionary word - it must start with non-whitespace character and only non-whitespace characters are allowed; + maximum length of the line is 128 Unicode codepoints + + + Password dictionary file may not contain more than 2,500 lines (not counting whitespace lines, comment lines and locale line). + Password dict file must contain UTF-8 characters only. + + # Sample password text file + + + ``` + + + # Password dictionary small test file + + + locale=en_US + + + # Password dictionary prohibited words + + + qwerty + + abcd + + aaaaa + + password + + qazxsws + + + ``` + content: + text/plain: + schema: + type: string + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +head: + operationId: getPasswordDictionaryFileStatus + tags: + - Password Dictionary + summary: Get Password Dictionary Status + description: >- + Used to check the status of password dictionary. + + A token with ORG_ADMIN authority is required to call this API. + responses: + '200': + description: >- + Password dictionary exists + '404': + description: >- + Password dictionary does not exist + '500': + $ref: '../../v3/responses/500.yaml' +put: + operationId: updatePasswordDictionary + tags: + - Password Dictionary + summary: Update Password Dictionary + description: >- + This updates password dictionary for the organization. + + A token with ORG_ADMIN authority is required to call this API. + requestBody: + required: true + description: >- + + The password dictionary file can contain lines that are: + + 1. comment lines - the first character is '#', can be 128 Unicode codepoints in length, and are ignored during processing + + 2. empty lines + + 3. locale line - the first line that starts with "locale=" is considered to be locale line, the rest are treated as normal content lines + + 4. line containing the password dictionary word - it must start with non-whitespace character and only non-whitespace characters are allowed; + maximum length of the line is 128 Unicode codepoints + + + Password dictionary file may not contain more than 2,500 lines (not counting whitespace lines, comment lines and locale line). + Password dict file must contain UTF-8 characters only. + + # Sample password text file + + + ``` + + + # Password dictionary small test file + + + locale=en_US + + + # Password dictionary prohibited words + + + qwerty + + abcd + + aaaaa + + password + + qazxsws + + + ``` + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '200': + description: Successfully updated. + '201': + description: Created. + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/password-org-config.yaml b/static/idn-api/beta/paths/password-org-config.yaml new file mode 100644 index 000000000..1d5b65018 --- /dev/null +++ b/static/idn-api/beta/paths/password-org-config.yaml @@ -0,0 +1,102 @@ +get: + operationId: getPasswordOrgConfig + tags: + - Password Configuration + summary: Get Password Org Config + description: >- + This API returns the password org config . + Requires ORG_ADMIN, API role or authorization scope of 'idn:password-org-config:read' + responses: + '200': + description: Reference to the password org config. + content: + application/json: + schema: + $ref: '../schemas/PasswordOrgConfig.yaml' + example: + { + "customInstructionsEnabled": true, + "digitTokenDurationMinutes": 9, + "digitTokenEnabled": false, + "digitTokenLength": 6 + } + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +put: + operationId: updatePasswordOrgConfig + tags: + - Password Configuration + summary: Update Password Org Config + description: >- + This API updates the password org config for specified fields. Other fields will keep original value. + Requires ORG_ADMIN, API role or authorization scope of 'idn:password-org-config:write' + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/PasswordOrgConfig.yaml' + example: + { + "digitTokenEnabled": true, + "digitTokenDurationMinutes": 12 + } + responses: + '200': + description: Reference to the password org config. + content: + application/json: + schema: + $ref: '../schemas/PasswordOrgConfig.yaml' + example: + { + "customInstructionsEnabled": true, + "digitTokenDurationMinutes": 12, + "digitTokenEnabled": true, + "digitTokenLength": 6 + } + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +post: + operationId: createPasswordOrgConfig + tags: + - Password Configuration + summary: Create Password Org Config + description: >- + This API creates the password org config. Unspecified fields will use default value. + Requires ORG_ADMIN, API role or authorization scope of 'idn:password-org-config:write' + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/PasswordOrgConfig.yaml' + example: + { + "customInstructionsEnabled": true, + "digitTokenEnabled": true, + "digitTokenDurationMinutes": 12, + "digitTokenLength": 9 + } + responses: + '200': + description: Reference to the password org config. + content: + application/json: + schema: + $ref: '../schemas/PasswordOrgConfig.yaml' + example: + { + "customInstructionsEnabled": true, + "digitTokenDurationMinutes": 9, + "digitTokenEnabled": true, + "digitTokenLength": 12 + } + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/password-reset-digit-token.yaml b/static/idn-api/beta/paths/password-reset-digit-token.yaml new file mode 100644 index 000000000..74ebb2e19 --- /dev/null +++ b/static/idn-api/beta/paths/password-reset-digit-token.yaml @@ -0,0 +1,34 @@ +post: + operationId: generateDigitToken + tags: + - Password Management + summary: Generate a digit token + description: This API is used to generate a digit token for password management. Requires authorization scope of "idn:password-digit-token:create". + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/PasswordDigitTokenReset.yaml' + example: { + "userId":"Abby.Smith", + "length": 8, + "durationMinutes": 5 + } + responses: + '200': + description: The digit token for password management. + content: + application/json: + schema: + $ref: '../schemas/PasswordDigitToken.yaml' + example: { + "digitToken": "09087713", + "requestId": "e1267ecd-fcd9-4c73-9c55-12555efad136" + } + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/password-sync-group.yaml b/static/idn-api/beta/paths/password-sync-group.yaml new file mode 100644 index 000000000..62dfe84ce --- /dev/null +++ b/static/idn-api/beta/paths/password-sync-group.yaml @@ -0,0 +1,124 @@ +get: + operationId: getPasswordSyncGroup + tags: + - Password Sync Groups + summary: Get Password Sync Group by ID + description: >- + This API returns the sync group for the specified ID. + A token with ORG_ADMIN authority is required to call this API. +# security: +# - bearerAuth: +# - ORG_ADMIN + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of password sync group to retrieve. + example: 6881f631-3bd5-4213-9c75-8e05cc3e35dd + responses: + '200': + description: Reference to the password sync group. + content: + application/json: + schema: + $ref: '../schemas/PasswordSyncGroup.yaml' + example: + { + "id": "6881f631-3bd5-4213-9c75-8e05cc3e35dd", + "name": "Password Sync Group 1", + "passwordPolicyId": "2c91808d744ba0ce01746f93b6204501", + "sourceIds": ["2c918084660f45d6016617daa9210584", "2c918084660f45d6016617daa9210500"] + } + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +put: + operationId: updatePasswordSyncGroup + tags: + - Password Sync Groups + summary: Update Password Sync Group by ID + description: >- + This API updates the specified password sync group. + A token with ORG_ADMIN authority is required to call this API. +# security: +# - bearerAuth: +# - ORG_ADMIN + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of password sync group to update. + example: 6881f631-3bd5-4213-9c75-8e05cc3e35dd + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/PasswordSyncGroup.yaml' + example: + { + "id": "6881f631-3bd5-4213-9c75-8e05cc3e35dd", + "name": "Password Sync Group 2", + "passwordPolicyId": "2c91808d744ba0ce01746f93b6204501", + "sourceIds": ["2c918084660f45d6016617daa9210584", "2c918084660f45d6016617daa9210500"] + } + responses: + '200': + description: Reference to the password sync group. + content: + application/json: + schema: + $ref: '../schemas/PasswordSyncGroup.yaml' + example: + { + "id": "6881f631-3bd5-4213-9c75-8e05cc3e35dd", + "name": "Password Sync Group 2", + "passwordPolicyId": "2c91808d744ba0ce01746f93b6204501", + "sourceIds": ["2c918084660f45d6016617daa9210584", "2c918084660f45d6016617daa9210500"] + } + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: deletePasswordSyncGroup + tags: + - Password Sync Groups + summary: Delete Password Sync Group by ID + description: >- + This API deletes the specified password sync group. + A token with ORG_ADMIN authority is required to call this API. +# security: +# - bearerAuth: +# - ORG_ADMIN + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of password sync group to delete. + example: 6881f631-3bd5-4213-9c75-8e05cc3e35dd + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + diff --git a/static/idn-api/beta/paths/password-sync-groups.yaml b/static/idn-api/beta/paths/password-sync-groups.yaml new file mode 100644 index 000000000..2ac39fd3d --- /dev/null +++ b/static/idn-api/beta/paths/password-sync-groups.yaml @@ -0,0 +1,73 @@ +get: + operationId: getPasswordSyncGroups + tags: + - Password Sync Groups + summary: Get Password Sync Group List + description: >- + This API returns a list of password sync groups. + A token with ORG_ADMIN authority is required to call this API. +# security: +# - bearerAuth: +# - ORG_ADMIN + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + responses: + '200': + description: A list of password sync groups. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/PasswordSyncGroup.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +post: + operationId: createPasswordSyncGroup + tags: + - Password Sync Groups + summary: Create Password Sync Group + description: >- + This API creates a password sync group based on the specifications provided. + A token with ORG_ADMIN authority is required to call this API. +# security: +# - bearerAuth: +# - ORG_ADMIN + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/PasswordSyncGroup.yaml' + example: + { + "name": "Password Sync Group 2", + "passwordPolicyId": "2c91808d744ba0ce01746f93b6204501", + "sourceIds": ["2c918084660f45d6016617daa9210584", "2c918084660f45d6016617daa9210500"] + } + responses: + '200': + description: Reference to the password sync group. + content: + application/json: + schema: + $ref: '../schemas/PasswordSyncGroup.yaml' + example: + { + "id": "6881f631-3bd5-4213-9c75-8e05cc3e35dd", + "name": "Password Sync Group 2", + "passwordPolicyId": "2c91808d744ba0ce01746f93b6204501", + "sourceIds": ["2c918084660f45d6016617daa9210584", "2c918084660f45d6016617daa9210500"] + } + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/peer-group-strategies.yaml b/static/idn-api/beta/paths/peer-group-strategies.yaml new file mode 100644 index 000000000..5e09e76a0 --- /dev/null +++ b/static/idn-api/beta/paths/peer-group-strategies.yaml @@ -0,0 +1,37 @@ +get: + operationId: getOutliers + tags: + - IAI Peer Group Strategies + summary: Identity Outliers List + description: >- + This API will be used by Identity Governance systems to identify identities that are not included in an organization's peer groups. By default, 250 identities are returned. You can specify between 1 and 1000 number of identities that can be returned. + parameters: + - in: path + name: strategy + schema: + type: string + required: true + description: The strategy used to create peer groups. Currently, 'entitlement' is supported. + example: 'entitlement' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + responses: + '200': + description: List of identities that are not included in peer groups. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/PeerGroupMember.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: [] \ No newline at end of file diff --git a/static/idn-api/beta/paths/pending-access-request-approvals.yaml b/static/idn-api/beta/paths/pending-access-request-approvals.yaml new file mode 100644 index 000000000..1e14e480a --- /dev/null +++ b/static/idn-api/beta/paths/pending-access-request-approvals.yaml @@ -0,0 +1,68 @@ +get: + operationId: listPendingApprovals + summary: Pending Access Request Approvals List + tags: + - Access Request Approvals + description: >- + This endpoint returns a list of pending approvals. + See "owner-id" query parameter below for authorization info. + parameters: + - in: query + name: owner-id + schema: + type: string + description: >- + If present, the value returns only pending approvals for the specified identity. + * ORG_ADMIN users can call this with any identity ID value. + * ORG_ADMIN users can also fetch all the approvals in the org, when owner-id is not used. + * Non-ORG_ADMIN users can only specify *me* or pass their own identity ID value. + + required: false + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **requestedFor.id**: *eq, in* + + + **modified**: *gt, lt, ge, le* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **created, modified** + responses: + '200': + description: List of Pending Approvals. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/PendingApproval.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/personal-access-token.yaml b/static/idn-api/beta/paths/personal-access-token.yaml new file mode 100644 index 000000000..c90eed6c1 --- /dev/null +++ b/static/idn-api/beta/paths/personal-access-token.yaml @@ -0,0 +1,37 @@ +delete: + operationId: deletePersonalAccessToken + tags: + - Personal Access Tokens + summary: Delete Personal Access Token + description: >- + This deletes a personal access token
        +
        + Any of the following rights are required to access this resource: +
          +
        • idn:my-personal-access-tokens:delete
        • +
        • idn:all-personal-access-tokens:delete
        • +
        • idn:managed-personal-access-tokens:delete
        • +
        + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The personal access token id + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '204': + description: No content. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/personal-access-tokens.yaml b/static/idn-api/beta/paths/personal-access-tokens.yaml new file mode 100644 index 000000000..9a1a6a308 --- /dev/null +++ b/static/idn-api/beta/paths/personal-access-tokens.yaml @@ -0,0 +1,90 @@ +get: + operationId: listPersonalAccessTokens + tags: + - Personal Access Tokens + summary: List Personal Access Tokens + description: >- + This gets a collection of personal access tokens associated with the optional owner-id.
        + query parameter. If the owner-id query parameter is omitted, all personal access tokens
        + for a tenant will be retrieved, but the caller must have the 'idn:all-personal-access-tokens:read' right.
        +
        + Any of the following rights are required to access this resource: +
          +
        • idn:my-personal-access-tokens:read
        • +
        • idn:all-personal-access-tokens:read
        • +
        • idn:managed-personal-access-tokens:read
        • +
        + parameters: + - in: query + name: owner-id + description: >- + The identity ID of the owner whose personal access tokens should be listed.
        + If "me", the caller should have the following right: 'idn:my-personal-access-tokens:read'
        +
        + If an actual owner ID or if the owner-id parameter is omitted in the request,
        + the caller should have the following right: 'idn:all-personal-access-tokens:read'.
        +
        + If the caller has the following right, then managed personal access tokens associated with owner-id
        + will be retrieved: 'idn:managed-personal-access-tokens:read' + required: false + schema: + type: string + default: null + example: 2c9180867b50d088017b554662fb281e + responses: + '200': + description: List of personal access tokens. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/GetPersonalAccessTokenResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +post: + operationId: createPersonalAccessToken + tags: + - Personal Access Tokens + summary: Create Personal Access Token + description: >- + This creates a personal access token.
        +
        + Any of the following rights are required to access this resource: +
          +
        • idn:my-personal-access-tokens:create
        • +
        • idn:all-personal-access-tokens:create
        • +
        • idn:managed-personal-access-tokens:create
        • +
        + requestBody: + description: Name and scope of personal access token. + required: true + content: + application/json: + schema: + $ref: '../schemas/CreatePersonalAccessTokenRequest.yaml' + responses: + '200': + description: Created. Note - this is the only time Personal Access Tokens' secret attribute will be displayed. + content: + application/json: + schema: + $ref: '../schemas/CreatePersonalAccessTokenResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/public-identities-config.yaml b/static/idn-api/beta/paths/public-identities-config.yaml new file mode 100644 index 000000000..ad155b6e3 --- /dev/null +++ b/static/idn-api/beta/paths/public-identities-config.yaml @@ -0,0 +1,50 @@ +get: + operationId: getPublicIdentityConfig + tags: + - Public Identity Config + summary: Get Public Identity Config + description: >- + This gets details of public identity config. + responses: + '200': + description: Request succeeded. + content: + application/json: + schema: + $ref: '../schemas/PublicIdentityConfig.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +put: + operationId: updatePublicIdentityConfig + tags: + - Public Identity Config + summary: Update Public Identity Config + description: >- + This updates the details of public identity config. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/PublicIdentityConfig.yaml' + responses: + '200': + description: Request succeeded. + content: + application/json: + schema: + $ref: '../schemas/PublicIdentityConfig.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/query-password-info.yaml b/static/idn-api/beta/paths/query-password-info.yaml new file mode 100644 index 000000000..669287476 --- /dev/null +++ b/static/idn-api/beta/paths/query-password-info.yaml @@ -0,0 +1,51 @@ +post: + operationId: queryPasswordInfo + tags: + - Password Management + summary: Query Password Info +# security: +# - bearerAuth: +# - API + description: This API is used to query password related information. A token with API authority is required to call this API. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/PasswordInfoQueryDTO.yaml' + example: { + "userName":"Abby.Smith", + "sourceName": "My-AD" + } + responses: + '200': + description: Reference to the password info. + content: + application/json: + schema: + $ref: '../schemas/PasswordInfo.yaml' + example: + { + "identityId": "2c918085744fec4301746f9a5bce4611", + "sourceId": "2c918083746f642c01746f9908840111", + "publicKeyId": "N2M1OTJiMGEtMDJlZS00ZWU3LTkyYTEtNjA5YmI5NWE3ZWVA", + "publicKey": "AIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuGFkWi2J75TztpbaPKd36bJnIB3J8gZ6UcoS9oSDYsqBzPpTsfZXYaEf4Y4BKGgJIXmE/lwhwuj7mU1itdZ2qTSNFtnXA8Fn75c3UUkk+h+wdZbkuSmqlsJo3R1OnJkwkJggcAy9Jvk9jlcrNLWorpQ1w9raUvxtvfgkSdq153KxotenQ1HciSyZ0nA/Kw0UaucLnho8xdRowZs11afXGXA9IT9H6D8T6zUdtSxm0nAyH+mluma5LdTfaM50W3l/L8q56Vrqmx2pZIiwdx/0+g3Y++jV70zom0ZBkC1MmSoLMrQYG5OICNjr72f78B2PaGXfarQHqARLjKpMVt9YIQIDAQAB", + "accounts": [ + { + "accountId": "CN=Abby Smith,OU=Austin,OU=Americas,OU=Demo,DC=seri,DC=acme,DC=com", + "accountName": "Abby.Smith" + } + ], + "policies": [ + "passwordRepeatedChar is 3", + "passwordMinAlpha is 1", + "passwordMinLength is 5", + "passwordMinNumeric is 1" + ] + } + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/rats-access-request-recommendations.yaml b/static/idn-api/beta/paths/rats-access-request-recommendations.yaml new file mode 100644 index 000000000..ec557fa08 --- /dev/null +++ b/static/idn-api/beta/paths/rats-access-request-recommendations.yaml @@ -0,0 +1,88 @@ +get: + operationId: listAccessRequestRecommendations + summary: Access Request Recommendations List + tags: + - Access Request Recommendations + description: >- + This endpoint returns a list of access request recommendations. + See "identity-id" query parameter below for authorization info. + parameters: + - in: query + name: identity-id + required: false + schema: + type: string + default: me + description: >- + The response returns access request recommendations for the identity with the specified ID. *me* indicates the current user. + * ORG_ADMIN users can call this with any identity ID value. + * Non-ORG_ADMIN users can only specify *me* or pass their own identity ID value. + - in: query + name: include-translation-messages + description: >- + If *true* it will populate a list of translation messages in the response. + schema: + type: boolean + default: false + required: false + example: false + - in: query + name: limit + description: >- + Max number of results to return. + required: false + schema: + type: integer + minimum: 0 + maximum: 15 + default: 15 + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **access.name**: *co* + + + **access.description**: *co* + + + **access.type**: *eq, in* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **access.name, access.type** + + + By default the recommendations are sorted by highest confidence first. + responses: + '200': + description: List of access request recommendations for the specified identity. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/AccessRecommendation.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/recommendations-config.yaml b/static/idn-api/beta/paths/recommendations-config.yaml new file mode 100644 index 000000000..436cd48f0 --- /dev/null +++ b/static/idn-api/beta/paths/recommendations-config.yaml @@ -0,0 +1,54 @@ +get: + operationId: getRecommendationsConfig + summary: Get certification recommendation config values + tags: + - IAI Recommendations + description: >- + Retrieves configuration attributes used by certification recommendations. + responses: + '200': + description: Cert recommendation configuration attributes + content: + application/json: + schema: + $ref: '../schemas/RecommendationConfigDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: [] +put: + operationId: updateRecommendationsConfig + summary: Update certification recommendation config values + tags: + - IAI Recommendations + description: >- + Updates configuration attributes used by certification recommendations. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/RecommendationConfigDto.yaml' + responses: + '200': + description: Cert recommendation configuration attributes after update + content: + application/json: + schema: + $ref: '../schemas/RecommendationConfigDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: [] \ No newline at end of file diff --git a/static/idn-api/beta/paths/recommendations-request.yaml b/static/idn-api/beta/paths/recommendations-request.yaml new file mode 100644 index 000000000..de220e582 --- /dev/null +++ b/static/idn-api/beta/paths/recommendations-request.yaml @@ -0,0 +1,32 @@ +post: + operationId: getRecommendations + summary: Returns a Recommendation Based on Object + tags: + - IAI Recommendations + description: >- + The getRecommendations API returns recommendations based on the requested object. The recommendations are invoked by IdentityIQ and IdentityNow plug-ins that retrieve recommendations based on the performed calculations. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/RecommendationRequestDto.yaml' + responses: + '200': + description: The recommendations for a customer + content: + application/json: + schema: + $ref: '../schemas/RecommendationResponseDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: [] \ No newline at end of file diff --git a/static/idn-api/beta/paths/reject-access-request-approval.yaml b/static/idn-api/beta/paths/reject-access-request-approval.yaml new file mode 100644 index 000000000..f8569feaa --- /dev/null +++ b/static/idn-api/beta/paths/reject-access-request-approval.yaml @@ -0,0 +1,37 @@ +post: + operationId: rejectRequest + summary: Rejects an access request approval. + tags: + - Access Request Approvals + description: >- + This endpoint rejects an access request approval. Only the owner of the approval and admin users are allowed to perform this action. + parameters: + - in: path + name: approvalId + schema: + type: string + required: true + description: The id of the approval. + example: 2c91808b7294bea301729568c68c002e + requestBody: + description: Reviewer's comment. + required: false + content: + application/json: + schema: + $ref: "../schemas/CommentDto.yaml" + responses: + '202': + $ref: '../../v3/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/role-assigned-identities.yaml b/static/idn-api/beta/paths/role-assigned-identities.yaml new file mode 100644 index 000000000..5aab93ca5 --- /dev/null +++ b/static/idn-api/beta/paths/role-assigned-identities.yaml @@ -0,0 +1,74 @@ +get: + operationId: getRoleAssignedIdentities + tags: + - Roles + summary: Get a list of Identities assigned a Role + parameters: + - in: path + name: id + schema: + type: string + description: >- + ID of the Role for which the assigned Identities are to be listed + example: 2c91808a7813090a017814121e121518 + required: true + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **aliasName**: *eq, sw* + + + **email**: *eq, sw* + + + **name**: *eq, sw* + example: name sw Joe + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **id**, **name**, **aliasName**, **email** + example: aliasName,name + responses: + '200': + description: List of Identities assigned the Role + content: + application/json: + schema: + type: array + items: + $ref: '../../v3/schemas/access/RoleIdentity.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:role:read' + - 'idn:role-checked:read' + diff --git a/static/idn-api/beta/paths/role-insight.yaml b/static/idn-api/beta/paths/role-insight.yaml new file mode 100644 index 000000000..56e403595 --- /dev/null +++ b/static/idn-api/beta/paths/role-insight.yaml @@ -0,0 +1,30 @@ +get: + operationId: getRoleInsight + summary: Get a single role insight + tags: + - Role Insights + description: >- + This endpoint gets role insights information for a role. + parameters: + - in: path + name: insightId + schema: + type: string + required: true + description: The role insight id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + responses: + '200': + description: Succeeded. Returns information about insights for a single role. + content: + application/json: + schema: + $ref: '../schemas/RoleInsight.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/role-insights-current-entitlements.yaml b/static/idn-api/beta/paths/role-insights-current-entitlements.yaml new file mode 100644 index 000000000..0bb341720 --- /dev/null +++ b/static/idn-api/beta/paths/role-insights-current-entitlements.yaml @@ -0,0 +1,40 @@ +get: + operationId: getRoleInsightsCurrentEntitlements + summary: Get current entitlement for a role + tags: + - Role Insights + description: >- + This endpoint gets the entitlements for a role. The term "current" is to distinguish from the entitlement(s) an insight might recommend adding. + parameters: + - in: path + name: insightId + schema: + type: string + required: true + description: The role insight id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: query + name: filters + description: Filter parameter(s) by "starts with" for the name and description. + required: false + style: form + explode: true + schema: + type: string + responses: + '200': + description: Succeeded. Returns a list of current or pre-existing entitlements for a role. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/RoleInsightsEntitlement.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/role-insights-entitlement-changes-download.yaml b/static/idn-api/beta/paths/role-insights-entitlement-changes-download.yaml new file mode 100644 index 000000000..a1fca7b46 --- /dev/null +++ b/static/idn-api/beta/paths/role-insights-entitlement-changes-download.yaml @@ -0,0 +1,46 @@ +get: + operationId: downloadRoleInsightsEntitlementsChanges + summary: Download entitlement insights for a role + tags: + - Role Insights + description: >- + This endpoint returns the entitlement insights for a role. + parameters: + - in: path + name: insightId + schema: + type: string + required: true + description: The role insight id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: query + name: sorters + description: sort by identitiesWithAccess, default order descending + required: false + style: form + explode: true + schema: + type: string + - in: query + name: filters + description: Filter parameter(s) by "starts with" for the name and description. + required: false + style: form + explode: true + schema: + type: string + responses: + '200': + description: Succeeded. Returns a csv file containing a list of entitlements to be added for a role. + content: + text/csv: + schema: + type: string + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/role-insights-entitlement-changes-identities.yaml b/static/idn-api/beta/paths/role-insights-entitlement-changes-identities.yaml new file mode 100644 index 000000000..1eda5ef7f --- /dev/null +++ b/static/idn-api/beta/paths/role-insights-entitlement-changes-identities.yaml @@ -0,0 +1,69 @@ +get: + operationId: getEntitlementChangesIdentities + summary: Get identities for a suggested entitlement (for a role) + tags: + - Role Insights + description: >- + Role insights suggests entitlements to be added for a role. This endpoint returns a list of identities in the role, + with or without the entitlements, for a suggested entitlement so that the user can see which identities would be affected + if the suggested entitlement were to be added to the role. + parameters: + - in: path + name: insightId + schema: + type: string + required: true + description: The role insight id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: path + name: entitlementId + schema: + type: string + required: true + description: The entitlement id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: query + name: hasEntitlement + description: Identity has this entitlement or not + required: false + style: form + explode: true + schema: + type: boolean + default: false + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: sorters + description: sort by name + required: false + style: form + explode: true + schema: + type: string + - in: query + name: filters + description: Filter parameter by "starts with" for the name. + required: false + style: form + explode: true + schema: + type: string + responses: + '200': + description: Succeeded. Returns a list of identities with or without the entitlement. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/RoleInsightsIdentities.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/role-insights-entitlement-changes.yaml b/static/idn-api/beta/paths/role-insights-entitlement-changes.yaml new file mode 100644 index 000000000..abdb5f827 --- /dev/null +++ b/static/idn-api/beta/paths/role-insights-entitlement-changes.yaml @@ -0,0 +1,48 @@ +get: + operationId: getRoleInsightsEntitlementsChanges + summary: Get entitlement insights for a role + tags: + - Role Insights + description: >- + This endpoint returns entitlement insights for a role. + parameters: + - in: path + name: insightId + schema: + type: string + required: true + description: The role insight id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: query + name: sorters + description: sort by identitiesWithAccess or name + required: false + style: form + explode: true + schema: + type: string + - in: query + name: filters + description: Filter parameter(s) by "starts with" for the name and description. + required: false + style: form + explode: true + schema: + type: string + responses: + '200': + description: Succeeded. Returns a list of entitlements to be added for a role. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/RoleInsightsEntitlementChanges.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/role-insights-request.yaml b/static/idn-api/beta/paths/role-insights-request.yaml new file mode 100644 index 000000000..bae395938 --- /dev/null +++ b/static/idn-api/beta/paths/role-insights-request.yaml @@ -0,0 +1,30 @@ +get: + operationId: getRoleInsightsRequests + summary: Returns the metadata for a request in order to generate insights for roles. + tags: + - Role Insights + description: >- + This endpoint returns details of a prior request. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The role insights request id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + responses: + '200': + description: Succeeded. Returns details of an earlier role insights request. + content: + application/json: + schema: + $ref: '../schemas/RoleInsightsResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/role-insights-requests.yaml b/static/idn-api/beta/paths/role-insights-requests.yaml new file mode 100644 index 000000000..407a2f016 --- /dev/null +++ b/static/idn-api/beta/paths/role-insights-requests.yaml @@ -0,0 +1,22 @@ +post: + operationId: roleInsightsRequests + summary: A request to generate insights for roles + tags: + - Role Insights + description: >- + This submits a create role insights request to the role insights application. At this time there are no parameters. All business roles will be processed for the customer. + responses: + '201': + description: Submitted a role insights generation request + content: + application/json: + schema: + $ref: '../schemas/RoleInsightsResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/role-insights-summary.yaml b/static/idn-api/beta/paths/role-insights-summary.yaml new file mode 100644 index 000000000..4070f3aa5 --- /dev/null +++ b/static/idn-api/beta/paths/role-insights-summary.yaml @@ -0,0 +1,22 @@ +get: + operationId: getRoleInsightsSummary + summary: Get role insights summary information + tags: + - Role Insights + description: >- + This method returns high level summary information for role insights for a customer. + responses: + '200': + description: Succeeded. Returns high level counts. + content: + application/json: + schema: + $ref: '../schemas/RoleInsightsSummary.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/role-insights.yaml b/static/idn-api/beta/paths/role-insights.yaml new file mode 100644 index 000000000..32aa8a93a --- /dev/null +++ b/static/idn-api/beta/paths/role-insights.yaml @@ -0,0 +1,44 @@ +get: + operationId: getRoleInsights + summary: Get role insights + tags: + - Role Insights + description: >- + This method returns detailed role insights for each role. + parameters: + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + - name: sorters + in: query + description: sort by numberOfUpdates, identitiesWithAccess, totalNumberOfIdentities (default- ascending) + required: false + style: form + explode: true + schema: + type: string + - name: filters + in: query + description: Filter parameter(s) by "starts with" for the name, ownerName and description. + required: false + style: form + explode: true + schema: + type: string + responses: + '200': + description: Succeeded. Returns a list of roles with information about insights for each role. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/RoleInsight.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/role-mining-potential-role-edit-entitlements.yaml b/static/idn-api/beta/paths/role-mining-potential-role-edit-entitlements.yaml new file mode 100644 index 000000000..4c2ffe67b --- /dev/null +++ b/static/idn-api/beta/paths/role-mining-potential-role-edit-entitlements.yaml @@ -0,0 +1,44 @@ +post: + operationId: editEntitlementsPotentialRole + summary: Edit entitlements for a potential role to exclude some entitlements + tags: + - IAI Role Mining + description: >- + This endpoint adds or removes entitlements from an exclusion list for a potential role. + parameters: + - in: path + name: sessionId + schema: + type: string + required: true + description: The role mining session id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: path + name: potentialRoleId + schema: + type: string + required: true + description: A potential role id in a role mining session + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + requestBody: + description: Role mining session parameters + required: true + content: + application/json: + schema: + $ref: "../schemas/RoleMiningPotentialRoleEditEntitlements.yaml" + responses: + '201': + description: Adds or removes entitlements from a potential role's entitlement exclusion list. + content: + application/json: + schema: + $ref: '../schemas/RoleMiningPotentialRole.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/role-mining-potential-role-entitlement-popularities.yaml b/static/idn-api/beta/paths/role-mining-potential-role-entitlement-popularities.yaml new file mode 100644 index 000000000..75df9fc9d --- /dev/null +++ b/static/idn-api/beta/paths/role-mining-potential-role-entitlement-popularities.yaml @@ -0,0 +1,66 @@ +get: + operationId: getEntitlementsPotentialRole + summary: Retrieves entitlements for a potential role in a role mining session + tags: + - IAI Role Mining + description: >- + This method returns entitlements for a potential role in a role mining session. + parameters: + - in: path + name: sessionId + schema: + type: string + required: true + description: The role mining session id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: path + name: potentialRoleId + schema: + type: string + required: true + description: A potential role id in a role mining session + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: query + name: includeCommonAccess + description: Boolean determining whether common access entitlements will be included or not + required: false + style: form + explode: true + schema: + type: boolean + - in: query + name: sorters + description: sort by popularity, default order descending + required: false + style: form + explode: true + schema: + type: string + - in: query + name: filters + description: Filter parameter by "starts with" for the applicationName and entitlementRef.name. + required: false + style: form + explode: true + schema: + type: string + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + responses: + '200': + description: Succeeded. Returns a list of entitlements for a potential role. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/RoleMiningEntitlement.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/role-mining-potential-role-entitlement-popularity-distribution.yaml b/static/idn-api/beta/paths/role-mining-potential-role-entitlement-popularity-distribution.yaml new file mode 100644 index 000000000..4c06fe3d9 --- /dev/null +++ b/static/idn-api/beta/paths/role-mining-potential-role-entitlement-popularity-distribution.yaml @@ -0,0 +1,47 @@ +get: + operationId: getEntitlementDistributionPotentialRole + summary: Retrieves entitlement popularity distribution for a potential role in a role mining session + tags: + - IAI Role Mining + description: >- + This method returns entitlement popularity distribution for a potential role in a role mining session. + parameters: + - in: path + name: sessionId + schema: + type: string + required: true + description: The role mining session id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: path + name: potentialRoleId + schema: + type: string + required: true + description: A potential role id in a role mining session + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: query + name: includeCommonAccess + description: Boolean determining whether common access entitlements will be included or not + required: false + style: form + explode: true + schema: + type: boolean + responses: + '200': + description: Succeeded. Returns a map containing entitlement popularity distribution for a potential role. + content: + application/json: + schema: + type: object + additionalProperties: + type: integer + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/role-mining-potential-role-excluded-entitlements.yaml b/static/idn-api/beta/paths/role-mining-potential-role-excluded-entitlements.yaml new file mode 100644 index 000000000..fffdf8601 --- /dev/null +++ b/static/idn-api/beta/paths/role-mining-potential-role-excluded-entitlements.yaml @@ -0,0 +1,58 @@ +get: + operationId: getExcludedEntitlementsPotentialRole + summary: Retrieves excluded entitlements for a potential role in a role mining session + tags: + - IAI Role Mining + description: >- + This method returns excluded entitlements for a potential role in a role mining session. + parameters: + - in: path + name: sessionId + schema: + type: string + required: true + description: The role mining session id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: path + name: potentialRoleId + schema: + type: string + required: true + description: A potential role id in a role mining session + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: query + name: sorters + description: sort by popularity, default order descending + required: false + style: form + explode: true + schema: + type: string + - in: query + name: filters + description: Filter parameter by "starts with" for the applicationName and entitlementRef.name. + required: false + style: form + explode: true + schema: + type: string + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + responses: + '200': + description: Succeeded. Returns a list of excluded entitlements for a potential roles. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/RoleMiningEntitlement.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/role-mining-potential-role-identities.yaml b/static/idn-api/beta/paths/role-mining-potential-role-identities.yaml new file mode 100644 index 000000000..0d77013fc --- /dev/null +++ b/static/idn-api/beta/paths/role-mining-potential-role-identities.yaml @@ -0,0 +1,58 @@ +get: + operationId: getIdentitiesPotentialRole + summary: Retrieves identities for a potential role in a role mining session + tags: + - IAI Role Mining + description: >- + This method returns identities for a potential role in a role mining session. + parameters: + - in: path + name: sessionId + schema: + type: string + required: true + description: The role mining session id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: path + name: potentialRoleId + schema: + type: string + required: true + description: A potential role id in a role mining session + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: query + name: sorters + description: sort by name, default order ascending + required: false + style: form + explode: true + schema: + type: string + - in: query + name: filters + description: Filter parameter by "starts with" for the name. + required: false + style: form + explode: true + schema: + type: string + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + responses: + '200': + description: Succeeded. Returns a list of identities for a potential role. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/RoleMiningIdentity.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/role-mining-potential-role-provision.yaml b/static/idn-api/beta/paths/role-mining-potential-role-provision.yaml new file mode 100644 index 000000000..1a8a2fcaa --- /dev/null +++ b/static/idn-api/beta/paths/role-mining-potential-role-provision.yaml @@ -0,0 +1,65 @@ +post: + operationId: createPotentialRoleProvisionRequest + summary: Create request to provision a potential role into an actual role. + tags: + - IAI Role Mining + description: >- + This method starts a job to provision a potential role + parameters: + - in: path + name: sessionId + schema: + type: string + required: true + description: The role mining session id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: path + name: potentialRoleId + schema: + type: string + required: true + description: A potential role id in a role mining session + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: query + name: min-entitlement-popularity + description: Minimum popularity required for an entitlement to be included in the provisioned role. + required: false + style: form + explode: true + schema: + type: integer + default: 0 + minimum: 0 + maximum: 100 + - in: query + name: include-common-access + description: Boolean determining whether common access entitlements will be included in the provisioned role. + required: false + style: form + explode: true + schema: + type: boolean + default: true + requestBody: + description: Required information to create a new role + content: + application/json: + schema: + $ref: '../schemas/RoleMiningPotentialRoleProvisionRequest.yaml' + responses: + '202': + description: Accepted. Returns a potential role summary including the status of the provison request + content: + application/json: + schema: + $ref: '../schemas/RoleMiningPotentialRoleSummary.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/role-mining-session-potential-role-applications.yaml b/static/idn-api/beta/paths/role-mining-session-potential-role-applications.yaml new file mode 100644 index 000000000..a4a74921e --- /dev/null +++ b/static/idn-api/beta/paths/role-mining-session-potential-role-applications.yaml @@ -0,0 +1,42 @@ +get: + operationId: getPotentialRoleApplications + summary: Retrieves the applications of a potential role for a role mining session + tags: + - IAI Role Mining + description: >- + This method returns the applications of a potential role for a role mining session. + parameters: + - in: path + name: sessionId + schema: + type: string + required: true + description: The role mining session id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: path + name: potentialRoleId + schema: + type: string + required: true + description: A potential role id in a role mining session + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + responses: + '200': + description: Succeeded. Returns a list of potential roles for a role mining session. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/RoleMiningPotentialRoleApplication.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/role-mining-session-potential-role-export-async.yaml b/static/idn-api/beta/paths/role-mining-session-potential-role-export-async.yaml new file mode 100644 index 000000000..177cff725 --- /dev/null +++ b/static/idn-api/beta/paths/role-mining-session-potential-role-export-async.yaml @@ -0,0 +1,43 @@ +post: + operationId: exportRoleMiningPotentialRoleAsync + summary: Asynchronously export details for a potential role in a role mining session and upload to S3 + tags: + - IAI Role Mining + description: >- + This endpoint uploads all the information for a potential role in a role mining session to S3 as a downloadable zip archive. + Includes identities and entitlements in the potential role. + parameters: + - in: path + name: sessionId + schema: + type: string + required: true + description: The role mining session id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: path + name: potentialRoleId + schema: + type: string + required: true + description: A potential role id in a role mining session + example: 278359a6-04b7-4669-9468-924cf580964a + requestBody: + content: + application/json: + schema: + $ref: '../schemas/RoleMiningPotentialRoleExportRequest.yaml' + responses: + '202': + description: Job Submitted. Returns a reportId that can be used to download the zip once complete + content: + application/json: + schema: + $ref: '../schemas/RoleMiningPotentialRoleExportResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/role-mining-session-potential-role-export-download.yaml b/static/idn-api/beta/paths/role-mining-session-potential-role-export-download.yaml new file mode 100644 index 000000000..4ebc2b4b7 --- /dev/null +++ b/static/idn-api/beta/paths/role-mining-session-potential-role-export-download.yaml @@ -0,0 +1,48 @@ +get: + operationId: downloadRoleMiningPotentialRoleZip + summary: Export (download) details for a potential role in a role mining session + tags: + - IAI Role Mining + description: >- + This endpoint downloads a completed export of information for a potential role in a role mining session. + parameters: + - in: path + name: sessionId + schema: + type: string + format: uuid + required: true + description: The role mining session id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: path + name: potentialRoleId + schema: + type: string + format: uuid + required: true + description: A potential role id in a role mining session + example: 278359a6-04b7-4669-9468-924cf580964a + - in: path + name: exportId + schema: + type: string + format: uuid + required: true + description: The id of a previously run export job for this potential role + example: 4940ffd4-836f-48a3-b2b0-6d498c3fdf40 + responses: + '200': + description: Succeeded. Returns a zip file containing csv files for identities and entitlements for the potential role. + content: + application/zip: + schema: + type: string + format: binary + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/role-mining-session-potential-role-export-status.yaml b/static/idn-api/beta/paths/role-mining-session-potential-role-export-status.yaml new file mode 100644 index 000000000..7004b6937 --- /dev/null +++ b/static/idn-api/beta/paths/role-mining-session-potential-role-export-status.yaml @@ -0,0 +1,47 @@ +get: + operationId: exportRoleMiningPotentialRoleStatus + summary: Retrieve status of a potential role export job + tags: + - IAI Role Mining + description: >- + This endpoint retrieves information about the current status of a potential role export. + parameters: + - in: path + name: sessionId + schema: + type: string + format: uuid + required: true + description: The role mining session id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: path + name: potentialRoleId + schema: + type: string + format: uuid + required: true + description: A potential role id in a role mining session + example: 278359a6-04b7-4669-9468-924cf580964a + - in: path + name: exportId + schema: + type: string + format: uuid + required: true + description: The id of a previously run export job for this potential role + example: 4940ffd4-836f-48a3-b2b0-6d498c3fdf40 + responses: + '200': + description: Success. Returns the current status of this export + content: + application/json: + schema: + $ref: '../schemas/RoleMiningPotentialRoleExportResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/role-mining-session-potential-role-export.yaml b/static/idn-api/beta/paths/role-mining-session-potential-role-export.yaml new file mode 100644 index 000000000..f9e8eb990 --- /dev/null +++ b/static/idn-api/beta/paths/role-mining-session-potential-role-export.yaml @@ -0,0 +1,39 @@ +get: + operationId: exportRoleMiningPotentialRole + summary: Export (download) details for a potential role in a role mining session + tags: + - IAI Role Mining + description: >- + This endpoint downloads all the information for a potential role in a role mining session. Includes identities and + entitlements in the potential role. + parameters: + - in: path + name: sessionId + schema: + type: string + required: true + description: The role mining session id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: path + name: potentialRoleId + schema: + type: string + required: true + description: A potential role id in a role mining session + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + responses: + '200': + description: Succeeded. Returns a zip file containing csv files for identities and entitlements for the potential role. + content: + application/zip: + schema: + type: string + format: binary + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/role-mining-session-potential-role-summaries.yaml b/static/idn-api/beta/paths/role-mining-session-potential-role-summaries.yaml new file mode 100644 index 000000000..9e9623e63 --- /dev/null +++ b/static/idn-api/beta/paths/role-mining-session-potential-role-summaries.yaml @@ -0,0 +1,43 @@ +get: + operationId: getPotentialRoleSummaries + summary: Retrieves the potential role summaries for a role mining session + tags: + - IAI Role Mining + description: >- + This method returns the potential role summaries for a role mining session. + parameters: + - in: path + name: sessionId + schema: + type: string + required: true + description: The role mining session id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: query + name: sorters + description: sort by identityCount, density, freshness or quality + required: false + style: form + explode: true + schema: + type: string + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + responses: + '200': + description: Succeeded. Returns a list of potential role summaries for a role mining session. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/RoleMiningPotentialRoleSummary.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/role-mining-session-potential-role-summary.yaml b/static/idn-api/beta/paths/role-mining-session-potential-role-summary.yaml new file mode 100644 index 000000000..1abf159f9 --- /dev/null +++ b/static/idn-api/beta/paths/role-mining-session-potential-role-summary.yaml @@ -0,0 +1,37 @@ +get: + operationId: getPotentialRoleSummary + summary: Retrieves a specific potential role for a role mining session + tags: + - IAI Role Mining + description: >- + This method returns a specific potential role for a role mining session. + parameters: + - in: path + name: sessionId + schema: + type: string + required: true + description: The role mining session id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + - in: path + name: potentialRoleId + schema: + type: string + required: true + description: A potential role id in a role mining session + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + responses: + '200': + description: Succeeded. Returns a list of potential roles for a role mining session. + content: + application/json: + schema: + $ref: '../schemas/RoleMiningPotentialRoleSummaryDistribution.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/role-mining-session-status.yaml b/static/idn-api/beta/paths/role-mining-session-status.yaml new file mode 100644 index 000000000..92a4d06da --- /dev/null +++ b/static/idn-api/beta/paths/role-mining-session-status.yaml @@ -0,0 +1,30 @@ +get: + operationId: getRoleMiningSessionStatus + summary: Get role mining session status state + tags: + - IAI Role Mining + description: >- + This method returns a role mining session status for a customer. + parameters: + - in: path + name: sessionId + schema: + type: string + required: true + description: The role mining session id + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + responses: + '200': + description: Succeeded. Returns session status + content: + application/json: + schema: + $ref: '../schemas/RoleMiningSessionStatus.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/role-mining-session.yaml b/static/idn-api/beta/paths/role-mining-session.yaml new file mode 100644 index 000000000..9765704fe --- /dev/null +++ b/static/idn-api/beta/paths/role-mining-session.yaml @@ -0,0 +1,106 @@ +patch: + operationId: patchRoleMiningSession + summary: Patch a role mining session + tags: + - IAI Role Mining + description: >- + The method updates an existing role mining session using PATCH. Supports op in {"replace"} and changes to + pruneThreshold and/or minNumIdentitiesInPotentialRole. The potential roles in this role mining session is then + re-calculated. + parameters: + - in: path + name: sessionId + schema: + type: string + required: true + description: The role mining session id to be patched + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + requestBody: + required: true + description: Replace pruneThreshold and/or minNumIdentitiesInPotentialRole in role mining session. Update saved status or saved name for a role mining session. + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + example: + [ + { + "op": "replace", + "path": "/pruneThreshold", + "value": "83" + }, + { + "op": "replace", + "path": "/minNumIdentitiesInPotentialRole", + "value": "10" + }, + { + "op": "replace", + "path": "/saved", + "value": "false" + }, + { + "op": "replace", + "path": "/name", + "value": "RM Session - 07/10/22" + }, + { + "op": "add", + "path": "/name", + "value": "RM Session - 07/10/22" + } + ] + responses: + "202": + description: Success + $ref: '../../v3/responses/202.yaml' + "400": + $ref: '../../v3/responses/400.yaml' + "401": + $ref: '../../v3/responses/401.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + "404": + $ref: '../../v3/responses/404.yaml' + "429": + $ref: '../../v3/responses/429.yaml' + "500": + $ref: '../../v3/responses/500.yaml' + + +get: + operationId: getRoleMiningSession + summary: Get a role mining session + tags: + - IAI Role Mining + description: >- + The method retrieves a role mining session. + parameters: + - in: path + name: sessionId + schema: + type: string + required: true + description: The role mining session id to be retrieved. + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + responses: + "200": + description: Returns a role mining session + content: + application/json: + schema: + $ref: '../schemas/RoleMiningSessionResponse.yaml' + "400": + $ref: '../../v3/responses/400.yaml' + "401": + $ref: '../../v3/responses/400.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + "404": + $ref: '../../v3/responses/404.yaml' + "429": + $ref: '../../v3/responses/429.yaml' + "500": + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/role-mining-sessions.yaml b/static/idn-api/beta/paths/role-mining-sessions.yaml new file mode 100644 index 000000000..b78cf9f2c --- /dev/null +++ b/static/idn-api/beta/paths/role-mining-sessions.yaml @@ -0,0 +1,81 @@ +post: + operationId: roleMiningSessions + summary: Create a role mining session + tags: + - IAI Role Mining + description: >- + This submits a create role mining session request to the role mining application. + requestBody: + description: Role mining session parameters + required: true + content: + application/json: + schema: + $ref: "../schemas/RoleMiningSessionDto.yaml" + responses: + '201': + description: Submitted a role mining session request + content: + application/json: + schema: + $ref: '../schemas/RoleMiningSessionResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + +get: + operationId: getRoleMiningSessions + summary: Retrieves all role mining sessions + tags: + - IAI Role Mining + description: >- + Returns all role mining sessions that match the query parameters + parameters: + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + Filtering is supported for the following fields and operators: + **saved**: *eq* "true" or "false" + **name**: *eq, sw* + example: 'saved eq "true" and name sw "RM Session"' + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + Sorting is supported for the following fields: **createdBy, createdDate** + example: 'createdBy,createdDate' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + responses: + '200': + description: Succeeded. Returns all role mining sessions that match the query parameters. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/RoleMiningSessionDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/role.yaml b/static/idn-api/beta/paths/role.yaml new file mode 100644 index 000000000..454a780e4 --- /dev/null +++ b/static/idn-api/beta/paths/role.yaml @@ -0,0 +1,245 @@ +get: + operationId: getRole + tags: + - Roles + summary: Get a Role + description: >- + This API returns a Role by its ID. + + + A token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to call this API. In addition, a + token with ROLE_SUBADMIN authority may only call this API if all Access Profiles included in the Role are associated + to Sources with management workgroups of which the ROLE_SUBADMIN is a member. + parameters: + - in: path + name: id + required: true + schema: + type: string + description: >- + ID of the Role + example: 2c91808a7813090a017814121e121518 + responses: + '200': + description: List of all Roles + content: + application/json: + schema: + $ref: '../../v3/schemas/access/Role.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:role:read' + - 'idn:role-checked:read' +patch: + operationId: patchRole + tags: + - Roles + summary: Patch a specified Role + description: >- + This API updates an existing Role using [JSON Patch](https://tools.ietf.org/html/rfc6902) syntax. + + + The following fields are patchable: + **name**, **description**, **enabled**, **owner**, **accessProfiles**, **membership**, **requestable**, + **accessRequestConfig**, **revokeRequestConfig**, **segments** + + + A token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to call this API. In addition, a + token with ROLE_SUBADMIN authority may only call this API if all Access Profiles included in the Role are associated + to Sources with management workgroups of which the ROLE_SUBADMIN is a member. + parameters: + - name: id + in: path + description: ID of the Role to patch + required: true + schema: + type: string + example: 2c91808a7813090a017814121e121518 + requestBody: + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + examples: + Make a Role Requestable and Enable it in One Call: + description: This example shows how multiple fields may be updated with a single patch call. + value: + [ + { + "op": "replace", + "path": "/requestable", + "value": true + }, + { + "op": "replace", + "path": "/enabled", + "value": true + } + ] + + Assign a Role to a Segment: + description: >- + This example illustrates the use of patch to assign a Role to a Segment by adding the Segment's ID to the + Role's segments array. + value: + [ + { + "op": "add", + "path": "/segments/-", + "value": "f7b1b8a3-5fed-4fd4-ad29-82014e137e19" + } + ] + + Set the Membership Selection Criteria to a List of Identities: + description: >- + This example shows how to define a Role's membershp by providing a list of Identities, referenced by their + IDs. + value: + [ + { + "op": "replace", + "path": "/membership", + "value": { + "type": "IDENTITY_LIST", + "identities": [ + { + "id": "2c91808973fe906c0174262092014ed9" + }, + { + "id": "2c918086262092014ed94fb8a47612f3" + } + ] + } + } + ] + + Set the Membership Selection Criteria to a Standard Expression: + description: >- + This example shows how to define a Role's membership using STANDARD criteria. In this case, the Role + will be granted to all Identities which have the *Engineering* attribute from the indicated Source. + value: + [ + { + "op": "replace", + "path": "/membership", + "value": { + "type": "STANDARD", + "criteria": { + "operation": "OR", + "children": [ + { + "operation": "EQUALS", + "key": { + "type": "ENTITLEMENT", + "property": "attribute.memberOf", + "sourceId": "2c9180887701fb2014213e122092014e" + }, + "stringValue": "Engineering" + } + ] + } + } + } + ] + + Add a New Clause as the Child of an Existing Standard Expression: + description: >- + This example shows how to add a child clause to an existing STANDARD criteria expression. + value: + [ + { + "op": "add", + "path": "/membership/criteria/children/-", + "value": { + "operation": "ENDS_WITH", + "key": { + "type": "IDENTITY", + "property": "attribute.email" + }, + "stringValue": "@identitynow.com" + } + } + ] + + required: true + responses: + '200': + description: Responds with the Role as updated. + content: + application/json: + schema: + $ref: '../../v3/schemas/access/Role.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:role:update' + - 'idn:role-checked:update' +delete: + operationId: deleteRole + tags: + - Roles + summary: Delete a Role + description: >- + This API deletes a Role by its ID. + + A token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to call this API. In addition, a + token with ROLE_SUBADMIN authority may only call this API if all Access Profiles included in the Role are associated + to Sources with management workgroups of which the ROLE_SUBADMIN is a member. + parameters: + - in: path + name: id + required: true + schema: + type: string + description: >- + ID of the Role + example: 2c91808a7813090a017814121e121518 + responses: + '202': + description: Accepted - Returned if the request was successfully accepted into the system. + content: + application/json: + schema: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: A DTO with a TaskResult reference of the delete job + example: + { + "type": "TASK_RESULT", + "id": "402881fc7e73d5df017e73d93f1b0002", + "name": null + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:role:delete' + - 'idn:role-checked:delete' diff --git a/static/idn-api/beta/paths/roles-by-identity.yaml b/static/idn-api/beta/paths/roles-by-identity.yaml new file mode 100644 index 000000000..8f0fcb2e8 --- /dev/null +++ b/static/idn-api/beta/paths/roles-by-identity.yaml @@ -0,0 +1,43 @@ +get: + operationId: getRolesByIdentity + tags: + - Roles + summary: Get a list of Roles assigned to Identity + description: >- + This API returns a list of Roles assigned to Identity. + + + Any authenticated user can read their own roles. Otherwise, a token with API, ORG_ADMIN, DASHBOARD, REPORT_ADMIN, + CLOUD_GOV_ADMIN, or CLOUD_GOV_USER authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + description: >- + ID of the Identity for which the assigned Roles are to be listed + example: 2c9180857dc9900e017dd3a36e1c3ab8 + required: true + responses: + '200': + description: List of Roles + content: + application/json: + schema: + type: array + items: + $ref: '../../v3/schemas/access/Role.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:identity:read' + - 'idn:identity-self:read' diff --git a/static/idn-api/beta/paths/roles.yaml b/static/idn-api/beta/paths/roles.yaml new file mode 100644 index 000000000..b723df00a --- /dev/null +++ b/static/idn-api/beta/paths/roles.yaml @@ -0,0 +1,140 @@ +get: + operationId: listRoles + tags: + - Roles + summary: List Roles + description: >- + This API returns a list of Roles. + + + A token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to + call this API. + parameters: + - in: query + name: for-subadmin + schema: + type: string + description: >- + If provided, filters the returned list according to what is visible to the indicated ROLE_SUBADMIN Identity. + The value of the parameter is either an Identity ID, or the special value **me**, + which is shorthand for the calling Identity's ID. + A 400 Bad Request error is returned if the **for-subadmin** parameter is specified for an Identity that is not + a subadmin. + example: 5168015d32f890ca15812c9180835d2e + required: false + - $ref: '../../v3/parameters/limit50.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#filtering-results) + Filtering is supported for the following fields and operators: + + **id**: *eq, in* + **name**: *eq, sw* + **created, modified**: *gt, lt, ge, le* + **owner.id**: *eq, in* + **requestable**: *eq* + example: requestable eq false + required: false + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#sorting-results) + Sorting is supported for the following fields: **name, created, modified** + + example: name,-modified + required: false + - in: query + name: for-segment-ids + schema: + type: string + format: comma-separated + description: >- + If present and not empty, additionally filters Roles to those which are assigned to the Segment(s) + with the specified IDs. + + + If segmentation is currently unavailable, specifying this parameter results in an error. + + example: 0b5c9f25-83c6-4762-9073-e38f7bb2ae26,2e8d8180-24bc-4d21-91c6-7affdb473b0d + required: false + - in: query + name: include-unsegmented + schema: + type: boolean + default: true + description: >- + Whether or not the response list should contain unsegmented Roles. + If *for-segment-ids* is absent or empty, specifying *include-unsegmented* as false results in an error. + example: false + required: false + responses: + '200': + description: List of Roles + content: + application/json: + schema: + type: array + items: + $ref: '../../v3/schemas/access/Role.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:role:read' + - 'idn:role-checked:read' +post: + operationId: createRole + tags: + - Roles + summary: Create a Role + description: >- + This API creates a Role. + + There is a soft limit of 800 roles per org in IdentityNow. You will receive an error if you attempt to add more than 800 roles via the API or the UI. If you need to add roles above this limit, please create a support ticket. + + A token with API, ORG_ADMIN, ROLE_ADMIN, or ROLE_SUBADMIN authority is required to + call this API. In addition, a ROLE_SUBADMIN may not create a Role including an Access Profile if that Access Profile + is associated with a Source with which the ROLE_SUBADMIN is not themselves associated. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../../v3/schemas/access/Role.yaml' + responses: + '201': + description: Role created + content: + application/json: + schema: + $ref: '../../v3/schemas/access/Role.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:role:create' + - 'idn:role-checked:create' diff --git a/static/idn-api/beta/paths/run-datapipeline-dagid.yaml b/static/idn-api/beta/paths/run-datapipeline-dagid.yaml new file mode 100644 index 000000000..6502eea2d --- /dev/null +++ b/static/idn-api/beta/paths/run-datapipeline-dagid.yaml @@ -0,0 +1,44 @@ +post: + operationId: runDataPipelineByDagId + tags: + - IAI Data Pipeline + summary: Run a specific data pipeline dag by dag id + description: >- + This starts a specific type of data pipeline dag by dag id. + + Requires security scope of 'iai:data-pipeline:run'. + + parameters: + - in: path + name: type + schema: + type: string + enum: + - PGA + - STREAMING + required: true + description: The data pipeline type + example: STREAMING + - in: path + name: id + schema: + type: string + required: true + description: The dag id + example: 'airflow-dag-1' + responses: + '202': + $ref: '../../v3/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + # security: + # - bearerAuth: + # - 'iai:data-pipeline:run' diff --git a/static/idn-api/beta/paths/run-datapipeline-dagtype.yaml b/static/idn-api/beta/paths/run-datapipeline-dagtype.yaml new file mode 100644 index 000000000..3ebe57337 --- /dev/null +++ b/static/idn-api/beta/paths/run-datapipeline-dagtype.yaml @@ -0,0 +1,36 @@ +post: + operationId: runDataPipelineByType + tags: + - IAI Data Pipeline + summary: Run a specific data pipeline dag for a customer by data pipeline type + description: >- + This starts a latest data pipeline dag based on previous dags execution date for a customer by data pipeline type. + + Requires security scope of 'iai:data-pipeline:run'. + parameters: + - in: path + name: type + schema: + type: string + enum: + - PGA + - STREAMING + required: true + description: The data pipeline type + example: STREAMING + responses: + '202': + $ref: '../../v3/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + # security: + # - bearerAuth: + # - 'iai:data-pipeline:run' diff --git a/static/idn-api/beta/paths/s3-proxy.yaml b/static/idn-api/beta/paths/s3-proxy.yaml new file mode 100644 index 000000000..761e9300c --- /dev/null +++ b/static/idn-api/beta/paths/s3-proxy.yaml @@ -0,0 +1,52 @@ +get: + operationId: s3Proxy + summary: Retrieves an artifact from S3. + tags: + - S3 Access + description: >- + Accepts a path from S3 and the bucket type either shared or org. The bucket in which the artifact resides is provided + to the runtime service by an environment variable controlled by devops. This is also true for the S3 creds as they + are available to the service at runtime. + + If the bucket type is shared, no further validation is needed. If the bucket type is org, the information in the JWT + is validated against the path query parameter. A token with API authority is required to access this endpoint.. + + security: + - bearerAuth: + - idn:s3-proxy:read + parameters: + - in: query + name: path + schema: + type: string + required: true + description: The path to the S3 artifact minus the bucket. + example: /xxx/yyy/zzz/filename + - in: query + name: bucket-type + schema: + type: string + enum: [ORG, SHARED] + required: true + description: The type of bucket either shared or org. + example: SHARED + responses: + '200': + description: Requested file + content: + application/octet-stream: + schema: + type: string + format: binary + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/saas-management-application-for-source.yaml b/static/idn-api/beta/paths/saas-management-application-for-source.yaml new file mode 100644 index 000000000..06a4f7f03 --- /dev/null +++ b/static/idn-api/beta/paths/saas-management-application-for-source.yaml @@ -0,0 +1,36 @@ +get: + operationId: getApplicationForSource + tags: + - SaaS Management + summary: SaaS Management Application for source + description: >- + This API returns the mapped SaaS Management application for an IdentityNow source ID or 404 if not mapped. + + A token with ORG_ADMIN, SOURCE_ADMIN or SOURCE_SUBADMIN authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The IdentityNow source ID + example: 2c9180866166b5b0016167c32ef31a66 + responses: + '200': + description: SaaS Management application for source, if source is mapped. + content: + application/json: + schema: + $ref: '../../beta/schemas/SaasManagementApplication.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/saas-management-applications-test.yaml b/static/idn-api/beta/paths/saas-management-applications-test.yaml new file mode 100644 index 000000000..7b5f3451d --- /dev/null +++ b/static/idn-api/beta/paths/saas-management-applications-test.yaml @@ -0,0 +1,37 @@ +post: + operationId: testApplicationMapping + tags: + - SaaS Management + summary: Test SaaS Management Application mapping + description: >- + This API tests if accounts on IdentityNow match those on the mapped SaaS Management Application, + or 404 if not mapped. + + A token with ORG_ADMIN, SOURCE_ADMIN or SOURCE_SUBADMIN authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The IdentityNow source ID + example: 2c9180866166b5b0016167c32ef31a66 + responses: + '200': + description: SaaS Management application object with the updated test result. + content: + application/json: + schema: + $ref: '../../beta/schemas/SaasManagementApplication.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/saas-management-applications-update-map.yaml b/static/idn-api/beta/paths/saas-management-applications-update-map.yaml new file mode 100644 index 000000000..567fc5152 --- /dev/null +++ b/static/idn-api/beta/paths/saas-management-applications-update-map.yaml @@ -0,0 +1,39 @@ +post: + operationId: updateApplicationsMap + tags: + - SaaS Management + summary: Update SaaS Management Application mapping + description: >- + This API updates SaaS Management Application mappings to IdentityNow sources. + + A token with ORG_ADMIN, SOURCE_ADMIN or SOURCE_SUBADMIN authority is required to call this API. + requestBody: + required: true + description: One or more mappings to update. + content: + application/json: + schema: + type: array + items: + $ref: '../../beta/schemas/SaasManagementApplicationMap.yaml' + responses: + '200': + description: Updated SaaS Management application objects. + content: + application/json: + schema: + type: array + items: + $ref: '../../beta/schemas/SaasManagementApplication.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/saas-management-applications.yaml b/static/idn-api/beta/paths/saas-management-applications.yaml new file mode 100644 index 000000000..96b31255b --- /dev/null +++ b/static/idn-api/beta/paths/saas-management-applications.yaml @@ -0,0 +1,53 @@ +get: + operationId: listApplications + tags: + - SaaS Management + summary: SaaS Management Applications + description: >- + This API returns a list of SaaS Management applications sorted by name that satisfy the given query parameters. + + A token with ORG_ADMIN, SOURCE_ADMIN or SOURCE_SUBADMIN authority is required to call this API. + parameters: + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **name**: *eq, co, sw* + + + **integrationType**: *eq, in* + + + **integrationState**: *eq, in* + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + responses: + '200': + description: List of SaaS Management applications + content: + application/json: + schema: + type: array + items: + $ref: '../../beta/schemas/SaasManagementApplication.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/scheduled-actions-bulk-delete.yaml b/static/idn-api/beta/paths/scheduled-actions-bulk-delete.yaml new file mode 100644 index 000000000..23dbadea3 --- /dev/null +++ b/static/idn-api/beta/paths/scheduled-actions-bulk-delete.yaml @@ -0,0 +1,41 @@ +post: + operationId: bulkDeleteScheduledActions + tags: + - SP-Scheduler + summary: Bulk Delete Scheduled Actions + description: >- + This deletes a list of scheduled actions filtered by meta data. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + meta: + type: object + description: Key value pair to query the meta data field provided when actions are created. + example: {"flag": true} + responses: + '200': + description: >- + A list of scheduled action objects. + content: + application/json: + schema: + type: object + properties: + count: + type: integer + description: The amount of scheduled actions that were deleted. + example: 2 + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/scheduled-actions-delete.yaml b/static/idn-api/beta/paths/scheduled-actions-delete.yaml new file mode 100644 index 000000000..45cb671bb --- /dev/null +++ b/static/idn-api/beta/paths/scheduled-actions-delete.yaml @@ -0,0 +1,29 @@ +delete: + operationId: deleteScheduledActions + tags: + - SP-Scheduler + summary: Delete Scheduled Actions + description: >- + This deletes a scheduled action by id + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The scheduled action id + example: 0f11f2a4-7c94-4bf3-a2bd-742580fe3bde + responses: + '204': + $ref: '../../v3/responses/204.yaml' + description: The scheduled action was successfully deleted. + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/scheduled-actions.yaml b/static/idn-api/beta/paths/scheduled-actions.yaml new file mode 100644 index 000000000..3e9842079 --- /dev/null +++ b/static/idn-api/beta/paths/scheduled-actions.yaml @@ -0,0 +1,73 @@ +get: + operationId: listScheduledActions + tags: + - SP-Scheduler + summary: List Scheduled Actions + description: >- + This gets a list of scheduled actions filtered by query parameters and meta data. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **meta**: *eq* + responses: + '200': + description: >- + A list of scheduled action objects. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/ScheduledAction.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +post: + operationId: createScheduledActions + tags: + - SP-Scheduler + summary: Create Scheduled Actions + description: >- + This creates a scheduled action with a deadline that it needs to be fired. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/ScheduledAction.yaml' + responses: + '200': + description: >- + A scheduled action object. + content: + application/json: + schema: + $ref: '../schemas/ScheduledAction.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/schema.yaml b/static/idn-api/beta/paths/schema.yaml new file mode 100644 index 000000000..1cf5f98a5 --- /dev/null +++ b/static/idn-api/beta/paths/schema.yaml @@ -0,0 +1,197 @@ + +get: + operationId: getSchema + tags: + - Sources + summary: Get Source Schema by ID + description: | + Get the Source Schema by ID in IdentityNow. + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source ID. + example: 2c9180835d191a86015d28455b4a2329 + - in: path + name: schemaId + schema: + type: string + required: true + description: The Schema ID. + example: 2c9180835d191a86015d28455b4a2329 + responses: + '200': + description: The requested Schema was successfully retrieved. + content: + application/json: + schema: + $ref: '../schemas/Schema.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +put: + operationId: replaceSchema + tags: + - Sources + summary: Update Source Schema (Full) + description: >- + This API will completely replace an existing Schema with the submitted payload. Some fields of the Schema cannot be updated. These fields are listed below. + + * id + + * name + + * created + + * modified + + Any attempt to modify these fields will result in an error response with a status code of 400. + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source ID. + example: 2c9180835d191a86015d28455b4a2329 + - in: path + name: schemaId + schema: + type: string + required: true + description: The Schema ID. + example: 2c9180835d191a86015d28455b4a2329 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/Schema.yaml' + responses: + '200': + description: The Schema was successfully replaced. + content: + application/json: + schema: + $ref: '../schemas/Schema.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +patch: + operationId: updateSchema + tags: + - Sources + summary: Update Source Schema (Partial) + description: >- + This API can be used to selectively update an existing Schema using a JSONPatch payload. Some fields of the Schema cannot be updated. These fields are listed below. + + * id + + * name + + * created + + * modified + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source id. + example: 2c9180835d191a86015d28455b4a2329 + - in: path + name: schemaId + schema: + type: string + required: true + description: The Schema id. + example: 2c9180835d191a86015d28455b4a2329 + requestBody: + required: true + description: The JSONPatch payload used to update the schema. + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + example: + - op: "replace" + path: "/displayAttribute" + value: {"new-display-attribute"} + responses: + '200': + description: The Schema was successfully updated. + content: + application/json: + schema: + $ref: '../schemas/Schema.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: deleteSchema + tags: + - Sources + summary: Delete Source Schema by ID + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source ID. + example: 2c9180835d191a86015d28455b4a2329 + - in: path + name: schemaId + schema: + type: string + required: true + description: The Schema ID. + example: 2c9180835d191a86015d28455b4a2329 + responses: + '204': + $ref: '../../v3/responses/204.yaml' + description: The Schema was successfully deleted. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/schemas.yaml b/static/idn-api/beta/paths/schemas.yaml new file mode 100644 index 000000000..a05efb8a9 --- /dev/null +++ b/static/idn-api/beta/paths/schemas.yaml @@ -0,0 +1,78 @@ + +get: + operationId: listSchemas + tags: + - Sources + summary: Lists the Schemas that exist on the specified Source in IdentityNow. + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source id. + example: 2c9180835d191a86015d28455b4a2329 + - in: query + name: include-types + required: false + schema: + type: string + description: >- + If set to 'group', then the account schema is filtered and only group schemas are returned. Only a + value of 'group' is recognized. + example: group + responses: + '200': + description: The Schemas were successfully retrieved. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/Schema.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +post: + operationId: createSchema + tags: + - Sources + summary: Creates a new Schema on the specified Source in IdentityNow. + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source id. + example: 2c9180835d191a86015d28455b4a2329 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/Schema.yaml' + responses: + '201': + description: The Schema was successfully created on the specified Source. + content: + application/json: + schema: + $ref: '../schemas/Schema.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/searchAttributeConfig-get-patch-delete.yaml b/static/idn-api/beta/paths/searchAttributeConfig-get-patch-delete.yaml new file mode 100644 index 000000000..bff047013 --- /dev/null +++ b/static/idn-api/beta/paths/searchAttributeConfig-get-patch-delete.yaml @@ -0,0 +1,126 @@ +get: + operationId: getSingleSearchAttributeConfig + tags: + - Search Attribute Configuration + summary: Get the details of a specific extended search attribute in IdentityNow. + description: >- + This API accepts an extended attribute name and retrieves the corresponding extended attribute configuration. + + A token with ORG_ADMIN authority is required to call this API. + parameters: + - name: name + in: path + description: Name of the extended search attribute configuration to delete. + required: true + schema: + type: string + example: "newMailAttribute" + responses: + '200': + description: Specific attribute configuration in IdentityNow. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/SearchAttributeConfig.yaml' + '204': + $ref: '../../v3/responses/204.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + +delete: + operationId: deleteSearchAttributeConfig + tags: + - Search Attribute Configuration + summary: Delete an extended search attribute in IdentityNow. + description: >- + This API accepts an extended attribute name and deletes the corresponding extended attribute configuration. + + A token with ORG_ADMIN authority is required to call this API. + parameters: + - name: name + in: path + description: Name of the extended search attribute configuration to delete. + required: true + schema: + type: string + example: "newMailAttribute" + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + +patch: + operationId: patchSearchAttributeConfig + tags: + - Search Attribute Configuration + summary: Update the details of a specific extended search attribute in IdentityNow. + description: >- + This API updates an existing Search Attribute Configuration. The following fields are patchable: + + **name**, **displayName**, **applicationAttributes** + + A token with ORG_ADMIN authority is required to call this API. + parameters: + - name: name + in: path + description: Name of the Search Attribute Configuration to patch. + required: true + schema: + type: string + example: promotedMailAttribute + requestBody: + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + example: + - op: "replace" + path: "/name" + value: "newAttributeName" + - op: "replace" + path: "/displayName" + value: "new attribute display name" + - op: "add" + path: "/applicationAttributes" + value: { "2c91808b79fd2422017a0b35d30f3968": "employeeNumber" } + required: true + responses: + '200': + description: Responds with the Search Attribute Configuration as updated. + content: + application/json: + schema: + $ref: '../schemas/SearchAttributeConfig.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/searchAttributeConfig.yaml b/static/idn-api/beta/paths/searchAttributeConfig.yaml new file mode 100644 index 000000000..c80f8adcc --- /dev/null +++ b/static/idn-api/beta/paths/searchAttributeConfig.yaml @@ -0,0 +1,66 @@ +post: + operationId: createSearchAttributeConfig + tags: + - Search Attribute Configuration + summary: Configure/create extended search attributes in IdentityNow. + description: >- + This API accepts an attribute name, an attribute display name and a list of name/value pair associates of application IDs + to attribute names. It will then validate the inputs and configure/create and attribute promotion configuration in the Link ObjectConfig. + + A token with ORG_ADMIN authority is required to call this API. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/SearchAttributeConfig.yaml' + example: { + "name": "newMailAttribute", + "displayName": "New Mail Attribute", + "applicationAttributes": { + "2c9180866166b5b0016167c32ef31a66": "mail", + "2c9180866166b5b0016167c32ef31a67": "mail" + } + } + responses: + '202': + $ref: '../../v3/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + +get: + operationId: getSearchAttributeConfig + tags: + - Search Attribute Configuration + summary: Retrieve a list of extended search attributes in IdentityNow. + description: >- + This API retrieves a list of attribute/application associates currently configured in IdentityNow. + + A token with ORG_ADMIN authority is required to call this API. + responses: + '200': + description: List of attribute configurations in IdentityNow. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/SearchAttributeConfig.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/segment-change-assignments.yaml b/static/idn-api/beta/paths/segment-change-assignments.yaml new file mode 100644 index 000000000..7a8283b6b --- /dev/null +++ b/static/idn-api/beta/paths/segment-change-assignments.yaml @@ -0,0 +1,80 @@ +post: + operationId: segmentChangeAssignments + tags: + - Segments + summary: Change Segment assignments. + description: >- + This API makes changes to the objects which are assigned to a Segment. + + + No more than 50 changes can be made in a single call. A 400 error will result if more changes than that are + specified. + + + Note that segmentation changes may take time to propagate through the system. + + + + A token with ORG_ADMIN or API authority is required to call this API. + parameters: + - in: path + name: id + required: true + schema: + type: string + description: The ID of the Segment + example: ab5fc0cd-e021-4b76-96e6-4818df0d73d5 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/SegmentChangeAssignments.yaml' + responses: + '202': + description: Accepted for processing, indicates no errors detected. + $ref: '../../v3/responses/202.yaml' + '400': + description: Client Error - Returned if the request body is invalid. + content: + application/json: + schema: + $ref: '../../v3/schemas/ErrorResponseDto.yaml' + examples: + 400.1 Bad Request Content: + description: Response for bad request content + value: + detailCode: 400.1 Bad Request Content + trackingId: 1ea1adcb84da4dcb890145e05745774e + messages: + - locale: en-US + localeOrigin: DEFAULT + text: The request was syntactically correct but its content is semantically invalid. + 400.1.4 Entitlements limit violation: + description: Entitlements limit violation response + value: + detailCode: 400.1.4 Limit violation + trackingId: 77aa89ac6f0e422dbc588866abc22be9 + messages: + - locale: en-US + localeOrigin: DEFAULT + text: You have reached the current limit of 20000 entitlements. + 400.1.4 Segments limit violation: + description: Segments limit violation response + value: + detailCode: 400.1.4 Limit violation + trackingId: 77aa89ac6f0e422dbc588866abc22be9 + messages: + - locale: en-US + localeOrigin: DEFAULT + text: You have reached the current limit of 100 segments for entitlement. + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + + diff --git a/static/idn-api/beta/paths/segment.yaml b/static/idn-api/beta/paths/segment.yaml new file mode 100644 index 000000000..5a5db563a --- /dev/null +++ b/static/idn-api/beta/paths/segment.yaml @@ -0,0 +1,150 @@ +get: + operationId: getSegmentById + tags: + - Segments + summary: Get a Segment by its ID + description: >- + This API returns the segment specified by the given ID. + + + A token with ORG_ADMIN or API authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the Segment to retrieve. + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: Segment + content: + application/json: + schema: + $ref: '../schemas/Segment.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: deleteSegmentById + tags: + - Segments + summary: Delete Segment by ID + description: >- + This API deletes the segment specified by the given ID. + + + Note that segment deletion may take some time to become effective. + + + A token with ORG_ADMIN or API authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the Segment to delete. + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '204': + description: No content. + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +patch: + operationId: patchSegment + tags: + - Segments + summary: Update a Segment + description: >- + Allows updating Segment fields using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + + + Note that changes to a segment may take some time to propagate to all identities, and that segments will have no + effect if segmentation is not enabled for your org. + + + A token with ORG_ADMIN or API authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the Segment being modified. + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + description: | + A list of Segment update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + + + The following fields are patchable: + * name + * description + * owner + * visibilityCriteria + * active + content: + application/json-patch+json: + schema: + type: array + items: + type: object + examples: + Set Visibility Criteria: + description: Set the visibility criteria + value: + - op: "replace" + path: "/visibilityCriteria" + value: + expression: + operator: "AND" + children: + - operator: "EQUALS" + attribute: "location" + value: + type: "STRING" + value: "Philadelphia" + - operator: "EQUALS" + attribute: "department" + value: + type: "STRING" + value: "HR" + + responses: + '200': + description: >- + Indicates the PATCH operation succeeded, and returns the Segment's new representation. + content: + application/json: + schema: + $ref: '../schemas/Segment.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/segments.yaml b/static/idn-api/beta/paths/segments.yaml new file mode 100644 index 000000000..a42e15b24 --- /dev/null +++ b/static/idn-api/beta/paths/segments.yaml @@ -0,0 +1,68 @@ +post: + operationId: createSegment + tags: + - Segments + summary: Create Segment + description: >- + This API creates a segment. + + + Note that segment definitions may take time to propagate to all identities. + + + A token with ORG_ADMIN or API authority is required to call this API. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/Segment.yaml' + responses: + '201': + description: Segment created + content: + application/json: + schema: + $ref: '../schemas/Segment.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +get: + operationId: listSegments + tags: + - Segments + summary: List Segments + description: >- + This API returns a list of all segments. + + A token with ORG_ADMIN or API authority is required to call this API. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + responses: + '200': + description: List of all Segments + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/Segment.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/send-test-notification.yaml b/static/idn-api/beta/paths/send-test-notification.yaml new file mode 100644 index 000000000..4cba9f6af --- /dev/null +++ b/static/idn-api/beta/paths/send-test-notification.yaml @@ -0,0 +1,35 @@ +post: + operationId: sendTestNotification + tags: + - Notifications + summary: Send Test Notification + description: >- + Send a Test Notification + requestBody: + required: true + content: + application/json: + schema: + $ref: '../../beta/schemas/SendTestNotificationRequestDto.yaml' + example: + key: "cloud_manual_work_item_summary" + medium: "EMAIL" + context: { + "numberOfPendingTasks": "4", + "ownerId": "201327fda1c44704ac01181e963d463c" + } + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/service-desk-integration-configuration.yaml b/static/idn-api/beta/paths/service-desk-integration-configuration.yaml new file mode 100644 index 000000000..4dbd07b75 --- /dev/null +++ b/static/idn-api/beta/paths/service-desk-integration-configuration.yaml @@ -0,0 +1,66 @@ +get: + tags: + - Service Desk Integration + summary: Get the time check configuration of queued SDIM tickets + description: Get the time check configuration of queued SDIM tickets. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + operationId: getStatusCheckDetails + responses: + "200": + description: QueuedCheckConfigDetails containing the configured values + content: + application/json: + schema: + $ref: '../schemas/QueuedCheckConfigDetails.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:service-desk-admin:read' + - 'idn:service-desk-integration:read' + +put: + tags: + - Service Desk Integration + summary: Update the time check configuration of queued SDIM tickets + description: Update the time check configuration of queued SDIM tickets. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + operationId: updateStatusCheckDetails + requestBody: + description: the modified time check configuration + content: + application/json: + schema: + $ref: '../schemas/QueuedCheckConfigDetails.yaml' + required: true + responses: + "200": + description: QueuedCheckConfigDetails as updated + content: + application/json: + schema: + $ref: '../schemas/QueuedCheckConfigDetails.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:service-desk-admin:write' + - 'idn:service-desk-integration:write' diff --git a/static/idn-api/beta/paths/service-desk-integration-template.yaml b/static/idn-api/beta/paths/service-desk-integration-template.yaml new file mode 100644 index 000000000..67773f67b --- /dev/null +++ b/static/idn-api/beta/paths/service-desk-integration-template.yaml @@ -0,0 +1,39 @@ +get: + tags: + - Service Desk Integration + summary: Service Desk integration template by scriptName. + description: This API endpoint returns an existing Service Desk integration template by scriptName. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + operationId: getServiceDeskIntegrationTemplate + parameters: + - name: scriptName + in: path + description: The scriptName value of the Service Desk integration template to get + required: true + style: simple + explode: false + schema: + type: string + example: aScriptName + responses: + "200": + description: Responds with the ServiceDeskIntegrationTemplateDto with the specified scriptName. + content: + application/json: + schema: + $ref: '../schemas/ServiceDeskIntegrationTemplateDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:service-desk-admin:read' + - 'idn:service-desk-integration:read' diff --git a/static/idn-api/beta/paths/service-desk-integration-types.yaml b/static/idn-api/beta/paths/service-desk-integration-types.yaml new file mode 100644 index 000000000..10b7d356f --- /dev/null +++ b/static/idn-api/beta/paths/service-desk-integration-types.yaml @@ -0,0 +1,31 @@ +get: + tags: + - Service Desk Integration + summary: Service Desk Integration Types List. + description: This API endpoint returns the current list of supported Service Desk integration types. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + operationId: getServiceDeskIntegrationTypes + responses: + "200": + description: Responds with an array of the currently supported Service Desk integration types. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/ServiceDeskIntegrationTemplateType.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:service-desk-admin:read' + - 'idn:service-desk-integration:read' diff --git a/static/idn-api/beta/paths/service-desk-integration.yaml b/static/idn-api/beta/paths/service-desk-integration.yaml new file mode 100644 index 000000000..524e232c9 --- /dev/null +++ b/static/idn-api/beta/paths/service-desk-integration.yaml @@ -0,0 +1,175 @@ +get: + tags: + - Service Desk Integration + summary: Get a Service Desk integration by ID + description: Get an existing Service Desk integration by ID. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + operationId: getServiceDeskIntegration + parameters: + - name: id + in: path + description: ID of the Service Desk integration to get + required: true + style: simple + explode: false + schema: + type: string + example: anId + responses: + "200": + description: ServiceDeskIntegrationDto with the given ID + content: + application/json: + schema: + $ref: '../schemas/ServiceDeskIntegrationDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:service-desk-admin:read' + - 'idn:service-desk-integration:read' + +put: + tags: + - Service Desk Integration + summary: Update a Service Desk integration by ID + description: Update an existing Service Desk integration by ID with updated value in JSON form as the request body. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + operationId: updateServiceDeskIntegration + parameters: + - name: id + in: path + description: ID of the Service Desk integration to update + required: true + style: simple + explode: false + schema: + type: string + example: anId + requestBody: + description: The specifics of the integration to update + content: + application/json: + schema: + $ref: '../schemas/ServiceDeskIntegrationDto.yaml' + required: true + responses: + "200": + description: ServiceDeskIntegrationDto as updated + content: + application/json: + schema: + $ref: '../schemas/ServiceDeskIntegrationDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:service-desk-admin:write' + - 'idn:service-desk-integration:write' + +delete: + tags: + - Service Desk Integration + summary: Delete a Service Desk integration by ID + description: Delete an existing Service Desk integration by ID. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + operationId: deleteServiceDeskIntegration + parameters: + - name: id + in: path + description: ID of Service Desk integration to delete + required: true + style: simple + explode: false + schema: + type: string + example: anId + responses: + "204": + description: Service Desk integration with the given ID successfully deleted + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:service-desk-admin:write' + - 'idn:service-desk-integration:write' + +patch: + operationId: patchServiceDeskIntegration + tags: + - Service Desk Integration + summary: Service Desk Integration Update - PATCH + description: Update an existing ServiceDeskIntegration by ID with a PATCH request. + parameters: + - name: id + in: path + description: ID of the Service Desk integration to update + required: true + style: simple + explode: false + schema: + type: string + example: anId + requestBody: + required: true + description: | + A list of SDIM update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + + PATCH can only be applied to the following fields: + * "beforeProvisioningRule" + + A 403 Forbidden Error indicates that you attempted to PATCH a field that is not allowed. + content: + application/json-patch+json: + schema: + $ref: '../schemas/JsonPatch.yaml' + responses: + "200": + description: ServiceDeskIntegrationDto as updated + content: + application/json: + schema: + $ref: '../schemas/ServiceDeskIntegrationDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:service-desk-admin:write' + - 'idn:service-desk-integration:write' \ No newline at end of file diff --git a/static/idn-api/beta/paths/service-desk-integrations.yaml b/static/idn-api/beta/paths/service-desk-integrations.yaml new file mode 100644 index 000000000..e25750741 --- /dev/null +++ b/static/idn-api/beta/paths/service-desk-integrations.yaml @@ -0,0 +1,109 @@ +get: + tags: + - Service Desk Integration + summary: List existing Service Desk Integrations + description: Get a list of ServiceDeskIntegrationDto for existing Service Desk Integrations. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + operationId: getServiceDeskIntegrationList + parameters: + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - name: sorters + in: query + required: false + style: form + explode: true + schema: + type: string + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **name** + - name: filters + in: query + required: false + style: form + explode: true + schema: + type: string + format: comma-separated + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **name**: *eq* + + + **type**: *eq, in* + + + **cluster**: *eq, in* + - $ref: '../../v3/parameters/count.yaml' + responses: + "200": + description: List of ServiceDeskIntegrationDto + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/ServiceDeskIntegrationDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:service-desk-admin:read' + - 'idn:service-desk-integration:read' + +post: + tags: + - Service Desk Integration + summary: Create a new Service Desk integration + description: Create a new Service Desk Integrations. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + operationId: createServiceDeskIntegration + requestBody: + description: The specifics of a new integration to create + content: + application/json: + schema: + $ref: '../schemas/ServiceDeskIntegrationDto.yaml' + required: true + responses: + "200": + description: details of the created integration + content: + application/json: + schema: + $ref: '../schemas/ServiceDeskIntegrationDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:service-desk-admin:write' + - 'idn:service-desk-integration:write' diff --git a/static/idn-api/beta/paths/set-password.yaml b/static/idn-api/beta/paths/set-password.yaml new file mode 100644 index 000000000..4a6e76538 --- /dev/null +++ b/static/idn-api/beta/paths/set-password.yaml @@ -0,0 +1,41 @@ +post: + operationId: setPassword + tags: + - Password Management + summary: Set Identity's Password + description: This API is used to set a password for an identity. The password can only be set by the actual identity owner or by a trusted API client application. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/PasswordChangeRequest.yaml' + example: { + "identityId": "8a807d4c73c545510173c545f0a002ff", + "encryptedPassword": "GIAP7TaAg7Y2EJtFojokBDvHQ/iXF3qk0z0+eLusqXMSkEhAfr34GydFLy+BM2uZB94cwbTYKi9rRrCRRdh8610VeqpRDjhuc28nOPYqTJOx09IGJdr8dl4mbhC1f21JCqMBBrFSA4VQQvd6OMVsceoXTjDI0aKahRYNjlMlsOuaIUZeNQxWBydLuR6vYG3qAKEPCzYZbvyYuBUylUWArfqwV4dgwKGDgDkTLBkQU9LVu3rssc+BXaex6l6JcBDiPg7wvKD1G3lZ+BaGrMknbx3j0T2Uivg+HxwTf7PmtAua6O9M7F984c79KM+sYFTU37MAdlWZu/cy+w2DdHVdCg==", + "publicKeyId": "YWQ2NjQ4MTItZjY0NC00MWExLWFjMjktOGNmMzU3Y2VlNjk2", + "accountId": "CN=Abby Smith,OU=Austin,OU=Americas,OU=Demo,DC=seri,DC=acme,DC=com", + "sourceId": "8a807d4c73c545510173c545d4b60246" + } + responses: + '202': + description: Reference to the password change. + content: + application/json: + schema: + $ref: '../schemas/PasswordChangeResponse.yaml' + examples: + Password change is in progress: + value: + { + "state": "IN_PROGRESS", + "requestId": "089899f13a8f4da7824996191587bab9", + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/sod-all-report-run.yaml b/static/idn-api/beta/paths/sod-all-report-run.yaml new file mode 100644 index 000000000..29c90676c --- /dev/null +++ b/static/idn-api/beta/paths/sod-all-report-run.yaml @@ -0,0 +1,48 @@ +post: + operationId: runAllPoliciesForOrg + tags: + - SOD Policy + summary: Runs all policies for Org. + # security: + # - bearerAuth: + # - ORG_ADMIN + description: >- + Runs multi policy report for the Org. If a policy reports more than 5000 violation, the report mentions Violation limit exceeded for that policy. + If the request is empty, report will run for all policies. Otherwise, report will run only for the filtered policy list provided. + + Requires role of ORG_ADMIN. + requestBody: + required: false + content: + application/json: + schema: + $ref: '../schemas/MultiPolicyRequest.yaml' + example: { + "filteredPolicyList": [ + "b868cd40-ffa4-4337-9c07-1a51846cfa94", + "63a07a7b-39a4-48aa-956d-50c827deba2a" + ] + } + responses: + '200': + description: Reference to the violation report run task. + content: + application/json: + schema: + $ref: '../schemas/ReportResultReference.yaml' + example: { + "status": "PENDING", + "type": "REPORT_RESULT", + "id": "37b3b32a-f394-46f8-acad-b5223969fa68", + "name": "Multi Query Report" + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/sod-all-report-status.yaml b/static/idn-api/beta/paths/sod-all-report-status.yaml new file mode 100644 index 000000000..9e36809b0 --- /dev/null +++ b/static/idn-api/beta/paths/sod-all-report-status.yaml @@ -0,0 +1,35 @@ +get: + operationId: getSodAllReportRunStatus + tags: + - SOD Policy + summary: Get multi-report run task status + description: >- + This gets status for a violation report for all policy run. + + Requires role of ORG_ADMIN. + # security: + # - bearerAuth: + # - ORG_ADMIN + responses: + '200': + description: Status of the violation report run task for all policy run + content: + application/json: + schema: + $ref: '../schemas/ReportResultReference.yaml' + example: { + "status": "SUCCESS", + "type": "REPORT_RESULT", + "id": "37b3b32a-f394-46f8-acad-b5223969fa68", + "name": "Multi Query Report" + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/sod-download-custom-report.yaml b/static/idn-api/beta/paths/sod-download-custom-report.yaml new file mode 100644 index 000000000..10bf35005 --- /dev/null +++ b/static/idn-api/beta/paths/sod-download-custom-report.yaml @@ -0,0 +1,47 @@ +get: + operationId: downloadCustomViolationReport + tags: + - SOD Policy + summary: Download custom violation report + description: >- + This allows to download a specified named violation report for given report reference. + + Requires role of ORG_ADMIN. + # security: + # - bearerAuth: + # - ORG_ADMIN + parameters: + - in: path + name: reportResultId + schema: + type: string + required: true + description: The ID of the report reference to download. + example: ef38f94347e94562b5bb8424a56397d8 + - in: path + name: fileName + schema: + type: string + required: true + description: Custom Name for the file. + example: custom-name + responses: + '200': + description: Returns zip file with given custom name that contains the violation report file + content: + application/zip: + schema: + type: string + format: binary + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/sod-download-default-report.yaml b/static/idn-api/beta/paths/sod-download-default-report.yaml new file mode 100644 index 000000000..ea5368ae1 --- /dev/null +++ b/static/idn-api/beta/paths/sod-download-default-report.yaml @@ -0,0 +1,40 @@ +get: + operationId: downloadDefaultViolationReport + tags: + - SOD Policy + summary: Download violation report + description: >- + This allows to download a violation report for given report reference. + + Requires role of ORG_ADMIN. + # security: + # - bearerAuth: + # - ORG_ADMIN + parameters: + - in: path + name: reportResultId + schema: + type: string + required: true + description: The ID of the report reference to download. + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: Returns PolicyReport.zip that contains the violation report file + content: + application/zip: + schema: + type: string + format: binary + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/sod-exception.yaml b/static/idn-api/beta/paths/sod-exception.yaml new file mode 100644 index 000000000..892c7aebc --- /dev/null +++ b/static/idn-api/beta/paths/sod-exception.yaml @@ -0,0 +1,129 @@ +get: + operationId: getSodExceptionById + tags: + - SOD Exception + summary: Get SOD Exception By ID + # security: + # - bearerAuth: + # - API + description: >- + This API returns the specified SOD exception. + + + A token with API authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the object reference to retrieve. + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + $ref: '../schemas/sod/responses/200.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +patch: + operationId: patchExceptionById + tags: + - SOD Exception + summary: Update SOD Exception + # security: + # - bearerAuth: + # - API + description: >- + This API allows updating SOD exception fields other than ["id", "created", "origin"] using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + + + A token with API authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the SOD exception to update. + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + description: | + A list of SOD Policy update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + + The following fields are patchable: + * policyId + * identityId + * start + * end + * businessJustification + * mitigatingControl + content: + application/json-patch+json: + schema: + type: array + items: + type: object + examples: + Update exception: + $ref: '../schemas/sod/examples/exception-body-patch.yaml' + responses: + '200': + $ref: '../schemas/sod/responses/200-patch.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: deleteSodExceptionById + tags: + - SOD Exception + summary: Delete SOD Exception by ID + # security: + # - bearerAuth: + # - API + description: >- + This API deletes the specified SOD exception. + + + A token with API authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the SOD Exception to delete. + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '204': + description: No content. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/sod-exceptions-bulk-create.yaml b/static/idn-api/beta/paths/sod-exceptions-bulk-create.yaml new file mode 100644 index 000000000..506a8b9ee --- /dev/null +++ b/static/idn-api/beta/paths/sod-exceptions-bulk-create.yaml @@ -0,0 +1,35 @@ +post: + operationId: bulkCreateSodExceptions + tags: + - SOD Exception + summary: Create SOD Exceptions in bulk + # security: + # - bearerAuth: + # - API + description: >- + This API creates SOD exceptions in bulk. + + + A token with API authority is required to call this API. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/sod/models/ExceptionList.yaml' + examples: + Exception list: + $ref: '../schemas/sod/examples/exception-body-bulk.yaml' + responses: + '202': + $ref: '../schemas/sod/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/sod-exceptions.yaml b/static/idn-api/beta/paths/sod-exceptions.yaml new file mode 100644 index 000000000..f60489be4 --- /dev/null +++ b/static/idn-api/beta/paths/sod-exceptions.yaml @@ -0,0 +1,96 @@ +post: + operationId: createSodException + tags: + - SOD Exception + summary: Create SOD Exception + # security: + # - bearerAuth: + # - API + description: >- + This API creates a SOD exception. + + + A token with API authority is required to call this API. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/sod/models/Exception.yaml' + examples: + Exception created: + $ref: '../schemas/sod/examples/exception-body.yaml' + responses: + '201': + $ref: '../schemas/sod/responses/201.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +get: + operationId: listSodExceptions + tags: + - SOD Exception + summary: List SOD Exceptions + # security: + # - bearerAuth: + # - API + description: >- + This API returns a list of all SOD exceptions. + + + A token with API authority is required to call this API. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in*
        + **sodPolicy.id**: *eq, in*
        + **identity.id**: *eq, in* + example: identity.id eq "bc693f07e7b645539626c25954c58554" + required: false + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: + + + **sodPolicy.id, identity.id, start, end** + example: identity.id,-start + required: false + responses: + '200': + $ref: '../schemas/sod/responses/200-list.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/sod-policies.yaml b/static/idn-api/beta/paths/sod-policies.yaml new file mode 100644 index 000000000..10d09a219 --- /dev/null +++ b/static/idn-api/beta/paths/sod-policies.yaml @@ -0,0 +1,342 @@ +post: + operationId: createSodPolicy + tags: + - SOD Policy + summary: Create SOD Policy + # security: + # - bearerAuth: + # - ORG_ADMIN + description: >- + This creates both General and Conflicting Access Based policy, with a limit of 50 entitlements for each (left & right) criteria for Conflicting Access Based SOD policy + + Requires role of ORG_ADMIN + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/SodPolicy.yaml' + examples: + Conflicting Access Based Policy: + value: + { + "name": "Conflicting-Policy-Name", + "description": "This policy ensures compliance of xyz", + "ownerRef": { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1313", + "name": "Owner Name" + }, + "externalPolicyReference": "XYZ policy", + "compensatingControls": "Have a manager review the transaction decisions for their \"out of compliance\" employee", + "correctionAdvice": "Based on the role of the employee, managers should remove access that is not required for their job function.", + "state": "ENFORCED", + "tags": [ + "string" + ], + "creatorId": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "modifierId": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "violationOwnerAssignmentConfig": { + "assignmentRule": "MANAGER", + "ownerRef": { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1313", + "name": "Violation Owner Name" + } + }, + "scheduled": true, + "type": "CONFLICTING_ACCESS_BASED", + "conflictingAccessCriteria": { + "leftCriteria": { + "name": "money-in", + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a66" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a67" + } + ] + }, + "rightCriteria": { + "name": "money-out", + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a68" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a69" + } + ] + } + } + } + General Policy: + value: + { + "description": "Description", + "ownerRef": { + "type": "IDENTITY", + "id": "2c918087682f9a86016839c05e8f1aff", + "name": "Owner Name" + }, + "externalPolicyReference": "New policy", + "policyQuery": "policy query implementation", + "compensatingControls": "Compensating controls", + "correctionAdvice": "Correction advice", + "tags": [], + "state": "ENFORCED", + "scheduled": false, + "creatorId": "2c918087682f9a86016839c05e8f1aff", + "modifierId": null, + "violationOwnerAssignmentConfig": null, + "name": "General-Policy-Name" + } + responses: + '201': + description: SOD policy created + content: + application/json: + schema: + $ref: '../schemas/SodPolicy.yaml' + examples: + Conflicting Access Based Policy: + value: + { + "id": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "name": "Conflicting-Policy-Name", + "created": "2020-01-01T00:00:00.000000Z", + "modified": "2020-01-01T00:00:00.000000Z", + "description": "This policy ensures compliance of xyz", + "ownerRef": { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1313", + "name": "Owner Name" + }, + "externalPolicyReference": "XYZ policy", + "policyQuery": "@access(id:2c9180866166b5b0016167c32ef31a66 OR id:2c9180866166b5b0016167c32ef31a67) AND @access(id:2c9180866166b5b0016167c32ef31a68 OR id:2c9180866166b5b0016167c32ef31a69)", + "compensatingControls": "Have a manager review the transaction decisions for their \"out of compliance\" employee", + "correctionAdvice": "Based on the role of the employee, managers should remove access that is not required for their job function.", + "state": "ENFORCED", + "tags": [ + "string" + ], + "creatorId": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "modifierId": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "violationOwnerAssignmentConfig": { + "assignmentRule": "MANAGER", + "ownerRef": { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1313", + "name": "Violation Owner Name" + } + }, + "scheduled": true, + "type": "CONFLICTING_ACCESS_BASED", + "conflictingAccessCriteria": { + "leftCriteria": { + "name": "money-in", + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a66" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a67" + } + ] + }, + "rightCriteria": { + "name": "money-out", + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a68" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a69" + } + ] + } + } + } + General Policy: + value: + { + "description": "Description", + "ownerRef": { + "type": "IDENTITY", + "id": "2c918087682f9a86016839c05e8f1aff", + "name": "Owner Name" + }, + "externalPolicyReference": "New policy", + "policyQuery": "policy query implementation", + "compensatingControls": "Compensating controls", + "correctionAdvice": "Correction advice", + "tags": [], + "state": "ENFORCED", + "scheduled": false, + "creatorId": "2c918087682f9a86016839c05e8f1aff", + "modifierId": null, + "violationOwnerAssignmentConfig": null, + "type": "GENERAL", + "conflictingAccessCriteria": null, + "id": "52c11db4-733e-4c31-949a-766c95ec95f1", + "name": "General-Policy-Name", + "created": "2020-05-12T19:47:38Z", + "modified": "2020-05-12T19:47:38Z" + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +get: + operationId: listSodPolicies + tags: + - SOD Policy + summary: List SOD Policies + # security: + # - bearerAuth: + # - ORG_ADMIN + description: >- + This gets list of all SOD Policies. + + Requires role of ORG_ADMIN + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq*
        + **name**: *eq*
        + **state**: *eq* + example: id eq "bc693f07e7b645539626c25954c58554" + required: false + responses: + '200': + description: List of all SOD Policies. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/SodPolicy.yaml' + example: + [ + { + "id": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "name": "Conflicting-Policy-Name", + "created": "2020-01-01T00:00:00.000000Z", + "modified": "2020-01-01T00:00:00.000000Z", + "description": "This policy ensures compliance of xyz", + "ownerRef": { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1313", + "name": "Owner Name" + }, + "externalPolicyReference": "XYZ policy", + "policyQuery": "@access(id:2c9180866166b5b0016167c32ef31a66 OR id:2c9180866166b5b0016167c32ef31a67) AND @access(id:2c9180866166b5b0016167c32ef31a68 OR id:2c9180866166b5b0016167c32ef31a69)", + "compensatingControls": "Have a manager review the transaction decisions for their \"out of compliance\" employee", + "correctionAdvice": "Based on the role of the employee, managers should remove access that is not required for their job function.", + "state": "ENFORCED", + "tags": [ + "string" + ], + "creatorId": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "modifierId": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "violationOwnerAssignmentConfig": { + "assignmentRule": "MANAGER", + "ownerRef": { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1313", + "name": "Violation Owner Name" + } + }, + "scheduled": true, + "type": "CONFLICTING_ACCESS_BASED", + "conflictingAccessCriteria": { + "leftCriteria": { + "name": "money-in", + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a66" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a67" + } + ] + }, + "rightCriteria": { + "name": "money-out", + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a68" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a69" + } + ] + } + } + }, + { + "description": "Description", + "ownerRef": { + "type": "IDENTITY", + "id": "2c918087682f9a86016839c05e8f1aff", + "name": "Owner Name" + }, + "externalPolicyReference": "New policy", + "policyQuery": "policy query implementation", + "compensatingControls": "Compensating controls", + "correctionAdvice": "Correction advice", + "tags": [], + "state": "ENFORCED", + "scheduled": false, + "creatorId": "2c918087682f9a86016839c05e8f1aff", + "modifierId": null, + "violationOwnerAssignmentConfig": null, + "type": "GENERAL", + "conflictingAccessCriteria": null, + "id": "52c11db4-733e-4c31-949a-766c95ec95f1", + "name": "General-Policy-Name", + "created": "2020-05-12T19:47:38Z", + "modified": "2020-05-12T19:47:38Z" + } + ] + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/sod-policy.yaml b/static/idn-api/beta/paths/sod-policy.yaml new file mode 100644 index 000000000..50a26d3df --- /dev/null +++ b/static/idn-api/beta/paths/sod-policy.yaml @@ -0,0 +1,568 @@ +get: + operationId: getSodPolicyById + tags: + - SOD Policy + summary: Get SOD Policy By ID + description: >- + This gets specified SOD policy. + + Requires role of ORG_ADMIN. + # security: + # - bearerAuth: + # - ORG_ADMIN + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the object reference to retrieve. + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: SOD policy ID. + content: + application/json: + schema: + $ref: '../schemas/SodPolicy.yaml' + examples: + Conflicting Access Based Policy: + value: + { + "id": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "name": "Conflicting-Policy-Name", + "created": "2020-01-01T00:00:00.000000Z", + "modified": "2020-01-01T00:00:00.000000Z", + "description": "This policy ensures compliance of xyz", + "ownerRef": { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1313", + "name": "Owner Name" + }, + "externalPolicyReference": "XYZ policy", + "policyQuery": "@access(id:2c9180866166b5b0016167c32ef31a66 OR id:2c9180866166b5b0016167c32ef31a67) AND @access(id:2c9180866166b5b0016167c32ef31a68 OR id:2c9180866166b5b0016167c32ef31a69)", + "compensatingControls": "Have a manager review the transaction decisions for their \"out of compliance\" employee", + "correctionAdvice": "Based on the role of the employee, managers should remove access that is not required for their job function.", + "state": "ENFORCED", + "tags": [ + "string" + ], + "creatorId": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "modifierId": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "violationOwnerAssignmentConfig": { + "assignmentRule": "MANAGER", + "ownerRef": { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1313", + "name": "Violation Owner Name" + } + }, + "scheduled": true, + "type": "CONFLICTING_ACCESS_BASED", + "conflictingAccessCriteria": { + "leftCriteria": { + "name": "money-in", + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a66" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a67" + } + ] + }, + "rightCriteria": { + "name": "money-out", + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a68" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a69" + } + ] + } + } + } + General Policy: + value: + { + "description": "Description", + "ownerRef": { + "type": "IDENTITY", + "id": "2c918087682f9a86016839c05e8f1aff", + "name": "Owner Name" + }, + "externalPolicyReference": "New policy", + "policyQuery": "policy query implementation", + "compensatingControls": "Compensating controls", + "correctionAdvice": "Correction advice", + "tags": [], + "state": "ENFORCED", + "scheduled": false, + "creatorId": "2c918087682f9a86016839c05e8f1aff", + "modifierId": null, + "violationOwnerAssignmentConfig": null, + "type": "GENERAL", + "conflictingAccessCriteria": null, + "id": "52c11db4-733e-4c31-949a-766c95ec95f1", + "name": "General-Policy-Name", + "created": "2020-05-12T19:47:38Z", + "modified": "2020-05-12T19:47:38Z" + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +put: + operationId: updatePolicyById + tags: + - SOD Policy + summary: Update SOD Policy By ID + # security: + # - bearerAuth: + # - ORG_ADMIN + description: >- + This updates a specified SOD policy. + + Requires role of ORG_ADMIN. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the SOD policy to update. + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/SodPolicy.yaml' + examples: + Conflicting Access Based Policy: + value: + { + "id": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "name": "Conflicting-Policy-Name", + "created": "2020-01-01T00:00:00.000000Z", + "modified": "2020-01-01T00:00:00.000000Z", + "description": "Modified Description", + "ownerRef": { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1313", + "name": "Owner Name" + }, + "externalPolicyReference": "XYZ policy", + "compensatingControls": "Have a manager review the transaction decisions for their \"out of compliance\" employee", + "correctionAdvice": "Based on the role of the employee, managers should remove access that is not required for their job function.", + "state": "ENFORCED", + "tags": [ + "string" + ], + "creatorId": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "modifierId": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "violationOwnerAssignmentConfig": { + "assignmentRule": "MANAGER", + "ownerRef": { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1313", + "name": "Violation Owner Name" + } + }, + "scheduled": true, + "type": "CONFLICTING_ACCESS_BASED", + "conflictingAccessCriteria": { + "leftCriteria": { + "name": "money-in", + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a66" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a67" + } + ] + }, + "rightCriteria": { + "name": "money-out", + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a68" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a69" + } + ] + } + } + } + General Policy: + value: + { + "description": "Modified Description", + "ownerRef": { + "type": "IDENTITY", + "id": "2c918087682f9a86016839c05e8f1aff", + "name": "Owner Name" + }, + "externalPolicyReference": "New policy", + "policyQuery": "policy query implementation", + "compensatingControls": "Compensating controls", + "correctionAdvice": "Correction advice", + "tags": [], + "state": "ENFORCED", + "scheduled": false, + "creatorId": "2c918087682f9a86016839c05e8f1aff", + "modifierId": null, + "violationOwnerAssignmentConfig": null, + "type": "GENERAL", + "conflictingAccessCriteria": null, + "id": "52c11db4-733e-4c31-949a-766c95ec95f1", + "name": "General-Policy-Name", + "created": "2020-05-12T19:47:38Z", + "modified": "2020-05-12T19:47:38Z" + } + responses: + '200': + description: SOD Policy by ID. + content: + application/json: + schema: + $ref: '../schemas/SodPolicy.yaml' + examples: + Conflicting Access Based Policy: + value: + { + "id": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "name": "Conflicting-Policy-Name", + "created": "2020-01-01T00:00:00.000000Z", + "modified": "2020-01-01T00:00:00.000000Z", + "description": "Modified description", + "ownerRef": { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1313", + "name": "Owner Name" + }, + "externalPolicyReference": "XYZ policy", + "policyQuery": "@access(id:2c9180866166b5b0016167c32ef31a66 OR id:2c9180866166b5b0016167c32ef31a67) AND @access(id:2c9180866166b5b0016167c32ef31a68 OR id:2c9180866166b5b0016167c32ef31a69)", + "compensatingControls": "Have a manager review the transaction decisions for their \"out of compliance\" employee", + "correctionAdvice": "Based on the role of the employee, managers should remove access that is not required for their job function.", + "state": "ENFORCED", + "tags": [ + "string" + ], + "creatorId": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "modifierId": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "violationOwnerAssignmentConfig": { + "assignmentRule": "MANAGER", + "ownerRef": { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1313", + "name": "Violation Owner Name" + } + }, + "scheduled": true, + "type": "CONFLICTING_ACCESS_BASED", + "conflictingAccessCriteria": { + "leftCriteria": { + "name": "money-in", + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a66" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a67" + } + ] + }, + "rightCriteria": { + "name": "money-out", + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a68" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a69" + } + ] + } + } + } + General Policy: + value: + { + "description": "Modified Description", + "ownerRef": { + "type": "IDENTITY", + "id": "2c918087682f9a86016839c05e8f1aff", + "name": "Owner Name" + }, + "externalPolicyReference": "New policy", + "policyQuery": "policy query implementation", + "compensatingControls": "Compensating controls", + "correctionAdvice": "Correction advice", + "tags": [], + "state": "ENFORCED", + "scheduled": false, + "creatorId": "2c918087682f9a86016839c05e8f1aff", + "modifierId": null, + "violationOwnerAssignmentConfig": null, + "type": "GENERAL", + "conflictingAccessCriteria": null, + "id": "52c11db4-733e-4c31-949a-766c95ec95f1", + "name": "General-Policy-Name", + "created": "2020-05-12T19:47:38Z", + "modified": "2020-05-12T19:47:38Z" + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: deleteSodPolicyById + tags: + - SOD Policy + summary: Delete SOD Policy by ID + # security: + # - bearerAuth: + # - ORG_ADMIN + description: >- + This deletes a specified SOD policy. + + Requires role of ORG_ADMIN. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the SOD Policy to delete. + example: ef38f94347e94562b5bb8424a56397d8 + - in: query + name: logical + schema: + type: boolean + default: true + description: whether this is soft delete i.e. logical true or hard delete + required: false + responses: + '204': + description: No content. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +patch: + operationId: patchSodPolicy + tags: + - SOD Policy + summary: Update a SOD Policy + description: >- + Allows updating SOD Policy fields other than ["id","created","creatorId","policyQuery","type"] using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + + Requires role of ORG_ADMIN. + + # security: + # - bearerAuth: + # - ORG_ADMIN + + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the SOD Policy being modified. + example: 2c9180835d191a86015d28455b4a2329 + requestBody: + required: true + description: | + A list of SOD Policy update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + + The following fields are patchable: + * name + * description + * ownerRef + * externalPolicyReference + * compensatingControls + * correctionAdvice + * state + * tags + * violationOwnerAssignmentConfig + * scheduled + * conflictingAccessCriteria + content: + application/json-patch+json: + schema: + type: array + items: + type: object + examples: + Conflicting Access Based Policy: + value: + - op: "replace" + path: "/description" + value: "Modified description" + - op: "replace" + path: "/conflictingAccessCriteria/leftCriteria/name" + value: "money-in-modified" + - op: "replace" + path: "/conflictingAccessCriteria/rightCriteria" + value: { + "name": "money-out-modified", + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c918087682f9a86016839c0509c1ab2" + } + ] + } + General Policy: + value: + - op: "replace" + path: "/description" + value: "Modified description" + + responses: + '200': + description: >- + Indicates the PATCH operation succeeded, and returns the SOD policy's new representation. + content: + application/json: + schema: + $ref: '../schemas/SodPolicy.yaml' + examples: + Conflicting Access Based Policy: + value: + { + "id": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "name": "Conflicting-Policy-Name", + "created": "2020-01-01T00:00:00.000000Z", + "modified": "2020-01-01T00:00:00.000000Z", + "description": "Modified description", + "ownerRef": { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1313", + "name": "Owner Name" + }, + "externalPolicyReference": "XYZ policy", + "policyQuery": "@access(id:2c9180866166b5b0016167c32ef31a66 OR id:2c9180866166b5b0016167c32ef31a67) AND @access(id:2c918087682f9a86016839c0509c1ab2)", + "compensatingControls": "Have a manager review the transaction decisions for their \"out of compliance\" employee", + "correctionAdvice": "Based on the role of the employee, managers should remove access that is not required for their job function.", + "state": "ENFORCED", + "tags": [ + "string" + ], + "creatorId": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "modifierId": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "violationOwnerAssignmentConfig": { + "assignmentRule": "MANAGER", + "ownerRef": { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1313", + "name": "Violation Owner Name" + } + }, + "scheduled": true, + "type": "CONFLICTING_ACCESS_BASED", + "conflictingAccessCriteria": { + "leftCriteria": { + "name": "money-in-modified", + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a66" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a67" + } + ] + }, + "rightCriteria": { + "name": "money-out-modified", + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c918087682f9a86016839c0509c1ab2" + } + ] + } + } + } + General Policy: + value: + { + "description": "Modified description", + "ownerRef": { + "type": "IDENTITY", + "id": "2c918087682f9a86016839c05e8f1aff", + "name": "Owner Name" + }, + "externalPolicyReference": "New policy", + "policyQuery": "policy query implementation", + "compensatingControls": "Compensating controls", + "correctionAdvice": "Correction advice", + "tags": [], + "state": "ENFORCED", + "scheduled": false, + "creatorId": "2c918087682f9a86016839c05e8f1aff", + "modifierId": null, + "violationOwnerAssignmentConfig": null, + "type": "GENERAL", + "conflictingAccessCriteria": null, + "id": "52c11db4-733e-4c31-949a-766c95ec95f1", + "name": "General-Policy-Name", + "created": "2020-05-12T19:47:38Z", + "modified": "2020-05-12T19:47:38Z" + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/sod-report-run.yaml b/static/idn-api/beta/paths/sod-report-run.yaml new file mode 100644 index 000000000..9423b6fd2 --- /dev/null +++ b/static/idn-api/beta/paths/sod-report-run.yaml @@ -0,0 +1,46 @@ +post: + operationId: runSodPolicy + tags: + - SOD Policy + summary: Runs SOD Policy Violation Report + # security: + # - bearerAuth: + # - ORG_ADMIN + description: >- + This invokes processing of violation report for given SOD Policy. If policy reports more than 5000 violations, the report returns with + violation limit exceeded message. + + Requires role of ORG_ADMIN. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the SOD Policy to run. + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: Reference to the violation report run task. + content: + application/json: + schema: + $ref: '../schemas/ReportResultReference.yaml' + example: { + "status": "PENDING", + "type": "REPORT_RESULT", + "id": "2e8d8180-24bc-4d21-91c6-7affdb473b0d", + "name": "policy-xyz" + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/sod-schedule.yaml b/static/idn-api/beta/paths/sod-schedule.yaml new file mode 100644 index 000000000..ceacf2caa --- /dev/null +++ b/static/idn-api/beta/paths/sod-schedule.yaml @@ -0,0 +1,115 @@ +get: + operationId: getSodPolicyScheduleById + tags: + - SOD Policy + summary: Get SOD Policy Schedule + description: >- + This gets schedule for a specified SOD policy. + + Requires a role of ORG_ADMIN + # security: + # - bearerAuth: + # - ORG_ADMIN + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the object reference to retrieve. + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: SOD policy ID. + content: + application/json: + schema: + $ref: '../schemas/SodPolicySchedule.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +put: + operationId: updatePolicyScheduleById + tags: + - SOD Policy + summary: Update SOD Policy schedule + # security: + # - bearerAuth: + # - ORG_ADMIN + description: >- + This updates schedule for a specified SOD policy. + + Requires role of ORG_ADMIN + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the SOD policy to update its schedule. + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/SodPolicySchedule.yaml' + responses: + '200': + description: SOD Policy by ID. + content: + application/json: + schema: + $ref: '../schemas/SodPolicySchedule.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: deleteSodPolicyScheduleById + tags: + - SOD Policy + summary: Delete SOD Policy Schedule + # security: + # - bearerAuth: + # - ORG_ADMIN + description: >- + This deletes schedule for a specified SOD policy. + + Requires role of ORG_ADMIN. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the SOD Policy for which the schedule needs to be deleted. + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '204': + description: No content. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/sod-violation-check.yaml b/static/idn-api/beta/paths/sod-violation-check.yaml new file mode 100644 index 000000000..1f9f2595d --- /dev/null +++ b/static/idn-api/beta/paths/sod-violation-check.yaml @@ -0,0 +1,57 @@ +post: + operationId: violationCheck + tags: + - SOD Policy + summary: Check SOD Violations + description: >- + This API initiates a SOD policy verification asynchronously. + + + A token with ORG_ADMIN authority is required to call this API. + + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/IdentityWithNewAccess.yaml' + example: + { + "identityId": "2c91808568c529c60168cca6f90c1313", + "accessRefs": [ + { + "type": "ENTITLEMENT", + "id": "2c918087682f9a86016839c050861ab1", + "name": "CN=Information Access,OU=test,OU=test-service,DC=TestAD,DC=local" + }, + { + "type": "ENTITLEMENT", + "id": "2c918087682f9a86016839c0509c1ab2", + "name": "CN=Information Technology,OU=test,OU=test-service,DC=TestAD,DC=local" + } + ], + "clientMetadata": { + "additionalProp1": "string", + "additionalProp2": "string", + "additionalProp3": "string" + } + } + responses: + '202': + description: Request id with a timestamp + content: + application/json: + schema: + $ref: '../schemas/SodViolationCheck.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/sod-violation-report-status.yaml b/static/idn-api/beta/paths/sod-violation-report-status.yaml new file mode 100644 index 000000000..f36d9fa8b --- /dev/null +++ b/static/idn-api/beta/paths/sod-violation-report-status.yaml @@ -0,0 +1,45 @@ +get: + operationId: getSodViolationReportRunStatus + tags: + - SOD Policy + summary: Get violation report run status + description: >- + This gets status for a violation report run task invoked already. + + Requires role of ORG_ADMIN. + # security: + # - bearerAuth: + # - ORG_ADMIN + parameters: + - in: path + name: reportResultId + schema: + type: string + required: true + description: The ID of the report reference to retrieve. + example: 2e8d8180-24bc-4d21-91c6-7affdb473b0d + responses: + '200': + description: Status of the violation report run task. + content: + application/json: + schema: + $ref: '../schemas/ReportResultReference.yaml' + example: { + "status": "SUCCESS", + "type": "REPORT_RESULT", + "id": "2e8d8180-24bc-4d21-91c6-7affdb473b0d", + "name": "policy-xyz" + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/sod-violation-report.yaml b/static/idn-api/beta/paths/sod-violation-report.yaml new file mode 100644 index 000000000..420773a22 --- /dev/null +++ b/static/idn-api/beta/paths/sod-violation-report.yaml @@ -0,0 +1,45 @@ +get: + operationId: getSodViolationReportStatus + tags: + - SOD Policy + summary: Get SOD violation report status + description: >- + This gets status for a violation report run task invoked already. + + Requires role of ORG_ADMIN. + # security: + # - bearerAuth: + # - ORG_ADMIN + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the object reference to retrieve. + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: Status of the violation report run task. + content: + application/json: + schema: + $ref: '../schemas/ReportResultReference.yaml' + example: { + "status": "SUCCESS", + "type": "REPORT_RESULT", + "id": "2e8d8180-24bc-4d21-91c6-7affdb473b0d", + "name": "policy-xyz" + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/sod/arm-risk.yaml b/static/idn-api/beta/paths/sod/arm-risk.yaml new file mode 100644 index 000000000..05d7ceb37 --- /dev/null +++ b/static/idn-api/beta/paths/sod/arm-risk.yaml @@ -0,0 +1,42 @@ +get: + operationId: getArmRiskById + tags: + - SOD Policy + summary: This API gets the specified ARM risk. + description: >- + This API gets the specified ARM risk. + + + Any authenticated token can call this API. + security: + - bearerAuth: + - idn:sod-policy:read + parameters: + - in: path + name: id + schema: + type: string + required: true + description: >- + The composite ID of the ARM Risk. + It should consist of a jobId, rulebookId, and a riskCode; each separated by a "!" + example: 52435!246635!BS_04 + responses: + '200': + description: ARM Risk + content: + application/json: + schema: + $ref: '../../schemas/sod/models/ArmRisk.yaml' + '400': + $ref: '../../../v3/responses/400.yaml' + '401': + $ref: '../../../v3/responses/401.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '404': + $ref: '../../../v3/responses/404.yaml' + '429': + $ref: '../../../v3/responses/429.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/sod/predict-violations.yaml b/static/idn-api/beta/paths/sod/predict-violations.yaml new file mode 100644 index 000000000..f8d50de51 --- /dev/null +++ b/static/idn-api/beta/paths/sod/predict-violations.yaml @@ -0,0 +1,53 @@ +post: + operationId: predictViolations + tags: + - SOD Violations + summary: Predict SOD violations for the given identity if they were granted the given access. + description: >- + This API is used to check if granting some additional accesses would cause the subject to be in violation of any SOD policies. + Returns the violations that would be caused. + + + A token with ORG_ADMIN or API authority is required to call this API. + + requestBody: + required: true + content: + application/json: + schema: + $ref: '../../schemas/sod/models/IdentityWithNewAccess.yaml' + example: + { + "identityId": "2c91808568c529c60168cca6f90c1313", + "accessRefs": [ + { + "type": "ENTITLEMENT", + "id": "2c918087682f9a86016839c050861ab1", + "name": "CN=Information Access,OU=test,OU=test-service,DC=TestAD,DC=local" + }, + { + "type": "ENTITLEMENT", + "id": "2c918087682f9a86016839c0509c1ab2", + "name": "CN=Information Technology,OU=test,OU=test-service,DC=TestAD,DC=local" + } + ] + } + responses: + '200': + description: Violation Contexts + content: + application/json: + schema: + $ref: '../../schemas/sod/models/ViolationPrediction.yaml' + '400': + $ref: '../../../v3/responses/400.yaml' + '401': + $ref: '../../../v3/responses/401.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '404': + $ref: '../../../v3/responses/404.yaml' + '429': + $ref: '../../../v3/responses/429.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/source-accounts-schema.yaml b/static/idn-api/beta/paths/source-accounts-schema.yaml new file mode 100644 index 000000000..4970128ab --- /dev/null +++ b/static/idn-api/beta/paths/source-accounts-schema.yaml @@ -0,0 +1,79 @@ +get: + tags: + - Sources + summary: Downloads source accounts schema template + operationId: downloadSourceAccountsSchema + parameters: + - in: path + name: id + required: true + schema: + type: string + description: The Source id + example: '8c190e6787aa4ed9a90bd9d5344523fb' + responses: + '200': + description: Successfully downloaded the file + content: + text/csv: + example: id,name,givenName,familyName,e-mail,location,manager,groups,startDate,endDate + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:source-schema:read' +post: + tags: + - Sources + summary: Uploads source accounts schema template + description: >- + This API uploads a source schema template file to configure a source's account attributes. + operationId: uploadSourceAccountsSchema + parameters: + - in: path + name: id + required: true + schema: + type: string + description: The Source id + example: '8c190e6787aa4ed9a90bd9d5344523fb' + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '200': + description: Successfully uploaded the file + content: + application/json: + schema: + $ref: '../schemas/Schema.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:source-schema:update' diff --git a/static/idn-api/beta/paths/source-aggregation-state.yaml b/static/idn-api/beta/paths/source-aggregation-state.yaml new file mode 100644 index 000000000..10613efd1 --- /dev/null +++ b/static/idn-api/beta/paths/source-aggregation-state.yaml @@ -0,0 +1,39 @@ +post: + operationId: updateAggregationState + tags: + - Sources + summary: Update Aggregation State + description: >- + This API updates the aggregation state for the source. + + A token with API authority is required to call this API. + # security: + # - bearerAuth: + # - API + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The source id + example: 2c93805454fb79640134ffda7c6903d7 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/AggregationState.yaml' + responses: + '204': + description: The aggregation state is updated. + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/source-connector-check-connection.yaml b/static/idn-api/beta/paths/source-connector-check-connection.yaml new file mode 100644 index 000000000..a0d8795b7 --- /dev/null +++ b/static/idn-api/beta/paths/source-connector-check-connection.yaml @@ -0,0 +1,38 @@ +post: + operationId: checkConnection + tags: + - Sources + summary: Check connection for the source connector. + description: >- + This endpoint validates that the configured credentials are valid and will properly authenticate with the source + identified by the sourceId path parameter. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:source-connector:write + parameters: + - in: path + name: sourceId + schema: + type: string + required: true + description: The ID of the Source. + example: cef3ee201db947c5912551015ba0c679 + responses: + '200': + description: The result of checking connection to the source connector with response from it. + content: + application/json: + schema: + $ref: '../schemas/StatusResponse.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/source-connector-initiate-extract.yaml b/static/idn-api/beta/paths/source-connector-initiate-extract.yaml new file mode 100644 index 000000000..d3af25e86 --- /dev/null +++ b/static/idn-api/beta/paths/source-connector-initiate-extract.yaml @@ -0,0 +1,75 @@ +post: + operationId: initiateExtract + tags: + - Sources + summary: Initiate extraction request in connector + description: >- + Initiates an extraction request from the source connector for security-extract, utilization-extract, changelog-extract etc from ERP systems. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:source-connector:write + parameters: + - in: path + name: sourceId + schema: + type: string + required: true + description: The ID of the Source + example: cef3ee201db947c5912551015ba0c679 + - in: path + name: messageType + schema: + type: string + enum: [security-extract, utilization-extract, changelog-extract] + required: true + description: The type of extract request + example: security-extract + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/ExtractRequest.yaml' + examples: + securityExtract: + summary: Security Extract request + value: + referenceId: 2c9180837ab5b716017ab7c6c9ef1e20 + callbackUrl: https://www.example.com + utilizationExtract: + summary: Utilization Extract request + value: + referenceId: 2c9180837ab5b716017ab7c6c9ef1e20 + fromTime: "2022-02-07T20:13:29.356648026Z" + endTime: "2022-02-07T20:13:29.356648026Z" + callbackUrl: https://www.example.com + attribute: + filters: ["USERID in (1015643,0)", + "TECH_STACK='AUDIT'"] + changelogExtract: + summary: Change Log Extract request + value: + referenceId: 2c9180837ab5b716017ab7c6c9ef1e20 + fromTime: "2022-02-07T20:13:29.356648026Z" + endTime: "2022-02-07T20:13:29.356648026Z" + callbackUrl: https://www.example.com + attribute: + username: JSMITH + responses: + '202': + description: Accepted - Returned if the extact request was successfully accepted into the system. + $ref: '../../v3/responses/202.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/source-connector-peek-resource-objects.yaml b/static/idn-api/beta/paths/source-connector-peek-resource-objects.yaml new file mode 100644 index 000000000..93175b4b9 --- /dev/null +++ b/static/idn-api/beta/paths/source-connector-peek-resource-objects.yaml @@ -0,0 +1,49 @@ +post: + operationId: peekResourceObjects + tags: + - Sources + summary: Peek resource objects from the source connector + description: >- + Retrieves a sample of data returned from account and group aggregation requests. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:source-connector:write + parameters: + - in: path + name: sourceId + schema: + type: string + required: true + description: The ID of the Source + example: cef3ee201db947c5912551015ba0c679 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/ResourceObjectsRequest.yaml' + example: { + "objectType": "resource", + "maxCount": 50 + } + responses: + '200': + description: List of resource objects that was fetched from the source connector. + content: + application/json: + schema: + $ref: '../schemas/ResourceObjectsResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/source-connector-ping-cluster.yaml b/static/idn-api/beta/paths/source-connector-ping-cluster.yaml new file mode 100644 index 000000000..9ba7cd53a --- /dev/null +++ b/static/idn-api/beta/paths/source-connector-ping-cluster.yaml @@ -0,0 +1,37 @@ +post: + operationId: pingCluster + tags: + - Sources + summary: Ping cluster for the source connector + description: >- + This endpoint validates that the cluster being used by the source is reachable from IdentityNow. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:source-connector:write + parameters: + - in: path + name: sourceId + schema: + type: string + required: true + description: The ID of the Source + example: cef3ee201db947c5912551015ba0c679 + responses: + '200': + description: The result of pinging connection with the source connector. + content: + application/json: + schema: + $ref: '../schemas/StatusResponse.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/source-connector-state.yaml b/static/idn-api/beta/paths/source-connector-state.yaml new file mode 100644 index 000000000..41293e3b8 --- /dev/null +++ b/static/idn-api/beta/paths/source-connector-state.yaml @@ -0,0 +1,49 @@ +post: + operationId: updateConnectorState + tags: + - Sources + summary: Update Connector State + description: >- + This API updates connector states of a specific source. + + A token with API authority is required to call this API. + # security: + # - bearerAuth: + # - API + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Source ID + example: 5893805454fb79640134ffda7c6903d7 + requestBody: + required: true + content: + application/json: + schema: + type: object + description: The configuration is specific to a connector. It can differ from type to type. + example: + healthCheckTimeout: 30 + authSearchAttributes: [ + "cn", + "uid", + "mail" + ] + responses: + '204': + description: The connector states are updated. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/source-connector-test-configuration.yaml b/static/idn-api/beta/paths/source-connector-test-configuration.yaml new file mode 100644 index 000000000..efb4ac486 --- /dev/null +++ b/static/idn-api/beta/paths/source-connector-test-configuration.yaml @@ -0,0 +1,38 @@ +post: + operationId: testConfiguration + tags: + - Sources + summary: Test configuration for the source connector + description: >- + This endpoint performs a more detailed validation of the source's configuration that can take longer than the + lighter weight credential validation performed by the checkConnection API. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:source-connector:write + parameters: + - in: path + name: sourceId + schema: + type: string + required: true + description: The ID of the Source + example: cef3ee201db947c5912551015ba0c679 + responses: + '200': + description: The result of testing source connector configuration with response from it. + content: + application/json: + schema: + $ref: '../schemas/StatusResponse.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/source-connectors-source-config.yaml b/static/idn-api/beta/paths/source-connectors-source-config.yaml new file mode 100644 index 000000000..5948cfa32 --- /dev/null +++ b/static/idn-api/beta/paths/source-connectors-source-config.yaml @@ -0,0 +1,40 @@ +get: + operationId: getSourceConfig + tags: + - Sources + summary: Gets source config with language translations + description: >- + Looks up and returns the source config for the requested source id after populating the source config values and applying language translations. + + A token with ORG_ADMIN authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Source id + - in: query + name: locale + schema: + type: string + enum: [de, no, fi, sv, ru, pt, ko, zh-TW, en, it, fr, zh-CN, hu, es, cs, ja, pl, da, nl] + description: >- + The locale to apply to the config. If no viable locale is given, it will default to "en" + responses: + '200': + description: A Connector Detail object + content: + application/json: + schema: + $ref: '../schemas/ConnectorDetail.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/source-entitlements-schema.yaml b/static/idn-api/beta/paths/source-entitlements-schema.yaml new file mode 100644 index 000000000..7a30b4ee1 --- /dev/null +++ b/static/idn-api/beta/paths/source-entitlements-schema.yaml @@ -0,0 +1,91 @@ +get: + tags: + - Sources + summary: Downloads source entitlements schema template + operationId: downloadSourceEntitlementsSchema + parameters: + - in: path + name: id + required: true + schema: + type: string + description: The Source id + example: '8c190e6787aa4ed9a90bd9d5344523fb' + - in: query + name: schemaName + schema: + type: string + description: Name of entitlement schema + example: '?schemaName=group' + responses: + '200': + description: Successfully downloaded the file + content: + text/csv: + example: id,name,displayName,created,description,modified,entitlements,groups,permissions + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:source-schema:read' +post: + tags: + - Sources + summary: Uploads source entitlements schema template + description: >- + This API uploads a source schema template file to configure a source's entitlement attributes. + operationId: uploadSourceEntitlementsSchema + parameters: + - in: path + name: id + required: true + schema: + type: string + description: The Source id + example: '8c190e6787aa4ed9a90bd9d5344523fb' + - in: query + name: schemaName + schema: + type: string + description: Name of entitlement schema + example: '?schemaName=group' + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '200': + description: Successfully uploaded the file + content: + application/json: + schema: + $ref: '../schemas/Schema.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:source-schema:update' diff --git a/static/idn-api/beta/paths/source-synchronize-attributes.yaml b/static/idn-api/beta/paths/source-synchronize-attributes.yaml new file mode 100644 index 000000000..00bc19a51 --- /dev/null +++ b/static/idn-api/beta/paths/source-synchronize-attributes.yaml @@ -0,0 +1,45 @@ +post: + operationId: synchronizeAttributesForSource + tags: + - Sources + summary: Synchronize single source attributes. + description: >- + This end-point performs attribute synchronization for a selected source. + + A token with ORG_ADMIN or SOURCE_ADMIN authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Source id + responses: + '202': + description: A Source Sync job + content: + application/json: + schema: + $ref: '../schemas/SourceSyncJob.yaml' + example: + { + "id": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "status": "IN_PROGRESS", + "payload": + { + "type": "SYNCHRONIZE_SOURCE_ATTRIBUTES", + "dataJson": "{\"sourceId\":\"2c918083746f642c01746f990884012a\"}" + } + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/source-upload-connector-file.yaml b/static/idn-api/beta/paths/source-upload-connector-file.yaml new file mode 100644 index 000000000..0d33e0757 --- /dev/null +++ b/static/idn-api/beta/paths/source-upload-connector-file.yaml @@ -0,0 +1,46 @@ +post: + operationId: uploadConnectorFile + tags: + - Sources + summary: Upload connector file to source + description: >- + This uploads a supplemental source connector file (like jdbc driver jars) to a source's S3 bucket. + This also sends ETS and Audit events. + + A token with ORG_ADMIN authority is required to call this API. + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source id + example: '8c190e6787aa4ed9a90bd9d5344523fb' + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '200': + description: >- + Uploaded the file successfully and sent all post-upload events + content: + application/json: + schema: + $ref: '../schemas/Source.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/source.yaml b/static/idn-api/beta/paths/source.yaml new file mode 100644 index 000000000..0714f26cf --- /dev/null +++ b/static/idn-api/beta/paths/source.yaml @@ -0,0 +1,277 @@ +get: + operationId: getSource + tags: + - Sources + summary: Get Source by ID + description: >- + This end-point gets a specific source in IdentityNow. + + A token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Source ID + example: 2c9180835d191a86015d28455b4a2329 + responses: + '200': + description: A Source object + content: + application/json: + schema: + $ref: '../schemas/Source.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +put: + operationId: replaceSource + tags: + - Sources + summary: Update Source (Full) + description: | + This API updates a source in IdentityNow, using a full object representation. In other words, the existing Source + configuration is completely replaced. + + Some fields are immutable and cannot be changed, such as: + + * id + * type + * authoritative + * connector + * connectorClass + * passwordPolicies + + Attempts to modify these fields will result in a 400 error. + + A token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Source id + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/Source.yaml' + responses: + '200': + description: >- + Updated Source object. Any passwords will only show the the encrypted cipher-text, as they are not decrypt-able + in IdentityNow cloud-based services, per IdentityNow security design. + content: + application/json: + schema: + $ref: '../schemas/Source.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +patch: + operationId: updateSource + tags: + - Sources + summary: Update Source (Partial) + description: | + This API partially updates a source in IdentityNow, using a list of patch operations according to the + [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + + Some fields are immutable and cannot be changed, such as: + + * id + * type + * authoritative + * created + * modified + * connector + * connectorClass + * passwordPolicies + + Attempts to modify these fields will result in a 400 error. + + A token with ORG_ADMIN, SOURCE_ADMIN, SOURCE_SUBADMIN, or API authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Source id + example: 2c9180835d191a86015d28455b4a2329 + requestBody: + required: true + description: >- + A list of account update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + Any password changes are submitted as plain-text and encrypted upon receipt in IdentityNow. + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + examples: + Edit the source description: + description: This example shows how to edit a source description. + value: + [ + { + "op": "replace", + "path": "/description", + "value": "new description" + } + ] + Edit the source cluster: + description: This example shows how to edit a source cluster by id. + value: + [ + { + "op": "replace", + "path": "/cluster/id", + "value": "2c918087813a902001813f3f85736b45" + } + ] + + Edit source features: + description: This example illustrates how you can update source supported features + value: + [ + { + "op": "replace", + "path": "/features", + "value": [ + "PASSWORD", + "PROVISIONING", + "ENABLE", + "AUTHENTICATE" + ] + } + ] + Change a source description and cluster in One Call: + description: This example shows how multiple fields may be updated with a single patch call. + value: + [ + { + "op": "replace", + "path": "/description", + "value": "new description" + }, + { + "op": "replace", + "path": "/cluster/id", + "value": "2c918087813a902001813f3f85736b45" + } + ] + Add a filter string to the connector: + description: This example shows how you can add a filter to incoming accounts during the account aggregation process. In the example below, any account that does not have an "m" or "d" in the id will be aggregated. + value: + [ + { + "op": "add", + "path": "/connectorAttributes/filterString", + "value": "!( id.contains( \"m\" ) ) || !( id.contains( \"d\" ) )" + } + ] + Update connector attribute for specific operation type: + description: This example shows how you can update the 3rd object in the connection parameters operationType. This will change it from a standard group aggregation to a group aggregation on the "test" entitlement type + value: + [ + { + "op": "replace", + "path": "/connectorAttributes/connectionParameters/2/operationType", + "value": "Group Aggregation-test" + } + ] + responses: + '200': + description: >- + Updated Source object. Any passwords will only show the the encrypted cipher-text, as they are not decrypt-able + in IdentityNow cloud-based services, per IdentityNow security design. + content: + application/json: + schema: + $ref: '../schemas/Source.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: deleteSource + tags: + - Sources + summary: Delete Source by ID + description: >- + This end-point deletes a specific source in IdentityNow. + + A token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + + All of accounts on the source will be removed first, then the source will be deleted. + Actual status of task execution can be retrieved via method GET `/task-status/{id}` + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Source ID + example: 2c9180835d191a86015d28455b4a2329 + responses: + '202': + description: Accepted - Returned if the request was successfully accepted into the system. + content: + application/json: + schema: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + examples: + deleteSource: + summary: Response returned when deleting a source + value: {"type": "TASK_RESULT", "id": "2c91808779ecf55b0179f720942f181a", "name": null} + links: + GetTaskStatusById: + operationId: getTaskStatus + parameters: + id: '$response.body#/id' + description: > + The `id` value returned in the response can be used as the `id` parameter in `GET /task-status/{id}`. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + diff --git a/static/idn-api/beta/paths/sources.yaml b/static/idn-api/beta/paths/sources.yaml new file mode 100644 index 000000000..d35a871a5 --- /dev/null +++ b/static/idn-api/beta/paths/sources.yaml @@ -0,0 +1,152 @@ +get: + operationId: listSources + tags: + - Sources + summary: Lists all sources in IdentityNow. + description: >- + This end-point lists all the sources in IdentityNow. + + A token with ORG_ADMIN, SOURCE_ADMIN, SOURCE_SUBADMIN, or ROLE_SUBADMIN authority is required to call this API. + parameters: + - $ref: '../../v3/parameters/limit50.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + example: name eq "#Employees" + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **name**: *co, eq, in, sw* + + + **type**: *eq, in* + + + **owner.id**: *eq, in* + + + **features**: *ca, co* + + + **created**: *eq* + + + **modified**: *eq* + + + **managementWorkgroup.id**: *eq* + + + **description**: *eq* + + + **authoritative**: *eq* + + + **healthy**: *eq* + + + **status**: *eq, in* + + + **connectionType**: *eq* + + + **connectorName**: *eq* + - in: query + name: sorters + schema: + type: string + format: comma-separated + example: name + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **type, created, modified, name, owner.name, healthy, status** + - in: query + name: for-subadmin + schema: + type: string + example: name + description: >- + Filter the returned list of sources for the identity specified by the parameter, which is the id of an identity + with the role SOURCE_SUBADMIN. By convention, the value **me** indicates the identity id of the current user. + + Subadmins may only view Sources which they are able to administer; all other Sources will be filtered out when + this parameter is set. If the current user is a SOURCE_SUBADMIN but fails to pass a valid value for this + parameter, a 403 Forbidden is returned. + responses: + '200': + description: List of Source objects + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/Source.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +post: + operationId: createSource + tags: + - Sources + summary: Creates a source in IdentityNow. + description: >- + This creates a specific source with a full source JSON representation. Any passwords are submitted as plain-text and + encrypted upon receipt in IdentityNow. + + A token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + parameters: + - in: query + name: provisionAsCsv + description: >- + Configures the source as a DelimitedFile type of source. + schema: + type: boolean + required: false + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/Source.yaml' + responses: + '201': + description: >- + Created Source object. Any passwords will only show the the encrypted cipher-text, as they are not decrypt-able + in IdentityNow cloud-based services, per IdentityNow security design. + content: + application/json: + schema: + $ref: '../schemas/Source.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/sp-config-export-download.yaml b/static/idn-api/beta/paths/sp-config-export-download.yaml new file mode 100644 index 000000000..6c3aca496 --- /dev/null +++ b/static/idn-api/beta/paths/sp-config-export-download.yaml @@ -0,0 +1,42 @@ +get: + operationId: spConfigExportDownload + # security: + # - bearerAuth: + # - 'sp:config:export' + tags: + - SP-Config + summary: Download Result of Export Job + description: >- + This gets export file resulting from the export job with the requested id and downloads it to a file. + + Request will need the following security scope: + + 'sp:config:export' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the export job for which the results will be downloaded. + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: >- + Exported JSON objects. + content: + application/json: + schema: + $ref: '../../beta/schemas/SpConfigExportResults.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/sp-config-export-status.yaml b/static/idn-api/beta/paths/sp-config-export-status.yaml new file mode 100644 index 000000000..41a2976c3 --- /dev/null +++ b/static/idn-api/beta/paths/sp-config-export-status.yaml @@ -0,0 +1,54 @@ +get: + operationId: spConfigExportJobStatus + # security: + # - bearerAuth: + # - 'sp:config:export' + tags: + - SP-Config + summary: Get Status of Export Job + description: >- + This gets the status of the export job identified by the id parameter. + + Request will need the following security scope: + + 'sp:config:export' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the export job for which status will be returned. + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: >- + Export job status successfully returned. + content: + application/json: + schema: + $ref: '../../beta/schemas/SpConfigJob.yaml' + example: + { + "jobId": "1e824aa0-4c6e-4f14-95e9-e7dc5234aa51", + "status": "COMPLETE", + "type": "EXPORT", + "message": null, + "description": "Export Job 1 Test", + "expiration": "2021-05-20T15:04:24Z", + "created": "2021-05-13T15:04:24.112Z", + "modified": "2021-05-13T15:04:27.363Z", + "completed": "2021-05-13T15:04:27.358Z" + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/sp-config-export.yaml b/static/idn-api/beta/paths/sp-config-export.yaml new file mode 100644 index 000000000..1408b995b --- /dev/null +++ b/static/idn-api/beta/paths/sp-config-export.yaml @@ -0,0 +1,46 @@ +post: + operationId: spConfigExport + # security: + # - bearerAuth: + # - 'sp:config:export' + tags: + - SP-Config + summary: Initiates Configuration Objects Export Job. + description: >- + This post will export objects from the tenant to a JSON configuration file. + + Request will need the following security scope: + + 'sp:config:export' + requestBody: + description: Export options control what will be included in the export. + required: true + content: + application/json: + schema: + $ref: '../schemas/ExportPayload.yaml' + responses: + '202': + description: >- + Export job accepted and queued for processing. + content: + application/json: + schema: + $ref: '../schemas/SpConfigJob.yaml' + '400': + description: | + Client Error - Returned if the request body is invalid. + content: + application/json: + schema: + $ref: '../../v3/schemas/ErrorResponseDto.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/sp-config-import-download.yaml b/static/idn-api/beta/paths/sp-config-import-download.yaml new file mode 100644 index 000000000..607250bdc --- /dev/null +++ b/static/idn-api/beta/paths/sp-config-import-download.yaml @@ -0,0 +1,44 @@ +get: + operationId: spConfigImportDownload + # security: + # - bearerAuth: + # - 'sp:config:import' + tags: + - SP-Config + summary: Download Result of Import Job + description: >- + This gets import file resulting from the import job with the requested id and downloads it to a file. + The downloaded file will contain the results of the import operation, including any error, warning or informational + messages associated with the import. + + Request will need the following security scope: + + 'sp:config:import' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the import job for which the results will be downloaded. + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: >- + Import Results JSON object, containing detailed results of the import operation. + content: + application/json: + schema: + $ref: '../../beta/schemas/SpConfigImportResults.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/sp-config-import-status.yaml b/static/idn-api/beta/paths/sp-config-import-status.yaml new file mode 100644 index 000000000..1245a218f --- /dev/null +++ b/static/idn-api/beta/paths/sp-config-import-status.yaml @@ -0,0 +1,54 @@ +get: + operationId: spConfigImportJobStatus + # security: + # - bearerAuth: + # - 'sp:config:import' + tags: + - SP-Config + summary: Get Status of Import Job + description: >- + This gets the status of the import job identified by the id parameter. + + Request will need the following security scope: + + 'sp:config:import' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the import job for which status will be returned. + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: >- + Import job status successfully returned. + content: + application/json: + schema: + $ref: '../../beta/schemas/SpConfigJob.yaml' + example: + { + "jobId": "4fb10503-1c49-4603-8f8d-886e1f6aa47b", + "status": "COMPLETE", + "type": "IMPORT", + "message": "Download import results for details.", + "description": null, + "expiration": "2021-05-20T16:42:39Z", + "created": "2021-05-13T16:42:39.333Z", + "modified": "2021-05-13T16:42:40.71Z", + "completed": "2021-05-13T16:42:40.705Z" + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/sp-config-import.yaml b/static/idn-api/beta/paths/sp-config-import.yaml new file mode 100644 index 000000000..6e9091d29 --- /dev/null +++ b/static/idn-api/beta/paths/sp-config-import.yaml @@ -0,0 +1,151 @@ +post: + operationId: spConfigImport + # security: + # - bearerAuth: + # - 'sp:config:import' + tags: + - SP-Config + summary: Initiates Configuration Objects Import Job. + description: >- + This post will import objects from a JSON configuration file into a tenant. + + Request will need the following security scope: + + 'sp:config:import' + parameters: + - in: query + name: preview + schema: + type: boolean + default: false + required: false + description: >- + This option is intended to give the user information about how an import operation would proceed, without + having any affect on the target tenant. + If true, no objects will be imported. Instead, the import process will pre-process the import file and + attempt to resolve references within imported objects. The import result file will contain messages + pertaining to how specific references were resolved, any errors associated with the preprocessing, + and messages indicating which objects would be imported. + example: "true" + requestBody: + description: | + The form-data "name" attribute for the file content must be "data". + + __Example__ + + data: "config_export_0340b957-5caa-44f6-ada2-d3c4c5bd0b19.json", + options: { + "excludeTypes": [], + "includeTypes": ["TRIGGER_SUBSCRIPTION"], + "objectOptions": { + "TRIGGER_SUBSCRIPTION": { + "includedIds": [ "193446a1-c431-4326-8ba7-d6eebf922948"], + "includedNames":[] + } + }, + "defaultReferences": [ + { + "type": "TRIGGER_SUBSCRIPTION", + "id": "be9e116d-08e1-49fc-ab7f-fa585e96c9e4", + "name": "Test Trigger" + } + ] + } + + __Sample Import File__ + + { + "version": 1, + "timestamp": "2021-05-10T15:19:23.425041-05:00", + "tenant": "sampleTenant", + "options": { + "excludeTypes": [], + "includeTypes": ["TRIGGER_SUBSCRIPTION"], + "objectOptions": null + }, + "objects": [{ + "version": 1, + "self": { + "type": "TRIGGER_SUBSCRIPTION", + "name": "test trigger", + "id": "193446a1-c431-4326-8ba7-d6eebf922948" + }, + "object": { + "type": "HTTP", + "enabled": true, + "httpConfig": { + "url": "https://localhost", + "httpAuthenticationType": "NO_AUTH", + "basicAuthConfig": null, + "bearerTokenAuthConfig": null, + "httpDispatchMode": "SYNC" + }, + "triggerName": "Access Request Submitted", + "responseDeadline": "PT1H", + "name": "test trigger", + "triggerId": "idn:access-request-pre-approval" + } + } + ] + } + + required: true + content: + multipart/form-data: + schema: + type: object + properties: + data: + type: string + description: Name of JSON file containing the objects to be imported. + options: + $ref: '../../beta/schemas/ImportOptions.yaml' + required: + - data + # Redoc does not support rendering examples for multipart/form-data yet. + # Including it anyway for documentation. + example: { + data: "config_export_0340b957-5caa-44f6-ada2-d3c4c5bd0b19.json", + options: { + "excludeTypes": [], + "includeTypes": ["TRIGGER_SUBSCRIPTION"], + "objectOptions": { + "TRIGGER_SUBSCRIPTION": { + "includedIds": [ "be9e116d-08e1-49fc-ab7f-fa585e96c9e4"], + "includedNames":["Lori Test 2"] + } + }, + "defaultReferences": [ + { + "type": "TRIGGER_SUBSCRIPTION", + "id": "be9e116d-08e1-49fc-ab7f-fa585e96c9e4", + "name": "Test Trigger" + } + ] + } + } + responses: + '202': + description: >- + Import job accepted and queued for processing. + content: + application/json: + schema: + $ref: '../schemas/SpConfigJob.yaml' + '400': + description: | + Client Error - Returned if the request body is invalid. + content: + application/json: + schema: + $ref: '../../v3/schemas/ErrorResponseDto.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/sp-config-objects.yaml b/static/idn-api/beta/paths/sp-config-objects.yaml new file mode 100644 index 000000000..f26a891dd --- /dev/null +++ b/static/idn-api/beta/paths/sp-config-objects.yaml @@ -0,0 +1,59 @@ +get: + operationId: spConfigObjects + # security: + # - bearerAuth: + # - 'sp:config:export' + tags: + - SP-Config + summary: Get Config Object details + description: >- + This gets the list of object configurations which are known to the tenant export/import service. + Object configurations that contain "importUrl" and "exportUrl" are available for export/import. + + Request will need the following security scope: + + 'sp:config:export' + responses: + '200': + description: >- + Object configurations returned successfully. + content: + application/json: + schema: + type: array + items: + $ref: '../../beta/schemas/SpConfigObject.yaml' + example: + - { + "objectType": "TRIGGER_SUBSCRIPTION", + "resolveByIdUrl": { + "url": "ets://trigger-subscriptions/$id", + "query": null + }, + "resolveByNameUrl": { + "url": "ets://trigger-subscriptions/", + "query": { + "filters": "name eq \"$name\"" + } + }, + "exportUrl": "ets://trigger-subscriptions/export", + "exportRight": "idn:trigger-service-subscriptions:read", + "exportLimit": 10, + "importUrl": "ets://trigger-subscriptions/import", + "importRight": "idn:trigger-service-subscriptions:create", + "importLimit": 10, + "referenceExtractors": ["$.owner"], + "signatureRequired": false + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/supportlogin/access-granter-support-login-get.yaml b/static/idn-api/beta/paths/supportlogin/access-granter-support-login-get.yaml new file mode 100644 index 000000000..8951c0ff5 --- /dev/null +++ b/static/idn-api/beta/paths/supportlogin/access-granter-support-login-get.yaml @@ -0,0 +1,36 @@ +get: + operationId: accessGranterSupportLoginGet + tags: + - Auth Support Login + summary: Get an access granter support login record by granter tenant + description: >- + Fetch the auth support login record associated with the tenant requesting support (i.e., the tenant requesting support). To be invoked by the authTenant.
        +
        + Request will require the following security scope:
        + **sp:auth-support-login:read** + parameters: + - in: path + name: accessGranterTenant + description: >- + The tenant in need of support. + required: true + schema: + type: string + + responses: + '200': + description: access granter support login response. + content: + application/json: + schema: + $ref: '../../schemas/AccessGranterAuthSupportLoginResponse.yaml' + '400': + $ref: '../../../v3/responses/400.yaml' + '401': + $ref: '../../../v3/responses/401.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '404': + $ref: '../../../v3/responses/404.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/supportlogin/access-granter-support-login-list.yaml b/static/idn-api/beta/paths/supportlogin/access-granter-support-login-list.yaml new file mode 100644 index 000000000..84dd49c5d --- /dev/null +++ b/static/idn-api/beta/paths/supportlogin/access-granter-support-login-list.yaml @@ -0,0 +1,49 @@ +get: + operationId: accessGranterSupportLoginList + tags: + - Auth Support Login + summary: List access granter support login records + description: >- + Fetch the list of auth support login records that grant access to the auth tenant (i.e., the tenant providing support). To be invoked by the authTenant.
        +
        + Request will require the following security scope:
        + **sp:auth-support-login:read** + parameters: + - $ref: '../../../v3/parameters/limit.yaml' + - $ref: '../../../v3/parameters/offset.yaml' + - $ref: '../../../v3/parameters/count.yaml' + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#toc-hId-2058949)

        + Sorting is supported for the following fields: **accessGranterTenant, authUserName, role, expirationDate** + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)

        + Filtering is supported for the following fields and operators:

        + **accessGranterTenant**: *eq, co, sw*

        + *Example:* accessGranterTenant eq "acme-solar", accessGranterTenant co "solar" + + responses: + '200': + description: list of access granter support login responses. + content: + application/json: + schema: + type: array + items: + $ref: '../../schemas/AccessGranterAuthSupportLoginResponse.yaml' + '400': + $ref: '../../../v3/responses/400.yaml' + '401': + $ref: '../../../v3/responses/401.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/supportlogin/auth-support-login-create.yaml b/static/idn-api/beta/paths/supportlogin/auth-support-login-create.yaml new file mode 100644 index 000000000..65568acf9 --- /dev/null +++ b/static/idn-api/beta/paths/supportlogin/auth-support-login-create.yaml @@ -0,0 +1,34 @@ +operationId: authSupportLoginCreation +tags: + - Auth Support Login +summary: Create auth support login record +description: >- + This request will create an auth support login record allowing the authTenant to be able to login as a support user into the tenant requesting support.
        +
        + Request will require the following security scope:
        + **sp:auth-support-login:create** + +requestBody: + description: Auth support login creation request body. + required: true + content: + application/json: + schema: + $ref: '../../schemas/AuthSupportLoginRequest.yaml' +responses: + '200': + description: Created auth support login record. + content: + application/json: + schema: + $ref: '../../schemas/AuthSupportLoginResponse.yaml' + '400': + $ref: '../../../v3/responses/400.yaml' + '401': + $ref: '../../../v3/responses/401.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '429': + $ref: '../../../v3/responses/429.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/supportlogin/auth-support-login-delete.yaml b/static/idn-api/beta/paths/supportlogin/auth-support-login-delete.yaml new file mode 100644 index 000000000..a746d125f --- /dev/null +++ b/static/idn-api/beta/paths/supportlogin/auth-support-login-delete.yaml @@ -0,0 +1,30 @@ +operationId: authSupportLoginDelete +tags: + - Auth Support Login +summary: Delete auth support login record by auth tenant +description: >- + This request will delete an auth support login record.
        +
        + Request will require the following security scope:
        + **sp:auth-support-login:delete** +parameters: + - in: path + name: authTenant + description: >- + The tenant providing support. + required: true + schema: + type: string +responses: + '204': + $ref: '../../../v3/responses/204.yaml' + '400': + $ref: '../../../v3/responses/400.yaml' + '401': + $ref: '../../../v3/responses/401.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '404': + $ref: '../../../v3/responses/404.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/supportlogin/auth-support-login-get.yaml b/static/idn-api/beta/paths/supportlogin/auth-support-login-get.yaml new file mode 100644 index 000000000..27d409221 --- /dev/null +++ b/static/idn-api/beta/paths/supportlogin/auth-support-login-get.yaml @@ -0,0 +1,35 @@ +operationId: authSupportLoginGet +tags: + - Auth Support Login +summary: Get auth support login record by auth tenant +description: >- + Fetch an auth support login record by an authorized auth tenant.
        +
        + Request will require the following security scope:
        + **sp:auth-support-login:read** + +parameters: + - in: path + name: authTenant + description: >- + The tenant providing support. + required: true + schema: + type: string +responses: + '200': + description: auth support login response. + content: + application/json: + schema: + $ref: '../../schemas/AuthSupportLoginResponse.yaml' + '400': + $ref: '../../../v3/responses/400.yaml' + '401': + $ref: '../../../v3/responses/401.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '404': + $ref: '../../../v3/responses/404.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/supportlogin/auth-support-login-list.yaml b/static/idn-api/beta/paths/supportlogin/auth-support-login-list.yaml new file mode 100644 index 000000000..f85ebf132 --- /dev/null +++ b/static/idn-api/beta/paths/supportlogin/auth-support-login-list.yaml @@ -0,0 +1,47 @@ +operationId: authSupportLoginList +tags: + - Auth Support Login +summary: List auth support login records +description: >- + Fetch list of auth support login records that the tenant has granted access to.
        +
        + Request will require the following security scope:
        + **sp:auth-support-login:read** +parameters: + - $ref: '../../../v3/parameters/limit.yaml' + - $ref: '../../../v3/parameters/offset.yaml' + - $ref: '../../../v3/parameters/count.yaml' + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#toc-hId-2058949)

        + Sorting is supported for the following fields: **authTenant, authUserName, role, expirationDate** + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)

        + Filtering is supported for the following fields and operators:

        + **authTenant**: *eq, sw*

        + *Example:* authTenant eq "sailpoint", accessGranterTenant sw "sail" +responses: + '200': + description: list of auth support login responses. + content: + application/json: + schema: + type: array + items: + $ref: '../../schemas/AuthSupportLoginResponse.yaml' + '400': + $ref: '../../../v3/responses/400.yaml' + '401': + $ref: '../../../v3/responses/401.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/supportlogin/auth-support-login-patch.yaml b/static/idn-api/beta/paths/supportlogin/auth-support-login-patch.yaml new file mode 100644 index 000000000..a1cd1018e --- /dev/null +++ b/static/idn-api/beta/paths/supportlogin/auth-support-login-patch.yaml @@ -0,0 +1,48 @@ +operationId: authSupportLoginPatch +tags: + - Auth Support Login +summary: Patch auth support login record by auth tenant +description: >- + This request will patch an auth support login record.
        + Patchable fields: **expirationDate**

        +
        + Request will require the following security scope:
        + **sp:auth-support-login:update** +parameters: + - in: path + name: authTenant + description: >- + The tenant providing support. + required: true + schema: + type: string +requestBody: + description: A list of auth support login update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + required: true + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../../schemas/JsonPatchOperation.yaml' + example: + - op: "replace" + path: "/expirationDate" + value: "2030-08-23T18:00:00.000Z" +responses: + '200': + description: Updated auth support login record. + content: + application/json: + schema: + $ref: '../../schemas/AuthSupportLoginResponse.yaml' + '400': + $ref: '../../../v3/responses/400.yaml' + '401': + $ref: '../../../v3/responses/401.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '404': + $ref: '../../../v3/responses/404.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/supportlogin/auth-support-login-transfer-get.yaml b/static/idn-api/beta/paths/supportlogin/auth-support-login-transfer-get.yaml new file mode 100644 index 000000000..3ec7f1dcb --- /dev/null +++ b/static/idn-api/beta/paths/supportlogin/auth-support-login-transfer-get.yaml @@ -0,0 +1,34 @@ +operationId: authSupportTransferStatusGet +tags: + - Auth Support Login +summary: Get auth support transfer status record by tenant +description: >- + Fetches an auth support transfer status record by tenant.
        +
        + This request requires the following security scope:
        + **sp:auth-support-login-transfer:read** +parameters: + - in: path + name: tenant + description: >- + The name of org granting access to Support and Services + required: true + schema: + type: string +responses: + '200': + description: Response containing the name of the tenant associated with an auth support login access grant and an indication whether that tenant has been transferred yet. + content: + application/json: + schema: + $ref: '../../schemas/AuthSupportTransferStatusResponse.yaml' + '400': + $ref: '../../../v3/responses/400.yaml' + '401': + $ref: '../../../v3/responses/401.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '404': + $ref: '../../../v3/responses/404.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/supportlogin/auth-support-login-transfer-post.yaml b/static/idn-api/beta/paths/supportlogin/auth-support-login-transfer-post.yaml new file mode 100644 index 000000000..ecc6794cc --- /dev/null +++ b/static/idn-api/beta/paths/supportlogin/auth-support-login-transfer-post.yaml @@ -0,0 +1,37 @@ +operationId: authSupportLoginTransfer +tags: + - Auth Support Login +summary: Transfer auth support login grant +description: >- + Transfers an auth support login access grant for the specified tenant by setting the transferred field in the
        + tenant's auth support transfer status record to "true" and deleting the tenant's initial auth support login record.
        +
        + This request requires the following security scope:
        + **sp:auth-support-login-transfer:update** +parameters: + - in: path + name: tenant + description: >- + The name of org granting access to Support and Services + required: true + schema: + type: string +responses: + '200': + description: Response containing the name of the tenant associated with an auth support login access grant and an indication whether that tenant has been transferred yet. + content: + application/json: + schema: + $ref: '../../schemas/AuthSupportTransferStatusResponse.yaml' + '400': + $ref: '../../../v3/responses/400.yaml' + '401': + $ref: '../../../v3/responses/401.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '404': + $ref: '../../../v3/responses/404.yaml' + '429': + $ref: '../../../v3/responses/429.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/supportlogin/auth-support-login-transfer.yaml b/static/idn-api/beta/paths/supportlogin/auth-support-login-transfer.yaml new file mode 100644 index 000000000..02f7b4347 --- /dev/null +++ b/static/idn-api/beta/paths/supportlogin/auth-support-login-transfer.yaml @@ -0,0 +1,4 @@ +get: + $ref: './auth-support-login-transfer-get.yaml' +post: + $ref: './auth-support-login-transfer-post.yaml' diff --git a/static/idn-api/beta/paths/supportlogin/auth-support-login-transfers-list.yaml b/static/idn-api/beta/paths/supportlogin/auth-support-login-transfers-list.yaml new file mode 100644 index 000000000..13d3b7a29 --- /dev/null +++ b/static/idn-api/beta/paths/supportlogin/auth-support-login-transfers-list.yaml @@ -0,0 +1,48 @@ +get: + operationId: authSupportTransferStatusList + tags: + - Auth Support Login + summary: List auth support transfer status records + description: >- + Fetches a list of auth support transfer status records that indicate whether an auth support login has been transferred.
        +
        + This request requires the following security scope:
        + **sp:auth-support-login-transfer:read** + parameters: + - $ref: '../../../v3/parameters/limit.yaml' + - $ref: '../../../v3/parameters/offset.yaml' + - $ref: '../../../v3/parameters/count.yaml' + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#toc-hId-2058949)

        + Sorting is supported for the following fields: **tenant** + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)

        + Filtering is supported for the following fields and operators:

        + **transferred**: *eq*

        + *Example:* transferred eq false, transferred eq 0 + responses: + '200': + description: list of auth support transfer status responses. + content: + application/json: + schema: + type: array + items: + $ref: '../../schemas/AuthSupportTransferStatusResponse.yaml' + '400': + $ref: '../../../v3/responses/400.yaml' + '401': + $ref: '../../../v3/responses/401.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/supportlogin/auth-support-login.yaml b/static/idn-api/beta/paths/supportlogin/auth-support-login.yaml new file mode 100644 index 000000000..5ce747740 --- /dev/null +++ b/static/idn-api/beta/paths/supportlogin/auth-support-login.yaml @@ -0,0 +1,6 @@ +get: + $ref: './auth-support-login-get.yaml' +patch: + $ref: './auth-support-login-patch.yaml' +delete: + $ref: './auth-support-login-delete.yaml' diff --git a/static/idn-api/beta/paths/supportlogin/auth-support-logins-migrate.yaml b/static/idn-api/beta/paths/supportlogin/auth-support-logins-migrate.yaml new file mode 100644 index 000000000..8d7265018 --- /dev/null +++ b/static/idn-api/beta/paths/supportlogin/auth-support-logins-migrate.yaml @@ -0,0 +1,37 @@ +post: + operationId: authSupportLoginsMigrate + tags: + - Auth Support Login + summary: Migrate auth support login records + description: >- + Migrates all the auth support login access grants from the specified auth tenant to the new auth tenant in the
        + request context, resulting in the new auth tenant having possession of all the old auth tenant's auth support
        + login access grants and the old auth tenant no longer having any more auth support login access grants.
        +
        + Because this is a highly privileged operation meant only to be executable by SailPoint DevOps,
        + this request requires the following security scope:
        + **sp:auth-support-login-transfer:update** + parameters: + - in: path + name: oldAuthTenant + description: >- + The name of auth tenant whose auth support login access grants will be migrated to the calling auth tenant + example: acme-solar + required: true + schema: + type: string + responses: + '202': + $ref: '../../../v3/responses/202.yaml' + '400': + $ref: '../../../v3/responses/400.yaml' + '401': + $ref: '../../../v3/responses/401.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '404': + $ref: '../../../v3/responses/404.yaml' + '429': + $ref: '../../../v3/responses/429.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/supportlogin/auth-support-logins.yaml b/static/idn-api/beta/paths/supportlogin/auth-support-logins.yaml new file mode 100644 index 000000000..bdacea632 --- /dev/null +++ b/static/idn-api/beta/paths/supportlogin/auth-support-logins.yaml @@ -0,0 +1,4 @@ +get: + $ref: './auth-support-login-list.yaml' +post: + $ref: './auth-support-login-create.yaml' diff --git a/static/idn-api/beta/paths/supportlogin/auth-support-tenant-create.yaml b/static/idn-api/beta/paths/supportlogin/auth-support-tenant-create.yaml new file mode 100644 index 000000000..285a2024e --- /dev/null +++ b/static/idn-api/beta/paths/supportlogin/auth-support-tenant-create.yaml @@ -0,0 +1,38 @@ +operationId: authSupportTenantCreate +tags: + - Auth Support Login +summary: Create auth support tenant record +description: >- + This request will create an auth support tenant record for the tenant making the call, making that tenant the auth + tenant in the new record. This new record will function as a prerequisite metadata reference for when a target tenant + attempts to create an auth support login record that grants access to a particular auth tenant. + Thus, a target tenant must name an auth tenant that exists within an auth support tenant record in order to + successfully create an auth support login record.
        +
        + Request will require the following security scope:
        + **sp:auth-support-login:create** + +requestBody: + description: Auth support tenant creation request body. + required: true + content: + application/json: + schema: + $ref: '../../schemas/AuthSupportTenantRequest.yaml' +responses: + '200': + description: Created auth support tenant record. + content: + application/json: + schema: + $ref: '../../schemas/AuthSupportTenantResponse.yaml' + '400': + $ref: '../../../v3/responses/400.yaml' + '401': + $ref: '../../../v3/responses/401.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '429': + $ref: '../../../v3/responses/429.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/supportlogin/auth-support-tenant-delete.yaml b/static/idn-api/beta/paths/supportlogin/auth-support-tenant-delete.yaml new file mode 100644 index 000000000..bda29ca21 --- /dev/null +++ b/static/idn-api/beta/paths/supportlogin/auth-support-tenant-delete.yaml @@ -0,0 +1,20 @@ +operationId: authSupportTenantDelete +tags: + - Auth Support Login +summary: Delete all auth support tenant records for this tenant +description: >- + This request will delete all auth support tenant records related to the requesting tenant.
        +
        + Request will require the following security scope:
        + **sp:auth-support-login:delete** +responses: + '204': + $ref: '../../../v3/responses/204.yaml' + '401': + $ref: '../../../v3/responses/401.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '404': + $ref: '../../../v3/responses/404.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/supportlogin/auth-support-tenant-list.yaml b/static/idn-api/beta/paths/supportlogin/auth-support-tenant-list.yaml new file mode 100644 index 000000000..1b103ac71 --- /dev/null +++ b/static/idn-api/beta/paths/supportlogin/auth-support-tenant-list.yaml @@ -0,0 +1,47 @@ +operationId: authSupportTenantList +tags: + - Auth Support Login +summary: List auth support tenant records +description: >- + Fetch list of auth support tenant records that can be used as authTenant.
        +
        + Request will require the following security scope:
        + **sp:auth-support-login:read** +parameters: + - $ref: '../../../v3/parameters/limit.yaml' + - $ref: '../../../v3/parameters/offset.yaml' + - $ref: '../../../v3/parameters/count.yaml' + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#toc-hId-2058949)

        + Sorting is supported for the following fields: **authTenant** + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html)

        + Filtering is supported for the following fields and operators:

        + **authTenant**: *eq, sw*

        + *Example:* authTenant eq "sailpoint", authTenant sw "sail" +responses: + '200': + description: list of auth support tenant responses. + content: + application/json: + schema: + type: array + items: + $ref: '../../schemas/AuthSupportTenantResponse.yaml' + '400': + $ref: '../../../v3/responses/400.yaml' + '401': + $ref: '../../../v3/responses/401.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/supportlogin/auth-support-tenants.yaml b/static/idn-api/beta/paths/supportlogin/auth-support-tenants.yaml new file mode 100644 index 000000000..209a2b20f --- /dev/null +++ b/static/idn-api/beta/paths/supportlogin/auth-support-tenants.yaml @@ -0,0 +1,7 @@ +get: + $ref: './auth-support-tenant-list.yaml' +post: + $ref: './auth-support-tenant-create.yaml' +delete: + $ref: './auth-support-tenant-delete.yaml' + diff --git a/static/idn-api/beta/paths/supportlogin/auth-support-user-eligibility-get.yaml b/static/idn-api/beta/paths/supportlogin/auth-support-user-eligibility-get.yaml new file mode 100644 index 000000000..3c8765303 --- /dev/null +++ b/static/idn-api/beta/paths/supportlogin/auth-support-user-eligibility-get.yaml @@ -0,0 +1,25 @@ +get: + operationId: authSupportUserEligbilityGet + tags: + - Auth Support Login + summary: Get a user's eligibility for support and services login + description: >- + Fetch the auth support tenant record(s) associated with this user's tenant and check to see if the user belongs
        + to any access roles allowed for performing support and services login
        +
        + Request requires an authenticated user, but no specific scope is required for analysis of user eligibility. + responses: + '200': + description: Response containing a determination of whether or not the logged-in user is eligible to provide support to customers. + content: + application/json: + schema: + $ref: '../../schemas/AuthSupportUserEligibilityResponse.yaml' + '401': + $ref: '../../../v3/responses/401.yaml' + '403': + $ref: '../../../v3/responses/403.yaml' + '429': + $ref: '../../../v3/responses/429.yaml' + '500': + $ref: '../../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/sync-password.yaml b/static/idn-api/beta/paths/sync-password.yaml new file mode 100644 index 000000000..fbf44f4f5 --- /dev/null +++ b/static/idn-api/beta/paths/sync-password.yaml @@ -0,0 +1,61 @@ +post: + operationId: syncPassword + tags: + - Password + summary: Sync Identity's Password +# security: +# - bearerAuth: +# - API + description: This API is reserved for password interceptor (PWI) to initiate a password change request for all sources in the sync group EXCEPT the source specified from the PasswordChangeRequest payload. To sync password for all sources in a source group, use set-password instead. The password can only be synced by a trusted API client application. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/SyncPasswordRequest.yaml' + example: { + "identityId": "2c918085744fec4301746f9a5bce4605", + "encryptedPassword": "GIAP7TaAg7Y2EJtFojokBDvHQ/iXF3qk0z0+eLusqXMSkEhAfr34GydFLy+BM2uZB94cwbTYKi9rRrCRRdh8610VeqpRDjhuc28nOPYqTJOx09IGJdr8dl4mbhC1f21JCqMBBrFSA4VQQvd6OMVsceoXTjDI0aKahRYNjlMlsOuaIUZeNQxWBydLuR6vYG3qAKEPCzYZbvyYuBUylUWArfqwV4dgwKGDgDkTLBkQU9LVu3rssc+BXaex6l6JcBDiPg7wvKD1G3lZ+BaGrMknbx3j0T2Uivg+HxwTf7PmtAua6O9M7F984c79KM+sYFTU37MAdlWZu/cy+w2DdHVdCg==", + "publicKeyId": "YWQ2NjQ4MTItZjY0NC00MWExLWFjMjktOGNmMzU3Y2VlNjk2", + "accountId": "CN=Abby Smith,OU=Austin,OU=Americas,OU=Demo,DC=seri,DC=acme,DC=com", + "sourceId": "8a807d4c73c545510173c545d4b60246", + "uuid":"{ad9fc391-246d-40af-b248-b6556a2b7c01}", + "retryCount": "0", + "host": "host1.example.net", + "passwordSyncTime": "2021-01-08T18:46:56+00:00", + "pwiType": "AD", + "pwiVersion": "20.0.0", + "passwordChangeTime": "2021-01-08T18:45:50+00:00" + } + responses: + '202': + description: Reference to the password change. + content: + application/json: + schema: + $ref: '../schemas/PasswordChangeResponse.yaml' + examples: + Password sync is in progress: + value: + { + "state": "IN_PROGRESS", + "requestId": "089899f13a8f4da7824996191587bab9", + } + Password sync is finshed: + value: + { + "state": "FINISHED", + "identityRequestId": null, + } + '204': + description: No content - Indicates there is no processing for the PWI request. + content: + application/json: {} + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/system-accounts.yaml b/static/idn-api/beta/paths/system-accounts.yaml new file mode 100644 index 000000000..76a841df3 --- /dev/null +++ b/static/idn-api/beta/paths/system-accounts.yaml @@ -0,0 +1,41 @@ +get: + operationId: getSystemAccount + tags: + - Accounts + summary: Get System Account For Identity + description: >- + Returns the system account given an identity ID. + + A token with ORG_ADMIN or API authority is required to call this API to get a the system account of an identity. + parameters: + - in: path + name: identityId + schema: + type: string + required: true + + description: The Identity's ID + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: An account object + content: + application/json: + schema: + $ref: '../schemas/SlimAccount.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:account:read' + diff --git a/static/idn-api/beta/paths/tag.yaml b/static/idn-api/beta/paths/tag.yaml new file mode 100644 index 000000000..5862f4ef5 --- /dev/null +++ b/static/idn-api/beta/paths/tag.yaml @@ -0,0 +1,95 @@ +get: + operationId: getTagById + tags: + - Tags + summary: Get Tag By Id + description: >- + Returns a tag by its id. + + + A token with API, ORG_ADMIN, CERT_ADMIN, REPORT_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN + authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the object reference to retrieve. + example: 329d96cf-3bdb-40a9-988a-b5037ab89022 + responses: + '200': + description: Tag + content: + application/json: + schema: + $ref: '../schemas/Tag.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: deleteTagById + tags: + - Tags + summary: Delete Tag + description: >- + This API deletes a tag by specified id. + + + A token with API, ORG_ADMIN, CERT_ADMIN, REPORT_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN + authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the object reference to delete. + example: 329d96cf-3bdb-40a9-988a-b5037ab89022 + responses: + '204': + description: No content. + '400': + description: Client Error - Returned if the request body is invalid. + content: + application/json: + schema: + $ref: '../../v3/schemas/ErrorResponseDto.yaml' + examples: + 400.1 Bad Request Content: + description: Response for bad request content + value: + detailCode: 400.1 Bad Request Content + trackingId: 1ea1adcb84da4dcb890145e05745774e + messages: + - locale: en-US + localeOrigin: DEFAULT + text: The request was syntactically correct but its content is semantically invalid. + 400.2.1 Referential integrity violation: + description: Response for reference violations + value: + detailCode: 400.2.1 Referential integrity violation + trackingId: 33956b59f6d44081a11f91959dd8731d + messages: + - locale: en-US + localeOrigin: DEFAULT + text: The request cannot be fulfilled because doing so would violate referential integrity constraints. + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/tagged-object.yaml b/static/idn-api/beta/paths/tagged-object.yaml new file mode 100644 index 000000000..992299c05 --- /dev/null +++ b/static/idn-api/beta/paths/tagged-object.yaml @@ -0,0 +1,129 @@ +get: + operationId: getTaggedObjectByTypeAndId + tags: + - Tagged Objects + summary: Get Tagged Object + description: >- + This gets a tagged object for the specified type. + parameters: + - in: path + name: type + schema: + type: string + enum: + - ROLE + - IDENTITY + - SOD_POLICY + required: true + description: The type of tagged object to retrieve. + example: ROLE + - in: path + name: id + schema: + type: string + required: true + description: The ID of the object reference to retrieve. + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: Tagged object by type and ID. + content: + application/json: + schema: + $ref: '../schemas/TaggedObject.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +put: + operationId: updateTaggedObjectByTypeAndId + tags: + - Tagged Objects + summary: Update Tagged Object + description: >- + This updates a tagged object for the specified type. + parameters: + - in: path + name: type + schema: + type: string + enum: + - ROLE + - IDENTITY + - SOD_POLICY + required: true + description: The type of tagged object to update. + - in: path + name: id + schema: + type: string + required: true + description: The ID of the object reference to update. + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/TaggedObject.yaml' + responses: + '200': + description: Tagged object by type and ID. + content: + application/json: + schema: + $ref: '../schemas/TaggedObject.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: deleteTaggedObjectByTypeAndId + tags: + - Tagged Objects + summary: Delete Tagged Object + description: >- + This deletes a tagged object for the specified type. + parameters: + - in: path + name: type + schema: + type: string + enum: + - ROLE + - IDENTITY + - SOD_POLICY + required: true + description: The type of tagged object to delete. + - in: path + name: id + schema: + type: string + required: true + description: The ID of the object reference to delete. + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '204': + description: No content. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/tagged-objects-type.yaml b/static/idn-api/beta/paths/tagged-objects-type.yaml new file mode 100644 index 000000000..d877d349d --- /dev/null +++ b/static/idn-api/beta/paths/tagged-objects-type.yaml @@ -0,0 +1,61 @@ +get: + operationId: listTaggedObjectsByType + tags: + - Tagged Objects + summary: List Tagged Objects + description: >- + This API returns a list of all tagged objects by type. + + + Any authenticated token may be used to call this API. + parameters: + - in: path + name: type + schema: + type: string + enum: + - ROLE + - IDENTITY + - SOD_POLICY + required: true + description: The type of tagged object to retrieve. + example: ROLE + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **objectRef.id**: *eq* + + + **objectRef.type**: *eq* + example: objectRef.id eq "2c91808568c529c60168cca6f90c1313" + required: false + responses: + '200': + description: List of all tagged objects for specified type. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/TaggedObject.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/tagged-objects.yaml b/static/idn-api/beta/paths/tagged-objects.yaml new file mode 100644 index 000000000..855286fa4 --- /dev/null +++ b/static/idn-api/beta/paths/tagged-objects.yaml @@ -0,0 +1,86 @@ +get: + operationId: listTaggedObjects + tags: + - Tagged Objects + summary: List Tagged Objects + description: >- + This API returns a list of all tagged objects. + + + Any authenticated token may be used to call this API. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **objectRef.id**: *eq, in* + + + **objectRef.type**: *eq, in* + + + **tagName**: *eq, in* + example: tagName eq "BU_FINANCE" + required: false + responses: + '200': + description: List of all tagged objects. + content: + application/json: + schema: + $ref: '../schemas/TaggedObject.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +post: + operationId: addTagToObject + tags: + - Tagged Objects + summary: Add Tag to Object + description: >- + This adds a tag to an object. + + + Any authenticated token may be used to call this API. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/TaggedObject.yaml' + responses: + '200': + description: Request succeeded. + content: + application/json: + schema: + $ref: '../schemas/TaggedObject.yaml' + '201': + description: Created. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/tags-get-shared.yaml b/static/idn-api/beta/paths/tags-get-shared.yaml new file mode 100644 index 000000000..c1aa54264 --- /dev/null +++ b/static/idn-api/beta/paths/tags-get-shared.yaml @@ -0,0 +1,37 @@ +post: + operationId: getSharedTags + tags: + - Tags + summary: Get Shared Tags + description: >- + This API returns the tags shared among specified objects. + + + A token with API, ORG_ADMIN, CERT_ADMIN, REPORT_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN + authority is required to call this API. + requestBody: + required: true + description: Supported object types are ROLE, IDENTITY and SOD_POLICY. + content: + application/json: + schema: + $ref: '../schemas/BulkTaggedObject.yaml' + responses: + '200': + description: Request succeeded. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/Tag.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/tags.yaml b/static/idn-api/beta/paths/tags.yaml new file mode 100644 index 000000000..1eae08d09 --- /dev/null +++ b/static/idn-api/beta/paths/tags.yaml @@ -0,0 +1,120 @@ +get: + operationId: listTags + tags: + - Tags + summary: List Tags + description: >- + This API returns a list of tags. + + + A token with API, ORG_ADMIN, CERT_ADMIN, REPORT_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN + authority is required to call this API. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **name**: *eq, in, sw* + example: id eq "27462f54-61c7-4140-b5da-d5dbe27fc6db" + required: false + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#sorting-results) + + + Sorting is supported for the following fields: **id, name, created, modified** + example: name,-modified + required: false + responses: + '200': + description: List of all tags. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/Tag.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +post: + operationId: createTag + tags: + - Tags + summary: Create Tag + description: >- + This API creates new tag. + + + A token with API, ORG_ADMIN, CERT_ADMIN, REPORT_ADMIN, ROLE_ADMIN, ROLE_SUBADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN + authority is required to call this API. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/Tag.yaml' + responses: + '201': + description: Created tag. + content: + application/json: + schema: + $ref: '../schemas/Tag.yaml' + '400': + description: Client Error - Returned if the request body is invalid. + content: + application/json: + schema: + $ref: '../../v3/schemas/ErrorResponseDto.yaml' + examples: + 400.1 Bad Request Content: + description: Response for bad request content + value: + detailCode: 400.1 Bad Request Content + trackingId: 1ea1adcb84da4dcb890145e05745774e + messages: + - locale: en-US + localeOrigin: DEFAULT + text: The request was syntactically correct but its content is semantically invalid. + 400.1.2 Value length out of range: + description: Response for invalid tag name + value: + detailCode: 400.2.1 Referential integrity violation + trackingId: 2241d18b9e7d4350a9acfe69f8ce47f1 + messages: + - locale: en-US + localeOrigin: DEFAULT + text: Field "Tag Name" length is outside of range [3,128]. + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/paths/task-definition.yaml b/static/idn-api/beta/paths/task-definition.yaml new file mode 100644 index 000000000..1bd8da51f --- /dev/null +++ b/static/idn-api/beta/paths/task-definition.yaml @@ -0,0 +1,71 @@ +# +# Copyright (C) 2019-2020 SailPoint Technologies, Inc. All rights reserved. +# +get: + tags: + - Task Management + summary: Retrieves a task definition summary by task definition ID + description: Get a specified TaskDefinitionSummary. + operationId: getTaskDefinitionSummary + parameters: + - name: id + in: path + description: ID of the TaskDefinition to get a summary for + required: true + style: simple + explode: false + schema: + type: string + example: taskDefId + responses: + "200": + description: TaskDefinitionSummary with the given task definition ID + content: + application/json: + schema: + $ref: '../schemas/TaskDefinitionSummary.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + "404": + $ref: '../../v3/responses/404.yaml' + security: + - bearerAuth: + - 'idn:task-definition:read' +patch: + tags: + - Task Management + summary: Patch a specified TaskDefinition. + description: Update an existing TaskDefinition using PATCH. + operationId: patchTaskDefinition + parameters: + - name: id + in: path + description: ID of the TaskDefinition to patch + required: true + style: simple + explode: false + schema: + type: string + example: taskDefId + requestBody: + content: + application/json-patch+json: + schema: + $ref: '../schemas/JsonPatch.yaml' + required: true + responses: + "200": + description: Responds with the TaskDefinition as updated. + content: + application/json: + schema: + $ref: '../schemas/TaskDefinitionSummary.yaml' + "400": + $ref: '../../v3/responses/400.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + "404": + $ref: '../../v3/responses/404.yaml' + security: + - bearerAuth: + - 'idn:task-definition:write' diff --git a/static/idn-api/beta/paths/task-definitions.yaml b/static/idn-api/beta/paths/task-definitions.yaml new file mode 100644 index 000000000..c874efbb9 --- /dev/null +++ b/static/idn-api/beta/paths/task-definitions.yaml @@ -0,0 +1,47 @@ +# +# Copyright (C) 2019-2020 SailPoint Technologies, Inc. All rights reserved. +# +get: + tags: + - Task Management + summary: Retrieve a task definition summary list. + description: Get a list of TaskDefinitionSummary. + operationId: getTaskDefinitionSummaryList + parameters: + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + - name: sorters + in: query + description: sort criteria + required: false + style: form + explode: true + schema: + type: string + - name: filters + in: query + description: filter criteria + required: false + style: form + explode: true + schema: + type: string + responses: + "200": + description: Response is a list of TaskDefinitionSumary results matching the criteria. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/TaskDefinitionSummary.yaml' + "204": + $ref: '../../v3/responses/204.yaml' + "400": + $ref: '../../v3/responses/400.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + security: + - bearerAuth: + - 'idn:task-definition:read' diff --git a/static/idn-api/beta/paths/task-execution-cancel.yaml b/static/idn-api/beta/paths/task-execution-cancel.yaml new file mode 100644 index 000000000..9260ce34a --- /dev/null +++ b/static/idn-api/beta/paths/task-execution-cancel.yaml @@ -0,0 +1,29 @@ +# +# Copyright (C) 2019-2020 SailPoint Technologies, Inc. All rights reserved. +# +post: + tags: + - Task Management + summary: Cancel a task by ID + description: Cancel a task by task ID. + operationId: cancelTask + parameters: + - name: id + in: path + description: Task ID of task to cancel + required: true + style: simple + explode: false + schema: + type: string + example: anId + responses: + "200": + description: Response indicating that the Task with the given ID was successfully cancelled. + "403": + $ref: '../../v3/responses/403.yaml' + "404": + $ref: '../../v3/responses/404.yaml' + security: + - bearerAuth: + - 'idn:task-management:write' diff --git a/static/idn-api/beta/paths/task-execution-run.yaml b/static/idn-api/beta/paths/task-execution-run.yaml new file mode 100644 index 000000000..dc80c34c0 --- /dev/null +++ b/static/idn-api/beta/paths/task-execution-run.yaml @@ -0,0 +1,29 @@ +# +# Copyright (C) 2019-2020 SailPoint Technologies, Inc. All rights reserved. +# +post: + tags: + - Task Management + summary: Run a task. + description: Run a task. + operationId: runTask + requestBody: + content: + application/json: + schema: + $ref: '../schemas/TaskInvocation.yaml' + required: true + responses: + "200": + description: Responds with an initial TaskStatus for the executed task. + content: + application/json: + schema: + $ref: '../schemas/TaskStatus.yaml' + "400": + $ref: '../../v3/responses/400.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + security: + - bearerAuth: + - 'idn:task-management:write' diff --git a/static/idn-api/beta/paths/task-status-pending.yaml b/static/idn-api/beta/paths/task-status-pending.yaml new file mode 100644 index 000000000..165ca6a4d --- /dev/null +++ b/static/idn-api/beta/paths/task-status-pending.yaml @@ -0,0 +1,85 @@ +# +# Copyright (C) 2019-2020 SailPoint Technologies, Inc. All rights reserved. +# +get: + tags: + - Task Management + summary: Retrieve a pending task list. + description: Retrieve a list of TaskStatus for pending tasks. + operationId: getPendingTasks + parameters: + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + - name: sorters + in: query + description: sort criteria + required: false + style: form + explode: true + schema: + type: string + - name: filters + in: query + description: filter criteria + required: false + style: form + explode: true + schema: + type: string + responses: + "200": + description: Responds with a list of TaskStatus for pending tasks. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/TaskStatus.yaml' + "204": + $ref: '../../v3/responses/204.yaml' + "400": + $ref: '../../v3/responses/400.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + security: + - bearerAuth: + - 'idn:task-management:read' +head: + tags: + - Task Management + summary: Retrieve headers only for pending task list. + description: Retrieve headers for a list of TaskStatus for pending tasks. + operationId: getPendingTaskHeaders + parameters: + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + - name: sorters + in: query + description: sort criteria + required: false + style: form + explode: true + schema: + type: string + - name: filters + in: query + description: filter criteria + required: false + style: form + explode: true + schema: + type: string + responses: + "200": + description: Responds with headers for List of TaskStatus for pending tasks. + "204": + $ref: '../../v3/responses/204.yaml' + "400": + $ref: '../../v3/responses/400.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + security: + - bearerAuth: + - 'idn:task-management:read' diff --git a/static/idn-api/beta/paths/task-status.yaml b/static/idn-api/beta/paths/task-status.yaml new file mode 100644 index 000000000..a7f792644 --- /dev/null +++ b/static/idn-api/beta/paths/task-status.yaml @@ -0,0 +1,71 @@ +# +# Copyright (C) 2019-2020 SailPoint Technologies, Inc. All rights reserved. +# +get: + tags: + - Task Management + summary: Retrieve a task status by task ID. + description: Get a TaskStatus for a task by task ID. + operationId: getTaskStatus + parameters: + - name: id + in: path + description: Task ID of the TaskStatus to get + required: true + style: simple + explode: false + schema: + type: string + example: anId + responses: + "200": + description: Responds with a TaskStatus for the task with the given task ID. + content: + application/json: + schema: + $ref: '../schemas/TaskStatus.yaml' + "403": + description: Forbidden, generally due to a lack of security rights + "404": + description: TaskStatus with the given id was not found. + security: + - bearerAuth: + - 'idn:task-management:read' +patch: + tags: + - Task Management + summary: Update task status by task ID + description: Update a current TaskStatus for a task by task ID. + operationId: updateTaskStatus + parameters: + - name: id + in: path + description: Task ID of the task whose TaskStatus to update + required: true + style: simple + explode: false + schema: + type: string + example: anId + requestBody: + content: + application/json-patch+json: + schema: + $ref: '../schemas/JsonPatch.yaml' + required: true + responses: + "200": + description: Responds with the updated TaskStatus for the task with the given task ID. + content: + application/json: + schema: + $ref: '../schemas/TaskStatus.yaml' + "400": + $ref: '../../v3/responses/400.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + "404": + $ref: '../../v3/responses/404.yaml' + security: + - bearerAuth: + - 'idn:task-management:write' diff --git a/static/idn-api/beta/paths/transform.yaml b/static/idn-api/beta/paths/transform.yaml new file mode 100644 index 000000000..64f53b856 --- /dev/null +++ b/static/idn-api/beta/paths/transform.yaml @@ -0,0 +1,115 @@ +get: + tags: + - Transforms + summary: Transform by ID + description: >- + This API returns the transform specified by the given ID. + + A token with transform read authority is required to call this API. + + operationId: getTransform + parameters: + - name: id + in: path + description: ID of the transform to retrieve + required: true + style: simple + explode: false + schema: + type: string + responses: + "200": + description: Transform with the given ID + content: + application/json: + schema: + $ref: '../schemas/Transform.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + "404": + $ref: '../../v3/responses/404.yaml' + security: + - bearerAuth: + - 'idn:transforms:read' +put: + tags: + - Transforms + summary: Update a transform + description: >- + Replaces the transform specified by the given ID with the transform provided in the request body. Only the + "attributes" field is mutable. Attempting to change other attributes will result in an error. + + A token with transform write authority is required to call this API. + + operationId: updateTransform + parameters: + - name: id + in: path + description: ID of the transform to update + required: true + style: simple + explode: false + schema: + type: string + requestBody: + description: >- + The updated transform object (must include "name", "type", and "attributes" fields). + content: + application/json: + schema: + $ref: '../schemas/Transform.yaml' + example: + name: Timestamp To Date + type: dateFormat + attributes: { "inputFormat": "MMM-dd-yyyy, HH:mm:ss.SSS", "outputFormat": "yyyy/dd/MM" } + responses: + "200": + description: Indicates the transform was successfully updated and returns its new representation. + content: + application/json: + schema: + $ref: '../schemas/Transform.yaml' + example: + id: 2cd78adghjkja34jh2b1hkjhasuecd + name: Timestamp To Date + type: dateFormat + attributes: { "inputFormat": "MMM-dd-yyyy, HH:mm:ss.SSS", "outputFormat": "yyyy/dd/MM" } + internal: false + "400": + $ref: '../../v3/responses/400.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + "404": + $ref: '../../v3/responses/404.yaml' + security: + - bearerAuth: + - 'idn:transforms:write' +delete: + tags: + - Transforms + summary: Delete a transform + description: >- + Deletes the transform specified by the given ID. + + A token with transform delete authority is required to call this API. + + operationId: deleteTransform + parameters: + - name: id + in: path + description: ID of the transform to delete + required: true + style: simple + explode: false + schema: + type: string + responses: + "204": + $ref: '../../v3/responses/204.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + "404": + $ref: '../../v3/responses/404.yaml' + security: + - bearerAuth: + - 'idn:transforms:delete' diff --git a/static/idn-api/beta/paths/transforms.yaml b/static/idn-api/beta/paths/transforms.yaml new file mode 100644 index 000000000..e837aba45 --- /dev/null +++ b/static/idn-api/beta/paths/transforms.yaml @@ -0,0 +1,99 @@ +get: + tags: + - Transforms + summary: List transforms + description: >- + Gets a list of all saved transform objects. + + A token with transforms-list read authority is required to call this API. + + operationId: getTransformsList + parameters: + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + - name: name + in: query + description: >- + Name of the transform to retrieve from the list. + required: false + style: form + schema: + type: string + example: "ExampleTransformName123" + - name: filters + in: query + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + Filtering is supported for the following fields and operators: + + **internal**: *eq* + + **name**: *eq*, *sw* + required: false + style: form + explode: true + schema: + type: string + responses: + "200": + description: A list of transforms matching the given criteria. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/Transform.yaml' + example: + - id: 2cd78adghjkja34jh2b1hkjhasuecd + name: Timestamp To Date + type: dateFormat + attributes: { "inputFormat": "MMM-dd-yyyy, HH:mm:ss.SSS", "outputFormat": "yyyy/dd/MM" } + internal: false + - id: 2lkas8dhj4bkuakja77giih7l4ashh + name: PrefixSubstring + type: substring + attributes: { "begin": 0, "end": 3 } + internal: true + "403": + $ref: '../../v3/responses/403.yaml' + security: + - bearerAuth: + - 'idn:transforms-list:read' +post: + tags: + - Transforms + summary: Create transform + description: >- + Creates a new transform object. Request body must include name, type, and attributes. + + A token with transform write authority is required to call this API. + + operationId: createTransform + requestBody: + required: true + description: >- + The transform to be created. + content: + application/json: + schema: + $ref: '../schemas/Transform.yaml' + example: + name: Timestamp To Date + type: dateFormat + attributes: { "inputFormat": "MMM dd yyyy, HH:mm:ss.SSS", "outputFormat": "yyyy/dd/MM" } + responses: + "201": + description: Indicates the transform was successfully created and returns its representation. + content: + application/json: + schema: + $ref: '../schemas/Transform.yaml' + "400": + $ref: '../../v3/responses/400.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + security: + - bearerAuth: + - 'idn:transforms:write' diff --git a/static/idn-api/beta/paths/trigger-invocations-complete.yaml b/static/idn-api/beta/paths/trigger-invocations-complete.yaml new file mode 100644 index 000000000..9d26e67b7 --- /dev/null +++ b/static/idn-api/beta/paths/trigger-invocations-complete.yaml @@ -0,0 +1,38 @@ +post: + operationId: completeInvocation + tags: + - Triggers + summary: Complete Trigger Invocation + description: Completes an invocation to a REQUEST_RESPONSE type trigger. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the invocation to complete. + example: 0f11f2a4-7c94-4bf3-a2bd-742580fe3bde + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/CompleteInvocation.yaml' + example: + secret: "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde" + output: { + "approved": false + } + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/trigger-invocations-pending-events.yaml b/static/idn-api/beta/paths/trigger-invocations-pending-events.yaml new file mode 100644 index 000000000..873f0fe23 --- /dev/null +++ b/static/idn-api/beta/paths/trigger-invocations-pending-events.yaml @@ -0,0 +1,59 @@ +get: + operationId: listPendingEvents + tags: + - Triggers + summary: List Pending Events + description: Get a list of event status, i.e. count of persisted, pending events per topic. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + required: false + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **topic**: *eq* + example: 'topic eq "Channel"' + - in: query + name: sorters + required: false + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: + + + **topic** + example: 'topic' + responses: + '200': + description: >- + List of pending events + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/EventStatus.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/trigger-invocations-start.yaml b/static/idn-api/beta/paths/trigger-invocations-start.yaml new file mode 100644 index 000000000..568f5fbcf --- /dev/null +++ b/static/idn-api/beta/paths/trigger-invocations-start.yaml @@ -0,0 +1,41 @@ +post: + operationId: startInvocation + tags: + - Triggers + summary: Start Invocation + description: Start a trigger invocation with specified trigger input and contentJson context. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/StartInvocationInput.yaml' + example: + triggerId: "idn:access-requested" + input: {"identityId": "201327fda1c44704ac01181e963d463c"} + contentJson: {"workflowId": 1234} + + responses: + '200': + description: >- + Trigger invocations that have been started for subscription(s) to specified trigger. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/Invocation.yaml' + + '204': + $ref: '../../v3/responses/204.yaml' + description: Trigger invocation is skipped, because tenant has not subscribed to the specified trigger. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/trigger-invocations-status.yaml b/static/idn-api/beta/paths/trigger-invocations-status.yaml new file mode 100644 index 000000000..f27d4cb06 --- /dev/null +++ b/static/idn-api/beta/paths/trigger-invocations-status.yaml @@ -0,0 +1,70 @@ +get: + operationId: listInvocationStatus + tags: + - Triggers + summary: List Latest Invocation Statuses + description: >- + Gets a list of latest invocation statuses. + + Statuses of successful invocations are available for up to 24 hours. Statuses of failed invocations are available for up to 48 hours. + + This endpoint may only fetch up to 2000 invocations, and should not be treated as a representation of the full history of invocations. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + required: false + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **triggerId**: *eq* + **subscriptionId**: *eq* + example: 'triggerId eq "idn:access-request-dynamic-approver"' + - in: query + name: sorters + required: false + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: + + + **triggerId** + **subscriptionName** + **created** + **completed** + example: 'created' + responses: + '200': + description: List of latest invocation statuses. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/InvocationStatus.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - oauth2: + - 'idn:trigger-service-invocation-status:read' diff --git a/static/idn-api/beta/paths/trigger-invocations-test.yaml b/static/idn-api/beta/paths/trigger-invocations-test.yaml new file mode 100644 index 000000000..8205cce81 --- /dev/null +++ b/static/idn-api/beta/paths/trigger-invocations-test.yaml @@ -0,0 +1,57 @@ +post: + operationId: startTestInvocation + tags: + - Triggers + summary: Start a Test Invocation + description: Initiate a test event for all subscribers of the specified event trigger. If there are no subscribers to the specified trigger in the tenant, then no test event will be sent. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/TestInvocation.yaml' + examples: + Test Trigger with Mock Input: + value: + triggerId: "idn:access-requested" + input: { + "identityId": "201327fda1c44704ac01181e963d463c" + } + contentJson: { + "workflowId": 1234 + } + Send Test to only One Subscriber: + value: + triggerId: "idn:access-requested" + contentJson: { + "workflowId": 1234 + } + subscriptionIds: + - 0f11f2a4-7c94-4bf3-a2bd-742580fe3bde + + responses: + '200': + description: >- + Test trigger invocations that have been started for specified subscription(s). + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/Invocation.yaml' + '204': + $ref: '../../v3/responses/204.yaml' + description: Trigger invocation is skipped, because tenant has not subscribed to the specified trigger. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - oauth2: + - 'idn:trigger-service-invocation-test:create' diff --git a/static/idn-api/beta/paths/trigger-invocations.yaml b/static/idn-api/beta/paths/trigger-invocations.yaml new file mode 100644 index 000000000..d9dbe325b --- /dev/null +++ b/static/idn-api/beta/paths/trigger-invocations.yaml @@ -0,0 +1,62 @@ +get: + operationId: listTriggerInvocations + tags: + - Triggers + summary: List Trigger Invocations + description: Get a list of trigger invocations that are currently in progress. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + required: false + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq* + + + **triggerId**: *eq* + example: 'triggerId eq "idn:access-request-dynamic-approver"' + - in: query + name: sorters + required: false + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: + + + **triggerId** + example: 'triggerId' + responses: + '200': + description: >- + List of trigger invocations + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/ActiveInvocation.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/trigger-subscription.yaml b/static/idn-api/beta/paths/trigger-subscription.yaml new file mode 100644 index 000000000..698cacb0f --- /dev/null +++ b/static/idn-api/beta/paths/trigger-subscription.yaml @@ -0,0 +1,176 @@ +put: + operationId: updateSubscription + tags: + - Triggers + summary: Update a Subscription + description: >- + This API updates a trigger subscription in IdentityNow, using a full object representation. In other words, the existing + Subscription is completely replaced. The following fields are immutable: + + + * id + + * triggerId + + + Attempts to modify these fields result in 400. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: Subscription ID + example: 0f11f2a4-7c94-4bf3-a2bd-742580fe3bde + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/SubscriptionPutRequest.yaml' + examples: + HTTP Subscription: + value: + name: Access request subscription + description: Access requested to site xyz + type: HTTP + httpConfig: + url: https://www.example.com + httpDispatchMode: SYNC + httpAuthenticationType: BASIC_AUTH + basicAuthConfig: + userName: user@example.com + password: eRtg4%6yuI! + enabled: true + filter: $[?($.identityId == "201327fda1c44704ac01181e963d463c")] + HTTP Async Subscription: + value: + name: Access request subscription + description: Access requested to site xyz + type: HTTP + responseDeadline: "PT1H" + httpConfig: + url: https://www.example.com + httpDispatchMode: ASYNC + httpAuthenticationType: BASIC_AUTH + basicAuthConfig: + userName: user@example.com + password: eRtg4%6yuI! + enabled: true + filter: $[?($.identityId == "201327fda1c44704ac01181e963d463c")] + EventBridge Subscription: + value: + name: Access request subscription + description: Access requested to site xyz + type: EVENTBRIDGE + eventBridgeConfig: + awsAccount: '123456789012' + awsRegion: us-west-1 + enabled: true + filter: $[?($.identityId == "201327fda1c44704ac01181e963d463c")] + responses: + '200': + description: Updated subscription. + content: + application/json: + schema: + $ref: '../schemas/Subscription.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - oauth2: + - 'idn:trigger-service-subscriptions:update' + +patch: + operationId: patchSubscription + tags: + - Triggers + summary: Patch a Subscription + description: >- + This API updates a trigger subscription in IdentityNow, using a set of instructions to modify a subscription + partially. The following fields are patchable: + + + **name**, **description**, **enabled**, **type**, **filter**, + **responseDeadline**, **httpConfig**, **eventBridgeConfig**, **workflowConfig** + + parameters: + - in: path + name: id + schema: + type: string + required: true + description: ID of the Subscription to patch + example: 0f11f2a4-7c94-4bf3-a2bd-742580fe3bde + requestBody: + required: true + content: + application/json-patch+json: + schema: + $ref: '../schemas/SubscriptionPatchRequest.yaml' + responses: + '200': + description: Updated subscription. + content: + application/json: + schema: + $ref: '../schemas/Subscription.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - oauth2: + - 'idn:trigger-service-subscriptions:update' + +delete: + operationId: deleteSubscription + tags: + - Triggers + summary: Delete a Subscription + description: Deletes an existing subscription to a trigger. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: Subscription ID + example: 0f11f2a4-7c94-4bf3-a2bd-742580fe3bde + responses: + '204': + $ref: '../../v3/responses/204.yaml' + description: Subscription is deleted successfully. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - oauth2: + - 'idn:trigger-service-subscriptions:delete' diff --git a/static/idn-api/beta/paths/trigger-subscriptions-internal.yaml b/static/idn-api/beta/paths/trigger-subscriptions-internal.yaml new file mode 100644 index 000000000..f1ad5ec84 --- /dev/null +++ b/static/idn-api/beta/paths/trigger-subscriptions-internal.yaml @@ -0,0 +1,35 @@ +post: + operationId: createSubscription + tags: + - Triggers + summary: Creates Subscription (Internal) + description: >- + This creates a subscription for a trigger which defines the way the trigger is invoked. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/SubscriptionInternal.yaml' + responses: + '201': + description: >- + Created subscription object. The trigger can then be invoked by the method defined in the subscription. + content: + application/json: + schema: + $ref: '../schemas/SubscriptionInternal.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + + security: + - oauth2: + - 'idn:trigger-service-subscriptions:create' diff --git a/static/idn-api/beta/paths/trigger-subscriptions-validate-filter.yaml b/static/idn-api/beta/paths/trigger-subscriptions-validate-filter.yaml new file mode 100644 index 000000000..6dfb5a53f --- /dev/null +++ b/static/idn-api/beta/paths/trigger-subscriptions-validate-filter.yaml @@ -0,0 +1,47 @@ +post: + operationId: validateFilter + tags: + - Triggers + summary: Validate a Subscription Filter + description: >- + Validates a JSONPath filter expression against a provided mock input. + + Request requires a security scope of: + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/ValidateFilterInputDto.yaml' + required: + - input + - filter + example: + input: { + "identityId": "201327fda1c44704ac01181e963d463c" + } + filter: '$[?($.identityId == "201327fda1c44704ac01181e963d463c")]' + + responses: + '200': + description: >- + Boolean whether specified filter expression is valid against the input. + content: + application/json: + schema: + $ref: '../schemas/ValidateFilterOutputDto.yaml' + example: + isValid: true + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - oauth2: + - 'idn:trigger-service-subscriptions-validate-filter:create' diff --git a/static/idn-api/beta/paths/trigger-subscriptions.yaml b/static/idn-api/beta/paths/trigger-subscriptions.yaml new file mode 100644 index 000000000..763ae1f15 --- /dev/null +++ b/static/idn-api/beta/paths/trigger-subscriptions.yaml @@ -0,0 +1,198 @@ +post: + operationId: createSubscription + tags: + - Triggers + summary: Create a Subscription + description: >- + This API creates a new subscription to a trigger and defines trigger invocation details. The type of subscription determines which config object is required: + + * HTTP subscriptions require httpConfig + + * EventBridge subscriptions require eventBridgeConfig + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/SubscriptionPostRequest.yaml' + examples: + HTTP Subscription: + value: + name: Access request subscription + description: Access requested to site xyz + triggerId: idn:access-requested + type: HTTP + httpConfig: + url: https://www.example.com + httpDispatchMode: SYNC + httpAuthenticationType: BASIC_AUTH + basicAuthConfig: + userName: user@example.com + password: eRtg4%6yuI! + enabled: true + filter: $[?($.identityId == "201327fda1c44704ac01181e963d463c")] + HTTP Async Subscription: + value: + name: Access request subscription + description: Access requested to site xyz + triggerId: idn:access-requested + type: HTTP + responseDeadline: "PT1H" + httpConfig: + url: https://www.example.com + httpDispatchMode: ASYNC + httpAuthenticationType: BASIC_AUTH + basicAuthConfig: + userName: user@example.com + password: eRtg4%6yuI! + enabled: true + filter: $[?($.identityId == "201327fda1c44704ac01181e963d463c")] + EventBridge Subscription: + value: + name: Access request subscription + description: Access requested to site xyz + triggerId: idn:access-requested + type: EVENTBRIDGE + eventBridgeConfig: + awsAccount: '123456789012' + awsRegion: us-west-1 + enabled: true + filter: $[?($.identityId == "201327fda1c44704ac01181e963d463c")] + responses: + '201': + description: >- + New subscription to a trigger. The trigger can now be invoked by the method defined in the subscription. + content: + application/json: + schema: + $ref: '../schemas/Subscription.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - oauth2: + - 'idn:trigger-service-subscriptions:create' + +get: + operationId: listSubscriptions + tags: + - Triggers + summary: List Subscriptions + description: Gets a list of all trigger subscriptions. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + required: false + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq* + + + **triggerId**: *eq* + + + **type**: *eq* + example: id eq "12cff757-c0c0-413b-8ad7-2a47956d1e89" + - in: query + name: sorters + required: false + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: + + + **triggerId** + **triggerName** + example: triggerName + responses: + '200': + description: List of subscriptions. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/Subscription.yaml' + examples: + HTTP Subscription: + value: + - id: 0f11f2a4-7c94-4bf3-a2bd-742580fe3bde + name: Access request subscription + description: Access requested to site xyz + triggerId: idn:access-requested + triggerName: Access Requested + type: HTTP + httpConfig: + url: https://www.example.com + httpDispatchMode: SYNC + httpAuthenticationType: BASIC_AUTH + basicAuthConfig: + userName: user@example.com + password: null + enabled: true + filter: $[?($.identityId == "201327fda1c44704ac01181e963d463c")] + HTTP Async Subscription: + value: + name: Access request subscription + description: Access requested to site xyz + triggerId: idn:access-requested + triggerName: Access Requested + type: HTTP + responseDeadline: "PT1H" + httpConfig: + url: https://www.example.com + httpDispatchMode: ASYNC + httpAuthenticationType: BASIC_AUTH + basicAuthConfig: + userName: user@example.com + password: null + enabled: true + filter: $[?($.identityId == "201327fda1c44704ac01181e963d463c")] + EventBridge Subscription: + value: + - id: 0f11f2a4-7c94-4bf3-a2bd-742580fe3bde + name: Access request subscription + description: Access requested to site xyz + triggerId: idn:access-requested + triggerName: Access Requested + type: EVENTBRIDGE + eventBridgeConfig: + awsAccount: '123456789012' + awsRegion: us-west-1 + enabled: true + filter: $[?($.identityId == "201327fda1c44704ac01181e963d463c")] + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - oauth2: + - 'idn:trigger-service-subscriptions:read' diff --git a/static/idn-api/beta/paths/triggers.yaml b/static/idn-api/beta/paths/triggers.yaml new file mode 100644 index 000000000..f5c29a67c --- /dev/null +++ b/static/idn-api/beta/paths/triggers.yaml @@ -0,0 +1,62 @@ +get: + operationId: listTriggers + tags: + - Triggers + summary: List Triggers + description: Gets a list of triggers that are available in the tenant. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + required: false + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq* + example: id eq "idn:access-request-post-approval" + - in: query + name: sorters + required: false + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: + + + **id** + **name** + example: name + responses: + '200': + description: List of triggers. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/Trigger.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - oauth2: + - 'idn:trigger-service-subscriptions:read' diff --git a/static/idn-api/beta/paths/verified-from-address.yaml b/static/idn-api/beta/paths/verified-from-address.yaml new file mode 100644 index 000000000..bef349429 --- /dev/null +++ b/static/idn-api/beta/paths/verified-from-address.yaml @@ -0,0 +1,28 @@ +delete: + operationId: deleteVerifiedFromAddress + tags: + - Notifications + summary: Delete Verified From Address + description: >- + Delete a verified sender email address + parameters: + - in: path + name: id + schema: + type: string + required: true + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/verified-from-addresses.yaml b/static/idn-api/beta/paths/verified-from-addresses.yaml new file mode 100644 index 000000000..e692f9ce8 --- /dev/null +++ b/static/idn-api/beta/paths/verified-from-addresses.yaml @@ -0,0 +1,87 @@ +get: + operationId: listFromAddresses + tags: + - Notifications + summary: List From Addresses + description: >- + Retrieve a list of sender email addresses and their verification statuses + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **email**: *eq* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: + + + **email** + responses: + '200': + description: List of Email Status + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/EmailStatusDto.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + +post: + operationId: createVerifiedFromAddress + tags: + - Notifications + summary: Create Verified From Address + description: >- + Create a new sender email address and initiate verification process. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/EmailStatusDto.yaml' + example: + email: "sender@example.com" + + responses: + '201': + description: New Verified Email Status + content: + application/json: + schema: + $ref: '../schemas/EmailStatusDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/work-item.yaml b/static/idn-api/beta/paths/work-item.yaml new file mode 100644 index 000000000..0a95a9e42 --- /dev/null +++ b/static/idn-api/beta/paths/work-item.yaml @@ -0,0 +1,63 @@ +get: + operationId: getWorkItems + tags: + - Work Items + summary: Get a Work Item + description: >- + This gets the details of a Work Item belonging to either the specified user(admin required), or the current user. + parameters: + - in: query + name: ownerId + schema: + type: string + description: ID of the work item owner. + required: false + - in: path + name: id + schema: + type: string + required: true + description: ID of the work item. + responses: + '200': + description: The work item with the given ID. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/WorkItems.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' +post: + operationId: completeWorkItem + tags: + - Work Items + summary: Complete a Work Item + description: >- + This API completes a work item. Either an admin, or the owning/current user must make this request. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the work item + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: A WorkItems object + content: + application/json: + schema: + $ref: '../schemas/WorkItems.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' diff --git a/static/idn-api/beta/paths/work-items-account-selection.yaml b/static/idn-api/beta/paths/work-items-account-selection.yaml new file mode 100644 index 000000000..9fa2e46b4 --- /dev/null +++ b/static/idn-api/beta/paths/work-items-account-selection.yaml @@ -0,0 +1,38 @@ +post: + operationId: submitAccountSelection + tags: + - Work Items + summary: Submit Account Selections + description: >- + This API submits account selections. Either an admin, or the owning/current user must make this request. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the work item + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + content: + application/json: + schema: + type: object + additionalProperties: true + example: { "fieldName": "fieldValue"} + description: Account Selection Data map, keyed on fieldName + + responses: + '200': + description: A work items details object. + content: + application/json: + schema: + $ref: '../schemas/WorkItems.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' diff --git a/static/idn-api/beta/paths/work-items-approve-approval-item.yaml b/static/idn-api/beta/paths/work-items-approve-approval-item.yaml new file mode 100644 index 000000000..f4a63471f --- /dev/null +++ b/static/idn-api/beta/paths/work-items-approve-approval-item.yaml @@ -0,0 +1,35 @@ +post: + operationId: approveApprovalItem + tags: + - Work Items + summary: Approve an Approval Item + description: >- + This API approves an Approval Item. Either an admin, or the owning/current user must make this request. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the work item + example: ef38f94347e94562b5bb8424a56397d8 + - in: path + name: approvalItemId + schema: + type: string + required: true + description: The ID of the approval item. + example: 1211bcaa32112bcef6122adb21cef1ac + responses: + '200': + description: A work items details object. + content: + application/json: + schema: + $ref: '../schemas/WorkItems.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' diff --git a/static/idn-api/beta/paths/work-items-bulk-approve-approval-item.yaml b/static/idn-api/beta/paths/work-items-bulk-approve-approval-item.yaml new file mode 100644 index 000000000..77e22db88 --- /dev/null +++ b/static/idn-api/beta/paths/work-items-bulk-approve-approval-item.yaml @@ -0,0 +1,28 @@ +post: + operationId: bulkApproveApprovalItem + tags: + - Work Items + summary: Bulk approve Approval Items + description: >- + This API bulk approves Approval Items. Either an admin, or the owning/current user must make this request. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the work item + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: A work items details object. + content: + application/json: + schema: + $ref: '../schemas/WorkItems.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' diff --git a/static/idn-api/beta/paths/work-items-bulk-reject-approval-item.yaml b/static/idn-api/beta/paths/work-items-bulk-reject-approval-item.yaml new file mode 100644 index 000000000..d8e5107e1 --- /dev/null +++ b/static/idn-api/beta/paths/work-items-bulk-reject-approval-item.yaml @@ -0,0 +1,28 @@ +post: + operationId: bulkRejectApprovalItem + tags: + - Work Items + summary: Bulk reject Approval Items + description: >- + This API bulk rejects Approval Items. Either an admin, or the owning/current user must make this request. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the work item + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: A work items details object. + content: + application/json: + schema: + $ref: '../schemas/WorkItems.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' diff --git a/static/idn-api/beta/paths/work-items-complete.yaml b/static/idn-api/beta/paths/work-items-complete.yaml new file mode 100644 index 000000000..c0c0c090b --- /dev/null +++ b/static/idn-api/beta/paths/work-items-complete.yaml @@ -0,0 +1,28 @@ +post: + operationId: completeWorkItem + tags: + - Work Items + summary: Complete a Work Item + description: >- + This API completes a work item. Either an admin, or the owning/current user must make this request. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the work item + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: An identity campaign certification object + content: + application/json: + schema: + $ref: '../schemas/WorkItems.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' diff --git a/static/idn-api/beta/paths/work-items-completed-count.yaml b/static/idn-api/beta/paths/work-items-completed-count.yaml new file mode 100644 index 000000000..76fa67f58 --- /dev/null +++ b/static/idn-api/beta/paths/work-items-completed-count.yaml @@ -0,0 +1,31 @@ +get: + operationId: countCompletedWorkItems + tags: + - Work Items + summary: Count Completed Work Items + description: >- + This gets a count of completed work items belonging to either the specified user(admin required), or the current user. + parameters: + - in: query + name: ownerId + schema: + type: string + description: ID of the work item owner. + required: false + responses: + '200': + description: List of work items + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/WorkItemsCount.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + + diff --git a/static/idn-api/beta/paths/work-items-completed.yaml b/static/idn-api/beta/paths/work-items-completed.yaml new file mode 100644 index 000000000..5a674a1a9 --- /dev/null +++ b/static/idn-api/beta/paths/work-items-completed.yaml @@ -0,0 +1,35 @@ +get: + operationId: completedWorkItems + tags: + - Work Items + summary: Completed Work Items + description: >- + This gets a collection of completed work items belonging to either the specified user(admin required), or the current user. + parameters: + - in: query + name: ownerId + schema: + type: string + description: >- + The id of the owner of the work item list being requested. Either an admin, or the owning/current user must make this request. + required: false + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + responses: + '200': + description: List of completed work items. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/WorkItems.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + + diff --git a/static/idn-api/beta/paths/work-items-count.yaml b/static/idn-api/beta/paths/work-items-count.yaml new file mode 100644 index 000000000..82c59bdb5 --- /dev/null +++ b/static/idn-api/beta/paths/work-items-count.yaml @@ -0,0 +1,31 @@ +get: + operationId: countWorkItems + tags: + - Work Items + summary: Count Work Items + description: >- + This gets a count of work items belonging to either the specified user(admin required), or the current user. + parameters: + - in: query + name: ownerId + schema: + type: string + description: ID of the work item owner. + required: false + responses: + '200': + description: List of work items + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/WorkItemsCount.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + + diff --git a/static/idn-api/beta/paths/work-items-reject-approval-item.yaml b/static/idn-api/beta/paths/work-items-reject-approval-item.yaml new file mode 100644 index 000000000..11b58537a --- /dev/null +++ b/static/idn-api/beta/paths/work-items-reject-approval-item.yaml @@ -0,0 +1,35 @@ +post: + operationId: rejectApprovalItem + tags: + - Work Items + summary: Reject an Approval Item + description: >- + This API rejects an Approval Item. Either an admin, or the owning/current user must make this request. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the work item + example: ef38f94347e94562b5bb8424a56397d8 + - in: path + name: approvalItemId + schema: + type: string + required: true + description: The ID of the approval item. + example: 1211bcaa32112bcef6122adb21cef1ac + responses: + '200': + description: A work items details object. + content: + application/json: + schema: + $ref: '../schemas/WorkItems.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' diff --git a/static/idn-api/beta/paths/work-items-summary.yaml b/static/idn-api/beta/paths/work-items-summary.yaml new file mode 100644 index 000000000..32872d5db --- /dev/null +++ b/static/idn-api/beta/paths/work-items-summary.yaml @@ -0,0 +1,31 @@ +get: + operationId: summaryWorkItems + tags: + - Work Items + summary: Work Items Summary + description: >- + This gets a summary of work items belonging to either the specified user(admin required), or the current user. + parameters: + - in: query + name: ownerId + schema: + type: string + description: ID of the work item owner. + required: false + responses: + '200': + description: List of work items + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/WorkItemsSummary.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + + diff --git a/static/idn-api/beta/paths/work-items.yaml b/static/idn-api/beta/paths/work-items.yaml new file mode 100644 index 000000000..cd9a93fc5 --- /dev/null +++ b/static/idn-api/beta/paths/work-items.yaml @@ -0,0 +1,34 @@ +get: + operationId: listWorkItems + tags: + - Work Items + summary: List Work Items + description: >- + This gets a collection of work items belonging to either the specified user(admin required), or the current user. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: ownerId + schema: + type: string + description: ID of the work item owner. + required: false + responses: + '200': + description: List of work items + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/WorkItems.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + + diff --git a/static/idn-api/beta/paths/workflow-execution-cancel.yaml b/static/idn-api/beta/paths/workflow-execution-cancel.yaml new file mode 100644 index 000000000..914d47928 --- /dev/null +++ b/static/idn-api/beta/paths/workflow-execution-cancel.yaml @@ -0,0 +1,35 @@ +post: + operationId: cancelWorkflowExecution + tags: + - Workflows + summary: Cancel Workflow Execution by ID + description: >- + Use this API to cancel a running workflow execution. + security: + - bearerAuth: + - sp:workflow:execute + parameters: + - name: id + in: path + description: The workflow execution ID + required: true + style: simple + explode: false + schema: + type: string + example: c17bea3a-574d-453c-9e04-4365fbf5af0b + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/workflow-execution-history.yaml b/static/idn-api/beta/paths/workflow-execution-history.yaml new file mode 100644 index 000000000..910f8531a --- /dev/null +++ b/static/idn-api/beta/paths/workflow-execution-history.yaml @@ -0,0 +1,42 @@ +get: + operationId: getWorkflowExecutionHistory + tags: + - Workflows + summary: Get Workflow Execution History + description: >- + Get a detailed history of a single workflow execution. Workflow executions are available for up to 2 days before being archived. If you attempt to access a workflow execution that has been archived, you will receive a 404 Not Found. + security: + - bearerAuth: + - sp:workflow:read + parameters: + - name: id + in: path + description: Id of the workflow execution + required: true + style: simple + explode: false + schema: + type: string + example: c17bea3a-574d-453c-9e04-4365fbf5af0b + responses: + '200': + description: >- + List of workflow execution events for the given workflow execution + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/WorkflowExecutionEvent.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/workflow-execution.yaml b/static/idn-api/beta/paths/workflow-execution.yaml new file mode 100644 index 000000000..dce33e248 --- /dev/null +++ b/static/idn-api/beta/paths/workflow-execution.yaml @@ -0,0 +1,41 @@ +get: + operationId: getWorkflowExecution + tags: + - Workflows + summary: Get a Workflow Execution + description: >- + Get a single workflow execution. Workflow executions are available for up to 2 days before being archived. If you attempt to access a workflow execution that has been archived, you will receive a 404 Not Found. + security: + - bearerAuth: + - sp:workflow:read + parameters: + - name: id + in: path + description: Id of the workflow execution + required: true + style: simple + explode: false + schema: + type: string + example: c17bea3a-574d-453c-9e04-4365fbf5af0b + responses: + '200': + description: >- + The workflow execution + content: + application/json: + schema: + items: + $ref: '../schemas/WorkflowExecution.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/workflow-executions.yaml b/static/idn-api/beta/paths/workflow-executions.yaml new file mode 100644 index 000000000..b91008933 --- /dev/null +++ b/static/idn-api/beta/paths/workflow-executions.yaml @@ -0,0 +1,40 @@ +get: + operationId: listWorkflowExecutions + tags: + - Workflows + summary: List Workflow Executions + description: >- + This lists the executions for a given workflow + security: + - bearerAuth: + - sp:workflow:read + parameters: + - name: id + in: path + description: Id of the workflow + required: true + style: simple + explode: false + schema: + type: string + example: c17bea3a-574d-453c-9e04-4365fbf5af0b + responses: + '200': + description: >- + List of workflow executions for the given workflow + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/WorkflowExecution.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/workflow-external-execute-test.yaml b/static/idn-api/beta/paths/workflow-external-execute-test.yaml new file mode 100644 index 000000000..8dcc85094 --- /dev/null +++ b/static/idn-api/beta/paths/workflow-external-execute-test.yaml @@ -0,0 +1,57 @@ +post: + operationId: testExternalExecuteWorkflow + tags: + - Workflows + summary: Test Workflow via External Trigger + description: >- + Validate a workflow with an "External Trigger" can receive input. The response includes the input that the workflow received, which can be used to validate that the input is intact when it reaches the workflow. + security: + - bearerAuth: + - sp:workflow:external-execute + parameters: + - name: id + in: path + description: Id of the workflow + required: true + style: simple + explode: false + schema: + type: string + example: c17bea3a-574d-453c-9e04-4365fbf5af0b + requestBody: + required: false + content: + application/json: + schema: + type: object + properties: + input: + type: object + description: The test input for the workflow + example: { + "test": "hello world" + } + responses: + '200': + description: Responds with the test input + content: + application/json: + schema: + type: object + properties: + payload: + type: object + description: The input that was received + example: { + "test": "hello world" + } + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/workflow-external-execute.yaml b/static/idn-api/beta/paths/workflow-external-execute.yaml new file mode 100644 index 000000000..48f0df8f1 --- /dev/null +++ b/static/idn-api/beta/paths/workflow-external-execute.yaml @@ -0,0 +1,61 @@ +post: + operationId: postExternalExecuteWorkflow + tags: + - Workflows + summary: Execute Workflow via External Trigger + description: >- + This endpoint allows a service outside of IdentityNow to initiate a workflow that uses the "External Trigger" step. The external service will invoke this endpoint with the input data it wants to send to the workflow in the body. + security: + - bearerAuth: + - sp:workflow:external-execute + parameters: + - name: id + in: path + description: Id of the workflow + required: true + style: simple + explode: false + schema: + type: string + example: c17bea3a-574d-453c-9e04-4365fbf5af0b + requestBody: + required: false + content: + application/json: + schema: + type: object + properties: + input: + type: object + description: The input for the workflow + example: { + "customAttribute1": "value1", + "customAttribute2": "value2" + } + responses: + '200': + description: The Workflow object + content: + application/json: + schema: + type: object + properties: + workflowExecutionId: + type: string + description: The workflow execution id + example: 0e11cefa-96e7-4b67-90d0-065bc1da5753 + message: + type: string + description: An error message if any errors occurred + example: Workflow was not executed externally. Check enabled flag on workflow definition + + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/workflow-external-oauth-client.yaml b/static/idn-api/beta/paths/workflow-external-oauth-client.yaml new file mode 100644 index 000000000..4c2f8fee1 --- /dev/null +++ b/static/idn-api/beta/paths/workflow-external-oauth-client.yaml @@ -0,0 +1,37 @@ +post: + operationId: postWorkflowExternalTrigger + tags: + - Workflows + summary: Generate External Trigger OAuth Client + description: >- + Create OAuth client ID, client secret, and callback URL for use in an external trigger. External triggers will need this information to generate an access token to authenticate to the callback URL and submit a trigger payload that will initiate the workflow. + security: + - bearerAuth: + - sp:workflow:update + parameters: + - name: id + in: path + description: Id of the workflow + required: true + style: simple + explode: false + schema: + type: string + example: c17bea3a-574d-453c-9e04-4365fbf5af0b + responses: + '200': + description: The OAuth Client object + content: + application/json: + schema: + $ref: '../schemas/WorkflowOAuthClient.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/workflow-library-actions.yaml b/static/idn-api/beta/paths/workflow-library-actions.yaml new file mode 100644 index 000000000..5b363a2cf --- /dev/null +++ b/static/idn-api/beta/paths/workflow-library-actions.yaml @@ -0,0 +1,50 @@ +get: + operationId: listWorkflowLibraryActions + tags: + - Workflows + summary: List Workflow Library Actions + description: >- + This lists the workflow actions available to you. + externalDocs: + description: Additional documentation for each action + url: https://documentation.sailpoint.com/saas/help/workflows/workflow-steps.html#actions + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - in: query + name: filters + required: false + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#filtering-results) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq* + example: id eq "sp:create-campaign" + security: + - bearerAuth: + - sp:workflow:read + responses: + '200': + description: >- + List of workflow actions + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/WorkflowLibraryAction.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/workflow-library-operators.yaml b/static/idn-api/beta/paths/workflow-library-operators.yaml new file mode 100644 index 000000000..f7cbf17ac --- /dev/null +++ b/static/idn-api/beta/paths/workflow-library-operators.yaml @@ -0,0 +1,30 @@ +get: + operationId: listWorkflowLibraryOperators + tags: + - Workflows + summary: List Workflow Library Operators + description: >- + This lists the workflow operators available to you + security: + - bearerAuth: + - sp:workflow:read + responses: + '200': + description: >- + List of workflow operators + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/WorkflowLibraryOperator.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/workflow-library-triggers.yaml b/static/idn-api/beta/paths/workflow-library-triggers.yaml new file mode 100644 index 000000000..5b99e3462 --- /dev/null +++ b/static/idn-api/beta/paths/workflow-library-triggers.yaml @@ -0,0 +1,50 @@ +get: + operationId: listWorkflowLibraryTriggers + tags: + - Workflows + summary: List Workflow Library Triggers + description: >- + This lists the workflow triggers available to you + externalDocs: + description: Additional documentation for each trigger + url: https://documentation.sailpoint.com/saas/help/workflows/workflow-steps.html#triggers + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - in: query + name: filters + required: false + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html#filtering-results) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq* + example: id eq "idn:identity-attributes-changed" + security: + - bearerAuth: + - sp:workflow:read + responses: + '200': + description: >- + List of workflow triggers + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/WorkflowLibraryTrigger.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/workflow-library.yaml b/static/idn-api/beta/paths/workflow-library.yaml new file mode 100644 index 000000000..7dd1b8954 --- /dev/null +++ b/static/idn-api/beta/paths/workflow-library.yaml @@ -0,0 +1,39 @@ +get: + operationId: listCompleteWorkflowLibrary + tags: + - Workflows + summary: List Complete Workflow Library + description: >- + This lists all triggers, actions, and operators in the library + externalDocs: + description: Additional documentation for workflows + url: https://documentation.sailpoint.com/saas/help/workflows/workflow-steps.html + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + security: + - bearerAuth: + - sp:workflow:read + responses: + '200': + description: >- + List of workflow steps + content: + application/json: + schema: + type: array + items: + anyOf: + - $ref: '../schemas/WorkflowLibraryAction.yaml' + - $ref: '../schemas/WorkflowLibraryTrigger.yaml' + - $ref: '../schemas/WorkflowLibraryOperator.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/workflow-test.yaml b/static/idn-api/beta/paths/workflow-test.yaml new file mode 100644 index 000000000..2d1e461ca --- /dev/null +++ b/static/idn-api/beta/paths/workflow-test.yaml @@ -0,0 +1,97 @@ +post: + operationId: testWorkflow + tags: + - Workflows + summary: Test Workflow By Id + description: >- + Test a workflow with the provided input data. The input data should resemble the input that the trigger will send the workflow. See the [event trigger documentation](https://developer.sailpoint.com/triggers/available_event_triggers.html) for an example input for the trigger that initiates this workflow. + + This endpoint will return an execution ID, which can be used to lookup more information about the execution using the `Get a Workflow Execution` endpoint. + + **This will cause a live run of the workflow, which could result in unintended modifications to your IDN tenant.** + security: + - bearerAuth: + - sp:workflow:execute + parameters: + - name: id + in: path + description: Id of the workflow + required: true + style: simple + explode: false + schema: + type: string + example: c17bea3a-574d-453c-9e04-4365fbf5af0b + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - input + properties: + input: + type: object + description: The test input for the workflow. + examples: + Identity Attributes Changed: + description: Identity Attributes Changed Trigger Input + value: + { + "input": { + "identity": { + "id": "ee769173319b41d19ccec6cea52f237b", + "name": "john.doe", + "type": "IDENTITY" + }, + "changes": [ + { + "attribute": "department", + "oldValue": "sales", + "newValue": "marketing" + }, + { + "attribute": "manager", + "oldValue": { + "id": "ee769173319b41d19ccec6c235423237b", + "name": "nice.guy", + "type": "IDENTITY" + }, + "newValue": { + "id": "ee769173319b41d19ccec6c235423236c", + "name": "mean.guy", + "type": "IDENTITY" + } + }, + { + "attribute": "email", + "oldValue": "john.doe@hotmail.com", + "newValue": "john.doe@gmail.com" + } + ] + } + } + + responses: + '200': + description: The Workflow object + content: + application/json: + schema: + type: object + properties: + workflowExecutionId: + type: string + description: The workflow execution id + example: "0e11cefa-96e7-4b67-90d0-065bc1da5753" + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/workflow.yaml b/static/idn-api/beta/paths/workflow.yaml new file mode 100644 index 000000000..7ed5b9774 --- /dev/null +++ b/static/idn-api/beta/paths/workflow.yaml @@ -0,0 +1,224 @@ +get: + operationId: getWorkflow + tags: + - Workflows + summary: Get Workflow By Id + description: >- + Get a single workflow by id. + security: + - bearerAuth: + - sp:workflow:read + parameters: + - name: id + in: path + description: Id of the workflow + required: true + style: simple + explode: false + schema: + type: string + example: c17bea3a-574d-453c-9e04-4365fbf5af0b + responses: + '200': + description: >- + The workflow object + content: + application/json: + schema: + $ref: '../schemas/Workflow.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +put: + operationId: updateWorkflow + tags: + - Workflows + summary: Update Workflow + description: >- + Perform a full update of a workflow. The updated workflow object is returned in the response. + security: + - bearerAuth: + - sp:workflow:update + parameters: + - name: id + in: path + description: Id of the Workflow + required: true + style: simple + explode: false + schema: + type: string + example: c17bea3a-574d-453c-9e04-4365fbf5af0b + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/WorkflowBody.yaml' + responses: + '200': + description: The Workflow object + content: + application/json: + schema: + $ref: '../schemas/Workflow.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +patch: + operationId: patchWorkflow + tags: + - Workflows + summary: Patch Workflow + description: >- + Partially update an existing Workflow using [JSON Patch](https://tools.ietf.org/html/rfc6902) syntax. + security: + - bearerAuth: + - sp:workflow:update + parameters: + - name: id + in: path + description: Id of the Workflow + required: true + style: simple + explode: false + schema: + type: string + example: c17bea3a-574d-453c-9e04-4365fbf5af0b + requestBody: + required: true + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + examples: + Update all patchable fields: + description: Demonstrate how to update each patchable field in one PATCH request. + value: + [ + { + "op": "replace", + "path": "/name", + "value": "Send Email" + }, + { + "op": "replace", + "path": "/owner", + "value": { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1313", + "name": "William Wilson" + + } + }, + { + "op": "replace", + "path": "/description", + "value": "Send an email to the identity who's attributes changed." + }, + { + "op": "replace", + "path": "/enabled", + "value": false + }, + { + "op": "replace", + "path": "/definition", + "value": { + "start": "Send Email Test", + "steps": { + "Send Email": { + "actionId": "sp:send-email", + "attributes": { + "body": "This is a test", + "from": "sailpoint@sailpoint.com", + "recipientId.$": "$.identity.id", + "subject": "test" + }, + "nextStep": "success", + "selectResult": null, + "type": "action" + }, + "success": { + "type": "success" + } + } + } + }, + { + "op": "replace", + "path": "/trigger", + "value": { + "type": "EVENT", + "attributes": { + "id": "idn:identity-attributes-changed" + } + } + } + ] + responses: + '200': + description: The Workflow object + content: + application/json: + schema: + $ref: '../schemas/Workflow.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: deleteWorkflow + tags: + - Workflows + summary: Delete Workflow By Id + description: >- + Delete a workflow. **Enabled workflows cannot be deleted**. They must first be disabled. + security: + - bearerAuth: + - sp:workflow:delete + parameters: + - name: id + in: path + description: Id of the Workflow + required: true + style: simple + explode: false + schema: + type: string + example: c17bea3a-574d-453c-9e04-4365fbf5af0b + responses: + '204': + $ref: '../../v3/responses/204.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/beta/paths/workflows.yaml b/static/idn-api/beta/paths/workflows.yaml new file mode 100644 index 000000000..966150b9a --- /dev/null +++ b/static/idn-api/beta/paths/workflows.yaml @@ -0,0 +1,157 @@ +post: + operationId: createWorkflow + tags: + - Workflows + summary: Create Workflow + description: >- + Create a new workflow with the desired trigger and steps specified in the request body. + security: + - bearerAuth: + - sp:workflow:create + requestBody: + required: true + content: + application/json: + schema: + allOf: + - required: + - name + - owner + - $ref: '../schemas/WorkflowBody.yaml' + examples: + Event Trigger: + description: Workflow initiated by an event trigger + value: + name: Send Email + owner: + type: IDENTITY + id: 2c91808568c529c60168cca6f90c1313 + name: William Wilson + description: Send an email to the identity who's attributes changed. + definition: + start: Send Email Test + steps: + Send Email: + actionId: sp:send-email + attributes: + body: This is a test + from: sailpoint@sailpoint.com + recipientId.$: "$.identity.id" + subject: test + nextStep: success + selectResult: + type: action + success: + type: success + enabled: false + trigger: + type: EVENT + attributes: + id: idn:identity-attributes-changed + filter: "$.changes[?(@.attribute == 'manager')]" + Scheduled Trigger: + description: Workflow initiated by a scheduled trigger + value: + name: Send Email + owner: + type: IDENTITY + id: 2c91808568c529c60168cca6f90c1313 + name: William Wilson + description: Send an email to the identity who's attributes changed. + definition: + start: Send Email Test + steps: + Send Email: + actionId: sp:send-email + attributes: + body: This is a test + from: sailpoint@sailpoint.com + recipientId.$: "$.identity.id" + subject: test + nextStep: success + selectResult: + type: action + success: + type: success + enabled: false + trigger: + type: SCHEDULED + attributes: + cronString: 0 * */3 */5 * + # External Trigger: + # description: Workflow initiated by an external trigger + # value: + # name: Send Email + # owner: + # type: IDENTITY + # id: 2c91808568c529c60168cca6f90c1313 + # name: William Wilson + # description: Send an email to the identity who's attributes changed. + # definition: + # start: Send Email Test + # steps: + # Send Email: + # actionId: sp:send-email + # attributes: + # body: This is a test + # from: sailpoint@sailpoint.com + # recipientId.$: "$.identity.id" + # subject: test + # nextStep: success + # selectResult: + # type: action + # success: + # type: success + # enabled: false + # trigger: + # type: EXTERNAL + # attributes: + # name: search-and-notify + # description: Run a search and notify the results + responses: + '200': + description: The Workflow object + content: + application/json: + schema: + $ref: '../schemas/Workflow.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +get: + operationId: listWorkflows + tags: + - Workflows + summary: List Workflows + description: >- + List all workflows in the tenant. + security: + - bearerAuth: + - sp:workflow:read + responses: + '200': + description: >- + List of workflows + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/Workflow.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AWSCredentialsResponse.yaml b/static/idn-api/beta/schemas/AWSCredentialsResponse.yaml new file mode 100644 index 000000000..4bdf0593e --- /dev/null +++ b/static/idn-api/beta/schemas/AWSCredentialsResponse.yaml @@ -0,0 +1,48 @@ +description: AWS Credentials Response +type: object +properties: + org: + description: Org name + readOnly: true + type: string + example: example-megapod + s3ProxyEnabled: + description: Enabled s3 proxy for VA's + readOnly: true + type: boolean + example: true + cookbook: + description: VA cookbook + readOnly: true + type: string + example: va-cookbook-info + awsId: + description: VA cookbook + readOnly: true + type: string + example: 1234 + awsSessionToken: + description: Session token + readOnly: true + type: string + example: FwoGZXIvYXdzEC8aDDjLKabbNpuXhf3zdyKUBN + awsAccessKeyId: + description: Access Key Id + readOnly: true + type: string + example: ASIAV5E54XOG2ZY3FQM4 + awsSecretAccessKey: + description: Secret Access Key + readOnly: true + type: string + example: fvTiyWJQWMW49EqSIQHuFNTHMnoWpSuPHrYn2PtT + awsExpiration: + description: An expiration date + readOnly: true + type: string + example: 2021-11-20T01:48:54.000Z + awsBucketName: + description: Bucket Name + readOnly: true + type: string + example: va-images diff --git a/static/idn-api/beta/schemas/AccessConstraint.yaml b/static/idn-api/beta/schemas/AccessConstraint.yaml new file mode 100644 index 000000000..1ce336497 --- /dev/null +++ b/static/idn-api/beta/schemas/AccessConstraint.yaml @@ -0,0 +1,26 @@ +type : object +properties: + type: + type: string + enum: + - ENTITLEMENT + - ACCESS_PROFILE + - ROLE + ids: + description: Must be set only if operator is SELECTED. + type: array + items: + type: string + operator: + type: string + enum: + - ALL + - SELECTED +required: + - type + - operator +example: + type: ENTITLEMENT + ids: + - 2c90ad2a70ace7d50170acf22ca90010 + operator: SELECTED diff --git a/static/idn-api/beta/schemas/AccessCriteria.yaml b/static/idn-api/beta/schemas/AccessCriteria.yaml new file mode 100644 index 000000000..38807e908 --- /dev/null +++ b/static/idn-api/beta/schemas/AccessCriteria.yaml @@ -0,0 +1,26 @@ +type: object +properties: + name: + type: string + description: Business name for the access construct list + example: "money-in" + criteriaList: + type: array + description: List of criteria. There is a min of 1 and max of 50 items in the list. + items: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + # oneOf: + # - minItems: 1 + # - maxItems: 50 + example: [ + { + type: "ENTITLEMENT", + id: "2c9180866166b5b0016167c32ef31a66", + name: "Administrator" + }, + { + type: "ENTITLEMENT", + id: "2c9180866166b5b0016167c32ef31a67", + name: "Administrator" + } + ] \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AccessGranterAuthSupportLoginResponse.yaml b/static/idn-api/beta/schemas/AccessGranterAuthSupportLoginResponse.yaml new file mode 100644 index 000000000..bd7b1c395 --- /dev/null +++ b/static/idn-api/beta/schemas/AccessGranterAuthSupportLoginResponse.yaml @@ -0,0 +1,33 @@ +type: object +properties: + accessGranterTenant: + type: string + description: The tenant that is granting access and in need of support. + example: acme-solar + authUserName: + type: string + description: The username in the target tenant that the authTenant's support and services user will log in as. + example: slpt.services + role: + type: string + description: The user access role in the auth tenant capable of providing admin-level support + example: Support and Services Role + supportLoginUrl: + type: string + description: The url used to start the support login flow to granter tenant. + example: https://sailpoint.login.sailpoint.com/auth/support/login?tenant=acme-solar + expirationDate: + type: string + format: date-time + description: When the auth support login access expires. + example: "2019-08-23T18:52:59.162Z" + modified: + type: string + format: date-time + description: When the request was last modified. + example: "2019-08-23T18:52:59.162Z" + created: + type: string + format: date-time + description: When the request was created. + example: "2019-08-23T18:40:35.772Z" diff --git a/static/idn-api/beta/schemas/AccessItemAccessProfileResponse.yaml b/static/idn-api/beta/schemas/AccessItemAccessProfileResponse.yaml new file mode 100644 index 000000000..93ebacf23 --- /dev/null +++ b/static/idn-api/beta/schemas/AccessItemAccessProfileResponse.yaml @@ -0,0 +1,38 @@ +type: object +properties: + accessType: + type: string + example: accessProfile + description: the access item type. accessProfile in this case + id: + type: string + example: 2c918087763e69d901763e72e97f006f + description: the access item id + name: + type: string + example: sample + description: the access profile name + sourceName: + type: string + example: DataScienceDataset + description: the name of the source + sourceId: + type: string + example: 2793o32dwd + description: the id of the source + description: + type: string + example: AccessProfile - Workday/Citizenship access + description: the description for the access profile + displayName: + type: string + example: Dr. Arden Rogahn MD + description: the display name of the identity + entitlementCount: + type: string + example: 12 + description: the number of entitlements the access profile will create + appDisplayName: + type: string + example: AppName + description: the name of app \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AccessItemAccountResponse.yaml b/static/idn-api/beta/schemas/AccessItemAccountResponse.yaml new file mode 100644 index 000000000..20bc0914a --- /dev/null +++ b/static/idn-api/beta/schemas/AccessItemAccountResponse.yaml @@ -0,0 +1,31 @@ +type: object +properties: + accessType: + type: string + example: account + description: the access item type. account in this case + id: + type: string + example: 2c918087763e69d901763e72e97f006f + description: the access item id + nativeIdentity: + type: string + example: dr.arden.ogahn.d + description: the native identifier used to uniquely identify an acccount + sourceName: + type: string + example: DataScienceDataset + description: the name of the source + sourceId: + type: string + example: 2793o32dwd + description: the id of the source + entitlementCount: + type: string + example: 12 + description: the number of entitlements the account will create + displayName: + type: string + example: Dr. Arden Rogahn MD + description: the display name of the identity + \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AccessItemAppResponse.yaml b/static/idn-api/beta/schemas/AccessItemAppResponse.yaml new file mode 100644 index 000000000..10d93d90f --- /dev/null +++ b/static/idn-api/beta/schemas/AccessItemAppResponse.yaml @@ -0,0 +1,20 @@ +type: object +properties: + accessType: + type: string + example: app + description: the access item type. entitlement in this case + id: + type: string + example: 2c918087763e69d901763e72e97f006f + description: the access item id + displayName: + type: string + example: Display Name + description: the access profile display name + sourceName: + type: string + example: appName + description: the associated source name if it exists + + \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AccessItemAssociated.yaml b/static/idn-api/beta/schemas/AccessItemAssociated.yaml new file mode 100644 index 000000000..2cba7515e --- /dev/null +++ b/static/idn-api/beta/schemas/AccessItemAssociated.yaml @@ -0,0 +1,45 @@ +type: object +properties: + accessItem: + type: object + oneOf: + - $ref: './AccessItemAccessProfileResponse.yaml' + - $ref: './AccessItemAccountResponse.yaml' + - $ref: './AccessItemAppResponse.yaml' + - $ref: './AccessItemEntitlementResponse.yaml' + - $ref: './AccessItemRoleResponse.yaml' + example: + id: 8c190e6787aa4ed9a90bd9d5344523fb + accessType: account + nativeIdentity: 127999 + sourceName: JDBC Entitlements Source + entitlementCount: 0 + displayName: Sample Name + identityId: + type: string + description: the identity id + example: 8c190e6787aa4ed9a90bd9d5344523fb + eventType: + type: string + description: the event type + example: AccessItemAssociated + dt: + type: string + description: the date of event + example: '2019-03-08T22:37:33.901Z' + governanceEvent: + $ref: './CorrelatedGovernanceEvent.yaml' + example: + name: Manager Certification for Jon Snow + dt: '2019-03-08T22:37:33.901Z' + type: certification + governanceId: 2c91808a77ff216301782327a50f09bf + owners: + - id: bc693f07e7b645539626c25954c58554 + displayName: Jon Snow + reviewers: + - id: bc693f07e7b645539626c25954c58554 + displayName: Jon Snow + decisionMaker: + id: bc693f07e7b645539626c25954c58554 + displayName: Jon Snow \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AccessItemDiff.yaml b/static/idn-api/beta/schemas/AccessItemDiff.yaml new file mode 100644 index 000000000..331d81e74 --- /dev/null +++ b/static/idn-api/beta/schemas/AccessItemDiff.yaml @@ -0,0 +1,21 @@ +type: object +properties: + id: + type: string + description: the id of the access item + eventType: + type: string + enum: + - ADD + - REMOVE + displayName: + type: string + description: the display name of the access item + sourceName: + type: string + description: the source name of the access item +example: + id: 2c91808c7726345b017726a0a2fb013b + eventType: ADD + displayName: Test + sourceName: Source \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AccessItemDiffSummary.yaml b/static/idn-api/beta/schemas/AccessItemDiffSummary.yaml new file mode 100644 index 000000000..3940ef31f --- /dev/null +++ b/static/idn-api/beta/schemas/AccessItemDiffSummary.yaml @@ -0,0 +1,11 @@ +type: object +properties: + accessItemAdded: + type: number + description: the count of access item added + accessItemAdded: + type: number + description: the count of access item removed +example: + accessAdded: 3 + accessRemoved: 2 \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AccessItemEntitlementResponse.yaml b/static/idn-api/beta/schemas/AccessItemEntitlementResponse.yaml new file mode 100644 index 000000000..19be9f523 --- /dev/null +++ b/static/idn-api/beta/schemas/AccessItemEntitlementResponse.yaml @@ -0,0 +1,39 @@ +type: object +properties: + accessType: + type: string + example: entitlement + description: the access item type. entitlement in this case + id: + type: string + example: 2c918087763e69d901763e72e97f006f + description: the access item id + attribute: + type: string + example: groups + description: the entitlement attribute + value: + type: string + example: Upward mobility access + description: the associated value + entitlementType: + type: string + example: entitlement + description: the type of entitlement + sourceName: + type: string + example: DataScienceDataset + description: the name of the source + sourceId: + type: string + example: 2793o32dwd + description: the id of the source + description: + type: string + example: Entitlement - Workday/Citizenship access + description: the description for the entitlment + displayName: + type: string + example: Dr. Arden Rogahn MD + description: the display name of the identity + \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AccessItemRef.yaml b/static/idn-api/beta/schemas/AccessItemRef.yaml new file mode 100644 index 000000000..0769fa677 --- /dev/null +++ b/static/idn-api/beta/schemas/AccessItemRef.yaml @@ -0,0 +1,14 @@ +type: object +properties: + id: + type: string + description: The ID of the access item for which to retrieve the recommendation + example: '2c938083633d259901633d2623ec0375' + type: + type: string + example: ENTITLEMENT + description: The type of the access item. + enum: + - ENTITLEMENT + - ACCESS_PROFILE + - ROLE \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AccessItemRemoved.yaml b/static/idn-api/beta/schemas/AccessItemRemoved.yaml new file mode 100644 index 000000000..abc177e75 --- /dev/null +++ b/static/idn-api/beta/schemas/AccessItemRemoved.yaml @@ -0,0 +1,46 @@ +type: object +properties: + accessItem: + type: object + oneOf: + - $ref: './AccessItemAccessProfileResponse.yaml' + - $ref: './AccessItemAccountResponse.yaml' + - $ref: './AccessItemAppResponse.yaml' + - $ref: './AccessItemEntitlementResponse.yaml' + - $ref: './AccessItemRoleResponse.yaml' + example: + id: 8c190e6787aa4ed9a90bd9d5344523fb + accessType: account + nativeIdentity: 127999 + sourceName: JDBC Entitlements Source + entitlementCount: 0 + displayName: Sample Name + identityId: + type: string + description: the identity id + example: 8c190e6787aa4ed9a90bd9d5344523fb + eventType: + type: string + description: the event type + example: AccessItemRemoved + dt: + type: string + description: the date of event + example: '2019-03-08T22:37:33.901Z' + governanceEvent: + $ref: './CorrelatedGovernanceEvent.yaml' + example: + name: Manager Certification for Jon Snow + dt: '2019-03-08T22:37:33.901Z' + type: certification + governanceId: 2c91808a77ff216301782327a50f09bf + owners: + - id: bc693f07e7b645539626c25954c58554 + displayName: Jon Snow + reviewers: + - id: bc693f07e7b645539626c25954c58554 + displayName: Jon Snow + decisionMaker: + id: bc693f07e7b645539626c25954c58554 + displayName: Jon Snow + diff --git a/static/idn-api/beta/schemas/AccessItemRoleResponse.yaml b/static/idn-api/beta/schemas/AccessItemRoleResponse.yaml new file mode 100644 index 000000000..eda1a9a35 --- /dev/null +++ b/static/idn-api/beta/schemas/AccessItemRoleResponse.yaml @@ -0,0 +1,24 @@ +type: object +properties: + accessType: + type: string + example: role + description: the access item type. role in this case + id: + type: string + example: 2c918087763e69d901763e72e97f006f + description: the access item id + displayName: + type: string + example: sample + description: the role display name + description: + type: string + example: Role - Workday/Citizenship access + description: the description for the role + sourceName: + type: string + example: Source Name + description: the associated source name if it exists + + \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AccessRecommendation.yaml b/static/idn-api/beta/schemas/AccessRecommendation.yaml new file mode 100644 index 000000000..601658889 --- /dev/null +++ b/static/idn-api/beta/schemas/AccessRecommendation.yaml @@ -0,0 +1,22 @@ +type: object +properties: + access: + $ref: './AccessReference.yaml' + ignored: + type: boolean + description: Whether or not the identity has already chosen to ignore this recommendation. + requested: + type: boolean + description: Whether or not the identity has already chosen to request this recommendation. + viewed: + type: boolean + description: Whether or not the identity reportedly viewed this recommendation. + messages: + type: array + items: + $ref: './AccessRecommendationMessage.yaml' + translationMessages: + type: array + items: + type: object + $ref: './TranslationMessage.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AccessRecommendationMessage.yaml b/static/idn-api/beta/schemas/AccessRecommendationMessage.yaml new file mode 100644 index 000000000..2ed4c46b9 --- /dev/null +++ b/static/idn-api/beta/schemas/AccessRecommendationMessage.yaml @@ -0,0 +1,6 @@ +type: object +properties: + interpretation: + type: string + description: Information about why the access item was recommended. + example: 95% of your peers have this access. \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AccessReference.yaml b/static/idn-api/beta/schemas/AccessReference.yaml new file mode 100644 index 000000000..88da5e7e1 --- /dev/null +++ b/static/idn-api/beta/schemas/AccessReference.yaml @@ -0,0 +1,26 @@ +type: object +properties: + id: + type: string + format: UUID + description: ID of access item being recommended. + example: 2d9180835d2e5168015d32f890ca1581 + name: + type: string + description: Display name of the access item. + example: Applied Research Access + description: + type: string + description: Description of the access item. + example: Access to research information, lab results, and schematics + type: + $ref: '../../v3/schemas/RequestableObjectType.yaml' + owner: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + requestCommentsRequired: + type: boolean + description: If comments are required while requesting the access item. + apps: + type: array + items: + $ref: './ApplicationReference.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AccessRequestItemResponse.yaml b/static/idn-api/beta/schemas/AccessRequestItemResponse.yaml new file mode 100644 index 000000000..44464d2a6 --- /dev/null +++ b/static/idn-api/beta/schemas/AccessRequestItemResponse.yaml @@ -0,0 +1,41 @@ +type: object +properties: + operation: + type: string + example: Add + description: the access request item operation + accessItemType: + type: string + example: role + description: the access item type + name: + type: string + example: Role-1 + description: the name of access request item + decision: + type: string + example: APPROVED + enum: + - APPROVED + - REJECTED + description: the final decision for the access request + description: + type: string + example: The role descrition + description: the description of access request item + sourceId: + type: string + example: 8a80828f643d484f01643e14202e206f + description: the source id + sourceName: + type: string + example: Source1 + description: the source Name + approvalInfos: + type: array + example: + - name: John Snow + id: 8a80828f643d484f01643e14202e2000 + status: Approved + items: + $ref: './ApprovalInfoResponse.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AccessRequestRecommendationActionItemDto.yaml b/static/idn-api/beta/schemas/AccessRequestRecommendationActionItemDto.yaml new file mode 100644 index 000000000..e0877fbe4 --- /dev/null +++ b/static/idn-api/beta/schemas/AccessRequestRecommendationActionItemDto.yaml @@ -0,0 +1,12 @@ +type: object +properties: + identityId: + type: string + format: UUID + description: The identity ID taking the action. + example: 2c91808570313110017040b06f344ec9 + access: + $ref: './AccessRequestRecommendationItem.yaml' +required: + - identityId + - access diff --git a/static/idn-api/beta/schemas/AccessRequestRecommendationActionItemResponseDto.yaml b/static/idn-api/beta/schemas/AccessRequestRecommendationActionItemResponseDto.yaml new file mode 100644 index 000000000..61ce4d4fb --- /dev/null +++ b/static/idn-api/beta/schemas/AccessRequestRecommendationActionItemResponseDto.yaml @@ -0,0 +1,13 @@ +type: object +properties: + identityId: + type: string + format: UUID + description: The identity ID taking the action. + example: 2c91808570313110017040b06f344ec9 + access: + $ref: './AccessRequestRecommendationItem.yaml' + timestamp: + type: string + format: 'date-time' + example: '2017-07-11T18:45:37.098Z' diff --git a/static/idn-api/beta/schemas/AccessRequestRecommendationItem.yaml b/static/idn-api/beta/schemas/AccessRequestRecommendationItem.yaml new file mode 100644 index 000000000..6b584094a --- /dev/null +++ b/static/idn-api/beta/schemas/AccessRequestRecommendationItem.yaml @@ -0,0 +1,9 @@ +type: object +properties: + id: + type: string + format: UUID + description: ID of access item being recommended. + example: 2c9180835d2e5168015d32f890ca1581 + type: + $ref: './AccessRequestRecommendationItemType.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AccessRequestRecommendationItemDetail.yaml b/static/idn-api/beta/schemas/AccessRequestRecommendationItemDetail.yaml new file mode 100644 index 000000000..3eba8e17b --- /dev/null +++ b/static/idn-api/beta/schemas/AccessRequestRecommendationItemDetail.yaml @@ -0,0 +1,47 @@ +type: object +properties: + identityId: + type: string + format: UUID + description: Identity ID for the recommendation + example: 2c91808570313110017040b06f344ec9 + access: + type: object + properties: + id: + type: string + format: UUID + description: ID of access item being recommended. + example: 2c9180835d2e5168015d32f890ca1581 + type: + $ref: './AccessRequestRecommendationItemType.yaml' + name: + type: string + description: Name of the access item + example: Employee-database-read-write + description: + type: string + description: Description of the access item + example: This item grants an employee read and write access to the database + ignored: + type: boolean + example: true + description: Whether or not the identity has already chosen to ignore this recommendation. + requested: + type: boolean + example: true + description: Whether or not the identity has already chosen to request this recommendation. + viewed: + type: boolean + example: true + description: Whether or not the identity reportedly viewed this recommendation. + messages: + type: array + items: + $ref: './AccessRecommendationMessage.yaml' + translationMessages: + description: The list of translation messages + type: array + example: [{key: recommender-api.V2_WEIGHT_FEATURE_PRODUCT_INTERPRETATION_HIGH, values: ["75","department"]}] + items: + $ref: './TranslationMessage.yaml' diff --git a/static/idn-api/beta/schemas/AccessRequestRecommendationItemType.yaml b/static/idn-api/beta/schemas/AccessRequestRecommendationItemType.yaml new file mode 100644 index 000000000..9ec43948c --- /dev/null +++ b/static/idn-api/beta/schemas/AccessRequestRecommendationItemType.yaml @@ -0,0 +1,4 @@ +type: string +enum: [ACCESS_PROFILE, ROLE] +description: The type of access item. +example: ACCESS_PROFILE diff --git a/static/idn-api/beta/schemas/AccessRequestResponse.yaml b/static/idn-api/beta/schemas/AccessRequestResponse.yaml new file mode 100644 index 000000000..2d4c05f1d --- /dev/null +++ b/static/idn-api/beta/schemas/AccessRequestResponse.yaml @@ -0,0 +1,26 @@ +type: object +properties: + requesterId: + type: string + example: 2c91808a77ff216301782327a50f09bf + description: the requester Id + requesterName: + type: string + example: Bing C + description: the requesterName + items: + type: array + example: + - operation: Add + accessItemType: role + name: Role-1 + decision: APPROVED + description: The role descrition + sourceId: 8a80828f643d484f01643e14202e206f + sourceName: Source1 + approvalInfos: + - name: John Snow + id: 8a80828f643d484f01643e14202e2000 + status: Approved + items: + $ref: './AccessRequestItemResponse.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AccessRequested.yaml b/static/idn-api/beta/schemas/AccessRequested.yaml new file mode 100644 index 000000000..bf1c625e8 --- /dev/null +++ b/static/idn-api/beta/schemas/AccessRequested.yaml @@ -0,0 +1,17 @@ +type: object +properties: + accessRequest: + $ref: './AccessRequestResponse.yaml' + description: the access request details + identityId: + type: string + example: 8a80828f643d484f01643e14202e206f + description: the identity id + eventType: + type: string + example: AccessRequested + description: the event type + dt: + type: string + example: '2019-03-08T22:37:33.901Z' + description: the date of event \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AccessRolesChangeSegmentAssignments.yaml b/static/idn-api/beta/schemas/AccessRolesChangeSegmentAssignments.yaml new file mode 100644 index 000000000..a5cab2f20 --- /dev/null +++ b/static/idn-api/beta/schemas/AccessRolesChangeSegmentAssignments.yaml @@ -0,0 +1,41 @@ +type: object +description: >- + A request to make segment assignment changes to multiple roles and access-profiles. +required: + - "segmentId" +properties: + segmentId: + type: string + description: The ID of the Segment + example: ab5fc0cd-e021-4b76-96e6-4818df0d73d5 + assignments: + type: array + items: + $ref: '../../v3/schemas/BareReference.yaml' + nullable: true + description: >- + List of references to objects which will be assigned the Segment. All references must be of type ROLE or + ACCESS_PROFILE. If a referenced object is already assigned the Segment, the new assignment will be silently + ignored. However, it is an error for the same object to be referenced in both the *assignments* and *removals* + lists. + example: + - type: "ROLE" + id: "2c918086750a21d701751e71ee121518" + - type: "ACCESS_PROFILE" + id: "2c918086750a2e129f1518161919ecca" + removals: + type: array + items: + $ref: '../../v3/schemas/BareReference.yaml' + nullable: true + description: >- + List of references to objects which will be removed from the Segment. All references must be of type ROLE or + ACCESS_PROFILE. If a referenced object is not assigned the Segment, the new removal will be silently + ignored. However, it is an error for the same object to be referenced in both the *assignments* and *removals* + lists. + example: + - type: "ROLE" + id: "2c918086750a21d701751e71e73a0289" + - type: "ACCESS_PROFILE" + id: "2c91808676fd514b017702bdc826024a" + diff --git a/static/idn-api/beta/schemas/AccessType.yaml b/static/idn-api/beta/schemas/AccessType.yaml new file mode 100644 index 000000000..3785efeb2 --- /dev/null +++ b/static/idn-api/beta/schemas/AccessType.yaml @@ -0,0 +1,6 @@ +type: string +enum: + - ONLINE + - OFFLINE +description: Access type of API Client indicating online or offline use +example: "OFFLINE" diff --git a/static/idn-api/beta/schemas/Account.yaml b/static/idn-api/beta/schemas/Account.yaml new file mode 100644 index 000000000..dee6fd36c --- /dev/null +++ b/static/idn-api/beta/schemas/Account.yaml @@ -0,0 +1,32 @@ +allOf: + - $ref: './BaseCommonDto.yaml' + - type: object + properties: + sourceId: + type: string + example: 2c9180835d2e5168015d32f890ca1581 + identityId: + type: string + example: 2c9180835d2e5168015d32f890ca1581 + attributes: + type: object + authoritative: + type: boolean + description: + type: string + disabled: + type: boolean + locked: + type: boolean + nativeIdentity: + type: string + systemAccount: + type: boolean + uncorrelated: + type: boolean + uuid: + type: string + manuallyCorrelated: + type: boolean + hasEntitlements: + type: boolean diff --git a/static/idn-api/beta/schemas/AccountAction.yaml b/static/idn-api/beta/schemas/AccountAction.yaml new file mode 100644 index 000000000..6e1246da6 --- /dev/null +++ b/static/idn-api/beta/schemas/AccountAction.yaml @@ -0,0 +1,18 @@ +type : object +properties: + action: + type: string + example: ENABLE + description: Describes if action will be enabled or disabled + enum: + - ENABLE + - DISABLE + sourceIds: + type: array + items: + example: 2c918084660f45d6016617daa9210584 + description: Source Id + type: string + example: ["2c918084660f45d6016617daa9210584", "2c918084660f45d6016617daa9210500"] + description: List of source IDs. The sources must have the ENABLE feature or flat file source. + See "/sources" endpoint for source features. diff --git a/static/idn-api/beta/schemas/AccountAggregationStatus.yaml b/static/idn-api/beta/schemas/AccountAggregationStatus.yaml new file mode 100644 index 000000000..068df96b9 --- /dev/null +++ b/static/idn-api/beta/schemas/AccountAggregationStatus.yaml @@ -0,0 +1,45 @@ +type: object +properties: + start: + type: string + format: date-time + example: '2021-01-31T14:30:05.104Z' + description: When the aggregation started. + status: + type: string + enum: + - STARTED + - ACCOUNTS_COLLECTED + - COMPLETED + - CANCELLED + - RETRIED + - TERMINATED + example: ACCOUNTS_COLLECTED + description: | + STARTED - Aggregation started, but source account iteration has not completed. + + ACCOUNTS_COLLECTED - Source account iteration completed, but all accounts have not yet been processed. + + COMPLETED - Aggregation completed (*possibly with errors*). + + CANCELLED - Aggregation cancelled by user. + + RETRIED - Aggregation retried because of connectivity issues with the Virtual Appliance. + + TERMINATED - Aggregation marked as failed after 3 tries after connectivity issues with the Virtual Appliance. + totalAccounts: + type: integer + example: 520 + description: >- + The total number of *NEW, CHANGED and DELETED* accounts that need to be processed for this aggregation. This + does not include accounts that were unchanged since the previous aggregation. This can be zero if there were no + new, changed or deleted accounts since the previous aggregation. + *Only available when status is ACCOUNTS_COLLECTED or COMPLETED.* + processedAccounts: + type: integer + example: 150 + description: >- + The number of *NEW, CHANGED and DELETED* accounts that have been processed so far. This reflects the number of + accounts that have been processed at the time of the API call, and may increase on subsequent API calls while + the status is ACCOUNTS_COLLECTED. + *Only available when status is ACCOUNTS_COLLECTED or COMPLETED.* diff --git a/static/idn-api/beta/schemas/AccountAttributes.yaml b/static/idn-api/beta/schemas/AccountAttributes.yaml new file mode 100644 index 000000000..517147d8d --- /dev/null +++ b/static/idn-api/beta/schemas/AccountAttributes.yaml @@ -0,0 +1,13 @@ +type : object +required: + - attributes +properties: + attributes: + description: The schema attribute values for the account + type: object + example: + city: Austin + displayName: John Doe + userName: jdoe + sAMAccountName: jDoe + mail: john.doe@sailpoint.com diff --git a/static/idn-api/beta/schemas/AccountDetails.yaml b/static/idn-api/beta/schemas/AccountDetails.yaml new file mode 100644 index 000000000..e38523641 --- /dev/null +++ b/static/idn-api/beta/schemas/AccountDetails.yaml @@ -0,0 +1,77 @@ +description: Account Details +type: object +properties: + id: + description: unique id of this object + type: string + example: 2c91808474683da6017468693c260195 + name: + type: string + accountId: + type: string + example: 4191808474683da6017468693c260195 + description: + type: string + nativeIdentity: + type: string + uuid: + type: string + displayName: + type: string + disabled: + type: boolean + locked: + type: boolean + uncorrelated: + type: boolean + systemAccount: + type: boolean + authoritative: + type: boolean + supportsPasswordChange: + type: boolean + attributes: + type: object + application: + type: object + identity: + type: object + schema: + type: object + pendingAccessRequestIds: + type: array + items: + type: string + features: + type: array + items: + type: string + enum: + - AUTHENTICATE + - COMPOSITE + - DIRECT_PERMISSIONS + - DISCOVER_SCHEMA + - ENABLE + - MANAGER_LOOKUP + - NO_RANDOM_ACCESS + - PROXY + - SEARCH + - TEMPLATE + - UNLOCK + - UNSTRUCTURED_TARGETS + - SHAREPOINT_TARGET + - PROVISIONING + - GROUP_PROVISIONING + - SYNC_PROVISIONING + - PASSWORD + - CURRENT_PASSWORD + - ACCOUNT_ONLY_REQUEST + - ADDITIONAL_ACCOUNT_REQUEST + - NO_AGGREGATION + - GROUPS_HAVE_MEMBERS + - NO_PERMISSIONS_PROVISIONING + - NO_GROUP_PERMISSIONS_PROVISIONING + - NO_UNSTRUCTURED_TARGETS_PROVISIONING + - NO_DIRECT_PERMISSIONS_PROVISIONING + meta: + type: object diff --git a/static/idn-api/beta/schemas/AccountStatusChanged.yaml b/static/idn-api/beta/schemas/AccountStatusChanged.yaml new file mode 100644 index 000000000..99537a7f5 --- /dev/null +++ b/static/idn-api/beta/schemas/AccountStatusChanged.yaml @@ -0,0 +1,67 @@ +type: object +properties: + eventType: + type: string + description: the event type + identityId: + type: string + description: the identity id + dt: + type: string + description: the date of event + account: + type: object + properties: + id: + type: string + description: the ID of the account in the database + nativeIdentity: + type: string + description: the native identifier of the account + displayName: + type: string + description: the display name of the account + sourceId: + type: string + description: the ID of the source for this account + sourceName: + type: string + description: the name of the source for this account + entitlementCount: + type: integer + description: the number of entitlements on this account + accessType: + type: string + description: this value is always "account" + statusChange: + type: object + properties: + previousStatus: + type: string + description: the previous status of the account + enum: + - enabled + - disabled + - locked + newStatus: + type: string + description: the new status of the account + enum: + - enabled + - disabled + - locked +example: + account: + id: 2c91808a77ff216301782327a50f09bf + nativeIdentity: 127999 + displayName: Sample Name + sourceId: 8a80828f643d484f01643e14202e206f + sourceName: JDBC Entitlements Source + entitlementCount: 0 + accessType: account + statusChange: + previousStatus: enabled + newStatus: disabled + eventType: AccountStatusChanged + identityId: 8a80828f643d484f01643e14202e206f + date: '2019-03-08T22:37:33.901Z' diff --git a/static/idn-api/beta/schemas/AccountToggleRequest.yaml b/static/idn-api/beta/schemas/AccountToggleRequest.yaml new file mode 100644 index 000000000..a5213aa3e --- /dev/null +++ b/static/idn-api/beta/schemas/AccountToggleRequest.yaml @@ -0,0 +1,13 @@ +description: Request used for account enable/disable +type: object +properties: + externalVerificationId: + description: If set, an external process validates that the user wants to proceed with this request. + type: string + example: 3f9180835d2e5168015d32f890ca1581 + forceProvisioning: + description: >- + If set, provisioning updates the account attribute at the source. + This option is used when the account is not synced to ensure the attribute is updated. + type: boolean + example: false diff --git a/static/idn-api/beta/schemas/AccountUnlockRequest.yaml b/static/idn-api/beta/schemas/AccountUnlockRequest.yaml new file mode 100644 index 000000000..e9fdd06cb --- /dev/null +++ b/static/idn-api/beta/schemas/AccountUnlockRequest.yaml @@ -0,0 +1,17 @@ +description: Request used for account unlock +type: object +properties: + externalVerificationId: + description: If set, an external process validates that the user wants to proceed with this request. + type: string + example: 3f9180835d2e5168015d32f890ca1581 + unlockIDNAccount: + description: If set, the IDN account is unlocked after the workflow completes. + type: boolean + example: false + forceProvisioning: + description: >- + If set, provisioning updates the account attribute at the source. + This option is used when the account is not synced to ensure the attribute is updated. + type: boolean + example: false diff --git a/static/idn-api/beta/schemas/AccountsAsyncResult.yaml b/static/idn-api/beta/schemas/AccountsAsyncResult.yaml new file mode 100644 index 000000000..1f33ab0a2 --- /dev/null +++ b/static/idn-api/beta/schemas/AccountsAsyncResult.yaml @@ -0,0 +1,9 @@ +description: Accounts async response containing details on started async process +required: + - id +type: object +properties: + id: + description: id of the task + type: string + example: 2c91808474683da6017468693c260195 diff --git a/static/idn-api/beta/schemas/ActivateCampaignOptions.yaml b/static/idn-api/beta/schemas/ActivateCampaignOptions.yaml new file mode 100644 index 000000000..3f61c45f8 --- /dev/null +++ b/static/idn-api/beta/schemas/ActivateCampaignOptions.yaml @@ -0,0 +1,9 @@ +type : object +properties: + timeZone: + type: string + description: + The timezone must be in a valid ISO 8601 format. Timezones in ISO 8601 are represented as UTC (represented as 'Z') + or as an offset from UTC. The offset format can be +/-hh:mm, +/-hhmm, or +/-hh. + default: Z + example: -05:00 diff --git a/static/idn-api/beta/schemas/ActiveInvocation.yaml b/static/idn-api/beta/schemas/ActiveInvocation.yaml new file mode 100644 index 000000000..7439a2350 --- /dev/null +++ b/static/idn-api/beta/schemas/ActiveInvocation.yaml @@ -0,0 +1,18 @@ +type: object +properties: + id: + type: string + description: Invocation ID + example: "bc693f07-e7b6-4553-9626-c25954c58554" + created: + type: string + description: Invocation creation timestamp. String (ISO-8601). + example: "2020-03-27T20:42:14.738Z" + triggerId: + type: string + description: Trigger ID + example: "idn:access-requested" + deadline: + type: string + description: Invocation deadline timestamp. String (ISO-8601). + example: "2020-03-28T20:42:14.738Z" diff --git a/static/idn-api/beta/schemas/ActivityData.yaml b/static/idn-api/beta/schemas/ActivityData.yaml new file mode 100644 index 000000000..fcbc78a59 --- /dev/null +++ b/static/idn-api/beta/schemas/ActivityData.yaml @@ -0,0 +1,26 @@ +type: object +properties: + source: + $ref: './ActivityDataSource.yaml' + daysActive: + type: integer + description: The number of days between firstActiveDate and lastActiveDate that had any activity recorded + example: 20 + firstActiveDate: + type: string + format: date-time + description: The first date any activity has been recorded + example: '2021-01-11T18:45:37.098Z' + lastActiveDate: + type: string + format: date-time + description: The most recent date any activity has been recorded + example: '2021-04-30T20:14:36.932Z' + status: + type: string + enum: + - SUCCESS + - UNAVAILABLE + - UNMAPPED + - ERROR + description: Describes the result of SaaSManagement activity data retrieval operation for the account diff --git a/static/idn-api/beta/schemas/ActivityDataSource.yaml b/static/idn-api/beta/schemas/ActivityDataSource.yaml new file mode 100644 index 000000000..1703218a9 --- /dev/null +++ b/static/idn-api/beta/schemas/ActivityDataSource.yaml @@ -0,0 +1,17 @@ +description: A reference to the source of activity +allOf: + - $ref: '../../v3/schemas/BaseReferenceDto.yaml' + - type: object + properties: + integrationType: + type: string + enum: + - DIRECT + - SSO + - UNKNOWN + description: Describes the method used to collect source activity data +example: + - type: 'SOURCE' + id: '2c9180835d191a86015d28455b4b232a' + name: 'GitHub' + integrationType: DIRECT diff --git a/static/idn-api/beta/schemas/AdminReviewReassign.yaml b/static/idn-api/beta/schemas/AdminReviewReassign.yaml new file mode 100644 index 000000000..f7048ee3f --- /dev/null +++ b/static/idn-api/beta/schemas/AdminReviewReassign.yaml @@ -0,0 +1,27 @@ +type: object +properties: + certificationIds: + description: List of certification IDs to reassign + type: array + items: + type: string + minItems: 1 + maxItems: 250 + example: ['af3859464779471211bb8424a563abc1','af3859464779471211bb8424a563abc2','af3859464779471211bb8424a563abc3'] + reassignTo: + type: object + properties: + id: + type: string + description: The identity ID to which the review is being assigned. + example: ef38f94347e94562b5bb8424a56397d8 + type: + type: string + description: The type of the ID provided. + enum: + - IDENTITY + example: IDENTITY + reason: + type: string + description: Comment to explain why the certification was reassigned + example: 'reassigned for some reason' diff --git a/static/idn-api/beta/schemas/AggregationState.yaml b/static/idn-api/beta/schemas/AggregationState.yaml new file mode 100644 index 000000000..6209e2e05 --- /dev/null +++ b/static/idn-api/beta/schemas/AggregationState.yaml @@ -0,0 +1,21 @@ +type: object +properties: + start: + type: string + description: The date the Aggregation was started. + format: date-time + example: '2020-12-31T23:58:58.104Z' + end: + type: string + description: The end date of the extraction phase of the aggregation. + format: date-time + example: '2020-12-31T23:59:59.104Z' + deltaState: + type: object + description: The delta state of the source. + example: { + "dc=testautomationad,dc=local": { + "lastDirsyncServer": "10.0.5.127", + "users_cookie":"TVNEUwMACCCB1bgmNdXWAQAAAAAAAAAAKAAAAHFanAAAAAAAAAAAAAAAAABxYq0EAAAAAOFygyM+ sGdPq9aP10eUKNoBAAAAAAAAAAEAAAAAAAAA3XKDIz9wZ0+r1o/XR5Qo2gZjrQQAAAAA" + } + } diff --git a/static/idn-api/beta/schemas/AirflowDagDto.yaml b/static/idn-api/beta/schemas/AirflowDagDto.yaml new file mode 100644 index 000000000..3f4711006 --- /dev/null +++ b/static/idn-api/beta/schemas/AirflowDagDto.yaml @@ -0,0 +1,30 @@ +type: object +properties: + id: + type: string + description: The ID of the airflow DAG + example: 'airflow-dag-2' + runUrl: + type: string + description: The URL of the airflow DAG run + example: '/admin/airflow/graph?dag_id=airflow-dag-2&execution_date=2020-06-02+17%3A05%3A03%2B00%3A00' + executionDate: + type: string + description: Trigger time of the airflow DAG run + example: '2020-06-02T17:05:03Z' + startDate: + type: string + description: Start time of the airflow DAG run + example: '2020-06-02T17:05:02Z' + lastUpdatedDate: + type: string + description: Last time the airflow DAG was updated + example: '2020-07-02T17:05:02Z' + qualifiers: + type: array + description: Qualifiers related to pipeline + items: + type: string + example: + - 20110909124646 + - 20119093434324 diff --git a/static/idn-api/beta/schemas/AmsCapability.yaml b/static/idn-api/beta/schemas/AmsCapability.yaml new file mode 100644 index 000000000..ebc4313d9 --- /dev/null +++ b/static/idn-api/beta/schemas/AmsCapability.yaml @@ -0,0 +1,45 @@ +type: object +description: Authorization model capability +properties: + id: + type: string + description: ID of the capability. + example: idn:admin + name: + type: string + description: The descriptive name of the capability. + example: IdentityNow Administrator + legacyGroup: + type: string + description: The legacy name for the capability. + example: ORG_ADMIN + adminAssignable: + type: boolean + description: If true, this capability can be assigned by the administrator. If false, this capability cannot be assigned to a user. + example: true + translatedName: + type: string + description: A translated string that can be displayed for the capability with tranlation based on the "Accept-Language" header in the request. + example: Admin + translatedGrant: + type: string + description: A translated string that can be displayed for granting the capability with tranlation based on the "Accept-Language" header in the request. + example: Grant Admin + translatedRemove: + type: string + description: A translated string that can be displayed for removing the capability with tranlation based on the "Accept-Language" header in the request. + example: Remove Admin + rightSets: + description: A list of right sets belonging to this capability. + type: array + items: + $ref: '../schemas/AmsRightSet.yaml' +required: + - id + - name + - legacyGroup + - rightSets + - adminAssignable + - translatedName + - translatedGrant + - translatedRemove \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AmsRightSet.yaml b/static/idn-api/beta/schemas/AmsRightSet.yaml new file mode 100644 index 000000000..d5e35401b --- /dev/null +++ b/static/idn-api/beta/schemas/AmsRightSet.yaml @@ -0,0 +1,26 @@ +type: object +description: Authorization model named set of rights +properties: + id: + type: string + description: ID of the right set + example: sp:config-export-import + name: + type: string + description: The descriptive name of the right set + example: Export/Import configuration + rights: + type: array + items: + type: string + example: sp:config:export + description: A list of rights belonging to this right set + example: >- + [ + "sp:config:export", + "sp:config:import" + ] +required: + - id + - name + - rights \ No newline at end of file diff --git a/static/idn-api/beta/schemas/ApplicationReference.yaml b/static/idn-api/beta/schemas/ApplicationReference.yaml new file mode 100644 index 000000000..ec4eced60 --- /dev/null +++ b/static/idn-api/beta/schemas/ApplicationReference.yaml @@ -0,0 +1,17 @@ +type: object +properties: + id: + type: string + format: UUID + description: ID of application. + example: 2c9180835d2e5168015d32f890ca1581 + name: + type: string + description: Display name of the application. + example: Applied Research Application + description: + type: string + description: Description of the application. + example: Access to research information, lab results, and schematics + owner: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/ApprovalInfoResponse.yaml b/static/idn-api/beta/schemas/ApprovalInfoResponse.yaml new file mode 100644 index 000000000..23f962e1a --- /dev/null +++ b/static/idn-api/beta/schemas/ApprovalInfoResponse.yaml @@ -0,0 +1,14 @@ +type: object +properties: + id: + type: string + example: 8a80828f643d484f01643e14202e2000 + description: the id of approver + name: + type: string + example: John Snow + description: the name of approver + status: + type: string + example: Approved + description: the status of the approval request \ No newline at end of file diff --git a/static/idn-api/beta/schemas/ApprovalItemDetails.yaml b/static/idn-api/beta/schemas/ApprovalItemDetails.yaml new file mode 100644 index 000000000..9fab07ace --- /dev/null +++ b/static/idn-api/beta/schemas/ApprovalItemDetails.yaml @@ -0,0 +1,28 @@ +type: object +properties: + id: + type: string + description: ID of the approval item + example: 2c9180835d2e5168015d32f890ca1581 + account: + type: string + description: The account referenced by the approval item + example: john.smith + application: + type: string + description: The name the application/source + example: Active Directory + attributeName: + type: string + description: The name of the attribute + example: emailAddress + attributeOperation: + type: string + description: The operation of the attribute + example: update + attributeValue: + type: string + description: The value of the attribute + example: a@b.com + state: + $ref: '../../v3/schemas/WorkItemState.yaml' diff --git a/static/idn-api/beta/schemas/ApprovalStatus.yaml b/static/idn-api/beta/schemas/ApprovalStatus.yaml new file mode 100644 index 000000000..1fb7037ab --- /dev/null +++ b/static/idn-api/beta/schemas/ApprovalStatus.yaml @@ -0,0 +1,8 @@ +type: string +enum: + - APPROVED + - REJECTED + - PENDING + - NOT_READY + - CANCELLED +description: Enum representing the non-employee request approval status \ No newline at end of file diff --git a/static/idn-api/beta/schemas/ApprovalSummary.yaml b/static/idn-api/beta/schemas/ApprovalSummary.yaml new file mode 100644 index 000000000..0676df7fb --- /dev/null +++ b/static/idn-api/beta/schemas/ApprovalSummary.yaml @@ -0,0 +1,11 @@ +type: object +properties: + pending: + type: integer + description: The number of pending access requests approvals. + approved: + type: integer + description: The number of approved access requests approvals. + rejected: + type: integer + description: The number of rejected access requests approvals. \ No newline at end of file diff --git a/static/idn-api/beta/schemas/Argument.yaml b/static/idn-api/beta/schemas/Argument.yaml new file mode 100644 index 000000000..d9f1e4c33 --- /dev/null +++ b/static/idn-api/beta/schemas/Argument.yaml @@ -0,0 +1,16 @@ +type: object +properties: + name: + type: string + description: the name of the argument + example: firstName + description: + type: string + description: the description of the argument + example: the first name of the identity + type: + type: string + description: the programmatic type of the argument + example: String +required: + - name diff --git a/static/idn-api/beta/schemas/AttrSyncSourceAttributeConfig.yaml b/static/idn-api/beta/schemas/AttrSyncSourceAttributeConfig.yaml new file mode 100644 index 000000000..db0e26ea9 --- /dev/null +++ b/static/idn-api/beta/schemas/AttrSyncSourceAttributeConfig.yaml @@ -0,0 +1,25 @@ + +type: object +description: Specification of source attribute sync mapping configuration for an identity attribute +required: + - name + - displayName + - enabled + - target +properties: + name: + type: string + description: Name of the identity attribute + example: email + displayName: + type: string + description: Display name of the identity attribute + example: Email + enabled: + type: boolean + description: Determines whether or not the attribute is enabled for synchronization + example: true + target: + type: string + description: Name of the source account attribute to which the identity attribute value will be synchronized if enabled + example: mail diff --git a/static/idn-api/beta/schemas/AttrSyncSourceConfig.yaml b/static/idn-api/beta/schemas/AttrSyncSourceConfig.yaml new file mode 100644 index 000000000..fafc83e83 --- /dev/null +++ b/static/idn-api/beta/schemas/AttrSyncSourceConfig.yaml @@ -0,0 +1,33 @@ + +type: object +description: Specification of attribute sync configuration for a source +required: + - source + - attributes +properties: + source: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: Reference to the source which is the target of the attribute synchronization + example: + - type: 'SOURCE' + id: '2c9180835d191a86015d28455b4b232a' + name: 'HR Active Directory' + attributes: + type: array + description: Attribute synchronization configuration for specific identity attributes in the context of a source + items: + $ref: './AttrSyncSourceAttributeConfig.yaml' + example: [ + { + name: 'email', + displayName: 'Email', + enabled: true, + target: 'mail' + }, + { + name: 'firstname', + displayName: 'First Name', + enabled: false, + target: 'givenName' + } + ] diff --git a/static/idn-api/beta/schemas/AttrSyncTenantAttributeConfig.yaml b/static/idn-api/beta/schemas/AttrSyncTenantAttributeConfig.yaml new file mode 100644 index 000000000..899b72f81 --- /dev/null +++ b/static/idn-api/beta/schemas/AttrSyncTenantAttributeConfig.yaml @@ -0,0 +1,39 @@ + +type: object +description: Specification of tenant attribute sync mapping configuration for an identity attribute +required: + - name + - displayName + - targets +properties: + name: + type: string + description: Name of the identity attribute + example: email + displayName: + type: string + description: Display name of the identity attribute + example: Email + targets: + type: array + description: Collection of source synchronization targets to which the identity attribute values should be synchronized + items: + $ref: './AttrSyncTenantSyncTarget.yaml' + example: [ + { + source: { + type: "SOURCE", + id: "2c9180835d191a86015d28455b4b232a", + name: "Corporate Active Directory" + }, + attribute: "mail" + }, + { + source: { + type: "SOURCE", + id: "2c9180835d191a86015d28455b4b232a", + name: "HR Workday" + }, + attribute: "EMAIL_ADDRESS_WORK" + } + ] diff --git a/static/idn-api/beta/schemas/AttrSyncTenantConfig.yaml b/static/idn-api/beta/schemas/AttrSyncTenantConfig.yaml new file mode 100644 index 000000000..cf2d4176f --- /dev/null +++ b/static/idn-api/beta/schemas/AttrSyncTenantConfig.yaml @@ -0,0 +1,28 @@ + +type: object +description: Specification of attribute sync configuration for a tenant +required: + - attributes +properties: + id: + type: string + description: Attribute synchronization configuration ID + example: 0f11f2a4-7c94-4bf3-a2bd-742580fe3bde + readOnly: true + attributes: + type: array + description: Collection of attribute synchronization configuration for individual identity attributes + items: + $ref: './AttrSyncTenantAttributeConfig.yaml' + created: + type: string + description: Date the attribute synchronization configuration was created. + format: 'date-time' + example: '2019-12-24T22:32:58.104Z' + readOnly: true + modified: + type: string + description: Date the attribute synchronization configuration was last modified. + format: 'date-time' + example: '2019-12-31T20:22:28.104Z' + readOnly: true diff --git a/static/idn-api/beta/schemas/AttrSyncTenantSyncTarget.yaml b/static/idn-api/beta/schemas/AttrSyncTenantSyncTarget.yaml new file mode 100644 index 000000000..6bdb70af3 --- /dev/null +++ b/static/idn-api/beta/schemas/AttrSyncTenantSyncTarget.yaml @@ -0,0 +1,14 @@ + +type: object +properties: + source: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: Reference to the source which is the target of the attribute synchronization + example: + - type: 'SOURCE' + id: '2c9180835d191a86015d28455b4b232a' + name: 'HR Active Directory' + attribute: + type: string + description: Name of the source account attribute to which the identity attribute values should be synchronized + example: mail diff --git a/static/idn-api/beta/schemas/AttributeChange.yaml b/static/idn-api/beta/schemas/AttributeChange.yaml new file mode 100644 index 000000000..bde74ca82 --- /dev/null +++ b/static/idn-api/beta/schemas/AttributeChange.yaml @@ -0,0 +1,15 @@ +type: object +properties: + name: + type: string + description: the attribute name + previousValue: + type: string + description: the old value of attribute + newValue: + type: string + description: the new value of attribute +example: + name: firstname + previousValue: adam + newValue: zampa \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AttributeDefinition.yaml b/static/idn-api/beta/schemas/AttributeDefinition.yaml new file mode 100644 index 000000000..48603c5dc --- /dev/null +++ b/static/idn-api/beta/schemas/AttributeDefinition.yaml @@ -0,0 +1,34 @@ +type: object +properties: + name: + type: string + description: The name of the attribute. + example: sAMAccountName + type: + $ref: './AttributeDefinitionType.yaml' + description: The type of the attribute. + example: string + schema: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: A reference to the schema on the source to which the values of the attribute map. + example: { + type: "CONNECTOR_SCHEMA", + id: "2c9180866166b5b0016167c32ef31a66", + name: "group" + } + description: + type: string + description: A human-readable description of the attribute. + isMulti: + type: boolean + description: Flag indicating whether or not the attribute is multi-valued. + example: false + isEntitlement: + type: boolean + description: Flag indicating whether or not the attribute is an entitlement. + example: false + isGroup: + type: boolean + description: Unmodifiable flag indicating whether or not the attribute represents a group. + example: false + readOnly: true diff --git a/static/idn-api/beta/schemas/AttributeDefinitionType.yaml b/static/idn-api/beta/schemas/AttributeDefinitionType.yaml new file mode 100644 index 000000000..c0c28af13 --- /dev/null +++ b/static/idn-api/beta/schemas/AttributeDefinitionType.yaml @@ -0,0 +1,8 @@ + +type: string +enum: + - STRING + - LONG + - INT + - BOOLEAN +description: The underlying type of the value which an AttributeDefinition represents. diff --git a/static/idn-api/beta/schemas/AttributesChanged.yaml b/static/idn-api/beta/schemas/AttributesChanged.yaml new file mode 100644 index 000000000..c6409a209 --- /dev/null +++ b/static/idn-api/beta/schemas/AttributesChanged.yaml @@ -0,0 +1,23 @@ +type: object +properties: + changes: + type: array + items: + $ref: './AttributeChange.yaml' + eventType: + type: string + description: the event type + identityId: + type: string + description: the identity id + dt: + type: string + description: the date of event +example: + attributeChanges: + name: firstname + previousValue: adam + newValue: zampa + eventType: AttributesChanged + identityId: 8a80828f643d484f01643e14202e206f + dt: '2019-03-08T22:37:33.901Z' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AuthOrgConfiguration.yaml b/static/idn-api/beta/schemas/AuthOrgConfiguration.yaml new file mode 100644 index 000000000..6f31f1c09 --- /dev/null +++ b/static/idn-api/beta/schemas/AuthOrgConfiguration.yaml @@ -0,0 +1,17 @@ +type: object +properties: + enabled: + type: boolean + tenant: + type: string + description: This is the tenant's or organization's name. + serviceProviderConfig: + $ref: 'ServiceProviderConfiguration.yaml' + lockoutConfig: + $ref: 'LockoutConfiguration.yaml' + networkConfig: + $ref: 'NetworkConfiguration.yaml' + orgConfig: + $ref: 'OrgConfiguration.yaml' + sessionConfig: + $ref: 'SessionConfiguration.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/AuthSupportLoginRequest.yaml b/static/idn-api/beta/schemas/AuthSupportLoginRequest.yaml new file mode 100644 index 000000000..2a38b5de0 --- /dev/null +++ b/static/idn-api/beta/schemas/AuthSupportLoginRequest.yaml @@ -0,0 +1,12 @@ +type: object +properties: + authTenant: + type: string + description: The tenant providing support (can't be the same as request tenant) + default: sailpoint + example: sailpoint + expirationDate: + type: string + format: date-time + description: When the auth support login access expires. (must be within a year's time from when the auth support login is created or updated) + example: "2019-08-23T18:52:59.162Z" diff --git a/static/idn-api/beta/schemas/AuthSupportLoginResponse.yaml b/static/idn-api/beta/schemas/AuthSupportLoginResponse.yaml new file mode 100644 index 000000000..f4afea5e4 --- /dev/null +++ b/static/idn-api/beta/schemas/AuthSupportLoginResponse.yaml @@ -0,0 +1,29 @@ +type: object +properties: + authTenant: + type: string + description: The tenant providing support. + example: sailpoint + authUserName: + type: string + description: The username in the target tenant that the authTenant's support and services user will log in as. + example: slpt.services + role: + type: string + description: The user access role in the auth tenant capable of providing admin-level support + example: Support and Services Role + expirationDate: + type: string + format: date-time + description: When the auth support login access expires. + example: "2019-08-23T18:52:59.162Z" + modified: + type: string + format: date-time + description: When the request was last modified. + example: "2019-08-23T18:52:59.162Z" + created: + type: string + format: date-time + description: When the request was created. + example: "2019-08-23T18:40:35.772Z" diff --git a/static/idn-api/beta/schemas/AuthSupportTenantRequest.yaml b/static/idn-api/beta/schemas/AuthSupportTenantRequest.yaml new file mode 100644 index 000000000..cfaddbe56 --- /dev/null +++ b/static/idn-api/beta/schemas/AuthSupportTenantRequest.yaml @@ -0,0 +1,10 @@ +type: object +properties: + authUserName: + type: string + description: The username in the target tenant that the authTenant's support and services user will log in as. + example: slpt.services + role: + type: string + description: The user access role in the auth tenant capable of providing admin-level support + example: Support and Services Role diff --git a/static/idn-api/beta/schemas/AuthSupportTenantResponse.yaml b/static/idn-api/beta/schemas/AuthSupportTenantResponse.yaml new file mode 100644 index 000000000..943083ecf --- /dev/null +++ b/static/idn-api/beta/schemas/AuthSupportTenantResponse.yaml @@ -0,0 +1,24 @@ +type: object +properties: + authTenant: + type: string + description: The tenant providing support. + example: sailpoint + authUserName: + type: string + description: The username in the target tenant that the authTenant's support and services user will log in as. + example: slpt.services + role: + type: string + description: The user access role in the auth tenant capable of providing admin-level support + example: Support and Services Role + modified: + type: string + format: date-time + description: When the request was last modified. + example: "2019-08-23T18:52:59.162Z" + created: + type: string + format: date-time + description: When the request was created. + example: "2019-08-23T18:40:35.772Z" diff --git a/static/idn-api/beta/schemas/AuthSupportTransferStatusResponse.yaml b/static/idn-api/beta/schemas/AuthSupportTransferStatusResponse.yaml new file mode 100644 index 000000000..5824cd6de --- /dev/null +++ b/static/idn-api/beta/schemas/AuthSupportTransferStatusResponse.yaml @@ -0,0 +1,20 @@ +type: object +properties: + tenant: + type: string + description: The tenant granting support and services access to DevOps. + example: acme-solar + transferred: + type: boolean + description: The state indicating whether the tenant has been transferred to the customer. + example: true + modified: + type: string + format: date-time + description: When the transfer status was last modified. + example: "2021-05-03T18:52:59.162Z" + created: + type: string + format: date-time + description: When the transfer status was created. + example: "2021-05-03T18:40:35.772Z" diff --git a/static/idn-api/beta/schemas/AuthSupportUserEligibilityResponse.yaml b/static/idn-api/beta/schemas/AuthSupportUserEligibilityResponse.yaml new file mode 100644 index 000000000..ee91e5c85 --- /dev/null +++ b/static/idn-api/beta/schemas/AuthSupportUserEligibilityResponse.yaml @@ -0,0 +1,5 @@ +type: object +properties: + authSupportUserEligible: + type: boolean + description: True if the logged-in user is eligible to provide admin-level support in a customer org. diff --git a/static/idn-api/beta/schemas/AuthUser.yaml b/static/idn-api/beta/schemas/AuthUser.yaml new file mode 100644 index 000000000..b27654654 --- /dev/null +++ b/static/idn-api/beta/schemas/AuthUser.yaml @@ -0,0 +1,74 @@ +type: object +properties: + tenant: + type: string + description: Tenant name. + example: "test-tenant" + id: + type: string + description: Identity ID. + example: 2c91808458ae7a4f0158b1bbf8af0628 + uid: + type: string + description: Identity unique identitifier. + example: "will.smith" + profile: + type: string + description: ID of the auth profile associated with this auth user. + example: 2c91808458ae7a4f0158b1bbf8af0756 + identificationNumber: + type: string + description: Auth user employee number. + example: "19-5588452" + email: + type: string + description: Auth user's email. + example: william.smith@example.com + phone: + type: string + description: Auth user's phone number. + example: "5555555555" + workPhone: + type: string + description: Auth user's work phone number. + example: "5555555555" + personalEmail: + type: string + description: Auth user's personal email. + example: william.smith@example.com + firstname: + type: string + description: Auth user's first name. + example: Will + lastname: + type: string + description: Auth user's last name. + example: Smith + displayName: + type: string + description: Auth user's name in displayed format. + example: Will Smith + alias: + type: string + description: Auth user's alias. + example: will.smith + lastPasswordChangeDate: + type: string + description: the date of last password change + example: "2021-03-08T22:37:33.901Z" + lastLoginTimestamp: + description: Timestamp of the last login (long type value). + type: integer + format: int64 + example: 1656327185832 + currentLoginTimestamp: + description: Timestamp of the current login (long type value). + type: integer + format: int64 + example: 1656327185832 + capabilities: + description: Array of capabilities for this auth user. + type: array + items: + type: string + example: "ORG_ADMIN" diff --git a/static/idn-api/beta/schemas/AuthUserSaveRequest.yaml b/static/idn-api/beta/schemas/AuthUserSaveRequest.yaml new file mode 100644 index 000000000..a9228057c --- /dev/null +++ b/static/idn-api/beta/schemas/AuthUserSaveRequest.yaml @@ -0,0 +1,52 @@ +type: object +properties: + uid: + type: string + description: Identity unique identitifier. + example: "will.smith" + profile: + type: string + description: ID of the auth profile associated with this auth user. + example: 2c91808458ae7a4f0158b1bbf8af0756 + identificationNumber: + type: string + description: Auth user employee number. + example: "19-5588452" + email: + type: string + description: Auth user's email. + example: william.smith@example.com + phone: + type: string + description: Auth user's phone number. + example: "5555555555" + workPhone: + type: string + description: Auth user's work phone number. + example: "5555555555" + personalEmail: + type: string + description: Auth user's personal email. + example: william.smith@example.com + firstname: + type: string + description: Auth user's first name. + example: Will + lastname: + type: string + description: Auth user's last name. + example: Smith + displayName: + type: string + description: Auth user's name in displayed format. + example: Will Smith + alias: + type: string + description: Auth user's alias. + example: will.smith + capabilities: + description: Array of capabilities for this auth user. + type: array + items: + type: string + example: "ORG_ADMIN" diff --git a/static/idn-api/beta/schemas/AuthenticationType.yaml b/static/idn-api/beta/schemas/AuthenticationType.yaml new file mode 100644 index 000000000..8d1ae80f7 --- /dev/null +++ b/static/idn-api/beta/schemas/AuthenticationType.yaml @@ -0,0 +1,6 @@ +description: type of authentication to use for the Service Desk integration. Normally the values would be all caps, but they're not for backward compatibility. +type: string +example: Basic +enum: + - Basic + - OAuth2 diff --git a/static/idn-api/beta/schemas/BaseCommonDto.yaml b/static/idn-api/beta/schemas/BaseCommonDto.yaml new file mode 100644 index 000000000..12aed1621 --- /dev/null +++ b/static/idn-api/beta/schemas/BaseCommonDto.yaml @@ -0,0 +1,25 @@ +type: object +required: + - name +properties: + id: + description: System-generated unique ID of the Object + type: string + example: id12345 + readOnly: true + name: + description: Name of the Object + type: string + example: aName + created: + description: Creation date of the Object + type: string + format: date-time + readOnly: true + example: true + modified: + description: Last modification date of the Object + type: string + format: date-time + readOnly: true + example: true diff --git a/static/idn-api/beta/schemas/BaseReferenceDto.yaml b/static/idn-api/beta/schemas/BaseReferenceDto.yaml new file mode 100644 index 000000000..bb87132c8 --- /dev/null +++ b/static/idn-api/beta/schemas/BaseReferenceDto.yaml @@ -0,0 +1,10 @@ +type: object +properties: + id: + type: string + description: the application ID + example: "ff8081814d977c21014da056804a0af3" + name: + type: string + description: the application name + example: "Github" diff --git a/static/idn-api/beta/schemas/BasicAuthConfig.yaml b/static/idn-api/beta/schemas/BasicAuthConfig.yaml new file mode 100644 index 000000000..c61655389 --- /dev/null +++ b/static/idn-api/beta/schemas/BasicAuthConfig.yaml @@ -0,0 +1,12 @@ +type: object +properties: + userName: + type: string + description: The username to authenticate. + example: "user@example.com" + password: + type: string + nullable: true + description: The password to authenticate. On response, this field is set to null as to not return secrets. + example: null +description: Config required if BASIC_AUTH is used. diff --git a/static/idn-api/beta/schemas/BasicProvision.yaml b/static/idn-api/beta/schemas/BasicProvision.yaml new file mode 100644 index 000000000..da35e0702 --- /dev/null +++ b/static/idn-api/beta/schemas/BasicProvision.yaml @@ -0,0 +1,26 @@ +description: This contains the common properties for provisioning of incident, change request, or service request tickets to the Ticketing System. +required: + - request +type: object +properties: + request: + description: A request payload attributes map used to create a manual fulfillment ticket to the Ticketing System. + type: object + additionalProperties: true + example: + description: SailPoint Access Request, + req_description: The Service Request created by SailPoint ServiceNow Service Integration Module (SIM)., + req_short_description: SailPoint New Access Request Created from IdentityNow, + short_description: SailPoint Access Request $!plan.arguments.identityRequestId + requestRootElement: + description: The outermost level of the JSON element or root of a request. Optional in some Service Desk Integrations. + type: string + example: items + resource: + description: The resource URL to use to create a ticket in the Ticketing System, not including the base URL prefix. + type: string + example: /api/x_sap_sdim/sailpoint_cart_js_api/create_ticket + responseElement: + description: A JSON path expression, specifying where to obtain ticket status from a REST response. + type: string + example: result.state diff --git a/static/idn-api/beta/schemas/BearerTokenAuthConfig.yaml b/static/idn-api/beta/schemas/BearerTokenAuthConfig.yaml new file mode 100644 index 000000000..c4c35bc94 --- /dev/null +++ b/static/idn-api/beta/schemas/BearerTokenAuthConfig.yaml @@ -0,0 +1,9 @@ +type: object +properties: + bearerToken: + type: string + nullable: true + description: Bearer token + example: null +description: Config required if BEARER_TOKEN authentication is used. On response, this field is set to null as to not return secrets. + diff --git a/static/idn-api/beta/schemas/BulkTaggedObject.yaml b/static/idn-api/beta/schemas/BulkTaggedObject.yaml new file mode 100644 index 000000000..835b7758c --- /dev/null +++ b/static/idn-api/beta/schemas/BulkTaggedObject.yaml @@ -0,0 +1,24 @@ +type: object +properties: + objectRefs: + type: array + items: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + tags: + type: array + items: + type: string + description: Label to be applied to an Object + example: [ "BU_FINANCE", "PCI" ] + operation: + type: string + enum: + - APPEND + - MERGE + default: APPEND + description: >- + If APPEND, tags are appended to the list of tags for the object. A 400 error is returned if this would add duplicate tags to the object. + + + If MERGE, tags are merged with the existing tags. Duplicate tags are silently ignored. + example: MERGE diff --git a/static/idn-api/beta/schemas/BulkUpdateAuthUser.yaml b/static/idn-api/beta/schemas/BulkUpdateAuthUser.yaml new file mode 100644 index 000000000..4976e6eb1 --- /dev/null +++ b/static/idn-api/beta/schemas/BulkUpdateAuthUser.yaml @@ -0,0 +1,28 @@ +type: object +properties: + authUserPatches: + description: >- + Map of id of the auth user to a JsonPatchOperation describing what to patch on that auth user. + type: object + additionalProperties: + $ref: '../schemas/JsonPatchOperation.yaml' + example: { + "2c91808d7b98f877017ba8263dc07d54": [ + { + "op": "replace", + "path": "/capabilities", + "value": [ + "ORG_ADMIN" + ] + } + ], + "2c91808d7b98f877017ba8263dd77d5c": [ + { + "op": "replace", + "path": "/capabilities", + "value": [ + "ORG_ADMIN" + ] + } + ] + } diff --git a/static/idn-api/beta/schemas/Campaign.yaml b/static/idn-api/beta/schemas/Campaign.yaml new file mode 100644 index 000000000..f70783c65 --- /dev/null +++ b/static/idn-api/beta/schemas/Campaign.yaml @@ -0,0 +1,182 @@ +type : object +title: Campaign +allOf: + - $ref: 'SlimCampaign.yaml' + - type: object + properties: + created: + type: string + readOnly: true + format: date-time + modified: + type: string + readOnly: true + format: date-time + filter: + type: object + description: >- + Determines which items will be included in this campaign. The default campaign filter is used if this + field is left blank. + properties: + id: + type: string + description: The ID of whatever type of filter is being used. + type: + type: string + enum: + - CAMPAIGN_FILTER + sunsetCommentsRequired: + type: boolean + description: >- + Determines if comments on sunset date changes are required. + default: true + sourceOwnerCampaignInfo: + type: object + description: Must be set only if the campaign type is SOURCE_OWNER. + properties: + sourceIds: + type: array + description: The list of sources to be included in the campaign. + items: + type: string + searchCampaignInfo: + type: object + description: Must be set only if the campaign type is SEARCH. + properties: + type: + type: string + description: The type of search campaign represented. + enum: + - IDENTITY + - ACCESS + description: + type: string + description: >- + Describes this search campaign. Intended for storing the query used, and possibly the number of identities + selected/available. + reviewer: + description: >- + If specified, this identity or governance group will be the reviewer for all certifications in + this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP + allOf: + - $ref: '../../v3/schemas/BaseReferenceDto.yaml' + - type: object + query: + type: string + description: >- + The scope for the campaign. The campaign will cover identities returned by the query and identities that + have access items returned by the query. One of `query` or `identityIds` must be set. + identityIds: + type: array + description: A direct list of identities to include in this campaign. One of `identityIds` or `query` must be set. + items: + type: string + maxItems: 1000 + accessConstraints: + type: array + description: >- + Further reduces the scope of the campaign by excluding identities (from `query` or `identityIds`) that do + not have this access. + items: + $ref: './AccessConstraint.yaml' + maxItems: 1000 + required: + - type + roleCompositionCampaignInfo: + type: object + description: Optional configuration options for role composition campaigns. + properties: + reviewer: + description: >- + If specified, this identity or governance group will be the reviewer for all certifications in + this campaign. The allowed DTO types are IDENTITY and GOVERNANCE_GROUP + allOf: + - $ref: '../../v3/schemas/BaseReferenceDto.yaml' + - type: object + roleIds: + type: array + description: >- + Optional list of roles to include in this campaign. Only one of `roleIds` and `query` may be set; if + neither are set, all roles are included. + items: + type: string + remediatorRef: + type: object + description: >- + This determines who remediation tasks will be assigned to. Remediation tasks are created for each + revoke decision on items in the campaign. The only legal remediator type is 'IDENTITY', and the + chosen identity must be a Role Admin or Org Admin. + properties: + type: + type: string + enum: + - IDENTITY + id: + type: string + description: The ID of the remediator. + name: + type: string + description: The name of the remediator. + readOnly: true + required: + - type + - id + query: + type: string + description: >- + Optional search query to scope this campaign to a set of roles. Only one of `roleIds` and `query` may + be set; if neither are set, all roles are included. + description: + type: string + description: >- + Describes this role composition campaign. Intended for storing the query used, and possibly the number + of roles selected/available. + required: + - remediatorRef + alerts: + type: array + description: A list of errors and warnings that have accumulated. + readOnly: true + items: + $ref: './CampaignAlert.yaml' + totalCertifications: + type: integer + description: The total number of certifications in this campaign. + readOnly: true + completedCertifications: + type: integer + description: The number of completed certifications in this campaign. + readOnly: true + sourcesWithOrphanEntitlements: + type: array + description: >- + A list of sources in the campaign that contain \"orphan entitlements\" (entitlements without a corresponding + Managed Attribute). An empty list indicates the campaign has no orphan entitlements. Null indicates there may + be unknown orphan entitlements in the campaign (the campaign was created before this feature was implemented). + readOnly: true + items: + type: object + properties: + id: + type: string + type: + type: string + enum: + - SOURCE + name: + type: string +example: + id: 2c9079b270a266a60170a2779fcb0007 + name: Manager Campaign + description: Everyone needs to be reviewed by their manager. + created: '2020-03-03T22:15:13.611Z' + modified: '2020-03-03T22:20:12.674Z' + deadline: '2020-03-15T00:00:00.456Z' + type: MANAGER + emailNotificationEnabled: true + autoRevokeAllowed: false + recommendationsEnabled: false + status: ACTIVE + filter: + type: CAMPAIGN_FILTER + id: e0adaae69852e8fe8b8a3d48e5ce757c diff --git a/static/idn-api/beta/schemas/CampaignAlert.yaml b/static/idn-api/beta/schemas/CampaignAlert.yaml new file mode 100644 index 000000000..826a0a193 --- /dev/null +++ b/static/idn-api/beta/schemas/CampaignAlert.yaml @@ -0,0 +1,12 @@ +type : object +properties: + level: + type: string + enum: + - ERROR + - WARN + - INFO + localizations: + type: array + items: + $ref: '../../v3/schemas/ErrorMessageDto.yaml' diff --git a/static/idn-api/beta/schemas/CampaignReport.yaml b/static/idn-api/beta/schemas/CampaignReport.yaml new file mode 100644 index 000000000..52dded4c0 --- /dev/null +++ b/static/idn-api/beta/schemas/CampaignReport.yaml @@ -0,0 +1,29 @@ +type : object +title: Campaign Report +required: + - reportType +allOf: +- $ref: './ReportResultReference.yaml' +- type: object + properties: + reportType: + $ref: './ReportType.yaml' + lastRun: + type: integer + readOnly: true + format: int64 + deprecated: true + description: Date is stored in Unix Epoch time format (in milliseconds) + lastRunAt: + type: string + readOnly: true + format: date-time + description: The most recent date and time this report was run +example: + type: REPORT_RESULT + id: 2c91808568c529c60168cca6f90c1313 + name: Campaign Composition Report + status: SUCCESS + reportType: CAMPAIGN_COMPOSITION_REPORT + lastRun: 1549051761000 + lastRunAt: '2019-12-19T13:49:37.385Z' diff --git a/static/idn-api/beta/schemas/CampaignReportsConfig.yaml b/static/idn-api/beta/schemas/CampaignReportsConfig.yaml new file mode 100644 index 000000000..66ae780b7 --- /dev/null +++ b/static/idn-api/beta/schemas/CampaignReportsConfig.yaml @@ -0,0 +1,10 @@ +type : object +title: Campaign Reports Configuration +properties: + identityAttributeColumns: + type: array + items: + type: string + example: + - firstname + - lastname diff --git a/static/idn-api/beta/schemas/CampaignTemplate.yaml b/static/idn-api/beta/schemas/CampaignTemplate.yaml new file mode 100644 index 000000000..8ac87df21 --- /dev/null +++ b/static/idn-api/beta/schemas/CampaignTemplate.yaml @@ -0,0 +1,75 @@ +type: object +properties: + id: + type: string + name: + type: string + description: This template's name. Has no bearing on generated campaigns' names. + description: + type: string + description: This template's description. Has no bearing on generated campaigns' descriptions. + created: + type: string + readOnly: true + format: date-time + modified: + type: string + readOnly: true + format: date-time + scheduled: + type: boolean + readOnly: true + description: Indicates if this campaign template has been scheduled. + ownerRef: + type : object + description: >- + The owner of this template, and the owner of campaigns generated from this template via a schedule. This field + is automatically populated at creation time with the current user. + properties: + id: + type: string + type: + type: string + enum: + - IDENTITY + name: + type: string + email: + type: string + deadlineDuration: + type: string + description: >- + The time period during which the campaign should be completed, formatted as an ISO-8601 Duration. When this template + generates a campaign, the campaign's deadline will be the current date plus this duration. For example, if generation + occurred on 2020-01-01 and this field was "P2W" (two weeks), the resulting campaign's deadline would be 2020-01-15 + (the current date plus 14 days). + campaign: + $ref: './Campaign.yaml' +required: + - name + - description + - created + - modified + - campaign +example: + id: 2c9079b270a266a60170a277bb960008 + name: Manager Campaign Template + description: Template for the annual manager campaign. + created: '2020-03-05T22:44:00.364Z' + modified: '2020-03-05T22:52:09.969Z' + ownerRef: + type: IDENTITY + id: 2c918086676d3e0601677611dbde220f + email: mr.manager@example.com + name: Mister Manager + deadlineDuration: P2W + campaign: + name: "%Y Manager Campaign" + description: Everyone needs to be reviewed by their manager. + type: MANAGER + emailNotificationEnabled: true + autoRevokeAllowed: false + recommendationsEnabled: false + filter: + type: CAMPAIGN_FILTER + id: e0adaae69852e8fe8b8a3d48e5ce757c \ No newline at end of file diff --git a/static/idn-api/beta/schemas/CancelableAccountActivity.yaml b/static/idn-api/beta/schemas/CancelableAccountActivity.yaml new file mode 100644 index 000000000..a522fe48f --- /dev/null +++ b/static/idn-api/beta/schemas/CancelableAccountActivity.yaml @@ -0,0 +1,60 @@ +type : object +properties: + id: + type: string + description: ID of the account activity itself + example: 2c9180835d2e5168015d32f890ca1581 + name: + type: string + example: 2c9180835d2e5168015d32f890ca1581 + created: + type: string + format: 'date-time' + example: '2017-07-11T18:45:37.098Z' + modified: + type: string + format: 'date-time' + example: '2018-06-25T20:22:28.104Z' + completed: + type: string + format: 'date-time' + example: '2018-10-19T13:49:37.385Z' + completionStatus: + $ref: '../../v3/schemas/CompletionStatus.yaml' + type: + type: string + example: appRequest + requesterIdentitySummary: + $ref: '../../v3/schemas/IdentitySummary.yaml' + targetIdentitySummary: + $ref: '../../v3/schemas/IdentitySummary.yaml' + errors: + type: array + items: + type: string + example: ["sailpoint.connector.ConnectorException: java.lang.InterruptedException: Timeout waiting for response to message 0 from client 57a4ab97-ab3f-4aef-9fe2-0eaf15c73d26 after 60 seconds."] + warnings: + type: array + items: + type: string + example: null + items: + type: array + items: + $ref: '../../v3/schemas/AccountActivityItem.yaml' + executionStatus: + $ref: '../../v3/schemas/ExecutionStatus.yaml' + clientMetadata: + type: object + additionalProperties: + type: string + description: >- + Arbitrary key-value pairs, if any were included in the corresponding access request + cancelable: + type: boolean + description: Whether the account activity can be canceled before completion + cancelComment: + $ref: '../../v3/schemas/Comment.yaml' + + + diff --git a/static/idn-api/beta/schemas/CertificationDto.yaml b/static/idn-api/beta/schemas/CertificationDto.yaml new file mode 100644 index 000000000..aea80508f --- /dev/null +++ b/static/idn-api/beta/schemas/CertificationDto.yaml @@ -0,0 +1,70 @@ +# Replaces IdentityCertificationDto.yaml +type: object +required: +- campaignRef +- completed +- decisionsMade +- decisionsTotal +- due +- signed +- reviewer +- campaignOwner +- hasErrors +- phase +- entitiesCompleted +- entitiesTotal +properties: + campaignRef: + $ref: '../../v3/schemas/CampaignReference.yaml' + phase: + $ref: '../../v3/schemas/CertificationPhase.yaml' + due: + type: string + format: 'date-time' + description: The due date of the certification. + example: '2018-10-19T13:49:37.385Z' + signed: + type: string + format: 'date-time' + description: The date the reviewer signed off on the certification. + example: '2018-10-19T13:49:37.385Z' + reviewer: + $ref: './Reviewer.yaml' + description: A reference to the reviewer of the campaign. + reassignment: + $ref: './Reassignment.yaml' + nullable: true + description: A reference to a reviewer that this campaign has been reassigned to. + hasErrors: + type: boolean + example: false + description: Indicates it the certification has any errors. + errorMessage: + type: string + nullable: true + example: The certification has an error + description: A message indicating what the error is. + completed: + type: boolean + description: Indicates if all certification decisions have been made. + example: false + decisionsMade: + type: integer + description: The number of approve/revoke/acknowledge decisions that have been made by the reviewer. + example: 20 + format: int32 + decisionsTotal: + type: integer + description: The total number of approve/revoke/acknowledge decisions for the certification. + example: 40 + format: int32 + entitiesCompleted: + type: integer + description: The number of entities (identities, access profiles, roles, etc.) for which all decisions have been made and are complete. + example: 5 + format: int32 + entitiesTotal: + type: integer + format: int32 + description: The total number of entities (identities, access profiles, roles, etc.) in the certification, both complete and incomplete. + example: 10 diff --git a/static/idn-api/beta/schemas/CertificationItemType.yaml b/static/idn-api/beta/schemas/CertificationItemType.yaml new file mode 100644 index 000000000..dc5e072e4 --- /dev/null +++ b/static/idn-api/beta/schemas/CertificationItemType.yaml @@ -0,0 +1,11 @@ +type: string +enum: + - ENTITLEMENT + - ACCESS_PROFILE + - ROLE + - ROLE_NAME + - ROLE_DESCRIPTION + - ROLE_CRITERIA + - ROLE_CRITERIA_RULE + - ROLE_CRITERIA_MEMBER +example: ROLE diff --git a/static/idn-api/beta/schemas/CertificationReference.yaml b/static/idn-api/beta/schemas/CertificationReference.yaml new file mode 100644 index 000000000..f922102eb --- /dev/null +++ b/static/idn-api/beta/schemas/CertificationReference.yaml @@ -0,0 +1,24 @@ +description: The previous certification +type: object +allOf: +- $ref: '../../v3/schemas/BaseReferenceDto.yaml' +- type: object + properties: + reviewer: + $ref: './Reviewer.yaml' + description: Certification reviewer +properties: + type: + description: The type of object that the reviewer is. + enum: + - "CERTIFICATION" + example: CERTIFICATION +example: + reviewer: + email: reviewer@test.com + type: IDENTITY + id: 2c91808568c529c60168cca6f90c1313 + name: William Wilson + type: CERTIFICATION + id: 2c9180867921dd73017923ddd8d203ba + name: Identity Access Review for William Wilson diff --git a/static/idn-api/beta/schemas/CertificationResponse.yaml b/static/idn-api/beta/schemas/CertificationResponse.yaml new file mode 100644 index 000000000..19c3c3cb1 --- /dev/null +++ b/static/idn-api/beta/schemas/CertificationResponse.yaml @@ -0,0 +1,23 @@ +type: object +properties: + id: + type: string + description: the id of the certification + name: + type: string + description: the certification name + signedDate: + type: string + description: the date ceritification was signed + certifiers: + type: array + items: + $ref: './IdentitySummaryResponse.yaml' +example: + id: 2c91808a77ff216301782327a50f09bf + name: Cert name + signedDate: '2019-03-08T22:37:33.901Z' + certifiers: + - id: 8a80828f643d484f01643e14202e206f + name: Certifier Name + displayName: John Snow \ No newline at end of file diff --git a/static/idn-api/beta/schemas/CertificationTask.yaml b/static/idn-api/beta/schemas/CertificationTask.yaml new file mode 100644 index 000000000..f34f7441c --- /dev/null +++ b/static/idn-api/beta/schemas/CertificationTask.yaml @@ -0,0 +1,46 @@ +type: object +properties: + id: + type: string + description: The ID of the certification task. + example: 2c918086719eec070171a7e3355a360a + type: + type: string + description: The type of the certification task. More values may be added in the future. + enum: + - REASSIGN + - ADMIN_REASSIGN + - COMPLETE_CERTIFICATION + - FINISH_CERTIFICATION + - COMPLETE_CAMPAIGN + - ACTIVATE_CAMPAIGN + - CAMPAIGN_CREATE + - CAMPAIGN_DELETE + example: ADMIN_REASSIGN + targetType: + type: string + description: The type of item that is being operated on by this task whose ID is stored in the targetId field. + enum: + - CERTIFICATION + - CAMPAIGN + example: CAMPAIGN + targetId: + type: string + description: The ID of the item being operated on by this task. + example: 2c918086719eec070171a7e3355a834c + status: + type: string + description: The status of the task. + enum: + - QUEUED + - IN_PROGRESS + - SUCCESS + - ERROR + errors: + $ref: '../../v3/schemas/ErrorMessageDtoList.yaml' + description: A list of errors that have been encountered by the task. + created: + type: string + description: The date and time on which this task was created. + format: date-time + example: '2020-09-24T18:10:47.693Z' diff --git a/static/idn-api/beta/schemas/CertifierResponse.yaml b/static/idn-api/beta/schemas/CertifierResponse.yaml new file mode 100644 index 000000000..a0671e563 --- /dev/null +++ b/static/idn-api/beta/schemas/CertifierResponse.yaml @@ -0,0 +1,11 @@ +type: object +properties: + id: + type: string + description: the id of the certifier + example: 8a80828f643d484f01643e14202e206f + displayName: + type: string + description: the name of the certifier + example: John Snow + \ No newline at end of file diff --git a/static/idn-api/beta/schemas/ChangeRequest.yaml b/static/idn-api/beta/schemas/ChangeRequest.yaml new file mode 100644 index 000000000..1cf48a2e7 --- /dev/null +++ b/static/idn-api/beta/schemas/ChangeRequest.yaml @@ -0,0 +1,14 @@ +description: Details of a change request Service Desk integration +required: + - provision + - checkStatus +type: object +properties: + provision: + description: provisioning details for the change request Service Desk integration + type: object + $ref: './BasicProvision.yaml' + checkStatus: + description: check status mappings for the Service Desk integration + type: object + $ref: './CheckStatus.yaml' diff --git a/static/idn-api/beta/schemas/CheckStatus.yaml b/static/idn-api/beta/schemas/CheckStatus.yaml new file mode 100644 index 000000000..7d23b3f49 --- /dev/null +++ b/static/idn-api/beta/schemas/CheckStatus.yaml @@ -0,0 +1,38 @@ +description: A ticket close-loop fulfillment configuration. +type: object +properties: + resource: + description: The resource URL to read a ticket status from the Ticketing System, not including the base URL prefix. This may include query parameters. + type: string + example: /api/now/table/sc_request?number=$ticketId&sysparm_fields=request_state + responseElement: + description: JSON path expression specifying where to obtain ticket status from a REST response. + type: string + example: result.state + checkStatusQueryParam: + description: A map of query parameters to include on the REST request. This is optional since query parameters can also be included in the resource URL value. + type: object + additionalProperties: true + statusMap: + description: A map that relates Ticket System status to IdentityNow status, in the form of key-value (i.e. ServiceNow-IdentityNow) pairs. + type: object + additionalProperties: true + example: + closed_cancelled: Failed + closed_complete: Committed + closed_incomplete: Failed + closed_rejected: Failed + in_process: Queued + requested: Queued + statusMapClosureCode: + description: A map that relates Ticket System’s close code status to IdentityNow status. + type: object + additionalProperties: true + closureCodeResponseElement: + description: JSON path expression specifying where to obtain close code information of a ticket from the REST response. + type: string + example: result.close_code + appendTicketNumber: + description: Boolean flag indicating whether or not to append the ticket number to the URL to get status. + type: boolean + diff --git a/static/idn-api/beta/schemas/ClientLogConfiguration.yaml b/static/idn-api/beta/schemas/ClientLogConfiguration.yaml new file mode 100644 index 000000000..6f81167dc --- /dev/null +++ b/static/idn-api/beta/schemas/ClientLogConfiguration.yaml @@ -0,0 +1,34 @@ +description: Client Runtime Logging Configuration +type: object +required: + - durationMinutes + - rootLevel +properties: + clientId: + description: client ID of the Log configuration + type: string + example: aClientId + durationMinutes: + description: duration in minutes for the log configuration to remain in effect before resetting to defaults + type: integer + format: int32 + example: 120 + default: 240 + minimum: 5 + maximum: 1440 + expiration: + description: Expiration date-time of the log configuration request + example: 120 + type: string + format: date-time + rootLevel: + description: Root Log level to apply + default: INFO + example: TRACE + $ref: './StandardLevel.yaml' + logLevels: + description: Map of LogLevel by key + example: '{ + level:WARN + }' + $ref: './LogLevelSpec.yaml' diff --git a/static/idn-api/beta/schemas/ClientStatusBody.yaml b/static/idn-api/beta/schemas/ClientStatusBody.yaml new file mode 100644 index 000000000..3d8597d40 --- /dev/null +++ b/static/idn-api/beta/schemas/ClientStatusBody.yaml @@ -0,0 +1,39 @@ +description: Managed Clients Status Bodies for UI Consumption +type: object +properties: + id: + type: string + example: 1528 + description: Cloud Commander Id for the Client + alertKey: + type: string + example: NORMAL + description: Alert Key for the UI to decode into badges + description: + type: string + example: This is a client + description: description for client + internal_ip: + type: string + example: 10.0.3.90 + description: IP for the client + lastSeen: + type: string + example: 1629387264188 + description: Last Client Poll + sinceSeen: + type: string + example: 1629387264188 + description: Since Last Seen + status: + type: string + example: NORMAL + description: Status for the client + type: + type: string + example: VA + description: Type of the client can be VA, CCG, INTERNAL + ccgVersion: + type: string + example: 619 + description: CCG version of the client diff --git a/static/idn-api/beta/schemas/ClientType.yaml b/static/idn-api/beta/schemas/ClientType.yaml new file mode 100644 index 000000000..4582c0cff --- /dev/null +++ b/static/idn-api/beta/schemas/ClientType.yaml @@ -0,0 +1,6 @@ +type: string +enum: + - CONFIDENTIAL + - PUBLIC +description: Type of an API Client indicating public or confidentials use +example: "CONFIDENTIAL" diff --git a/static/idn-api/beta/schemas/ClusterSource.yaml b/static/idn-api/beta/schemas/ClusterSource.yaml new file mode 100644 index 000000000..7ca4ce95a --- /dev/null +++ b/static/idn-api/beta/schemas/ClusterSource.yaml @@ -0,0 +1,30 @@ +description: Managed Cluster Source +type: object +properties: + id: + description: Source ID + type: string + example: 540696 + name: + description: Source Name + type: string + example: EndToEnd-OpenLDAP + type: + description: Source Type + type: string + example: OpenLDAP - Direct + host: + description: Source Host + type: string + example: 10.0.2.64 + port: + description: Source Port + type: string + example: 389 + useSSL: + description: If Source Has SSL Enabled + type: string + example: false + connectorFileUploadHistory: + description: Source Connector File Upload History + $ref: './ConnectorSourcesUploadFiles.yaml' diff --git a/static/idn-api/beta/schemas/ClusterUpgradeData.yaml b/static/idn-api/beta/schemas/ClusterUpgradeData.yaml new file mode 100644 index 000000000..7b206f0db --- /dev/null +++ b/static/idn-api/beta/schemas/ClusterUpgradeData.yaml @@ -0,0 +1,21 @@ +type: object +description: Upgrade Cluster VA Configuration +required: + - id + - jobType + - vaVersion +properties: + id: + description: Unique id of the cluster + type: string + example: 2c91808876dd79120176f758af765c58 + delayMinutes: + description: Optional number of minutes to delay starting the cluster upgrade job. + type: integer + jobType: + description: Job type to be scheduled + $ref: './JobType.yaml' + vaVersion: + description: Version of the Job (cookbook) + type: string + example: va-ccg-1613404003016 diff --git a/static/idn-api/beta/schemas/CommentDto.yaml b/static/idn-api/beta/schemas/CommentDto.yaml new file mode 100644 index 000000000..1ecdce758 --- /dev/null +++ b/static/idn-api/beta/schemas/CommentDto.yaml @@ -0,0 +1,4 @@ +type: object +properties: + comment: + type: string \ No newline at end of file diff --git a/static/idn-api/beta/schemas/CommonAccessClassifyRequest.yaml b/static/idn-api/beta/schemas/CommonAccessClassifyRequest.yaml new file mode 100644 index 000000000..2e730b9e1 --- /dev/null +++ b/static/idn-api/beta/schemas/CommonAccessClassifyRequest.yaml @@ -0,0 +1,8 @@ +type: object +properties: + commonAccessItemDTOs: + type: array + items: + $ref: 'CommonAccessItemRequest.yaml' + discover: + type: boolean diff --git a/static/idn-api/beta/schemas/CommonAccessClassifyResponse.yaml b/static/idn-api/beta/schemas/CommonAccessClassifyResponse.yaml new file mode 100644 index 000000000..b66f3bce7 --- /dev/null +++ b/static/idn-api/beta/schemas/CommonAccessClassifyResponse.yaml @@ -0,0 +1,29 @@ +type: object +properties: + id: + type: string + description: Request Id for a common access classify request + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + createdDate: + type: string + format: 'date-time' + description: The date-time common access request was created. + example: '2020-09-16T18:49:32.150Z' + modifiedDate: + type: string + format: 'date-time' + description: The date-time common access request was completed. + example: '2020-09-16T18:50:12.150Z' + status: + type: string + description: Request status + enum: + - CREATED + - IN PROGRESS + - COMPLETED + - FAILED +example: + id: "c9aa02f7-86b0-4bc4-84bd-3116a6131e77" + createdDate: "2020-09-16T18:49:32.150Z" + modifiedDate: "2020-09-16T18:49:32.150Z" + status: "CREATED" diff --git a/static/idn-api/beta/schemas/CommonAccessIDStatus.yaml b/static/idn-api/beta/schemas/CommonAccessIDStatus.yaml new file mode 100644 index 000000000..5de7520aa --- /dev/null +++ b/static/idn-api/beta/schemas/CommonAccessIDStatus.yaml @@ -0,0 +1,14 @@ +type : object +properties: + confirmedIds: + description: List of confirmed common access ids. + type: array + items: + type: string + format: uuid + deniedIds: + description: List of denied common access ids. + type: array + items: + type: string + format: uuid diff --git a/static/idn-api/beta/schemas/CommonAccessItemAccess.yaml b/static/idn-api/beta/schemas/CommonAccessItemAccess.yaml new file mode 100644 index 000000000..c82486bce --- /dev/null +++ b/static/idn-api/beta/schemas/CommonAccessItemAccess.yaml @@ -0,0 +1,21 @@ +type : object +properties: + id: + type: string + description: Common access ID + type: + $ref: 'CommonAccessType.yaml' + description: Common access type (ROLE or ACCESS_PROFILE) + name: + type: string + description: Common access name + description: + type: string + description: Common access description + ownerName: + type: string + description: Common access owner name + ownerId: + type: string + description: Common access owner ID + diff --git a/static/idn-api/beta/schemas/CommonAccessItemRequest.yaml b/static/idn-api/beta/schemas/CommonAccessItemRequest.yaml new file mode 100644 index 000000000..3b39edf8f --- /dev/null +++ b/static/idn-api/beta/schemas/CommonAccessItemRequest.yaml @@ -0,0 +1,7 @@ +type: object +properties: + access: + $ref: 'CommonAccessItemAccess.yaml' + status: + $ref: 'CommonAccessItemState.yaml' + diff --git a/static/idn-api/beta/schemas/CommonAccessItemResponse.yaml b/static/idn-api/beta/schemas/CommonAccessItemResponse.yaml new file mode 100644 index 000000000..c69891dee --- /dev/null +++ b/static/idn-api/beta/schemas/CommonAccessItemResponse.yaml @@ -0,0 +1,18 @@ +type: object +properties: + id: + type: string + description: Common Access Item ID + access: + $ref: 'CommonAccessItemAccess.yaml' + status: + $ref: 'CommonAccessItemState.yaml' + lastUpdated: + type: string + reviewedByUser: + type: boolean + lastReviewed: + type: string + createdByUser: + type: string + diff --git a/static/idn-api/beta/schemas/CommonAccessItemState.yaml b/static/idn-api/beta/schemas/CommonAccessItemState.yaml new file mode 100644 index 000000000..061097682 --- /dev/null +++ b/static/idn-api/beta/schemas/CommonAccessItemState.yaml @@ -0,0 +1,3 @@ +type: string +enum: [CONFIRMED,DENIED] +description: State of common access item. diff --git a/static/idn-api/beta/schemas/CommonAccessResponse.yaml b/static/idn-api/beta/schemas/CommonAccessResponse.yaml new file mode 100644 index 000000000..2d95849dd --- /dev/null +++ b/static/idn-api/beta/schemas/CommonAccessResponse.yaml @@ -0,0 +1,19 @@ +type : object +properties: + access: + $ref: './CommonAccessItemAccess.yaml' + description: common access item + status: + type: string + description: CONFIRMED or DENIED + lastUpdated: + type: string + readOnly: true + format: date-time + reviewedByUser: + type: boolean + description: true if user has confirmed or denied status + lastReviewed: + type: string + readOnly: true + format: date-time diff --git a/static/idn-api/beta/schemas/CommonAccessType.yaml b/static/idn-api/beta/schemas/CommonAccessType.yaml new file mode 100644 index 000000000..6aff95583 --- /dev/null +++ b/static/idn-api/beta/schemas/CommonAccessType.yaml @@ -0,0 +1,4 @@ +type: string +enum: [ACCESS_PROFILE, ROLE] +description: The type of access item. + diff --git a/static/idn-api/beta/schemas/CompleteCampaignOptions.yaml b/static/idn-api/beta/schemas/CompleteCampaignOptions.yaml new file mode 100644 index 000000000..b0f27e7b9 --- /dev/null +++ b/static/idn-api/beta/schemas/CompleteCampaignOptions.yaml @@ -0,0 +1,11 @@ +type: object +properties: + autoCompleteAction: + description: + Determines whether to auto-approve(APPROVE) or auto-revoke(REVOKE) upon campaign completion. + type: string + enum: + - APPROVE + - REVOKE + default: APPROVE + example: REVOKE diff --git a/static/idn-api/beta/schemas/CompleteInvocation.yaml b/static/idn-api/beta/schemas/CompleteInvocation.yaml new file mode 100644 index 000000000..1e81b9632 --- /dev/null +++ b/static/idn-api/beta/schemas/CompleteInvocation.yaml @@ -0,0 +1,17 @@ +type: object +properties: + secret: + type: string + description: Unique invocation secret that was generated when the invocation was created. Required to authenticate to the endpoint. + example: "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde" + error: + type: string + description: The error message to indicate a failed invocation or error if any. + example: "Access request is denied." + output: + type: object + example: {"approved": false} + description: Trigger output to complete the invocation. Its schema is defined in the trigger definition. +required: + - secret + - output diff --git a/static/idn-api/beta/schemas/CompleteInvocationInput.yaml b/static/idn-api/beta/schemas/CompleteInvocationInput.yaml new file mode 100644 index 000000000..4f5009407 --- /dev/null +++ b/static/idn-api/beta/schemas/CompleteInvocationInput.yaml @@ -0,0 +1,8 @@ +type: object +properties: + localizedError: + $ref: './LocalizedMessage.yaml' + output: + type: object + example: {"approved": false} + description: Trigger output that completed the invocation. Its schema is defined in the trigger definition. diff --git a/static/idn-api/beta/schemas/CompletedApproval.yaml b/static/idn-api/beta/schemas/CompletedApproval.yaml new file mode 100644 index 000000000..c038f87ca --- /dev/null +++ b/static/idn-api/beta/schemas/CompletedApproval.yaml @@ -0,0 +1,83 @@ +type: object +properties: + id: + type: string + example: 2c938083633d259901633d25c68c00fa + description: The approval id. + name: + type: string + example: Approval Name + description: The name of the approval. + created: + type: string + format: 'date-time' + description: When the approval was created. + example: '2017-07-11T18:45:37.098Z' + modified: + type: string + format: 'date-time' + description: When the approval was modified last time. + example: '2018-07-25T20:22:28.104Z' + requestCreated: + type: string + format: 'date-time' + description: When the access-request was created. + example: '2017-07-11T18:45:35.098Z' + requestType: + $ref: '../../v3/schemas/AccessRequestType.yaml' + description: If the access-request was for granting or revoking access. + requester: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: The identity that requested the item. + requestedFor: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: The identity for whom the item is requested for. + reviewedBy: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: The identity who has reviewed the approval. + owner: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: The owner or approver of the approval. + requestedObject: + $ref: './RequestableObjectReference.yaml' + description: The requested access item. + requesterComment: + $ref: '../../v3/schemas/CommentDto.yaml' + description: The requester's comment. + reviewerComment: + $ref: '../../v3/schemas/CommentDto.yaml' + description: The approval's reviewer's comment. + previousReviewersComments: + type: array + items: + $ref: '../../v3/schemas/CommentDto.yaml' + description: The history of the previous reviewers comments. + forwardHistory: + type: array + items: + $ref: '../../v3/schemas/ApprovalForwardHistory.yaml' + description: The history of approval forward action. + commentRequiredWhenRejected: + type: boolean + example: true + description: When true the rejector has to provide comments when rejecting + state: + $ref: './CompletedApprovalState.yaml' + description: The final state of the approval + removeDate: + type: string + description: The date the role or access profile is no longer assigned to the specified identity. + format: 'date-time' + example: '2020-07-11T00:00:00Z' + removeDateUpdateRequested: + type: boolean + example: true + description: If true, then the request was to change the remove date or sunset date. + currentRemoveDate: + type: string + description: The remove date or sunset date that was assigned at the time of the request. + format: 'date-time' + example: '2020-07-11T00:00:00Z' + sodViolationContext: + $ref: './SodViolationContextCheckCompleted.yaml' + description: The details of the SOD violations for the associated approval. \ No newline at end of file diff --git a/static/idn-api/beta/schemas/CompletedApprovalState.yaml b/static/idn-api/beta/schemas/CompletedApprovalState.yaml new file mode 100644 index 000000000..ae1102cd2 --- /dev/null +++ b/static/idn-api/beta/schemas/CompletedApprovalState.yaml @@ -0,0 +1,7 @@ +type: string +enum: + - APPROVED + - REJECTED +description: >- + Enum represents completed approval object's state. +example: APPROVED diff --git a/static/idn-api/beta/schemas/ComplexRoleCriterion.yaml b/static/idn-api/beta/schemas/ComplexRoleCriterion.yaml new file mode 100644 index 000000000..10b77434e --- /dev/null +++ b/static/idn-api/beta/schemas/ComplexRoleCriterion.yaml @@ -0,0 +1,22 @@ +type: object +description: >- + Represents the role's criteria for membership. The 'children' field is recursive to create compound logical + expressions. +properties: + operation: + $ref: './Operation.yaml' + key: + $ref: './ComplexRoleCriterionKey.yaml' + value: + type: string + description: The value for the specified key + example: Allie + children: + title: Role Criteria + description: List of child role criteria objects + type: array + # There is an issue in OpenAPI displaying recursive data types (github.com/swagger-api/swagger-ui/issues/3325) + # This should reference itself, instead using description and title to provide context for object. + # Using an empty object to prevent referencing errors in the UI + items: + type: object diff --git a/static/idn-api/beta/schemas/ComplexRoleCriterionKey.yaml b/static/idn-api/beta/schemas/ComplexRoleCriterionKey.yaml new file mode 100644 index 000000000..6bb57eeaa --- /dev/null +++ b/static/idn-api/beta/schemas/ComplexRoleCriterionKey.yaml @@ -0,0 +1,22 @@ +type: object +properties: + type: + type: string + enum: + - IDENTITY + - ACCOUNT + - ENTITLEMENT + description: The type of object being used by the criterion + example: ACCOUNT + property: + type: string + description: The property for which the criteria is evaluated on + example: attribute.firstName + sourceId: + type: string + description: The ID for the source on which the property exists + example: 2c9180897194c68c01719935df1e1f5a + sourceName: + type: string + description: The name of the source on which the property exists + example: ODS-AD-Source diff --git a/static/idn-api/beta/schemas/ConfigObject.yaml b/static/idn-api/beta/schemas/ConfigObject.yaml new file mode 100644 index 000000000..8bb42d4f5 --- /dev/null +++ b/static/idn-api/beta/schemas/ConfigObject.yaml @@ -0,0 +1,13 @@ +type: object +title: Config Object for Export and Import +description: Config export and import format for individual object configurations. +properties: + version: + type: integer + description: Current version of configuration object. + example: 1 + self: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + object: + description: Object details. Format dependant on the object type. + additionalProperties: true diff --git a/static/idn-api/beta/schemas/ConflictingAccessCriteria.yaml b/static/idn-api/beta/schemas/ConflictingAccessCriteria.yaml new file mode 100644 index 000000000..c76cc4c82 --- /dev/null +++ b/static/idn-api/beta/schemas/ConflictingAccessCriteria.yaml @@ -0,0 +1,6 @@ +type: object +properties: + leftCriteria: + $ref: './AccessCriteria.yaml' + rightCriteria: + $ref: './AccessCriteria.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/ConnectorCacheConfig.yaml b/static/idn-api/beta/schemas/ConnectorCacheConfig.yaml new file mode 100644 index 000000000..4e1a32d87 --- /dev/null +++ b/static/idn-api/beta/schemas/ConnectorCacheConfig.yaml @@ -0,0 +1,11 @@ +description: Validation hashes for Application and Rule objects cached on the CCG. +type: object +properties: + Application: + type: integer + description: The high watermark timestamp for application objects cached by the CCG's persistence manager. + example: 1585001456484 + Rule: + type: integer + description: The high watermark timestamp for rule objects cached by the CCG's persistence manager. + example: 1559924590534 \ No newline at end of file diff --git a/static/idn-api/beta/schemas/ConnectorDetail.yaml b/static/idn-api/beta/schemas/ConnectorDetail.yaml new file mode 100644 index 000000000..44d595662 --- /dev/null +++ b/static/idn-api/beta/schemas/ConnectorDetail.yaml @@ -0,0 +1,49 @@ +type: object +properties: + name: + type: string + description: The connector name + example: "JDBC" + sourceConfigXml: + type: string + description: XML representation of the source config data + example: "
        \n\t
        " + sourceConfig: + type: string + description: JSON representation of the source config data + example: { + "Form": { + "Field": { + "_defaultValue": "true", + "_hidden": "true", + "_name": "cloudAuthEnabled", + "_type": "boolean", + "_value": "true" + }, + "_xmlns": "http://www.sailpoint.com/xsd/sailpoint_form_1_0.xsd", + "_connectorName": "Active Directory - Direct", + "_directConnect": "true", + "_name": "Active Directory", + "_status": "released", + "_type": "SourceConfig", + "__text": "\\n\\t" + } + } + directConnect: + type: boolean + description: true if the source is a direct connect source + example: true + fileUpload: + type: boolean + description: Connector config's file upload attribute, false if not there + example: false + uploadedFiles: + type: string + description: List of uploaded file strings for the connector + example: [] + connectorMetadata: + type: object + description: Object containing metadata pertinent to the UI to be used + example: { + "supportedUI": "EXTJS" + } diff --git a/static/idn-api/beta/schemas/ConnectorFileUploadHistory.yaml b/static/idn-api/beta/schemas/ConnectorFileUploadHistory.yaml new file mode 100644 index 000000000..a878b4e25 --- /dev/null +++ b/static/idn-api/beta/schemas/ConnectorFileUploadHistory.yaml @@ -0,0 +1,11 @@ +description: Connector File Upload History +type: object +properties: + date: + description: The date of file being uploaded + type: string + example: '2022-06-02T10:00:20.670870Z' + file: + description: connector file name + type: string + example: temp7081703651350031905mysql-connector-java-8.0.11.jar diff --git a/static/idn-api/beta/schemas/ConnectorMessage.yaml b/static/idn-api/beta/schemas/ConnectorMessage.yaml new file mode 100644 index 000000000..0033a9a2b --- /dev/null +++ b/static/idn-api/beta/schemas/ConnectorMessage.yaml @@ -0,0 +1,12 @@ +type: object +properties: + application: + type: string + description: The source name for the message. + example: "Test Active Directory" + applicationId: + type: string + description: The source id for the message. + example: "2c928091638fccc601638fcf023d02ef" + globalCacheConfig: + $ref: './ConnectorCacheConfig.yaml' diff --git a/static/idn-api/beta/schemas/ConnectorRuleCreateRequest.yaml b/static/idn-api/beta/schemas/ConnectorRuleCreateRequest.yaml new file mode 100644 index 000000000..d2660c0ee --- /dev/null +++ b/static/idn-api/beta/schemas/ConnectorRuleCreateRequest.yaml @@ -0,0 +1,60 @@ +description: ConnectorRuleCreateRequest +type: object +required: + - name + - type + - sourceCode +properties: + name: + type: string + description: the name of the rule + example: WebServiceBeforeOperationRule + description: + type: string + description: a description of the rule's purpose + example: This rule does that + type: + type: string + enum: + - BuildMap + - ConnectorAfterCreate + - ConnectorAfterDelete + - ConnectorAfterModify + - ConnectorBeforeCreate + - ConnectorBeforeDelete + - ConnectorBeforeModify + - JDBCBuildMap + - JDBCOperationProvisioning + - JDBCProvision + - PeopleSoftHRMSBuildMap + - PeopleSoftHRMSOperationProvisioning + - PeopleSoftHRMSProvision + - RACFPermissionCustomization + - SAPBuildMap + - SapHrManagerRule + - SapHrOperationProvisioning + - SapHrProvision + - SuccessFactorsOperationProvisioning + - WebServiceAfterOperationRule + - WebServiceBeforeOperationRule + description: the type of rule + example: BuildMap + signature: + description: >- + The rule's function signature. + Describes the rule's input arguments and output (if any) + type: object + required: + - input + properties: + input: + type: array + items: + $ref: './Argument.yaml' + output: + $ref: './Argument.yaml' + sourceCode: + $ref: './SourceCode.yaml' + attributes: + type: object + description: a map of string to objects diff --git a/static/idn-api/beta/schemas/ConnectorRuleResponse.yaml b/static/idn-api/beta/schemas/ConnectorRuleResponse.yaml new file mode 100644 index 000000000..d636633e9 --- /dev/null +++ b/static/idn-api/beta/schemas/ConnectorRuleResponse.yaml @@ -0,0 +1,20 @@ +description: ConnectorRuleResponse +allOf: + - $ref: './ConnectorRuleCreateRequest.yaml' + - type: object + required: + - id + - created + properties: + id: + type: string + description: the ID of the rule + example: '8113d48c0b914f17b4c6072d4dcb9dfe' + created: + type: string + description: an ISO 8601 UTC timestamp when this rule was created + example: '021-07-22T15:59:23Z' + modified: + type: string + description: an ISO 8601 UTC timestamp when this rule was last modified + example: '021-07-22T15:59:23Z' diff --git a/static/idn-api/beta/schemas/ConnectorRuleUpdateRequest.yaml b/static/idn-api/beta/schemas/ConnectorRuleUpdateRequest.yaml new file mode 100644 index 000000000..e879a4e00 --- /dev/null +++ b/static/idn-api/beta/schemas/ConnectorRuleUpdateRequest.yaml @@ -0,0 +1,12 @@ +description: ConnectorRuleUpdateRequest +allOf: + - type: object + required: + - id + properties: + id: + type: string + description: the ID of the rule to update + example: 8113d48c0b914f17b4c6072d4dcb9dfe + - $ref: './ConnectorRuleCreateRequest.yaml' + diff --git a/static/idn-api/beta/schemas/ConnectorRuleValidationResponse.yaml b/static/idn-api/beta/schemas/ConnectorRuleValidationResponse.yaml new file mode 100644 index 000000000..fa7547541 --- /dev/null +++ b/static/idn-api/beta/schemas/ConnectorRuleValidationResponse.yaml @@ -0,0 +1,34 @@ +description: ConnectorRuleValidationResponse +type: object +required: + - state + - details +properties: + state: + type: string + enum: + - OK + - ERROR + example: ERROR + details: + type: array + items: + description: CodeErrorDetail + type: object + required: + - line + - column + - message + properties: + line: + type: integer + description: The line number where the issue occurred + example: 2 + column: + type: integer + description: the column number where the issue occurred + example: 5 + messsage: + type: string + description: a description of the issue in the code + example: Remove reference to .decrypt( diff --git a/static/idn-api/beta/schemas/ConnectorSourcesUploadFiles.yaml b/static/idn-api/beta/schemas/ConnectorSourcesUploadFiles.yaml new file mode 100644 index 000000000..91caf1c2f --- /dev/null +++ b/static/idn-api/beta/schemas/ConnectorSourcesUploadFiles.yaml @@ -0,0 +1,19 @@ +description: Connector Sources Upload Files +type: object +properties: + id: + description: V3 Source Id + type: string + example: 2c918088776e36550177746ac4c71a44 + uploadHistory: + description: List of the connector upload history + type: array + items: + $ref: 'ConnectorFileUploadHistory.yaml' + example: + - file: "temp7081703651350031905mysql-connector-java-8.0.11.jar" + date: "2022-06-02T10:00:20.670870Z" + cloudExternalId: + description: CC Id, will be removed without notice when Migration to CEGS is finished + type: string + example: 540717 diff --git a/static/idn-api/beta/schemas/CorrelatedGovernanceEvent.yaml b/static/idn-api/beta/schemas/CorrelatedGovernanceEvent.yaml new file mode 100644 index 000000000..384c7f0e1 --- /dev/null +++ b/static/idn-api/beta/schemas/CorrelatedGovernanceEvent.yaml @@ -0,0 +1,43 @@ +type: object +properties: + name: + type: string + description: The name of the governance event, such as the certification name or access request ID. + example: Manager Certification for Jon Snow + dt: + type: string + description: The date that the certification or access request was completed. + example: '2019-03-08T22:37:33.901Z' + type: + type: string + enum: + - certification + - accessRequest + description: The type of governance event. + example: certification + governanceId: + type: string + description: The ID of the instance that caused the event - either the certification ID or access request ID. + example: 2c91808a77ff216301782327a50f09bf + owners: + type: array + description: The owners of the governance event (the certifiers or approvers) + items: + $ref: './CertifierResponse.yaml' + example: + - id: 8a80828f643d484f01643e14202e206f + displayName: John Snow + reviewers: + type: array + description: The owners of the governance event (the certifiers or approvers), this field should be preferred over owners + items: + $ref: './CertifierResponse.yaml' + example: + - id: 8a80828f643d484f01643e14202e206f + displayName: John Snow + decisionMaker: + description: The decision maker + $ref: './CertifierResponse.yaml' + example: + id: 8a80828f643d484f01643e14202e206f + displayName: John Snow diff --git a/static/idn-api/beta/schemas/CreateOAuthClientRequest.yaml b/static/idn-api/beta/schemas/CreateOAuthClientRequest.yaml new file mode 100644 index 000000000..5a5054566 --- /dev/null +++ b/static/idn-api/beta/schemas/CreateOAuthClientRequest.yaml @@ -0,0 +1,69 @@ +type: object +properties: + businessName: + type: string + description: The name of the business the API Client should belong to + example: Acme-Solar + homepageUrl: + type: string + description: The homepage URL associated with the owner of the API Client + example: http://localhost:12345 + name: + type: string + description: A human-readable name for the API Client + example: Demo API Client + description: + type: string + description: A description of the API Client + example: An API client used for the authorization_code, refresh_token, and client_credentials flows + accessTokenValiditySeconds: + type: string + description: The number of seconds an access token generated for this API Client is valid for + example: 750 + refreshTokenValiditySeconds: + type: string + description: The number of seconds a refresh token generated for this API Client is valid for + example: 86400 + redirectUris: + type: array + items: + type: string + description: A list of the approved redirect URIs. Provide one or more URIs when assigning the AUTHORIZATION_CODE grant type to a new OAuth Client. + example: ["http://localhost:12345"] + grantTypes: + type: array + items: + $ref: '../schemas/GrantType.yaml' + description: A list of OAuth 2.0 grant types this API Client can be used with + example: ["AUTHORIZATION_CODE", "CLIENT_CREDENTIALS", "REFRESH_TOKEN"] + accessType: + $ref: '../schemas/AccessType.yaml' + description: The access type (online or offline) of this API Client + example: "OFFLINE" + type: + $ref: '../schemas/ClientType.yaml' + description: The type of the API Client (public or confidential) + example: "CONFIDENTIAL" + internal: + type: boolean + description: An indicator of whether the API Client can be used for requests internal within the product. + example: false + enabled: + type: boolean + description: An indicator of whether the API Client is enabled for use + example: true + strongAuthSupported: + type: boolean + description: An indicator of whether the API Client supports strong authentication + example: false + claimsSupported: + type: boolean + description: An indicator of whether the API Client supports the serialization of SAML claims when used with the authorization_code flow + example: false +required: + - name + - description + - accessTokenValiditySeconds + - grantTypes + - accessType + - enabled diff --git a/static/idn-api/beta/schemas/CreateOAuthClientResponse.yaml b/static/idn-api/beta/schemas/CreateOAuthClientResponse.yaml new file mode 100644 index 000000000..1e377af49 --- /dev/null +++ b/static/idn-api/beta/schemas/CreateOAuthClientResponse.yaml @@ -0,0 +1,99 @@ +type: object +properties: + id: + type: string + description: ID of the OAuth client + example: 2c9180835d2e5168015d32f890ca1581 + secret: + type: string + description: Secret of the OAuth client (This field is only returned on the intial create call.) + example: 5c32dd9b21adb51c77794d46e71de117a1d0ddb36a7ff941fa28014ab7de2cf3 + businessName: + type: string + description: The name of the business the API Client should belong to + example: Acme-Solar + homepageUrl: + type: string + description: The homepage URL associated with the owner of the API Client + example: http://localhost:12345 + name: + type: string + description: A human-readable name for the API Client + example: Demo API Client + description: + type: string + description: A description of the API Client + example: An API client used for the authorization_code, refresh_token, and client_credentials flows + accessTokenValiditySeconds: + type: string + description: The number of seconds an access token generated for this API Client is valid for + example: 750 + refreshTokenValiditySeconds: + type: string + description: The number of seconds a refresh token generated for this API Client is valid for + example: 86400 + redirectUris: + type: array + items: + type: string + description: A list of the approved redirect URIs used with the authorization_code flow + example: ["http://localhost:12345"] + grantTypes: + type: array + items: + $ref: '../schemas/GrantType.yaml' + description: A list of OAuth 2.0 grant types this API Client can be used with + example: ["AUTHORIZATION_CODE", "CLIENT_CREDENTIALS", "REFRESH_TOKEN"] + accessType: + $ref: '../schemas/AccessType.yaml' + description: The access type (online or offline) of this API Client + example: "OFFLINE" + type: + $ref: '../schemas/ClientType.yaml' + description: The type of the API Client (public or confidential) + example: "CONFIDENTIAL" + internal: + type: boolean + description: An indicator of whether the API Client can be used for requests internal to IDN + example: false + enabled: + type: boolean + description: An indicator of whether the API Client is enabled for use + example: true + strongAuthSupported: + type: boolean + description: An indicator of whether the API Client supports strong authentication + example: false + claimsSupported: + type: boolean + description: An indicator of whether the API Client supports the serialization of SAML claims when used with the authorization_code flow + example: false + created: + type: string + format: 'date-time' + description: The date and time, down to the millisecond, when the API Client was created + example: '2017-07-11T18:45:37.098Z' + modified: + type: string + format: 'date-time' + description: The date and time, down to the millisecond, when the API Client was last updated + example: '2018-06-25T20:22:28.104Z' +required: + - id + - secret + - businessName + - homepageUrl + - name + - description + - accessTokenValiditySeconds + - refreshTokenValiditySeconds + - redirectUris + - grantTypes + - accessType + - type + - internal + - enabled + - strongAuthSupported + - claimsSupported + - created + - modified diff --git a/static/idn-api/beta/schemas/CreatePersonalAccessTokenRequest.yaml b/static/idn-api/beta/schemas/CreatePersonalAccessTokenRequest.yaml new file mode 100644 index 000000000..ad697e0ad --- /dev/null +++ b/static/idn-api/beta/schemas/CreatePersonalAccessTokenRequest.yaml @@ -0,0 +1,10 @@ +type: object +description: Object for specifying the name of a personal access token to create +properties: + name: + type: string + description: >- + The name of the personal access token (PAT) to be created. Cannot be the same as another PAT owned by the user for whom this PAT is being created. + example: "NodeJS Integration" +required: + - name diff --git a/static/idn-api/beta/schemas/CreatePersonalAccessTokenResponse.yaml b/static/idn-api/beta/schemas/CreatePersonalAccessTokenResponse.yaml new file mode 100644 index 000000000..ee3c8d2ba --- /dev/null +++ b/static/idn-api/beta/schemas/CreatePersonalAccessTokenResponse.yaml @@ -0,0 +1,28 @@ +type: object +properties: + id: + type: string + description: The ID of the personal access token (to be used as the username for Basic Auth). + example: "86f1dc6fe8f54414950454cbb11278fa" + secret: + type: string + description: The secret of the personal access token (to be used as the password for Basic Auth). + example: "1d1bef2b9f426383447f64f69349fc7cac176042578d205c256ba3f37c59adb9" + name: + type: string + description: The name of the personal access token. Cannot be the same as other personal access tokens owned by a user. + example: "NodeJS Integration" + owner: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: Details about the owner of the personal access token. + created: + type: string + format: 'date-time' + description: The date and time, down to the millisecond, when this personal access token was created. + example: '2017-07-11T18:45:37.098Z' +required: + - id + - secret + - name + - owner + - created diff --git a/static/idn-api/beta/schemas/CustomPasswordInstruction.yaml b/static/idn-api/beta/schemas/CustomPasswordInstruction.yaml new file mode 100644 index 000000000..de021b892 --- /dev/null +++ b/static/idn-api/beta/schemas/CustomPasswordInstruction.yaml @@ -0,0 +1,29 @@ +type: object +properties: + pageId: + type: string + description: The page ID that represents the page for forget user name, reset password and unlock account flow. + enum: + - change-password:enter-password + - change-password:finish + - flow-selection:select + - forget-username:user-email + - mfa:enter-code + - mfa:enter-kba + - mfa:select + - reset-password:enter-password + - reset-password:enter-username + - reset-password:finish + - unlock-account:enter-username + - unlock-account:finish + pageContent: + type: string + description: >- + The custom instructions for the specified page. Allow basic HTML format and maximum length is 1000 characters. The custom instructions will be sanitized to avoid attacks. + If the customization text includes a link, like ... clicking on this will open the link on the current browser page. + If you want your link to be redirected to a different page, please redirect it to "_blank" like this: link. This will open a new tab when the link is clicked. Notice we're only supporting _blank as the redirection target. + locale: + type: string + example: en + description: >- + The locale for the custom instructions, a BCP47 language tag. The default value is \"default\". diff --git a/static/idn-api/beta/schemas/DataPipeline.yaml b/static/idn-api/beta/schemas/DataPipeline.yaml new file mode 100644 index 000000000..9ad67092f --- /dev/null +++ b/static/idn-api/beta/schemas/DataPipeline.yaml @@ -0,0 +1,31 @@ +type: object +properties: + type: + type: string + enum: + - PGA + - STREAMING + description: The type of the data pipeline + example: STREAMING + dags: + type: array + description: List of airflow DAGs for a customer + items: + $ref: './AirflowDagDto.yaml' + example: + - id: airflow-dag-1 + runUrl: /admin/airflow/graph?dag_id=airflow-dag-1&execution_date=2020-06-02+15%3A05%3A03%2B00%3A00 + executionDate: '2020-06-02T15:05:03Z' + startDate: '2020-06-02T15:05:02Z' + lastUpdatedDate: '2020-07-02T15:05:02Z' + qualifiers: + - 20110909124646 + - 20119093434324 + - id: airflow-dag-2 + runUrl: /admin/airflow/graph?dag_id=airflow-dag-2&execution_date=2020-06-02+17%3A05%3A03%2B00%3A00 + executionDate: '2020-06-02T17:05:03Z' + startDate: '2020-06-02T17:05:02Z' + lastUpdatedDate: '2020-07-02T15:05:02Z' + qualifiers: + - 20110909124646 + - 20119093434324 diff --git a/static/idn-api/beta/schemas/DataPipelineEvent.yaml b/static/idn-api/beta/schemas/DataPipelineEvent.yaml new file mode 100644 index 000000000..6f0bfa921 --- /dev/null +++ b/static/idn-api/beta/schemas/DataPipelineEvent.yaml @@ -0,0 +1,40 @@ +type: object +properties: + timestamp: + type: string + format: 'date-time' + example: '2017-07-11T18:45:37.098Z' + type: + type: string + enum: + - IAI_PIPELINE_META + - IAI_PIPELINE_STREAMING + - IAI_PIPELINE_BATCH + - IAI_PIPELINE_ERROR + description: The type of the data pipeline event. + example: IAI_PIPELINE_STREAMING + dagId: + type: string + description: The Id of the Directed Acyclic Graph that produced the event. + example: ida-sp-one-streaming-144 + qualifier: + type: string + description: The specific run of this dag and its associated data. + example: 20110909123456 + operation: + type: string + description: The name of task/operation that produced this event + example: ProvisionFlinkCluster + status: + type: string + description: The outcome of the operation + enum: + - success + - failure + example: success + details: + type: object + additionalProperties: + type: string + description: >- + Arbitrary key-value pairs, related details of the event. diff --git a/static/idn-api/beta/schemas/DataPipelineOperation.yaml b/static/idn-api/beta/schemas/DataPipelineOperation.yaml new file mode 100644 index 000000000..e17c94cc4 --- /dev/null +++ b/static/idn-api/beta/schemas/DataPipelineOperation.yaml @@ -0,0 +1,20 @@ +type: object +properties: + timestamp: + type: string + format: 'date-time' + example: '2017-07-11T18:45:37.098Z' + operation: + type: string + description: The name of task/operation that produced this event + example: ProvisionFlinkCluster + status: + type: string + description: The outcome of the operation + enum: + - success + - failure + example: success + description: + type: string + description: description of the event and its outcome. diff --git a/static/idn-api/beta/schemas/DataPipelineQualifiers.yaml b/static/idn-api/beta/schemas/DataPipelineQualifiers.yaml new file mode 100644 index 000000000..d2c99dd96 --- /dev/null +++ b/static/idn-api/beta/schemas/DataPipelineQualifiers.yaml @@ -0,0 +1,24 @@ +type: object +properties: + qualifier: + type: string + description: The specific run of this DAG and its associated data. + example: 20110909123456 + dagId: + type: string + description: The Id of the Directed Acyclic Graph that produced the event. + example: ida-sp-one-streaming-144 + type: + type: string + enum: + - IAI_PIPELINE_META + - IAI_PIPELINE_STREAMING + - IAI_PIPELINE_BATCH + - IAI_PIPELINE_QUALIFIER_ACTIVATED + - IAI_PIPELINE_FEATURESTORE + - IAI_PIPELINE_IDENTITYGRAPH + - IAI_PIPELINE_MATERIALIZER + - IAI_PIPELINE_LOW_SIMILARITY_OUTLIERS + - IAI_PIPELINE_PEERGROUPS + description: The type of the data pipeline event. + example: IAI_PIPELINE_STREAMING \ No newline at end of file diff --git a/static/idn-api/beta/schemas/DataPipelineRelatedQualifiers.yaml b/static/idn-api/beta/schemas/DataPipelineRelatedQualifiers.yaml new file mode 100644 index 000000000..72f24660e --- /dev/null +++ b/static/idn-api/beta/schemas/DataPipelineRelatedQualifiers.yaml @@ -0,0 +1,14 @@ +type: object +properties: + sourceQualifier: + type: string + description: The specific qualifier to search for. + example: 20110909123456 + derivedQualifiers: + type: array + description: The list of related qualifiers for the given qualifier + items: + type: string + example: + - 20110909124646 + - 2011909343432 \ No newline at end of file diff --git a/static/idn-api/beta/schemas/DataPipelineSummary.yaml b/static/idn-api/beta/schemas/DataPipelineSummary.yaml new file mode 100644 index 000000000..515109aa8 --- /dev/null +++ b/static/idn-api/beta/schemas/DataPipelineSummary.yaml @@ -0,0 +1,56 @@ +type: object +properties: + created: + type: string + format: 'date-time' + example: '2021-02-25T18:45:37.098Z' + modified: + type: string + format: 'date-time' + example: '2021-03-26T18:25:34.098Z' + customerId: + type: string + description: Unique identifer of the customer + example: 534v0449-4yt0-4333-88y1-3bf1n2019c99 + qualifier: + type: string + description: The specific run of this DAG and its associated data. + example: 20110909123456 + dagId: + type: string + description: The Id of the Directed Acyclic Graph that produced the event. + example: ida-sp-one-streaming-144 + type: + type: string + enum: + - streaming + - batch + description: The type of the data pipeline. + example: streaming + hasError: + type: boolean + description: States whether or not an error has occured in the pipeline + operations: + type: array + description: Summary of events produced by the qualifier run of the DAG + items: + $ref: '../schemas/DataPipelineOperation.yaml' + example: + - timestamp: "2020-09-09T12:34:56.000Z" + operation: ProvisionFlinkCluster + status: success + description: "" + - timestamp: "2020-09-09T12:34:00.013Z" + operation: ActivateQualifier + status: failure + description: "Qualifier data checks failed" + attributes: + type: object + additionalProperties: + type: string + description: >- + Arbitrary key-value pairs, related attributes to the DAG and qualifier run. + example: + build: '668-master' + resources.cluster_size: 's' + resources.flink.sink_parallelism: '2' diff --git a/static/idn-api/beta/schemas/DecisionSummary.yaml b/static/idn-api/beta/schemas/DecisionSummary.yaml new file mode 100644 index 000000000..86a78418b --- /dev/null +++ b/static/idn-api/beta/schemas/DecisionSummary.yaml @@ -0,0 +1,17 @@ +# Replaces IdentityCertDecisionSummary.yaml +type: object +properties: + type: + $ref: './CertificationItemType.yaml' + approved: + description: Count of approval decisions for this item type. + type: integer + revoked: + description: Count of revoke decisions for this item type. + type: integer + decisionsMade: + description: Count of decisions made so far for this item type. + type: integer + decisionsTotal: + description: Count of all decisions for this item type, both made and yet-to-be-made. + type: integer diff --git a/static/idn-api/beta/schemas/DeleteCampaignsRequest.yaml b/static/idn-api/beta/schemas/DeleteCampaignsRequest.yaml new file mode 100644 index 000000000..2df36fffb --- /dev/null +++ b/static/idn-api/beta/schemas/DeleteCampaignsRequest.yaml @@ -0,0 +1,9 @@ +type : object +properties: + ids: + description: The ids of the campaigns to delete + type: array + items: + type: string + example: + ["2c9180887335cee10173490db1776c26", "2c9180836a712436016a7125a90c0021"] \ No newline at end of file diff --git a/static/idn-api/beta/schemas/EmailNotificationOption.yaml b/static/idn-api/beta/schemas/EmailNotificationOption.yaml new file mode 100644 index 000000000..7891cd1a4 --- /dev/null +++ b/static/idn-api/beta/schemas/EmailNotificationOption.yaml @@ -0,0 +1,21 @@ +type : object +properties: + notifyManagers: + type: boolean + example: true + description: If true, then the manager is notified of the lifecycle state change. + notifyAllAdmins: + type: boolean + example: true + description: If true, then all the admins are notified of the lifecycle state change. + notifySpecificUsers: + type: boolean + example: true + description: If true, then the users specified in "emailAddressList" below are notified of lifecycle state change. + emailAddressList: + type: array + example: ["test@test.com", "test2@test.com"] + items: + type: string + description: List of user email addresses. If "notifySpecificUsers" option is true, then these users are notified of lifecycle state change. + diff --git a/static/idn-api/beta/schemas/EmailRequest.yaml b/static/idn-api/beta/schemas/EmailRequest.yaml new file mode 100644 index 000000000..52fb55a6b --- /dev/null +++ b/static/idn-api/beta/schemas/EmailRequest.yaml @@ -0,0 +1,23 @@ +type: object +properties: + templateName: + type: string + description: The name of the email template to be rendered. + example: "Cloud Certification Activation" + recipientIds: + type: array + items: + type: string + description: The Identity ID's of the email recipients. + example: + - "2c928091638fccc601638fcf023d02ef" + - "2c928096641378d801641501bcce0044" + variables: + type: object + description: Variables to pass to the template engine. + example: + subject: "New access certification" + body: "A new access" + replyToAddr: "dummy@nowhere.com" + + diff --git a/static/idn-api/beta/schemas/EmailStatusDto.yaml b/static/idn-api/beta/schemas/EmailStatusDto.yaml new file mode 100644 index 000000000..a3b1f5613 --- /dev/null +++ b/static/idn-api/beta/schemas/EmailStatusDto.yaml @@ -0,0 +1,13 @@ +type: object +properties: + id: + type: string + email: + type: string + example: "sender@example.com" + verificationStatus: + type: string + enum: + - PENDING + - SUCCESS + - FAILED diff --git a/static/idn-api/beta/schemas/Entitlement.yaml b/static/idn-api/beta/schemas/Entitlement.yaml new file mode 100644 index 000000000..ab9288c07 --- /dev/null +++ b/static/idn-api/beta/schemas/Entitlement.yaml @@ -0,0 +1,82 @@ +type: object +properties: + id: + type: string + description: The entitlement id + example: "2c91808874ff91550175097daaec161c" + name: + type: string + description: The entitlement name + example: "LauncherTestGroup2" + attribute: + type: string + description: The entitlement attribute name + example: "memberOf" + value: + type: string + description: The value of the entitlement + example: "CN=LauncherTestGroup2,OU=LauncherTestOrg,OU=slpt-automation,DC=TestAutomationAD,DC=local" + sourceSchemaObjectType: + type: string + description: The object type of the entitlement from the source schema + example: "group" + description: + type: string + description: The description of the entitlement + example: "CN=LauncherTestGroup2,OU=LauncherTestOrg,OU=slpt-automation,DC=TestAutomationAD,DC=local" + privileged: + type: boolean + description: True if the entitlement is privileged + example: true + cloudGoverned: + type: boolean + description: True if the entitlement is cloud governed + example: true + created: + type: string + description: Time when the entitlement was created + format: 'date-time' + example: "2020-10-08T18:33:52.029Z" + modified: + type: string + description: Time when the entitlement was last modified + format: 'date-time' + example: "2020-10-08T18:33:52.029Z" + source: + type: object + properties: + id: + type: string + description: The source ID + example: 2c9180827ca885d7017ca8ce28a000eb + type: + type: string + description: The source type, will always be "SOURCE" + example: SOURCE + name: + type: string + description: The source name + example: ODS-AD-Source + example: + - type: 'SOURCE' + id: '2c9180835d191a86015d28455b4b232a' + name: 'HR Active Directory' + attributes: + type: object + description: A map of free-form key-value pairs from the source system + example: { "fieldName": "fieldValue"} + additionalProperties: true + segments: + type: array + items: + type: string + nullable: true + description: List of IDs of segments, if any, to which this Entitlement is assigned. + example: [ + "f7b1b8a3-5fed-4fd4-ad29-82014e137e19", + "29cb6c06-1da8-43ea-8be4-b3125f248f2a" + ] + directPermissions: + type: array + items: + $ref: './PermissionDto.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/EntitlementBulkUpdateRequest.yaml b/static/idn-api/beta/schemas/EntitlementBulkUpdateRequest.yaml new file mode 100644 index 000000000..1a98b08ef --- /dev/null +++ b/static/idn-api/beta/schemas/EntitlementBulkUpdateRequest.yaml @@ -0,0 +1,54 @@ +type: object +properties: + entitlementIds: + type: array + description: List of entitlement ids to update + maxItems: 50 + items: + type: string + example: + [ + "2c91808a7624751a01762f19d665220d", + "2c91808a7624751a01762f19d67c220e", + "2c91808a7624751a01762f19d692220f" + ] + jsonPatch: + type: array + items: + $ref: '../../v3/schemas/JsonPatchOperation.yaml' + example: + [ + { + "op": "replace", + "path": "/privileged", + "value": false + }, + { + "op": "replace", + "path": "/requestable", + "value": false + } + ] +example: + { + "entitlementIds": [ + "2c91808a7624751a01762f19d665220d", + "2c91808a7624751a01762f19d67c220e", + "2c91808a7624751a01762f19d692220f" + ], + "jsonPatch": [ + { + "op": "replace", + "path": "/privileged", + "value": false + }, + { + "op": "replace", + "path": "/requestable", + "value": false + } + ] + } +required: + - entitlementIds + - jsonPatch \ No newline at end of file diff --git a/static/idn-api/beta/schemas/EntitlementDto.yaml b/static/idn-api/beta/schemas/EntitlementDto.yaml new file mode 100644 index 000000000..51a996afc --- /dev/null +++ b/static/idn-api/beta/schemas/EntitlementDto.yaml @@ -0,0 +1,36 @@ +allOf: + - $ref: './BaseCommonDto.yaml' + - type: object + description: Entitlement object that represents entitlement + properties: + attribute: + description: Name of the entitlement attribute + type: string + example: authorizationType + value: + description: Raw value of the entitlement + type: string + example: CN=Users,dc=sailpoint,dc=com + description: + description: Entitlment description + type: string + attributes: + description: Entitlement attributes + type: object + sourceSchemaObjectType: + description: Schema objectType on the given application that maps to an Account Group + type: string + example: group + privileged: + description: Determines if this Entitlement is privileged. + type: boolean + cloudGoverned: + description: Determines if this Entitlement is goverened in the cloud. + type: boolean + source: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: Reference to the source this entitlment belongs to. + example: + - type: 'SOURCE' + id: '2c9180835d191a86015d28455b4b232a' + name: 'HR Active Directory' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/EntitlementPopularityDto.yaml b/static/idn-api/beta/schemas/EntitlementPopularityDto.yaml new file mode 100644 index 000000000..ea412625b --- /dev/null +++ b/static/idn-api/beta/schemas/EntitlementPopularityDto.yaml @@ -0,0 +1,9 @@ +type: object +properties: + attributeName: + type: string + description: the attribute name + example: "2c918085704000d90170456dae770028" + distribution: + type: object + $ref: './IdentityAttributeValueCountDto.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/EntitlementRefDto.yaml b/static/idn-api/beta/schemas/EntitlementRefDto.yaml new file mode 100644 index 000000000..1b00abbdb --- /dev/null +++ b/static/idn-api/beta/schemas/EntitlementRefDto.yaml @@ -0,0 +1,15 @@ +type: object +properties: + id: + type: string + description: the entitlement ID + example: "2c918085704000d90170456dae770028" + name: + type: string + description: the entitlement name + example: "SBS Mobile Users" + description: + type: string + description: the entitlement description + example: "VPN access" + diff --git a/static/idn-api/beta/schemas/EntitlementViewResponse.yaml b/static/idn-api/beta/schemas/EntitlementViewResponse.yaml new file mode 100644 index 000000000..b092e3a50 --- /dev/null +++ b/static/idn-api/beta/schemas/EntitlementViewResponse.yaml @@ -0,0 +1,37 @@ +type: object +properties: + attribute: + type: string + description: the native identity + value: + type: string + description: the count of the entitlements + type: + type: number + description: the count of the permissions + description: + type: string + description: the description + accountName: + type: string + description: the name of account + displayName: + type: string + description: the name of item + firstObservedDate: + type: string + description: the date when we first see this piece in current identity + dataSourceName: + type: string + description: the data source name +example: + attribute: ent_code + value: group-20180328 + type: Entitlement + description: null + sourceName: JDBC Entitlements Source + accountName: null + displayName": group-20180328 + firstObservedDate: null + dataSourceName: null + \ No newline at end of file diff --git a/static/idn-api/beta/schemas/EventBridgeConfig.yaml b/static/idn-api/beta/schemas/EventBridgeConfig.yaml new file mode 100644 index 000000000..0e3ecfec5 --- /dev/null +++ b/static/idn-api/beta/schemas/EventBridgeConfig.yaml @@ -0,0 +1,14 @@ +type: object +properties: + awsAccount: + type: string + description: AWS Account Number (12-digit number) that has the EventBridge Partner Event Source Resource. + example: "123456789012" + awsRegion: + type: string + description: AWS Region that has the EventBridge Partner Event Source Resource. See https://docs.aws.amazon.com/general/latest/gr/rande.html for a full list of available values. + example: "us-west-1" + +required: + - awsAccount + - awsRegion diff --git a/static/idn-api/beta/schemas/EventStatus.yaml b/static/idn-api/beta/schemas/EventStatus.yaml new file mode 100644 index 000000000..0531a8693 --- /dev/null +++ b/static/idn-api/beta/schemas/EventStatus.yaml @@ -0,0 +1,8 @@ +type: object +properties: + count: + type: integer + description: Count of events of topic in the event table + topic: + type: string + description: Event topic name diff --git a/static/idn-api/beta/schemas/ExportOptions.yaml b/static/idn-api/beta/schemas/ExportOptions.yaml new file mode 100644 index 000000000..3ad001771 --- /dev/null +++ b/static/idn-api/beta/schemas/ExportOptions.yaml @@ -0,0 +1,25 @@ +type: object +properties: + excludeTypes: + description: Object type names to be excluded from an sp-config export command. + type: array + items: + type: string + example: "SOURCE" + includeTypes: + description: Object type names to be included in an sp-config export command. IncludeTypes takes precedence over excludeTypes. + type: array + items: + type: string + example: "TRIGGER_SUBSCRIPTION" + objectOptions: + description: Additional options targeting specific objects related to each item in the includeTypes field + type: object + additionalProperties: + $ref: 'ObjectExportImportOptions.yaml' + example: { + "TRIGGER_SUBSCRIPTION": { + "includedIds": ["be9e116d-08e1-49fc-ab7f-fa585e96c9e4"], + "includedNames":["Test 2"] + } + } diff --git a/static/idn-api/beta/schemas/ExportPayload.yaml b/static/idn-api/beta/schemas/ExportPayload.yaml new file mode 100644 index 000000000..84092209d --- /dev/null +++ b/static/idn-api/beta/schemas/ExportPayload.yaml @@ -0,0 +1,8 @@ +type: object +allOf: + - $ref: "./ExportOptions.yaml" +properties: + description: + type: string + description: Optional user defined description/name for export job. + example: "Export Job 1 Test" diff --git a/static/idn-api/beta/schemas/Expression.yaml b/static/idn-api/beta/schemas/Expression.yaml new file mode 100644 index 000000000..b04630a4e --- /dev/null +++ b/static/idn-api/beta/schemas/Expression.yaml @@ -0,0 +1,21 @@ +type: object +properties: + operator: + type: string + description: Operator for the expression + enum: + - AND + - EQUALS + example: "EQUALS" + attribute: + type: string + description: Name for the attribute + example: "location" + value: + $ref: './Value.yaml' + children: + type: array + description: List of expressions + items: + $ref: './Value.yaml' + example: [] diff --git a/static/idn-api/beta/schemas/ExtractRequest.yaml b/static/idn-api/beta/schemas/ExtractRequest.yaml new file mode 100644 index 000000000..35ef7f9fd --- /dev/null +++ b/static/idn-api/beta/schemas/ExtractRequest.yaml @@ -0,0 +1,34 @@ +type: object +title: Extract Request +description: Request model for initiate extract from source connectors. +properties: + referenceId: + type: string + nullable: false + description: Reference ID at request initiator for tracking + format: uuid + example: 2c9180837ab5b716017ab7c6c9ef1e20 + fromUtc: + type: string + nullable: true + format: date-time + description: The start date/time for the extraction. ISO-8601 in UTC. + example: "2022-02-07T20:13:29.356648026Z" + toUtc: + type: string + nullable: true + format: date-time + description: The end date/time for the extraction. ISO-8601 in UTC. + example: "2022-02-07T20:13:29.356648026Z" + callbackUrl: + type: string + nullable: false + description: callback url for updates and completion. + example: https://your-callback-url + attributes: + type: object + nullable: true + additionalProperties: + type: string + description: map with attributes for an extract type + example: { "filters": ["USERID in (1015643,0)","TECH_STACK='AUDIT'"]} diff --git a/static/idn-api/beta/schemas/FeatureValueDto.yaml b/static/idn-api/beta/schemas/FeatureValueDto.yaml new file mode 100644 index 000000000..37457aa41 --- /dev/null +++ b/static/idn-api/beta/schemas/FeatureValueDto.yaml @@ -0,0 +1,16 @@ +type: object +properties: + feature: + type: string + description: The type of feature + example: 'department' + numerator: + type: integer + format: int32 + example: 14 + description: The number of identities that have access to the feature + denominator: + type: integer + format: int32 + example: 14 + description: The number of identities with the corresponding feature \ No newline at end of file diff --git a/static/idn-api/beta/schemas/FederationProtocolDetails.yaml b/static/idn-api/beta/schemas/FederationProtocolDetails.yaml new file mode 100644 index 000000000..46f92e30d --- /dev/null +++ b/static/idn-api/beta/schemas/FederationProtocolDetails.yaml @@ -0,0 +1,11 @@ +type: object +properties: + role: + type: string + enum: + - SAML_IDP + - SAML_SP + entityId: + type: string + description: An entity ID is a globally unique name for a SAML entity, either an Identity Provider (IDP) or a Service Provider (SP). + example: http://www.okta.com/exkdaruy8Ln5Ry7C54x6 diff --git a/static/idn-api/beta/schemas/FieldDetails.yaml b/static/idn-api/beta/schemas/FieldDetails.yaml new file mode 100644 index 000000000..ac8608bd8 --- /dev/null +++ b/static/idn-api/beta/schemas/FieldDetails.yaml @@ -0,0 +1,25 @@ +type: object +allOf: + - $ref: 'FormItemDetails.yaml' + - type: object + properties: + displayName: + type: string + description: Display name of the field + example: Field 1 + displayType: + type: string + description: Type of the field to display + example: 'checkbox' + required: + type: boolean + description: True if the field is required + allowedValuesList: + type: array + items: + type: object + description: List of allowed values for the field + example: [ {"Val1Display", "Val1Value"}, {"Val2Display", "Val2Value"}] + value: + type: object + description: Value of the field diff --git a/static/idn-api/beta/schemas/ForgotUsernameRequest.yaml b/static/idn-api/beta/schemas/ForgotUsernameRequest.yaml new file mode 100644 index 000000000..f9e84b609 --- /dev/null +++ b/static/idn-api/beta/schemas/ForgotUsernameRequest.yaml @@ -0,0 +1,6 @@ +type: object +properties: + email: + type: string + description: Auth user's email. + example: william.smith@example.com diff --git a/static/idn-api/beta/schemas/FormDetails.yaml b/static/idn-api/beta/schemas/FormDetails.yaml new file mode 100644 index 000000000..8f9f45394 --- /dev/null +++ b/static/idn-api/beta/schemas/FormDetails.yaml @@ -0,0 +1,24 @@ +type: object +properties: + id: + type: string + description: ID of the form + example: 2c9180835d2e5168015d32f890ca1581 + name: + type: string + description: Name of the form + example: AccountSelection Form + title: + type: string + description: The form title + example: Account Selection for John.Doe + subtitle: + type: string + description: The form subtitle. + example: Please select from the following + targetUser: + type: string + description: The name of the user that should be shown this form + example: Jane.Doe + sections: + $ref: './SectionDetails.yaml' diff --git a/static/idn-api/beta/schemas/FormItemDetails.yaml b/static/idn-api/beta/schemas/FormItemDetails.yaml new file mode 100644 index 000000000..7ffadeaac --- /dev/null +++ b/static/idn-api/beta/schemas/FormItemDetails.yaml @@ -0,0 +1,6 @@ +type: object +properties: + name: + type: string + description: Name of the FormItem + example: Field1 \ No newline at end of file diff --git a/static/idn-api/beta/schemas/ForwardApprovalDto.yaml b/static/idn-api/beta/schemas/ForwardApprovalDto.yaml new file mode 100644 index 000000000..c374555e7 --- /dev/null +++ b/static/idn-api/beta/schemas/ForwardApprovalDto.yaml @@ -0,0 +1,15 @@ +type: object +required: + - newOwnerId + - comment +properties: + newOwnerId: + type: string + description: The Id of the new owner + minLength: 1 + maxLength: 255 + comment: + type: string + description: The comment provided by the forwarder + minLength: 1 + maxLength: 255 diff --git a/static/idn-api/beta/schemas/FullAccount.yaml b/static/idn-api/beta/schemas/FullAccount.yaml new file mode 100644 index 000000000..9e433043a --- /dev/null +++ b/static/idn-api/beta/schemas/FullAccount.yaml @@ -0,0 +1,24 @@ +# The Full version of the Account DTO which contains data stored on the DB objects +# other than just the Account object +type: object +title: Full Account +allOf: + - $ref: './SlimAccount.yaml' + - type: object + properties: + authoritative: + type: boolean + description: Whether this account belongs to an authoritative source + example: false + systemAccount: + type: boolean + description: Whether this account is for the IdentityNow source + example: false + uncorrelated: + type: boolean + description: True if this account is not correlated to an identity + example: false + features: + type: string + description: A string list containing the owning source's features + example: 'ENABLE' diff --git a/static/idn-api/beta/schemas/GetMfaTokenRequest.yaml b/static/idn-api/beta/schemas/GetMfaTokenRequest.yaml new file mode 100644 index 000000000..2d01d3026 --- /dev/null +++ b/static/idn-api/beta/schemas/GetMfaTokenRequest.yaml @@ -0,0 +1,6 @@ +type: object +properties: + requestedFor: + type: string + description: The target for whom an MFA token is being created. Should either be an external id when called for a user or "me" when called by a user. + example: 'me' diff --git a/static/idn-api/beta/schemas/GetMfaTokenResponse.yaml b/static/idn-api/beta/schemas/GetMfaTokenResponse.yaml new file mode 100644 index 000000000..6e733b764 --- /dev/null +++ b/static/idn-api/beta/schemas/GetMfaTokenResponse.yaml @@ -0,0 +1,6 @@ +type: object +properties: + mfaToken: + type: string + description: an MFA JWT capable of calling certain sp-mfa endpoints + example: 'eyJhbGciOiJFUzI1NiJ9.eyJ0ZW5hbnRfaWQiOiI3ODA0OTRiYS1lNDQ5LTRjNjUtYjJkOC04MWQ1YWI0NzVmZDUiLCJzdWIiOiJtZmEiLCJwb2QiOiJtZWdhcG9kLXVzZWFzdDEiLCJvcmciOiJmam9yZHNob3IiLCJpZGVudGl0eV9pZCI6IjJjOTE4MDg2N2I1MGQwODgwMTdiNTU0NjYyZmIyODFlIiwidXNlcl9uYW1lIjoiYmlsbC5jb2xsaW5zIiwiaXNzIjoic3AtdG9rZW4iLCJleHAiOjE2MzIxNDk0NTUsImp0aSI6IjY1Y2U0MjFkLTdjMmItNGE1Zi05NjFkLTQ2NTgwZGQ5MWM5NSJ9.jy7dFAwy4r0uV2Yb78R6NUz5xgzIEg9k20-Wrdt1duCvn1vO8Y3fuWTz7vqKwodWppQYkzdARa7UpWxxpB0JVA' diff --git a/static/idn-api/beta/schemas/GetOAuthClientResponse.yaml b/static/idn-api/beta/schemas/GetOAuthClientResponse.yaml new file mode 100644 index 000000000..5a72afe28 --- /dev/null +++ b/static/idn-api/beta/schemas/GetOAuthClientResponse.yaml @@ -0,0 +1,94 @@ +type: object +properties: + id: + type: string + description: ID of the OAuth client + example: 2c9180835d2e5168015d32f890ca1581 + businessName: + type: string + description: The name of the business the API Client should belong to + example: Acme-Solar + homepageUrl: + type: string + description: The homepage URL associated with the owner of the API Client + example: http://localhost:12345 + name: + type: string + description: A human-readable name for the API Client + example: Demo API Client + description: + type: string + description: A description of the API Client + example: An API client used for the authorization_code, refresh_token, and client_credentials flows + accessTokenValiditySeconds: + type: string + description: The number of seconds an access token generated for this API Client is valid for + example: 750 + refreshTokenValiditySeconds: + type: string + description: The number of seconds a refresh token generated for this API Client is valid for + example: 86400 + redirectUris: + type: array + items: + type: string + description: A list of the approved redirect URIs used with the authorization_code flow + example: ["http://localhost:12345"] + grantTypes: + type: array + items: + $ref: '../schemas/GrantType.yaml' + description: A list of OAuth 2.0 grant types this API Client can be used with + example: ["AUTHORIZATION_CODE", "CLIENT_CREDENTIALS", "REFRESH_TOKEN"] + accessType: + $ref: '../schemas/AccessType.yaml' + description: The access type (online or offline) of this API Client + example: "OFFLINE" + type: + $ref: '../schemas/ClientType.yaml' + description: The type of the API Client (public or confidential) + example: "CONFIDENTIAL" + internal: + type: boolean + description: An indicator of whether the API Client can be used for requests internal to IDN + example: false + enabled: + type: boolean + description: An indicator of whether the API Client is enabled for use + example: true + strongAuthSupported: + type: boolean + description: An indicator of whether the API Client supports strong authentication + example: false + claimsSupported: + type: boolean + description: An indicator of whether the API Client supports the serialization of SAML claims when used with the authorization_code flow + example: false + created: + type: string + format: 'date-time' + description: The date and time, down to the millisecond, when the API Client was created + example: '2017-07-11T18:45:37.098Z' + modified: + type: string + format: 'date-time' + description: The date and time, down to the millisecond, when the API Client was last updated + example: '2018-06-25T20:22:28.104Z' +required: + - id + - businessName + - homepageUrl + - name + - description + - accessTokenValiditySeconds + - refreshTokenValiditySeconds + - redirectUris + - grantTypes + - accessType + - type + - internal + - enabled + - strongAuthSupported + - claimsSupported + - created + - modified diff --git a/static/idn-api/beta/schemas/GetPersonalAccessTokenResponse.yaml b/static/idn-api/beta/schemas/GetPersonalAccessTokenResponse.yaml new file mode 100644 index 000000000..5264161db --- /dev/null +++ b/static/idn-api/beta/schemas/GetPersonalAccessTokenResponse.yaml @@ -0,0 +1,23 @@ +type: object +properties: + id: + type: string + description: The ID of the personal access token (to be used as the username for Basic Auth). + example: "86f1dc6fe8f54414950454cbb11278fa" + name: + type: string + description: The name of the personal access token. Cannot be the same as other personal access tokens owned by a user. + example: "NodeJS Integration" + owner: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: Details about the owner of the personal access token. + created: + type: string + format: 'date-time' + description: The date and time, down to the millisecond, when this personal access token was created. + example: '2017-07-11T18:45:37.098Z' +required: + - id + - name + - owner + - created diff --git a/static/idn-api/beta/schemas/GetSecretResponse.yaml b/static/idn-api/beta/schemas/GetSecretResponse.yaml new file mode 100644 index 000000000..128d3db9a --- /dev/null +++ b/static/idn-api/beta/schemas/GetSecretResponse.yaml @@ -0,0 +1,14 @@ +type: object +properties: + username: + type: string + description: the username of the user for whom a TOTP secret is being generated + example: 'will.albin' + secret: + type: string + description: the cleartext secret to share with an authenticator app; referred to as a 'key' by some authenticators. + example: 'OKYZATT2GPL6SD2B' + totpUrl: + type: string + description: the TOTP URL to be passed to a QR code generator for authenticator scanning + example: 'otpauth://totp/SailPoint:will.albin?secret=OKYZATT2GPL6SD2B&issuer=SailPoint' diff --git a/static/idn-api/beta/schemas/GovernanceEventResponse.yaml b/static/idn-api/beta/schemas/GovernanceEventResponse.yaml new file mode 100644 index 000000000..66c0b9bfd --- /dev/null +++ b/static/idn-api/beta/schemas/GovernanceEventResponse.yaml @@ -0,0 +1,30 @@ +type: object +properties: + name: + type: string + description: the name of the governance event, such as the certification name or access request ID + date: + type: string + description: when the governance event occurred + type: + type: string + description: the type of instance that caused the event - either "certification" or "accessRequest" + governanceId: + type: string + description: the ID of the instance that caused the event - either the certification ID or accessRequest ID + governanceItemId: + type: string + description: the ID of the item that caused the event - either the certificationItem ID or identityRequestItem ID + owners: + type: array + items: + $ref: './OwnerResponse.yaml' +example: + name: AcctsReceivable + date: '2021-03-11T21:27:54.750Z' + type: Entitlement + governanceId: 2c91808a77ff216301782327a50f09bf + governanceItemId: 2c91808a77ff216301782327a50f09bf + owners: + - id: 2c91808a77ff216301782327a50f09bf + displayName: Approver1 \ No newline at end of file diff --git a/static/idn-api/beta/schemas/GrantType.yaml b/static/idn-api/beta/schemas/GrantType.yaml new file mode 100644 index 000000000..95cd5eddb --- /dev/null +++ b/static/idn-api/beta/schemas/GrantType.yaml @@ -0,0 +1,7 @@ +description: OAuth2 Grant Type +type: string +example: CLIENT_CREDENTIALS +enum: + - CLIENT_CREDENTIALS + - AUTHORIZATION_CODE + - REFRESH_TOKEN diff --git a/static/idn-api/beta/schemas/HttpAuthenticationType.yaml b/static/idn-api/beta/schemas/HttpAuthenticationType.yaml new file mode 100644 index 000000000..ba097f616 --- /dev/null +++ b/static/idn-api/beta/schemas/HttpAuthenticationType.yaml @@ -0,0 +1,18 @@ +type: string +description: >- + Defines the HTTP Authentication type. Additional values may be added in the future. + + + If *NO_AUTH* is selected, no extra information will be in HttpConfig. + + + If *BASIC_AUTH* is selected, HttpConfig will include BasicAuthConfig with Username and Password as strings. + + + If *BEARER_TOKEN* is selected, HttpConfig will include BearerTokenAuthConfig with Token as string. +enum: + - NO_AUTH + - BASIC_AUTH + - BEARER_TOKEN +default: NO_AUTH +example: BASIC_AUTH diff --git a/static/idn-api/beta/schemas/HttpConfig.yaml b/static/idn-api/beta/schemas/HttpConfig.yaml new file mode 100644 index 000000000..55bfec3b1 --- /dev/null +++ b/static/idn-api/beta/schemas/HttpConfig.yaml @@ -0,0 +1,18 @@ +type: object +properties: + url: + type: string + description: URL of the external/custom integration. + example: "https://www.example.com" + httpDispatchMode: + $ref: './HttpDispatchMode.yaml' + httpAuthenticationType: + $ref: './HttpAuthenticationType.yaml' + basicAuthConfig: + $ref: './BasicAuthConfig.yaml' + bearerTokenAuthConfig: + $ref: './BearerTokenAuthConfig.yaml' + +required: + - url + - httpDispatchMode diff --git a/static/idn-api/beta/schemas/HttpDispatchMode.yaml b/static/idn-api/beta/schemas/HttpDispatchMode.yaml new file mode 100644 index 000000000..6de7197f7 --- /dev/null +++ b/static/idn-api/beta/schemas/HttpDispatchMode.yaml @@ -0,0 +1,7 @@ +type: string +description: HTTP response modes, i.e. SYNC, ASYNC, or DYNAMIC. +enum: + - SYNC + - ASYNC + - DYNAMIC +example: SYNC diff --git a/static/idn-api/beta/schemas/IaiConfigurationDto.yaml b/static/idn-api/beta/schemas/IaiConfigurationDto.yaml new file mode 100644 index 000000000..ccbb96d0a --- /dev/null +++ b/static/idn-api/beta/schemas/IaiConfigurationDto.yaml @@ -0,0 +1,15 @@ +type: object +properties: + id: + type: string + description: The ID of the configuration + example: '01555555-1d31-4fc11-923a-ad448b8989f' + type: + type: string + description: The type of the configuration + example: 'idn' + attributes: + type: object + description: A map containing the configurations for a customer + additionalProperties: + type: string \ No newline at end of file diff --git a/static/idn-api/beta/schemas/IaiDataRole.yaml b/static/idn-api/beta/schemas/IaiDataRole.yaml new file mode 100644 index 000000000..056a14b19 --- /dev/null +++ b/static/idn-api/beta/schemas/IaiDataRole.yaml @@ -0,0 +1,20 @@ +type : object +properties: + name: + type: string + description: Role name + id: + type: string + description: Role ID + description: + type: string + description: Role description + ownerName: + type: string + description: Role owner name + ownerId: + type: string + description: Role owner ID + assignable: + type: boolean + description: Flag indicating whether or not the role is assignable \ No newline at end of file diff --git a/static/idn-api/beta/schemas/IaiDataRoleEntitlement.yaml b/static/idn-api/beta/schemas/IaiDataRoleEntitlement.yaml new file mode 100644 index 000000000..81f017414 --- /dev/null +++ b/static/idn-api/beta/schemas/IaiDataRoleEntitlement.yaml @@ -0,0 +1,28 @@ +type : object +properties: + name: + type: string + description: Name of the entitlement + id: + type: string + description: ID of the entitlement + description: + type: string + description: Description for the entitlement + source: + type: string + description: Source or the application for the entitlement + attribute: + type: string + description: Attribute for the entitlement + value: + type: string + description: Attribute value for the entitlement + +example: + name: "Administrator" + entitlementId: "8c190e67-87aa-4ed9-a90b-d9d5344523fb" + description: "Full administrative access to IdentityNow" + source: "IdentityNow" + attribute: "assignedGroups" + value: "ORG_ADMIN" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/IaiDataRoleEntitlementIdentity.yaml b/static/idn-api/beta/schemas/IaiDataRoleEntitlementIdentity.yaml new file mode 100644 index 000000000..b81e27d74 --- /dev/null +++ b/static/idn-api/beta/schemas/IaiDataRoleEntitlementIdentity.yaml @@ -0,0 +1,22 @@ +type : object +description: An object containing identity and its attributes intended for getting identities that have a given entitlement. +properties: + id: + type: string + description: ID for identity + name: + type: string + description: Name for identity + attributes: + type: object + additionalProperties: + type: string +example: + id: "8c190e67-87aa-4ed9-a90b-d9d5344523fb" + name: "Adam Smith" + attributes: { + "department": "Human Resources-tah-mgb-dnd", + "firstName": Adam, + "jobTitle": "Sales Analyst", + "location": "Mexico" + } diff --git a/static/idn-api/beta/schemas/IaiDataRoleIdentityEntitlement.yaml b/static/idn-api/beta/schemas/IaiDataRoleIdentityEntitlement.yaml new file mode 100644 index 000000000..a761138a1 --- /dev/null +++ b/static/idn-api/beta/schemas/IaiDataRoleIdentityEntitlement.yaml @@ -0,0 +1,39 @@ +type : object +description: An object containing entitlement metadata for a role. +properties: + name: + type: string + description: Name of the entitlement + id: + type: string + description: ID of the entitlement + description: + type: string + description: Description for the entitlement + source: + type: string + description: Source or the application for the entitlement + attribute: + type: string + description: Attribute for the entitlement + value: + type: string + description: Attribute value for the entitlement + popularityInRole: + type: number + format: double + description: The popularity of this entitlement in the given role + popularityInOrg: + type: number + format: double + description: The popularity of this entitlement in the given org + +example: + name: "Administrator" + entitlementId: "8c190e67-87aa-4ed9-a90b-d9d5344523fb" + description: "Full administrative access to IdentityNow" + source: "IdentityNow" + attribute: "assignedGroups" + value: "ORG_ADMIN" + popularity: 80.00 + popularityInOrg: 100.00 \ No newline at end of file diff --git a/static/idn-api/beta/schemas/Identity.yaml b/static/idn-api/beta/schemas/Identity.yaml new file mode 100644 index 000000000..e6e7d6f50 --- /dev/null +++ b/static/idn-api/beta/schemas/Identity.yaml @@ -0,0 +1,66 @@ +# The Identity DTO returned by the v3 identities APIs +type: object +title: IdentityDto +properties: + id: + type: string + readOnly: true + example: '6c9079b270a266a60170a2779fcb0006' + name: + type: string + description: The name of the identity + example: 'brandin.gray' + displayName: + type: string + description: The display name of the identity + example: 'Brandin Gray' + emailAddress: + type: string + description: The email address of the identity + example: 'sender@example.com' + processingState: + type: string + nullable: true + description: The processing state of the identity + enum: + -ERROR + identityStatus: + type: string + description: The identity's status in the system + enum: + - UNREGISTERED, + - REGISTERED, + - PENDING, + - WARNING, + - DISABLED, + - ACTIVE, + - DEACTIVATED, + - TERMINATED, + - ERROR, + - LOCKED + managerId: + type: string + nullable: true + description: The identity ID of the user marked as this identity's manager + example: 2c9079b270a266a60170a2779fcb0007 + isManager: + type: boolean + description: Whether this identity is marked as the manager of another identity + example: true + lastRefresh: + type: string + format: date-time + description: The last time the identity was refreshed by the system + example: '2020-11-22T15:42:31.123Z' + created: + type: string + format: date-time + description: When this identity was created + example: '2020-12-1T18:40:35.772Z' + modified: + type: string + format: date-time + description: When this identity was last modified or updated + attributes: + type: object + description: A map the identity attributes for the identity diff --git a/static/idn-api/beta/schemas/IdentityAttributeConfig.yaml b/static/idn-api/beta/schemas/IdentityAttributeConfig.yaml new file mode 100644 index 000000000..a7987afec --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityAttributeConfig.yaml @@ -0,0 +1,10 @@ +type: object +properties: + enabled: + type: boolean + description: If the profile or mapping is enabled + example: true + attributeTransforms: + type: array + items: + $ref: './IdentityAttributeTransform.yaml' diff --git a/static/idn-api/beta/schemas/IdentityAttributeDistributionDto.yaml b/static/idn-api/beta/schemas/IdentityAttributeDistributionDto.yaml new file mode 100644 index 000000000..568c193fa --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityAttributeDistributionDto.yaml @@ -0,0 +1,24 @@ +type: object +properties: + entitlementRef: + type: object + $ref: './EntitlementRefDto.yaml' + applicationName: + type: string + description: the attribute name + example: "2c918085704000d90170456dae770028" + identityCount: + type: number + description: the attribute name + example: 10 + popularity: + type: number + description: the attribute name + example: 76.92 + popularityInOrg: + type: number + description: the attribute name + example: 7 + + + diff --git a/static/idn-api/beta/schemas/IdentityAttributePreview.yaml b/static/idn-api/beta/schemas/IdentityAttributePreview.yaml new file mode 100644 index 000000000..4a746ae9b --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityAttributePreview.yaml @@ -0,0 +1,17 @@ +type: object +properties: + name: + type: string + description: Name of the attribute that is being previewed. + example: email + value: + type: object + description: Value that was derived during the preview. + example: email@mail.com + previousValue: + type: object + description: The value of the attribute before the preview. + example: oldEmail@mail.com + errorMessages: + $ref: '../../v3/schemas/ErrorMessageDtoList.yaml' + description: A list of errors that may have been encountered diff --git a/static/idn-api/beta/schemas/IdentityAttributeTransform.yaml b/static/idn-api/beta/schemas/IdentityAttributeTransform.yaml new file mode 100644 index 000000000..076b423d5 --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityAttributeTransform.yaml @@ -0,0 +1,9 @@ +type: object +properties: + identityAttributeName: + type: string + description: Name of the identity attribute + example: email + transformDefinition: + $ref: './TransformDefinition.yaml' + description: The seaspray transformation definition diff --git a/static/idn-api/beta/schemas/IdentityAttributeValueCountDto.yaml b/static/idn-api/beta/schemas/IdentityAttributeValueCountDto.yaml new file mode 100644 index 000000000..de04e97e6 --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityAttributeValueCountDto.yaml @@ -0,0 +1,10 @@ +type: object +properties: + attributeValue: + type: string + description: the value of the attribute + example: "bc693f07-e7b6-4553-9626-c25954c58554" + count: + type: number + description: the count of the attribute + example: 10 diff --git a/static/idn-api/beta/schemas/IdentityCertificationTask.yaml b/static/idn-api/beta/schemas/IdentityCertificationTask.yaml new file mode 100644 index 000000000..a7830abb7 --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityCertificationTask.yaml @@ -0,0 +1,27 @@ +type: object +properties: + id: + type: string + description: The task id + example: "abcd-ef12-3456" + certificationId: + type: string + description: The certification id + example: "ef38f94347e94562b5bb8424a56397d8" + type: + type: string + enum: + - REASSIGN + status: + type: string + enum: + - QUEUED + - IN_PROGRESS + - SUCCESS + - ERROR + errors: + type: array + items: + type: string + description: Any errors executing the task (Optional). + example: [] diff --git a/static/idn-api/beta/schemas/IdentityCertified.yaml b/static/idn-api/beta/schemas/IdentityCertified.yaml new file mode 100644 index 000000000..3d288480a --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityCertified.yaml @@ -0,0 +1,44 @@ +type: object +properties: + certificationId: + type: string + description: the id of the certification item + example: 2c91808a77ff216301782327a50f09bf + certificationName: + type: string + description: the certification item name + example: Cert name + signedDate: + type: string + description: the date ceritification was signed + example: '2019-03-08T22:37:33.901Z' + certifiers: + type: array + description: this field is deprecated and may go away + items: + $ref: './CertifierResponse.yaml' + example: + - id: 8a80828f643d484f01643e14202e206f + displayName: John Snow + reviewers: + type: array + description: The list of identities who review this certification + items: + $ref: './CertifierResponse.yaml' + example: + - id: 8a80828f643d484f01643e14202e206f + displayName: John Snow + signer: + $ref: './CertifierResponse.yaml' + description: Identity who signed off on the certification + example: + id: 8a80828f643d484f01643e14202e206f + displayName: John Snow + eventType: + type: string + description: the event type + example: IdentityCertified + dt: + type: string + description: the date of event + example: '2019-03-08T22:37:33.901Z' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/IdentityCompareResponse.yaml b/static/idn-api/beta/schemas/IdentityCompareResponse.yaml new file mode 100644 index 000000000..6ed29669a --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityCompareResponse.yaml @@ -0,0 +1,20 @@ +type : object +properties: + accessItemDiff: + type: object + description: >- + Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on + completion of the violation check. + additionalProperties: + type: object +example: + accessItemDiff: + role: + accessAdded: 2 + accessRemoved: 3 + entitlement: + accessAdded: 4 + accessRemoved: 0 + accessProfile: + accessAdded: 0 + accessRemoved: 1 \ No newline at end of file diff --git a/static/idn-api/beta/schemas/IdentityDeletedEvent.yaml b/static/idn-api/beta/schemas/IdentityDeletedEvent.yaml new file mode 100644 index 000000000..46b2a9e0d --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityDeletedEvent.yaml @@ -0,0 +1,23 @@ +type: object +properties: + account: + type: string + description: the account details + $ref: './AccessItemAccountResponse.yaml' + statusChange: + type: string + description: the status change details + $ref: './StatusChange.yaml' + eventType: + type: string + description: the event type + identityId: + type: string + description: the identity id + dt: + type: string + description: the date of event +example: + eventType: IdentityDeletedEvent + identityId: 8a80828f643d484f01643e14202e206f + dt: '2019-03-08T22:37:33.901Z' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/IdentityEntitlements.yaml b/static/idn-api/beta/schemas/IdentityEntitlements.yaml new file mode 100644 index 000000000..57a6086f7 --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityEntitlements.yaml @@ -0,0 +1,10 @@ +type: object +properties: + objectRef: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + tags: + type: array + items: + type: string + description: Labels to be applied to an Object + example: [ "BU_FINANCE", "PCI" ] \ No newline at end of file diff --git a/static/idn-api/beta/schemas/IdentityExceptionReportReference.yaml b/static/idn-api/beta/schemas/IdentityExceptionReportReference.yaml new file mode 100644 index 000000000..723f55770 --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityExceptionReportReference.yaml @@ -0,0 +1,11 @@ +type: object +properties: + taskResultId: + type: string + format: uuid + description: The id of the task result + example: 2c918086795cd09201795d5f7d7533df + reportName: + type: string + example: My annual report + description: The name of the report diff --git a/static/idn-api/beta/schemas/IdentityGroupDto.yaml b/static/idn-api/beta/schemas/IdentityGroupDto.yaml new file mode 100644 index 000000000..504f475da --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityGroupDto.yaml @@ -0,0 +1,12 @@ +type: object +properties: + id: + type: string + description: the identity group ID + example: "bc693f07-e7b6-4553-9626-c25954c58554" + identityIds: + type: array + description: the identities associated to the group + items: + type: string + example: "[bc693f07-e7b6-0000-0000-c25954c58554,bc693f07-e7b6-1111-1111-c25954c58554]" diff --git a/static/idn-api/beta/schemas/IdentityHistoryEventResponse.yaml b/static/idn-api/beta/schemas/IdentityHistoryEventResponse.yaml new file mode 100644 index 000000000..fe0f9a95d --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityHistoryEventResponse.yaml @@ -0,0 +1,11 @@ +type: object +properties: + eventType: + type: string + description: the type of event + date: + type: string + description: the date of the event +example: + evetType: 'AccessItemAssociated' + date: '2021-03-11T21:27:54.750Z' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/IdentityHistoryResponse.yaml b/static/idn-api/beta/schemas/IdentityHistoryResponse.yaml new file mode 100644 index 000000000..5f3dcefea --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityHistoryResponse.yaml @@ -0,0 +1,45 @@ +type: object +properties: + id: + type: string + description: the identity ID + example: "bc693f07e7b645539626c25954c58554" + displayName: + type: string + description: the display name of the identity + example: "Adam Zampa" + snapshot: + type: string + description: the date when the identity record was created + example: '2007-03-01T13:00:00.000Z' + deletedDate: + type: string + description: the date when the identity was deleted + example: '2007-03-01T13:00:00.000Z' + accessItemCount: + type: object + description: A map containing the count of each access item + additionalProperties: + type: string + attributes: + type: object + description: A map containing the identity attributes + additionalProperties: + type: string +example: + id: 2c9079b270a266a60170a2779fcb0007 + displayName: Lahoma Wuckert + deletedDate: null + snapshot: '2007-03-01T13:00:00.000Z' + attributes: + jobTitle: HR Manager + location: NYC + firstname: Lahoma + lastname: Wuckert + department: HR + accessItemCount: + role: 2 + accessProfile: 2 + entitlement: 28 + account: 3 + \ No newline at end of file diff --git a/static/idn-api/beta/schemas/IdentityListItem.yaml b/static/idn-api/beta/schemas/IdentityListItem.yaml new file mode 100644 index 000000000..dcb88ee86 --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityListItem.yaml @@ -0,0 +1,26 @@ +type: object +properties: + id: + type: string + description: the identity ID + example: 'bc693f07e7b645539626c25954c58554' + displayName: + type: string + description: the display name of the identity + example: 'Adam Zampa' + firstName: + type: string + description: the first name of the identity + example: 'Adam' + lastName: + type: string + description: the last name of the identity + example: 'Zampa' + active: + type: boolean + description: indicates if an identity is active or not + example: true + deletedDate: + type: string + description: the date when the identity was deleted + example: '2007-03-01T13:00:00.000Z' diff --git a/static/idn-api/beta/schemas/IdentityPreview.yaml b/static/idn-api/beta/schemas/IdentityPreview.yaml new file mode 100644 index 000000000..4295375c0 --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityPreview.yaml @@ -0,0 +1,9 @@ +type: object +properties: + identityId: + type: string + format: uuid + description: The id of the identity + example: 2c9180857893f12901789445619b0366 + identityAttributeConfig: + $ref: './IdentityAttributeConfig.yaml' diff --git a/static/idn-api/beta/schemas/IdentityPreviewRequest.yaml b/static/idn-api/beta/schemas/IdentityPreviewRequest.yaml new file mode 100644 index 000000000..beda3d108 --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityPreviewRequest.yaml @@ -0,0 +1,8 @@ +type: object +properties: + identityId: + type: string + format: uuid + example: 2c9180857893f12901789445619b0366 + identityAttributeConfig: + $ref: './IdentityAttributeConfig.yaml' diff --git a/static/idn-api/beta/schemas/IdentityPreviewResponse.yaml b/static/idn-api/beta/schemas/IdentityPreviewResponse.yaml new file mode 100644 index 000000000..37ece7ea3 --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityPreviewResponse.yaml @@ -0,0 +1,8 @@ +type: object +properties: + identity: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + previewAttributes: + type: array + items: + $ref: './IdentityAttributePreview.yaml' diff --git a/static/idn-api/beta/schemas/IdentityProfile.yaml b/static/idn-api/beta/schemas/IdentityProfile.yaml new file mode 100644 index 000000000..cd8f5a2ac --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityProfile.yaml @@ -0,0 +1,51 @@ +allOf: +- $ref: './BaseCommonDto.yaml' +- type: object + properties: + description: + type: string + description: The description of the Identity Profile. + example: My custom flat file profile + owner: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: The owner of the Identity Profile. + priority: + type: integer + format: int64 + description: The priority for an Identity Profile. + example: 10 + authoritativeSource: + type: object + properties: + type: + type: string + enum: + - SOURCE + description: Type of the object to which this reference applies + example: SOURCE + id: + type: string + description: ID of the object to which this reference applies + example: 2c9180835d191a86015d28455b4b232a + name: + type: string + description: Human-readable display name of the object to which this reference applies + example: HR Active Directory + description: The authoritative source for this Identity Profile. + identityRefreshRequired: + type: boolean + description: True if a identity refresh is needed. Typically triggered when a change on the source has been made + example: true + identityCount: + type: integer + description: The number of identities that belong to the Identity Profile. + format: int32 + example: 8 + identityAttributeConfig: + $ref: './IdentityAttributeConfig.yaml' + identityExceptionReportReference: + $ref: './IdentityExceptionReportReference.yaml' + hasTimeBasedAttr: + description: Indicates the value of requiresPeriodicRefresh attribute for the Identity Profile. + type: boolean + example: true diff --git a/static/idn-api/beta/schemas/IdentityProfileBulkDelete.yaml b/static/idn-api/beta/schemas/IdentityProfileBulkDelete.yaml new file mode 100644 index 000000000..c10b27728 --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityProfileBulkDelete.yaml @@ -0,0 +1,5 @@ +description: List of Identity Profile IDs to delete. +type: array +items: + type: string +example: ["2c9180867b2a34e0017b3078d60b0699", "2c9180867b2a34e0017b3078d60b0698"] \ No newline at end of file diff --git a/static/idn-api/beta/schemas/IdentityProfileExportedObject.yaml b/static/idn-api/beta/schemas/IdentityProfileExportedObject.yaml new file mode 100644 index 000000000..d7b35c4d5 --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityProfileExportedObject.yaml @@ -0,0 +1,11 @@ +type: object +description: Identity Profile exported object +properties: + version: + type: integer + example: 1 + description: Version or object from the target service. + self: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + object: + $ref: '../../v3/schemas/IdentityProfile.yaml' diff --git a/static/idn-api/beta/schemas/IdentityRefWithAttributes.yaml b/static/idn-api/beta/schemas/IdentityRefWithAttributes.yaml new file mode 100644 index 000000000..7fe7d570d --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityRefWithAttributes.yaml @@ -0,0 +1,15 @@ +type: object +properties: + id: + type: string + description: the identity ID + example: "ff80808144fc70f10144feb6d33400c3" + name: + type: string + description: the identity name + example: "Vemg Wefis" + attributes: + type: object + additionalProperties: + type: object + description: the attributes associated to an identity diff --git a/static/idn-api/beta/schemas/IdentityReferenceWithId.yaml b/static/idn-api/beta/schemas/IdentityReferenceWithId.yaml new file mode 100644 index 000000000..c0950b751 --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityReferenceWithId.yaml @@ -0,0 +1,9 @@ +type: object +properties: + type: + $ref: '../../v3/schemas/DtoType.yaml' + id: + type: string + description: Identity id + example: 5168015d32f890ca15812c9180835d2e + diff --git a/static/idn-api/beta/schemas/IdentityRequestItemResponse.yaml b/static/idn-api/beta/schemas/IdentityRequestItemResponse.yaml new file mode 100644 index 000000000..cc5f29d5b --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityRequestItemResponse.yaml @@ -0,0 +1,43 @@ +type: object +properties: + id: + type: string + description: the id of identity request id + operation: + type: string + description: the operation of this item (Add/Remove) + type: + type: string + description: the type of item being requested - entitlement, role + name: + type: string + description: the displayable name of the entitlement, role, etc.. + description: + type: string + description: the description of item being requested + sourceName: + type: string + description: the name of the source applications of entitlements + approverName: + type: string + description: the name of the approver - possibly null if no approval is required. Should be set even if rejected. + approverId: + type: string + description: the ID of the approver - possibly null if no approval is required + approved: + type: boolean + description: whether the item has been approved or not. False if no approval is required or if rejected is true + rejected: + type: boolean + description: Whether the item has been rejected or not. False if no approval is required of if approved is true +example: + id: 8a80828f643d484f01643e14202e206f + operation: Add + type: role + name: Role-1 + description: The role descrition + sourceName: Source1 + approverName: John Snow + approverId: 8a80828f643d484f01643e14202e2000 + approved: true + rejected: false \ No newline at end of file diff --git a/static/idn-api/beta/schemas/IdentitySnapshotSummaryResponse.yaml b/static/idn-api/beta/schemas/IdentitySnapshotSummaryResponse.yaml new file mode 100644 index 000000000..2e6bbfcc1 --- /dev/null +++ b/static/idn-api/beta/schemas/IdentitySnapshotSummaryResponse.yaml @@ -0,0 +1,6 @@ +type: object +properties: + snapshot: + type: string + description: the date when the identity record was created + example: '2007-03-01T13:00:00.000Z' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/IdentitySummaryResponse.yaml b/static/idn-api/beta/schemas/IdentitySummaryResponse.yaml new file mode 100644 index 000000000..289bbf038 --- /dev/null +++ b/static/idn-api/beta/schemas/IdentitySummaryResponse.yaml @@ -0,0 +1,15 @@ +type: object +properties: + id: + type: string + description: the id of the identity + name: + type: string + description: the name of the identity + displayName: + type: string + description: the display name of identity +example: + id: 8a80828f643d484f01643e14202e206f + name: Certifier Name + displayName: John Snow \ No newline at end of file diff --git a/static/idn-api/beta/schemas/IdentitySyncJob.yaml b/static/idn-api/beta/schemas/IdentitySyncJob.yaml new file mode 100644 index 000000000..82d7b0b80 --- /dev/null +++ b/static/idn-api/beta/schemas/IdentitySyncJob.yaml @@ -0,0 +1,27 @@ +type: object +properties: + id: + type: string + description: Job ID. + example: "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde" + status: + type: string + description: The job status. + enum: + - QUEUED + - IN_PROGRESS + - SUCCESS + - ERROR + example: "IN_PROGRESS" + payload: + description: Job payload. + $ref: './IdentitySyncPayload.yaml' + example: + { + "type": "SYNCHRONIZE_IDENTITY_ATTRIBUTES", + "dataJson": "{\"identityId\":\"2c918083746f642c01746f990884012a\"}" + } +required: + - id + - status + - payload \ No newline at end of file diff --git a/static/idn-api/beta/schemas/IdentitySyncPayload.yaml b/static/idn-api/beta/schemas/IdentitySyncPayload.yaml new file mode 100644 index 000000000..5a2a05a34 --- /dev/null +++ b/static/idn-api/beta/schemas/IdentitySyncPayload.yaml @@ -0,0 +1,13 @@ +type: object +properties: + type: + type: string + description: Payload type. + example: "SYNCHRONIZE_IDENTITY_ATTRIBUTES" + dataJson: + type: string + description: Payload type. + example: "{\"identityId\":\"2c918083746f642c01746f990884012a\"}" +required: + - type + - dataJson diff --git a/static/idn-api/beta/schemas/IdentityWithNewAccess.yaml b/static/idn-api/beta/schemas/IdentityWithNewAccess.yaml new file mode 100644 index 000000000..b5ed34931 --- /dev/null +++ b/static/idn-api/beta/schemas/IdentityWithNewAccess.yaml @@ -0,0 +1,21 @@ +description: An identity with a set of access to be added +required: + - identityId + - accessRefs +type: object +properties: + identityId: + description: Set of identity id's to be checked. + type: string + accessRefs: + description: The bundle of access profiles to be added to the identities specified. All references must be ENTITLEMENT type. + type: array + items: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + clientMetadata: + type: object + additionalProperties: + type: string + description: >- + Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on + completion of the violation check. \ No newline at end of file diff --git a/static/idn-api/beta/schemas/IdpDetails.yaml b/static/idn-api/beta/schemas/IdpDetails.yaml new file mode 100644 index 000000000..298b5f166 --- /dev/null +++ b/static/idn-api/beta/schemas/IdpDetails.yaml @@ -0,0 +1,52 @@ +allOf: + - $ref: './FederationProtocolDetails.yaml' + - type: object + description: Specification of Identity Provider Details section of Service Provider Config + properties: + binding: + type: string + description: Defines the binding used for the SAML flow. Used with IDP configurations. + example: urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST + authContext: + type: string + description: Specifies the SAML authentication method to use. Used with IDP configurations. + example: urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport + logoutUrl: + type: string + description: The IDP logout URL. Used with IDP configurations. + includeAuthContext: + type: boolean + description: Determines if the configured AuthnContext should be used or the default. Used with IDP configurations. + nameId: + type: string + description: The name id format to use. Used with IDP configurations. + example: urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress + jitConfiguration: + $ref: './JITConfiguration.yaml' + cert: + type: string + description: The Base64-encoded certificate used by the IDP. Used with IDP configurations. + loginUrlPost: + type: string + description: The IDP POST URL, used with IDP HTTP-POST bindings for IDP-initiated logins. Used with IDP configurations. + example: https://dev-157216.okta.com/app/sailpointdev157216_cdovsaml_1/exkdaruy8Ln5Ry7C54x6/sso/saml + loginUrlRedirect: + type: string + description: The IDP Redirect URL. Used with IDP configurations. + example: https://dev-157216.okta.com/app/sailpointdev157216_cdovsaml_1/exkdaruy8Ln5Ry7C54x6/sso/saml + mappingAttribute: + type: string + description: Return the saml Id for the given user, based on the IDN as SP settings of the org. Used with IDP configurations. + example: email + role: + type: string + enum: + - SAML_IDP + certificateExpirationDate: + type: string + description: The expiration date extracted from the certificate. + example: Fri Mar 08 08:54:24 UTC 2013 + certificateName: + type: string + description: The name extracted from the certificate. + example: OU=Conext, O=Surfnet, L=Utrecht, ST=Utrecht, C=NL diff --git a/static/idn-api/beta/schemas/ImportOptions.yaml b/static/idn-api/beta/schemas/ImportOptions.yaml new file mode 100644 index 000000000..67d1e5574 --- /dev/null +++ b/static/idn-api/beta/schemas/ImportOptions.yaml @@ -0,0 +1,30 @@ +type: object +properties: + excludeTypes: + description: Object type names to be excluded from an sp-config export command. + type: array + items: + type: string + example: "SOURCE" + includeTypes: + description: Object type names to be included in an sp-config export command. IncludeTypes takes precedence over excludeTypes. + type: array + items: + type: string + example: "TRIGGER_SUBSCRIPTION" + objectOptions: + description: Additional options targeting specific objects related to each item in the includeTypes field + type: object + additionalProperties: + $ref: 'ObjectExportImportOptions.yaml' + example: { + "TRIGGER_SUBSCRIPTION": { + "includedIds": ["be9e116d-08e1-49fc-ab7f-fa585e96c9e4"], + "includedNames":["Test 2"] + } + } + defaultReferences: + description: List of BaseRefenceDtos that can be used to resolve references on import. + type: array + items: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' diff --git a/static/idn-api/beta/schemas/Incident.yaml b/static/idn-api/beta/schemas/Incident.yaml new file mode 100644 index 000000000..ded906136 --- /dev/null +++ b/static/idn-api/beta/schemas/Incident.yaml @@ -0,0 +1,14 @@ +description: Details of an incident Service Desk integration +required: + - provision + - checkStatus +type: object +properties: + provision: + description: provisioning details for the incident Service Desk integration + type: object + $ref: './BasicProvision.yaml' + checkStatus: + description: check status mappings for the Service Desk integration + type: object + $ref: './CheckStatus.yaml' diff --git a/static/idn-api/beta/schemas/InlineConfig.yaml b/static/idn-api/beta/schemas/InlineConfig.yaml new file mode 100644 index 000000000..3b6a8fe03 --- /dev/null +++ b/static/idn-api/beta/schemas/InlineConfig.yaml @@ -0,0 +1,11 @@ +description: This configuration is required only when the subscription type is INLINE. +type: object +properties: + error: + type: string + description: An error message. + example: "Access is denied" + output: + type: object + description: The details of the inline configuration. + example: {"accessRequestId": "1234"} diff --git a/static/idn-api/beta/schemas/InternalIdentityDto.yaml b/static/idn-api/beta/schemas/InternalIdentityDto.yaml new file mode 100644 index 000000000..056a84c7f --- /dev/null +++ b/static/idn-api/beta/schemas/InternalIdentityDto.yaml @@ -0,0 +1,13 @@ +type: object +properties: + id: + type: string + description: The identity ID + example: "2c9079b270a266a60170a277bb960008" + internalCloudStatus: + type: string + description: Internal cloud status of identity. + example: "UNREGISTERED" +required: + - id + - internalCloudStatus diff --git a/static/idn-api/beta/schemas/Invocation.yaml b/static/idn-api/beta/schemas/Invocation.yaml new file mode 100644 index 000000000..2b3405004 --- /dev/null +++ b/static/idn-api/beta/schemas/Invocation.yaml @@ -0,0 +1,18 @@ +type: object +properties: + id: + type: string + description: Invocation ID + example: "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde" + triggerId: + type: string + description: Trigger ID + example: "idn:access-requested" + secret: + type: string + description: Unique invocation secret. + example: "0f979022-08be-44f2-b6f9-7393ec73ed9b" + contentJson: + type: object + example: {"workflowId": 1234} + description: JSON map of invocation metadata. diff --git a/static/idn-api/beta/schemas/InvocationStatus.yaml b/static/idn-api/beta/schemas/InvocationStatus.yaml new file mode 100644 index 000000000..59a90d954 --- /dev/null +++ b/static/idn-api/beta/schemas/InvocationStatus.yaml @@ -0,0 +1,40 @@ +type: object +required: +- id +- triggerId +- subscriptionId +- startInvocationInput +- type +- subscriptionName +- created +properties: + id: + type: string + description: Invocation ID + example: "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde" + triggerId: + type: string + description: Trigger ID + example: "idn:access-requested" + subscriptionId: + type: string + description: Subscription ID + example: "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde" + type: + $ref: './InvocationStatusType.yaml' + created: + type: string + format: date-time + description: Invocation created timestamp. ISO-8601 in UTC. + example: "2020-03-27T20:40:10.738Z" + completed: + type: string + format: date-time + description: Invocation completed timestamp; empty fields imply invocation is in-flight or not completed. ISO-8601 in UTC. + example: "2020-03-27T20:42:14.738Z" + startInvocationInput: + $ref: './StartInvocationInput.yaml' + description: Data related to start of trigger invocation. + completeInvocationInput: + $ref: './CompleteInvocationInput.yaml' + description: Data related to end of trigger invocation. diff --git a/static/idn-api/beta/schemas/InvocationStatusType.yaml b/static/idn-api/beta/schemas/InvocationStatusType.yaml new file mode 100644 index 000000000..d15f2e9dc --- /dev/null +++ b/static/idn-api/beta/schemas/InvocationStatusType.yaml @@ -0,0 +1,14 @@ +type: string +description: >- + Defines the Invocation type. + + + **TEST** The trigger was invocated as a test, either via the test subscription button in the UI or via the start test invocation API. + + + **REAL_TIME** The trigger subscription is live and was invocated by a real event in IdentityNow. + +enum: + - TEST + - REAL_TIME +example: TEST diff --git a/static/idn-api/beta/schemas/JITConfiguration.yaml b/static/idn-api/beta/schemas/JITConfiguration.yaml new file mode 100644 index 000000000..65f434dd9 --- /dev/null +++ b/static/idn-api/beta/schemas/JITConfiguration.yaml @@ -0,0 +1,18 @@ +type: object +properties: + enabled: + type: boolean + description: The indicator for just-in-time provisioning enabled + sourceId: + type: string + description: the sourceId that mapped to just-in-time provisioning configuration + example: 2c9180857377ed2901739c12a2da5ac8 + sourceAttributeMappings: + type: object + additionalProperties: + type: string + description: a mapping of JIT source attributes to the SAML assertion attribute + example: + firstName: okta.firstName + lastName: okta.lastName + email: okta.email diff --git a/static/idn-api/beta/schemas/JobState.yaml b/static/idn-api/beta/schemas/JobState.yaml new file mode 100644 index 000000000..e033286a7 --- /dev/null +++ b/static/idn-api/beta/schemas/JobState.yaml @@ -0,0 +1,16 @@ +type: string +description: Job State +example: 'INPROGRESS' +enum: + - PENDING + - INPROGRESS + - FINISHED + - GENERAL_ERROR + - INVALID_JOB_TYPE + - ABORTED + - ACKNOWLEDGED_FAILURE + - READY + - POLL + - EXPIRED + - PAUSED + - SKIPPED diff --git a/static/idn-api/beta/schemas/JobType.yaml b/static/idn-api/beta/schemas/JobType.yaml new file mode 100644 index 000000000..6ddc20ed2 --- /dev/null +++ b/static/idn-api/beta/schemas/JobType.yaml @@ -0,0 +1,9 @@ +type: string +description: Job Type +example: 'VA_UPGRADE' +enum: + - VA_UPGRADE + - VA_REBOOT + - VA_RELOAD + - VA_PACKAGE_UPGRADE + - VA_ENABLE_SAP diff --git a/static/idn-api/beta/schemas/JsonPatch.yaml b/static/idn-api/beta/schemas/JsonPatch.yaml new file mode 100644 index 000000000..f42dbf667 --- /dev/null +++ b/static/idn-api/beta/schemas/JsonPatch.yaml @@ -0,0 +1,16 @@ +type: object +description: A JSONPatch document as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902) +properties: + operations: + description: Operations to be applied + type: array + items: + $ref: './JsonPatchOperation.yaml' +example: >- + [ + { + "op": "replace", + "path": "/description", + "value": "A new description" + } + ] \ No newline at end of file diff --git a/static/idn-api/beta/schemas/JsonPatchOperation.yaml b/static/idn-api/beta/schemas/JsonPatchOperation.yaml new file mode 100644 index 000000000..68a96af07 --- /dev/null +++ b/static/idn-api/beta/schemas/JsonPatchOperation.yaml @@ -0,0 +1,34 @@ +type: object +description: A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902) +required: + - "op" + - "path" +properties: + op: + type: string + description: The operation to be performed + enum: + - "add" + - "remove" + - "replace" + - "move" + - "copy" + - "test" + example: "replace" + path: + type: string + description: A string JSON Pointer representing the target path to an element to be affected by the operation + example: "/description" + value: + anyOf: + - type: string + - type: integer + - type: object + - type: array + items: + anyOf: + - type: string + - type: integer + - type: object + description: The value to be used for the operation, required for "add" and "replace" operations + example: "New description" diff --git a/static/idn-api/beta/schemas/LatestOutlierSummary.yaml b/static/idn-api/beta/schemas/LatestOutlierSummary.yaml new file mode 100644 index 000000000..d3c0ea306 --- /dev/null +++ b/static/idn-api/beta/schemas/LatestOutlierSummary.yaml @@ -0,0 +1,28 @@ +type : object +properties: + type: + type: string + enum: + - LOW_SIMILARITY + - STRUCTURAL + description: The type of outlier summary + example: LOW_SIMILARITY + snapshotDate: + type: string + format: date-time + description: The date the bulk outlier detection ran/snapshot was created + example: "2021-05-01T18:40:35.772Z" + totalOutliers: + type: integer + description: Total number of outliers for the customer making the request + example: 50 + totalIdentities: + type: integer + description: Total number of identities for the customer making the request + example: 5000 + totalIgnored: + type: integer + description: Total number of ignored outliers + example: 10 + + diff --git a/static/idn-api/beta/schemas/LifecycleState.yaml b/static/idn-api/beta/schemas/LifecycleState.yaml new file mode 100644 index 000000000..a2340c16c --- /dev/null +++ b/static/idn-api/beta/schemas/LifecycleState.yaml @@ -0,0 +1,55 @@ +type : object +properties: + id: + type: string + readOnly: true + example: 2c9180835d2e5168015d32f890ca1581 + description: lifecycle stat id. + name: + type: string + readOnly: true + example: Lifecycle Name + description: Lifecycle-state name. + technicalName: + type: string + readOnly: true + example: lifecycleTechnicalName + description: The technical name for lifecycle state. This is for internal use. + description: + type: string + example: LifecycleDescription + description: Lifecycle state description. + created: + type: string + readOnly: true + format: date-time + example: 2015-05-28T14:07:17Z + description: Lifecycle state created date. + modified: + type: string + readOnly: true + format: date-time + example: 2015-05-28T14:07:17Z + description: Lifecycle state modified date. + enabled: + type: boolean + example: true + description: Whether the lifecycle state is enabled or disabled. + identityCount: + type: integer + format: int32 + readOnly: true + example: 12 + description: Number of identities that have the lifecycle state. + emailNotificationOption: + $ref: 'EmailNotificationOption.yaml' + accountActions: + type: array + items: + $ref: 'AccountAction.yaml' + accessProfileIds: + type: array + items: + type: string + example: ["2c918084660f45d6016617daa9210584", "2c918084660f45d6016617daa9210500"] + description: List of access-profile IDs that are associated with the lifecycle state. diff --git a/static/idn-api/beta/schemas/LocalizedMessage.yaml b/static/idn-api/beta/schemas/LocalizedMessage.yaml new file mode 100644 index 000000000..97f271b6c --- /dev/null +++ b/static/idn-api/beta/schemas/LocalizedMessage.yaml @@ -0,0 +1,14 @@ +type: object +description: Localized error message to indicate a failed invocation or error if any. +required: +- "locale" +- "message" +properties: + locale: + description: Message locale + type: string + example: "An error has occurred!" + message: + description: Message text + type: string + example: "Error has occurred!" diff --git a/static/idn-api/beta/schemas/LockoutConfiguration.yaml b/static/idn-api/beta/schemas/LockoutConfiguration.yaml new file mode 100644 index 000000000..2eb46169b --- /dev/null +++ b/static/idn-api/beta/schemas/LockoutConfiguration.yaml @@ -0,0 +1,14 @@ +type: object +properties: + maximumAttempts: + type: integer + description: The maximum attempts allowed before lockout occurs. + example: 5 + lockoutDuration: + type: integer + description: The total time in minutes a user will be locked out. + example: 15 + lockoutWindow: + type: integer + description: A rolling window where authentication attempts in a series count towards the maximum before lockout occurs. + example: 5 diff --git a/static/idn-api/beta/schemas/LogLevelSpec.yaml b/static/idn-api/beta/schemas/LogLevelSpec.yaml new file mode 100644 index 000000000..97fb727e5 --- /dev/null +++ b/static/idn-api/beta/schemas/LogLevelSpec.yaml @@ -0,0 +1,6 @@ +description: Mapping of identifiers to Standard Log Level values +type: object +additionalProperties: + default: INFO + example: TRACE + $ref: './StandardLevel.yaml' diff --git a/static/idn-api/beta/schemas/ManagedClient.yaml b/static/idn-api/beta/schemas/ManagedClient.yaml new file mode 100644 index 000000000..4f4b2e42f --- /dev/null +++ b/static/idn-api/beta/schemas/ManagedClient.yaml @@ -0,0 +1,83 @@ +description: Managed Client +type: object +required: + - clientId + - clusterId + - description + - type +properties: + id: + description: ManagedClient ID + readOnly: true + type: string + example: aClientId + alertKey: + description: ManagedClient alert key + readOnly: true + type: string + example: anAlertKey + apiGatewayBaseUrl: + description: ManagedClient gateway base url + readOnly: true + type: string + example: https://denali-xxx.api.cloud.sailpoint.com + ccId: + description: Previous CC ID to be used in data migration. (This field will be deleted after CC migration!) + type: integer + example: 2248 + clientId: + description: The client ID used in API management + type: string + example: aClientApiId + clusterId: + description: Cluster ID that the ManagedClient is linked to + type: string + example: aClusterId + cookbook: + description: VA cookbook + readOnly: true + type: string + example: va-cookbook-info + description: + description: ManagedClient description + type: string + example: A short description of the ManagedClient + ipAddress: + description: The public IP address of the ManagedClient + readOnly: true + type: string + example: 123.456.78.90 + lastSeen: + description: When the ManagedClient was last seen by the server + readOnly: true + type: string + format: date-time + example: "2020-01-01T00:00:00.000000Z" + name: + description: ManagedClient name + type: string + example: aName + sinceLastSeen: + description: Milliseconds since the ManagedClient has polled the server + readOnly: true + type: string + example: 15000 + status: + description: Status of the ManagedClient + readOnly: true + allOf: + - $ref: './ManagedClientStatusEnum.yaml' + type: + description: Type of the ManagedClient (VA, CCG) + type: string + example: VA + vaDownloadUrl: + description: ManagedClient VA download URL + readOnly: true + type: string + example: aUrl + vaVersion: + description: Version that the ManagedClient's VA is running + readOnly: true + type: string + example: va-megapod-useast1-610-1621372012 diff --git a/static/idn-api/beta/schemas/ManagedClientStatus.yaml b/static/idn-api/beta/schemas/ManagedClientStatus.yaml new file mode 100644 index 000000000..73e9e9aee --- /dev/null +++ b/static/idn-api/beta/schemas/ManagedClientStatus.yaml @@ -0,0 +1,46 @@ +description: Managed Client Status +type: object +required: + - body + - status + - type + - timestamp +properties: + body: + description: ManagedClientStatus body information + type: object + example: { + "alertKey": "", + "id": "5678", + "clusterId": "1234", + "ccg_etag": "ccg_etag123xyz456", + "ccg_pin": "NONE", + "cookbook_etag": "20210420125956-20210511144538", + "hostname": "megapod-useast1-secret-hostname.sailpoint.com", + "internal_ip": "127.0.0.1", + "lastSeen": "1620843964604", + "sinceSeen": "14708", + "sinceSeenMillis": "14708", + "localDev": false, + "stacktrace": "", + "state": null, + "status": "NORMAL", + "uuid": null, + "product": "idn", + "va_version": null, + "platform_version": "2", + "os_version": "2345.3.1", + "os_type": "flatcar", + "hypervisor": "unknown" + } + status: + description: status of the Managed Client + $ref: './ManagedClientStatusEnum.yaml' + type: + description: type of the Managed Client + $ref: './ManagedClientType.yaml' + timestamp: + description: timestamp on the Client Status update + type: string + format: date-time + example: "2020-01-01T00:00:00.000000Z" diff --git a/static/idn-api/beta/schemas/ManagedClientStatusAggResponse.yaml b/static/idn-api/beta/schemas/ManagedClientStatusAggResponse.yaml new file mode 100644 index 000000000..bef3cc94f --- /dev/null +++ b/static/idn-api/beta/schemas/ManagedClientStatusAggResponse.yaml @@ -0,0 +1,150 @@ +description: Managed Client Status +type: object +required: + - body + - status + - type + - timestamp +properties: + body: + description: ManagedClientStatus body information + type: object + example: { + "body": { + "id": "1528", + "clientId": "1528", + "clusterId": "1533", + "orgType": "test", + "vaDownloadUrl": "https://sptcbu-va-images.s3.amazonaws.com/va-latest.zip", + "clusterJobCount": 1, + "configuration": { + "clusterType": "sqsCluster", + "clusterExternalId": "2c91808876dd79120176f758af765c58", + "debug": "false", + "failureThreshold": "0", + "gmtOffset": "-6", + "scheduleUpgrade": "false", + "va_version": "va-megapod-useast1-595-1627543540", + "jobType": "VA_UPGRADE", + "cookbook": "va-megapod-useast1-595-1627543540" + }, + "connectorServices": [ + { + "id": "540696", + "name": "EndToEnd-ADSource", + "connector_host": "host.example.com", + "connector_port": "389", + "connector_(boolean)useSSL": false, + "connectorFileUploadHistory": null + }, + { + "id": "540698", + "name": "EndToEnd-AzureADSource", + "connector_host": null, + "connector_port": null, + "connector_(boolean)useSSL": null, + "connectorFileUploadHistory": null + }, + { + "id": "540710", + "name": "EndToEnd-OpenLDAP", + "connector_host": "10.0.2.64", + "connector_port": "389", + "connector_(boolean)useSSL": false, + "connectorFileUploadHistory": null + }, + { + "id": "540713", + "name": "Dynamic-ADSource", + "connector_host": "host.example.com", + "connector_port": "389", + "connector_(boolean)useSSL": false, + "connectorFileUploadHistory": null + }, + { + "id": "540716", + "name": "EndToEnd-JdbcADSource", + "connector_host": "10.0.5.187", + "connector_port": "389", + "connector_(boolean)useSSL": false, + "connectorFileUploadHistory": null + }, + { + "id": "540717", + "name": "EndToEnd-JdbcSource", + "connector_host": null, + "connector_port": null, + "connector_(boolean)useSSL": null, + "connectorFileUploadHistory": [ + { + "serviceId": "540717", + "date": "2021-02-05T22:58:15Z", + "file": "temp7081703651350031905mysql-connector-java-8.0.11.jar" + } + ] + } + ], + "jobs": [ + { + "uuid": "872b622f-5ab5-4836-9172-e3bb77f05b2c", + "cookbook": "872b622f-5ab5-4836-9172-e3bb77f05b2c", + "state": "FINISHED", + "type": "VA_UPGRADE", + "targetId": "1528", + "managedProcessConfiguration": { + "charon": { + "version": "345", + "path": "sailpoint/charon", + "description": null, + "dependencies": null + }, + "ccg": { + "version": "415_583_79.0.0", + "path": "sailpoint/ccg", + "description": null, + "dependencies": null + }, + "toolbox": { + "version": "6", + "path": "sailpoint/toolbox", + "description": null, + "dependencies": null + }, + "fluent": { + "version": "50", + "path": "fluent/va", + "description": null, + "dependencies": null + }, + "va_agent": { + "version": "89", + "path": "sailpoint/va_agent", + "description": null, + "dependencies": null + } + } + } + ], + "queue": { + "name": "megapod-useast1-denali-lwt-cluster-1533", + "region": "us-east-1" + }, + "maintenance": { + "window": "true", + "windowStartTime": "2021-07-29T00:00:00Z", + "windowClusterTime": "2021-07-29T01:35:24Z", + "windowFinishTime": "2021-07-29T04:00:00Z" + } + } + } + status: + description: status of the Managed Client + $ref: './ManagedClientStatusEnum.yaml' + type: + description: type of the Managed Client + $ref: './ManagedClientType.yaml' + timestamp: + description: timestamp on the Client Status update + type: string + format: date-time + example: "2020-01-01T00:00:00.000000Z" diff --git a/static/idn-api/beta/schemas/ManagedClientStatusEnum.yaml b/static/idn-api/beta/schemas/ManagedClientStatusEnum.yaml new file mode 100644 index 000000000..e22587372 --- /dev/null +++ b/static/idn-api/beta/schemas/ManagedClientStatusEnum.yaml @@ -0,0 +1,9 @@ +type: string +enum: + - NORMAL + - UNDEFINED + - NOT_CONFIGURED + - CONFIGURING + - WARNING + - ERROR + - FAILED \ No newline at end of file diff --git a/static/idn-api/beta/schemas/ManagedClientType.yaml b/static/idn-api/beta/schemas/ManagedClientType.yaml new file mode 100644 index 000000000..ce0db9035 --- /dev/null +++ b/static/idn-api/beta/schemas/ManagedClientType.yaml @@ -0,0 +1,7 @@ +description: Managed Client type +type: string +example: CCG +enum: + - CCG + - VA + - INTERNAL diff --git a/static/idn-api/beta/schemas/ManagedCluster.yaml b/static/idn-api/beta/schemas/ManagedCluster.yaml new file mode 100644 index 000000000..626ea72cd --- /dev/null +++ b/static/idn-api/beta/schemas/ManagedCluster.yaml @@ -0,0 +1,111 @@ +description: Managed Cluster +type: object +required: + - id + - clientType + - ccgVersion +properties: + id: + description: ManagedCluster ID + type: string + example: aClusterId + name: + description: ManagedCluster name + type: string + example: Managed Cluster Name + pod: + description: ManagedCluster pod + type: string + example: megapod-useast1 + org: + description: ManagedCluster org + type: string + example: denali + type: + description: The Type of Cluster + example: 'idn' + nullable: false + $ref: './ManagedClusterTypes.yaml' + configuration: + description: ManagedProcess configuration map + type: object + additionalProperties: + type: string + example: {"clusterExternalId":"externalId", "ccgVersion":"77.0.0"} + keyPair: + description: key pair for the ManagedCluster + $ref: './ManagedClusterKeyPair.yaml' + attributes: + description: Specific Attributes for Configuring a ManagedCluster by Type + $ref: './ManagedClusterAttributes.yaml' + description: + description: ManagedCluster description + type: string + example: A short description of the managed cluster. + redis: + description: Redis configuration for the ManagedCluster + $ref: './ManagedClusterRedis.yaml' + clientType: + description: type of client for the ManagedCluster + $ref: './ManagedClientType.yaml' + ccgVersion: + description: CCG version used by the ManagedCluster + type: string + example: v01 + pinnedConfig: + description: boolean flag indiacting whether or not the cluster configuration is pinned + type: boolean + default: false + example: false + logConfiguration: + description: client log configuration for the cluster + example: '{ + "rootLevel": "WARN", + "logLevels": { "foobar": "WARN" } + }' + $ref: './ClientLogConfiguration.yaml' + operational: + description: Whether or not the cluster is operational or not + type: boolean + default: false + example: false + status: + description: Cluster status + type: string + example: NORMAL + publicKeyCertificate: + description: Public key certificate + type: string + example: -----BEGIN CERTIFICATE-----TCCAb2gAwIBAgIBADANBgkqhkiG9w0BAQsFADAuMQ0wCwYDVQQD-----END CERTIFICATE----- + publicKeyThumbprint: + description: Public key thumbprint + type: string + example: obc6pLiulGbtZ + publicKey: + description: Public key + type: string + example: -----BEGIN PUBLIC KEY-----jANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3WgnsxP52MDgBTfHR+5n4-----END PUBLIC KEY----- + alertKey: + description: Key describing any immediate cluster alerts + type: string + example: LIMITED_RESOURCES + clientIds: + type: array + description: List of clients in a cluster + items: + type: string + example: [ + "1244", + "1245" + ] + serviceCount: + description: Number of services bound to a cluster + type: integer + format: int32 + default: 0 + example: 6 + ccId: + description: CC ID only used in calling CC, will be removed without notice when Migration to CEGS is finished + type: string + default: "0" + example: "1533" diff --git a/static/idn-api/beta/schemas/ManagedClusterAttributes.yaml b/static/idn-api/beta/schemas/ManagedClusterAttributes.yaml new file mode 100644 index 000000000..4588bfad2 --- /dev/null +++ b/static/idn-api/beta/schemas/ManagedClusterAttributes.yaml @@ -0,0 +1,11 @@ +description: Managed Cluster Attributes for Cluster Configuration. Supported Cluster Types [sqsCluster, spConnectCluster] +type: object +properties: + queue: + description: ManagedCluster keystore for sqsCluster type + $ref: './ManagedClusterQueue.yaml' + keystore: + description: ManagedCluster keystore for spConnectCluster type + type: string + example: /u3+7QAAAAIAAAABAAAAAQAvL3Byb3h5LWNsdXN0ZXIvMmM5MTgwODc3Yjg3MW + diff --git a/static/idn-api/beta/schemas/ManagedClusterKeyPair.yaml b/static/idn-api/beta/schemas/ManagedClusterKeyPair.yaml new file mode 100644 index 000000000..e6492315b --- /dev/null +++ b/static/idn-api/beta/schemas/ManagedClusterKeyPair.yaml @@ -0,0 +1,15 @@ +description: Managed Cluster key pair for Cluster +type: object +properties: + publicKey: + description: ManagedCluster publicKey + type: string + example: -----BEGIN PUBLIC KEY-----******-----END PUBLIC KEY----- + publicKeyThumbprint: + description: ManagedCluster publicKeyThumbprint + type: string + example: 6CMlaJIV44-xJxcB3CJBjDUUn54 + publicKeyCertificate: + description: ManagedCluster publicKeyCertificate + type: string + example: -----BEGIN CERTIFICATE-----****-----END CERTIFICATE----- diff --git a/static/idn-api/beta/schemas/ManagedClusterQueue.yaml b/static/idn-api/beta/schemas/ManagedClusterQueue.yaml new file mode 100644 index 000000000..d09b99b84 --- /dev/null +++ b/static/idn-api/beta/schemas/ManagedClusterQueue.yaml @@ -0,0 +1,11 @@ +description: Managed Cluster key pair for Cluster +type: object +properties: + name: + description: ManagedCluster queue name + type: string + example: megapod-useast1-denali-lwt-cluster-1533 + region: + description: ManagedCluster queue aws region + type: string + example: us-east-1 diff --git a/static/idn-api/beta/schemas/ManagedClusterRedis.yaml b/static/idn-api/beta/schemas/ManagedClusterRedis.yaml new file mode 100644 index 000000000..ac93fc235 --- /dev/null +++ b/static/idn-api/beta/schemas/ManagedClusterRedis.yaml @@ -0,0 +1,12 @@ +description: Managed Cluster Redis Configuration +type: object +properties: + redisHost: + description: ManagedCluster redisHost + type: string + example: megapod-useast1-shared-redis.cloud.sailpoint.com + redisPort: + description: ManagedCluster redisPort + type: integer + format: int32 + example: 6379 diff --git a/static/idn-api/beta/schemas/ManagedClusterStatus.yaml b/static/idn-api/beta/schemas/ManagedClusterStatus.yaml new file mode 100644 index 000000000..e4b538c5c --- /dev/null +++ b/static/idn-api/beta/schemas/ManagedClusterStatus.yaml @@ -0,0 +1,113 @@ +description: Managed Cluster Status +type: object +required: + - id + - clientType + - ccgVersion +properties: + id: + description: ManagedCluster ID + type: string + example: aClusterId + name: + description: ManagedCluster name + type: string + example: Managed Cluster Name + keyPair: + description: key pair for the ManagedCluster + $ref: './ManagedClusterKeyPair.yaml' + description: + description: ManagedCluster description + type: string + example: A short description of the managed cluster. + clientType: + description: type of client for the ManagedCluster + $ref: './ManagedClientType.yaml' + ccgVersion: + description: CCG version used by the ManagedCluster + type: string + example: v01 + pinnedConfig: + description: boolean flag indiacting whether or not the cluster configuration is pinned + type: boolean + default: false + example: false + logConfiguration: + description: client log configuration for the cluster + example: '{ + "rootLevel": "WARN", + "logLevels": { "foobar": "WARN" } + }' + $ref: './ClientLogConfiguration.yaml' + operational: + description: Whether or not the cluster is operational or not + type: boolean + default: false + example: false + status: + description: Cluster status + type: string + example: NORMAL + clientsStatus: + type: array + description: List of clients in a cluster + items: + $ref: './ClientStatusBody.yaml' + serviceCount: + description: Number of services bound to a cluster + type: integer + format: int32 + default: 0 + example: 6 + ccId: + description: CC ID only used in calling CC, will be removed without notice when Migration to CEGS is finished + type: string + default: "0" + example: "1533" + connections: + type: array + description: client log configuration for the cluster + items: + $ref: './ClusterSource.yaml' + alertKey: + type: string + description: Alert Key for the UI to decode into badges + example: LIMITED_RESOURCES + dependencies: + type: object + description: The active Process Dependencies for the cluster type + example: + '{ + "charon": { + "version": "393", + "path": "sailpoint/charon", + "description": null, + "dependencies": null + }, + "ccg": { + "version": "503_668_96.2.0", + "path": "sailpoint/ccg", + "description": null, + "dependencies": null + }, + "toolbox": { + "version": "15", + "path": "sailpoint/toolbox", + "description": null, + "dependencies": null + }, + "fluent": { + "version": "50", + "path": "fluent/va", + "description": null, + "dependencies": null + }, + "va_agent": { + "version": "99", + "path": "sailpoint/va_agent", + "description": null, + "dependencies": null + } + }' + additionalProperties: + $ref: './ManagedProcessConfiguration.yaml' diff --git a/static/idn-api/beta/schemas/ManagedClusterType.yaml b/static/idn-api/beta/schemas/ManagedClusterType.yaml new file mode 100644 index 000000000..267825666 --- /dev/null +++ b/static/idn-api/beta/schemas/ManagedClusterType.yaml @@ -0,0 +1,30 @@ +description: Managed Cluster Type for Cluster upgrade configuration information +type: object +required: + - type + - pod + - org +properties: + id: + description: ManagedClusterType ID + readOnly: true + type: string + example: aClusterTypeId + type: + description: ManagedClusterType type name + type: string + example: idn + pod: + description: ManagedClusterType pod + type: string + example: megapod-useast1 + org: + description: ManagedClusterType org + type: string + example: denali-cjh + managedProcessIds: + type: array + description: List of processes for the cluster type + items: + type: string + example: ["someId", "someId2"] diff --git a/static/idn-api/beta/schemas/ManagedClusterTypes.yaml b/static/idn-api/beta/schemas/ManagedClusterTypes.yaml new file mode 100644 index 000000000..81bf6b5da --- /dev/null +++ b/static/idn-api/beta/schemas/ManagedClusterTypes.yaml @@ -0,0 +1,6 @@ +type: string +description: The Type of Cluster +example: 'idn' +enum: + - idn + - iai diff --git a/static/idn-api/beta/schemas/ManagedProcess.yaml b/static/idn-api/beta/schemas/ManagedProcess.yaml new file mode 100644 index 000000000..5c7763f7e --- /dev/null +++ b/static/idn-api/beta/schemas/ManagedProcess.yaml @@ -0,0 +1,28 @@ +description: Managed Process for Cluster upgrade configuration information +type: object +required: + - process + - pod + - org + - config +properties: + id: + description: ManagedProcess ID + readOnly: true + type: string + example: aProcessId + process: + description: ManagedProcess process name + type: string + example: charon + pod: + description: ManagedProcess pod + type: string + example: megapod-useast1 + org: + description: ManagedProcess org + type: string + example: denali-cjh + config: + description: ManagedProcess configuration map + $ref: './ManagedProcessConfiguration.yaml' diff --git a/static/idn-api/beta/schemas/ManagedProcessConfiguration.yaml b/static/idn-api/beta/schemas/ManagedProcessConfiguration.yaml new file mode 100644 index 000000000..ca65a790c --- /dev/null +++ b/static/idn-api/beta/schemas/ManagedProcessConfiguration.yaml @@ -0,0 +1,24 @@ +description: Configuration information map for Managed Process object +type: object +required: + - version + - path +properties: + version: + description: ManagedProcess version number + type: string + example: 133.2.1 + path: + description: ManagedProcess path + type: string + example: sailpoint/ccg + description: + description: ManagedProcess description + type: string + example: version of charon used by the VA + dependencies: + description: ManagedProcess dependencies map + type: object + additionalProperties: + type: string + example: {"ad-connector":"1.0.0", "connector-bundle-directories":"77.0.0","connector-bundle-filebased":"57.0.1"} diff --git a/static/idn-api/beta/schemas/ManagedProcessConfigurationHashMap.yaml b/static/idn-api/beta/schemas/ManagedProcessConfigurationHashMap.yaml new file mode 100644 index 000000000..47cfa9ced --- /dev/null +++ b/static/idn-api/beta/schemas/ManagedProcessConfigurationHashMap.yaml @@ -0,0 +1,17 @@ +type: object +properties: + charon: + description: ManagedProcess configuration map + $ref: './ManagedProcessConfiguration.yaml' + ccg: + description: ManagedProcess configuration map + $ref: './ManagedProcessConfiguration.yaml' + toolbox: + description: ManagedProcess configuration map + $ref: './ManagedProcessConfiguration.yaml' + fluent: + description: ManagedProcess configuration map + $ref: './ManagedProcessConfiguration.yaml' + va_agent: + description: ManagedProcess configuration map + $ref: './ManagedProcessConfiguration.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/ManagerCorrelationMapping.yaml b/static/idn-api/beta/schemas/ManagerCorrelationMapping.yaml new file mode 100644 index 000000000..6ebdf4a8a --- /dev/null +++ b/static/idn-api/beta/schemas/ManagerCorrelationMapping.yaml @@ -0,0 +1,14 @@ +type: object +properties: + accountAttribute: + type: string + description: >- + Name of the attribute to use for manager correlation. The value found on the account attribute will be used to + lookup the manager's identity. + example: "manager" + identityAttribute: + type: string + description: >- + Name of the identity attribute to search when trying to find a manager using the value from the accountAttribute. + example: "manager" + diff --git a/static/idn-api/beta/schemas/Medium.yaml b/static/idn-api/beta/schemas/Medium.yaml new file mode 100644 index 000000000..ba943f3ba --- /dev/null +++ b/static/idn-api/beta/schemas/Medium.yaml @@ -0,0 +1,8 @@ +type: string +enum: + - EMAIL + - SMS + - PHONE + - SLACK + - TEAMS + diff --git a/static/idn-api/beta/schemas/MemberReference.yaml b/static/idn-api/beta/schemas/MemberReference.yaml new file mode 100644 index 000000000..fc82389d2 --- /dev/null +++ b/static/idn-api/beta/schemas/MemberReference.yaml @@ -0,0 +1,19 @@ +type: object +properties: + type: + type: string + enum: + - IDENTITY + description: The type of object that this reference points to. + id: + type: string + description: Identity ID + example: 5168015d32f890ca15812c9180835d2e + displayName: + type: string + description: Human-readable display name of identity. + example: "Alison Ferguso" + email: + type: string + description: Email address of identity. + example: "alison.ferguso2@identitysoon.com" diff --git a/static/idn-api/beta/schemas/MessageCatalogDto.yaml b/static/idn-api/beta/schemas/MessageCatalogDto.yaml new file mode 100644 index 000000000..07ecbe242 --- /dev/null +++ b/static/idn-api/beta/schemas/MessageCatalogDto.yaml @@ -0,0 +1,11 @@ +type: object +properties: + locale: + type: string + description: The language in which the messages are returned + example: 'en_US' + messages: + type: array + items: + $ref: './ResourceBundleMessage.yaml' + description: The list of message with their keys and formats \ No newline at end of file diff --git a/static/idn-api/beta/schemas/MetricResponse.yaml b/static/idn-api/beta/schemas/MetricResponse.yaml new file mode 100644 index 000000000..8555f7ef6 --- /dev/null +++ b/static/idn-api/beta/schemas/MetricResponse.yaml @@ -0,0 +1,11 @@ +type: object +properties: + name: + type: string + description: the name of metric + value: + type: number + description: the value associated to the metric +example: + name: '2021-04-01T00:00:00.000Z' + value: 2 \ No newline at end of file diff --git a/static/idn-api/beta/schemas/MfaConfig.yaml b/static/idn-api/beta/schemas/MfaConfig.yaml new file mode 100644 index 000000000..327189cbf --- /dev/null +++ b/static/idn-api/beta/schemas/MfaConfig.yaml @@ -0,0 +1,16 @@ +type: object +properties: + enabled: + type: boolean + description: If MFA method is enabled. + host: + type: string + description: The server host name or IP address of the MFA provider. + example: example.com + accessKey: + type: string + description: The secret key for authenticating requests to the MFA provider. + identityAttribute: + type: string + description: Optional. The name of the attribute for mapping IdentityNow identity to the MFA provider. + example: email diff --git a/static/idn-api/beta/schemas/MfaConfigTestResponse.yaml b/static/idn-api/beta/schemas/MfaConfigTestResponse.yaml new file mode 100644 index 000000000..f1f2b1e85 --- /dev/null +++ b/static/idn-api/beta/schemas/MfaConfigTestResponse.yaml @@ -0,0 +1,16 @@ +description: Response model for configuration test of a given MFA method +type: object +properties: + state: + type: string + enum: + - SUCCESS + - FAILED + description: The configuration test result. + example: SUCCESS + readOnly: true + error: + type: string + example: MFA Method is disabled. + description: The error message to indicate the failure of configuration test. + readOnly: true \ No newline at end of file diff --git a/static/idn-api/beta/schemas/MfaRegistrationResponse.yaml b/static/idn-api/beta/schemas/MfaRegistrationResponse.yaml new file mode 100644 index 000000000..cd4a5de47 --- /dev/null +++ b/static/idn-api/beta/schemas/MfaRegistrationResponse.yaml @@ -0,0 +1,5 @@ +type: object +properties: + mfaRegistered: + type: boolean + description: true if the user is registered for MFA; false otherwise diff --git a/static/idn-api/beta/schemas/MfaResetRequest.yaml b/static/idn-api/beta/schemas/MfaResetRequest.yaml new file mode 100644 index 000000000..775a724f1 --- /dev/null +++ b/static/idn-api/beta/schemas/MfaResetRequest.yaml @@ -0,0 +1,6 @@ +type: object +properties: + requestedFor: + type: string + description: Either the external ID of a user when resettign someone else's MFA registration or "me" for one's self. + example: 2c9180867b50d088017b554662fb281e diff --git a/static/idn-api/beta/schemas/MfaVerificationResponse.yaml b/static/idn-api/beta/schemas/MfaVerificationResponse.yaml new file mode 100644 index 000000000..a87916239 --- /dev/null +++ b/static/idn-api/beta/schemas/MfaVerificationResponse.yaml @@ -0,0 +1,5 @@ +type: object +properties: + mfaVerified: + type: boolean + description: true if the TOTP code generated by the user's registered authenticator is valid diff --git a/static/idn-api/beta/schemas/MultiPolicyRequest.yaml b/static/idn-api/beta/schemas/MultiPolicyRequest.yaml new file mode 100644 index 000000000..70e2039b7 --- /dev/null +++ b/static/idn-api/beta/schemas/MultiPolicyRequest.yaml @@ -0,0 +1,7 @@ +type: object +properties: + filteredPolicyList: + type: array + description: Multi-policy report will be run for this list of ids + items: + type: string \ No newline at end of file diff --git a/static/idn-api/beta/schemas/NetworkConfiguration.yaml b/static/idn-api/beta/schemas/NetworkConfiguration.yaml new file mode 100644 index 000000000..9a8fb3567 --- /dev/null +++ b/static/idn-api/beta/schemas/NetworkConfiguration.yaml @@ -0,0 +1,18 @@ +type: object +properties: + range: + type: array + description: The collection of ip ranges. + items: + type: string + example: ["1.3.7.2", "255.255.255.252/30"] + geolocation: + type: array + description: The collection of country codes. + items: + type: string + example: ["CA", "FR", "HT"] + whitelisted: + type: boolean + description: Denotes whether the provided lists are whitelisted or blacklisted. + example: true diff --git a/static/idn-api/beta/schemas/NonEmployeeApprovalDecision.yaml b/static/idn-api/beta/schemas/NonEmployeeApprovalDecision.yaml new file mode 100644 index 000000000..9eb102354 --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeApprovalDecision.yaml @@ -0,0 +1,6 @@ +type: object +properties: + comment: + type: string + description: Comment on the approval item. + maxLength: 4000 \ No newline at end of file diff --git a/static/idn-api/beta/schemas/NonEmployeeApprovalItem.yaml b/static/idn-api/beta/schemas/NonEmployeeApprovalItem.yaml new file mode 100644 index 000000000..bc5fbbd0c --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeApprovalItem.yaml @@ -0,0 +1,6 @@ +allOf: + - $ref: './NonEmployeeApprovalItemBase.yaml' + - type: object + properties: + nonEmployeeRequest: + $ref: './NonEmployeeRequestLite.yaml' diff --git a/static/idn-api/beta/schemas/NonEmployeeApprovalItemBase.yaml b/static/idn-api/beta/schemas/NonEmployeeApprovalItemBase.yaml new file mode 100644 index 000000000..6bbf34963 --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeApprovalItemBase.yaml @@ -0,0 +1,33 @@ +type: object +properties: + id: + type: string + format: UUID + description: Non-Employee approval item id + example: 2c1e388b-1e55-4b0a-ab5c-897f1204159c + approver: + $ref: './IdentityReferenceWithId.yaml' + description: Reference to the associated Identity + accountName: + type: string + description: Requested identity account name + example: test.account + approvalStatus: + $ref: './ApprovalStatus.yaml' + approvalOrder: + type: number + description: Approval order + example: 1 + comment: + type: string + description: comment of approver + modified: + type: string + format: date-time + description: When the request was last modified. + example: "2019-08-23T18:52:59.162Z" + created: + type: string + format: date-time + description: When the request was created. + example: "2019-08-23T18:40:35.772Z" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/NonEmployeeApprovalItemDetail.yaml b/static/idn-api/beta/schemas/NonEmployeeApprovalItemDetail.yaml new file mode 100644 index 000000000..0830e7138 --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeApprovalItemDetail.yaml @@ -0,0 +1,7 @@ +allOf: + - $ref: './NonEmployeeApprovalItemBase.yaml' + - type: object + properties: + nonEmployeeRequest: + $ref: './NonEmployeeRequestWithoutApprovalItem.yaml' + description: Non-Employee request associated to this approval \ No newline at end of file diff --git a/static/idn-api/beta/schemas/NonEmployeeApprovalSummary.yaml b/static/idn-api/beta/schemas/NonEmployeeApprovalSummary.yaml new file mode 100644 index 000000000..724f318e7 --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeApprovalSummary.yaml @@ -0,0 +1,11 @@ +type: object +properties: + approved: + type: number + description: The number of approved non-employee approval requests. + pending: + type: number + description: The number of pending non-employee approval requests. + rejected: + type: number + description: The number of rejected non-employee approval requests. \ No newline at end of file diff --git a/static/idn-api/beta/schemas/NonEmployeeBulkUploadJob.yaml b/static/idn-api/beta/schemas/NonEmployeeBulkUploadJob.yaml new file mode 100644 index 000000000..bd342281f --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeBulkUploadJob.yaml @@ -0,0 +1,34 @@ +type: object +properties: + id: + type: string + description: The bulk upload job's ID. (UUID) + example: "2c91808568c529c60168cca6f90cffff" + sourceId: + type: string + description: The ID of the source to bulk-upload non-employees to. (UUID) + example: "2c91808568c529c60168cca6f90c1313" + created: + type: string + format: date-time + description: The date-time the job was submitted. + example: "2019-08-23T18:52:59.162Z" + modified: + type: string + format: date-time + description: The date-time that the job was last updated. + example: "2019-08-23T18:52:59.162Z" + status: + type: string + enum: + - PENDING + - IN_PROGRESS + - COMPLETED + - ERROR + description: | + Returns the following values indicating the progress or result of the bulk upload job. + "PENDING" means the job is queued and waiting to be processed. + "IN_PROGRESS" means the job is currently being processed. + "COMPLETED" means the job has been completed without any errors. + "ERROR" means the job failed to process with errors. + example: "PENDING" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/NonEmployeeBulkUploadStatus.yaml b/static/idn-api/beta/schemas/NonEmployeeBulkUploadStatus.yaml new file mode 100644 index 000000000..accb6660f --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeBulkUploadStatus.yaml @@ -0,0 +1,17 @@ +type: object +properties: + status: + type: string + enum: + - PENDING + - IN_PROGRESS + - COMPLETED + - ERROR + description: | + Returns the following values indicating the progress or result of the bulk upload job. + "PENDING" means the job is queued and waiting to be processed. + "IN_PROGRESS" means the job is currently being processed. + "COMPLETED" means the job has been completed without any errors. + "ERROR" means the job failed to process with errors. + null means job has been submitted to the source. + example: "PENDING" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/NonEmployeeIdnUserRequest.yaml b/static/idn-api/beta/schemas/NonEmployeeIdnUserRequest.yaml new file mode 100644 index 000000000..8ac8b585c --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeIdnUserRequest.yaml @@ -0,0 +1,9 @@ +type: object +properties: + id: + type: string + format: UUID + description: Identity id. + example: 2c91808570313110017040b06f344ec9 +required: + - id \ No newline at end of file diff --git a/static/idn-api/beta/schemas/NonEmployeeRecord.yaml b/static/idn-api/beta/schemas/NonEmployeeRecord.yaml new file mode 100644 index 000000000..f51f85602 --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeRecord.yaml @@ -0,0 +1,58 @@ +type: object +properties: + id: + type: string + format: UUID + description: Non-Employee record id. + accountName: + type: string + description: Requested identity account name. + firstName: + type: string + description: Non-Employee's first name. + example: William + lastName: + type: string + description: Non-Employee's last name. + example: Smith + email: + type: string + description: Non-Employee's email. + example: william.smith@example.com + phone: + type: string + description: Non-Employee's phone. + example: "5555555555" + manager: + type: string + description: The account ID of a valid identity to serve as this non-employee's manager. + example: jane.doe + sourceId: + type: string + description: Non-Employee's source id. + example: "2c91808568c529c60168cca6f90c1313" + data: + type: object + additionalProperties: + type: string + description: Attribute blob/bag for a non-employee. + startDate: + type: string + format: date-time + description: Non-Employee employment start date. + example: "2019-08-23T18:52:59.162Z" + endDate: + type: string + format: date-time + description: Non-Employee employment end date. + example: "2020-08-23T18:52:59.162Z" + modified: + type: string + format: date-time + description: When the request was last modified. + example: "2019-08-23T18:52:59.162Z" + created: + type: string + format: date-time + description: When the request was created. + example: "2019-08-23T18:40:35.772Z" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/NonEmployeeRejectApprovalDecision.yaml b/static/idn-api/beta/schemas/NonEmployeeRejectApprovalDecision.yaml new file mode 100644 index 000000000..5657a8709 --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeRejectApprovalDecision.yaml @@ -0,0 +1,8 @@ +type: object +properties: + comment: + type: string + description: Comment on the approval item. + maxLength: 4000 +required: + - comment \ No newline at end of file diff --git a/static/idn-api/beta/schemas/NonEmployeeRequest.yaml b/static/idn-api/beta/schemas/NonEmployeeRequest.yaml new file mode 100644 index 000000000..cb7f18d4d --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeRequest.yaml @@ -0,0 +1,70 @@ +allOf: + - $ref: './NonEmployeeSourceLite.yaml' + - type: object + properties: + accountName: + type: string + description: Requested identity account name. + example: william.smith + firstName: + type: string + description: Non-Employee's first name. + example: William + lastName: + type: string + description: Non-Employee's last name. + example: Smith + email: + type: string + description: Non-Employee's email. + example: william.smith@example.com + phone: + type: string + description: Non-Employee's phone. + example: "5555555555" + manager: + type: string + description: The account ID of a valid identity to serve as this non-employee's manager. + example: jane.doe + nonEmployeeSource: + $ref: './NonEmployeeSourceLite.yaml' + data: + type: object + additionalProperties: + type: string + description: Attribute blob/bag for a non-employee. + approvalItems: + description: List of approval item for the request + type: array + items: + $ref: './NonEmployeeApprovalItemBase.yaml' + approvalStatus: + $ref: './ApprovalStatus.yaml' + comment: + type: string + description: comment of requester + completionDate: + type: string + format: date-time + description: When the request was completely approved. + example: "2020-03-24T11:11:41.139-05:00" + startDate: + type: string + format: date-time + description: Non-Employee employment start date. + example: "2020-03-24T00:00:00-05:00" + endDate: + type: string + format: date-time + description: Non-Employee employment end date. + example: "2021-03-25T00:00:00-05:00" + modified: + type: string + format: date-time + description: When the request was last modified. + example: "2020-03-24T11:11:41.139-05:00" + created: + type: string + format: date-time + description: When the request was created. + example: "2020-03-24T11:11:41.139-05:00" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/NonEmployeeRequestBody.yaml b/static/idn-api/beta/schemas/NonEmployeeRequestBody.yaml new file mode 100644 index 000000000..5c1123dfc --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeRequestBody.yaml @@ -0,0 +1,56 @@ +type: object +properties: + accountName: + type: string + description: Requested identity account name. + example: william.smith + firstName: + type: string + description: Non-Employee's first name. + example: William + lastName: + type: string + description: Non-Employee's last name. + example: Smith + email: + type: string + description: Non-Employee's email. + example: william.smith@example.com + phone: + type: string + description: Non-Employee's phone. + example: "5555555555" + manager: + type: string + description: The account ID of a valid identity to serve as this non-employee's manager. + example: jane.doe + sourceId: + type: string + description: Non-Employee's source id. + example: "2c91808568c529c60168cca6f90c1313" + data: + type: object + additionalProperties: + type: string + #maxItems: 10 + description: Attribute blob/bag for a non-employee, 10 attributes is the maximum size supported. + startDate: + type: string + format: date-time + description: Non-Employee employment start date. + example: "2020-03-24T00:00:00-05:00" + endDate: + type: string + format: date-time + description: Non-Employee employment end date. + example: "2021-03-25T00:00:00-05:00" +required: + - accountName + - firstName + - lastName + - email + - phone + - manager + - sourceId + - startDate + - endDate diff --git a/static/idn-api/beta/schemas/NonEmployeeRequestLite.yaml b/static/idn-api/beta/schemas/NonEmployeeRequestLite.yaml new file mode 100644 index 000000000..a6403b1fe --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeRequestLite.yaml @@ -0,0 +1,12 @@ +type: object +properties: + id: + type: string + format: UUID + description: Non-Employee request id. + requester: + $ref: './IdentityReferenceWithId.yaml' + example: + type: "IDENTITY" + id: "2c9180866166b5b0016167c32ef31a66" + name: "William Smith" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/NonEmployeeRequestSummary.yaml b/static/idn-api/beta/schemas/NonEmployeeRequestSummary.yaml new file mode 100644 index 000000000..b9801abe3 --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeRequestSummary.yaml @@ -0,0 +1,14 @@ +type: object +properties: + approved: + type: number + description: The number of approved non-employee requests on all sources that *requested-for* user manages. + rejected: + type: number + description: The number of rejected non-employee requests on all sources that *requested-for* user manages. + pending: + type: number + description: The number of pending non-employee requests on all sources that *requested-for* user manages. + nonEmployeeCount: + type: number + description: The number of non-employee records on all sources that *requested-for* user manages. \ No newline at end of file diff --git a/static/idn-api/beta/schemas/NonEmployeeRequestWithoutApprovalItem.yaml b/static/idn-api/beta/schemas/NonEmployeeRequestWithoutApprovalItem.yaml new file mode 100644 index 000000000..4de5b2996 --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeRequestWithoutApprovalItem.yaml @@ -0,0 +1,65 @@ +allOf: + - $ref: './NonEmployeeRequestLite.yaml' + - type: object + properties: + accountName: + type: string + description: Requested identity account name. + example: william.smith + firstName: + type: string + description: Non-Employee's first name. + example: William + lastName: + type: string + description: Non-Employee's last name. + example: Smith + email: + type: string + description: Non-Employee's email. + example: william.smith@example.com + phone: + type: string + description: Non-Employee's phone. + example: "5555555555" + manager: + type: string + description: The account ID of a valid identity to serve as this non-employee's manager. + example: jane.doe + nonEmployeeSource: + $ref: './NonEmployeeSourceLiteWithSchemaAttributes.yaml' + data: + type: object + additionalProperties: + type: string + description: Attribute blob/bag for a non-employee. + approvalStatus: + $ref: './ApprovalStatus.yaml' + comment: + type: string + description: comment of requester + completionDate: + type: string + format: date-time + description: When the request was completely approved. + example: "2020-03-24T11:11:41.139-05:00" + startDate: + type: string + format: date + description: Non-Employee employment start date. + example: "2020-03-24" + endDate: + type: string + format: date + description: Non-Employee employment end date. + example: "2021-03-25" + modified: + type: string + format: date-time + description: When the request was last modified. + example: "2020-03-24T11:11:41.139-05:00" + created: + type: string + format: date-time + description: When the request was created. + example: "2020-03-24T11:11:41.139-05:00" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/NonEmployeeSchemaAttribute.yaml b/static/idn-api/beta/schemas/NonEmployeeSchemaAttribute.yaml new file mode 100644 index 000000000..37ffec90a --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeSchemaAttribute.yaml @@ -0,0 +1,47 @@ +type: object +properties: + id: + type: string + format: UUID + example: "ac110005-7156-1150-8171-5b292e3e0084" + description: Schema Attribute Id + system: + type: boolean + description: True if this schema attribute is mandatory on all non-employees sources. + example: true + modified: + type: string + format: date-time + description: When the schema attribute was last modified. + example: "2019-08-23T18:52:59.162Z" + created: + type: string + format: date-time + description: When the schema attribute was created. + example: "2019-08-23T18:40:35.772Z" + type: + $ref: './NonEmployeeSchemaAttributeType.yaml' + label: + type: string + description: Label displayed on the UI for this schema attribute. + example: "Account Name" + technicalName: + type: string + description: The technical name of the attribute. Must be unique per source. + example: "account.name" + helpText: + type: string + description: help text displayed by UI. + example: "The unique identifier for the account" + placeholder: + type: string + description: Hint text that fills UI box. + example: "Enter a unique user name for this account." + required: + type: boolean + description: If true, the schema attribute is required for all non-employees in the source + example: true +required: + - type + - technicalName + - label diff --git a/static/idn-api/beta/schemas/NonEmployeeSchemaAttributeBody.yaml b/static/idn-api/beta/schemas/NonEmployeeSchemaAttributeBody.yaml new file mode 100644 index 000000000..ed754e068 --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeSchemaAttributeBody.yaml @@ -0,0 +1,30 @@ +type: object +properties: + type: + type: string + description: Type of the attribute. Only type 'TEXT' is supported for custom attributes. + example: "TEXT" + label: + type: string + description: Label displayed on the UI for this schema attribute. + example: "Account Name" + technicalName: + type: string + description: The technical name of the attribute. Must be unique per source. + example: "account.name" + helpText: + type: string + description: help text displayed by UI. + example: "The unique identifier for the account" + placeholder: + type: string + description: Hint text that fills UI box. + example: "Enter a unique user name for this account." + required: + type: boolean + description: If true, the schema attribute is required for all non-employees in the source + example: true +required: + - type + - technicalName + - label diff --git a/static/idn-api/beta/schemas/NonEmployeeSchemaAttributeType.yaml b/static/idn-api/beta/schemas/NonEmployeeSchemaAttributeType.yaml new file mode 100644 index 000000000..dc79492d6 --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeSchemaAttributeType.yaml @@ -0,0 +1,6 @@ +type: string +enum: + - TEXT + - DATE + - IDENTITY +description: Enum representing the type of data a schema attribute accepts. diff --git a/static/idn-api/beta/schemas/NonEmployeeSource.yaml b/static/idn-api/beta/schemas/NonEmployeeSource.yaml new file mode 100644 index 000000000..8459afc79 --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeSource.yaml @@ -0,0 +1,24 @@ +allOf: + - $ref: './NonEmployeeSourceLite.yaml' + - type: object + properties: + approvers: + description: List of approvers + type: array + items: + $ref: './IdentityReferenceWithId.yaml' + accountManagers: + description: List of account managers + type: array + items: + $ref: './IdentityReferenceWithId.yaml' + modified: + type: string + format: date-time + description: When the request was last modified. + example: "2019-08-23T18:52:59.162Z" + created: + type: string + format: date-time + description: When the request was created. + example: "2019-08-23T18:40:35.772Z" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/NonEmployeeSourceLite.yaml b/static/idn-api/beta/schemas/NonEmployeeSourceLite.yaml new file mode 100644 index 000000000..2f094cbc9 --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeSourceLite.yaml @@ -0,0 +1,19 @@ +type: object +properties: + id: + type: string + format: UUID + description: Non-Employee source id. + example: a0303682-5e4a-44f7-bdc2-6ce6112549c1 + sourceId: + type: string + description: Source Id associated with this non-employee source. + example: 2c91808568c529c60168cca6f90c1313 + name: + type: string + description: Source name associated with this non-employee source. + example: Retail + description: + type: string + description: Source description associated with this non-employee source. + example: Source description \ No newline at end of file diff --git a/static/idn-api/beta/schemas/NonEmployeeSourceLiteWithSchemaAttributes.yaml b/static/idn-api/beta/schemas/NonEmployeeSourceLiteWithSchemaAttributes.yaml new file mode 100644 index 000000000..82d7ff8c3 --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeSourceLiteWithSchemaAttributes.yaml @@ -0,0 +1,9 @@ +allOf: + - $ref: './NonEmployeeSourceLite.yaml' + - type: object + properties: + schemaAttributes: + description: List of schema attributes associated with this non-employee source. + type: array + items: + $ref: './NonEmployeeSchemaAttribute.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/NonEmployeeSourceRequestBody.yaml b/static/idn-api/beta/schemas/NonEmployeeSourceRequestBody.yaml new file mode 100644 index 000000000..39e0ef15c --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeSourceRequestBody.yaml @@ -0,0 +1,33 @@ +type: object +properties: + name: + type: string + description: Name of non-employee source. + example: Retail + description: + type: string + description: Description of non-employee source. + example: Source description + owner: + description: Owner of non-employee source. + $ref: './NonEmployeeIdnUserRequest.yaml' + managementWorkgroup: + type: string + description: The ID for the management workgroup that contains source sub-admins + example: '123299' + approvers: + description: List of approvers. + type: array + items: + $ref: './NonEmployeeIdnUserRequest.yaml' + maxItems: 3 + accountManagers: + description: List of account managers. + type: array + items: + $ref: './NonEmployeeIdnUserRequest.yaml' + maxItems: 10 +required: + - owner + - name + - description diff --git a/static/idn-api/beta/schemas/NonEmployeeSourceWithCloudExternalId.yaml b/static/idn-api/beta/schemas/NonEmployeeSourceWithCloudExternalId.yaml new file mode 100644 index 000000000..9e0c79c11 --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeSourceWithCloudExternalId.yaml @@ -0,0 +1,8 @@ +allOf: + - $ref: './NonEmployeeSource.yaml' + - type: object + properties: + cloudExternalId: + type: string + description: Legacy ID used for sources from the V1 API. This attribute will be removed from a future version of the API and will not be considered a breaking change. No clients should rely on this ID always being present. + example: '99999' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/NonEmployeeSourceWithNECount.yaml b/static/idn-api/beta/schemas/NonEmployeeSourceWithNECount.yaml new file mode 100644 index 000000000..551ba59b6 --- /dev/null +++ b/static/idn-api/beta/schemas/NonEmployeeSourceWithNECount.yaml @@ -0,0 +1,7 @@ +allOf: + - $ref: './NonEmployeeSource.yaml' + - type: object + properties: + nonEmployeeCount: + type: number + description: Number of non-employee records associated with this source. \ No newline at end of file diff --git a/static/idn-api/beta/schemas/NotificationTemplateContext.yaml b/static/idn-api/beta/schemas/NotificationTemplateContext.yaml new file mode 100644 index 000000000..e04a0adee --- /dev/null +++ b/static/idn-api/beta/schemas/NotificationTemplateContext.yaml @@ -0,0 +1,16 @@ +type: object +properties: + attributes: + type: object + description: A JSON object that stores the context. + example: {"productUrl":"https://test-org.identitysoon.com","brandingConfigs":{"default":{"narrowLogoURL":null,"productName":"SailPoint","standardLogoURL":null,"navigationColor":"011E64","actionButtonColor":"20B2DE","emailFromAddress":null,"activeLinkColor":"20B2DE","loginInformationalMessage":null}}} + created: + type: string + description: When the global context was created + format: 'date-time' + example: '2020-04-15T16:16:47.525Z' + modified: + type: string + description: When the global context was last modified + format: 'date-time' + example: '2020-04-15T16:16:47.525Z' diff --git a/static/idn-api/beta/schemas/ObjectExportImportOptions.yaml b/static/idn-api/beta/schemas/ObjectExportImportOptions.yaml new file mode 100644 index 000000000..6f9712964 --- /dev/null +++ b/static/idn-api/beta/schemas/ObjectExportImportOptions.yaml @@ -0,0 +1,14 @@ +type: object +properties: + includedIds: + description: Object ids to be included in an import or export. + type: array + items: + type: string + example: "be9e116d-08e1-49fc-ab7f-fa585e96c9e4" + includedNames: + description: Object names to be included in an import or export. + type: array + items: + type: string + example: "Test Object" diff --git a/static/idn-api/beta/schemas/ObjectImportResult.yaml b/static/idn-api/beta/schemas/ObjectImportResult.yaml new file mode 100644 index 000000000..ebdfa67d4 --- /dev/null +++ b/static/idn-api/beta/schemas/ObjectImportResult.yaml @@ -0,0 +1,29 @@ +type: object +title: Import Object Response Body +description: Response model for import of a single object. +properties: + infos: + description: Informational messages returned from the target service on import. + type: array + items: + $ref: '../../beta/schemas/SpConfigMessage.yaml' + warnings: + description: Warning messages returned from the target service on import. + type: array + items: + $ref: '../../beta/schemas/SpConfigMessage.yaml' + errors: + description: Error messages returned from the target service on import. + type: array + items: + $ref: '../../beta/schemas/SpConfigMessage.yaml' + importedObjects: + description: References to objects that were created or updated by the import. + type: array + items: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' +required: + - infos + - warnings + - errors + - importedObjects diff --git a/static/idn-api/beta/schemas/Operation.yaml b/static/idn-api/beta/schemas/Operation.yaml new file mode 100644 index 000000000..b1353433c --- /dev/null +++ b/static/idn-api/beta/schemas/Operation.yaml @@ -0,0 +1,10 @@ +type: string +enum: + - EQUALS + - NOT_EQUALS + - CONTAINS + - STARTS_WITH + - ENDS_WITH + - AND + - OR +example: EQUALS diff --git a/static/idn-api/beta/schemas/OrgConfig.yaml b/static/idn-api/beta/schemas/OrgConfig.yaml new file mode 100644 index 000000000..bd8da1d31 --- /dev/null +++ b/static/idn-api/beta/schemas/OrgConfig.yaml @@ -0,0 +1,43 @@ +type: object +description: DTO class for OrgConfig data accessible by customer external org admin ("ORG_ADMIN") users +properties: + orgName: + type: string + description: The name of the org. + example: acme-solar + timeZone: + type: string + description: The selected time zone which is to be used for the org. This directly affects when scheduled tasks are executed. Valid options can be found at /beta/org-config/valid-time-zones + example: America/Toronto + lcsChangeHonorsSourceEnableFeature: + type: boolean + description: Flag to determine whether the LCS_CHANGE_HONORS_SOURCE_ENABLE_FEATURE flag is enabled for the current org. + example: false + armCustomerId: + type: string + description: ARM Customer ID + example: DE38E75A-5FF6-4A65-5DC7-08D64426B09E + armSapSystemIdMappings: + type: string + description: A list of IDN::sourceId to ARM::systemId mappings. + example: [{"sourceId":"2c91808c791a94e501792388b0d62659","systemId":"1556"},{"sourceId":"2_2c91808c791a94e501792388b0d62659","systemId":"2_1556"},{"sourceId":"3_2c91808c791a94e501792388b0d62659","systemId":"3_1556"}] + armAuth: + type: string + description: ARM authentication string + example: epiYNTRYA2S7swisDWk1Zv4VMNgvqEjiBh5_ufuCWsma2m-5XADijqBg0ijXLby5nS6lxZNXabhGnAPGeDGc4V3jQKrhwV-UHypRLs8ZLgOjiQNus9NimS0uPdKomRW6TFWqXyfnYd-znNgbbVuwUy9GyD9ebDVJSntPastxSx7UcyGuWBqfNZYpuxKRWe_7TVY60qL55jUqyz8N4XUbbdcxdbZ0uik6ut-Bv90MKTbZexBW_PR4qcgIkaEs4kIenLyBxnGziYo7AO0tJ8bGHO8FJRkibCpAQIt7PISLo7Gg_Xf9j10dKq2YDgy4pPTvz3fE2ZHYnXCXvXFSA-vVag== + armDb: + type: string + description: ARM database name + example: EU + armSsoUrl: + type: string + description: ARM SSO URL + example: https://your-arm-sso-url + iaiEnableCertificationRecommendations: + type: boolean + description: Flag to determine whether IAI Certification Recommendations are enabled for the current org + example: true + sodReportConfigs: + type: array + items: + $ref: './ReportConfigDTO.yaml' diff --git a/static/idn-api/beta/schemas/OrgConfiguration.yaml b/static/idn-api/beta/schemas/OrgConfiguration.yaml new file mode 100644 index 000000000..261953941 --- /dev/null +++ b/static/idn-api/beta/schemas/OrgConfiguration.yaml @@ -0,0 +1,13 @@ +type: object +properties: + domain: + type: string + description: The domain for the tenant. + redirectPatterns: + type: array + description: The collection of allowed redirect patterns for a tenant. + items: + type: string + legacyPasswordReset: + type: boolean + description: Denotes if the legacy password reset flow is enabled. \ No newline at end of file diff --git a/static/idn-api/beta/schemas/Outlier.yaml b/static/idn-api/beta/schemas/Outlier.yaml new file mode 100644 index 000000000..e568ba9df --- /dev/null +++ b/static/idn-api/beta/schemas/Outlier.yaml @@ -0,0 +1,62 @@ +type : object +properties: + id: + type: string + description: The identity's unique identifier for the outlier record + example: 5be33d3e-c54d-4ed7-af73-2380543e8283 + identityId: + type: string + description: The ID of the identity that is detected as an outlier + example: 5be33d3e-c54d-4ed7-af73-2380543e8283 + type: + type: string + enum: + - LOW_SIMILARITY + - STRUCTURAL + description: The type of outlier summary + example: LOW_SIMILARITY + firstDetectionDate: + type: string + format: date-time + description: The first date the outlier was detected + example: "2021-05-01T18:40:35.772Z" + latestDetectionDate: + type: string + format: date-time + description: The most recent date the outlier was detected + example: "2021-05-03T18:40:35.772Z" + ignored: + type: boolean + description: Flag whether or not the outlier has been ignored + example: false + attributes: + type: object + description: Object containing mapped identity attributes + example: + { + displayName: "John Smith", + jobTitle: "Software Engineer", + department: "Engineering" + } + score: + type: number + format: float + description: The outlier score determined by the detection engine ranging from 0..1 + example: 0.92 + unignoreType: + type: string + enum: + - MANUAL + - AUTOMATIC + description: Enum value of if the outlier manually or automatically un-ignored. Will be NULL if outlier is not ignored + example: MANUAL + unignoreDate: + type: string + format: date-time + description: shows date when last time has been unignored outlier + example: "2021-06-01T18:40:35.772Z" + ignoreDate: + type: string + format: date-time + description: shows date when last time has been ignored outlier + example: "2021-06-01T18:40:35.772Z" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/OutlierReference.yaml b/static/idn-api/beta/schemas/OutlierReference.yaml new file mode 100644 index 000000000..a56a53f9e --- /dev/null +++ b/static/idn-api/beta/schemas/OutlierReference.yaml @@ -0,0 +1,25 @@ +type: object +properties: + identityId: + type: string + description: The unique identitifer for the identity who is an outlier + example: 2c9180867769897d01776ed5f1255cff + outlierType: + type: string + enum: + - LOW_SIMILARITY + - STRUCTURAL + description: Type of outlier determined by recommendation engine + example: LOW_SIMILARITY + outlierState: + type: object + description: An object that contains the current state of why an outlier is an outlier. This allows ida-outliers to compare a snapshot of the outlier when it was first detected vs the most recent detection to find any changes in the outlier + example: + { + entitlementIds: ["2c9180867769897d01776ed5f1655d07", "2c9180867769897d01776ed5f1675d08"] + } + outlierScore: + type: number + format: float + description: The outlier score determined by the detection engine ranging from 0..1 + example: 0.92 diff --git a/static/idn-api/beta/schemas/OutlierSummary.yaml b/static/idn-api/beta/schemas/OutlierSummary.yaml new file mode 100644 index 000000000..1daf721b1 --- /dev/null +++ b/static/idn-api/beta/schemas/OutlierSummary.yaml @@ -0,0 +1,24 @@ +type : object +properties: + type: + type: string + enum: + - LOW_SIMILARITY + - STRUCTURAL + description: The type of outlier summary + example: LOW_SIMILARITY + snapshotDate: + type: string + format: date-time + description: The date the bulk outlier detection ran/snapshot was created + example: "2021-05-01T18:40:35.772Z" + totalOutliers: + type: integer + description: Total number of outliers for the customer making the request + example: 50 + totalIdentities: + type: integer + description: Total number of identities for the customer making the request + example: 5000 + + diff --git a/static/idn-api/beta/schemas/OutliersBulkDetectionRequest.yaml b/static/idn-api/beta/schemas/OutliersBulkDetectionRequest.yaml new file mode 100644 index 000000000..d48579a0f --- /dev/null +++ b/static/idn-api/beta/schemas/OutliersBulkDetectionRequest.yaml @@ -0,0 +1,31 @@ +type : object +properties: + startTimestamp: + type: string + format: 'date-time' + description: Timestamp in which the (POSTing) outlier detection engine run began + example: '2022-03-12T13:35:39.098Z' + outliers: + type: array + description: The list of outliers detected in the outlier detection engine run + items: + $ref: './OutlierReference.yaml' + example: "2b568c65bc3c4c57a43bd97e3a8e41" + outlierTypesUsed: + type: array + items: + type: string + description: A list of outlier types the current outlier detection engine run attempted to find + example: ["LOW_SIMILARITY", "STRUCTURAL"] +example: + startTimestamp: "2022-03-12T13:35:39.098Z" + outlierTypesUsed: ["LOW_SIMILARITY", "STRUCTURAL"] + outliers: [ + { + identityId: "2c9180867769897d01776ed5f1255cff", + outlierType: "LOW_SIMILARITY", + outlierState: { + entitlementIds: ["2c9180867769897d01776ed5f1655d07", "2c9180867769897d01776ed5f1675d08"] + } + } + ] \ No newline at end of file diff --git a/static/idn-api/beta/schemas/OwnerResponse.yaml b/static/idn-api/beta/schemas/OwnerResponse.yaml new file mode 100644 index 000000000..d2ce6f4e0 --- /dev/null +++ b/static/idn-api/beta/schemas/OwnerResponse.yaml @@ -0,0 +1,11 @@ +type: object +properties: + id: + type: string + description: the owner id + displayName: + type: string + description: the name of the owner +example: + id: '2c91808a77ff216301782327a50f09bf' + displayName: 'Approver 1' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/PasswordChangeRequest.yaml b/static/idn-api/beta/schemas/PasswordChangeRequest.yaml new file mode 100644 index 000000000..adcdef1af --- /dev/null +++ b/static/idn-api/beta/schemas/PasswordChangeRequest.yaml @@ -0,0 +1,25 @@ +type: object +properties: + identityId: + type: string + description: The identity ID that requested the password change + example: 8a807d4c73c545510173c545f0a002ff + encryptedPassword: + type: string + description: The RSA encrypted password + example: XzN+YwKgr2C+InkMYFMBG3UtjMEw5ZIql/XFlXo8cJNeslmkplx6vn4kd4/43IF9STBk5RnzR6XmjpEO+FwHDoiBwYZAkAZK/Iswxk4OdybG6Y4MStJCOCiK8osKr35IMMSV/mbO4wAeltoCk7daTWzTGLiI6UaT5tf+F2EgdjJZ7YqM8W8r7aUWsm3p2Xt01Y46ZRx0QaM91QruiIx2rECFT2pUO0wr+7oQ77jypATyGWRtADsu3YcvCk/6U5MqCnXMzKBcRas7NnZdSL/d5H1GglVGz3VLPMaivG4/oL4chOMmFCRl/zVsGxZ9RhN8rxsRGFFKn+rhExTi+bax3A== + publicKeyId: + type: string + description: The encryption key ID + example: YWQ2NjQ4MTItZjY0NC00MWExLWFjMjktOGNmMzU3Y2VlNjk2 + accountId: + type: string + description: >- + Account ID of the account + This is specified per account schema in the source configuration. It is used to distinguish accounts. + More info can be found here https://community.sailpoint.com/t5/IdentityNow-Connectors/How-do-I-designate-an-account-attribute-as-the-Account-ID-for-a/ta-p/80350 + example: CN=Abby Smith,OU=Austin,OU=Americas,OU=Demo,DC=seri,DC=acme,DC=com + sourceId: + type: string + description: The ID of the source for which identity is requesting the password change + example: 8a807d4c73c545510173c545d4b60246 \ No newline at end of file diff --git a/static/idn-api/beta/schemas/PasswordChangeResponse.yaml b/static/idn-api/beta/schemas/PasswordChangeResponse.yaml new file mode 100644 index 000000000..a0146a8bc --- /dev/null +++ b/static/idn-api/beta/schemas/PasswordChangeResponse.yaml @@ -0,0 +1,14 @@ +type: object +properties: + requestId: + type: string + nullable: true + description: The password change request ID + example: 089899f13a8f4da7824996191587bab9 + state: + type: string + enum: + - IN_PROGRESS + - FINISHED + - FAILED + description: Password change state \ No newline at end of file diff --git a/static/idn-api/beta/schemas/PasswordDigitToken.yaml b/static/idn-api/beta/schemas/PasswordDigitToken.yaml new file mode 100644 index 000000000..73c251586 --- /dev/null +++ b/static/idn-api/beta/schemas/PasswordDigitToken.yaml @@ -0,0 +1,10 @@ +type: object +properties: + digitToken: + type: string + description: The digit token for password management + example: 09087713 + requestId: + type: string + description: The reference ID of the digit token generation request + example: e1267ecd-fcd9-4c73-9c55-12555efad136 \ No newline at end of file diff --git a/static/idn-api/beta/schemas/PasswordDigitTokenReset.yaml b/static/idn-api/beta/schemas/PasswordDigitTokenReset.yaml new file mode 100644 index 000000000..80e5da293 --- /dev/null +++ b/static/idn-api/beta/schemas/PasswordDigitTokenReset.yaml @@ -0,0 +1,16 @@ +type: object +required: + - userId +properties: + userId: + type: string + description: The uid of the user requested for digit token + example: Abby.Smith + length: + type: integer + description: The length of digit token. It should be from 6 to 18, inclusive. The default value is 6. + example: 8 + durationMinutes: + type: integer + description: The time to live for the digit token in minutes. The default value is 5 minutes. + example: 5 \ No newline at end of file diff --git a/static/idn-api/beta/schemas/PasswordInfo.yaml b/static/idn-api/beta/schemas/PasswordInfo.yaml new file mode 100644 index 000000000..f25d5fe65 --- /dev/null +++ b/static/idn-api/beta/schemas/PasswordInfo.yaml @@ -0,0 +1,33 @@ +type: object +properties: + identityId: + type: string + example: "2c918085744fec4301746f9a5bce4605" + sourceId: + type: string + example: "2c918083746f642c01746f990884012a" + publicKeyId: + type: string + example: "N2M1OTJiMGEtMDJlZS00ZWU3LTkyYTEtNjA5YmI5NWE3ZWVh" + publicKey: + type: string + description: User's public key with Base64 encoding + example: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuGFkWi2J75TztpbaPKd36bJnIB3J8gZ6UcoS9oSDYsqBzPpTsfZXYaEf4Y4BKGgJIXmE/lwhwuj7mU1itdZ2qTSNFtnXA8Fn75c3UUkk+h+wdZbkuSmqlsJo3R1OnJkwkJggcAy9Jvk9jlcrNLWorpQ1w9raUvxtvfgkSdq153KxotenQ1HciSyZ0nA/Kw0UaucLnho8xdRowZs11afXGXA9IT9H6D8T6zUdtSxm0nAyH+mluma5LdTfaM50W3l/L8q56Vrqmx2pZIiwdx/0+g3Y++jV70zom0ZBkC1MmSoLMrQYG5OICNjr72f78B2PaGXfarQHqARLjKpMVt9YIQIDAQAB" + accounts: + type: array + description: Account info related to queried identity and source + items: + $ref: './PasswordInfoAccount.yaml' + policies: + type: array + description: Password constraints + items: + type: string + example: + [ + "passwordRepeatedChar is 3", + "passwordMinAlpha is 1", + "passwordMinLength is 5", + "passwordMinNumeric is 1" + ] + diff --git a/static/idn-api/beta/schemas/PasswordInfoAccount.yaml b/static/idn-api/beta/schemas/PasswordInfoAccount.yaml new file mode 100644 index 000000000..7adc75379 --- /dev/null +++ b/static/idn-api/beta/schemas/PasswordInfoAccount.yaml @@ -0,0 +1,16 @@ +type: object +properties: + accountId: + type: string + description: >- + Account ID of the account. + This is specified per account schema in the source configuration. It is used to distinguish accounts. + More info can be found here https://community.sailpoint.com/t5/IdentityNow-Connectors/How-do-I-designate-an-account-attribute-as-the-Account-ID-for-a/ta-p/80350 + example: CN=Abby Smith,OU=Austin,OU=Americas,OU=Demo,DC=seri,DC=acme,DC=com + accountName: + type: string + description: >- + Display name of the account. + This is specified per account schema in the source configuration. It is used to display name of the account. + More info can be found here https://community.sailpoint.com/t5/IdentityNow-Connectors/How-do-I-designate-an-account-attribute-as-the-Account-Name-for/ta-p/74008 + example: Abby.Smith \ No newline at end of file diff --git a/static/idn-api/beta/schemas/PasswordInfoQueryDTO.yaml b/static/idn-api/beta/schemas/PasswordInfoQueryDTO.yaml new file mode 100644 index 000000000..6a701ea25 --- /dev/null +++ b/static/idn-api/beta/schemas/PasswordInfoQueryDTO.yaml @@ -0,0 +1,10 @@ +type: object +properties: + userName: + type: string + description: The login name of the user + example: Abby.Smith + sourceName: + type: string + description: The display name of the source + example: My-AD \ No newline at end of file diff --git a/static/idn-api/beta/schemas/PasswordOrgConfig.yaml b/static/idn-api/beta/schemas/PasswordOrgConfig.yaml new file mode 100644 index 000000000..3599e3c4a --- /dev/null +++ b/static/idn-api/beta/schemas/PasswordOrgConfig.yaml @@ -0,0 +1,17 @@ +type: object +properties: + customInstructionsEnabled: + type: boolean + description: Indicator whether custom password instructions feature is enabled. The default value is false. + digitTokenEnabled: + type: boolean + description: Indicator whether "digit token" feature is enabled. The default value is false. + example: true + digitTokenDurationMinutes: + type: integer + description: The duration of "digit token" in minutes. The default value is 5. + example: 10 + digitTokenLength: + type: integer + description: The length of "digit token". The default value is 6. + example: 9 \ No newline at end of file diff --git a/static/idn-api/beta/schemas/PasswordStatus.yaml b/static/idn-api/beta/schemas/PasswordStatus.yaml new file mode 100644 index 000000000..7102457f1 --- /dev/null +++ b/static/idn-api/beta/schemas/PasswordStatus.yaml @@ -0,0 +1,24 @@ +type: object +properties: + requestId: + type: string + nullable: true + description: The password change request ID + example: 089899f13a8f4da7824996191587bab9 + state: + type: string + enum: + - IN_PROGRESS + - FINISHED + - FAILED + description: Password change state + errors: + type: array + items: + type: string + description: The errors during the password change request + sourceIds: + type: array + items: + type: string + description: List of source IDs in the password change request \ No newline at end of file diff --git a/static/idn-api/beta/schemas/PasswordSyncGroup.yaml b/static/idn-api/beta/schemas/PasswordSyncGroup.yaml new file mode 100644 index 000000000..4bc1e5390 --- /dev/null +++ b/static/idn-api/beta/schemas/PasswordSyncGroup.yaml @@ -0,0 +1,19 @@ +type: object +properties: + id: + type: string + description: ID of the sync group + example: 6881f631-3bd5-4213-9c75-8e05cc3e35dd + name: + description: Name of the sync group + type: string + example: Password Sync Group 1 + passwordPolicyId: + type: string + example: "2c91808d744ba0ce01746f93b6204501" + sourceIds: + type: array + description: List of password managed sources IDs + items: + type: string + example: ["2c918084660f45d6016617daa9210584", "2c918084660f45d6016617daa9210500"] \ No newline at end of file diff --git a/static/idn-api/beta/schemas/PasswordUpdateRequest.yaml b/static/idn-api/beta/schemas/PasswordUpdateRequest.yaml new file mode 100644 index 000000000..41f8b4e19 --- /dev/null +++ b/static/idn-api/beta/schemas/PasswordUpdateRequest.yaml @@ -0,0 +1,6 @@ +type: object +properties: + password: + type: string + description: New Auth User password (hash). + example: "28efb68dcba507ecd182bead31e4e2d159b0f9185861d1ebfe60a12dfb310300" diff --git a/static/idn-api/beta/schemas/PeerGroupMember.yaml b/static/idn-api/beta/schemas/PeerGroupMember.yaml new file mode 100644 index 000000000..82e7bfd50 --- /dev/null +++ b/static/idn-api/beta/schemas/PeerGroupMember.yaml @@ -0,0 +1,17 @@ +type: object +properties: + id: + type: string + description: A unique identifier for the peer group member. + type: + type: string + description: The type of the peer group member. + peer_group_id: + type: string + description: The ID of the peer group. + attributes: + type: object + additionalProperties: + type: object + description: >- + Arbitrary key-value pairs, belonging to the peer group member. \ No newline at end of file diff --git a/static/idn-api/beta/schemas/PendingApproval.yaml b/static/idn-api/beta/schemas/PendingApproval.yaml new file mode 100644 index 000000000..6ab78739f --- /dev/null +++ b/static/idn-api/beta/schemas/PendingApproval.yaml @@ -0,0 +1,77 @@ +type: object +properties: + id: + type: string + example: 2c9180835d2e5168015d32f890ca1581 + description: The approval id. + name: + type: string + example: "Pending approval name" + description: The name of the approval. + created: + type: string + format: 'date-time' + description: When the approval was created. + example: '2017-07-11T18:45:37.098Z' + modified: + type: string + format: 'date-time' + description: When the approval was modified last time. + example: '2018-07-25T20:22:28.104Z' + requestCreated: + type: string + format: 'date-time' + description: When the access-request was created. + example: '2017-07-11T18:45:35.098Z' + requestType: + $ref: '../../v3/schemas/AccessRequestType.yaml' + description: If the access-request was for granting or revoking access. + requester: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: The identity that requested the item. + requestedFor: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: The identity for whom the item is requested for. + owner: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: The owner or approver of the approval. + requestedObject: + $ref: './RequestableObjectReference.yaml' + description: The requested access item. + requesterComment: + $ref: '../../v3/schemas/CommentDto.yaml' + description: The requester's comment. + previousReviewersComments: + type: array + items: + $ref: '../../v3/schemas/CommentDto.yaml' + description: The history of the previous reviewers comments. + forwardHistory: + type: array + items: + $ref: '../../v3/schemas/ApprovalForwardHistory.yaml' + description: The history of approval forward action. + commentRequiredWhenRejected: + type: boolean + example: true + description: When true the rejector has to provide comments when rejecting + actionInProcess: + $ref: './PendingApprovalAction.yaml' + description: Action that is performed on this approval, and system has not finished performing that action yet. + removeDate: + type: string + description: The date the role or access profile is no longer assigned to the specified identity. + format: 'date-time' + example: '2020-07-11T00:00:00Z' + removeDateUpdateRequested: + type: boolean + example: true + description: If true, then the request is to change the remove date or sunset date. + currentRemoveDate: + type: string + description: The remove date or sunset date that was assigned at the time of the request. + format: 'date-time' + example: '2020-07-11T00:00:00Z' + sodViolationContext: + $ref: './SodViolationContextCheckCompleted.yaml' + description: The details of the SOD violations for the associated approval. diff --git a/static/idn-api/beta/schemas/PendingApprovalAction.yaml b/static/idn-api/beta/schemas/PendingApprovalAction.yaml new file mode 100644 index 000000000..84a1a685f --- /dev/null +++ b/static/idn-api/beta/schemas/PendingApprovalAction.yaml @@ -0,0 +1,8 @@ +type: string +enum: + - APPROVED + - REJECTED + - FORWARDED +description: >- + Enum represents action that is being processed on an approval. +example: APPROVED diff --git a/static/idn-api/beta/schemas/PermissionDto.yaml b/static/idn-api/beta/schemas/PermissionDto.yaml new file mode 100644 index 000000000..25eb8b837 --- /dev/null +++ b/static/idn-api/beta/schemas/PermissionDto.yaml @@ -0,0 +1,16 @@ +type: object +description: Simplified DTO for the Permission objects stored in SailPoint's database. The data is aggregated from + customer systems and is free-form, so its appearance can vary largely between different clients/customers. +properties: + rights: + type: array + description: All the rights (e.g. actions) that this permission allows on the target + readOnly: true + items: + type: string + example: SELECT + target: + type: string + description: The target the permission would grants rights on. + readOnly: true + example: SYS.GV_$TRANSACTION diff --git a/static/idn-api/beta/schemas/PreferencesDto.yaml b/static/idn-api/beta/schemas/PreferencesDto.yaml new file mode 100644 index 000000000..dd24a5060 --- /dev/null +++ b/static/idn-api/beta/schemas/PreferencesDto.yaml @@ -0,0 +1,19 @@ +type: object +description: >- + Maps an Identity's attribute key to a list of preferred notification mediums. +properties: + key: + type: string + description: The template notification key. + example: 'cloud_manual_work_item_summary' + mediums: + type: array + description: List of preferred notification mediums, i.e., the mediums (or method) for which notifications are enabled. More mediums may be added in the future. + items: + $ref: './Medium.yaml' + example: ["EMAIL"] + modified: + type: string + description: Modified date of preference + format: 'date-time' + example: '2020-05-15T14:37:06.909Z' diff --git a/static/idn-api/beta/schemas/ProvisioningConfig.yaml b/static/idn-api/beta/schemas/ProvisioningConfig.yaml new file mode 100644 index 000000000..eddc4243c --- /dev/null +++ b/static/idn-api/beta/schemas/ProvisioningConfig.yaml @@ -0,0 +1,21 @@ +type: object +description: Specification of a Service Desk integration provisioning configuration. +properties: + universalManager: + description: Specifies whether this configuration is used to manage provisioning requests for all sources from the org. If true, no managedResourceRefs are allowed. + type: boolean + readOnly: true + managedResourceRefs: + description: References to sources for the Service Desk integration template. May only be specified if universalManager is false. + type: array + items: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + default: + type: SOURCE + planInitializerScript: + description: This is a reference to a plan initializer script. + type: object + properties: + source: + description: This is a Rule that allows provisioning instruction changes. + type: string diff --git a/static/idn-api/beta/schemas/PublicIdentityAttributeConfig.yaml b/static/idn-api/beta/schemas/PublicIdentityAttributeConfig.yaml new file mode 100644 index 000000000..e03edf9d1 --- /dev/null +++ b/static/idn-api/beta/schemas/PublicIdentityAttributeConfig.yaml @@ -0,0 +1,13 @@ +type: object +description: >- + Used to map an attribute key for an Identity to its display name. +properties: + key: + type: string + description: "the key of the attribute" + example: "country" + name: + type: string + description: "the display name of the attribute" + example: "Country" + diff --git a/static/idn-api/beta/schemas/PublicIdentityConfig.yaml b/static/idn-api/beta/schemas/PublicIdentityConfig.yaml new file mode 100644 index 000000000..ce30db549 --- /dev/null +++ b/static/idn-api/beta/schemas/PublicIdentityConfig.yaml @@ -0,0 +1,15 @@ +type: object +description: >- + Details of up to 5 Identity attributes that will be publicly accessible for all Identities to anyone in the org +properties: + attributes: + type: array + items: + $ref: './PublicIdentityAttributeConfig.yaml' + modifiedBy: + $ref: '../../v3/schemas/IdentityReference.yaml' + modified: + type: string + description: "the date/time of the modification" + format: 'date-time' + example: '2018-06-25T20:22:28.104Z' diff --git a/static/idn-api/beta/schemas/QueuedCheckConfigDetails.yaml b/static/idn-api/beta/schemas/QueuedCheckConfigDetails.yaml new file mode 100644 index 000000000..05466ea5b --- /dev/null +++ b/static/idn-api/beta/schemas/QueuedCheckConfigDetails.yaml @@ -0,0 +1,14 @@ +description: Configuration of maximum number days and interval for checking Service Desk integration queue status +required: + - provisioningStatusCheckIntervalMinutes + - provisioningMaxStatusCheckDays +type: object +properties: + provisioningStatusCheckIntervalMinutes: + description: interval in minutes between status checks + type: string + example: 30 + provisioningMaxStatusCheckDays: + description: maximum number of days to check + type: string + example: 2 diff --git a/static/idn-api/beta/schemas/Reassignment.yaml b/static/idn-api/beta/schemas/Reassignment.yaml new file mode 100644 index 000000000..3216d3a9f --- /dev/null +++ b/static/idn-api/beta/schemas/Reassignment.yaml @@ -0,0 +1,8 @@ +type: object +properties: + from: + $ref: './CertificationReference.yaml' + comment: + type: string + description: Comments from the previous reviewer. + example: Please review diff --git a/static/idn-api/beta/schemas/RecommendationConfigDto.yaml b/static/idn-api/beta/schemas/RecommendationConfigDto.yaml new file mode 100644 index 000000000..775653aa3 --- /dev/null +++ b/static/idn-api/beta/schemas/RecommendationConfigDto.yaml @@ -0,0 +1,18 @@ +type: object +properties: + recommenderFeatures: + type: array + items: + type: string + description: List of identity attributes to use for calculating certification recommendations + example: ["jobTitle", "location", "peer_group", "department", "active"] + peerGroupPercentageThreshold: + type: number + description: The percent value that the recommendation calculation must surpass to produce a YES recommendation + minimum: 0.0 + maximum: 1.0 + example: 0.5 + forceRefresh: + type: boolean + description: If true, rulesRecommenderConfig will be refreshed with new programatically selected attribute and threshold values on the next pipeline run + example: false \ No newline at end of file diff --git a/static/idn-api/beta/schemas/RecommendationRequest.yaml b/static/idn-api/beta/schemas/RecommendationRequest.yaml new file mode 100644 index 000000000..d689a38d0 --- /dev/null +++ b/static/idn-api/beta/schemas/RecommendationRequest.yaml @@ -0,0 +1,8 @@ +type: object +properties: + identityId: + type: string + description: The identity ID + example: 2c938083633d259901633d25c68c00fa + item: + $ref: './AccessItemRef.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/RecommendationRequestDto.yaml b/static/idn-api/beta/schemas/RecommendationRequestDto.yaml new file mode 100644 index 000000000..4ba12103c --- /dev/null +++ b/static/idn-api/beta/schemas/RecommendationRequestDto.yaml @@ -0,0 +1,27 @@ +type: object +properties: + requests: + type: array + items: + $ref: './RecommendationRequest.yaml' + description: List of requests to retrieve recommendations + excludeInterpretations: + type: boolean + description: Exclude interpretations in the response if "true". Return interpretations in the response if this attribute is not specified. + default: 'false' + example: 'false' + includeTranslationMessages: + type: boolean + description: When set to true, the calling system uses the translated messages for the specified language + default: 'false' + example: 'false' + includeDebugInformation: + type: boolean + description: Returns the recommender calculations if set to true + default: 'false' + example: 'true' + prescribeMode: + type: boolean + description: When set to true, uses prescribedRulesRecommenderConfig to get identity attributes and peer group threshold instead of standard config. + default: 'false' + example: 'false' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/RecommendationResponse.yaml b/static/idn-api/beta/schemas/RecommendationResponse.yaml new file mode 100644 index 000000000..f6ea329ae --- /dev/null +++ b/static/idn-api/beta/schemas/RecommendationResponse.yaml @@ -0,0 +1,36 @@ +type: object +properties: + request: + $ref: './RecommendationRequest.yaml' + recommendation: + type: string + example: YES + description: The recommendation - + YES if the access is recommended, + NO if not recommended, + MAYBE if there is not enough information to make a recommendation, + NOT_FOUND if the identity is not found in the system + enum: + - YES + - NO + - MAYBE + - NOT_FOUND + interpretations: + type: array + items: + type: string + description: The list of interpretations explaining the recommendation. The array is empty if includeInterpretations is false or not present in the request. e.g. - [ "Not approved in the last 6 months." ]. Interpretations will be translated using the client's locale as found in the Accept-Language header. If a translation for the client's locale cannot be found, the US English translation will be returned. + example: [ + "75% of identities with the same department have this access. This information had a high impact on the overall score.", + "67% of identities with the same peer group have this access. This information had a low impact on the overall score.", + "42% of identities with the same location have this access. This information had a low impact on the overall score." + ] + translationMessages: + type: array + example: [{key: recommender-api.V2_WEIGHT_FEATURE_PRODUCT_INTERPRETATION_HIGH, values: ["75","department"]}] + items: + $ref: './TranslationMessage.yaml' + description: The list of translation messages, if they have been requested. + recommenderCalculations: + $ref: './RecommenderCalculations.yaml' + description: The calcuations performed behind the scenes that provide recommendations to the user. diff --git a/static/idn-api/beta/schemas/RecommendationResponseDto.yaml b/static/idn-api/beta/schemas/RecommendationResponseDto.yaml new file mode 100644 index 000000000..4d63a863a --- /dev/null +++ b/static/idn-api/beta/schemas/RecommendationResponseDto.yaml @@ -0,0 +1,6 @@ +type: object +properties: + response: + type: array + items: + $ref: './RecommendationResponse.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/RecommenderCalculations.yaml b/static/idn-api/beta/schemas/RecommenderCalculations.yaml new file mode 100644 index 000000000..680da3af7 --- /dev/null +++ b/static/idn-api/beta/schemas/RecommenderCalculations.yaml @@ -0,0 +1,35 @@ +properties: + identityId: + type: string + description: The ID of the identity + example: '2c91808457d8f3ab0157e3e62cb4213c' + entitlementId: + type: string + description: The entitlement ID + example: '2c91809050db617d0150e0bf3215385e' + recommendation: + type: string + description: The actual recommendation + example: 'YES' + overallWeightedScore: + type: number + description: The overall weighted score + featureWeightedScores: + type: object + description: The weighted score of each individual feature + additionalProperties: + type: number + threshold: + type: number + description: The configured value against which the overallWeightedScore is compared + identityAttributes: + type: object + description: The values for your configured features + additionalProperties: + type: object + properties: + value: + type: string + featureValues: + $ref: './FeatureValueDto.yaml' + description: The feature details \ No newline at end of file diff --git a/static/idn-api/beta/schemas/RemediationItemDetails.yaml b/static/idn-api/beta/schemas/RemediationItemDetails.yaml new file mode 100644 index 000000000..e58b524dc --- /dev/null +++ b/static/idn-api/beta/schemas/RemediationItemDetails.yaml @@ -0,0 +1,38 @@ +type: object +properties: + id: + type: string + description: The ID of the certification + example: 2c9180835d2e5168015d32f890ca1581 + targetId: + type: string + description: The ID of the certification target + example: 2c9180835d2e5168015d32f890ca1581 + targetName: + type: string + description: The name of the certification target + example: john.smith + targetDisplayName: + type: string + description: The display name of the certification target + example: emailAddress + applicationName: + type: string + description: The name of the application/source + example: Active Directory + attributeName: + type: string + description: The name of the attribute being certified + example: phoneNumber + attributeOperation: + type: string + description: The operation of the certification on the attribute + example: update + attributeValue: + type: string + description: The value of the attribute being certified + example: 512-555-1212 + nativeIdentity: + type: string + description: The native identity of the target + example: jason.smith2 diff --git a/static/idn-api/beta/schemas/ReportConfigDTO.yaml b/static/idn-api/beta/schemas/ReportConfigDTO.yaml new file mode 100644 index 000000000..3a1f21834 --- /dev/null +++ b/static/idn-api/beta/schemas/ReportConfigDTO.yaml @@ -0,0 +1,24 @@ +type: object +properties: + columnName: + type: string + description: Name of column in report + example: SOD Business Name + required: + type: boolean + description: If true, column is required in all reports, and this entry is immutable. A 400 error will result from any attempt to modify the column's definition. + example: true + default: false + included: + type: boolean + description: If true, column is included in the report. A 400 error will be thrown if an attempt is made to set included=false if required==true. + example: false + default: false + order: + type: integer + format: int32 + minimum: 0 + maximum: 2147483647 + description: Relative sort order for the column. Columns will be displayed left-to-right in nondecreasing order. + example: 2 + diff --git a/static/idn-api/beta/schemas/ReportResultReference.yaml b/static/idn-api/beta/schemas/ReportResultReference.yaml new file mode 100644 index 000000000..63db3619b --- /dev/null +++ b/static/idn-api/beta/schemas/ReportResultReference.yaml @@ -0,0 +1,13 @@ +allOf: +- $ref: '../../v3/schemas/BaseReferenceDto.yaml' +- type : object + properties: + status: + type: string + enum: + - SUCCESS + - WARNING + - ERROR + - TERMINATED + - TEMP_ERROR + - PENDING \ No newline at end of file diff --git a/static/idn-api/beta/schemas/ReportType.yaml b/static/idn-api/beta/schemas/ReportType.yaml new file mode 100644 index 000000000..128977a17 --- /dev/null +++ b/static/idn-api/beta/schemas/ReportType.yaml @@ -0,0 +1,6 @@ +type: string +enum: + - CAMPAIGN_COMPOSITION_REPORT + - CAMPAIGN_REMEDIATION_STATUS_REPORT + - CAMPAIGN_STATUS_REPORT + - CERTIFICATION_SIGNOFF_REPORT diff --git a/static/idn-api/beta/schemas/RequestableObjectReference.yaml b/static/idn-api/beta/schemas/RequestableObjectReference.yaml new file mode 100644 index 000000000..cf16f9ccc --- /dev/null +++ b/static/idn-api/beta/schemas/RequestableObjectReference.yaml @@ -0,0 +1,22 @@ +type: object +properties: + id: + type: string + example: 2c938083633d259901633d25c68c00fa + description: Id of the object. + name: + type: string + example: Object Name + description: Name of the object. + description: + type: string + example: Object Description + description: Description of the object. + type: + type: string + enum: + - ACCESS_PROFILE + - ROLE + - ENTITLEMENT + description: Type of the object. + example: ROLE \ No newline at end of file diff --git a/static/idn-api/beta/schemas/ResourceBundleMessage.yaml b/static/idn-api/beta/schemas/ResourceBundleMessage.yaml new file mode 100644 index 000000000..cc8726bc4 --- /dev/null +++ b/static/idn-api/beta/schemas/ResourceBundleMessage.yaml @@ -0,0 +1,10 @@ +type: object +properties: + key: + type: string + description: The key of the message + example: 'recommender-api.V2_WEIGHT_FEATURE_PRODUCT_INTERPRETATION_LOW' + format: + type: string + description: The format of the message + example: '{0,,\"i18n hint: percentage\"}% of identities with the same {1,,\"i18n hint: name of category feature\"} have this access. This information had a low impact on the overall score.' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/ResourceObject.yaml b/static/idn-api/beta/schemas/ResourceObject.yaml new file mode 100644 index 000000000..729f5ad32 --- /dev/null +++ b/static/idn-api/beta/schemas/ResourceObject.yaml @@ -0,0 +1,88 @@ +type: object +title: Resource Object +description: Representation of the object which is returned from source connectors. +properties: + instance: + description: Identifier of the specific instance where this object resides. + type: string + readOnly: true + identity: + description: Native identity of the object in the Source. + type: string + example: 'CN=Aaron Carr,OU=test1,DC=test2,DC=test' + readOnly: true + uuid: + description: Universal unique identifier of the object in the Source. + type: string + example: '{abf7bd9b-68b4-4d21-9b70-870c58ebf844}' + readOnly: true + previousIdentity: + description: Native identity that the object has previously. + type: string + readOnly: true + name: + description: Display name for this object. + type: string + example: 'Aaron Carr' + readOnly: true + objectType: + description: Type of object. + type: string + example: 'account' + readOnly: true + incomplete: + description: >- + A flag indicating that this is an incomplete object. + Used in special cases where the connector has to return account information in several phases and the objects + might not have a complete set of all account attributes. The attributes in this object will replace the + corresponding attributes in the Link, but no other Link attributes will be changed. + type: boolean + example: false + readOnly: true + incremental: + description: >- + A flag indicating that this is an incremental change object. + This is similar to incomplete but it also means that the values of any multi-valued attributes in this object + should be merged with the existing values in the Link rather than replacing the existing Link value. + type: boolean + example: false + readOnly: true + delete: + description: >- + A flag indicating that this object has been deleted. + This is set only when doing delta aggregation and the connector supports detection of native deletes. + type: boolean + example: false + readOnly: true + remove: + description: >- + A flag set indicating that the values in the attributes represent things to remove rather than things to add. + Setting this implies incremental. The values which are always for multi-valued attributes are removed from + the current values. + type: boolean + example: false + readOnly: true + missing: + description: >- + A list of attribute names that are not included in this object. + This is only used with SMConnector and will only contain "groups". + type: array + items: + type: string + example: [ "missFieldOne", "missFieldTwo" ] + readOnly: true + attributes: + description: Attributes of this ResourceObject. + type: object + example: { + "telephoneNumber": "12-(345)678-9012", + "mail": "example@test.com", + "displayName": "Aaron Carr" + } + readOnly: true + finalUpdate: + description: >- + In Aggregation, for sparse object the count for total accounts scanned identities updated is not incremented. + type: boolean + example: false + readOnly: true diff --git a/static/idn-api/beta/schemas/ResourceObjectsRequest.yaml b/static/idn-api/beta/schemas/ResourceObjectsRequest.yaml new file mode 100644 index 000000000..35fbd2f30 --- /dev/null +++ b/static/idn-api/beta/schemas/ResourceObjectsRequest.yaml @@ -0,0 +1,14 @@ +type: object +title: Resource Objects Request +description: Request model for peek resource objects from source connectors. +properties: + objectType: + type: string + description: The type of resource objects to iterate over. + default: account + example: group + maxCount: + type: integer + description: The maximum number of resource objects to iterate over and return. + default: 25 + example: 100 diff --git a/static/idn-api/beta/schemas/ResourceObjectsResponse.yaml b/static/idn-api/beta/schemas/ResourceObjectsResponse.yaml new file mode 100644 index 000000000..8c4d6609e --- /dev/null +++ b/static/idn-api/beta/schemas/ResourceObjectsResponse.yaml @@ -0,0 +1,30 @@ +type: object +title: Resource Objects Response +description: Response model for peek resource objects from source connectors. +properties: + id: + type: string + description: ID of the source + example: 2c91808568c529c60168cca6f90c1313 + readOnly: true + name: + type: string + description: Name of the source + example: ODS-AD-Test [source-999999] + readOnly: true + objectCount: + type: integer + description: The number of objects that were fetched by the connector. + example: 25 + readOnly: true + elapsedMillis: + type: integer + description: The number of milliseconds spent on the entire request. + example: 1055 + readOnly: true + resourceObjects: + type: array + items: + $ref: './ResourceObject.yaml' + description: Fetched objects from the source connector. + readOnly: true diff --git a/static/idn-api/beta/schemas/ResponseMode.yaml b/static/idn-api/beta/schemas/ResponseMode.yaml new file mode 100644 index 000000000..5f60740d7 --- /dev/null +++ b/static/idn-api/beta/schemas/ResponseMode.yaml @@ -0,0 +1,7 @@ +type: string +description: Response mode for trigger invocation. +enum: + - SYNC + - ASYNC + - DYNAMIC +example: SYNC diff --git a/static/idn-api/beta/schemas/ReviewData.yaml b/static/idn-api/beta/schemas/ReviewData.yaml new file mode 100644 index 000000000..c86a068db --- /dev/null +++ b/static/idn-api/beta/schemas/ReviewData.yaml @@ -0,0 +1,29 @@ +# Replaces AccessSummary.yaml +description: An object holding the entity that is being reviewed +type: object +properties: + entity: + type: object + properties: + type: + $ref: './CertificationItemType.yaml' + id: + type: string + description: The ID of the item whose data is in the review data + example: 2c9180867160846801719932c5153fb7 + name: + type: string + description: The name of the item whose data is in the review data + example: Role Name + entitlement: + $ref: '../../v3/schemas/reviews/ReviewableEntitlement.yaml' + accessProfile: + $ref: '../../v3/schemas/reviews/ReviewableAccessProfile.yaml' + role: + $ref: '../../v3/schemas/reviews/ReviewableRole.yaml' + identity: + $ref: './MemberReference.yaml' + roleCriteria: + $ref: './ComplexRoleCriterion.yaml' + rule: + $ref: './RuleReference.yaml' diff --git a/static/idn-api/beta/schemas/ReviewItem.yaml b/static/idn-api/beta/schemas/ReviewItem.yaml new file mode 100644 index 000000000..5230984f9 --- /dev/null +++ b/static/idn-api/beta/schemas/ReviewItem.yaml @@ -0,0 +1,32 @@ +# Replaces AccessReviewItem.yaml +type: object +properties: + id: + type: string + description: The review item's ID + example: ef38f94347e94562b5bb8424a56397d8 + type: + $ref: './CertificationItemType.yaml' + completed: + type: boolean + description: Indicates whether the review item is complete + example: false + newAccess: + type: boolean + description: Indicates whether the review item is for new access to a source + decision: + $ref: '../../v3/schemas/CertificationDecision.yaml' + proposedEndDate: + type: string + format: date-time + description: The end date proposed as part of decision to sunset a user's access + comments: + type: string + description: Comments for this review item + example: This user is still fulfulling this role + reviewData: + $ref: './ReviewData.yaml' + targetSummary: + $ref: './TargetSummary.yaml' + actor: + $ref: '../../v3/schemas/IdentityReferenceWithNameAndEmail.yaml' diff --git a/static/idn-api/beta/schemas/ReviewItemActivity.yaml b/static/idn-api/beta/schemas/ReviewItemActivity.yaml new file mode 100644 index 000000000..6be1e554a --- /dev/null +++ b/static/idn-api/beta/schemas/ReviewItemActivity.yaml @@ -0,0 +1,8 @@ +type: object +properties: + reviewItemId: + type: string + description: The review item's ID + example: ef38f94347e94562b5bb8424a56397d8 + activityData: + $ref: './ActivityData.yaml' diff --git a/static/idn-api/beta/schemas/ReviewItemsActivityTask.yaml b/static/idn-api/beta/schemas/ReviewItemsActivityTask.yaml new file mode 100644 index 000000000..78bc2ef11 --- /dev/null +++ b/static/idn-api/beta/schemas/ReviewItemsActivityTask.yaml @@ -0,0 +1,14 @@ +type: object +properties: + status: + type: string + enum: + - COMPLETE + - ERROR + - IN_PROGRESS + description: The status of the SaaSManagement activity data retrieval task + reviewItemsActivityData: + type: array + items: + type: object + $ref: './ReviewItemActivity.yaml' diff --git a/static/idn-api/beta/schemas/Reviewer.yaml b/static/idn-api/beta/schemas/Reviewer.yaml new file mode 100644 index 000000000..f96807764 --- /dev/null +++ b/static/idn-api/beta/schemas/Reviewer.yaml @@ -0,0 +1,20 @@ +description: Details of the reviewer for certification. +type: object +required: +- type +- id +- name +allOf: +- $ref: '../../v3/schemas/BaseReferenceDto.yaml' +properties: + type: + description: The type of object that the reviewer is. + enum: + - "IDENTITY" + - "GOVERNANCE_GROUP" + example: IDENTITY + email: + type: string + nullable: true + description: 'The email of the reviewing identity. Only applicable to `IDENTITY`' + example: reviewer@test.com diff --git a/static/idn-api/beta/schemas/RoleInsight.yaml b/static/idn-api/beta/schemas/RoleInsight.yaml new file mode 100644 index 000000000..b6ef9525d --- /dev/null +++ b/static/idn-api/beta/schemas/RoleInsight.yaml @@ -0,0 +1,23 @@ +type : object +properties: + id: + type: string + description: Insight id + example: "1467e61e-f284-439c-ba2d-c6cc11cf0941" + numberOfUpdates: + type: integer + description: Total number of updates for this role + example: 5 + createdDate: + type: string + format: 'date-time' + description: The date-time insights were last created for this role. + example: '2020-05-19T13:49:37.385Z' + role: + $ref: './RoleInsightsRole.yaml' + description: A role + insight: + $ref: './RoleInsightsInsight.yaml' + description: The kind of insight this is and some stats + + diff --git a/static/idn-api/beta/schemas/RoleInsightsEntitlement.yaml b/static/idn-api/beta/schemas/RoleInsightsEntitlement.yaml new file mode 100644 index 000000000..16276dd01 --- /dev/null +++ b/static/idn-api/beta/schemas/RoleInsightsEntitlement.yaml @@ -0,0 +1,28 @@ +type : object +properties: + name: + type: string + description: Name of the entitlement + id: + type: string + description: Id of the entitlement + description: + type: string + description: Description for the entitlement + source: + type: string + description: Source or the application for the entitlement + attribute: + type: string + description: Attribute for the entitlement + value: + type: string + description: Attribute value for the entitlement + +example: + name: "Administrator" + id: "8c190e67-87aa-4ed9-a90b-d9d5344523fb" + description: "Full administrative access to IdentityNow" + source: "IdentityNow" + attribute: "assignedGroups" + value: "ORG_ADMIN" diff --git a/static/idn-api/beta/schemas/RoleInsightsEntitlementChanges.yaml b/static/idn-api/beta/schemas/RoleInsightsEntitlementChanges.yaml new file mode 100644 index 000000000..4ae85a61f --- /dev/null +++ b/static/idn-api/beta/schemas/RoleInsightsEntitlementChanges.yaml @@ -0,0 +1,23 @@ +type : object +properties: + name: + type: string + description: Name of the entitlement + id: + type: string + description: Id of the entitlement + description: + type: string + description: Description for the entitlement + attribute: + type: string + description: Attribute for the entitlement + value: + type: string + description: Attribute value for the entitlement + source: + type: string + description: Source or the application for the entitlement + insight: + $ref: './RoleInsightsInsight.yaml' + description: The kind of insight this is and some stats \ No newline at end of file diff --git a/static/idn-api/beta/schemas/RoleInsightsIdentities.yaml b/static/idn-api/beta/schemas/RoleInsightsIdentities.yaml new file mode 100644 index 000000000..6309dfe04 --- /dev/null +++ b/static/idn-api/beta/schemas/RoleInsightsIdentities.yaml @@ -0,0 +1,21 @@ +type : object +properties: + id: + type: string + description: Id for identity + name: + type: string + description: Name for identity + attributes: + type: object + additionalProperties: + type: string +example: + id: "8c190e67-87aa-4ed9-a90b-d9d5344523fb" + name: "Adam Smith" + attributes: { + "department": "Human Resources-tah-mgb-dnd", + "firstName": Adam, + "jobTitle": "Sales Analyst", + "location": "Mexico" + } \ No newline at end of file diff --git a/static/idn-api/beta/schemas/RoleInsightsInsight.yaml b/static/idn-api/beta/schemas/RoleInsightsInsight.yaml new file mode 100644 index 000000000..b46f94f50 --- /dev/null +++ b/static/idn-api/beta/schemas/RoleInsightsInsight.yaml @@ -0,0 +1,18 @@ +type : object +properties: + type: + type: string + description: The number of identities in this role with the entitlement. + example: "ADD" + identitiesWithAccess: + type: integer + description: The number of identities in this role with the entitlement. + example: 850 + identitiesImpacted: + type: integer + description: The number of identities in this role that do not have the specified entitlement. + example: 150 + totalNumberOfIdentities: + type: integer + description: The total number of identities. + example: 1000 \ No newline at end of file diff --git a/static/idn-api/beta/schemas/RoleInsightsResponse.yaml b/static/idn-api/beta/schemas/RoleInsightsResponse.yaml new file mode 100644 index 000000000..6604aca1a --- /dev/null +++ b/static/idn-api/beta/schemas/RoleInsightsResponse.yaml @@ -0,0 +1,40 @@ +type: object +properties: + id: + type: string + description: Request Id for a role insight generation request + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + createdDate: + type: string + format: 'date-time' + description: The date-time role insights request was created. + example: '2020-09-16T18:49:32.150Z' + lastGenerated: + type: string + format: 'date-time' + description: The date-time role insights request was completed. + example: '2020-09-16T18:50:12.150Z' + numberOfUpdates: + type: integer + description: Total number of updates for this request. Starts with 0 and will have correct number when request is COMPLETED. + example: 0 + roleIds: + description: The role IDs that are in this request. + type: array + items: + type: string + status: + type: string + description: Request status + enum: + - CREATED + - IN PROGRESS + - COMPLETED + - FAILED +example: + id: "c9aa02f7-86b0-4bc4-84bd-3116a6131e77" + createdDate: "2020-09-16T18:49:32.150Z" + lastGenerated: "2020-09-16T18:49:32.150Z" + numberOfUpdates: 0 + roleIds: ["2c91808e720e94f8017253287c0a44f4", "2c918087723ac2800172532191540e03", "2c9180986e4c8592016e6b15eaef447c"] + status: "CREATED" diff --git a/static/idn-api/beta/schemas/RoleInsightsRole.yaml b/static/idn-api/beta/schemas/RoleInsightsRole.yaml new file mode 100644 index 000000000..72b814992 --- /dev/null +++ b/static/idn-api/beta/schemas/RoleInsightsRole.yaml @@ -0,0 +1,22 @@ +type : object +properties: + name: + type: string + description: Role name + example: "Software Engineer" + id: + type: string + description: Role id + example: "1467e61e-f284-439c-ba2d-c6cc11cf0941" + description: + type: string + description: Role description + example: "Person who develops software" + ownerName: + type: string + description: Role owner name + example: "Bob" + ownerId: + type: string + description: Role owner id + example: "1467e61e-f284-439c-ba2d-c6cc11cf0941" diff --git a/static/idn-api/beta/schemas/RoleInsightsSummary.yaml b/static/idn-api/beta/schemas/RoleInsightsSummary.yaml new file mode 100644 index 000000000..9eb4d56ac --- /dev/null +++ b/static/idn-api/beta/schemas/RoleInsightsSummary.yaml @@ -0,0 +1,26 @@ +type : object +properties: + numberOfUpdates: + type: integer + description: Total number of roles with updates + lastGenerated: + type: string + format: 'date-time' + description: The date-time role insights were last found. + example: '2020-05-19T13:49:37.385Z' + entitlementsIncludedInRoles: + type: integer + description: The number of entitlements included in roles (vs free radicals). + example: 45 + totalNumberOfEntitlements: + type: integer + description: The total number of entitlements. + example: 250 + identitiesWithAccessViaRoles: + type: integer + description: The number of identities in roles vs. identities with just entitlements and not in roles. + example: 550 + totalNumberOfIdentities: + type: integer + description: The total number of identities. + example: 980 diff --git a/static/idn-api/beta/schemas/RoleMiningEntitlement.yaml b/static/idn-api/beta/schemas/RoleMiningEntitlement.yaml new file mode 100644 index 000000000..0d3b7453c --- /dev/null +++ b/static/idn-api/beta/schemas/RoleMiningEntitlement.yaml @@ -0,0 +1,34 @@ +type : object +properties: + entitlementRef: + $ref: './RoleMiningEntitlementRef.yaml' + description: Details about the entitlement + name: + type: string + description: Name of the entitlement + applicationName: + type: string + description: Application name of the entitlement + identityCount: + type: integer + description: The number of identities with this entitlement in a role. + example: 45 + popularity: + type: integer + description: The % popularity of this entitlement in a role. + example: 65 + popularityInOrg: + type: integer + description: TThe % popularity of this entitlement in the org. + example: 35 +example: + entitlementRef: { + id: "2c9180877212632a017228d5a796292b", + name: "entitlement.10", + description: "Read access" + } + name: "Administrator" + applicationName: "Slack" + identityCount: "8" + popularity: "65" + popularityInOrg: "35" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/RoleMiningEntitlementRef.yaml b/static/idn-api/beta/schemas/RoleMiningEntitlementRef.yaml new file mode 100644 index 000000000..8d421751b --- /dev/null +++ b/static/idn-api/beta/schemas/RoleMiningEntitlementRef.yaml @@ -0,0 +1,11 @@ +type : object +properties: + id: + type: string + description: Id of the entitlement + name: + type: string + description: Name of the entitlement + description: + type: string + description: Description forthe entitlement diff --git a/static/idn-api/beta/schemas/RoleMiningIdentity.yaml b/static/idn-api/beta/schemas/RoleMiningIdentity.yaml new file mode 100644 index 000000000..e485923e5 --- /dev/null +++ b/static/idn-api/beta/schemas/RoleMiningIdentity.yaml @@ -0,0 +1,21 @@ +type : object +properties: + id: + type: string + description: Id of the identity + name: + type: string + description: Name of the identity + attributes: + type: object + additionalProperties: + type: string +example: + id: "2c9180877212632a017228d5934525e6" + name: "Allene Abernathy-Welch" + attributes: { + "jobTitle": "SQL Developer", + "department": "IT", + "location": "NYC", + "firstName": "Allene" + } diff --git a/static/idn-api/beta/schemas/RoleMiningIdentityDistribution.yaml b/static/idn-api/beta/schemas/RoleMiningIdentityDistribution.yaml new file mode 100644 index 000000000..5cce534fa --- /dev/null +++ b/static/idn-api/beta/schemas/RoleMiningIdentityDistribution.yaml @@ -0,0 +1,11 @@ +type: object +properties: + attributeName: + type: string + description: Id of the potential role + distribution: + type: array + items: + type: object + additionalProperties: + type: string diff --git a/static/idn-api/beta/schemas/RoleMiningPotentialRole.yaml b/static/idn-api/beta/schemas/RoleMiningPotentialRole.yaml new file mode 100644 index 000000000..8069ac2ed --- /dev/null +++ b/static/idn-api/beta/schemas/RoleMiningPotentialRole.yaml @@ -0,0 +1,44 @@ +type: object +properties: + createDate: + description: The creation date for a potential role + type: array + items: + type: string + entitlementCount: + type: integer + description: The number of entitlements in a potential role. + example: 25 + excludedEntitlements: + description: The list of entitlement ids to be excluded. + type: array + items: + type: string + id: + type: string + description: Id of the potential role + identityCount: + type: integer + description: The number of identities in a potential role. + example: 25 + identityDistribution: + description: Identity attribute distribution + type: array + items: + $ref: './RoleMiningIdentityDistribution.yaml' + identityIds: + description: The list of ids in a potential role. + type: array + items: + type: string + modifiedDate: + description: The modified date for a potential role + type: array + items: + type: string + name: + type: string + description: Name of the potential role + type: + $ref: './iai/RoleMiningRoleType.yaml' + description: Role mining potential type diff --git a/static/idn-api/beta/schemas/RoleMiningPotentialRoleApplication.yaml b/static/idn-api/beta/schemas/RoleMiningPotentialRoleApplication.yaml new file mode 100644 index 000000000..f8baa396c --- /dev/null +++ b/static/idn-api/beta/schemas/RoleMiningPotentialRoleApplication.yaml @@ -0,0 +1,11 @@ +type : object +properties: + id: + type: string + description: Id of the potential role + name: + type: string + description: Name of the potential role +example: + id: "2c9180877212632a017228d5a796292b" + name: "Slack" diff --git a/static/idn-api/beta/schemas/RoleMiningPotentialRoleEditEntitlements.yaml b/static/idn-api/beta/schemas/RoleMiningPotentialRoleEditEntitlements.yaml new file mode 100644 index 000000000..4297f33aa --- /dev/null +++ b/static/idn-api/beta/schemas/RoleMiningPotentialRoleEditEntitlements.yaml @@ -0,0 +1,13 @@ +type: object +properties: + ids: + description: The list of entitlement ids to be edited + type: array + items: + type: string + exclude: + type: boolean + description: If true, add ids to be exclusion list. If false, remove ids from the exclusion list. +example: + ids: ["entId1", "entId2"] + exclude: true diff --git a/static/idn-api/beta/schemas/RoleMiningPotentialRoleExportRequest.yaml b/static/idn-api/beta/schemas/RoleMiningPotentialRoleExportRequest.yaml new file mode 100644 index 000000000..005552bdc --- /dev/null +++ b/static/idn-api/beta/schemas/RoleMiningPotentialRoleExportRequest.yaml @@ -0,0 +1,13 @@ +type : object +properties: + minEntitlementPopularity: + type: integer + description: The minimum popularity among identities in the role which an entitlement must have to be included in the report + example: 0 + includeCommonAccess: + type: boolean + description: If false, do not include entitlements that are highly popular among the entire orginization + example: true +example: + minEntitlementPopularity: 0 + includeCommonAccess: true \ No newline at end of file diff --git a/static/idn-api/beta/schemas/RoleMiningPotentialRoleExportResponse.yaml b/static/idn-api/beta/schemas/RoleMiningPotentialRoleExportResponse.yaml new file mode 100644 index 000000000..fff9e75e7 --- /dev/null +++ b/static/idn-api/beta/schemas/RoleMiningPotentialRoleExportResponse.yaml @@ -0,0 +1,18 @@ +allOf: + - $ref: './RoleMiningPotentialRoleExportRequest.yaml' + - type : object + properties: + exportId: + type: string + format: uuid + description: ID used to reference this export + example: 0c6cdb76-1227-4aaf-af21-192dbdfbfa04 + status: + $ref: './RoleMiningPotentialRoleExportState.yaml' + description: The status of this export + example: "QUEUED" +example: + exportId: 0c6cdb76-1227-4aaf-af21-192dbdfbfa04 + status: "QUEUED" + minEntitlementPopularity: 0 + includeCommonAccess: true \ No newline at end of file diff --git a/static/idn-api/beta/schemas/RoleMiningPotentialRoleExportState.yaml b/static/idn-api/beta/schemas/RoleMiningPotentialRoleExportState.yaml new file mode 100644 index 000000000..845da096f --- /dev/null +++ b/static/idn-api/beta/schemas/RoleMiningPotentialRoleExportState.yaml @@ -0,0 +1,6 @@ +type: string +enum: + - QUEUED + - IN_PROGRESS + - SUCCESS + - ERROR \ No newline at end of file diff --git a/static/idn-api/beta/schemas/RoleMiningPotentialRoleProvisionRequest.yaml b/static/idn-api/beta/schemas/RoleMiningPotentialRoleProvisionRequest.yaml new file mode 100644 index 000000000..e011bfd93 --- /dev/null +++ b/static/idn-api/beta/schemas/RoleMiningPotentialRoleProvisionRequest.yaml @@ -0,0 +1,18 @@ +type : object +properties: + roleName: + type: string + description: Name of the new role being created + example: "Finance - Accounting" + roleDescription: + type: string + description: Short description of the new role being created + example: "General access for accounting department" + ownerId: + type: string + description: ID of the identity that will own this role + example: "2b568c65bc3c4c57a43bd97e3a8e41" +example: + roleName: "Finance - Accounting" + roleDescription: "General access for accounting department" + ownerId: "2b568c65bc3c4c57a43bd97e3a8e41" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/RoleMiningPotentialRoleProvisionState.yaml b/static/idn-api/beta/schemas/RoleMiningPotentialRoleProvisionState.yaml new file mode 100644 index 000000000..4461d5abf --- /dev/null +++ b/static/idn-api/beta/schemas/RoleMiningPotentialRoleProvisionState.yaml @@ -0,0 +1,6 @@ +type: string +enum: + - POTENTIAL + - PENDING + - COMPLETE + - FAILED diff --git a/static/idn-api/beta/schemas/RoleMiningPotentialRoleRef.yaml b/static/idn-api/beta/schemas/RoleMiningPotentialRoleRef.yaml new file mode 100644 index 000000000..bcf2ef949 --- /dev/null +++ b/static/idn-api/beta/schemas/RoleMiningPotentialRoleRef.yaml @@ -0,0 +1,9 @@ +type : object +properties: + id: + type: string + description: Id of the potential role + name: + type: string + description: Name of the potential role + diff --git a/static/idn-api/beta/schemas/RoleMiningPotentialRoleSummary.yaml b/static/idn-api/beta/schemas/RoleMiningPotentialRoleSummary.yaml new file mode 100644 index 000000000..c5bc5d5eb --- /dev/null +++ b/static/idn-api/beta/schemas/RoleMiningPotentialRoleSummary.yaml @@ -0,0 +1,47 @@ +type : object +properties: + potentialRoleRef: + $ref: './RoleMiningPotentialRoleRef.yaml' + description: Details about the potential role + identityCount: + type: integer + description: The number of identities in a potential role. + example: 25 + entitlementCount: + type: integer + description: The number of entitlements in a potential role. + example: 15 + identityGroupStatus: + type: string + description: The status for this identity group which can be "REQUESTED" or "OBTAINED" + example: "OBTAINED" + provisionState: + $ref: './RoleMiningPotentialRoleProvisionState.yaml' + description: The status of provisioning for this potential role. Can be "POTENTIAL", "PENDING", "FAILED", or "COMPLETE". + example: "PENDING" + roleId: + type: string + description: ID of the provisioned role in IIQ or IDN. Null if this potential role has not been provisioned. + example: "2a4be6fbcf3c4e66b95a0c15ffd591" + density: + type: integer + description: The density metric (0-100) of this potential role. Higher density values indicate higher similarity amongst the identities. + example: 90 + freshness: + type: integer + description: The freshness metric (0-100) of this potential role. Higher freshness values indicate this potential role is more distinctive compared to existing roles. + example: 70 + quality: + type: integer + description: The quality metric (0-100) of this potential role. Higher quality values indicate this potential role has high density and freshness. + example: 80 +example: + potentialRoleRef: { + "id": "dd4c13c6-8237-4753-bfb7-f627e489f9ec", + "name": "Potential Role - dd4c13" + } + identityCount: "25" + entitlementCount: "15" + identityGroupStatus: "OBTAINED" + provisionState: "PENDING" + roleId: "2a4be6fbcf3c4e66b95a0c15ffd591" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/RoleMiningPotentialRoleSummaryDistribution.yaml b/static/idn-api/beta/schemas/RoleMiningPotentialRoleSummaryDistribution.yaml new file mode 100644 index 000000000..50ea2e0c2 --- /dev/null +++ b/static/idn-api/beta/schemas/RoleMiningPotentialRoleSummaryDistribution.yaml @@ -0,0 +1,23 @@ +type : object +allOf: + - $ref: ./RoleMiningPotentialRoleSummary.yaml + - type: object +properties: + identityDistribution: + description: Identity attribute distribution + type: array + items: + $ref: './RoleMiningIdentityDistribution.yaml' +example: + potentialRoleRef: { + "id": "dd4c13c6-8237-4753-bfb7-f627e489f9ec", + "name": "Potential Role - dd4c13" + } + identityCount: "25" + entitlementCount: "15" + identityGroupStatus: "OBTAINED" + "roleId": null + "density": 100 + "freshness": 90 + "quality": 95 + identityDistribution: [] \ No newline at end of file diff --git a/static/idn-api/beta/schemas/RoleMiningSessionDto.yaml b/static/idn-api/beta/schemas/RoleMiningSessionDto.yaml new file mode 100644 index 000000000..ef05fe7d1 --- /dev/null +++ b/static/idn-api/beta/schemas/RoleMiningSessionDto.yaml @@ -0,0 +1,72 @@ +type: object +properties: + scope: + $ref: './RoleMiningSessionScope.yaml' + description: The scope of identities for this role mining session + example: { + identityIds: [], + criteria: "source.name:DataScienceDataset", + attributeFilterCriteria: { + displayName: {untranslated: "Location: Miami"}, + ariaLabel: {untranslated: "Location: Miami"}, + data: { + displayName: {translateKey: "IDN.IDENTITY_ATTRIBUTES.LOCATION"}, + name: "location", + operator: "EQUALS", + values: ["Miami"] + } + } + } + pruneThreshold: + type: integer + description: The prune threshold to be used or null to calculate prescribedPruneThreshold + example: 5 + format: int32 + prescribedPruneThreshold: + type: integer + description: The calculated prescribedPruneThreshold + example: 10 + format: int32 + minNumIdentitiesInPotentialRole: + type: integer + description: Minimum number of identities in a potential role + example: 20 + format: int32 + potentialRoleCount: + type: integer + description: Number of potential roles + example: 0 + format: int32 + potentialRolesReadyCount: + type: integer + description: Number of potential roles ready + example: 0 + format: int32 + status: + $ref: './RoleMiningSessionStatus.yaml' + description: The status of the role mining session + example: CREATED + type: + $ref: './iai/RoleMiningRoleType.yaml' + description: Role mining session type + example: SPECIALIZED + emailRecipientId: + type: string + description: The id of the user who will receive an email about the role mining session + example: "2c918090761a5aac0176215c46a62d58" + createdBy: + $ref: './iai/EntityCreatedByDTO.yaml' + description: The session created by details + identityCount: + type: integer + description: Number of identities in the population which meet the search criteria or identity list provided + example: 0 + format: int32 + saved: + type: boolean + description: The session's saved status + example: true + name: + type: string + description: The session's saved name + example: "Saved RM Session - 07/10" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/RoleMiningSessionResponse.yaml b/static/idn-api/beta/schemas/RoleMiningSessionResponse.yaml new file mode 100644 index 000000000..7b56cfcb0 --- /dev/null +++ b/static/idn-api/beta/schemas/RoleMiningSessionResponse.yaml @@ -0,0 +1,55 @@ +type: object +properties: + scope: + $ref: './RoleMiningSessionScope.yaml' + description: The scope of identities for this role mining session + minNumIdentitiesInPotentialRole: + type: integer + description: Minimum number of identities in a potential role + example: 20 + prescribedPruneThreshold: + type: integer + description: The computed (or prescribed) prune threshold for this session + example: 83 + pruneThreshold: + type: integer + description: The prune threshold to be used for this role mining session + example: 70 + potentialRoleCount: + type: integer + description: The number of potential roles + example: 8 + potentialRolesReadyCount: + type: integer + description: The number of potential roles which have completed processing + example: 4 + status: + $ref: './RoleMiningSessionStatus.yaml' + description: The role mining session status + id: + type: string + description: Session Id for this role mining session + example: 8c190e67-87aa-4ed9-a90b-d9d5344523fb + createdDate: + type: string + format: 'date-time' + description: The date-time when this role mining session was created. + modifiedDate: + type: string + format: 'date-time' + description: The date-time when this role mining session was completed. + type: + $ref: './iai/RoleMiningRoleType.yaml' + description: Role mining session type +example: + scope: {identityIds: [], criteria: "source.name:DataScienceDataset"} + minNumIdentitiesInPotentialRole: 20 + pruneThreshold: 70 + prescribedPruneThreshold: 83 + potentialRoleCount: 8 + potentialRolesReadyCount: 4 + status: {state: "POTENTIAL_ROLES_PROCESSING"} + "id": "602ba738-cf48-499b-a780-7b67b3fc1ecf" + "createdDate": "2021-09-08T16:11:05.348Z" + "modifiedDate": "2021-09-08T16:11:05.348Z" + type: SPECIALIZED diff --git a/static/idn-api/beta/schemas/RoleMiningSessionScope.yaml b/static/idn-api/beta/schemas/RoleMiningSessionScope.yaml new file mode 100644 index 000000000..427187b1b --- /dev/null +++ b/static/idn-api/beta/schemas/RoleMiningSessionScope.yaml @@ -0,0 +1,27 @@ +type: object +properties: + identityIds: + type: array + items: + type: string + description: The list of identities for this role mining session. + example: ["2c918090761a5aac0176215c46a62d58","2c918090761a5aac01722015c46a62d42"] + criteria: + type: string + description: The "search" criteria that produces the list of identities for this role mining session. + example: "source.name:DataScienceDataset" + attributeFilterCriteria: + type: array + items: + type: object + description: The filter criteria for this role mining session. + example: { + displayName: {untranslated: "Location: Miami"}, + ariaLabel: {untranslated: "Location: Miami"}, + data: { + displayName: {translateKey: "IDN.IDENTITY_ATTRIBUTES.LOCATION"}, + name: "location", + operator: "EQUALS", + values: ["Miami"] + } + } \ No newline at end of file diff --git a/static/idn-api/beta/schemas/RoleMiningSessionStatus.yaml b/static/idn-api/beta/schemas/RoleMiningSessionStatus.yaml new file mode 100644 index 000000000..3915f61b1 --- /dev/null +++ b/static/idn-api/beta/schemas/RoleMiningSessionStatus.yaml @@ -0,0 +1,6 @@ +type: object +properties: + state: + description: The role mining session status. Can be one of these states - CREATED|UPDATED|IDENTITIES_OBTAINED|PRUNE_THRESHOLD_OBTAINED|POTENTIAL_ROLES_PROCESSING|POTENTIAL_ROLES_CREATED + type: string + example: "CREATED" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/RuleReference.yaml b/static/idn-api/beta/schemas/RuleReference.yaml new file mode 100644 index 000000000..9602c2ddd --- /dev/null +++ b/static/idn-api/beta/schemas/RuleReference.yaml @@ -0,0 +1,14 @@ +type: object +properties: + id: + type: string + description: The ID of the custom rule + example: 51a8015db2f890ca15812c9185644c4a + name: + type: string + description: Name of the rule + example: Custom rule created by services + description: + type: string + description: A description for the rule + example: Custom rule to assign access to the company database. diff --git a/static/idn-api/beta/schemas/SaasManagementApplication.yaml b/static/idn-api/beta/schemas/SaasManagementApplication.yaml new file mode 100644 index 000000000..34411c3c3 --- /dev/null +++ b/static/idn-api/beta/schemas/SaasManagementApplication.yaml @@ -0,0 +1,80 @@ +type: object +title: SaaS Management Application +properties: + id: + type: string + nullable: false + description: Unique identifier for SaaS Management application. + example: "2345bcd" + name: + type: string + nullable: false + description: Name of the application. + example: "Corporate directory" + integrationType: + type: string + nullable: false + enum: + - DIRECT + - SSO + - UNKNOWN + example: SSO + description: | + DIRECT - Usage data comes directly from source (preferred). + SSO - Usage data pulled from SSO audit logs. + UNKNOWN - The integration type is not recognized. + integrationName: + type: string + nullable: true + description: Name of integration. + example: "okta" + integrationState: + type: string + nullable: false + enum: + - ACTIVE + - INACTIVE + - DELETED + - UNKNOWN + example: ACTIVE + description: | + ACTIVE - Usage data is being periodically fetched from the integration. + INACTIVE - Usage data is currently not being fetched from the integration. + DELETED - The integration has been removed. + UNKNOWN - The integration state is not recognized. + identityNowSource: + allOf: + - $ref: '../../v3/schemas/BaseReferenceDto.yaml' + nullable: true + description: Reference to mapped IdentityNow Source, if mapping exists. + example: + type: "SOURCE" + id: "2c9180866166b5b0016167c32ef31a66" + name: "Corporate directory" + lastTested: + type: string + nullable: true + format: date-time + description: When user matches to accounts on the mapped IdentityNow source was last tested. + example: "2021-05-07T14:21:30.479Z" + testStatus: + type: string + nullable: true + enum: + - SUCCESS + - PARTIAL_SUCCESS + - FAILURE + - ERROR + - UNKNOWN + example: PARTIAL_SUCCESS + description: | + SUCCESS - All tested user accounts were found in mapped source. + PARTIAL_SUCCESS - Some (but not all) tested user accounts were found in mapped source. + FAILURE - None of the tested user accounts were found in mapped source. + ERROR - There was an error while testing user account matches. + UNKNOWN - The test status is not recognized. + testStatusDetail: + type: string + nullable: true + description: Any additional details about test status, if available. + example: "7 of 10 user accounts tested were found in mapped IdentityNow Source." diff --git a/static/idn-api/beta/schemas/SaasManagementApplicationMap.yaml b/static/idn-api/beta/schemas/SaasManagementApplicationMap.yaml new file mode 100644 index 000000000..dffbf1aef --- /dev/null +++ b/static/idn-api/beta/schemas/SaasManagementApplicationMap.yaml @@ -0,0 +1,17 @@ +type: object +title: SaaS Management Application to IdentityNow Source Mapping +properties: + saasManagementId: + type: string + nullable: true + description: >- + SaaS Management application ID, or null to remove mapping for specified identityNowSourceId. + Both saasManagementId and identityNowSourceId cannot be null. + example: "2345bcd" + identityNowSourceId: + type: string + nullable: true + description: >- + IdentityNow source ID, or null to remove mapping for specified saasManagementId. + Both saasManagementId and identityNowSourceId cannot be null. + example: "2c9180866166b5b0016167c32ef31a66" diff --git a/static/idn-api/beta/schemas/Schedule.yaml b/static/idn-api/beta/schemas/Schedule.yaml new file mode 100644 index 000000000..acf30c258 --- /dev/null +++ b/static/idn-api/beta/schemas/Schedule.yaml @@ -0,0 +1,151 @@ +type : object +properties: + type: + type: string + description: >- + Determines the overall schedule cadence. In general, all time period fields smaller than the chosen type + can be configured. For example, a DAILY schedule can have 'hours' set, but not 'days'; a WEEKLY schedule + can have both 'hours' and 'days' set. + enum: + - DAILY + - WEEKLY + - MONTHLY + - ANNUALLY + - CALENDAR + months: + type: object + description: | + Specifies which months of a schedule are active. Only valid for ANNUALLY schedule types. Examples: + + On February and March: + * type LIST + * values "2", "3" + + Every 3 months, starting in January (quarterly): + * type LIST + * values "1" + * interval 3 + + Every two months between July and December: + * type RANGE + * values "7", "12" + * interval 2 + properties: + type: + type: string + enum: + - LIST + - RANGE + values: + type: array + items: + type: string + interval: + type: integer + required: + - type + - values + days: + type: object + description: | + Specifies which day(s) a schedule is active for. This is required for all schedule types except DAILY. + The "values" field holds different data depending on the type of schedule: + * WEEKLY: days of the week (1-7) + * MONTHLY: days of the month (1-31, L, L-1...) + * ANNUALLY: if the "months" field is also set: days of the month (1-31, L, L-1...); otherwise: ISO-8601 dates without year ("--12-31") + * CALENDAR: ISO-8601 dates ("2020-12-31") + + Note that CALENDAR only supports the LIST type, and ANNUALLY does not support the RANGE type when provided + with ISO-8601 dates without year. + + Examples: + + On Sundays: + * type LIST + * values "1" + + The second to last day of the month: + * type LIST + * values "L-1" + + From the 20th to the last day of the month: + * type RANGE + * values "20", "L" + + Every March 2nd: + * type LIST + * values "--03-02" + + On March 2nd, 2021: + * type: LIST + * values "2021-03-02" + properties: + type: + type: string + enum: + - LIST + - RANGE + values: + type: array + items: + type: string + interval: + type: integer + required: + - type + - values + hours: + type: object + description: | + Specifies which hour(s) a schedule is active for. Examples: + + Every three hours starting from 8AM, inclusive: + * type LIST + * values "8" + * interval 3 + + During business hours: + * type RANGE + * values "9", "5" + + At 5AM, noon, and 5PM: + * type LIST + * values "5", "12", "17" + properties: + type: + type: string + enum: + - LIST + - RANGE + values: + type: array + items: + type: string + interval: + type: integer + required: + - type + - values + expiration: + type: string + format: date-time + description: >- + Specifies the time after which this schedule will no longer occur. + timeZoneId: + type: string + description: >- + The time zone to use when running the schedule. For instance, if the schedule is a DAILY schedule + that runs at 1AM, and this field is set to "CST", the schedule will run at 1AM CST. +required: + - type + - hours +example: + type: MONTHLY + hours: + type: LIST + values: + - "0" + days: + type: LIST + values: + - "1" diff --git a/static/idn-api/beta/schemas/ScheduledAction.yaml b/static/idn-api/beta/schemas/ScheduledAction.yaml new file mode 100644 index 000000000..106774fd8 --- /dev/null +++ b/static/idn-api/beta/schemas/ScheduledAction.yaml @@ -0,0 +1,34 @@ +type: object +properties: + id: + type: string + example: "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde" + created: + type: string + format: date-time + description: The time when this scheduled action is created. + example: "2020-01-01T00:00:00.000000Z" + deadline: + type: string + format: date-time + description: The time that this scheduled action should be fired. + example: "2020-01-01T00:00:00.000000Z" + event: + type: object + properties: + topic: + type: string + example: "identity" + type: + type: string + example: "IDENTITY_CHANGED" + content: + type: object + example: {"accessRequestId": "1234"} + headers: + type: object + example: {"org": "test", "pod": "echo"} + meta: + type: object + description: Extra metadata fields that are associated with a scheduled action + example: {"flag": true} diff --git a/static/idn-api/beta/schemas/Schema.yaml b/static/idn-api/beta/schemas/Schema.yaml new file mode 100644 index 000000000..ba7f29b33 --- /dev/null +++ b/static/idn-api/beta/schemas/Schema.yaml @@ -0,0 +1,78 @@ +type: object +properties: + id: + type: string + description: The id of the Schema. + example: 2c9180835d191a86015d28455b4a2329 + name: + type: string + description: The name of the Schema. + example: account + nativeObjectType: + type: string + description: The name of the object type on the native system that the schema represents. + example: User + identityAttribute: + type: string + description: The name of the attribute used to calculate the unique identifier for an object in the schema. + example: sAMAccountName + displayAttribute: + type: string + description: The name of the attribute used to calculate the display value for an object in the schema. + example: distinguishedName + hierarchyAttribute: + type: string + description: The name of the attribute whose values represent other objects in a hierarchy. Only relevant to group schemas. + example: memberOf + includePermissions: + type: boolean + description: Flag indicating whether or not the include permissions with the object data when aggregating the schema. + example: false + features: + type: array + items: + $ref: './SourceFeature.yaml' + description: The features that the schema supports. + example: [ + "PROVISIONING", + "NO_PERMISSIONS_PROVISIONING", + "GROUPS_HAVE_MEMBERS" + ] + configuration: + type: object + description: Holds any extra configuration data that the schema may require. + example: { + groupMemberAttribute: "member" + } + attributes: + type: array + description: The attribute definitions which form the schema. + items: + $ref: './AttributeDefinition.yaml' + example: [ + { + name: "sAMAccountName", + type: "string", + isMultiValued: false, + isEntitlement: false, + isGroup: false + }, + { + name: "memberOf", + type: "string", + description: "Group membership", + isMultiValued: true, + isEntitlement: true, + isGroup: true + } + ] + created: + type: string + description: The date the Schema was created. + format: 'date-time' + example: '2019-12-24T22:32:58.104Z' + modified: + type: string + description: The date the Schema was last modified. + format: 'date-time' + example: '2019-12-31T20:22:28.104Z' diff --git a/static/idn-api/beta/schemas/ScriptConfig.yaml b/static/idn-api/beta/schemas/ScriptConfig.yaml new file mode 100644 index 000000000..747082dc3 --- /dev/null +++ b/static/idn-api/beta/schemas/ScriptConfig.yaml @@ -0,0 +1,15 @@ +type: object +description: This configuration is required only when the subscription type is SCRIPT. +properties: + language: + type: string + description: The programming language of the script. + enum: + - JAVASCRIPT + example: JAVASCRIPT + responseMode: + $ref: './ResponseMode.yaml' + source: + type: string + example: "async (event, context) => { const triggerOutput = { approved: false }; return new EventCallResult(Status.SUCCESS, triggerOutput, null); }" + description: The source code of the script. diff --git a/static/idn-api/beta/schemas/SearchAttributeConfig.yaml b/static/idn-api/beta/schemas/SearchAttributeConfig.yaml new file mode 100644 index 000000000..9dec033e6 --- /dev/null +++ b/static/idn-api/beta/schemas/SearchAttributeConfig.yaml @@ -0,0 +1,17 @@ +type: object +properties: + name: + type: string + description: Name of the new attribute + example: newMailAttribute + displayName: + type: string + description: The display name of the new attribute + example: New Mail Attribute + applicationAttributes: + type: object + description: Map of application id and their associated attribute. + example: { + "2c91808b79fd2422017a0b35d30f3968": "employeeNumber", + "2c91808b79fd2422017a0b36008f396b": "employeeNumber" + } diff --git a/static/idn-api/beta/schemas/SectionDetails.yaml b/static/idn-api/beta/schemas/SectionDetails.yaml new file mode 100644 index 000000000..f3d82448c --- /dev/null +++ b/static/idn-api/beta/schemas/SectionDetails.yaml @@ -0,0 +1,18 @@ +type: object +allOf: +- $ref: './FormItemDetails.yaml' +- type: object + properties: + label: + type: string + description: Label of the section + example: Section 1 + formItems: + type: array + items: + type: object + description: List of FormItems. FormItems can be SectionDetails and/or FieldDetails + example: [] +# oneOf: +# - $ref: 'SectionDetails.yaml' +# - $ref: 'FieldDetails.yaml' diff --git a/static/idn-api/beta/schemas/Segment.yaml b/static/idn-api/beta/schemas/Segment.yaml new file mode 100644 index 000000000..927bc9be6 --- /dev/null +++ b/static/idn-api/beta/schemas/Segment.yaml @@ -0,0 +1,30 @@ +type: object +properties: + id: + type: string + example: "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde" + name: + type: string + description: Segment Business Name + example: "segment-xyz" + created: + type: string + format: date-time + description: The time when this Segment is created + example: "2020-01-01T00:00:00.000000Z" + modified: + type: string + format: date-time + description: The time when this Segment is modified + example: "2020-01-01T00:00:00.000000Z" + description: + type: string + description: Optional description of the Segment + example: "This segment represents xyz" + owner: + $ref: '../../v3/schemas/access/OwnerReference.yaml' + visibilityCriteria: + $ref: './VisibilityCriteria.yaml' + active: + type: boolean + description: Whether the Segment is currently active. Inactive segments have no effect. diff --git a/static/idn-api/beta/schemas/SegmentChangeAssignments.yaml b/static/idn-api/beta/schemas/SegmentChangeAssignments.yaml new file mode 100644 index 000000000..d1e896d4f --- /dev/null +++ b/static/idn-api/beta/schemas/SegmentChangeAssignments.yaml @@ -0,0 +1,35 @@ +type: object +description: >- + A request to make multiple assignment changes to a segment. +properties: + assignments: + type: array + items: + $ref: '../../v3/schemas/BareReference.yaml' + nullable: true + description: >- + List of references to objects which will be assigned the Segment. All references must be of type ROLE or + ACCESS_PROFILE. If a referenced object is already assigned the Segment, the new assignment will be silently + ignored. However, it is an error for the same object to be referenced in both the *assignments* and *removals* + lists. + example: + - type: "ROLE" + id: "2c918086750a21d701751e71ee121518" + - type: "ACCESS_PROFILE" + id: "2c918086750a2e129f1518161919ecca" + removals: + type: array + items: + $ref: '../../v3/schemas/BareReference.yaml' + nullable: true + description: >- + List of references to objects which will be removed from the Segment. All references must be of type ROLE or + ACCESS_PROFILE. If a referenced object is not assigned the Segment, the new removal will be silently + ignored. However, it is an error for the same object to be referenced in both the *assignments* and *removals* + lists. + example: + - type: "ROLE" + id: "2c918086750a21d701751e71e73a0289" + - type: "ACCESS_PROFILE" + id: "2c91808676fd514b017702bdc826024a" + diff --git a/static/idn-api/beta/schemas/SendTestNotificationRequestDto.yaml b/static/idn-api/beta/schemas/SendTestNotificationRequestDto.yaml new file mode 100644 index 000000000..71e744540 --- /dev/null +++ b/static/idn-api/beta/schemas/SendTestNotificationRequestDto.yaml @@ -0,0 +1,16 @@ +type: object +properties: + key: + type: string + description: The template notification key. + example: "cloud_manual_work_item_summary" + medium: + type: string + description: The notification medium. Has to be one of the following enum values. + enum: + - EMAIL + - SLACK + - TEAMS + context: + type: object + description: A Json object that denotes the context specific to the template. diff --git a/static/idn-api/beta/schemas/ServiceDeskIntegrationDto.yaml b/static/idn-api/beta/schemas/ServiceDeskIntegrationDto.yaml new file mode 100644 index 000000000..5175ce39c --- /dev/null +++ b/static/idn-api/beta/schemas/ServiceDeskIntegrationDto.yaml @@ -0,0 +1,50 @@ +allOf: + - $ref: './BaseCommonDto.yaml' + - type: object + description: Specification of a Service Desk integration + required: + - description + - type + - attributes + properties: + description: + description: Description of the Service Desk integration + type: string + example: A very nice Service Desk integration + type: + description: Type of the Service Desk integration + type: string + default: ServiceNowSDIM + ownerRef: + description: Reference to the identity that is the owner of this Service Desk integration + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + default: + type: IDENTITY + clusterRef: + description: Reference to the source cluster for this Service Desk integration + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + default: + type: CLUSTER + cluster: + description: ID of the cluster for the Service Desk integration (replaced by clusterRef, retained for backward compatibility) + type: string + example: xyzzy999 + deprecated: true + managedSources: + description: Source IDs for the Service Desk integration (replaced by provisioningConfig.managedSResourceRefs, but retained here for backward compatibility) + type: array + items: + type: string + deprecated: true + provisioningConfig: + description: The 'provisioningConfig' property specifies the configuration used to provision integrations. + $ref: './ProvisioningConfig.yaml' + attributes: + description: Attributes of the Service Desk integration. Validation constraints enforced by the implementation. + type: object + additionalProperties: true + beforeProvisioningRule: + description: Reference to beforeProvisioningRule for this Service Desk integration + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + default: + type: RULE diff --git a/static/idn-api/beta/schemas/ServiceDeskIntegrationTemplateDto.yaml b/static/idn-api/beta/schemas/ServiceDeskIntegrationTemplateDto.yaml new file mode 100644 index 000000000..d1ff56889 --- /dev/null +++ b/static/idn-api/beta/schemas/ServiceDeskIntegrationTemplateDto.yaml @@ -0,0 +1,21 @@ +allOf: + - $ref: './BaseCommonDto.yaml' + - type: object + description: This is the model for a Service Desk integration template, used to create and edit Service Desk Integrations. + required: + - type + - attributes + - provisioningConfig + properties: + type: + description: The 'type' property specifies the type of the Service Desk integration template. + type: string + example: Web Service SDIM + default: Web Service SDIM + attributes: + description: The 'attributes' property value is a map of attributes available for integrations using this Service Desk integration template. + type: object + additionalProperties: true + provisioningConfig: + description: The 'provisioningConfig' property specifies the configuration used to provision integrations using the template. + $ref: './ProvisioningConfig.yaml' diff --git a/static/idn-api/beta/schemas/ServiceDeskIntegrationTemplateType.yaml b/static/idn-api/beta/schemas/ServiceDeskIntegrationTemplateType.yaml new file mode 100644 index 000000000..95ff9e0a5 --- /dev/null +++ b/static/idn-api/beta/schemas/ServiceDeskIntegrationTemplateType.yaml @@ -0,0 +1,18 @@ +description: This represents a Service Desk Integration template type. +required: + - type + - scriptName +type: object +properties: + name: + description: This is the name of the type. + example: aName + type: string + type: + description: This is the type value for the type. + example: aType + type: string + scriptName: + description: This is the scriptName attribute value for the type. + example: aScriptName + type: string diff --git a/static/idn-api/beta/schemas/ServiceProviderConfiguration.yaml b/static/idn-api/beta/schemas/ServiceProviderConfiguration.yaml new file mode 100644 index 000000000..7567d77e7 --- /dev/null +++ b/static/idn-api/beta/schemas/ServiceProviderConfiguration.yaml @@ -0,0 +1,15 @@ +type: object +properties: + enabled: + type: boolean + bypassIdp: + description: This allows basic login with the parameter prompt=true. This is often toggled on when debugging SAML authentication setup. + type: boolean + samlConfigurationValid: + type: boolean + federationProtocolDetails: + type: array + items: + oneOf: + - $ref: 'IdpDetails.yaml' + - $ref: 'SpDetails.yaml' diff --git a/static/idn-api/beta/schemas/ServiceRequest.yaml b/static/idn-api/beta/schemas/ServiceRequest.yaml new file mode 100644 index 000000000..d92a1bbb9 --- /dev/null +++ b/static/idn-api/beta/schemas/ServiceRequest.yaml @@ -0,0 +1,14 @@ +description: Details of a service request Service Desk integration +required: + - provision + - checkStatus +type: object +properties: + provision: + description: provisioning details for the service request Service Desk integration + type: object + $ref: './ServiceRequestProvision.yaml' + checkStatus: + description: check status mappings for the Service Desk integration + type: object + $ref: './CheckStatus.yaml' diff --git a/static/idn-api/beta/schemas/ServiceRequestProvision.yaml b/static/idn-api/beta/schemas/ServiceRequestProvision.yaml new file mode 100644 index 000000000..8166e37dc --- /dev/null +++ b/static/idn-api/beta/schemas/ServiceRequestProvision.yaml @@ -0,0 +1,11 @@ +allOf: + - $ref: './BasicProvision.yaml' + - type: object + description: Provisioning of a service request Service Desk integration + required: + - catalogItem + properties: + catalogItem: + description: catalog item mapping for the service request Service Desk integration + type: object + additionalProperties: true diff --git a/static/idn-api/beta/schemas/SessionConfiguration.yaml b/static/idn-api/beta/schemas/SessionConfiguration.yaml new file mode 100644 index 000000000..6ba488ea8 --- /dev/null +++ b/static/idn-api/beta/schemas/SessionConfiguration.yaml @@ -0,0 +1,14 @@ +type: object +properties: + maxIdleTime: + type: integer + description: The maximum time in minutes a session can be idle. + example: 15 + rememberMe: + type: boolean + description: Denotes if 'remember me' is enabled. + example: true + maxSessionTime: + type: integer + description: The maximum allowable session time in minutes. + example: 45 diff --git a/static/idn-api/beta/schemas/SetEncryptionKeysData.yaml b/static/idn-api/beta/schemas/SetEncryptionKeysData.yaml new file mode 100644 index 000000000..513f9e4b0 --- /dev/null +++ b/static/idn-api/beta/schemas/SetEncryptionKeysData.yaml @@ -0,0 +1,10 @@ +type: object +description: Set a Clusters key pair +required: + - publicCertificate +properties: + publicKeyCertificate: + description: public certificate of the cluster + type: string + example: -----BEGIN CERTIFICATE-----******-----END CERTIFICATE----- + diff --git a/static/idn-api/beta/schemas/SlimAccount.yaml b/static/idn-api/beta/schemas/SlimAccount.yaml new file mode 100644 index 000000000..dbad001c1 --- /dev/null +++ b/static/idn-api/beta/schemas/SlimAccount.yaml @@ -0,0 +1,47 @@ +# The Slim version of the Account DTO containing only data from the Account object +type: object +title: Slim Account +allOf: + - $ref: './BaseCommonDto.yaml' + - type: object + properties: + uuid: + type: string + format: uuid + description: Unique ID from the owning source + example: '2c9180857893f12901789445619b0366' + nativeIdentity: + type: string + description: The native identifier of the account + example: brandin.gray + description: + type: string + description: The description for the account + example: 'Brandin Gray the CEO of Silly Inc.' + disabled: + type: boolean + description: Whether the account is disabled + example: false + locked: + type: boolean + description: Whether the account is locked + example: false + manuallyCorrelated: + type: boolean + description: Whether the account was manually correlated + example: false + hasEntitlements: + type: boolean + description: Whether the account has any entitlements associated with it + example: true + sourceId: + type: string + description: The ID of the source for which this account belongs + example: 2c9180835d2e5168015d32f890ca1581 + identityId: + type: string + description: The ID of the identity for which this account is correlated to if not uncorrelated + example: 4b9163835d2e5168015d32f890ca5936 + attributes: + type: object + description: A map containing attributes associated with the account diff --git a/static/idn-api/beta/schemas/SlimCampaign.yaml b/static/idn-api/beta/schemas/SlimCampaign.yaml new file mode 100644 index 000000000..f93c7e194 --- /dev/null +++ b/static/idn-api/beta/schemas/SlimCampaign.yaml @@ -0,0 +1,66 @@ +type : object +title: Slim Campaign +required: + - name + - description + - type +properties: + id: + type: string + readOnly: true + name: + description: >- + The campaign name. If this object is part of a template, special formatting applies; see the + `/campaign-templates/{id}/generate` endpoint documentation for details. + type: string + description: + type: string + description: >- + The campaign description. If this object is part of a template, special formatting applies; see the + `/campaign-templates/{id}/generate` endpoint documentation for details. + deadline: + type: string + format: date-time + description: The campaign's completion deadline. + type: + type: string + description: The type of campaign. Could be extended in the future. + enum: + - MANAGER + - SOURCE_OWNER + - SEARCH + - ROLE_COMPOSITION + emailNotificationEnabled: + type: boolean + autoRevokeAllowed: + type: boolean + recommendationsEnabled: + type: boolean + description: >- + Enables IAI for this campaign. Accepts true even if the IAI product feature is off. If IAI is turned off + then campaigns generated from this template will indicate false. The real value will then be returned if + IAI is ever enabled for the org in the future. + status: + type: string + description: The campaign's current status. + readOnly: true + enum: + - PENDING + - STAGED + - CANCELING + - ACTIVATING + - ACTIVE + - COMPLETING + - COMPLETED + - ERROR + - ARCHIVED +example: + id: 2c9079b270a266a60170a2779fcb0007 + name: Manager Campaign + description: Everyone needs to be reviewed by their manager. + deadline: '2020-03-15T10:00:01.456Z' + type: MANAGER + emailNotificationEnabled: true + autoRevokeAllowed: false + recommendationsEnabled: false + status: ACTIVE diff --git a/static/idn-api/beta/schemas/SodExemptCriteria.yaml b/static/idn-api/beta/schemas/SodExemptCriteria.yaml new file mode 100644 index 000000000..a30028579 --- /dev/null +++ b/static/idn-api/beta/schemas/SodExemptCriteria.yaml @@ -0,0 +1,18 @@ +description: Details of the Entitlement criteria +type: object +properties: + existing: + type: boolean + example: true + description: If the entitlement already belonged to the user or not. + type: + $ref: "../../v3/schemas/DtoType.yaml" + example: "ENTITLEMENT" + id: + type: string + description: Entitlement ID + example: "2c918085771e9d3301773b3cb66f6398" + name: + type: string + description: Entitlement name + example: "My HR Entitlement" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/SodPolicy.yaml b/static/idn-api/beta/schemas/SodPolicy.yaml new file mode 100644 index 000000000..b0875c11c --- /dev/null +++ b/static/idn-api/beta/schemas/SodPolicy.yaml @@ -0,0 +1,82 @@ +type: object +properties: + id: + type: string + description: Policy id + example: "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde" + name: + type: string + description: Policy Business Name + example: "policy-xyz" + created: + type: string + format: date-time + description: The time when this SOD policy is created. + example: "2020-01-01T00:00:00.000000Z" + modified: + type: string + format: date-time + description: The time when this SOD policy is modified. + example: "2020-01-01T00:00:00.000000Z" + description: + type: string + description: Optional description of the SOD policy + example: "This policy ensures compliance of xyz" + ownerRef: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + externalPolicyReference: + type: string + description: Optional External Policy Reference + example: "XYZ policy" + policyQuery: + type: string + description: Search query of the SOD policy + example: "@access(id:0f11f2a4-7c94-4bf3-a2bd-742580fe3bdg) AND @access(id:0f11f2a4-7c94-4bf3-a2bd-742580fe3bdf)" + compensatingControls: + type: string + description: Optional compensating controls(Mitigating Controls) + example: "Have a manager review the transaction decisions for their \"out of compliance\" employee" + correctionAdvice: + type: string + description: Optional correction advice + example: "Based on the role of the employee, managers should remove access that is not required for their job function." + state: + type: string + description: whether the policy is enforced or not + enum: + - ENFORCED + - NOT_ENFORCED + example: ENFORCED + tags: + type: array + description: tags for this policy object + example: ["TAG1", "TAG2"] + items: + type: string + creatorId: + type: string + description: Policy's creator ID + example: "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde" + modifierId: + type: string + description: Policy's modifier ID + example: "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde" + nullable : true + violationOwnerAssignmentConfig: + $ref: './ViolationOwnerAssignmentConfig.yaml' + nullable: true + scheduled: + type: boolean + description: defines whether a policy has been scheduled or not + example: true + type: + type: string + description: whether a policy is query based or conflicting access based + default: GENERAL + enum: + - GENERAL + - CONFLICTING_ACCESS_BASED + example: GENERAL + conflictingAccessCriteria: + $ref: './ConflictingAccessCriteria.yaml' + nullable: true diff --git a/static/idn-api/beta/schemas/SodPolicySchedule.yaml b/static/idn-api/beta/schemas/SodPolicySchedule.yaml new file mode 100644 index 000000000..06a517b4a --- /dev/null +++ b/static/idn-api/beta/schemas/SodPolicySchedule.yaml @@ -0,0 +1,38 @@ +type: object +properties: + name: + type: string + description: SOD Policy schedule name + example: 'SCH-1584312283015' + created: + type: string + format: date-time + description: The time when this SOD policy schedule is created. + example: "2020-01-01T00:00:00.000000Z" + modified: + type: string + format: date-time + description: The time when this SOD policy schedule is modified. + example: "2020-01-01T00:00:00.000000Z" + description: + type: string + description: SOD Policy schedule description + example: 'Schedule for policy xyz' + schedule: + $ref: '../../v3/schemas/schedule/Schedule.yaml' + recipients: + type: array + items: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + emailEmptyResults: + type: boolean + description: Indicates if empty results need to be emailed + example: false + creatorId: + type: string + description: Policy's creator ID + example: "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde" + modifierId: + type: string + description: Policy's modifier ID + example: "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde" diff --git a/static/idn-api/beta/schemas/SodViolationCheck.yaml b/static/idn-api/beta/schemas/SodViolationCheck.yaml new file mode 100644 index 000000000..31476bc1d --- /dev/null +++ b/static/idn-api/beta/schemas/SodViolationCheck.yaml @@ -0,0 +1,15 @@ +description: An object referencing an SOD violation check +required: + - requestId +type: object +properties: + requestId: + description: The id of the original request + example: 089899f13a8f4da7824996191587bab9 + type: string + created: + type: string + format: date-time + readOnly: true + description: The date-time when this request was created. + example: "2020-01-01T00:00:00.000000Z" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/SodViolationCheckResult.yaml b/static/idn-api/beta/schemas/SodViolationCheckResult.yaml new file mode 100644 index 000000000..5d711dce1 --- /dev/null +++ b/static/idn-api/beta/schemas/SodViolationCheckResult.yaml @@ -0,0 +1,37 @@ +description: The inner object representing the completed SOD Violation check +type: object +properties: + message: + $ref: '../../v3/schemas/ErrorMessageDto.yaml' + description: >- + If the request failed, includes any error message that was generated. + example: + - locale: "en-US" + localeOrigin: "DEFAULT" + text: "An error has occurred during the SOD violation check" + clientMetadata: + type: object + additionalProperties: + type: string + description: >- + Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on + completion of the violation check. + example: + requestedAppName: test-app + requestedAppId: 2c91808f7892918f0178b78da4a305a1 + violationContexts: + type: array + items: + $ref: './SodViolationContext.yaml' + violatedPolicies: + type: array + description: A list of the Policies that were violated + items: + $ref: './BaseReferenceDto.yaml' + description: Reference to the policy that was violated + example: + - type: "SOD_POLICY" + id: "69129440-422d-4a23-aadd-35c828d5bfda" + name: 'HR Policy' + + diff --git a/static/idn-api/beta/schemas/SodViolationContext.yaml b/static/idn-api/beta/schemas/SodViolationContext.yaml new file mode 100644 index 000000000..4fef57798 --- /dev/null +++ b/static/idn-api/beta/schemas/SodViolationContext.yaml @@ -0,0 +1,24 @@ +description: The contextual information of the violated criteria +type: object +properties: + policy: + $ref: "../../v3/schemas/BaseReferenceDto.yaml" + description: Reference to the Policy that is being violated. + conflictingAccessCriteria: + type: object + description: The object which contains the left and right hand side of the entitlements that got violated according to the policy. + properties: + leftCriteria: + type: object + properties: + criteriaList: + type: array + items: + $ref: "./SodExemptCriteria.yaml" + rightCriteria: + type: object + properties: + criteriaList: + type: array + items: + $ref: "./SodExemptCriteria.yaml" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/SodViolationContextCheckCompleted.yaml b/static/idn-api/beta/schemas/SodViolationContextCheckCompleted.yaml new file mode 100644 index 000000000..869472c27 --- /dev/null +++ b/static/idn-api/beta/schemas/SodViolationContextCheckCompleted.yaml @@ -0,0 +1,14 @@ +description: An object referencing a completed SOD violation check +type: object +properties: + state: + type: string + enum: [ SUCCESS, ERROR ] + description: The status of SOD violation check + example: "SUCCESS" + uuid: + description: The id of the Violation check event + type: string + example: "f73d16e9-a038-46c5-b217-1246e15fdbdd" + violationCheckResult: + $ref: "./SodViolationCheckResult.yaml" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/Source.yaml b/static/idn-api/beta/schemas/Source.yaml new file mode 100644 index 000000000..aa41c97dc --- /dev/null +++ b/static/idn-api/beta/schemas/Source.yaml @@ -0,0 +1,154 @@ +type: object +properties: + id: + type: string + readOnly: true + description: the id of the Source + example: "2c91808568c529c60168cca6f90c1324" + description: + type: string + description: Human-readable description of the source + example: "This is the corporate directory." + owner: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: Reference to an owning Identity Object + cluster: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: Reference to the associated Cluster + example: + type: "CLUSTER" + id: "2c9180866166b5b0016167c32ef31a66" + name: "Corporate Cluster" + accountCorrelationConfig: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: Reference to a Correlation Config object + example: + type: "ACCOUNT_CORRELATION_CONFIG" + id: "2c9180855d191c59015d28583727245a" + name: "Directory [source-62867] Account Correlation" + accountCorrelationRule: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: >- + Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't + be used. + managerCorrelationMapping: + $ref: './ManagerCorrelationMapping.yaml' + description: >- + Filter Object used during manager correlation to match incoming manager values to an existing manager's + Account/Identity + managerCorrelationRule: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: >- + Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient. + beforeProvisioningRule: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: >- + Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called. + schemas: + type: array + items: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: >- + List of references to Schema objects + example: + - type: "CONNECTOR_SCHEMA" + id: "2c9180835d191a86015d28455b4b232a" + name: "account" + - type: "CONNECTOR_SCHEMA" + id: "2c9180835d191a86015d28455b4b232b" + name: "group" + passwordPolicies: + type: array + items: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: >- + List of references to the associated PasswordPolicy objects. + example: + - type: "PASSWORD_POLICY" + id: "2c9180855d191c59015d291ceb053980" + name: "Corporate Password Policy" + features: + type: array + description: >- + Optional features that can be supported by a source. + items: + $ref: './SourceFeature.yaml' + example: [ + "SYNC_PROVISIONING", + "MANAGER_LOOKUP", + "SEARCH", + "PROVISIONING", + "AUTHENTICATE", + "GROUP_PROVISIONING", + "PASSWORD" + ] + type: + type: string + description: >- + Specifies the type of system being managed e.g. Active Directory, Workday, etc.. + example: "OpenLDAP - Direct" + connector: + type: string + description: Connector script name. + example: active-directory + connectorClass: + type: string + description: >- + The fully qualified name of the Java class that implements the connector interface. + example: "sailpoint.connector.LDAPConnector" + connectorAttributes: + type: object + description: >- + Connector specific configuration; will differ from type to type. + example: + healthCheckTimeout: 30 + authSearchAttributes: [ + "cn", + "uid", + "mail" + ] + deleteThreshold: + type: integer + format: int32 + description: >- + Number from 0 to 100 that specifies when to skip the delete phase. + example: 10 + authoritative: + type: boolean + description: >- + When true indicates the source is referenced by an IdentityProfile. + example: false + managementWorkgroup: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: Reference to Management Workgroup for this Source + healthy: + type: boolean + description: >- + When true indicates a healthy source + example: true + status: + type: string + description: >- + A status identifier, giving specific information on why a source is healthy or not + example: SOURCE_STATE_HEALTHY + since: + type: string + description: >- + Timestamp showing when a source health check was last performed + example: "2021-09-28T15:48:29.3801666300Z" + connectorId: + type: string + description: The id of connector + example: "active-directory" + connectorName: + type: string + description: The name of the connector that was chosen on source creation + example: "Active Directory" + connectionType: + type: string + description: The type of connection (direct or file) + example: "file" + connectorImplementstionId: + type: string + description: The connector implementstion id + example: "delimited-file" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/SourceCode.yaml b/static/idn-api/beta/schemas/SourceCode.yaml new file mode 100644 index 000000000..2f33d4b77 --- /dev/null +++ b/static/idn-api/beta/schemas/SourceCode.yaml @@ -0,0 +1,15 @@ +description: SourceCode +type: object +required: + - version + - script +properties: + version: + type: string + description: the version of the code + example: '1.0' + script: + type: string + description: The code + example: return "Mr. " + firstName; + diff --git a/static/idn-api/beta/schemas/SourceFeature.yaml b/static/idn-api/beta/schemas/SourceFeature.yaml new file mode 100644 index 000000000..906283412 --- /dev/null +++ b/static/idn-api/beta/schemas/SourceFeature.yaml @@ -0,0 +1,82 @@ +type: string +enum: + - AUTHENTICATE + - COMPOSITE + - DIRECT_PERMISSIONS + - DISCOVER_SCHEMA + - ENABLE + - MANAGER_LOOKUP + - NO_RANDOM_ACCESS + - PROXY + - SEARCH + - TEMPLATE + - UNLOCK + - UNSTRUCTURED_TARGETS + - SHAREPOINT_TARGET + - PROVISIONING + - GROUP_PROVISIONING + - SYNC_PROVISIONING + - PASSWORD + - CURRENT_PASSWORD + - ACCOUNT_ONLY_REQUEST + - ADDITIONAL_ACCOUNT_REQUEST + - NO_AGGREGATION + - GROUPS_HAVE_MEMBERS + - NO_PERMISSIONS_PROVISIONING + - NO_GROUP_PERMISSIONS_PROVISIONING + - NO_UNSTRUCTURED_TARGETS_PROVISIONING + - NO_DIRECT_PERMISSIONS_PROVISIONING +description: >- + Optional features that can be supported by an source. + + * AUTHENTICATE: The source supports pass-through authentication. + + * COMPOSITE: The source supports composite source creation. + + * DIRECT_PERMISSIONS: The source supports returning DirectPermissions. + + * DISCOVER_SCHEMA: The source supports discovering schemas for users and groups. + + * ENABLE The source supports reading if an account is enabled or disabled. + + * MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS. + + * NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform. + + * PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source. + + * SEARCH + + * TEMPLATE + + * UNLOCK: The source supports reading if an account is locked or unlocked. + + * UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets. + + * SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources. + + * PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation. + + * GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented. + + * SYNC_PROVISIONING: The source can provision accounts synchronously. + + * PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature. + + * CURRENT_PASSWORD: Some source types support verification of the current password + + * ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements. + + * ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts. + + * NO_AGGREGATION: A source that does not support aggregation. + + * GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation. + + * NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts. + + * NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups. + + * NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING. + + * NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING. diff --git a/static/idn-api/beta/schemas/SourceSyncJob.yaml b/static/idn-api/beta/schemas/SourceSyncJob.yaml new file mode 100644 index 000000000..4471ed157 --- /dev/null +++ b/static/idn-api/beta/schemas/SourceSyncJob.yaml @@ -0,0 +1,27 @@ +type: object +properties: + id: + type: string + description: Job ID. + example: "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde" + status: + type: string + description: The job status. + enum: + - QUEUED + - IN_PROGRESS + - SUCCESS + - ERROR + example: "IN_PROGRESS" + payload: + description: Job payload. + $ref: './SourceSyncPayload.yaml' + example: + { + "type": "SYNCHRONIZE_SOURCE_ATTRIBUTES", + "dataJson": "{\"sourceId\":\"2c918083746f642c01746f990884012a\"}" + } +required: + - id + - status + - payload \ No newline at end of file diff --git a/static/idn-api/beta/schemas/SourceSyncPayload.yaml b/static/idn-api/beta/schemas/SourceSyncPayload.yaml new file mode 100644 index 000000000..9e5e9b155 --- /dev/null +++ b/static/idn-api/beta/schemas/SourceSyncPayload.yaml @@ -0,0 +1,13 @@ +type: object +properties: + type: + type: string + description: Payload type. + example: "SYNCHRONIZE_SOURCE_ATTRIBUTES" + dataJson: + type: string + description: Payload type. + example: "{\"sourceId\":\"2c918083746f642c01746f990884012a\"}" +required: + - type + - dataJson diff --git a/static/idn-api/beta/schemas/SpConfigExportResults.yaml b/static/idn-api/beta/schemas/SpConfigExportResults.yaml new file mode 100644 index 000000000..8e3161c97 --- /dev/null +++ b/static/idn-api/beta/schemas/SpConfigExportResults.yaml @@ -0,0 +1,31 @@ +type: object +title: Config Export Response Body +description: Response model for config export download response. +properties: + version: + type: integer + description: Current version of the export results object. + example: 1 + timestamp: + type: string + format: 'date-time' + description: Time the export was completed. + example: "2021-05-11T22:23:16Z" + tenant: + type: string + description: >- + Name of the tenant where this export originated. + example: "sample-tenant" + description: + type: string + description: >- + Optional user defined description/name for export job. + example: "Export Job 1 Test" + options: + $ref: '../../beta/schemas/ExportOptions.yaml' + description: >- + Options used to create this export. + objects: + type: array + items: + $ref: '../../beta/schemas/ConfigObject.yaml' diff --git a/static/idn-api/beta/schemas/SpConfigImportResults.yaml b/static/idn-api/beta/schemas/SpConfigImportResults.yaml new file mode 100644 index 000000000..33b19fe45 --- /dev/null +++ b/static/idn-api/beta/schemas/SpConfigImportResults.yaml @@ -0,0 +1,32 @@ +type: object +title: Config Import Response Body +description: Response Body for Config Import command. +properties: + results: + type: object + additionalProperties: + $ref: '../../beta/schemas/ObjectImportResult.yaml' + description: The results of an object configuration import job. + example: { + "results": { + "TRIGGER_SUBSCRIPTION": { + "infos": [ + { + "key": "IMPORT_PREVIEW", + "text": "Object to be imported: [c953134c-2224-42f2-a84e-fa5cbb395904, Test 2]", + "detail": null + }, + { + "key": "IMPORT_PREVIEW", + "text": "Object to be imported: [be9e116d-08e1-49fc-ab7f-fa585e96c9e4, Test 1]", + "detail": null + } + ], + "warnings": [], + "errors": [], + "importedObjects": [] + } + } + } +required: + - results diff --git a/static/idn-api/beta/schemas/SpConfigJob.yaml b/static/idn-api/beta/schemas/SpConfigJob.yaml new file mode 100644 index 000000000..a6d1df825 --- /dev/null +++ b/static/idn-api/beta/schemas/SpConfigJob.yaml @@ -0,0 +1,61 @@ +type: object +properties: + jobId: + type: string + description: Unique id assigned to this job. + example: "3469b87d-48ca-439a-868f-2160001da8c1" + status: + type: string + description: Status of the job. + enum: + - NOT_STARTED + - IN_PROGRESS + - COMPLETE + - CANCELLED + - FAILED + example: "COMPLETE" + type: + type: string + description: Type of the job, either export or import. + enum: + - EXPORT + - IMPORT + example: "IMPORT" + message: + type: string + description: This message contains additional information about the overall status of the job. + example: "Download import results for details." + description: + type: string + description: Optional user defined description/name for export job. + example: "ETS configuration objects from Acme-Solar sandbox" + expiration: + type: string + format: 'date-time' + description: The time until which the artifacts will be available for download. + example: "2021-05-11T22:23:16Z" + created: + type: string + format: 'date-time' + description: The time the job was started. + example: "2021-05-11T22:23:16Z" + modified: + type: string + format: 'date-time' + description: The time of the last update to the job. + example: "2021-05-11T22:23:16Z" + completed: + type: string + format: 'date-time' + description: The time the job was completed. + example: "2021-05-11T22:23:16Z" +required: + - jobId + - status + - type + - message + - description + - expiration + - created + - modified + - completed diff --git a/static/idn-api/beta/schemas/SpConfigMessage.yaml b/static/idn-api/beta/schemas/SpConfigMessage.yaml new file mode 100644 index 000000000..202029084 --- /dev/null +++ b/static/idn-api/beta/schemas/SpConfigMessage.yaml @@ -0,0 +1,22 @@ +type: object +title: Config Import/Export Message +description: Message model for Config Import/Export. +properties: + key: + type: string + description: Message key. + example: "UNKNOWN_REFERENCE_RESOLVER" + text: + type: string + description: Message text. + example: "Unable to resolve reference for object [type: IDENTITY, id: 2c91808c746e9c9601747d6507332ecz, name: random identity]" + details: + type: object + description: Message details if any, in key:value pairs. + additionalProperties: + type: object + example: { "details": "message details" } +required: + - key + - text + - details diff --git a/static/idn-api/beta/schemas/SpConfigObject.yaml b/static/idn-api/beta/schemas/SpConfigObject.yaml new file mode 100644 index 000000000..a88c65445 --- /dev/null +++ b/static/idn-api/beta/schemas/SpConfigObject.yaml @@ -0,0 +1,52 @@ +title: Object Configuration Model +description: Response model for get object configuration. +type: object +properties: + objectType: + type: string + description: >- + The object type this configuration is for. + resolveByIdUrl: + $ref: './SpConfigUrl.yaml' + description: >- + Url and query parameters to be used to resolve this type of object by Id. + resolveByNameUrl: + $ref: './SpConfigUrl.yaml' + description: >- + Url and query parameters to be used to resolve this type of object by name. + exportUrl: + type: string + description: >- + Url to export this type of object. + exportRight: + type: string + description: >- + Rights needed by the invoker of sp-config/export in order to export this type of object. + exportLimit: + type: integer + description: >- + Pagination limit imposed by the target service for this object type. + importUrl: + type: string + description: >- + Url to import this type of object. + importRight: + type: string + description: >- + Rights needed by the invoker of sp-config/import in order to import this type of object. + importLimit: + type: integer + description: >- + Pagination limit imposed by the target service for this object type. + referenceExtractors: + type: array + description: >- + List of json paths within an exported object of this type that represent references that need to be resolved. + items: + type: string + signatureRequired: + type: boolean + description: >- + If true, this type of object will be JWS signed and cannot be modified before import. + + diff --git a/static/idn-api/beta/schemas/SpConfigUrl.yaml b/static/idn-api/beta/schemas/SpConfigUrl.yaml new file mode 100644 index 000000000..e849a0a84 --- /dev/null +++ b/static/idn-api/beta/schemas/SpConfigUrl.yaml @@ -0,0 +1,10 @@ +type: object +title: Resolver URL Format for Object Configuration. +description: Format of resolver URLs for Object Configurations +properties: + url: + description: URL for the target object endpoint. + type: string + query: + description: Any query parameters that are needed for the URL. + type: object diff --git a/static/idn-api/beta/schemas/SpDetails.yaml b/static/idn-api/beta/schemas/SpDetails.yaml new file mode 100644 index 000000000..0e443e115 --- /dev/null +++ b/static/idn-api/beta/schemas/SpDetails.yaml @@ -0,0 +1,21 @@ +allOf: + - $ref: './FederationProtocolDetails.yaml' + - type: object + description: Specification of a Service Provider Details + properties: + role: + type: string + enum: + - SAML_SP + alias: + type: string + description: Unique alias used to identify the selected local service provider based on used URL. Used with SP configurations. + example: cdov-saml-sp + legacyAcsUrl: + type: string + description: This is the original ACS url used by the SSO service which now acts as a proxy for shared authentication as tenants migrate to the new domain. Used with SP configurations. + example: https://cdov-saml.test-login.sailpoint.com/saml/SSO/alias/cdov-saml-sp + callbackUrl: + type: string + description: The allowed callback URL where users will be redirected to after authentication. Used with SP configurations. + example: https://stradbroke-sso.identitysoon.com/sso/Consumer/metaAlias/cdov-saml/sp diff --git a/static/idn-api/beta/schemas/StandardLevel.yaml b/static/idn-api/beta/schemas/StandardLevel.yaml new file mode 100644 index 000000000..26017a4aa --- /dev/null +++ b/static/idn-api/beta/schemas/StandardLevel.yaml @@ -0,0 +1,11 @@ +description: Standard Log4j log level +type: string +example: INFO +enum: + - OFF + - FATAL + - ERROR + - WARN + - INFO + - DEBUG + - TRACE diff --git a/static/idn-api/beta/schemas/StartInvocationInput.yaml b/static/idn-api/beta/schemas/StartInvocationInput.yaml new file mode 100644 index 000000000..79918c66f --- /dev/null +++ b/static/idn-api/beta/schemas/StartInvocationInput.yaml @@ -0,0 +1,14 @@ +type: object +properties: + triggerId: + type: string + description: Trigger ID + example: "idn:access-requested" + input: + type: object + example: {"identityId": "201327fda1c44704ac01181e963d463c"} + description: Trigger input payload. Its schema is defined in the trigger definition. + contentJson: + type: object + example: {"workflowId": 1234} + description: JSON map of invocation metadata diff --git a/static/idn-api/beta/schemas/StatusChange.yaml b/static/idn-api/beta/schemas/StatusChange.yaml new file mode 100644 index 000000000..9e02aa9fe --- /dev/null +++ b/static/idn-api/beta/schemas/StatusChange.yaml @@ -0,0 +1,8 @@ +type: object +properties: + previousStatus: + type: string + description: previoys status of the account (LOCKED, DISABLED or ENABLED) + newStatus: + type: string + description: new status of the account (LOCKED, DISABLED or ENABLED) \ No newline at end of file diff --git a/static/idn-api/beta/schemas/StatusResponse.yaml b/static/idn-api/beta/schemas/StatusResponse.yaml new file mode 100644 index 000000000..a2ef989d5 --- /dev/null +++ b/static/idn-api/beta/schemas/StatusResponse.yaml @@ -0,0 +1,54 @@ +type: object +title: Status Response +description: Response model for connection check, configuration test and ping of source connectors. +properties: + id: + type: string + description: ID of the source + example: 2c91808568c529c60168cca6f90c1313 + readOnly: true + name: + type: string + description: Name of the source + example: ODS-AD-Test [source-999999] + readOnly: true + status: + type: string + enum: + - SUCCESS + - FAILURE + description: The status of the health check. + example: SUCCESS + readOnly: true + elapsedMillis: + type: integer + description: The number of milliseconds spent on the entire request. + example: 1000 + readOnly: true + details: + type: object + description: | + The document contains the results of the health check. + The schema of this document depends on the type of source used. + readOnly: true + example: { + "useTLSForIQService": false, + "IQService": { + "TLS Port": 0, + ".NET CLR Version": "4.0.30319.42000", + "SecondaryServiceStatus": "Running", + "Port": 5050, + "Host": "AUTOMATION-AD", + "Name": "IQService", + "IQServiceStatus": "Running", + "SecondaryService": "IQService-Instance1-Secondary", + "Version": "IQService Sep-2020", + "secondaryPort": 5051, + "OS Architecture": "AMD64", + "Operating System": "Microsoft Windows Server 2012 R2 Standard", + "highestDotNetVersion": "4.8 or later", + "Build Time": "09/22/2020 06:34 AM -0500" + }, + "IQServiceClientAuthEnabled": false, + "requestProcessedOn": "1/19/2021 1:47:14 PM" + } diff --git a/static/idn-api/beta/schemas/Subscription.yaml b/static/idn-api/beta/schemas/Subscription.yaml new file mode 100644 index 000000000..c05b8f6e1 --- /dev/null +++ b/static/idn-api/beta/schemas/Subscription.yaml @@ -0,0 +1,58 @@ +type: object +required: +- id +- triggerId +- type +- name +- triggerName +- enabled +- responseDeadline +properties: + id: + type: string + description: Subscription ID. + example: "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde" + name: + type: string + description: Subscription name. + example: "Access request subscription" + description: + type: string + description: Subscription description. + example: "Access requested to site xyz" + triggerId: + type: string + description: ID of trigger subscribed to. + example: "idn:access-requested" + triggerName: + type: string + description: Trigger name of trigger subscribed to. + example: "Access Requested" + type: + $ref: './SubscriptionType.yaml' + responseDeadline: + type: string + description: Deadline for completing REQUEST_RESPONSE trigger invocation, represented in ISO-8601 duration format. + example: "PT1H" + default: "PT1H" + httpConfig: + description: Config required if HTTP subscription type is used. + $ref: './HttpConfig.yaml' + eventBridgeConfig: + description: Config required if EVENTBRIDGE subscription type is used. + $ref: './EventBridgeConfig.yaml' + enabled: + type: boolean + description: >- + Whether subscription should receive real-time trigger invocations or not. + + Test trigger invocations are always enabled regardless of this option. + default: true + example: true + filter: + type: string + description: JSONPath filter to conditionally invoke trigger when expression evaluates to true. + example: '$[?($.identityId == "201327fda1c44704ac01181e963d463c")]' + externalDocs: + description: JSONPath filter documentation + url: https://developer.sailpoint.com/triggers/filtering_event_triggers.html#filtering-event-triggers diff --git a/static/idn-api/beta/schemas/SubscriptionInternal.yaml b/static/idn-api/beta/schemas/SubscriptionInternal.yaml new file mode 100644 index 000000000..196f23ceb --- /dev/null +++ b/static/idn-api/beta/schemas/SubscriptionInternal.yaml @@ -0,0 +1,39 @@ +type: object +required: + - triggerId + - type + - inlineConfig + - scriptConfig +properties: + id: + type: string + description: Subscription ID. + example: "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde" + triggerId: + type: string + description: ID of trigger subscribed to. + example: "idn:access-requested" + responseDeadline: + type: string + description: Deadline for completing REQUEST_RESPONSE trigger invocation, represented in ISO-8601 duration format. + example: "PT1H" + default: "PT1H" + enabled: + type: boolean + description: Whether subscription should receive real-time trigger invocations or not. + example: false + type: + type: string + description: The type of subscription this is. + enum: + - INLINE + - SCRIPT + example: INLINE + inlineConfig: + $ref: './InlineConfig.yaml' + scriptConfig: + $ref: './ScriptConfig.yaml' + filter: + type: string + description: JSONPath filter expression to only dispatch trigger input when evaluates to true. + example: '[?($.identityId == "201327fda1c44704ac01181e963d463c")]' diff --git a/static/idn-api/beta/schemas/SubscriptionPatchRequest.yaml b/static/idn-api/beta/schemas/SubscriptionPatchRequest.yaml new file mode 100644 index 000000000..747ff755a --- /dev/null +++ b/static/idn-api/beta/schemas/SubscriptionPatchRequest.yaml @@ -0,0 +1,49 @@ +description: Operations to be applied +type: array +items: + type: object + description: A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902) + required: + - "op" + - "path" + properties: + op: + type: string + description: The operation to be performed + enum: + - "add" + - "remove" + - "replace" + - "move" + - "copy" + example: "replace" + path: + type: string + description: A string JSON Pointer representing the target path to an element to be affected by the operation + example: "/description" + value: + anyOf: + - type: string + - type: integer + - type: object + - type: array + items: + anyOf: + - type: string + - type: integer + - type: object + description: The value to be used for the operation, required for "add" and "replace" operations + example: "New description" +example: + [ + { + "op": "replace", + "path": "/description", + "value": "A new description" + }, + { + "op": "replace", + "path": "/name", + "value": "A new name" + } + ] diff --git a/static/idn-api/beta/schemas/SubscriptionPostRequest.yaml b/static/idn-api/beta/schemas/SubscriptionPostRequest.yaml new file mode 100644 index 000000000..1d74d7eae --- /dev/null +++ b/static/idn-api/beta/schemas/SubscriptionPostRequest.yaml @@ -0,0 +1,47 @@ +type: object +required: +- triggerId +- type +- name +properties: + name: + type: string + description: Subscription name. + example: "Access request subscription" + description: + type: string + description: Subscription description. + example: "Access requested to site xyz" + triggerId: + type: string + description: ID of trigger subscribed to. + example: "idn:access-requested" + type: + $ref: './SubscriptionType.yaml' + responseDeadline: + type: string + description: Deadline for completing REQUEST_RESPONSE trigger invocation, represented in ISO-8601 duration format. + example: "PT1H" + default: "PT1H" + httpConfig: + description: Config required if HTTP subscription type is used. + $ref: './HttpConfig.yaml' + eventBridgeConfig: + description: Config required if EVENTBRIDGE subscription type is used. + $ref: './EventBridgeConfig.yaml' + enabled: + type: boolean + description: >- + Whether subscription should receive real-time trigger invocations or not. + + + Test trigger invocations are always enabled regardless of this option. + default: true + example: true + filter: + type: string + description: JSONPath filter to conditionally invoke trigger when expression evaluates to true. + example: '$[?($.identityId == "201327fda1c44704ac01181e963d463c")]' + externalDocs: + description: JSONPath filter documentation + url: https://developer.sailpoint.com/triggers/filtering_event_triggers.html#filtering-event-triggers \ No newline at end of file diff --git a/static/idn-api/beta/schemas/SubscriptionPutRequest.yaml b/static/idn-api/beta/schemas/SubscriptionPutRequest.yaml new file mode 100644 index 000000000..38701c719 --- /dev/null +++ b/static/idn-api/beta/schemas/SubscriptionPutRequest.yaml @@ -0,0 +1,39 @@ +type: object +properties: + name: + type: string + description: Subscription name. + example: "Access request subscription" + description: + type: string + description: Subscription description. + example: "Access requested to site xyz" + type: + $ref: './SubscriptionType.yaml' + responseDeadline: + type: string + description: Deadline for completing REQUEST_RESPONSE trigger invocation, represented in ISO-8601 duration format. + example: "PT1H" + default: "PT1H" + httpConfig: + description: Config required if HTTP subscription type is used. + $ref: './HttpConfig.yaml' + eventBridgeConfig: + description: Config required if EVENTBRIDGE subscription type is used. + $ref: './EventBridgeConfig.yaml' + enabled: + type: boolean + description: >- + Whether subscription should receive real-time trigger invocations or not. + + + Test trigger invocations are always enabled regardless of this option. + default: true + example: true + filter: + type: string + description: JSONPath filter to conditionally invoke trigger when expression evaluates to true. + example: '$[?($.identityId == "201327fda1c44704ac01181e963d463c")]' + externalDocs: + description: JSONPath filter documentation + url: https://developer.sailpoint.com/triggers/filtering_event_triggers.html#filtering-event-triggers \ No newline at end of file diff --git a/static/idn-api/beta/schemas/SubscriptionType.yaml b/static/idn-api/beta/schemas/SubscriptionType.yaml new file mode 100644 index 000000000..729125221 --- /dev/null +++ b/static/idn-api/beta/schemas/SubscriptionType.yaml @@ -0,0 +1,6 @@ +type: string +description: Subscription type. **NOTE** If type is EVENTBRIDGE, then eventBridgeConfig is required. If type is HTTP, then httpConfig is required. +enum: + - HTTP + - EVENTBRIDGE +example: HTTP diff --git a/static/idn-api/beta/schemas/SyncPasswordRequest.yaml b/static/idn-api/beta/schemas/SyncPasswordRequest.yaml new file mode 100644 index 000000000..8f2ddebe1 --- /dev/null +++ b/static/idn-api/beta/schemas/SyncPasswordRequest.yaml @@ -0,0 +1,53 @@ +type: object +properties: + identityId: + type: string + description: The identity ID that requested the password change + example: 8a807d4c73c545510173c545f0a002ff + encryptedPassword: + type: string + description: The RSA encrypted password + example: XzN+YwKgr2C+InkMYFMBG3UtjMEw5ZIql/XFlXo8cJNeslmkplx6vn4kd4/43IF9STBk5RnzR6XmjpEO+FwHDoiBwYZAkAZK/Iswxk4OdybG6Y4MStJCOCiK8osKr35IMMSV/mbO4wAeltoCk7daTWzTGLiI6UaT5tf+F2EgdjJZ7YqM8W8r7aUWsm3p2Xt01Y46ZRx0QaM91QruiIx2rECFT2pUO0wr+7oQ77jypATyGWRtADsu3YcvCk/6U5MqCnXMzKBcRas7NnZdSL/d5H1GglVGz3VLPMaivG4/oL4chOMmFCRl/zVsGxZ9RhN8rxsRGFFKn+rhExTi+bax3A== + publicKeyId: + type: string + description: The encryption key ID + example: YWQ2NjQ4MTItZjY0NC00MWExLWFjMjktOGNmMzU3Y2VlNjk2 + accountId: + type: string + description: >- + Account ID of the account + This is specified per account schema in the source configuration. It is used to distinguish accounts. + More info can be found here https://community.sailpoint.com/t5/IdentityNow-Connectors/How-do-I-designate-an-account-attribute-as-the-Account-ID-for-a/ta-p/80350 + example: CN=Abby Smith,OU=Austin,OU=Americas,OU=Demo,DC=seri,DC=acme,DC=com + sourceId: + type: string + description: The ID of the source for which identity is requesting the password change + example: 8a807d4c73c545510173c545d4b60246 + uuid: + type: string + description: The unique identifier of an account from the PWI source. For example, objectGuid for AD source. + example: {ad9fc391-246d-40af-b248-b6556a2b7c01} + retryCount: + type: string + description: A number of attempts made to send intercepted password to IdentityNow + example: 1 + host: + type: string + description: Domain Controller on which password was intercepted + example: host1.example.net + passwordSyncTime: + type: string + description: Time at which password is sent to IDN. Represented in ISO-8601 string format. + example: 2021-01-08T18:46:56+00:00 + pwiType: + type: string + description: Type of PWI instance + example: AD + pwiVersion: + type: string + description: Version of PWI instance + example: 20.0.0 + passwordChangeTime: + type: string + description: Time at which password change was captured on PWI client. Represented in ISO-8601 string format. + example: 2021-01-08T18:45:50+00:00 \ No newline at end of file diff --git a/static/idn-api/beta/schemas/Tag.yaml b/static/idn-api/beta/schemas/Tag.yaml new file mode 100644 index 000000000..e661875e5 --- /dev/null +++ b/static/idn-api/beta/schemas/Tag.yaml @@ -0,0 +1,34 @@ +type: object +properties: + id: + type: string + description: Tag id + example: '449ecdc0-d4ff-4341-acf6-92f6f7ce604f' + readOnly: true + name: + type: string + description: Name of the tag. + example: 'PCI' + created: + type: string + description: Date the tag was created. + format: 'date-time' + example: '2022-05-04T14:48:49Z' + readOnly: true + modified: + type: string + description: Date the tag was last modified. + format: 'date-time' + example: '2022-07-14T16:31:11Z' + readOnly: true + tagCategoryRefs: + type: array + items: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + readOnly: true +required: + - id + - name + - created + - modified + - tagCategoryRefs \ No newline at end of file diff --git a/static/idn-api/beta/schemas/TaggedObject.yaml b/static/idn-api/beta/schemas/TaggedObject.yaml new file mode 100644 index 000000000..3a6b9d3d1 --- /dev/null +++ b/static/idn-api/beta/schemas/TaggedObject.yaml @@ -0,0 +1,10 @@ +type: object +properties: + objectRef: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + tags: + type: array + items: + type: string + description: Labels to be applied to an Object + example: ["BU_FINANCE", "PCI"] \ No newline at end of file diff --git a/static/idn-api/beta/schemas/TargetSummary.yaml b/static/idn-api/beta/schemas/TargetSummary.yaml new file mode 100644 index 000000000..2f48a8049 --- /dev/null +++ b/static/idn-api/beta/schemas/TargetSummary.yaml @@ -0,0 +1,25 @@ +# Replaces IdentitySummary.yaml +description: The entity being targeted by a certification. +type: object +properties: + targetType: + type: string + description: The type of entity being targeted by this certification + enum: + - IDENTITY + - ROLE + id: + type: string + description: The ID of the target summary + example: 2c91808772a504f50172a9540e501ba7 + name: + type: string + description: Name of the linked entity + example: Alison Ferguso + targetId: + type: string + description: The ID of the entity being targeted by a certification + example: 2c9180857182306001719937377a33de + completed: + type: boolean + description: Indicates whether the review items for the linked identity's certification have been completed diff --git a/static/idn-api/beta/schemas/TaskDefinitionSummary.yaml b/static/idn-api/beta/schemas/TaskDefinitionSummary.yaml new file mode 100644 index 000000000..76b095e50 --- /dev/null +++ b/static/idn-api/beta/schemas/TaskDefinitionSummary.yaml @@ -0,0 +1,34 @@ +description: Definition of a type of task, used to invoke tasks +required: + - arguments + - description + - executor + - id + - uniqueName + - parentName +type: object +properties: + id: + description: System-generated unique ID of the TaskDefinition + type: string + example: id12345 + uniqueName: + description: Name of the TaskDefinition + type: string + example: Big Task + description: + description: Description of the TaskDefinition + type: string + example: A Really Big Task + parentName: + description: Name of the parent of the TaskDefinition + type: string + example: Parent Task + executor: + description: Executor of the TaskDefinition + type: string + example: Big Task + arguments: + description: Formal parameters of the TaskDefinition, without values + type: object + additionalProperties: true diff --git a/static/idn-api/beta/schemas/TaskInvocation.yaml b/static/idn-api/beta/schemas/TaskInvocation.yaml new file mode 100644 index 000000000..57530eb72 --- /dev/null +++ b/static/idn-api/beta/schemas/TaskInvocation.yaml @@ -0,0 +1,75 @@ +description: Specifics of invoking a given task from a TaskDefinition +required: + - taskDefinitionId + - taskDefinitionName + - arguments + - priority + - org + - executionService + - executionType + - executionPath + - restMethod + - queryParameters + - messageScope + - payloadType +type: object +properties: + taskDefinitionId: + description: Unique ID of the TaskDefinition to use to invoke the task + type: string + example: aUniqueId + taskDefinitionName: + description: Name of the TaskDefinition to use to invoke the task + type: string + example: aName + arguments: + description: Actual arguments for the task invocation + type: object + additionalProperties: true + priority: + description: Task priority + type: string + default: LOW + enum: + - HIGH + - MEDIUM + - LOW + org: + description: org for which to perform task execution + type: string + example: acme-solar + executionService: + description: service to perform task execution + type: string + example: SWEEP + executionType: + description: type of task execution + type: string + default: REST + enum: + - REST + - EVENT + - MESSAGE + executionPath: + description: path to use for task execution + type: string + example: /taskFulfillment/tasks/run + restMethod: + description: REST method to use for task execution + type: string + enum: + - GET + - POST + - DELETE + queryParameters: + description: query parameters to use for REST task execution + type: object + additionalProperties: true + messageScope: + description: messageScope to use for MESSAGE task execution + type: string + example: MAINTENANCE_TASK + payloadType: + description: payloadType to use for MESSAGE task execution + type: string + example: BULK_SYNCHRONIZE_ACCESS_PROFILES diff --git a/static/idn-api/beta/schemas/TaskReturnDetails.yaml b/static/idn-api/beta/schemas/TaskReturnDetails.yaml new file mode 100644 index 000000000..25ee3c3ca --- /dev/null +++ b/static/idn-api/beta/schemas/TaskReturnDetails.yaml @@ -0,0 +1,13 @@ +description: Task return details +required: + - name + - attributeName +type: object +properties: + name: + description: Display name of the TaskReturnDetails + type: string + example: label + attributeName: + description: Attribute the TaskReturnDetails is for + type: string diff --git a/static/idn-api/beta/schemas/TaskStatus.yaml b/static/idn-api/beta/schemas/TaskStatus.yaml new file mode 100644 index 000000000..cde424412 --- /dev/null +++ b/static/idn-api/beta/schemas/TaskStatus.yaml @@ -0,0 +1,92 @@ +description: Details and current status of a specific task +required: + - id + - type + - uniqueName + - description + - parentName + - attributes + - created + - modified + - launched + - launcher + - completed + - completionStatus + - messages + - progress + - percentComplete + - returns +type: object +properties: + id: + description: System-generated unique ID of the task this TaskStatus represents + type: string + example: id12345 + type: + description: Type of task this TaskStatus represents + type: string + enum: + - QUARTZ + - QPOC + - QUEUED_TASK + uniqueName: + description: Name of the task this TaskStatus represents + type: string + example: Big Task + description: + description: Description of the task this TaskStatus represents + type: string + example: A Really Big Task + parentName: + description: Name of the parent of the task this TaskStatus represents + type: string + example: Parent Task + launcher: + description: Service to execute the task this TaskStatus represents + type: string + example: sweep + created: + description: Creation date of the task this TaskStatus represents + type: string + format: date-time + modified: + description: Last modification date of the task this TaskStatus represents + type: string + format: date-time + launched: + description: Launch date of the task this TaskStatus represents + type: string + format: date-time + completed: + description: Completion date of the task this TaskStatus represents + type: string + format: date-time + completionStatus: + description: Completion status of the task this TaskStatus represents + type: string + enum: + - Success + - Warning + - Error + - Terminated + - TempError + messages: + description: Messages associated with the task this TaskStatus represents + type: array + items: + $ref: './TaskStatusMessage.yaml' + returns: + description: Return values from the task this TaskStatus represents + type: array + items: + $ref: './TaskReturnDetails.yaml' + attributes: + description: Attributes of the task this TaskStatus represents + type: object + additionalProperties: true + progress: + description: Current progress of the task this TaskStatus represents + type: string + percentComplete: + description: Current percentage completion of the task this TaskStatus represents + type: integer diff --git a/static/idn-api/beta/schemas/TaskStatusMessage.yaml b/static/idn-api/beta/schemas/TaskStatusMessage.yaml new file mode 100644 index 000000000..c4751a9fa --- /dev/null +++ b/static/idn-api/beta/schemas/TaskStatusMessage.yaml @@ -0,0 +1,26 @@ +description: TaskStatus Message +required: + - key + - localizedText + - type + - parameters +type: object +properties: + type: + description: Type of the message + type: string + enum: + - INFO + - WARN + - ERROR + localizedText: + description: Localized form of the message + $ref: './LocalizedMessage.yaml' + key: + description: Key of the message + type: string + parameters: + description: Message parameters for internationalization + type: array + items: + type: object diff --git a/static/idn-api/beta/schemas/TeamSummaryDto.yaml b/static/idn-api/beta/schemas/TeamSummaryDto.yaml new file mode 100644 index 000000000..eaaca3470 --- /dev/null +++ b/static/idn-api/beta/schemas/TeamSummaryDto.yaml @@ -0,0 +1,8 @@ +type: object +properties: + manager: + $ref: "../../v3/schemas/BaseReferenceDto.yaml" + description: Reference to the identity's manager + reports: + $ref: "../schemas/TeamSummaryReportsDto.yaml" + description: Data related to the Identities that are managed by the provided identity diff --git a/static/idn-api/beta/schemas/TeamSummaryReportsDto.yaml b/static/idn-api/beta/schemas/TeamSummaryReportsDto.yaml new file mode 100644 index 000000000..3277b037c --- /dev/null +++ b/static/idn-api/beta/schemas/TeamSummaryReportsDto.yaml @@ -0,0 +1,7 @@ +type: object +properties: + direct: + type: integer + description: Count of Identities that are managed by the provided identity + format: int32 + example: 5 diff --git a/static/idn-api/beta/schemas/TemplateBulkDeleteDto.yaml b/static/idn-api/beta/schemas/TemplateBulkDeleteDto.yaml new file mode 100644 index 000000000..68e863769 --- /dev/null +++ b/static/idn-api/beta/schemas/TemplateBulkDeleteDto.yaml @@ -0,0 +1,18 @@ +type: object +properties: + key: + type: string + example: "cloud_manual_work_item_summary" + medium: + type: string + enum: + - EMAIL + - PHONE + - SMS + example: EMAIL + locale: + type: string + description: The locale for the message text, a BCP 47 language tag. + example: "en" +required: + - key \ No newline at end of file diff --git a/static/idn-api/beta/schemas/TemplateDto.yaml b/static/idn-api/beta/schemas/TemplateDto.yaml new file mode 100644 index 000000000..f6ec85b9d --- /dev/null +++ b/static/idn-api/beta/schemas/TemplateDto.yaml @@ -0,0 +1,61 @@ +type: object +properties: + key: + type: string + example: "cloud_manual_work_item_summary" + name: + type: string + example: "Task Manager Subscription" + medium: + type: string + description: The message medium. More mediums may be added in the future. + enum: + - EMAIL + - PHONE + - SMS + - SLACK + - TEAMS + example: EMAIL + locale: + type: string + description: The locale for the message text, a BCP 47 language tag. + example: "en" + subject: + type: string + example: "You have $numberOfPendingTasks $taskTasks to complete in ${__global.productName}." + header: + type: string + example: "Dear $__recipient.name,
        " + body: + type: string + example: "Please go to the task manager" + footer: + type: string + example: "
        Thanks,
        The $__global.productName Team
        " + from: + type: string + example: "$__global.emailFromAddress" + replyTo: + type: string + example: "$__global.emailFromAddress" + description: + type: string + example: "Daily digest - sent if number of outstanding tasks for task owner > 0" + id: + type: string + example: "c17bea3a-574d-453c-9e04-4365fbf5af0b" + description: This is auto-generated. + created: + type: string + format: date-time + description: The time when this template is created. This is auto-generated. + example: "2020-01-01T00:00:00.000000Z" + modified: + type: string + format: date-time + description: The time when this template was last modified. This is auto-generated. + example: "2020-01-01T00:00:00.000000Z" +required: + - key + - medium + - locale \ No newline at end of file diff --git a/static/idn-api/beta/schemas/TemplateDtoDefault.yaml b/static/idn-api/beta/schemas/TemplateDtoDefault.yaml new file mode 100644 index 000000000..ce429f75f --- /dev/null +++ b/static/idn-api/beta/schemas/TemplateDtoDefault.yaml @@ -0,0 +1,43 @@ +type: object +properties: + key: + type: string + example: "cloud_manual_work_item_summary" + name: + type: string + example: "Task Manager Subscription" + medium: + type: string + description: The message medium. More mediums may be added in the future. + enum: + - EMAIL + - PHONE + - SMS + - SLACK + - TEAMS + example: EMAIL + locale: + type: string + description: The locale for the message text, a BCP 47 language tag. + example: "en" + subject: + type: string + example: "You have $numberOfPendingTasks $taskTasks to complete in ${__global.productName}." + header: + type: string + example: "Dear $__recipient.name,
        " + body: + type: string + example: "Please go to the task manager" + footer: + type: string + example: "
        Thanks,
        The $__global.productName Team
        " + from: + type: string + example: "$__global.emailFromAddress" + replyTo: + type: string + example: "$__global.emailFromAddress" + description: + type: string + example: "Daily digest - sent if number of outstanding tasks for task owner > 0" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/TestInvocation.yaml b/static/idn-api/beta/schemas/TestInvocation.yaml new file mode 100644 index 000000000..cedf81ec4 --- /dev/null +++ b/static/idn-api/beta/schemas/TestInvocation.yaml @@ -0,0 +1,23 @@ +type: object +properties: + triggerId: + type: string + example: "idn:access-request-post-approval" + description: Trigger ID + input: + type: object + example: {"identityId": "201327fda1c44704ac01181e963d463c"} + description: Mock input to use for test invocation. This must adhere to the input schema defined in the trigger being invoked. If this property is omitted, then the default trigger sample payload will be sent. + contentJson: + type: object + example: {"workflowId": 1234} + description: JSON map of invocation metadata. + subscriptionIds: + type: array + items: + type: string + example: ["0f11f2a4-7c94-4bf3-a2bd-742580fe3bde"] + description: Only send the test event to the subscription IDs listed. If omitted, the test event will be sent to all subscribers. +required: + - triggerId + - contentJson diff --git a/static/idn-api/beta/schemas/TicketType.yaml b/static/idn-api/beta/schemas/TicketType.yaml new file mode 100644 index 000000000..efca6593c --- /dev/null +++ b/static/idn-api/beta/schemas/TicketType.yaml @@ -0,0 +1,8 @@ +description: ticket type of the Service Desk integration. Normally the values would be all caps, but they're not for backward compatibility +type: string +example: serviceRequest +enum: + - serviceRequest + - incident + - changeRequest + - generic diff --git a/static/idn-api/beta/schemas/TotpCodeRequest.yaml b/static/idn-api/beta/schemas/TotpCodeRequest.yaml new file mode 100644 index 000000000..4d5803e36 --- /dev/null +++ b/static/idn-api/beta/schemas/TotpCodeRequest.yaml @@ -0,0 +1,6 @@ +type: object +properties: + totpCode: + type: string + description: A six-digit code generated by an authenticator + example: 165982 diff --git a/static/idn-api/beta/schemas/Transform.yaml b/static/idn-api/beta/schemas/Transform.yaml new file mode 100644 index 000000000..980b322f3 --- /dev/null +++ b/static/idn-api/beta/schemas/Transform.yaml @@ -0,0 +1,38 @@ +type: object +description: >- + DTO for representing an internally- or customer-defined transform. +required: + - name + - type + - attributes +properties: + id: + type: string + readOnly: true + description: >- + Unique ID of this transform + example: 2cd78adghjkja34jh2b1hkjhasuecd + name: + type: string + readOnly: true + description: >- + Unique name of this transform + example: Timestamp To Date + type: + type: string + readOnly: true + description: >- + The transform type (see [Transformations in IdentityNow Using Seaspray](https://community.sailpoint.com/docs/DOC-4629)). + example: concat + attributes: + type: object + description: >- + Meta-data about the transform. Values in this list are specific to the type of transform to be executed. + additionalProperties: true + example: { "inputFormat": "MMM dd yyyy, HH:mm:ss.SSS", "outputFormat": "yyyy/dd/MM" } + internal: + type: boolean + readOnly: true + description: >- + Indicates whether this is an internal SailPoint-created transform or a customer-created transform + example: false diff --git a/static/idn-api/beta/schemas/TransformDefinition.yaml b/static/idn-api/beta/schemas/TransformDefinition.yaml new file mode 100644 index 000000000..bcb276da5 --- /dev/null +++ b/static/idn-api/beta/schemas/TransformDefinition.yaml @@ -0,0 +1,17 @@ +type: object +properties: + type: + type: string + description: The type of the transform definition. + example: accountAttribute + attributes: + type: object + additionalProperties: + type: object + description: >- + Arbitrary key-value pairs to store any metadata for the object + example: { + attributeName: 'e-mail', + sourceName: 'MySource', + sourceId: '2c9180877a826e68017a8c0b03da1a53' + } diff --git a/static/idn-api/beta/schemas/TranslationMessage.yaml b/static/idn-api/beta/schemas/TranslationMessage.yaml new file mode 100644 index 000000000..5726e81aa --- /dev/null +++ b/static/idn-api/beta/schemas/TranslationMessage.yaml @@ -0,0 +1,11 @@ +properties: + key: + type: string + description: The key of the translation message + example: 'recommender-api.V2_WEIGHT_FEATURE_PRODUCT_INTERPRETATION_HIGH' + values: + type: array + description: The values corresponding to the translation messages + items: + type: string + example: ["75","department"] \ No newline at end of file diff --git a/static/idn-api/beta/schemas/Trigger.yaml b/static/idn-api/beta/schemas/Trigger.yaml new file mode 100644 index 000000000..bc053d002 --- /dev/null +++ b/static/idn-api/beta/schemas/Trigger.yaml @@ -0,0 +1,65 @@ +type: object +required: +- id +- name +- type +- inputSchema +- exampleInput +properties: + id: + type: string + description: Unique identifier of the trigger. + example: "idn:access-request-dynamic-approver" + name: + type: string + description: Trigger Name. + example: Access Request Dynamic Approver + type: + $ref: './TriggerType.yaml' + example: REQUEST_RESPONSE + description: + type: string + description: Trigger Description. + example: Trigger for getting a dynamic approver. + inputSchema: + type: string + description: The JSON schema of the payload that will be sent by the trigger to the subscribed service. + example: "{\"definitions\":{\"record:AccessRequestDynamicApproverInput\":{\"type\":\"object\",\"required\":[\"accessRequestId\",\"requestedFor\",\"requestedItems\",\"requestedBy\"],\"additionalProperties\":true,\"properties\":{\"accessRequestId\":{\"type\":\"string\"},\"requestedFor\":{\"$ref\":\"#/definitions/record:requestedForIdentityRef\"},\"requestedItems\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/record:requestedObjectRef\"}},\"requestedBy\":{\"$ref\":\"#/definitions/record:requestedByIdentityRef\"}}},\"record:requestedForIdentityRef\":{\"type\":\"object\",\"required\":[\"id\",\"name\",\"type\"],\"additionalProperties\":true,\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"type\":{\"type\":\"string\"}}},\"record:requestedObjectRef\":{\"type\":\"object\",\"optional\":[\"description\",\"comment\"],\"required\":[\"id\",\"name\",\"type\",\"operation\"],\"additionalProperties\":true,\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"description\":{\"oneOf\":[{\"type\":\"null\"},{\"type\":\"string\"}]},\"type\":{\"type\":\"string\"},\"operation\":{\"type\":\"string\"},\"comment\":{\"oneOf\":[{\"type\":\"null\"},{\"type\":\"string\"}]}}},\"record:requestedByIdentityRef\":{\"type\":\"object\",\"required\":[\"type\",\"id\",\"name\"],\"additionalProperties\":true,\"properties\":{\"type\":{\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}}}},\"$ref\":\"#/definitions/record:AccessRequestDynamicApproverInput\"}" + exampleInput: + description: An example of the JSON payload that will be sent by the trigger to the subscribed service. + oneOf: + - $ref: './trigger/example-input/AccessRequestDynamicApprover.yaml' + - $ref: './trigger/example-input/AccessRequestPostApproval.yaml' + - $ref: './trigger/example-input/AccessRequestPreApproval.yaml' + - $ref: './trigger/example-input/AccountAggregationCompleted.yaml' + - $ref: './trigger/example-input/AccountAttributesChanged.yaml' + - $ref: './trigger/example-input/AccountCorrelated.yaml' + - $ref: './trigger/example-input/AccountsCollectedForAggregation.yaml' + - $ref: './trigger/example-input/AccountUncorrelated.yaml' + - $ref: './trigger/example-input/CampaignActivated.yaml' + - $ref: './trigger/example-input/CampaignEnded.yaml' + - $ref: './trigger/example-input/CampaignGenerated.yaml' + - $ref: './trigger/example-input/CertificationSignedOff.yaml' + - $ref: './trigger/example-input/IdentityAttributesChanged.yaml' + - $ref: './trigger/example-input/IdentityCreated.yaml' + - $ref: './trigger/example-input/IdentityDeleted.yaml' + - $ref: './trigger/example-input/ProvisioningCompleted.yaml' + - $ref: './trigger/example-input/SavedSearchComplete.yaml' + - $ref: './trigger/example-input/SourceAccountCreated.yaml' + - $ref: './trigger/example-input/SourceAccountDeleted.yaml' + - $ref: './trigger/example-input/SourceAccountUpdated.yaml' + - $ref: './trigger/example-input/SourceCreated.yaml' + - $ref: './trigger/example-input/SourceDeleted.yaml' + - $ref: './trigger/example-input/SourceUpdated.yaml' + - $ref: './trigger/example-input/VAClusterStatusChangeEvent.yaml' + outputSchema: + type: string + description: The JSON schema of the response that will be sent by the subscribed service to the trigger in response to an event. This only applies to a trigger type of `REQUEST_RESPONSE`. + nullable: true + example: "{\"definitions\":{\"record:AccessRequestDynamicApproverOutput\":{\"type\":[\"null\",\"object\"],\"required\":[\"id\",\"name\",\"type\"],\"additionalProperties\":true,\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"type\":{\"type\":\"string\"}}}},\"$ref\":\"#/definitions/record:AccessRequestDynamicApproverOutput\"}" + exampleOutput: + description: An example of the JSON payload that will be sent by the subscribed service to the trigger in response to an event. + nullable: true + oneOf: + - $ref: './trigger/example-output/AccessRequestDynamicApprover.yaml' + - $ref: './trigger/example-output/AccessRequestPreApproval.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/TriggerType.yaml b/static/idn-api/beta/schemas/TriggerType.yaml new file mode 100644 index 000000000..6c21721ad --- /dev/null +++ b/static/idn-api/beta/schemas/TriggerType.yaml @@ -0,0 +1,6 @@ +type: string +description: The type of trigger. +example: FIRE_AND_FORGET +enum: +- REQUEST_RESPONSE +- FIRE_AND_FORGET diff --git a/static/idn-api/beta/schemas/V3ConnectorDto.yaml b/static/idn-api/beta/schemas/V3ConnectorDto.yaml new file mode 100644 index 000000000..6bb1461e8 --- /dev/null +++ b/static/idn-api/beta/schemas/V3ConnectorDto.yaml @@ -0,0 +1,30 @@ +type: object +properties: + name: + type: string + description: The connector name + example: "name" + type: + type: string + description: The connector type + example: "ServiceNow" + scriptName: + type: string + description: The connector script name + example: "servicenow" + directConnect: + type: boolean + description: true if the source is a direct connect source + example: true + connectorMetadata: + type: object + description: Object containing metadata pertinent to the UI to be used + example: { + "supportedUI": "EXTJS", + "platform": "ccg", + "shortDesc": "connector description" + } + status: + type: string + description: The connector status + example: "RELEASED" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/VaJob.yaml b/static/idn-api/beta/schemas/VaJob.yaml new file mode 100644 index 000000000..b4712b024 --- /dev/null +++ b/static/idn-api/beta/schemas/VaJob.yaml @@ -0,0 +1,70 @@ +type: object +properties: + uuid: + type: string + description: Job UUID. + example: 'abc-d765ab-77jovaw' + cookbook: + type: string + description: Job Cookbook. + example: 'abc-d765ab-77jovaw' + state: + description: Job State + example: 'INPROGRESS' + nullable: false + $ref: './JobState.yaml' + type: + description: Job Type + example: 'VA_UPGRADE' + nullable: false + $ref: './JobType.yaml' + targetId: + type: string + description: Client id that the job is targeting. + example: '2222' + managedProcessConfiguration: + description: The active Process Dependencies for the cluster type + example: + '{ + "charon": { + "version": "393", + "path": "sailpoint/charon", + "description": null, + "dependencies": null + }, + "ccg": { + "version": "503_668_96.2.0", + "path": "sailpoint/ccg", + "description": null, + "dependencies": null + }, + "toolbox": { + "version": "15", + "path": "sailpoint/toolbox", + "description": null, + "dependencies": null + }, + "fluent": { + "version": "50", + "path": "fluent/va", + "description": null, + "dependencies": null + }, + "va_agent": { + "version": "99", + "path": "sailpoint/va_agent", + "description": null, + "dependencies": null + } + }' + additionalProperties: + type: object + description: ManagedProcess configuration map + $ref: './ManagedProcessConfiguration.yaml' + +required: + - uuid + - cookbook + - state + - type + - targetId \ No newline at end of file diff --git a/static/idn-api/beta/schemas/ValidateFilterInputDto.yaml b/static/idn-api/beta/schemas/ValidateFilterInputDto.yaml new file mode 100644 index 000000000..28fbe9855 --- /dev/null +++ b/static/idn-api/beta/schemas/ValidateFilterInputDto.yaml @@ -0,0 +1,17 @@ +type: object +properties: + input: + type: object + description: Mock input to evaluate filter expression against. + example: {"identityId": "201327fda1c44704ac01181e963d463c"} + filter: + type: string + description: JSONPath filter to conditionally invoke trigger when expression evaluates to true. + example: '$[?($.identityId == "201327fda1c44704ac01181e963d463c")]' + externalDocs: + description: JSONPath filter documentation + url: https://developer.sailpoint.com/triggers/filtering_event_triggers.html#filtering-event-triggers + +required: + - input + - filter diff --git a/static/idn-api/beta/schemas/ValidateFilterOutputDto.yaml b/static/idn-api/beta/schemas/ValidateFilterOutputDto.yaml new file mode 100644 index 000000000..2cf2dfd16 --- /dev/null +++ b/static/idn-api/beta/schemas/ValidateFilterOutputDto.yaml @@ -0,0 +1,5 @@ +type: object +properties: + isValid: + type: boolean + description: True if specified filter expression is valid against the input, false otherwise. diff --git a/static/idn-api/beta/schemas/Value.yaml b/static/idn-api/beta/schemas/Value.yaml new file mode 100644 index 000000000..514d0721c --- /dev/null +++ b/static/idn-api/beta/schemas/Value.yaml @@ -0,0 +1,10 @@ +type: object +properties: + type: + type: string + description: The type of attribute value + example: "STRING" + value: + type: string + description: The attribute value + example: "Austin" diff --git a/static/idn-api/beta/schemas/ViolationOwnerAssignmentConfig.yaml b/static/idn-api/beta/schemas/ViolationOwnerAssignmentConfig.yaml new file mode 100644 index 000000000..3fd336360 --- /dev/null +++ b/static/idn-api/beta/schemas/ViolationOwnerAssignmentConfig.yaml @@ -0,0 +1,17 @@ +type: object +properties: + assignmentRule: + type: string + enum: + - MANAGER + - STATIC + description: >- + Details about the violations owner. + + MANAGER - identity's manager + + STATIC - Governance Group or Identity + example: MANAGER + ownerRef: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + diff --git a/static/idn-api/beta/schemas/VisibilityCriteria.yaml b/static/idn-api/beta/schemas/VisibilityCriteria.yaml new file mode 100644 index 000000000..583adcc0d --- /dev/null +++ b/static/idn-api/beta/schemas/VisibilityCriteria.yaml @@ -0,0 +1,4 @@ +type: object +properties: + expression: + $ref: './Expression.yaml' diff --git a/static/idn-api/beta/schemas/WorkItems.yaml b/static/idn-api/beta/schemas/WorkItems.yaml new file mode 100644 index 000000000..3dd2c5a1b --- /dev/null +++ b/static/idn-api/beta/schemas/WorkItems.yaml @@ -0,0 +1,61 @@ +type: object +properties: + id: + type: string + description: ID of the work item + example: 2c9180835d2e5168015d32f890ca1581 + requesterId: + type: string + description: ID of the requester + example: 2c9180835d2e5168015d32f890ca1581 + requesterDisplayName: + type: string + description: The displayname of the requester + example: John Smith + ownerId: + type: string + description: The ID of the owner + example: 2c9180835d2e5168015d32f890ca1581 + ownerName: + type: string + description: The name of the owner + example: Jason Smith + created: + type: string + format: 'date-time' + example: '2017-07-11T18:45:37.098Z' + modified: + type: string + format: 'date-time' + example: '2018-06-25T20:22:28.104Z' + description: + type: string + description: The description of the work item + example: Create account on source 'AD' + state: + $ref: '../../v3/schemas/WorkItemState.yaml' + type: + $ref: '../../v3/schemas/WorkItemType.yaml' + remediationItems: + $ref: './RemediationItemDetails.yaml' + approvalItems: + $ref: './ApprovalItemDetails.yaml' + name: + type: string + description: The work item name + example: Account Create + completed: + type: string + format: 'date-time' + example: '2018-10-19T13:49:37.385Z' + numItems: + type: integer + description: The number of items in the work item + example: 19 + errors: + type: array + items: + type: string + example: ["The work item ID that was specified was not found."] + + diff --git a/static/idn-api/beta/schemas/WorkItemsCount.yaml b/static/idn-api/beta/schemas/WorkItemsCount.yaml new file mode 100644 index 000000000..c28259347 --- /dev/null +++ b/static/idn-api/beta/schemas/WorkItemsCount.yaml @@ -0,0 +1,6 @@ +type: object +properties: + count: + type: integer + description: The count of work items + example: 29 diff --git a/static/idn-api/beta/schemas/WorkItemsSummary.yaml b/static/idn-api/beta/schemas/WorkItemsSummary.yaml new file mode 100644 index 000000000..55c35af8a --- /dev/null +++ b/static/idn-api/beta/schemas/WorkItemsSummary.yaml @@ -0,0 +1,14 @@ +type: object +properties: + open: + type: integer + description: The count of open work items + example: 29 + completed: + type: integer + description: The count of completed work items + example: 1 + total: + type: integer + description: The count of total work items + example: 30 diff --git a/static/idn-api/beta/schemas/Workflow.yaml b/static/idn-api/beta/schemas/Workflow.yaml new file mode 100644 index 000000000..bc8486ba1 --- /dev/null +++ b/static/idn-api/beta/schemas/Workflow.yaml @@ -0,0 +1,38 @@ +allOf: +- type: object + properties: + id: + type: string + description: Workflow ID. This is a UUID generated upon creation. + example: d201c5e9-d37b-4aff-af14-66414f39d569 + executionCount: + type: integer + format: int32 + description: The number of times this workflow has been executed + example: 2 + failureCount: + type: integer + format: int32 + description: The number of times this workflow has failed during execution + example: 0 + created: + type: string + format: date-time + description: The date and time the workflow was created + example: "2022-01-10T16:06:16.636381447Z" + creator: + allOf: + - $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: The identity that created the workflow. + properties: + type: + enum: + - "IDENTITY" + example: "IDENTITY" + description: The type of object that is referenced + example: { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1313", + "name": "William Wilson" + } +- $ref: './WorkflowBody.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/WorkflowBody.yaml b/static/idn-api/beta/schemas/WorkflowBody.yaml new file mode 100644 index 000000000..95af5a944 --- /dev/null +++ b/static/idn-api/beta/schemas/WorkflowBody.yaml @@ -0,0 +1,34 @@ +type: object +properties: + name: + type: string + description: The name of the workflow + example: "Send Email" + owner: + allOf: + - $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: The identity that owns the workflow. The owner's permissions in IDN will determine what actions the workflow is allowed to perform. Ownership can be changed by updating the owner in a PUT or PATCH request. + properties: + type: + enum: + - "IDENTITY" + example: "IDENTITY" + description: The type of object that is referenced + example: { + "type": "IDENTITY", + "id": "2c91808568c529c60168cca6f90c1313", + "name": "William Wilson" + } + description: + type: string + description: Description of what the workflow accomplishes + example: "Send an email to the identity who's attributes changed." + definition: + $ref: './WorkflowDefinition.yaml' + enabled: + type: boolean + description: Enable or disable the workflow. Workflows cannot be created in an enabled state. + default: false + example: false + trigger: + $ref: './WorkflowTrigger.yaml' diff --git a/static/idn-api/beta/schemas/WorkflowDefinition.yaml b/static/idn-api/beta/schemas/WorkflowDefinition.yaml new file mode 100644 index 000000000..74a5c272f --- /dev/null +++ b/static/idn-api/beta/schemas/WorkflowDefinition.yaml @@ -0,0 +1,28 @@ +type: object +description: The map of steps that the workflow will execute. +properties: + start: + type: string + description: The name of the starting step. + example: "Send Email Test" + steps: + type: object + description: One or more step objects that comprise this workflow. Please see the Workflow documentation to see the JSON schema for each step type. + additionalProperties: true + example: { + "Send Email": { + "actionId": "sp:send-email", + "attributes": { + "body": "This is a test", + "from": "sailpoint@sailpoint.com", + "recipientId.$": "$.identity.id", + "subject": "test" + }, + "nextStep": "success", + "selectResult": null, + "type": "action" + }, + "success": { + "type": "success" + } + } \ No newline at end of file diff --git a/static/idn-api/beta/schemas/WorkflowExecution.yaml b/static/idn-api/beta/schemas/WorkflowExecution.yaml new file mode 100644 index 000000000..439b00609 --- /dev/null +++ b/static/idn-api/beta/schemas/WorkflowExecution.yaml @@ -0,0 +1,34 @@ +type: object +properties: + id: + type: string + description: The workflow execution ID + example: b393f4e2-4785-4d7f-ab27-3a6b8ded4c81 + workflowId: + type: string + description: The workflow ID + example: d201c5d9-d37b-4a2f-af14-66414f39d568 + requestId: + type: string + description: This backend ID tracks a workflow request in the system. You can provide this ID in a customer support ticket for debugging purposes. + example: 41e12a74fa7b4a6a98ae47887b64acdb + startTime: + type: string + format: date-time + description: The date/time the workflow started + example: "2022-02-07T20:13:29.356648026Z" + closeTime: + type: string + format: date-time + description: The date/time the workflow ended + example: "2022-02-07T20:13:31.682410165Z" + status: + description: The workflow execution status + type: string + enum: + - "Completed" + - "Failed" + - "Canceled" + - "Running" + example: "Completed" + diff --git a/static/idn-api/beta/schemas/WorkflowExecutionEvent.yaml b/static/idn-api/beta/schemas/WorkflowExecutionEvent.yaml new file mode 100644 index 000000000..371522633 --- /dev/null +++ b/static/idn-api/beta/schemas/WorkflowExecutionEvent.yaml @@ -0,0 +1,27 @@ +type: object +properties: + type: + description: The type of event + enum: + - WorkflowExecutionScheduled + - WorkflowExecutionStarted + - WorkflowExecutionCompleted + - WorkflowExecutionFailed + - WorkflowTaskScheduled + - WorkflowTaskStarted + - WorkflowTaskCompleted + - WorkflowTaskFailed + - ActivityTaskScheduled + - ActivityTaskStarted + - ActivityTaskCompleted + - ActivityTaskFailed + example: WorkflowTaskScheduled + timestamp: + type: string + format: date-time + description: The date-time when the event occurred + example: "2022-02-07T20:13:31.640618296Z" + attributes: + type: object + description: Additional attributes associated with the event + example: {} diff --git a/static/idn-api/beta/schemas/WorkflowLibraryAction.yaml b/static/idn-api/beta/schemas/WorkflowLibraryAction.yaml new file mode 100644 index 000000000..da89241a2 --- /dev/null +++ b/static/idn-api/beta/schemas/WorkflowLibraryAction.yaml @@ -0,0 +1,136 @@ +title: Workflow Action +type: object +properties: + id: + type: string + description: Action ID. This is a static namespaced ID for the action + example: "sp:create-campaign" + name: + type: string + description: Action Name + example: "Create Certification Campaign" + description: + type: string + description: Action Description + example: "Generates a certification campaign." + formFields: + type: array + description: One or more inputs that the action accepts + items: + $ref: './WorkflowLibraryFormFields.yaml' + outputSchema: + type: object + description: Defines the output schema, if any, that this action produces. + example: + { + "definitions": {}, + "properties": { + "autoRevokeAllowed": { + "$id": "#sp:create-campaign/autoRevokeAllowed", + "default": true, + "examples": [ + false + ], + "title": "autoRevokeAllowed", + "type": "boolean" + }, + "deadline": { + "$id": "#sp:create-campaign/deadline", + "default": "", + "examples": [ + "2020-12-25T06:00:00.468Z" + ], + "format": "date-time", + "pattern": "^.*$", + "title": "deadline", + "type": "string" + }, + "description": { + "$id": "#sp:create-campaign/description", + "default": "", + "examples": [ + "A review of everyone's access by their manager." + ], + "pattern": "^.*$", + "title": "description", + "type": "string" + }, + "emailNotificationEnabled": { + "$id": "#sp:create-campaign/emailNotificationEnabled", + "default": true, + "examples": [ + false + ], + "title": "emailNotificationEnabled", + "type": "boolean" + }, + "filter": { + "$id": "#sp:create-campaign/filter", + "properties": { + "id": { + "$id": "#sp:create-campaign/filter/id", + "default": "", + "examples": [ + "e0adaae69852e8fe8b8a3d48e5ce757c" + ], + "pattern": "^.*$", + "title": "id", + "type": "string" + }, + "type": { + "$id": "#sp:create-campaign/filter/type", + "default": "", + "examples": [ + "CAMPAIGN_FILTER" + ], + "pattern": "^.*$", + "title": "type", + "type": "string" + } + }, + "title": "filter", + "type": "object" + }, + "id": { + "$id": "#sp:create-campaign/id", + "default": "", + "examples": [ + "2c918086719eec070171a7e3355a360a" + ], + "pattern": "^.*$", + "title": "id", + "type": "string" + }, + "name": { + "$id": "#sp:create-campaign/name", + "default": "", + "examples": [ + "Manager Review" + ], + "pattern": "^.*$", + "title": "name", + "type": "string" + }, + "recommendationsEnabled": { + "$id": "#sp:create-campaign/recommendationsEnabled", + "default": true, + "examples": [ + false + ], + "title": "recommendationEnabled", + "type": "boolean" + }, + "type": { + "$id": "#sp:create-campaign/type", + "default": "", + "examples": [ + "MANAGER" + ], + "pattern": "^.*$", + "title": "type", + "type": "string" + } + }, + "title": "sp:create-campaign", + "type": "object" + } diff --git a/static/idn-api/beta/schemas/WorkflowLibraryFormFields.yaml b/static/idn-api/beta/schemas/WorkflowLibraryFormFields.yaml new file mode 100644 index 000000000..516d855ab --- /dev/null +++ b/static/idn-api/beta/schemas/WorkflowLibraryFormFields.yaml @@ -0,0 +1,30 @@ +type: object +properties: + helpText: + type: string + description: Describes the form field in the UI + example: The name to give to this certification campaign. + label: + type: string + description: A human readable name for this form field in the UI + example: Campaign Name + name: + type: string + description: The name of the input attribute + example: name + required: + type: boolean + description: Denotes if this field is a required attribute + example: false + type: + description: The type of the form field + enum: + - text + - textarea + - boolean + - email + - url + - number + - json + - checkbox + example: text diff --git a/static/idn-api/beta/schemas/WorkflowLibraryOperator.yaml b/static/idn-api/beta/schemas/WorkflowLibraryOperator.yaml new file mode 100644 index 000000000..e7a84d052 --- /dev/null +++ b/static/idn-api/beta/schemas/WorkflowLibraryOperator.yaml @@ -0,0 +1,60 @@ +title: Workflow Operator +type: object +properties: + id: + type: string + description: Operator ID. + example: "sp:compare-boolean" + name: + type: string + description: Operator friendly name + example: Compare Boolean Values + description: + type: string + description: Description of the operator + example: Compare two boolean values and decide what happens based on the result. + formFields: + type: array + description: One or more inputs that the operator accepts + items: + $ref: './WorkflowLibraryFormFields.yaml' + example: + [ + { + "description": "Enter the JSONPath to a value from the input to compare to Variable B.", + "helpText": "", + "label": "Variable A", + "name": "variableA.$", + "required": true, + "type": "text" + }, + { + "helpText": "Select an operation.", + "label": "Operation", + "name": "operator", + "options": [ + { + "label": "Equals", + "value": "BooleanEquals" + } + ], + "required": true, + "type": "select" + }, + { + "description": "Enter the JSONPath to a value from the input to compare to Variable A.", + "helpText": "", + "label": "Variable B", + "name": "variableB.$", + "required": false, + "type": "text" + }, + { + "description": "Enter True or False.", + "helpText": "", + "label": "Variable B", + "name": "variableB", + "required": false, + "type": "text" + } + ] \ No newline at end of file diff --git a/static/idn-api/beta/schemas/WorkflowLibraryTrigger.yaml b/static/idn-api/beta/schemas/WorkflowLibraryTrigger.yaml new file mode 100644 index 000000000..7196351af --- /dev/null +++ b/static/idn-api/beta/schemas/WorkflowLibraryTrigger.yaml @@ -0,0 +1,67 @@ +title: Workflow Trigger +type: object +properties: + id: + type: string + description: Trigger ID. This is a static namespaced ID for the trigger. + example: "idn:identity-attributes-changed" + type: + description: Trigger type + enum: + - EVENT + - SCHEDULED + - EXTERNAL + example: EVENT + name: + type: string + description: Trigger Name + example: Identity Attributes Changed + description: + type: string + description: Trigger Description + example: One or more identity attributes changed. + inputExample: + type: object + description: Example trigger payload if applicable + externalDocs: + description: List of triggers and their input schemas + url: https://developer.sailpoint.com/triggers/available_event_triggers.html#request + example: + { + "changes": [ + { + "attribute": "department", + "newValue": "marketing", + "oldValue": "sales" + }, + { + "attribute": "manager", + "newValue": { + "id": "ee769173319b41d19ccec6c235423236c", + "name": "mean.guy", + "type": "IDENTITY" + }, + "oldValue": { + "id": "ee769173319b41d19ccec6c235423237b", + "name": "nice.guy", + "type": "IDENTITY" + } + }, + { + "attribute": "email", + "newValue": "john.doe@gmail.com", + "oldValue": "john.doe@hotmail.com" + } + ], + "identity": { + "id": "ee769173319b41d19ccec6cea52f237b", + "name": "john.doe", + "type": "IDENTITY" + } + } + formFields: + type: array + description: One or more inputs that the trigger accepts + example: [] + items: + $ref: './WorkflowLibraryFormFields.yaml' diff --git a/static/idn-api/beta/schemas/WorkflowOAuthClient.yaml b/static/idn-api/beta/schemas/WorkflowOAuthClient.yaml new file mode 100644 index 000000000..d95cff31a --- /dev/null +++ b/static/idn-api/beta/schemas/WorkflowOAuthClient.yaml @@ -0,0 +1,14 @@ +type: object +properties: + id: + type: string + description: OAuth client ID for the trigger. This is a UUID generated upon creation. + example: 1a58c03a6bf64dc2876f6988c6e2c7b7 + secret: + type: string + description: OAuthClient secret. + example: 00cc24a7fe810fe06a7cb38bc168ae104d703c7abb296f9944dc68e69ddb578b + url: + type: string + description: URL for the external trigger to invoke + example: https://{tenant}.api.identitynow.com/beta/workflows/execute/external/c17bea3a-574d-453c-9e04-4365fbf5af0b diff --git a/static/idn-api/beta/schemas/WorkflowReference.yaml b/static/idn-api/beta/schemas/WorkflowReference.yaml new file mode 100644 index 000000000..b83374dd0 --- /dev/null +++ b/static/idn-api/beta/schemas/WorkflowReference.yaml @@ -0,0 +1,11 @@ +type: object +properties: + type: + type: string + description: Workflow Reference Type. + id: + type: string + description: Workflow Reference Id. + name: + type: string + description: Workflow Reference Name. diff --git a/static/idn-api/beta/schemas/WorkflowTrigger.yaml b/static/idn-api/beta/schemas/WorkflowTrigger.yaml new file mode 100644 index 000000000..a2e9bf889 --- /dev/null +++ b/static/idn-api/beta/schemas/WorkflowTrigger.yaml @@ -0,0 +1,19 @@ +type: object +description: The trigger that starts the workflow +required: + - type + - attributes +properties: + type: + enum: + - EVENT + - EXTERNAL + - SCHEDULED + example: EVENT + description: The trigger type + attributes: + description: Workflow Trigger Attributes. + oneOf: + - $ref: './workflows/trigger-attributes/EventAttributes.yaml' + # - $ref: './workflows/trigger-attributes/ExternalAttributes.yaml' + - $ref: './workflows/trigger-attributes/ScheduledAttributes.yaml' diff --git a/static/idn-api/beta/schemas/campaign/examples/CampaignTemplateManager.yaml b/static/idn-api/beta/schemas/campaign/examples/CampaignTemplateManager.yaml new file mode 100644 index 000000000..e0b090c62 --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/CampaignTemplateManager.yaml @@ -0,0 +1,39 @@ +value: + id: e7dbec99d49349c8951bd84f58a05120 + name: Manager Review + created: 2022-08-02T19:16:42.632Z + modified: null + description: A review of everyone's access by their manager. + deadlineDuration: P14D + ownerRef: + email: support@testmail.identitysoon.com + type: IDENTITY + id: 7ec252acbd4245548bc25df22348cb75 + name: SailPoint Support + scheduled: false + campaign: + created: null + modified: null + filter: + type: CAMPAIGN_FILTER + id: e0adaae69852e8fe8b8a3d48e5ce757c + sunsetCommentsRequired: true + sourceOwnerCampaignInfo: null + searchCampaignInfo: null + roleCompositionCampaignInfo: null + alerts: null + totalCertifications: null + completedCertifications: null + sourcesWithOrphanEntitlements: null + id: null + name: Manager Review + description: Review everyone's access. + deadline: null + type: MANAGER + status: null + emailNotificationEnabled: true + autoRevokeAllowed: false + recommendationsEnabled: false + + + \ No newline at end of file diff --git a/static/idn-api/beta/schemas/campaign/examples/CampaignTemplateRoleComposition.yaml b/static/idn-api/beta/schemas/campaign/examples/CampaignTemplateRoleComposition.yaml new file mode 100644 index 000000000..364e3125d --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/CampaignTemplateRoleComposition.yaml @@ -0,0 +1,45 @@ +value: + id: b9f41bc69e7a4291b9de0630396d030d + name: Campaign With Admin Role + created: 2022-08-02T13:40:36.857Z + modified: null + description: Campaign With Admin Role + deadlineDuration: null + ownerRef: + email: support@testmail.identitysoon.com + type: IDENTITY + id: 7ec252acbd4245548bc25df22348cb75 + name: SailPoint Support + scheduled: false + campaign: + created: null + modified: null + filter: null + sunsetCommentsRequired: true + sourceOwnerCampaignInfo: null + searchCampaignInfo: null + roleCompositionCampaignInfo: + remediatorRef: + type: IDENTITY + id: 7ec252acbd4245548bc25df22348cb75 + name: SailPoint Support + reviewerId: null + reviewer: null + roleIds: + - b15d609fc5c8434b865fe552315fda8f + query: null + description: null + alerts: null + totalCertifications: null + completedCertifications: null + sourcesWithOrphanEntitlements: null + id: null + name: Campaign With Admin Role + description: Campaign With Admin Role + deadline: null + type: ROLE_COMPOSITION + status: null + emailNotificationEnabled: false + autoRevokeAllowed: false + recommendationsEnabled: false + \ No newline at end of file diff --git a/static/idn-api/beta/schemas/campaign/examples/CampaignTemplateSearch.yaml b/static/idn-api/beta/schemas/campaign/examples/CampaignTemplateSearch.yaml new file mode 100644 index 000000000..e55a10c48 --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/CampaignTemplateSearch.yaml @@ -0,0 +1,43 @@ +value: + id: b7e6459eed5247ac8b98a5fed81fe27f + name: Reporting Access Review + created: 2022-07-28T19:19:40.035Z + modified: null + description: A review of everyone's access to the reporting system. + deadlineDuration: P14D + ownerRef: + email: support@testmail.identitysoon.com + type: IDENTITY + id: 7ec252acbd4245548bc25df22348cb75 + name: SailPoint Support + scheduled: false + campaign: + created: null + modified: null + filter: + type: CAMPAIGN_FILTER + id: e0adaae69852e8fe8b8a3d48e5ce757c + sunsetCommentsRequired: true + sourceOwnerCampaignInfo: null + searchCampaignInfo: + type: ACCESS + description: Identities with reporting abilities + reviewerId: null + reviewer: null + query: "@access(name: (\"reporter\"))" + identityIds: null + accessConstraints: [ ] + roleCompositionCampaignInfo: null + alerts: null + totalCertifications: null + completedCertifications: null + sourcesWithOrphanEntitlements: null + id: null + name: Search Campaign Review + description: Review everyone's access to the reporting system. + deadline: null + type: SEARCH + status: null + emailNotificationEnabled: true + autoRevokeAllowed: false + recommendationsEnabled: false \ No newline at end of file diff --git a/static/idn-api/beta/schemas/campaign/examples/CampaignTemplateSourceOwner.yaml b/static/idn-api/beta/schemas/campaign/examples/CampaignTemplateSourceOwner.yaml new file mode 100644 index 000000000..5c4e31194 --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/CampaignTemplateSourceOwner.yaml @@ -0,0 +1,40 @@ +value: + id: b9f41bc69e7a4291b9de0630396d030d + name: AD Source Review + created: 2022-08-02T13:40:36.857Z + modified: null + description: A review of our AD source. + deadlineDuration: P1M + ownerRef: + email: support@testmail.identitysoon.com + type: IDENTITY + id: 7ec252acbd4245548bc25df22348cb75 + name: SailPoint Support + scheduled: false + campaign: + created: null + modified: null + filter: + type: CAMPAIGN_FILTER + id: e0adaae69852e8fe8b8a3d48e5ce757c + sunsetCommentsRequired: true + sourceOwnerCampaignInfo: + sourceIds: + - 2c918084707deba501709d45ce4e5569 + searchCampaignInfo: null + roleCompositionCampaignInfo: null + alerts: null + totalCertifications: null + completedCertifications: null + sourcesWithOrphanEntitlements: null + id: null + name: AD Source Review + description: Review everyone's access. + deadline: null + type: SOURCE_OWNER + status: null + emailNotificationEnabled: true + autoRevokeAllowed: false + recommendationsEnabled: false + + diff --git a/static/idn-api/beta/schemas/campaign/examples/CampaignTemplates.yaml b/static/idn-api/beta/schemas/campaign/examples/CampaignTemplates.yaml new file mode 100644 index 000000000..fbdebef16 --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/CampaignTemplates.yaml @@ -0,0 +1,157 @@ +- id: e7dbec99d49349c8951bd84f58a05120 + name: Manager Review + created: 2022-08-02T19:16:42.632Z + modified: null + description: A review of everyone's access by their manager. + deadlineDuration: P14D + ownerRef: + email: support@testmail.identitysoon.com + type: IDENTITY + id: 7ec252acbd4245548bc25df22348cb75 + name: SailPoint Support + scheduled: false + campaign: + created: null + modified: null + filter: + type: CAMPAIGN_FILTER + id: e0adaae69852e8fe8b8a3d48e5ce757c + sunsetCommentsRequired: true + sourceOwnerCampaignInfo: null + searchCampaignInfo: null + roleCompositionCampaignInfo: null + alerts: null + totalCertifications: null + completedCertifications: null + sourcesWithOrphanEntitlements: null + id: null + name: Manager Review + description: Review everyone's access. + deadline: null + type: MANAGER + status: null + emailNotificationEnabled: true + autoRevokeAllowed: false + recommendationsEnabled: false +- id: b7e6459eed5247ac8b98a5fed81fe27f + name: Reporting Access Review + created: 2022-07-28T19:19:40.035Z + modified: null + description: A review of everyone's access to the reporting system. + deadlineDuration: P14D + ownerRef: + email: support@testmail.identitysoon.com + type: IDENTITY + id: 7ec252acbd4245548bc25df22348cb75 + name: SailPoint Support + scheduled: false + campaign: + created: null + modified: null + filter: + type: CAMPAIGN_FILTER + id: e0adaae69852e8fe8b8a3d48e5ce757c + sunsetCommentsRequired: true + sourceOwnerCampaignInfo: null + searchCampaignInfo: + type: ACCESS + description: Identities with reporting abilities + reviewerId: null + reviewer: null + query: "@access(name: (\"reporter\"))" + identityIds: null + accessConstraints: [ ] + roleCompositionCampaignInfo: null + alerts: null + totalCertifications: null + completedCertifications: null + sourcesWithOrphanEntitlements: null + id: null + name: Search Campaign + description: Review everyone's access to the reporting system. + deadline: null + type: SEARCH + status: null + emailNotificationEnabled: true + autoRevokeAllowed: false + recommendationsEnabled: false +- id: b9f41bc69e7a4291b9de0630396d030d + name: Campaign With Admin Role + created: 2022-08-02T13:40:36.857Z + modified: null + description: Campaign With Admin Role + deadlineDuration: null + ownerRef: + email: support@testmail.identitysoon.com + type: IDENTITY + id: 7ec252acbd4245548bc25df22348cb75 + name: SailPoint Support + scheduled: false + campaign: + created: null + modified: null + filter: null + sunsetCommentsRequired: true + sourceOwnerCampaignInfo: null + searchCampaignInfo: null + roleCompositionCampaignInfo: + remediatorRef: + type: IDENTITY + id: 7ec252acbd4245548bc25df22348cb75 + name: SailPoint Support + reviewerId: null + reviewer: null + roleIds: + - b15d609fc5c8434b865fe552315fda8f + query: null + description: null + alerts: null + totalCertifications: null + completedCertifications: null + sourcesWithOrphanEntitlements: null + id: null + name: Campaign With Admin Role + description: Campaign With Admin Role + deadline: null + type: ROLE_COMPOSITION + status: null + emailNotificationEnabled: false + autoRevokeAllowed: false + recommendationsEnabled: false +- id: b9f41bc69e7a4291b9de0630396d030d + name: AD Source Review + created: 2022-08-02T13:40:36.857Z + modified: null + description: A review of our AD source. + deadlineDuration: P1M + ownerRef: + email: support@testmail.identitysoon.com + type: IDENTITY + id: 7ec252acbd4245548bc25df22348cb75 + name: SailPoint Support + scheduled: false + campaign: + created: null + modified: null + filter: + type: CAMPAIGN_FILTER + id: e0adaae69852e8fe8b8a3d48e5ce757c + sunsetCommentsRequired: true + sourceOwnerCampaignInfo: + sourceIds: + - 2c918084707deba501709d45ce4e5569 + searchCampaignInfo: null + roleCompositionCampaignInfo: null + alerts: null + totalCertifications: null + completedCertifications: null + sourcesWithOrphanEntitlements: null + id: null + name: AD Source Review + description: Review everyone's access. + deadline: null + type: SOURCE_OWNER + status: null + emailNotificationEnabled: true + autoRevokeAllowed: false + recommendationsEnabled: false \ No newline at end of file diff --git a/static/idn-api/beta/schemas/campaign/examples/CreateCampaignManager.yaml b/static/idn-api/beta/schemas/campaign/examples/CreateCampaignManager.yaml new file mode 100644 index 000000000..4a981bf13 --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/CreateCampaignManager.yaml @@ -0,0 +1,15 @@ +value: + name: Manager Review + description: A review of everyone's access by their manager. + deadline: 2020-12-25T06:00:00.468Z + type: MANAGER + emailNotificationEnabled: false + autoRevokeAllowed: false + recommendationsEnabled: false + filter: + type: CAMPAIGN_FILTER + id: 0c46fb26c6b20967a55517ee90d15b93 + + + + \ No newline at end of file diff --git a/static/idn-api/beta/schemas/campaign/examples/CreateCampaignRoleComposition.yaml b/static/idn-api/beta/schemas/campaign/examples/CreateCampaignRoleComposition.yaml new file mode 100644 index 000000000..38b79486a --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/CreateCampaignRoleComposition.yaml @@ -0,0 +1,19 @@ +value: + name: Role Composition Campaign + description: A review done by a role owner. + deadline: 2020-12-25T06:00:00.468Z + type: ROLE_COMPOSITION + emailNotificationEnabled: false + autoRevokeAllowed: false + recommendationsEnabled: false + filter: + type: CAMPAIGN_FILTER + id: 0c46fb26c6b20967a55517ee90d15b93 + roleCompositionCampaignInfo: + remediatorRef: + type: IDENTITY + id: 7ec252acbd4245548bc25df22348cb75 + name: SailPoint Support + roleIds: + - b15d609fc5c8434b865fe552315fda8f + diff --git a/static/idn-api/beta/schemas/campaign/examples/CreateCampaignSearch.yaml b/static/idn-api/beta/schemas/campaign/examples/CreateCampaignSearch.yaml new file mode 100644 index 000000000..1be9aaad2 --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/CreateCampaignSearch.yaml @@ -0,0 +1,15 @@ +value: + name: Search Campaign + description: Search Campaign + deadline: 2020-12-25T06:00:00.468Z + type: SEARCH + emailNotificationEnabled: false + autoRevokeAllowed: false + recommendationsEnabled: false + filter: + type: CAMPAIGN_FILTER + id: 0c46fb26c6b20967a55517ee90d15b93 + searchCampaignInfo: + type: ACCESS + query: user + diff --git a/static/idn-api/beta/schemas/campaign/examples/CreateCampaignSourceOwner.yaml b/static/idn-api/beta/schemas/campaign/examples/CreateCampaignSourceOwner.yaml new file mode 100644 index 000000000..06c034c97 --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/CreateCampaignSourceOwner.yaml @@ -0,0 +1,15 @@ +value: + name: Source Owner + description: Source Owner Info + deadline: 2020-12-25T06:00:00.468Z + type: SOURCE_OWNER + emailNotificationEnabled: false + autoRevokeAllowed: false + recommendationsEnabled: false + filter: + type: CAMPAIGN_FILTER + id: 0c46fb26c6b20967a55517ee90d15b93 + sourceOwnerCampaignInfo: + sourceIds: + - 612b31b1a0f04aaf83123bdb80e70db6 + diff --git a/static/idn-api/beta/schemas/campaign/examples/CreateCampaignTemplateManager.yaml b/static/idn-api/beta/schemas/campaign/examples/CreateCampaignTemplateManager.yaml new file mode 100644 index 000000000..e885f67d6 --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/CreateCampaignTemplateManager.yaml @@ -0,0 +1,18 @@ +description: >- + This creates a template that can be used to generate manager campaigns. The campaigns will have a due date + that is two weeks after their creation date, and will be named "{current date} Manager Review" (e.g. + "2020-03-16 Manager Review"). +value: + name: Manager Review + description: A review of everyone's access by their manager. + deadlineDuration: P2W + campaign: + name: Manager Review + description: Review everyone's access. + type: MANAGER + filter: + type: CAMPAIGN_FILTER + id: e0adaae69852e8fe8b8a3d48e5ce757c + emailNotificationEnabled: true + autoRevokeAllowed: false + recommendationsEnabled: false \ No newline at end of file diff --git a/static/idn-api/beta/schemas/campaign/examples/CreateCampaignTemplateRoleComposition.yaml b/static/idn-api/beta/schemas/campaign/examples/CreateCampaignTemplateRoleComposition.yaml new file mode 100644 index 000000000..df05a39bc --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/CreateCampaignTemplateRoleComposition.yaml @@ -0,0 +1,19 @@ +description: >- + This creates a template that can be used to generate role composition campaigns. The campaigns will + have a due date that is two weeks after their creation date, and will be named "{current date} Role + Composition Review" (e.g. "2020-03-16 Role Composition Review"). +value: + name: Role Composition Review + description: A review of every role's access items, by the specified reviewer. + deadlineDuration: P2W + campaign: + name: Role Composition Review + description: Review all our roles. + type: ROLE_COMPOSITION + roleCompositionCampaignInfo: + remediatorRef: + type: IDENTITY + id: 2c9180876ab2c053016ab6f65dfd5aaa + emailNotificationEnabled: true + autoRevokeAllowed: false + recommendationsEnabled: false \ No newline at end of file diff --git a/static/idn-api/beta/schemas/campaign/examples/CreateCampaignTemplateSearch.yaml b/static/idn-api/beta/schemas/campaign/examples/CreateCampaignTemplateSearch.yaml new file mode 100644 index 000000000..c85676b4f --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/CreateCampaignTemplateSearch.yaml @@ -0,0 +1,21 @@ +description: >- + This creates a template that can be used to generate search access campaigns. The campaigns + will cover the "reporter" access item for across all identities. +value: + name: Reporting Access Review + description: A review of everyone's access to the reporting system. + deadlineDuration: P2W + campaign: + name: Search Review + description: Review everyone's access to the reporting system. + type: SEARCH + filter: + type: CAMPAIGN_FILTER + id: e0adaae69852e8fe8b8a3d48e5ce757c + searchCampaignInfo: + type: ACCESS + query: "@access(name: (\"reporter\"))" + description: Identities with reporting abilities + emailNotificationEnabled: true + autoRevokeAllowed: false + recommendationsEnabled: false \ No newline at end of file diff --git a/static/idn-api/beta/schemas/campaign/examples/CreateCampaignTemplateSourceOwner.yaml b/static/idn-api/beta/schemas/campaign/examples/CreateCampaignTemplateSourceOwner.yaml new file mode 100644 index 000000000..2b0ead03a --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/CreateCampaignTemplateSourceOwner.yaml @@ -0,0 +1,20 @@ +description: >- + This creates a template that can be used to generate source owner campaigns. The campaigns will + have a due date that is one month after their creation date, and will review one source. +value: + name: AD Source Review + description: A review of our AD source. + deadlineDuration: P1M + campaign: + name: Source Review + description: Review everyone's access. + type: SOURCE_OWNER + filter: + type: CAMPAIGN_FILTER + id: e0adaae69852e8fe8b8a3d48e5ce757c + sourceOwnerCampaignInfo: + sourceIds: + - 2c918084707deba501709d45ce4e5569 + emailNotificationEnabled: true + autoRevokeAllowed: false + recommendationsEnabled: false \ No newline at end of file diff --git a/static/idn-api/beta/schemas/campaign/examples/FullCampaignManager.yaml b/static/idn-api/beta/schemas/campaign/examples/FullCampaignManager.yaml new file mode 100644 index 000000000..26733145b --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/FullCampaignManager.yaml @@ -0,0 +1,24 @@ +value: + id: 5594f43b76804a6980ece5fdccf74be7 + name: Manager Review + description: A review of everyone's access by their manager. + deadline: 2020-12-25T06:00:00.468Z + type: MANAGER + status: PENDING + emailNotificationEnabled: false + autoRevokeAllowed: false + recommendationsEnabled: false + created: 2022-08-02T20:21:18.421Z + modified: null + filter: + type: CAMPAIGN_FILTER + id: 0fbe863c063c4c88a35fd7f17e8a3df5 + sunsetCommentsRequired: true + sourceOwnerCampaignInfo: null + searchCampaignInfo: null + roleCompositionCampaignInfo: null + alerts: null + totalCertifications: 0 + completedCertifications: 0 + sourcesWithOrphanEntitlements: null + diff --git a/static/idn-api/beta/schemas/campaign/examples/FullCampaignRoleComposition.yaml b/static/idn-api/beta/schemas/campaign/examples/FullCampaignRoleComposition.yaml new file mode 100644 index 000000000..a89311975 --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/FullCampaignRoleComposition.yaml @@ -0,0 +1,34 @@ +value: + id: 3b2e2e5821e84127b6d693d41c40623b + name: Role Composition Campaign + description: A review done by a role owner. + deadline: 2020-12-25T06:00:00.468Z + type: ROLE_COMPOSITION + status: PENDING + emailNotificationEnabled: false + autoRevokeAllowed: false + recommendationsEnabled: false + created: 2022-08-02T20:30:46.083Z + modified: null + filter: + type: CAMPAIGN_FILTER + id: 0fbe863c063c4c88a35fd7f17e8a3df5 + sunsetCommentsRequired: true + sourceOwnerCampaignInfo: null + searchCampaignInfo: null + roleCompositionCampaignInfo: + remediatorRef: + type: IDENTITY + id: 7ec252acbd4245548bc25df22348cb75 + name: SailPoint Support + reviewerId: null + reviewer: null + roleIds: + - b15d609fc5c8434b865fe552315fda8f + query: null + description: null + alerts: null + totalCertifications: 0 + completedCertifications: 0 + sourcesWithOrphanEntitlements: null + \ No newline at end of file diff --git a/static/idn-api/beta/schemas/campaign/examples/FullCampaignSearch.yaml b/static/idn-api/beta/schemas/campaign/examples/FullCampaignSearch.yaml new file mode 100644 index 000000000..39b785ca5 --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/FullCampaignSearch.yaml @@ -0,0 +1,32 @@ +value: + id: ec041831cb2147778b594feb9d8db44a + name: Search Campaign + description: Search Campaign + deadline: 2020-12-25T06:00:00.468Z + type: SEARCH + status: PENDING + emailNotificationEnabled: false + autoRevokeAllowed: false + recommendationsEnabled: false + created: 2022-08-03T13:54:34.344Z + modified: null + filter: + type: CAMPAIGN_FILTER + id: 0fbe863c063c4c88a35fd7f17e8a3df5 + sunsetCommentsRequired: true + sourceOwnerCampaignInfo: null + searchCampaignInfo: + type: ACCESS + description: user + reviewer: + type: IDENTITY + id: 7ec252acbd4245548bc25df22348cb75 + name: null + query: user + identityIds: null + accessConstraints: [] + roleCompositionCampaignInfo: null + alerts: null + totalCertifications: 0 + completedCertifications: 0 + sourcesWithOrphanEntitlements: null diff --git a/static/idn-api/beta/schemas/campaign/examples/FullCampaignSourceOwner.yaml b/static/idn-api/beta/schemas/campaign/examples/FullCampaignSourceOwner.yaml new file mode 100644 index 000000000..4c35ee2ed --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/FullCampaignSourceOwner.yaml @@ -0,0 +1,26 @@ +value: + id: fd7b76ba4ea042de8a9414aa12fc977a + name: Source Owner + description: Source Owner Info + deadline: 2020-12-25T06:00:00.468Z + type: SOURCE_OWNER + status: PENDING + emailNotificationEnabled: false + autoRevokeAllowed: false + recommendationsEnabled: false + created: 2022-08-03T13:34:19.541Z + modified: null + filter: + type: CAMPAIGN_FILTER + id: 0fbe863c063c4c88a35fd7f17e8a3df5 + sunsetCommentsRequired: true + sourceOwnerCampaignInfo: + sourceIds: + - 612b31b1a0f04aaf83123bdb80e70db6 + searchCampaignInfo: null + roleCompositionCampaignInfo: null + alerts: null + totalCertifications: 0 + completedCertifications: 0 + sourcesWithOrphanEntitlements: null + \ No newline at end of file diff --git a/static/idn-api/beta/schemas/campaign/examples/FullCampaigns.yaml b/static/idn-api/beta/schemas/campaign/examples/FullCampaigns.yaml new file mode 100644 index 000000000..8e3bbd716 --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/FullCampaigns.yaml @@ -0,0 +1,116 @@ +description: List of Campaigns that would result from specifying *detail* as FULL +value: + - id: 078696a575e045c68d6722ccdb9f101d + name: Role Composition Campaign + description: A review done by a role owner. + deadline: 2020-12-25T06:00:00.468Z + type: ROLE_COMPOSITION + status: ERROR + emailNotificationEnabled: false + autoRevokeAllowed: false + recommendationsEnabled: false + created: 2022-08-02T20:29:51.065Z + modified: 2022-08-02T20:29:51.331Z + filter: + type: CAMPAIGN_FILTER + id: 0fbe863c063c4c88a35fd7f17e8a3df5 + sunsetCommentsRequired: true + sourceOwnerCampaignInfo: null + searchCampaignInfo: null + roleCompositionCampaignInfo: + remediatorRef: + type: IDENTITY + id: 7ec252acbd4245548bc25df22348cb75 + name: SailPoint Support + reviewerId: null + reviewer: null + roleIds: + - b15d609fc5c8434b865fe552315fda8f + query: null + description: null + alerts: + - level: ERROR + localizations: + - locale: en + localeOrigin: DEFAULT + text: Composite criterion must have children non-composite criterion must not. + totalCertifications: 0 + completedCertifications: 0 + sourcesWithOrphanEntitlements: null + - id: 1be8fc1103914bf0a4e14e316b6a7b7c + name: Manager Review + description: A review of everyone's access by their manager. + deadline: 2020-12-25T06:00:00.468Z + type: MANAGER + status: STAGED + emailNotificationEnabled: false + autoRevokeAllowed: false + recommendationsEnabled: false + created: 2022-08-02T19:00:27.731Z + modified: 2022-08-02T19:00:34.391Z + filter: + type: CAMPAIGN_FILTER + id: 0fbe863c063c4c88a35fd7f17e8a3df5 + sunsetCommentsRequired: true + sourceOwnerCampaignInfo: null + searchCampaignInfo: null + roleCompositionCampaignInfo: null + alerts: null + totalCertifications: 5 + completedCertifications: 0 + sourcesWithOrphanEntitlements: [] + - id: 7e1a731e3fb845cfbe58112ba4673ee4 + name: Search Campaign + description: Search Campaign for Identities + deadline: 2022-07-26T15:42:44Z + type: SEARCH + status: ACTIVE + emailNotificationEnabled: false + autoRevokeAllowed: false + recommendationsEnabled: false + created: 2022-07-25T15:42:18.276Z + modified: 2022-07-25T15:42:53.718Z + filter: + type: CAMPAIGN_FILTER + id: 0fbe863c063c4c88a35fd7f17e8a3df5 + sunsetCommentsRequired: true + sourceOwnerCampaignInfo: null + searchCampaignInfo: + type: IDENTITY + description: Example of Search Campaign + reviewer: + type: IDENTITY + id: 7ec252acbd4245548bc25df22348cb75 + name: null + query: user + identityIds: null + accessConstraints: [] + roleCompositionCampaignInfo: null + alerts: null + totalCertifications: 6 + completedCertifications: 0 + sourcesWithOrphanEntitlements: [] + - id: ad3cf3dd50394b1bad646de4bc51b999 + name: Source Owner Campaign + description: Example for Source Owner Campaign + deadline: 2022-08-10T17:09:02Z + type: SOURCE_OWNER + status: ACTIVE + emailNotificationEnabled: true + autoRevokeAllowed: false + recommendationsEnabled: false + created: 2022-07-27T17:04:19.027Z + modified: 2022-07-27T17:09:13.925Z + filter: + type: CAMPAIGN_FILTER + id: 0fbe863c063c4c88a35fd7f17e8a3df5 + sunsetCommentsRequired: true + sourceOwnerCampaignInfo: + sourceIds: + - 2c91808781fd5aea01821200dc88318e + searchCampaignInfo: null + roleCompositionCampaignInfo: null + alerts: null + totalCertifications: 2 + completedCertifications: 0 + sourcesWithOrphanEntitlements: [] \ No newline at end of file diff --git a/static/idn-api/beta/schemas/campaign/examples/SlimCampaignManager.yaml b/static/idn-api/beta/schemas/campaign/examples/SlimCampaignManager.yaml new file mode 100644 index 000000000..fe68e641e --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/SlimCampaignManager.yaml @@ -0,0 +1,10 @@ +value: + id: 2c918086719eec070171a7e3355a360a + name: Manager Review + description: A review of everyone's access by their manager. + deadline: "2020-12-25T06:00:00.123Z" + type: MANAGER + status: ACTIVE + emailNotificationEnabled: false + autoRevokeAllowed: false + recommendationsEnabled: false \ No newline at end of file diff --git a/static/idn-api/beta/schemas/campaign/examples/SlimCampaignRoleComposition.yaml b/static/idn-api/beta/schemas/campaign/examples/SlimCampaignRoleComposition.yaml new file mode 100644 index 000000000..92295db87 --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/SlimCampaignRoleComposition.yaml @@ -0,0 +1,10 @@ +value: + id: 3b2e2e5821e84127b6d693d41c40623b + name: Role Composition Campaign + description: A review done by a role owner. + deadline: 2020-12-25T06:00:00.468Z + type: ROLE_COMPOSITION + status: ACTIVE + emailNotificationEnabled: false + autoRevokeAllowed: false + recommendationsEnabled: false diff --git a/static/idn-api/beta/schemas/campaign/examples/SlimCampaignSearch.yaml b/static/idn-api/beta/schemas/campaign/examples/SlimCampaignSearch.yaml new file mode 100644 index 000000000..d4f09d480 --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/SlimCampaignSearch.yaml @@ -0,0 +1,10 @@ +value: + id: 7e1a731e3fb845cfbe58112ba4673ee4 + name: Search Campaign + description: Search Campaign Info + deadline: 2022-07-26T15:42:44Z + type: SEARCH + status: ACTIVE + emailNotificationEnabled: false + autoRevokeAllowed: false + recommendationsEnabled: false \ No newline at end of file diff --git a/static/idn-api/beta/schemas/campaign/examples/SlimCampaignSourceOwner.yaml b/static/idn-api/beta/schemas/campaign/examples/SlimCampaignSourceOwner.yaml new file mode 100644 index 000000000..7d7a46cd7 --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/SlimCampaignSourceOwner.yaml @@ -0,0 +1,10 @@ +value: + id: 2c918086719eec070171a7e3355a412b + name: AD Source Review + description: A review of our AD source. + deadline: "2020-12-25T06:00:00.123Z" + type: SOURCE_OWNER + status: STAGED + emailNotificationEnabled: true + autoRevokeAllowed: false + recommendationsEnabled: false \ No newline at end of file diff --git a/static/idn-api/beta/schemas/campaign/examples/SlimCampaigns.yaml b/static/idn-api/beta/schemas/campaign/examples/SlimCampaigns.yaml new file mode 100644 index 000000000..b9759a7f8 --- /dev/null +++ b/static/idn-api/beta/schemas/campaign/examples/SlimCampaigns.yaml @@ -0,0 +1,38 @@ +description: List of Slim Campaigns that would result from not specifying *detail* or specifying SLIM +value: + - id: 2c918086719eec070171a7e3355a360a + name: Manager Review + description: A review of everyone's access by their manager. + deadline: "2020-12-25T06:00:00.123Z" + type: MANAGER + status: ACTIVE + emailNotificationEnabled: false + autoRevokeAllowed: false + recommendationsEnabled: false + - id: 7e1a731e3fb845cfbe58112ba4673ee4 + name: Search Campaign + description: Search Campaign Info + deadline: 2022-07-26T15:42:44Z + type: SEARCH + status: ACTIVE + emailNotificationEnabled: false + autoRevokeAllowed: false + recommendationsEnabled: false + - id: 2c918086719eec070171a7e3355a412b + name: AD Source Review + description: A review of our AD source. + deadline: "2020-12-25T06:00:00.123Z" + type: SOURCE_OWNER + status: STAGED + emailNotificationEnabled: true + autoRevokeAllowed: false + recommendationsEnabled: false + - id: 3b2e2e5821e84127b6d693d41c40623b + name: Role Composition Campaign + description: A review done by a role owner. + deadline: 2020-12-25T06:00:00.468Z + type: ROLE_COMPOSITION + status: ACTIVE + emailNotificationEnabled: false + autoRevokeAllowed: false + recommendationsEnabled: false \ No newline at end of file diff --git a/static/idn-api/beta/schemas/iai/EntityCreatedByDTO.yaml b/static/idn-api/beta/schemas/iai/EntityCreatedByDTO.yaml new file mode 100644 index 000000000..e0488abe4 --- /dev/null +++ b/static/idn-api/beta/schemas/iai/EntityCreatedByDTO.yaml @@ -0,0 +1,10 @@ +type: object +properties: + id: + type: string + description: ID of the creator + example: "2c918090761a5aac0176215c46a62d58" + displayName: + type: string + description: The display name of the creator + example: "Ashley.Pierce" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/iai/RoleMiningRoleType.yaml b/static/idn-api/beta/schemas/iai/RoleMiningRoleType.yaml new file mode 100644 index 000000000..d87af33c8 --- /dev/null +++ b/static/idn-api/beta/schemas/iai/RoleMiningRoleType.yaml @@ -0,0 +1,6 @@ +type: string +description: Role type +enum: + - SPECIALIZED + - COMMON +example: SPECIALIZED \ No newline at end of file diff --git a/static/idn-api/beta/schemas/sod/examples/exception-body-bulk.yaml b/static/idn-api/beta/schemas/sod/examples/exception-body-bulk.yaml new file mode 100644 index 000000000..b8788c402 --- /dev/null +++ b/static/idn-api/beta/schemas/sod/examples/exception-body-bulk.yaml @@ -0,0 +1,54 @@ +summary: Exception List +value: + { + "exceptions": + [ + { + "id": null, + "created": null, + "modified": null, + "sodPolicy": { + "type": "SOD_POLICY", + "id": "00fc6afc-af1d-43af-b350-8d632f4c56ca" + }, + "identity": { + "type": "IDENTITY", + "id": "2c9180867473c1bd01747e8a7d65179b" + }, + "start": "2020-01-01T00:00:00.000Z", + "end": "2020-01-02T00:00:00.000Z", + "businessJustification": "Bob (the accountant) is on vacation, Bill needs access to accounting data this week.", + "mitigatingControl": "The manager will audit Bill's changes this week.", + "accessCriteria": { + "leftCriteria": { + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a66" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a67" + } + ] + }, + "rightCriteria": { + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a68" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a69" + } + ] + } + }, + "origin": { + "type": "ACCOUNT_ACTIVITY", + "id": "2c9180867372a2590173774358eb016d" + } + } + ] + } diff --git a/static/idn-api/beta/schemas/sod/examples/exception-body-patch.yaml b/static/idn-api/beta/schemas/sod/examples/exception-body-patch.yaml new file mode 100644 index 000000000..7c490902d --- /dev/null +++ b/static/idn-api/beta/schemas/sod/examples/exception-body-patch.yaml @@ -0,0 +1,10 @@ +value: + - op: "replace" + path: "/sodPolicy/id" + value: "c61499ae-6912-4fb5-b216-a97eb6781105" + - op: "replace" + path: "/mitigatingControl" + value: "Modified mitigating control" + - op: "replace" + path: "/end" + value: "2020-01-03T00:00:00.000Z" diff --git a/static/idn-api/beta/schemas/sod/examples/exception-body.yaml b/static/idn-api/beta/schemas/sod/examples/exception-body.yaml new file mode 100644 index 000000000..2429879f9 --- /dev/null +++ b/static/idn-api/beta/schemas/sod/examples/exception-body.yaml @@ -0,0 +1,49 @@ +summary: Exception +value: + { + "id": null, + "created": null, + "modified": null, + "sodPolicy": { + "type": "SOD_POLICY", + "id": "00fc6afc-af1d-43af-b350-8d632f4c56ca" + }, + "identity": { + "type": "IDENTITY", + "id": "2c9180867473c1bd01747e8a7d65179b" + }, + "start": "2020-01-01T00:00:00.000Z", + "end": "2020-01-02T00:00:00.000Z", + "businessJustification": "Bob (the accountant) is on vacation, Bill needs access to accounting data this week.", + "mitigatingControl": "The manager will audit Bill's changes this week.", + "accessCriteria": { + "leftCriteria": { + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a66" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a67" + } + ] + }, + "rightCriteria": { + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a68" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a69" + } + ] + } + }, + "origin": { + "type": "ACCOUNT_ACTIVITY", + "id": "2c9180867372a2590173774358eb016d" + } + } diff --git a/static/idn-api/beta/schemas/sod/examples/exception-response-bulk.yaml b/static/idn-api/beta/schemas/sod/examples/exception-response-bulk.yaml new file mode 100644 index 000000000..9aa1e2098 --- /dev/null +++ b/static/idn-api/beta/schemas/sod/examples/exception-response-bulk.yaml @@ -0,0 +1,5 @@ +summary: Accepted exception list +value: + { + "exceptionCount": "5" + } \ No newline at end of file diff --git a/static/idn-api/beta/schemas/sod/examples/exception-response.yaml b/static/idn-api/beta/schemas/sod/examples/exception-response.yaml new file mode 100644 index 000000000..d372ca475 --- /dev/null +++ b/static/idn-api/beta/schemas/sod/examples/exception-response.yaml @@ -0,0 +1,49 @@ +summary: Exception +value: + { + "id": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "created": "2020-01-01T00:00:00.000000Z", + "modified": "2020-01-01T00:00:00.000000Z", + "sodPolicy": { + "type": "SOD_POLICY", + "id": "00fc6afc-af1d-43af-b350-8d632f4c56ca" + }, + "identity": { + "type": "IDENTITY", + "id": "2c9180867473c1bd01747e8a7d65179b" + }, + "start": "2020-01-01T00:00:00.000Z", + "end": "2020-01-02T00:00:00.000Z", + "businessJustification": "Bob (the accountant) is on vacation, Bill needs access to accounting data this week.", + "mitigatingControl": "The manager will audit Bill's changes this week.", + "accessCriteria": { + "leftCriteria": { + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a66" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a67" + } + ] + }, + "rightCriteria": { + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a68" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a69" + } + ] + } + }, + "origin": { + "type": "ACCOUNT_ACTIVITY", + "id": "2c9180867372a2590173774358eb016d" + } + } diff --git a/static/idn-api/beta/schemas/sod/models/ArmRisk.yaml b/static/idn-api/beta/schemas/sod/models/ArmRisk.yaml new file mode 100644 index 000000000..311a27cbb --- /dev/null +++ b/static/idn-api/beta/schemas/sod/models/ArmRisk.yaml @@ -0,0 +1,48 @@ +description: An object containing the details of an ARM risk listing of the SOD violation reasons detected by this check. +type: object +properties: + name: + type: string + description: Risk Name + example: "BS02_RISK" + description: + type: string + description: Description + example: "This is a description of risk code BS02" + owners: + type: array + items: + type: string + description: List of risk owners' SAP usernames + example: [] + externalReference: + type: string + description: URL to "what if" details in ARM + example: https://webui-dev.erpmaestro.com/home/what-if-report/100000 + rating: + type: string + description: Risk Rating + example: "Informational" + businessFunctions: + type: object + description: A map from business function codes to "Left side" or "Right side" + additionalProperties: + type: string + example: + BS02_01: Left side + BS02_02: Right side + approvers: + type: array + items: + type: string + description: List of risk approvers' SAP usernames + example: + - JOE USER + mitigatingControls: + type: string + description: What was done to mitigate risks + example: Required two levels of verification + correctionAdvice: + type: string + description: Recommendation on how to resolve risk + example: Run a certification campaign and determine if access should be revoked diff --git a/static/idn-api/beta/schemas/sod/models/BulkCreate.yaml b/static/idn-api/beta/schemas/sod/models/BulkCreate.yaml new file mode 100644 index 000000000..b7b5ca5d1 --- /dev/null +++ b/static/idn-api/beta/schemas/sod/models/BulkCreate.yaml @@ -0,0 +1,6 @@ +type: object +properties: + exceptionCount: + type: string + nullable: false + example: "5" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/sod/models/Exception.yaml b/static/idn-api/beta/schemas/sod/models/Exception.yaml new file mode 100644 index 000000000..ab4143ebf --- /dev/null +++ b/static/idn-api/beta/schemas/sod/models/Exception.yaml @@ -0,0 +1,46 @@ +type: object +properties: + id: + type: string + nullable: true + example: "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde" + created: + type: string + nullable: true + format: date-time + description: The time when this SOD exception is created. + example: "2020-01-01T00:00:00.000Z" + modified: + type: string + nullable: true + format: date-time + description: The time when this SOD exception is modified. + example: "2020-01-01T00:00:00.000Z" + sodPolicy: + $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + example: "00fc6afc-af1d-43af-b350-8d632f4c56ca" + identity: + $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + start: + type: string + format: date-time + description: The earliest date-time when this SOD exception is applicable. + example: "2020-01-01T00:00:00.000Z" + end: + type: string + format: date-time + description: The last date-time when this SOD exception is applicable. + example: "2020-01-02T00:00:00.000Z" + businessJustification: + type: string + description: The business justification for the exception. + example: "Bob (the accountant) is on vacation, Bill needs access to accounting data this week." + mitigatingControl: + type: string + description: The mitigating control for the exception. + example: "The manager will audit Bill's changes this week." + accessCriteria: + $ref: './ExceptionAccessCriteria.yaml' + nullable: false + origin: + $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/sod/models/ExceptionAccessCriteria.yaml b/static/idn-api/beta/schemas/sod/models/ExceptionAccessCriteria.yaml new file mode 100644 index 000000000..25cbaca8f --- /dev/null +++ b/static/idn-api/beta/schemas/sod/models/ExceptionAccessCriteria.yaml @@ -0,0 +1,6 @@ +type: object +properties: + leftCriteria: + $ref: './ExceptionCriteria.yaml' + rightCriteria: + $ref: './ExceptionCriteria.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/sod/models/ExceptionCriteria.yaml b/static/idn-api/beta/schemas/sod/models/ExceptionCriteria.yaml new file mode 100644 index 000000000..b0dfb58ca --- /dev/null +++ b/static/idn-api/beta/schemas/sod/models/ExceptionCriteria.yaml @@ -0,0 +1,30 @@ +type: object +properties: + criteriaList: + type: array + description: List of exception criteria. There is a min of 1 and max of 50 items in the list. + items: + allOf: + - $ref: './ExceptionCriteriaAccess.yaml' + description: The types of objects supported for SOD violations + properties: + type: + enum: + - "ENTITLEMENT" + example: "ENTITLEMENT" + description: The type of object that is referenced + # oneOf: + # - minItems: 1 + # - maxItems: 50 + example: [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a66", + "existing": true + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a67", + "existing": false + } + ] \ No newline at end of file diff --git a/static/idn-api/beta/schemas/sod/models/ExceptionCriteriaAccess.yaml b/static/idn-api/beta/schemas/sod/models/ExceptionCriteriaAccess.yaml new file mode 100644 index 000000000..31a5957a3 --- /dev/null +++ b/static/idn-api/beta/schemas/sod/models/ExceptionCriteriaAccess.yaml @@ -0,0 +1,20 @@ +type: object +properties: + type: + $ref: '../../../../v3/schemas/DtoType.yaml' + description: DTO type + id: + type: string + description: ID of the object to which this reference applies + example: 2c91808568c529c60168cca6f90c1313 + name: + type: string + description: Human-readable display name of the object to which this reference applies + example: CN=HelpDesk,OU=test,OU=test-service,DC=TestAD,DC=local + existing: + type: boolean + description: Whether the subject identity already had that access or not + example: true +description: >- + Access reference with addition of boolean existing flag to indicate whether the access was extant + diff --git a/static/idn-api/beta/schemas/sod/models/ExceptionList.yaml b/static/idn-api/beta/schemas/sod/models/ExceptionList.yaml new file mode 100644 index 000000000..7bb86251d --- /dev/null +++ b/static/idn-api/beta/schemas/sod/models/ExceptionList.yaml @@ -0,0 +1,7 @@ +type: object +properties: + exceptions: + type: array + description: List of exceptions. + items: + $ref: './Exception.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/sod/models/IdentityWithNewAccess.yaml b/static/idn-api/beta/schemas/sod/models/IdentityWithNewAccess.yaml new file mode 100644 index 000000000..931111532 --- /dev/null +++ b/static/idn-api/beta/schemas/sod/models/IdentityWithNewAccess.yaml @@ -0,0 +1,30 @@ +description: An identity with a set of access to be added +required: + - identityId + - accessRefs +type: object +properties: + identityId: + description: Identity id to be checked. + type: string + example: 2c91808568c529c60168cca6f90c1313 + accessRefs: + description: The list of ENTITLEMENTs to consider for calculating possible violations in a preventive check. + type: array + items: + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: The types of objects supported for SOD violations + properties: + type: + enum: + - "ENTITLEMENT" + example: "ENTITLEMENT" + description: The type of object that is referenced + example: + - type: ENTITLEMENT + id: 2c918087682f9a86016839c050861ab1 + name: CN=Information Access,OU=test,OU=test-service,DC=TestAD,DC=local + - type: ENTITLEMENT + id: 2c918087682f9a86016839c0509c1ab2 + name: CN=Information Technology,OU=test,OU=test-service,DC=TestAD,DC=local diff --git a/static/idn-api/beta/schemas/sod/models/ViolationContext.yaml b/static/idn-api/beta/schemas/sod/models/ViolationContext.yaml new file mode 100644 index 000000000..44a4ec75b --- /dev/null +++ b/static/idn-api/beta/schemas/sod/models/ViolationContext.yaml @@ -0,0 +1,23 @@ +type: object +properties: + policy: + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + - type: object + properties: + type: + type: string + example: 'SOD_POLICY' + name: + type: string + example: 'A very cool policy name' + description: The types of objects supported for SOD violations + properties: + type: + enum: + - "ENTITLEMENT" + example: "ENTITLEMENT" + description: The type of object that is referenced + conflictingAccessCriteria: + $ref: './ExceptionAccessCriteria.yaml' + nullable: false diff --git a/static/idn-api/beta/schemas/sod/models/ViolationPrediction.yaml b/static/idn-api/beta/schemas/sod/models/ViolationPrediction.yaml new file mode 100644 index 000000000..b34a15de5 --- /dev/null +++ b/static/idn-api/beta/schemas/sod/models/ViolationPrediction.yaml @@ -0,0 +1,10 @@ +description: An object containing a listing of the SOD violation reasons detected by this check. +required: + - requestId +type: object +properties: + violationContexts: + type: array + description: List of Violation Contexts + items: + $ref: './ViolationContext.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/sod/responses/200-list.yaml b/static/idn-api/beta/schemas/sod/responses/200-list.yaml new file mode 100644 index 000000000..5daa4c789 --- /dev/null +++ b/static/idn-api/beta/schemas/sod/responses/200-list.yaml @@ -0,0 +1,57 @@ +description: List of all SOD Exceptions. +content: + application/json: + schema: + type: array + items: + $ref: '../models/Exception.yaml' + example: + [ + { + "id": "0f11f2a4-7c94-4bf3-a2bd-742580fe3bde", + "created": "2020-01-01T00:00:00.000000Z", + "modified": "2020-01-01T00:00:00.000000Z", + "sodPolicy": { + "type": "SOD_POLICY", + "id": "00fc6afc-af1d-43af-b350-8d632f4c56ca" + }, + "identity": { + "type": "IDENTITY", + "id": "2c9180867473c1bd01747e8a7d65179b" + }, + "start": "2020-01-01T00:00:00.000Z", + "end": "2020-01-02T00:00:00.000Z", + "businessJustification": "Bob (the accountant) is on vacation, Bill needs access to accounting data this week.", + "mitigatingControl": "The manager will audit Bill's changes this week.", + "accessCriteria": { + "leftCriteria": { + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a66" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a67" + } + ] + }, + "rightCriteria": { + "criteriaList": [ + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a68" + }, + { + "type": "ENTITLEMENT", + "id": "2c9180866166b5b0016167c32ef31a69" + } + ] + } + }, + "origin": { + "type": "ACCOUNT_ACTIVITY", + "id": "2c9180867372a2590173774358eb016d" + } + } + ] \ No newline at end of file diff --git a/static/idn-api/beta/schemas/sod/responses/200-patch.yaml b/static/idn-api/beta/schemas/sod/responses/200-patch.yaml new file mode 100644 index 000000000..89b8cbfda --- /dev/null +++ b/static/idn-api/beta/schemas/sod/responses/200-patch.yaml @@ -0,0 +1,8 @@ +description: Indicates the PATCH operation succeeded, and returns the SOD exception's new representation. +content: + application/json: + schema: + $ref: '../models/Exception.yaml' + examples: + SOD Exception: + $ref: '../examples/exception-response.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/sod/responses/200.yaml b/static/idn-api/beta/schemas/sod/responses/200.yaml new file mode 100644 index 000000000..b907e5a20 --- /dev/null +++ b/static/idn-api/beta/schemas/sod/responses/200.yaml @@ -0,0 +1,8 @@ +description: SOD exception by ID. +content: + application/json: + schema: + $ref: '../models/Exception.yaml' + examples: + SOD Exception: + $ref: '../examples/exception-response.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/sod/responses/201.yaml b/static/idn-api/beta/schemas/sod/responses/201.yaml new file mode 100644 index 000000000..401319b85 --- /dev/null +++ b/static/idn-api/beta/schemas/sod/responses/201.yaml @@ -0,0 +1,8 @@ +description: SOD exception created +content: + application/json: + schema: + $ref: '../models/Exception.yaml' + examples: + SOD Exception: + $ref: '../examples/exception-response.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/sod/responses/202.yaml b/static/idn-api/beta/schemas/sod/responses/202.yaml new file mode 100644 index 000000000..f41ea46fa --- /dev/null +++ b/static/idn-api/beta/schemas/sod/responses/202.yaml @@ -0,0 +1,8 @@ +description: Bulk create SOD exception accepted +content: + application/json: + schema: + $ref: '../models/BulkCreate.yaml' + examples: + SOD Exception: + $ref: '../examples/exception-response-bulk.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/AccessRequestDynamicApprover.yaml b/static/idn-api/beta/schemas/trigger/example-input/AccessRequestDynamicApprover.yaml new file mode 100644 index 000000000..1d95b69e4 --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/AccessRequestDynamicApprover.yaml @@ -0,0 +1,75 @@ +title: Access Request Dynamic Approver +type: object +required: +- accessRequestId +- requestedFor +- requestedItems +- requestedBy +properties: + accessRequestId: + type: string + description: | + The unique ID of the access request object. Can be used with the [access request status endpoint](https://developer.sailpoint.com/apis/beta/#operation/listAccessRequestStatus) to get the status of the request. + example: 4b4d982dddff4267ab12f0f1e72b5a6d + requestedFor: + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: The identity for whom the access is requested for. + properties: + type: + enum: + - "IDENTITY" + example: "IDENTITY" + description: The type of object that is referenced + requestedItems: + description: The access items that are being requested. + type: array + items: + type: object + required: + - id + - name + - type + - operation + properties: + id: + type: string + description: The unique ID of the access item. + example: 2c91808b6ef1d43e016efba0ce470904 + name: + type: string + description: Human friendly name of the access item. + example: Engineering Access + description: + nullable: true + type: string + description: Extended description of the access item. + example: Engineering Access + type: + enum: + - ACCESS_PROFILE + - ROLE + - ENTITLEMENT + description: The type of access item being requested. + example: ACCESS_PROFILE + operation: + enum: + - Add + - Remove + description: Grant or revoke the access item + example: Add + comment: + nullable: true + type: string + description: A comment from the requestor on why the access is needed. + example: William needs this access for his day to day job activities. + requestedBy: + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: The identity that initiated the access request. + properties: + type: + enum: + - "IDENTITY" + example: "IDENTITY" + description: The type of object that is referenced \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/AccessRequestPostApproval.yaml b/static/idn-api/beta/schemas/trigger/example-input/AccessRequestPostApproval.yaml new file mode 100644 index 000000000..6b1197f06 --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/AccessRequestPostApproval.yaml @@ -0,0 +1,129 @@ +title: Access Request Post Approval +type: object +required: +- accessRequestId +- requestedFor +- requestedItemsStatus +- requestedBy +properties: + accessRequestId: + type: string + description: The unique ID of the access request. + example: 2c91808b6ef1d43e016efba0ce470904 + requestedFor: + required: + - id + - type + - name + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: The identity who the access request is for. + properties: + type: + enum: + - "IDENTITY" + example: "IDENTITY" + description: The type of object that is referenced + requestedItemsStatus: + description: Details on the outcome of each access item. + type: array + items: + type: object + required: + - id + - name + - type + - operation + - approvalInfo + properties: + id: + type: string + description: The unique ID of the access item being requested. + example: 2c91808b6ef1d43e016efba0ce470904 + name: + type: string + description: The human friendly name of the access item. + example: Engineering Access + description: + nullable: true + type: string + description: Detailed description of the access item. + example: Access to engineering database + type: + enum: + - ACCESS_PROFILE + - ROLE + - ENTITLEMENT + description: The type of access item. + example: ACCESS_PROFILE + operation: + enum: + - Add + - Remove + description: The action to perform on the access item. + example: Add + comment: + nullable: true + type: string + description: A comment from the identity requesting the access. + example: William needs this access to do his job. + clientMetadata: + description: Additional customer defined metadata about the access item. + nullable: true + type: object + additionalProperties: true + example: + applicationName: My application + approvalInfo: + description: A list of one or more approvers for the access request. + type: array + items: + type: object + required: + - approvalDecision + - approverName + - approver + properties: + approvalComment: + nullable: true + type: string + description: A comment left by the approver. + example: "This access looks good. Approved." + approvalDecision: + enum: + - APPROVED + - DENIED + description: The final decision of the approver. + example: APPROVED + approverName: + type: string + description: The name of the approver + example: Stephen.Austin + approver: + required: + - id + - type + - name + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: The identity of the approver. + properties: + type: + enum: + - "IDENTITY" + example: "IDENTITY" + description: The type of object that is referenced + requestedBy: + required: + - id + - type + - name + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: The identity that initiated the access request. + properties: + type: + enum: + - "IDENTITY" + example: "IDENTITY" + description: The type of object that is referenced \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/AccessRequestPreApproval.yaml b/static/idn-api/beta/schemas/trigger/example-input/AccessRequestPreApproval.yaml new file mode 100644 index 000000000..0cf27d3de --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/AccessRequestPreApproval.yaml @@ -0,0 +1,82 @@ +title: Access Request Pre Approval +type: object +required: +- accessRequestId +- requestedFor +- requestedItems +- requestedBy +properties: + accessRequestId: + type: string + description: The unique ID of the access request. + example: 2c91808b6ef1d43e016efba0ce470904 + requestedFor: + required: + - id + - type + - name + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: The identity who the access request is for. + properties: + type: + enum: + - "IDENTITY" + example: "IDENTITY" + description: The type of object that is referenced + requestedItems: + description: Details of the access items being requested. + type: array + items: + type: object + required: + - id + - name + - type + - operation + properties: + id: + type: string + description: The unique ID of the access item being requested. + example: 2c91808b6ef1d43e016efba0ce470904 + name: + type: string + description: The human friendly name of the access item. + example: Engineering Access + description: + nullable: true + type: string + description: Detailed description of the access item. + example: Access to engineering database + type: + enum: + - ACCESS_PROFILE + - ROLE + - ENTITLEMENT + description: The type of access item. + example: ACCESS_PROFILE + operation: + enum: + - Add + - Remove + description: The action to perform on the access item. + example: Add + comment: + nullable: true + type: string + description: A comment from the identity requesting the access. + example: William needs this access to do his job. + requestedBy: + required: + - id + - type + - name + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: The identity that initiated the access request. + properties: + type: + enum: + - "IDENTITY" + example: "IDENTITY" + description: The type of object that is referenced \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/AccountAggregationCompleted.yaml b/static/idn-api/beta/schemas/trigger/example-input/AccountAggregationCompleted.yaml new file mode 100644 index 000000000..f1f70e81c --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/AccountAggregationCompleted.yaml @@ -0,0 +1,103 @@ +title: Account Aggregation Completed +type: object +required: +- source +- status +- started +- completed +- errors +- warnings +- stats +properties: + source: + required: + - type + - name + - id + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: The source from which the accounts were aggregated. + properties: + type: + enum: + - SOURCE + description: The type of object that is referenced + example: SOURCE + status: + description: The overall status of the aggregation. + enum: + - Success + - Failed + - Terminated + example: Success + started: + type: string + format: date-time + description: The date and time when the account aggregation started. + example: "2020-06-29T22:01:50.474Z" + completed: + type: string + format: date-time + description: The date and time when the account aggregation finished. + example: "2020-06-29T22:02:04.090Z" + errors: + nullable: true + description: A list of errors that occurred during the aggregation. + type: array + items: + type: string + description: A descriptive error message. + example: Accounts unable to be aggregated. + warnings: + nullable: true + description: A list of warnings that occurred during the aggregation. + type: array + items: + type: string + description: A descriptive warning message. + example: Account Skipped + stats: + type: object + description: Overall statistics about the account aggregation. + required: + - scanned + - unchanged + - changed + - added + - removed + properties: + scanned: + type: integer + format: int32 + minimum: 0 + maximum: 2147483647 + description: The number of accounts which were scanned / iterated over. + example: 200 + unchanged: + type: integer + format: int32 + minimum: 0 + maximum: 2147483647 + description: The number of accounts which existed before, but had no changes. + example: 190 + changed: + type: integer + format: int32 + minimum: 0 + maximum: 2147483647 + description: The number of accounts which existed before, but had changes. + example: 6 + added: + type: integer + format: int32 + minimum: 0 + maximum: 2147483647 + description: The number of accounts which are new - have not existed before. + example: 4 + removed: + type: integer + minimum: 0 + maximum: 2147483647 + format: int32 + description: The number accounts which existed before, but no longer exist (thus getting removed). + example: 3 \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/AccountAttributesChanged.yaml b/static/idn-api/beta/schemas/trigger/example-input/AccountAttributesChanged.yaml new file mode 100644 index 000000000..61f1ba693 --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/AccountAttributesChanged.yaml @@ -0,0 +1,112 @@ +title: Account Attributes Changed +type: object +required: +- identity +- source +- account +- changes +properties: + identity: + required: + - id + - type + - name + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: The identity whose account attributes changed. + properties: + type: + enum: + - "IDENTITY" + example: "IDENTITY" + description: The type of object that is referenced + source: + required: + - id + - type + - name + type: object + description: The source that contains the account. + properties: + id: + description: ID of the object to which this reference applies + type: string + example: 4e4d982dddff4267ab12f0f1e72b5a6d + type: + type: string + enum: + - SOURCE + example: SOURCE + description: The type of object that is referenced + name: + type: string + description: Human-readable display name of the object to which this reference applies + example: Corporate Active Directory + account: + type: object + description: Details of the account where the attributes changed. + required: + - id + - uuid + - name + - nativeIdentity + - type + properties: + id: + type: string + description: SailPoint generated unique identifier. + example: 52170a74-ca89-11ea-87d0-0242ac130003 + uuid: + nullable: true + type: string + description: The source's unique identifier for the account. UUID is generated by the source system. + example: 1cb1f07d-3e5a-4431-becd-234fa4306108 + name: + type: string + description: Name of the account. + example: john.doe + nativeIdentity: + type: string + description: Unique ID of the account on the source. + example: "cn=john.doe,ou=users,dc=acme,dc=com" + type: + enum: + - ACCOUNT + description: The type of the account + example: ACCOUNT + changes: + type: array + description: A list of attributes that changed. + items: + type: object + required: + - attribute + - oldValue + - newValue + properties: + attribute: + type: string + description: The name of the attribute. + example: sn + oldValue: + description: The previous value of the attribute. + nullable: true + oneOf: + - type: string + - type: boolean + - type: array + items: + nullable: true + type: string + example: doe + newValue: + description: The new value of the attribute. + nullable: true + oneOf: + - type: string + - type: boolean + - type: array + items: + nullable: true + type: string + example: ryans diff --git a/static/idn-api/beta/schemas/trigger/example-input/AccountCorrelated.yaml b/static/idn-api/beta/schemas/trigger/example-input/AccountCorrelated.yaml new file mode 100644 index 000000000..d7b3a7b7b --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/AccountCorrelated.yaml @@ -0,0 +1,86 @@ +title: Account Correlated +type: object +required: +- identity +- source +- account +- attributes +properties: + identity: + required: + - type + - name + - id + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: The identity that the account correlated with. + properties: + type: + enum: + - IDENTITY + description: The type of object that is referenced + example: IDENTITY + source: + required: + - id + - type + - name + type: object + description: The source from which the account came from. + properties: + id: + description: ID of the object to which this reference applies + type: string + example: 4e4d982dddff4267ab12f0f1e72b5a6d + type: + type: string + enum: + - SOURCE + example: SOURCE + description: The type of object that is referenced + name: + type: string + description: Human-readable display name of the object to which this reference applies + example: Corporate Active Directory + account: + required: + - id + - name + - nativeIdentity + - type + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: The account that was correlated. + properties: + type: + enum: + - ACCOUNT + description: The type of object that is referenced + example: ACCOUNT + nativeIdentity: + type: string + description: Unique ID of the account on the source. + example: "cn=john.doe,ou=users,dc=acme,dc=com" + uuid: + nullable: true + type: string + description: The source's unique identifier for the account. UUID is generated by the source system. + example: 1cb1f07d-3e5a-4431-becd-234fa4306108 + attributes: + type: object + description: The attributes associated with the account. Attributes are unique per source. + additionalProperties: true + example: { + "sn": "doe", + "givenName": "john", + "memberOf": [ + "cn=g1,ou=groups,dc=acme,dc=com", + "cn=g2,ou=groups,dc=acme,dc=com", + "cn=g3,ou=groups,dc=acme,dc=com" + ] + } + entitlementCount: + type: integer + format: int32 + description: The number of entitlements associated with this account. + example: 0 \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/AccountUncorrelated.yaml b/static/idn-api/beta/schemas/trigger/example-input/AccountUncorrelated.yaml new file mode 100644 index 000000000..66698d43f --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/AccountUncorrelated.yaml @@ -0,0 +1,64 @@ +title: Account Uncorrelated +type: object +required: +- identity +- source +- account +properties: + identity: + required: + - type + - name + - id + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: The identity that the account uncorrelated with. + properties: + type: + enum: + - IDENTITY + description: The type of object that is referenced + example: IDENTITY + source: + required: + - type + - name + - id + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: The source from which the account came from. + properties: + type: + enum: + - SOURCE + description: The type of object that is referenced + example: SOURCE + account: + required: + - id + - name + - nativeIdentity + - type + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: The account that was uncorrelated. + properties: + type: + enum: + - ACCOUNT + description: The type of object that is referenced + example: ACCOUNT + nativeIdentity: + type: string + description: Unique ID of the account on the source. + example: "cn=john.doe,ou=users,dc=acme,dc=com" + uuid: + nullable: true + type: string + description: The source's unique identifier for the account. UUID is generated by the source system. + example: 1cb1f07d-3e5a-4431-becd-234fa4306108 + entitlementCount: + type: integer + format: int32 + description: The number of entitlements associated with this account. + example: 0 \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/AccountsCollectedForAggregation.yaml b/static/idn-api/beta/schemas/trigger/example-input/AccountsCollectedForAggregation.yaml new file mode 100644 index 000000000..0c5a2b42d --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/AccountsCollectedForAggregation.yaml @@ -0,0 +1,111 @@ +title: Accounts Collected for Aggregation +type: object +required: +- source +- status +- started +- completed +- errors +- warnings +- stats +properties: + source: + required: + - id + - type + - name + type: object + description: Reference to the source that has been aggregated. + properties: + id: + description: ID of the object to which this reference applies + type: string + example: 4e4d982dddff4267ab12f0f1e72b5a6d + type: + type: string + enum: + - SOURCE + example: SOURCE + description: The type of object that is referenced + name: + type: string + description: Human-readable display name of the object to which this reference applies + example: Corporate Active Directory + status: + description: The overall status of the collection. + enum: + - Success + - Failed + - Terminated + example: Success + started: + type: string + format: date-time + description: The date and time when the account collection started. + example: "2020-06-29T22:01:50.474Z" + completed: + type: string + format: date-time + description: The date and time when the account collection finished. + example: "2020-06-29T22:02:04.090Z" + errors: + nullable: true + description: A list of errors that occurred during the collection. + type: array + items: + type: string + description: A descriptive error message. + example: Unable to collect accounts for aggregation. + warnings: + nullable: true + description: A list of warnings that occurred during the collection. + type: array + items: + type: string + description: A descriptive warning message. + example: Account Skipped + stats: + type: object + description: Overall statistics about the account collection. + required: + - scanned + - unchanged + - changed + - added + - removed + properties: + scanned: + type: integer + format: int32 + minimum: 0 + maximum: 2147483647 + description: The number of accounts which were scanned / iterated over. + example: 200 + unchanged: + type: integer + format: int32 + minimum: 0 + maximum: 2147483647 + description: The number of accounts which existed before, but had no changes. + example: 190 + changed: + type: integer + format: int32 + minimum: 0 + maximum: 2147483647 + description: The number of accounts which existed before, but had changes. + example: 6 + added: + type: integer + format: int32 + minimum: 0 + maximum: 2147483647 + description: The number of accounts which are new - have not existed before. + example: 4 + removed: + type: integer + minimum: 0 + maximum: 2147483647 + format: int32 + description: The number accounts which existed before, but no longer exist (thus getting removed). + example: 3 \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/CampaignActivated.yaml b/static/idn-api/beta/schemas/trigger/example-input/CampaignActivated.yaml new file mode 100644 index 000000000..685a7cc7d --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/CampaignActivated.yaml @@ -0,0 +1,79 @@ +title: Campaign Activated +type: object +required: +- campaign +properties: + campaign: + type: object + description: Details about the certification campaign that was activated. + required: + - id + - name + - description + - created + - deadline + - type + - campaignOwner + - status + properties: + id: + type: string + description: Unique ID for the campaign. + example: 2c91808576f886190176f88cac5a0010 + name: + type: string + description: The human friendly name of the campaign. + example: Manager Access Campaign + description: + type: string + description: Extended description of the campaign. + example: Audit access for all employees. + created: + type: string + format: date-time + description: The date and time the campaign was created. + example: "2021-02-16T03:04:45.815Z" + modified: + nullable: true + type: string + format: date-time + description: The date and time the campaign was last modified. + example: "2021-02-16T03:06:45.815Z" + deadline: + type: string + format: date-time + description: The date and time the campaign is due. + example: "2021-03-16T03:04:45.815Z" + type: + description: The type of campaign. + enum: + - MANAGER + - SOURCE_OWNER + - SEARCH + - ROLE_COMPOSITION + example: MANAGER + campaignOwner: + type: object + description: Details of the identity that owns the campaign. + required: + - id + - displayName + - email + properties: + id: + type: string + description: The unique ID of the identity. + example: 37f080867702c1910177031320c40n27 + displayName: + type: string + description: The human friendly name of the identity. + example: John Snow + email: + type: string + description: The primary email address of the identity. + example: john.snow@example.com + status: + enum: + - ACTIVE + description: The current status of the campaign. + example: ACTIVE \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/CampaignEnded.yaml b/static/idn-api/beta/schemas/trigger/example-input/CampaignEnded.yaml new file mode 100644 index 000000000..fb959c871 --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/CampaignEnded.yaml @@ -0,0 +1,79 @@ +title: Campaign Ended +type: object +required: +- campaign +properties: + campaign: + type: object + description: Details about the certification campaign that ended. + required: + - id + - name + - description + - created + - deadline + - type + - campaignOwner + - status + properties: + id: + type: string + description: Unique ID for the campaign. + example: 2c91808576f886190176f88cac5a0010 + name: + type: string + description: The human friendly name of the campaign. + example: Manager Access Campaign + description: + type: string + description: Extended description of the campaign. + example: Audit access for all employees. + created: + type: string + format: date-time + description: The date and time the campaign was created. + example: "2021-02-16T03:04:45.815Z" + modified: + nullable: true + type: string + format: date-time + description: The date and time the campaign was last modified. + example: "2021-03-16T03:06:45.815Z" + deadline: + type: string + format: date-time + description: The date and time the campaign is due. + example: "2021-03-16T03:04:45.815Z" + type: + description: The type of campaign. + enum: + - MANAGER + - SOURCE_OWNER + - SEARCH + - ROLE_COMPOSITION + example: MANAGER + campaignOwner: + type: object + description: Details of the identity that owns the campaign. + required: + - id + - displayName + - email + properties: + id: + type: string + description: The unique ID of the identity. + example: 37f080867702c1910177031320c40n27 + displayName: + type: string + description: The human friendly name of the identity. + example: John Snow + email: + type: string + description: The primary email address of the identity. + example: john.snow@example.com + status: + enum: + - COMPLETED + description: The current status of the campaign. + example: COMPLETED \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/CampaignGenerated.yaml b/static/idn-api/beta/schemas/trigger/example-input/CampaignGenerated.yaml new file mode 100644 index 000000000..3a49250cc --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/CampaignGenerated.yaml @@ -0,0 +1,79 @@ +title: Campaign Generated +type: object +required: +- campaign +properties: + campaign: + description: Details about the campaign that was generated. + type: object + required: + - id + - name + - description + - created + - type + - campaignOwner + - status + properties: + id: + type: string + description: The unique ID of the campaign. + example: 2c91808576f886190176f88cac5a0010 + name: + type: string + description: Human friendly name of the campaign. + example: Manager Access Campaign + description: + type: string + description: Extended description of the campaign. + example: Audit access for all employees. + created: + type: string + format: date-time + description: The date and time the campaign was created. + example: '2021-02-16T03:04:45.815Z' + modified: + nullable: true + type: string + description: The date and time the campaign was last modified. + example: '2021-02-17T03:04:45.815Z' + deadline: + nullable: true + type: string + description: The date and time when the campaign must be finished by. + example: '2021-02-18T03:04:45.815Z' + type: + enum: + - MANAGER + - SOURCE_OWNER + - SEARCH + - ROLE_COMPOSITION + description: The type of campaign that was generated. + example: MANAGER + campaignOwner: + type: object + description: The identity that owns the campaign. + required: + - id + - displayName + - email + properties: + id: + type: string + description: The unique ID of the identity. + example: 37f080867702c1910177031320c40n27 + displayName: + type: string + description: The display name of the identity. + example: John Snow + email: + type: string + description: The primary email address of the identity. + example: john.snow@example.com + status: + enum: + - STAGED + - ACTIVATING + - ACTIVE + description: The current status of the campaign. + example: STAGED \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/CertificationSignedOff.yaml b/static/idn-api/beta/schemas/trigger/example-input/CertificationSignedOff.yaml new file mode 100644 index 000000000..b8bb4c80e --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/CertificationSignedOff.yaml @@ -0,0 +1,33 @@ +title: Certification Signed Off +type: object +required: +- certification +properties: + certification: + description: The certification campaign that was signed off on. + required: + - id + - name + - created + allOf: + - $ref: '../../CertificationDto.yaml' + properties: + id: + type: string + description: Unique ID of the certification. + example: 2c91808576f886190176f88caf0d0067 + name: + type: string + description: The name of the certification. + example: Manager Access Review for Alice Baker + created: + type: string + format: date-time + description: The date and time the certification was created. + example: "2020-02-16T03:04:45.815Z" + modified: + nullable: true + type: string + format: date-time + description: The date and time the certification was last modified. + example: "2020-02-16T03:06:45.815Z" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/IdentityAttributesChanged.yaml b/static/idn-api/beta/schemas/trigger/example-input/IdentityAttributesChanged.yaml new file mode 100644 index 000000000..b92809401 --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/IdentityAttributesChanged.yaml @@ -0,0 +1,67 @@ +title: Identity Attributes Changed +type: object +required: +- identity +- changes +properties: + identity: + required: + - id + - type + - name + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: The identity who's attributes changed. + properties: + type: + enum: + - "IDENTITY" + example: "IDENTITY" + description: The type of object that is referenced + changes: + description: A list of one or more identity attributes that changed on the identity. + type: array + items: + type: object + required: + - attribute + properties: + attribute: + type: string + description: The name of the identity attribute that changed. + example: department + oldValue: + description: The value of the identity attribute before it changed. + nullable: true + example: sales + oneOf: + - type: string + - type: boolean + - type: array + items: + type: string + - type: object + nullable: true + additionalProperties: + oneOf: + - type: string + - type: number + - type: integer + - type: boolean + newValue: + description: The value of the identity attribute after it changed. + example: marketing + oneOf: + - type: string + - type: boolean + - type: array + items: + type: string + - type: object + nullable: true + additionalProperties: + oneOf: + - type: string + - type: number + - type: integer + - type: boolean \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/IdentityCreated.yaml b/static/idn-api/beta/schemas/trigger/example-input/IdentityCreated.yaml new file mode 100644 index 000000000..3ef1e3cd8 --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/IdentityCreated.yaml @@ -0,0 +1,27 @@ +title: Identity Created +type: object +required: +- identity +- attributes +properties: + identity: + required: + - id + - type + - name + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: The identity that was created. + properties: + type: + enum: + - "IDENTITY" + example: "IDENTITY" + description: The type of object that is referenced + attributes: + type: object + description: The attributes assigned to the identity. Attributes are determined by the identity profile. + additionalProperties: true + example: { + "firstname": "John" + } \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/IdentityDeleted.yaml b/static/idn-api/beta/schemas/trigger/example-input/IdentityDeleted.yaml new file mode 100644 index 000000000..5ef6f5420 --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/IdentityDeleted.yaml @@ -0,0 +1,27 @@ +title: Identity Deleted +type: object +required: +- identity +- attributes +properties: + identity: + required: + - id + - type + - name + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: The identity that was deleted. + properties: + type: + enum: + - "IDENTITY" + example: "IDENTITY" + description: The type of object that is referenced + attributes: + type: object + description: The attributes assigned to the identity. Attributes are determined by the identity profile. + additionalProperties: true + example: { + "firstname": "John" + } \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/ProvisioningCompleted.yaml b/static/idn-api/beta/schemas/trigger/example-input/ProvisioningCompleted.yaml new file mode 100644 index 000000000..506830cb0 --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/ProvisioningCompleted.yaml @@ -0,0 +1,147 @@ +title: Provisioning Completed +type: object +required: +- trackingNumber +- sources +- recipient +- accountRequests +properties: + trackingNumber: + type: string + description: The reference number of the provisioning request. Useful for tracking status in the Account Activity search interface. + example: 4b4d982dddff4267ab12f0f1e72b5a6d + sources: + type: string + description: One or more sources that the provisioning transaction(s) were done against. Sources are comma separated. + example: Corp AD, Corp LDAP, Corp Salesforce + action: + nullable: true + type: string + description: Origin of where the provisioning request came from. + example: IdentityRefresh + errors: + nullable: true + description: A list of any accumulated error messages that occurred during provisioning. + type: array + items: + type: string + example: Connector AD Failed + warnings: + nullable: true + description: A list of any accumulated warning messages that occurred during provisioning. + type: array + items: + type: string + example: Notification Skipped due to invalid email + recipient: + required: + - id + - type + - name + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: Reference to the identity who is the target of the provisioning request. + properties: + type: + enum: + - "IDENTITY" + example: "IDENTITY" + description: The type of object that is referenced + requester: + nullable: true + required: + - id + - type + - name + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: Reference to the identity (if any) who submitted the provisioning request. + properties: + type: + enum: + - "IDENTITY" + example: "IDENTITY" + description: The type of object that is referenced + accountRequests: + type: array + description: A list of provisioning instructions to perform on an account-by-account basis. + items: + type: object + required: + - source + - accountOperation + - provisioningResult + - provisioningTarget + properties: + source: + required: + - id + - type + - name + type: object + description: Reference to the source being provisioned against. + properties: + id: + description: ID of the object to which this reference applies + type: string + example: 4e4d982dddff4267ab12f0f1e72b5a6d + type: + type: string + enum: + - SOURCE + example: SOURCE + description: The type of object that is referenced + name: + type: string + description: Human-readable display name of the object to which this reference applies + example: Corporate Active Directory + accountId: + type: string + description: The unique idenfier of the account being provisioned. + example: CN=Chewy.Bacca,ou=hardcorefigter,ou=wookies,dc=starwars,dc=com + accountOperation: + type: string + description: The provisioning operation; typically Create, Modify, Enable, Disable, Unlock, or Delete. + example: Modify + provisioningResult: + description: The overall result of the provisioning transaction; this could be success, pending, failed, etc. + enum: + - SUCCESS + - PENDING + - FAILED + example: SUCCESS + provisioningTarget: + type: string + description: The name of the provisioning channel selected; this could be the same as the source, or could be a Service Desk Integration Module (SDIM). + example: Corp AD + ticketId: + nullable: true + type: string + description: A reference to a tracking number, if this is sent to a Service Desk Integration Module (SDIM). + example: '72619262' + attributeRequests: + nullable: true + description: A list of attributes as part of the provisioning transaction. + type: array + items: + type: object + required: + - attributeName + - operation + properties: + attributeName: + type: string + description: The name of the attribute being provisioned. + example: memberOf + attributeValue: + nullable: true + type: string + description: The value of the attribute being provisioned. + example: CN=jedi,DC=starwars,DC=com + operation: + enum: + - Add + - Set + - Remove + description: The operation to handle the attribute. + example: Add \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/SavedSearchComplete.yaml b/static/idn-api/beta/schemas/trigger/example-input/SavedSearchComplete.yaml new file mode 100644 index 000000000..7ff659217 --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/SavedSearchComplete.yaml @@ -0,0 +1,117 @@ +title: Saved Search Complete +type: object +required: +- fileName +- ownerEmail +- ownerName +- query +- searchName +- searchResults +- signedS3Url +properties: + fileName: + type: string + description: A name for the report file. + example: Modified.zip + ownerEmail: + type: string + description: The email address of the identity that owns the saved search. + example: test@sailpoint.com + ownerName: + type: string + description: The name of the identity that owns the saved search. + example: Cloud Support + query: + type: string + description: The search query that was used to generate the report. + example: 'modified:[now-7y/d TO now]' + searchName: + type: string + description: The name of the saved search. + example: Modified Activity + searchResults: + type: object + description: A preview of the search results for each object type. This includes a count as well as headers, and the first several rows of data, per object type. + properties: + Account: + description: A table of accounts that match the search criteria. + nullable: true + type: object + required: + - count + - noun + - preview + properties: + count: + type: string + description: The number of rows in the table. + example: 3 + noun: + type: string + description: The type of object represented in the table. + example: accounts + preview: + description: A sample of the data in the table. + type: array + items: + type: array + items: + type: string + example: Robert.Chase + example: [] + Entitlement: + description: A table of entitlements that match the search criteria. + nullable: true + type: object + required: + - count + - noun + - preview + properties: + count: + type: string + description: The number of rows in the table. + example: 2 + noun: + type: string + description: The type of object represented in the table. + example: entitlements + preview: + description: A sample of the data in the table. + type: array + items: + type: array + items: + type: string + example: Administrator + example: [] + Identity: + description: A table of identities that match the search criteria. + nullable: true + type: object + required: + - count + - noun + - preview + properties: + count: + type: string + description: The number of rows in the table. + example: 2 + noun: + type: string + description: The type of object represented in the table. + example: identities + preview: + description: A sample of the data in the table. + type: array + items: + type: array + items: + type: string + example: Carol Shelby + example: [] + signedS3Url: + type: string + description: The Amazon S3 URL to download the report from. + example: https://sptcbu-org-data-useast1.s3.amazonaws.com/arsenal-john/reports/Events%20Export.2020-05-06%2018%2759%20GMT.3e580592-86e4-4953-8aea-49e6ef20a086.zip?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20200506T185919Z&X-Amz-SignedHeaders=host&X-Amz-Expires=899&X-Amz-Credential=AKIAV5E54XOGTS4Q4L7A%2F20200506%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=2e732bb97a12a1fd8a215613e3c31fcdae8ba1fb6a25916843ab5b51d2ddefbc \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/SourceAccount.yaml b/static/idn-api/beta/schemas/trigger/example-input/SourceAccount.yaml new file mode 100644 index 000000000..55e37873e --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/SourceAccount.yaml @@ -0,0 +1,55 @@ +type: object +required: +- id +- nativeIdentifier +- sourceId +- sourceName +- identityId +- identityName +- attributes +properties: + uuid: + type: string + description: Source unique identifier for the identity. UUID is generated by the source system. + example: 'b7264868-7201-415f-9118-b581d431c688' + id: + type: string + description: SailPoint generated unique identifier. + example: ee769173319b41d19ccec35ba52f237b + nativeIdentifier: + type: string + description: Unique ID of the account on the source. + example: E009 + sourceId: + type: string + description: The ID of the source. + example: 2c918082814e693601816e09471b29b6 + sourceName: + type: string + description: The name of the source. + example: Active Directory + identityId: + type: string + description: The ID of the identity that is corellated with this account. + example: ee769173319b41d19ccec6c235423237b + identityName: + type: string + description: The name of the identity that is corellated with this account. + example: john.doe + attributes: + type: object + additionalProperties: true + description: The attributes of the account. The contents of attributes depends on the account schema for the source. + example: { + "firstname": "John", + "lastname": "Doe", + "email": "john.doe@gmail.com", + "department": "Sales", + "displayName": "John Doe", + "created": "2020-04-27T16:48:33.597Z", + "employeeNumber": "E009", + "uid": "E009", + "inactive": "true", + "phone": null, + "identificationNumber": "E009" + } \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/SourceAccountCreated.yaml b/static/idn-api/beta/schemas/trigger/example-input/SourceAccountCreated.yaml new file mode 100644 index 000000000..1d8fea140 --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/SourceAccountCreated.yaml @@ -0,0 +1,2 @@ +title: Source Account Created +$ref: './SourceAccount.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/SourceAccountDeleted.yaml b/static/idn-api/beta/schemas/trigger/example-input/SourceAccountDeleted.yaml new file mode 100644 index 000000000..a834a8f15 --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/SourceAccountDeleted.yaml @@ -0,0 +1,2 @@ +title: Source Account Deleted +$ref: './SourceAccount.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/SourceAccountUpdated.yaml b/static/idn-api/beta/schemas/trigger/example-input/SourceAccountUpdated.yaml new file mode 100644 index 000000000..62080ebb3 --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/SourceAccountUpdated.yaml @@ -0,0 +1,2 @@ +title: Source Account Updated +$ref: './SourceAccount.yaml' \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/SourceCreated.yaml b/static/idn-api/beta/schemas/trigger/example-input/SourceCreated.yaml new file mode 100644 index 000000000..b78414c17 --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/SourceCreated.yaml @@ -0,0 +1,45 @@ +title: Source Created +type: object +required: +- id +- name +- type +- created +- connector +- actor +properties: + id: + type: string + description: The unique ID of the source. + example: 2c9180866166b5b0016167c32ef31a66 + name: + type: string + description: Human friendly name of the source. + example: Test source + type: + type: string + description: The connection type. + example: DIRECT_CONNECT + created: + type: string + format: date-time + description: The date and time the source was created. + example: "2021-03-29T22:01:50.474Z" + connector: + type: string + description: The connector type used to connect to the source. + example: active-directory + actor: + required: + - id + - name + - type + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: The identity that created the source. + properties: + type: + enum: + - "IDENTITY" + example: "IDENTITY" + description: The type of object that is referenced \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/SourceDeleted.yaml b/static/idn-api/beta/schemas/trigger/example-input/SourceDeleted.yaml new file mode 100644 index 000000000..3a024e249 --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/SourceDeleted.yaml @@ -0,0 +1,45 @@ +title: Source Deleted +type: object +required: +- id +- name +- type +- deleted +- connector +- actor +properties: + id: + type: string + description: The unique ID of the source. + example: 2c9180866166b5b0016167c32ef31a66 + name: + type: string + description: Human friendly name of the source. + example: Test source + type: + type: string + description: The connection type. + example: DIRECT_CONNECT + deleted: + type: string + format: date-time + description: The date and time the source was deleted. + example: "2021-03-29T22:01:50.474Z" + connector: + type: string + description: The connector type used to connect to the source. + example: active-directory + actor: + required: + - id + - name + - type + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: The identity that deleted the source. + properties: + type: + enum: + - "IDENTITY" + example: "IDENTITY" + description: The type of object that is referenced \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/SourceUpdated.yaml b/static/idn-api/beta/schemas/trigger/example-input/SourceUpdated.yaml new file mode 100644 index 000000000..babe2eaa5 --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/SourceUpdated.yaml @@ -0,0 +1,44 @@ +title: Source Updated +type: object +required: +- id +- name +- type +- modified +- connector +- actor +properties: + id: + type: string + description: The unique ID of the source. + example: 2c9180866166b5b0016167c32ef31a66 + name: + type: string + description: The user friendly name of the source. + example: Corporate Active Directory + type: + type: string + description: The connection type of the source. + example: DIRECT_CONNECT + modified: + type: string + format: date-time + description: The date and time the source was modified. + example: '2021-03-29T22:01:50.474Z' + connector: + type: string + description: The connector type used to connect to the source. + example: active-directory + actor: + required: + - type + - name + allOf: + - $ref: '../../../../v3/schemas/BaseReferenceDto.yaml' + description: The identity or system that performed the update. + properties: + type: + enum: + - IDENTITY + example: IDENTITY + description: The type of object that is referenced \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-input/VAClusterStatusChangeEvent.yaml b/static/idn-api/beta/schemas/trigger/example-input/VAClusterStatusChangeEvent.yaml new file mode 100644 index 000000000..8f856a286 --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-input/VAClusterStatusChangeEvent.yaml @@ -0,0 +1,86 @@ +title: VA Cluster Status Change Event +type: object +required: +- created +- type +- application +- healthCheckResult +- previousHealthCheckResult +properties: + created: + type: string + format: date-time + description: The date and time the status change occurred. + example: '2020-06-29T22:01:50.474Z' + type: + enum: + - SOURCE + - CLUSTER + description: The type of the object that initiated this event. + example: CLUSTER + application: + type: object + description: Details about the `CLUSTER` or `SOURCE` that initiated this event. + required: + - id + - name + - attributes + properties: + id: + type: string + description: The GUID of the application + example: 2c9180866166b5b0016167c32ef31a66 + name: + type: string + description: The name of the application + example: Production VA Cluster + attributes: + type: object + description: Custom map of attributes for a source. This will only be populated if type is `SOURCE` and the source has a proxy. + additionalProperties: true + nullable: true + example: null + healthCheckResult: + type: object + description: The results of the most recent health check. + required: + - message + - resultType + - status + properties: + message: + type: string + description: Detailed message of the result of the health check. + example: "Test Connection failed with exception. Error message - java.lang Exception" + resultType: + type: string + description: The type of the health check result. + example: SOURCE_STATE_ERROR_CLUSTER + status: + enum: + - Succeeded + - Failed + description: The status of the health check. + example: Succeeded + previousHealthCheckResult: + type: object + description: The results of the last health check. + required: + - message + - resultType + - status + properties: + message: + type: string + description: Detailed message of the result of the health check. + example: "Test Connection failed with exception. Error message - java.lang Exception" + resultType: + type: string + description: The type of the health check result. + example: SOURCE_STATE_ERROR_CLUSTER + status: + enum: + - Succeeded + - Failed + description: The status of the health check. + example: Failed \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-output/AccessRequestDynamicApprover.yaml b/static/idn-api/beta/schemas/trigger/example-output/AccessRequestDynamicApprover.yaml new file mode 100644 index 000000000..c7746fbd7 --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-output/AccessRequestDynamicApprover.yaml @@ -0,0 +1,22 @@ +title: Access Request Dynamic Approver +type: object +nullable: true +required: +- id +- name +- type +properties: + id: + type: string + description: The unique ID of the identity to add to the approver list for the access request. + example: 2c91808b6ef1d43e016efba0ce470906 + name: + type: string + description: The name of the identity to add to the approver list for the access request. + example: Adam Adams + type: + enum: + - IDENTITY + - GOVERNANCE_GROUP + description: The type of object being referenced. + example: IDENTITY \ No newline at end of file diff --git a/static/idn-api/beta/schemas/trigger/example-output/AccessRequestPreApproval.yaml b/static/idn-api/beta/schemas/trigger/example-output/AccessRequestPreApproval.yaml new file mode 100644 index 000000000..aa7adf92e --- /dev/null +++ b/static/idn-api/beta/schemas/trigger/example-output/AccessRequestPreApproval.yaml @@ -0,0 +1,19 @@ +title: Access Request Pre Approval +type: object +required: +- approved +- comment +- approver +properties: + approved: + type: boolean + description: Whether or not to approve the access request. + example: false + comment: + type: string + description: A comment about the decision to approve or deny the request. + example: This access should be denied, because this will cause an SOD violation. + approver: + type: string + description: The name of the entity that approved or denied the request. + example: AcmeCorpExternalIntegration \ No newline at end of file diff --git a/static/idn-api/beta/schemas/workflows/trigger-attributes/EventAttributes.yaml b/static/idn-api/beta/schemas/workflows/trigger-attributes/EventAttributes.yaml new file mode 100644 index 000000000..762805fe2 --- /dev/null +++ b/static/idn-api/beta/schemas/workflows/trigger-attributes/EventAttributes.yaml @@ -0,0 +1,13 @@ +title: Event Trigger Attributes +type: object +required: +- id +properties: + id: + type: string + description: The unique ID of the trigger + example: "idn:identity-attributes-changed" + filter: + type: string + description: JSON path expression that will limit which events the trigger will fire on + example: "$.changes[?(@.attribute == 'manager')]" \ No newline at end of file diff --git a/static/idn-api/beta/schemas/workflows/trigger-attributes/ExternalAttributes.yaml b/static/idn-api/beta/schemas/workflows/trigger-attributes/ExternalAttributes.yaml new file mode 100644 index 000000000..d1eb65318 --- /dev/null +++ b/static/idn-api/beta/schemas/workflows/trigger-attributes/ExternalAttributes.yaml @@ -0,0 +1,13 @@ +title: External Trigger Attributes +type: object +required: +- name +properties: + name: + type: string + description: A unique name for the external trigger + example: "search-and-notify" + description: + type: string + description: Additonal context about the external trigger + example: Run a search and notify the results \ No newline at end of file diff --git a/static/idn-api/beta/schemas/workflows/trigger-attributes/ScheduledAttributes.yaml b/static/idn-api/beta/schemas/workflows/trigger-attributes/ScheduledAttributes.yaml new file mode 100644 index 000000000..92d4ac013 --- /dev/null +++ b/static/idn-api/beta/schemas/workflows/trigger-attributes/ScheduledAttributes.yaml @@ -0,0 +1,12 @@ +title: Scheduled Trigger Attributes +type: object +required: +- cronString +properties: + cronString: + type: string + description: A valid CRON expression + externalDocs: + description: CRON expression editor + url: https://crontab.guru/ + example: "0 * */3 */5 *" \ No newline at end of file diff --git a/static/idn-api/beta/securitySchemes/OAuth2.yaml b/static/idn-api/beta/securitySchemes/OAuth2.yaml new file mode 100644 index 000000000..6172e04ed --- /dev/null +++ b/static/idn-api/beta/securitySchemes/OAuth2.yaml @@ -0,0 +1,57 @@ +type: oauth2 +description: >- + OAuth2 Bearer token (JWT). See + [Best Practices: IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) +flows: + authorizationCode: + authorizationUrl: 'https://{tenant}.identitynow.com/oauth/authorize' + tokenUrl: 'https://{tenant}.identitynow.com/oauth/token' + scopes: + 'idn:task-definition:read': Task Definition read access + 'idn:task-definition:write': Task Definition write access + 'idn:task-management:read': Task Management read access (TaskStatus) + 'idn:task-management:write': Task Management write access (TaskInvocation) + 'idn:service-desk-integration:read': Service Desk integration read access + 'idn:service-desk-integration:write': Service Desk integration write access + 'idn:service-desk-admin:read': Service Desk admin read access + 'idn:service-desk-admin:write': Service Desk admin write access + 'idn:managed-cluster:read': ManagedCluster read access + 'idn:managed-cluster-log-config:read': ManagedCluster log configuration read access + 'idn:managed-cluster-log-config:write': ManagedCluster log configuration write access + 'idn:managed-cluster:upgrade': ManagedCluster client version upgrade access + idn:managed-cluster-jobs:read: ManagedCluster read cache for jobs + 'idn:managed-cluster-types:create': ManagedClusterType create access + 'idn:managed-cluster-types:read': ManagedClusterType read access + 'idn:managed-cluster-types:update': ManagedClusterType update access + 'idn:managed-cluster-types:delete': ManagedClusterType delete access + 'idn:managed-process:create': ManagedProcess create access + 'idn:managed-process:read': ManagedProcess read access + 'idn:managed-process:update': ManagedProcess update access + 'idn:managed-process:delete': ManagedProcess delete access + 'idn:nesr:create': Ability to create non-employee records + 'idn:nesr:delete': Ability to delete non-employee records + 'idn:nesr:read': Ability to read non-employee records + 'idn:nesr:update': Ability to update non-employee records + idn:provisioning-policy-list:read: Rights to read list of provisioning policies + idn:provisioning-policy:read: Right to read provisioning policy + idn:provisioning-policy:create: Right to create provisioning policy + idn:provisioning-policy:update: Right to update provisioning policy + idn:provisioning-policy-bulk:update: Right to update a list of provisioning policies + idn:provisioning-policy:delete: Right to delete provisioning policy + idn:account:read: Right to read single account + idn:account-list:read: Right to read list of accounts + idn:account-entitlement:read: Right to read account entitlements + idn:account:create: Right to create account + idn:account:update: Right to update account + idn:account:delete: Right to delete account + idn:account:reload: Right to reload account + idn:account:enable: Right to enable account + idn:account:disable: Right to disable account + idn:account:unlock: Right to unlock account + 'idn:s3-proxy:read': Right to read S3 artifacts + 'idn:transforms-list:read': Right to access list of transforms + 'idn:transforms:read': Right to access transforms by id + 'idn:transforms:write': Right to create and update transforms + 'idn:transforms:delete': Right to delete transforms + 'idn:transforms:usage': Right to check whether a transform is referenced elsewhere + idn:source-connector:write: Right to configure source-connectors diff --git a/static/idn-api/sailpoint-api.beta.yaml b/static/idn-api/sailpoint-api.beta.yaml new file mode 100644 index 000000000..fbb14152d --- /dev/null +++ b/static/idn-api/sailpoint-api.beta.yaml @@ -0,0 +1,1093 @@ +openapi: 3.0.1 +info: + contact: + email: developers@sailpoint.com + name: Developer Relations + url: https://developer.sailpoint.com/discuss + description: "These are the public, beta APIs for SailPoint's SaaS services and are subject to change." + title: SailPoint - Beta SaaS API + version: 3.1.0-beta +servers: + - url: https://{tenant}.api.identitynow.com/beta + description: This is the beta API server. + variables: + tenant: + default: sailpoint + description: This is the name of your tenant, typically your company's name. +tags: + - name: Access Profiles + description: | + Use this API to implement and customize access profile functionality. + With this functionality in place, administrators can create access profiles and configure them for use throughout IdentityNow, enabling users to get the access they need quickly and securely. + + Access profiles group entitlements, which represent access rights on sources. + + For example, an Active Directory source in IdentityNow can have multiple entitlements: the first, 'Employees,' may represent the access all employees have at the organization, and a second, 'Developers,' may represent the access all developers have at the organization. + + An administrator can then create a broader set of access in the form of an access profile, 'AD Developers' grouping the 'Employees' entitlement with the 'Developers' entitlement. + + When users only need Active Directory employee access, they can request access to the 'Employees' entitlement. + + When users need both Active Directory employee and developer access, they can request access to the 'AD Developers' access profile. + + Access profiles are the most important units of access in IdentityNow. IdentityNow uses access profiles in many features, including the following: + + - Provisioning: When you use the Provisioning Service, lifecycle states and roles both grant access to users in the form of access profiles. + + - Certifications: You can approve or revoke access profiles in certification campaigns, just like entitlements. + + - Access Requests: You can assign access profiles to applications, and when a user requests access to the app associated with an access profile and someone approves the request, access is granted to both the application and its associated access profile. + + - Roles: You can group one or more access profiles into a role to quickly assign access items based on an identity's role. + + In IdentityNow, administrators can use the Access drop-down menu and select Access Profiles to view, configure, and delete existing access profiles, as well as create new ones. + Administrators can enable and disable an access profile, and they can also make the following configurations: + + - Manage Entitlements: Manage the profile's access by adding and removing entitlements. + + - Access Requests: Configure access profiles to be requestable and establish an approval process for any requests that the access profile be granted or revoked. + Do not configure an access profile to be requestable without first establishing a secure access request approval process for the access profile. + + - Multiple Account Options: Define the logic IdentityNow uses to provision access to an identity with multiple accounts on the source. + + + Refer to the following link for more information about access profiles. + externalDocs: + description: Learn more about access profiles + url: https://documentation.sailpoint.com/saas/help/access/access-profiles.html + - name: Access Request Approvals + description: | + Use this API to implement and customize access request approval functionality. + With this functionality in place, administrators can delegate qualified users to review users' requests for access or managers' requests to revoke team members' access to applications, entitlements, or roles. + This enables more qualified users to review access requests and the others to spend their time on other tasks. + + In IdentityNow, users can request access to applications, entitlements, and roles, and managers can request that team members' access be revoked. + For applications and entitlements, administrators can set access profiles to require approval from the access profile owner, the application owner, the source owner, the requesting user's manager, or a governance group for access to be granted or revoked. + For roles, administrators can also set roles to allow access requests and require approval from the role owner, the requesting user's manager, or a governance group for access to be granted or revoked. + If the administrator designates a governance group as the required approver, any governance group member can approve the requests. + + When a user submits an access request, IdentityNow sends the first required approver in the queue an email notification, based on the access request configuration's approval and reminder escalation configuration. + + In Approvals in IdentityNow, required approvers can view pending access requests under the Requested tab and approve or deny them, or the approvers can reassign the requests to different reviewers for approval. + If the required approver approves the request and is the only reviewer required, IdentityNow grants or revokes access, based on the request. + If multiple reviewers are required, IdentityNow sends the request to the next reviewer in the queue, based on the access request configuration's approval reminder and escalation configuration. + The required approver can then view any completed access requests under the Reviewed tab. + + Refer to the following link for more information about access request approvals. + externalDocs: + description: Learn more about access request approvals + url: https://documentation.sailpoint.com/saas/help/requests/index.html + - name: Access Requests + description: | + Use this API to implement and customize access request functionality. + With this functionality in place, users can request access to applications, entitlements, or roles, and managers can request that team members' access be revoked. + This allows users to get access to the tools they need quickly and securely, and it allows managers to take away access to those tools. + + In the Request Center in IdentityNow, users can view available applications, roles, and entitlements and request access to them. + If the requested tools requires approval, the requests appear as 'Pending' under the My Requests tab until the required approver approves, rejects, or cancels them. + + Users can use My Requests to track and/or cancel the requests. + + In My Team on the IdentityNow Home, managers can submit requests to revoke their team members' access. + They can use the My Requests tab under Request Center to track and/or cancel the requests. + + Refer to the following link for more information about access requests. + externalDocs: + description: Learn more about access requests + url: https://documentation.sailpoint.com/saas/user-help/requests/requesting_access.html + - name: Account Activities + - name: Account Aggregations + - name: Accounts + - name: Certification Campaigns + - name: Certifications + - name: Connector Rule Management + - name: Connectors + - name: Custom Password Instructions + description: Operations for managing custom password instructions + - name: Entitlements + description: | + Use this API to implement and customize entitlement functionality. + With this functionality in place, administrators can view entitlements and configure them for use throughout IdentityNow in certifications, access profiles, and roles. + Administrators in IdentityNow can then grant users access to the entitlements or configure them so users themselves can request access to the entitlements whenever they need them. + With a good approval process, this entitlement functionality allows users to gain the specific access they need on sources quickly and securely. + + Entitlements represent access rights on sources. + Entitlements are the most granular form of access in IdentityNow. + Entitlements are often grouped into access profiles, and access profiles themselves are often grouped into roles, the broadest form of access in IdentityNow. + + For example, an Active Directory source in IdentityNow can have multiple entitlements: the first, 'Employees,' may represent the access all employees have at the organization, and a second, 'Developers,' may represent the access all developers have at the organization. + + An administrator can then create a broader set of access in the form of an access profile, 'AD Developers' grouping the 'Employees' entitlement with the 'Developers' entitlement. + + An administrator can then create an even broader set of access in the form of a role grouping the 'AD Developers' access profile with another profile, 'GitHub Developers,' grouping entitlements for the GitHub source. + + When users only need Active Directory employee access, they can request access to the 'Employees' entitlement. + + When users need both Active Directory employee and developer access, they can request access to the 'AD Developers' access profile. + + When users need both the 'AD Developers' access profile and the 'GitHub Developers' access profile, they can request access to the role grouping both. + + Administrators often use roles and access profiles within those roles to manage access so that users can gain access more quickly, but the hierarchy of access all starts with entitlements. + + Anywhere entitlements appear, you can select them to find more information about the following: + + - Cloud Access Details: These provide details about the cloud access entitlements on cloud-enabled sources. + + - Permissions: Permissions represent individual units of read/write/admin access to a system. + + - Relationships: These list each entitlement's parent and child relationships. + + - Type: This is the entitlement's type. Some sources support multiple types, each with a different attribute schema. + + IdentityNow uses entitlements in many features, including the following: + + - Certifications: Entitlements can be revoked from an identity that no longer needs them. + + - Roles: Roles can group access profiles which themselves group entitlements. You can grant and revoke access on a broad level with roles. Role membership criteria can grant roles to identities based on whether they have certain entitlements or attributes. + + - Access Profiles: Access profiles group entitlements. + They are the most important units of access in IdentityNow. + IdentityNow uses them in provisioning, certifications, and access requests, and administrators can configure them to grant very broad or very granular access. + + You cannot delete entitlements directly from IdentityNow. + Entitlements are deleted based on their inclusion in aggregations. + + Refer to https://documentation.sailpoint.com/saas/help/access/entitlements.html#deleting-entitlements more information about deleting entitlements. + + Refer to the following link for more information about entitlements. + externalDocs: + description: Learn more about entitlements + url: https://documentation.sailpoint.com/saas/help/access/index.html + - name: IAI Access Request Recommendations + - name: IAI Common Access + - name: IAI Outliers + - name: IAI Peer Group Strategies + - name: IAI Recommendations + - name: IAI Role Mining + - name: Identities + - name: Identity History + - name: Identity Profiles + - name: Lifecycle States + - name: Managed Clients + description: Read and write operations for managing client data and statuses + - name: Managed Clusters + description: Operations for accessing and managing client Clusters, including Log Configuration + - name: MFA Configuration + description: Configure and test multifactor authentication (MFA) methods + - name: Non-Employee Lifecycle Management + - name: Notifications + - name: OAuth Clients + - name: Org Config + description: Operations for managing org configuration settings (eg. time zone) + - name: Password Configuration + - name: Password Dictionary + - name: Password Management + description: Operations for managing identity's passwords + - name: Password Sync Groups + - name: Personal Access Tokens + - name: Public Identity Config + - name: Requestable Objects + - name: Role Insights + - name: Roles + description: | + Use this API to implement and customize role functionality. + With this functionality in place, administrators can create roles and configure them for use throughout IdentityNow. + IdentityNow can use established criteria to automatically assign the roles to qualified users. This enables users to get all the access they need quickly and securely and administrators to spend their time on other tasks. + + Entitlements represent the most granular level of access in IdentityNow. + Access profiles represent the next level and often group entitlements. + Roles represent the broadest level of access and often group access profiles. + + For example, an Active Directory source in IdentityNow can have multiple entitlements: the first, 'Employees,' may represent the access all employees have at the organization, and a second, 'Developers,' may represent the access all developers have at the organization. + + An administrator can then create a broader set of access in the form of an access profile, 'AD Developers' grouping the 'Employees' entitlement with the 'Developers' entitlement. + + An administrator can then create an even broader set of access in the form of a role grouping the 'AD Developers' access profile with another profile, 'GitHub Developers,' grouping entitlements for the GitHub source. + + When users only need Active Directory employee access, they can request access to the 'Employees' entitlement. + + When users need both Active Directory employee and developer access, they can request access to the 'AD Developers' access profile. + + When users need both the 'AD Developers' access profile and the 'GitHub Developers' access profile, they can request access to the role grouping both. + + Roles often represent positions within organizations. + For example, an organization's accountant can access all the tools the organization's accountants need with the 'Accountant' role. + If the accountant switches to engineering, a qualified member of the organization can quickly revoke the accountant's 'Accountant' access and grant access to the 'Engineer' role instead, granting access to all the tools the organization's engineers need. + + In IdentityNow, adminstrators can use the Access drop-down menu and select Roles to view, configure, and delete existing roles, as well as create new ones. + Administrators can enable and disable the role, and they can also make the following configurations: + + - Manage Access: Manage the role's access by adding or removing access profiles. + + - Define Assignment: Define the criteria IdentityNow uses to assign the role to identities. + Use the first option, 'Standard Criteria,' to provide specific criteria for assignment like specific account attributes, entitlements, or identity attributes. + Use the second, 'Identity List,' to specify the identities for assignment. + + - Access Requests: Configure roles to be requestable and establish an approval process for any requests that the role be granted or revoked. + Do not configure a role to be requestable without establishing a secure access request approval process for that role first. + + Refer to the following link for more information about roles. + externalDocs: + description: Learn more about roles + url: https://documentation.sailpoint.com/saas/help/provisioning/roles.html + - name: Search Attribute Configuration + - name: Segments + - name: Service Desk Integration + description: Operations for creating and accessing service desk integrations + - name: SOD Policy + description: Operations for Creating & Executing SOD (Seperation of Duties) policies + - name: SOD Violations + description: Operations for Predicting SOD (Seperation of Duties) violations + - name: Sources + - name: SP-Config + description: Import and export configuration for some objects between tenants. + - name: Tagged Objects + - name: Transforms + description: Operations for creating, managing, and deleting transforms + - name: Triggers + description: | + Event Triggers provide real-time updates to changes in IdentityNow so you can take action as soon as an event occurs, rather than poll an API endpoint for updates. IdentityNow provides a user interface within the admin console to create and manage trigger subscriptions. These endpoints allow for programatically creating and managing trigger subscriptions. + + There are two types of event triggers: + * `FIRE_AND_FORGET`: This trigger type will send a payload to each subscriber without needing a response. Each trigger of this type has a limit of **50 subscriptions**. + * `REQUEST_RESPONSE`: This trigger type will send a payload to a subscriber and expect a response back. Each trigger of this type may only have **one subscription**. + + ## Available Event Triggers + Production ready event triggers that are available in all tenants. + + | Name | ID | Type | Trigger condition | Schema(s) | + |-|-|-|-|-| + | [Access Request Dynamic Approver](https://developer.sailpoint.com/triggers/available-event-triggers/access-request-dynamic-approval-event-trigger.html) | idn:access-request-dynamic-approver | REQUEST_RESPONSE |After an access request is submitted. Expects the subscriber to respond with the ID of an identity or workgroup to add to the approval workflow. | [Input Schema](#section/Access-Request-Dynamic-Approver-Event-Trigger-Input) - [Output Schema](#section/Access-Request-Dynamic-Approver-Event-Trigger-Output) | + | [Access Request Decision](https://developer.sailpoint.com/triggers/available-event-triggers/access-request-postapproval-trigger.html) | idn:access-request-post-approval | FIRE_AND_FORGET | After an access request is approved. |[Input Schema](#section/Access-Request-Post-Approval-Event-Trigger-Input)| + | [Access Request Submitted](https://developer.sailpoint.com/triggers/available-event-triggers/access-request-preapproval-event-trigger.html) | idn:access-request-pre-approval | REQUEST_RESPONSE | After an access request is submitted. Expects the subscriber to respond with an approval decision. | [Input Schema](#section/Access-Request-Pre-Approval-Event-Trigger-Input) - [Output Schema](#section/Access-Request-Pre-Approval-Event-Trigger-Output) | + | Account Aggregation Completed | idn:account-aggregation-completed | FIRE_AND_FORGET | After an account aggregation completed, terminated, failed. | [Input Schema](#section/Account-Aggregation-Completed-Event-Trigger-Input) | + | Account Attributes Changed | idn:account-attributes-changed | FIRE_AND_FORGET | After an account aggregation, and one or more account attributes have changed. | [Input Schema](#section/Account-Attributes-Changed-Event-Trigger-Input) | + | Account Correlated | idn:account-correlated | FIRE_AND_FORGET | After an account is added to an identity. | [Input Schema](#section/Account-Correlated-Event-Trigger-Input) | + | [Accounts Collected for Aggregation](https://developer.sailpoint.com/triggers/available-event-triggers/account-aggregation-completed.html) | idn:aggregation-accounts-collected | FIRE_AND_FORGET | New, changed, and deleted accounts have been gathered during an aggregation and are being processed. | [Input Schema](#section/Accounts-Collected-for-Aggregation-Event-Trigger-Input) | + | Account Uncorrelated | idn:account-uncorrelated | FIRE_AND_FORGET | After an account is removed from an identity. | [Input Schema](#section/Account-Uncorrelated-Event-Trigger-Input) | + | Campaign Activated | idn:campaign-activated | FIRE_AND_FORGET | After a campaign is activated. | [Input Schema](#section/Campaign-Activated-Event-Trigger-Input) | + | Campaign Ended | idn:campaign-ended | FIRE_AND_FORGET | After a campaign ends. | [Input Schema](#section/Campaign-Ended-Event-Trigger-Input) | + | Campaign Generated | idn:campaign-generated | FIRE_AND_FORGET | After a campaign finishes generating. | [Input Schema](#section/Campaign-Generated-Event-Trigger-Input) | + | Certification Signed Off | idn:certification-signed-off | FIRE_AND_FORGET | After a certification is signed off by its reviewer. | [Input Schema](#section/Certification-Signed-Off-Event-Trigger-Input) | + | [Identity Attributes Changed](https://developer.sailpoint.com/triggers/available-event-triggers/identity-attribute-changed-event-trigger.html) | idn:identity-attributes-changed | FIRE_AND_FORGET | After One or more identity attributes changed. | [Input Schema](#section/Identity-Attributes-Changed-Event-Trigger-Input) | + | [Identity Created](https://developer.sailpoint.com/triggers/available-event-triggers/identity-created-event-trigger.html) | idn:identity-created | FIRE_AND_FORGET | After an identity is created. | [Input Schema](#section/Identity-Created-Event-Trigger-Input) | + | [Provisioning Completed](https://developer.sailpoint.com/triggers/available-event-triggers/provisioning-action-completed-trigger.html) | idn:post-provisioning | FIRE_AND_FORGET | After a provisioning action completed on a source. | [Input Schema](#section/Provisioning-Completed-Event-Trigger-Input) | + | [Saved Search Complete](https://developer.sailpoint.com/triggers/available-event-triggers/saved-search-completed.html) | idn:saved-search-complete | FIRE_AND_FORGET | After a scheduled search completed. | [Input Schema](#section/Saved-Search-Complete-Event-Trigger-Input) | + | [VA Cluster Status Changed Event](https://developer.sailpoint.com/triggers/available-event-triggers/va-cluster-status-change-event-trigger.html) | idn:va-cluster-status-change | FIRE_AND_FORGET | After the status of a VA cluster has changed. | [Input Schema](#section/VA-Cluster-Status-Change-Event-Event-Trigger-Input) | + + ## Early Access Event Triggers + Triggers that are in-development and not ready for production use. Please contact support to enable these triggers in your tenant. + + | Name | ID | Type | Trigger condition | Schema(s) | + |-|-|-|-|-| + | [Identity Deleted](https://developer.sailpoint.com/triggers/early-access-event-triggers/identity-deleted-event-trigger.html) | idn:identity-deleted | FIRE_AND_FORGET | After an identity is deleted. | [Input Schema](#section/Identity-Deleted-Event-Trigger-Input) | + | [Source Account Created](https://developer.sailpoint.com/triggers/early-access-event-triggers/source-account-created-trigger.html) | idn:source-account-created | FIRE_AND_FORGET | After a source account is created. | [Input Schema](#section/Source-Account-Created-Event-Trigger-Input) | + | [Source Account Deleted](https://developer.sailpoint.com/triggers/early-access-event-triggers/source-account-deleted-trigger.html) | idn:source-account-deleted | FIRE_AND_FORGET | After a source account is deleted. | [Input Schema](#section/Source-Account-Deleted-Event-Trigger-Input) | + | [Source Account Updated](https://developer.sailpoint.com/triggers/early-access-event-triggers/source-account-updated-trigger.html) | idn:source-account-updated | FIRE_AND_FORGET | After a source account is changed. | [Input Schema](#section/Source-Account-Updated-Event-Trigger-Input) | + | [Source Created](https://developer.sailpoint.com/triggers/early-access-event-triggers/source-created-trigger.html) | idn:source-created | FIRE_AND_FORGET | After a source is created. | [Input Schema](#section/Source-Created-Event-Trigger-Input) | + | [Source Deleted](https://developer.sailpoint.com/triggers/early-access-event-triggers/source-deleted-trigger.html) | idn:source-deleted | FIRE_AND_FORGET | After a source is deleted. | [Input Schema](#section/Source-Deleted-Event-Trigger-Input) | + | [Source Updated](https://developer.sailpoint.com/triggers/early-access-event-triggers/source-updated-trigger.html) | idn:source-updated | FIRE_AND_FORGET | After configuration changes have been made to a source. | [Input Schema](#section/Source-Updated-Event-Trigger-Input) | + + externalDocs: + description: Getting started with event triggers + url: https://developer.sailpoint.com/triggers/event-triggers-overview.html + - name: Work Items + description: Operations for retrieving and modifying details relating to Work Items. + - name: Workflows + description: | + Workflows allow administrators to create custom automation scripts directly within IdentityNow. These automation scripts respond to [event triggers](https://developer.sailpoint.com/triggers/getting_started.html) and perform a series of actions to perform tasks that are either too cumbersome or not available in the IdentityNow UI. Workflows can be configured via a graphical user interface within IdentityNow, or by creating and uploading a JSON formatted script to the Workflow service. The Workflows API collection provides the necessary functionality to create, manage, and test your workflows via REST. + + Workflows is currently in Beta, and is not generally available to all customer tenants. If you would like to participate in the beta program, please [submit an application](https://app.smartsheet.com/b/form/e758ab109dc649589f57b4b5c41d4373). You must be a customer or partner to participate. + + For more information about how to build a workflow in the visual builder in the IdentityNow UI, use the documentation in the following link: + externalDocs: + description: Workflow User Guide and Technical Documentation + url: https://documentation.sailpoint.com/saas/help/workflows/workflow-basics.html + - name: Event Trigger Models + x-displayName: Trigger Models + description: | + ## Access Request Dynamic Approver Event Trigger Input + + + ## Access Request Dynamic Approver Event Trigger Output + + + ## Access Request Post Approval Event Trigger Input + + + ## Access Request Pre Approval Event Trigger Input + + + ## Access Request Pre Approval Event Trigger Output + + + ## Account Aggregation Completed Event Trigger Input + + + ## Account Attributes Changed Event Trigger Input + + + ## Account Correlated Event Trigger Input + + + ## Accounts Collected for Aggregation Event Trigger Input + + + ## Account Uncorrelated Event Trigger Input + + + ## Campaign Activated Event Trigger Input + + + ## Campaign Ended Event Trigger Input + + + ## Campaign Generated Event Trigger Input + + + ## Certification Signed Off Event Trigger Input + + + ## Identity Attributes Changed Event Trigger Input + + + ## Identity Created Event Trigger Input + + + ## Identity Deleted Event Trigger Input + + + ## Provisioning Completed Event Trigger Input + + + ## Saved Search Complete Event Trigger Input + + + ## Source Account Created Event Trigger Input + + + ## Source Account Deleted Event Trigger Input + + + ## Source Account Updated Event Trigger Input + + + ## Source Created Event Trigger Input + + + ## Source Deleted Event Trigger Input + + + ## Source Updated Event Trigger Input + + + ## VA Cluster Status Change Event Event Trigger Input + + + +# x-tagGroups: +# - name: Access +# tags: +# - Access Profiles +# - Access Request Approvals +# - Access Requests +# - Entitlements +# - Requestable Objects +# - Roles +# - Segments +# - name: Accounts +# tags: +# - Account Activities +# - Account Aggregations +# - Accounts +# - name: Certification Campaigns +# tags: +# - Certification Campaigns +# - Certifications +# - Work Items +# - name: Connections +# tags: +# - Connector Rule Management +# - Connectors +# - Managed Clients +# - Managed Clusters +# - Service Desk Integration +# - Sources +# - name: Event Triggers +# tags: +# - Triggers +# - Event Trigger Models +# - name: Global Settings +# tags: +# - MFA Configuration +# - Notifications +# - OAuth Clients +# - Personal Access Tokens +# - SP-Config +# - name: IdentityAI +# tags: +# - IAI Access Request Recommendations +# - IAI Common Access +# - IAI Outliers +# - IAI Peer Group Strategies +# - IAI Recommendations +# - IAI Role Mining +# - Role Insights +# - name: Identities +# tags: +# - Identity History +# - Identity Profiles +# - Public Identity Config +# - Transforms +# - name: Lifecycles +# tags: +# - Lifecycle States +# - Non-Employee Lifecycle Management +# - name: Password Management +# tags: +# - Custom Password Instructions +# - Password Configuration +# - Password Dictionary +# - Password Management +# - Password Sync Groups +# - name: Search +# tags: +# - Search Attribute Configuration +# - name: Separation of Duties (SOD) +# tags: +# - SOD Policy +# - SOD Violations +# - Tagged Objects +# - name: Workflows +# tags: +# - Workflows + +security: + - oauth2: [] + +components: + securitySchemes: + oauth2: + type: oauth2 + description: | + OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information. + - Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens) + - Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow) + - Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow) + + Which authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use) + + Learn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details) + flows: + clientCredentials: + tokenUrl: https://tenant.api.identitynow.com/oauth/token + scopes: + 'sp:scopes:default': 'default scope' + 'sp:scopes:all': 'access to all scopes' + authorizationCode: + authorizationUrl: https://tenant.identitynow.com/oauth/authorize + tokenUrl: https://tenant.api.identitynow.com/oauth/token + scopes: + 'sp:scopes:default': 'default scope' + 'sp:scopes:all': 'access to all scopes' + schemas: + AccountAggregation: + $ref: './beta/schemas/AccountAggregationStatus.yaml' + ApprovalItems: + $ref: './beta/schemas/ApprovalItemDetails.yaml' + slimcampaign: + $ref: './beta/schemas/SlimCampaign.yaml' + fullcampaign: + $ref: './beta/schemas/Campaign.yaml' + IdentityProfile: + $ref: './beta/schemas/IdentityProfile.yaml' + ManagedClient: + $ref: './beta/schemas/ManagedClient.yaml' + ManagedClientStatus: + $ref: './beta/schemas/ManagedClientStatus.yaml' + MessageCatalogDto: + $ref: './beta/schemas/MessageCatalogDto.yaml' + PeerGroupMember: + $ref: './beta/schemas/PeerGroupMember.yaml' + RecommendationRequestDto: + $ref: './beta/schemas/RecommendationRequestDto.yaml' + RecommendationResponseDto: + $ref: './beta/schemas/RecommendationResponseDto.yaml' + RemediationItems: + $ref: './beta/schemas/RemediationItemDetails.yaml' + SearchAttributeConfig: + $ref: './beta/schemas/SearchAttributeConfig.yaml' + WorkItems: + $ref: './beta/schemas/WorkItems.yaml' + WorkItemsCount: + $ref: './beta/schemas/WorkItemsCount.yaml' + WorkItemsSummary: + $ref: './beta/schemas/WorkItemsSummary.yaml' + Form: + $ref: './beta/schemas/FormDetails.yaml' + FormItem: + $ref: './beta/schemas/FormItemDetails.yaml' + Section: + $ref: './beta/schemas/SectionDetails.yaml' + Field: + $ref: './beta/schemas/FieldDetails.yaml' + Trigger-Input-AccessRequestDynamicApprover: + $ref: './beta/schemas/trigger/example-input/AccessRequestDynamicApprover.yaml' + Trigger-Input-AccessRequestPostApproval: + $ref: './beta/schemas/trigger/example-input/AccessRequestPostApproval.yaml' + Trigger-Input-AccessRequestPreApproval: + $ref: './beta/schemas/trigger/example-input/AccessRequestPreApproval.yaml' + Trigger-Input-AccountAggregationCompleted: + $ref: './beta/schemas/trigger/example-input/AccountAggregationCompleted.yaml' + Trigger-Input-AccountAttributesChanged: + $ref: './beta/schemas/trigger/example-input/AccountAttributesChanged.yaml' + Trigger-Input-AccountCorrelated: + $ref: './beta/schemas/trigger/example-input/AccountCorrelated.yaml' + Trigger-Input-AccountsCollectedForAggregation: + $ref: './beta/schemas/trigger/example-input/AccountsCollectedForAggregation.yaml' + Trigger-Input-AccountUncorrelated: + $ref: './beta/schemas/trigger/example-input/AccountUncorrelated.yaml' + Trigger-Input-CampaignActivated: + $ref: './beta/schemas/trigger/example-input/CampaignActivated.yaml' + Trigger-Input-CampaignEnded: + $ref: './beta/schemas/trigger/example-input/CampaignEnded.yaml' + Trigger-Input-CampaignGenerated: + $ref: './beta/schemas/trigger/example-input/CampaignGenerated.yaml' + Trigger-Input-CertificationSignedOff: + $ref: './beta/schemas/trigger/example-input/CertificationSignedOff.yaml' + Trigger-Input-IdentityAttributesChanged: + $ref: './beta/schemas/trigger/example-input/IdentityAttributesChanged.yaml' + Trigger-Input-IdentityCreated: + $ref: './beta/schemas/trigger/example-input/IdentityCreated.yaml' + Trigger-Input-IdentityDeleted: + $ref: './beta/schemas/trigger/example-input/IdentityDeleted.yaml' + Trigger-Input-ProvisioningCompleted: + $ref: './beta/schemas/trigger/example-input/ProvisioningCompleted.yaml' + Trigger-Input-SavedSearchComplete: + $ref: './beta/schemas/trigger/example-input/SavedSearchComplete.yaml' + Trigger-Input-SourceAccountCreated: + $ref: './beta/schemas/trigger/example-input/SourceAccount.yaml' + Trigger-Input-SourceAccountDeleted: + $ref: './beta/schemas/trigger/example-input/SourceAccount.yaml' + Trigger-Input-SourceAccountUpdated: + $ref: './beta/schemas/trigger/example-input/SourceAccount.yaml' + Trigger-Input-SourceCreated: + $ref: './beta/schemas/trigger/example-input/SourceCreated.yaml' + Trigger-Input-SourceDeleted: + $ref: './beta/schemas/trigger/example-input/SourceDeleted.yaml' + Trigger-Input-SourceUpdated: + $ref: './beta/schemas/trigger/example-input/SourceUpdated.yaml' + Trigger-Input-VAClusterStatusChangeEvent: + $ref: './beta/schemas/trigger/example-input/VAClusterStatusChangeEvent.yaml' + Trigger-Output-AccessRequestDynamicApprover: + $ref: './beta/schemas/trigger/example-output/AccessRequestDynamicApprover.yaml' + Trigger-Output-AccessRequestPreApproval: + $ref: './beta/schemas/trigger/example-output/AccessRequestPreApproval.yaml' + +paths: + /access-profiles: + $ref: './beta/paths/access-profiles.yaml' + /access-profiles/{id}: + $ref: './beta/paths/access-profile.yaml' + /access-profiles/bulk-delete: + $ref: './beta/paths/access-profile-bulk-delete.yaml' + /access-profiles/{id}/entitlements: + $ref: './beta/paths/access-profile-entitlements.yaml' + /access-requests: + $ref: './v3/paths/access-requests.yaml' + /access-requests/cancel: + $ref: './v3/paths/access-request-cancel.yaml' + /access-request-config: + $ref: './v3/paths/access-request-config.yaml' + /access-request-status: + $ref: './v3/paths/access-request-status.yaml' + /access-request-approvals/pending: + $ref: './beta/paths/pending-access-request-approvals.yaml' + /access-request-approvals/completed: + $ref: './beta/paths/completed-access-request-approvals.yaml' + /access-request-approvals/{approvalId}/approve: + $ref: './beta/paths/approve-access-request-approval.yaml' + /access-request-approvals/{approvalId}/reject: + $ref: './beta/paths/reject-access-request-approval.yaml' + /access-request-approvals/{approvalId}/forward: + $ref: './beta/paths/forward-access-request-approval.yaml' + /access-request-approvals/approval-summary: + $ref: './beta/paths/access-request-approval-summary.yaml' + /ai-access-request-recommendations: + $ref: './beta/paths/ai-access-request-recommendations.yaml' + /ai-access-request-recommendations/ignored-items: + $ref: './beta/paths/ai-access-request-recommendations-ignored.yaml' + /ai-access-request-recommendations/requested-items: + $ref: './beta/paths/ai-access-request-recommendations-requested.yaml' + /ai-access-request-recommendations/viewed-items: + $ref: './beta/paths/ai-access-request-recommendations-viewed.yaml' + /ai-access-request-recommendations/viewed-items/bulk-create: + $ref: './beta/paths/ai-access-request-recommendations-viewed-bulk-create.yaml' + /accounts: + $ref: './beta/paths/accounts.yaml' + /accounts/{id}: + $ref: './beta/paths/account.yaml' + /accounts/{id}/entitlements: + $ref: './beta/paths/accounts-id-entitlements.yaml' + /accounts/{id}/reload: + $ref: './beta/paths/accounts-id-reload.yaml' + /accounts/{id}/enable: + $ref: './beta/paths/accounts-id-enable.yaml' + /accounts/{id}/disable: + $ref: './beta/paths/accounts-id-disable.yaml' + /accounts/{id}/unlock: + $ref: './beta/paths/accounts-id-unlock.yaml' + /accounts/search-attribute-config: + $ref: './beta/paths/searchAttributeConfig.yaml' + /accounts/search-attribute-config/{name}: + $ref: './beta/paths/searchAttributeConfig-get-patch-delete.yaml' + /account-activities: + $ref: './beta/paths/account-activities.yaml' + /account-activities/{id}: + $ref: './beta/paths/account-activity.yaml' + /account-aggregations/{id}/status: + $ref: './beta/paths/account-aggregation-status.yaml' + /campaigns: + $ref: './beta/paths/campaigns.yaml' + /campaigns/delete: + $ref: './beta/paths/campaigns-delete.yaml' + /campaigns/{id}: + $ref: './beta/paths/campaign.yaml' + /campaigns/{id}/activate: + $ref: './beta/paths/campaign-activate.yaml' + /campaigns/{id}/complete: + $ref: './beta/paths/campaign-complete.yaml' + /campaigns/{id}/run-remediation-scan: + $ref: './beta/paths/campaign-run-remediation-scan.yaml' + /campaigns/{id}/reassign: + $ref: './beta/paths/campaign-admin-cert-reassign.yaml' + /campaigns/{id}/reports: + $ref: './beta/paths/campaign-reports.yaml' + /campaigns/{id}/run-report/{type}: + $ref: './beta/paths/campaign-run-report.yaml' + /campaigns/reports-configuration: + $ref: './beta/paths/campaign-reports-configuration.yaml' + /campaign-templates: + $ref: './beta/paths/campaign-templates.yaml' + /campaign-templates/{id}: + $ref: './beta/paths/campaign-template.yaml' + /campaign-templates/{id}/generate: + $ref: './beta/paths/campaign-template-generate.yaml' + /campaign-templates/{id}/schedule: + $ref: './beta/paths/campaign-template-schedule.yaml' + /certifications/{id}/reassign-async: + $ref: './beta/paths/identity-certifications-reassign-async.yaml' + /certifications/{id}/tasks/{taskId}: + $ref: './beta/paths/identity-certifications-task-status.yaml' + /certifications/{id}/tasks-pending: + $ref: './beta/paths/identity-certifications-tasks-pending.yaml' + /certifications/{certificationId}/access-review-items/{itemId}/permissions: + $ref: './beta/paths/identity-certifications-item-permissions.yaml' + /certifications/{id}/reviewers: + $ref: './beta/paths/certifications-reviewers.yaml' + /connector-rules: + $ref: './beta/paths/connector-rules.yaml' + /connector-rules/{id}: + $ref: './beta/paths/connector-rule.yaml' + /connector-rules/validate: + $ref: './beta/paths/connector-rule-validate.yaml' + /connectors: + $ref: './beta/paths/connectors.yaml' + /custom-password-instructions: + $ref: './beta/paths/custom-password-instructions.yaml' + /custom-password-instructions/{pageId}: + $ref: './beta/paths/custom-password-instruction.yaml' + /entitlements: + $ref: './beta/paths/entitlements.yaml' + /entitlements/{id}: + $ref: './beta/paths/ears-entitlement.yaml' + /entitlements/{id}/parents: + $ref: './beta/paths/ears-entitlement-parents.yaml' + /entitlements/{id}/children: + $ref: './beta/paths/ears-entitlement-children.yaml' + /entitlements/bulk-update: + $ref: './beta/paths/ears-entitlement-bulk-update.yaml' + /generate-password-reset-token/digit: + $ref: './beta/paths/password-reset-digit-token.yaml' + /historical-identities: + $ref: './beta/paths/historical-identities.yaml' + /historical-identities/{id}: + $ref: './beta/paths/historical-identity.yaml' + /historical-identities/{id}/access-items: + $ref: './beta/paths/historical-identity-access-items.yaml' + /historical-identities/{id}/snapshots: + $ref: './beta/paths/historical-identity-snapshots.yaml' + /historical-identities/{id}/snapshot-summary: + $ref: './beta/paths/historical-identity-snapshot-summary.yaml' + /historical-identities/{id}/snapshots/{date}: + $ref: './beta/paths/historical-identity-snapshot-date.yaml' + /historical-identities/{id}/snapshots/{date}/access-items: + $ref: './beta/paths/historical-identity-snapshot-date-access-items.yaml' + /common-access: + $ref: './beta/paths/common-access.yaml' + /common-access/update-status: + $ref: './beta/paths/common-access-update-status.yaml' + /historical-identities/{id}/events: + $ref: './beta/paths/historical-identity-events.yaml' + /historical-identities/{id}/start-date: + $ref: './beta/paths/historical-identity-start-date.yaml' + /historical-identities/{id}/compare: + $ref: './beta/paths/historical-identity-compare.yaml' + /historical-identities/{id}/compare/{access-type}: + $ref: './beta/paths/historical-identity-compare-type.yaml' + /identities/{identityId}/synchronize-attributes: + $ref: './beta/paths/identity-synchronize-attributes.yaml' + /identity-profiles: + $ref: './beta/paths/identity-profiles.yaml' + /identity-profiles/bulk-delete: + $ref: './beta/paths/identity-profiles-bulk-delete.yaml' + /identity-profiles/export: + $ref: './beta/paths/identity-profiles-export.yaml' + /identity-profiles/import: + $ref: './beta/paths/identity-profiles-import.yaml' + /identity-profiles/identity-preview: + $ref: './beta/paths/identity-profiles-identity-preview.yaml' + /identity-profiles/{identity-profile-id}: + $ref: './beta/paths/identity-profile.yaml' + /identity-profiles/{identity-profile-id}/default-identity-attribute-config: + $ref: './beta/paths/identity-profile-default-config.yaml' + /identity-profiles/{identity-profile-id}/refresh-identities: + $ref: './beta/paths/identity-profile-refresh-identities.yaml' + /identity-profiles/{identity-profile-id}/lifecycle-states/{lifecycle-state-id}: + $ref: './beta/paths/identity-profile-lifecycle-state.yaml' + /non-employee-records: + $ref: './beta/paths/non-employee-records.yaml' + /non-employee-records/{id}: + $ref: './beta/paths/non-employee-record.yaml' + /non-employee-records/bulk-delete: + $ref: './beta/paths/non-employee-records-bulk-delete.yaml' + /non-employee-requests: + $ref: './beta/paths/non-employee-requests.yaml' + /non-employee-requests/{id}: + $ref: './beta/paths/non-employee-request.yaml' + /non-employee-requests/summary/{requested-for}: + $ref: './beta/paths/non-employee-request-summary-get.yaml' + /non-employee-sources: + $ref: './beta/paths/non-employee-sources.yaml' + /non-employee-sources/{sourceId}: + $ref: './beta/paths/non-employee-source.yaml' + /non-employee-sources/{id}/non-employees/download: + $ref: './beta/paths/non-employee-sources-export-non-employees.yaml' + /non-employee-sources/{id}/non-employee-bulk-upload: + $ref: './beta/paths/non-employee-sources-bulk-upload-non-employees.yaml' + /non-employee-sources/{id}/non-employee-bulk-upload/status: + $ref: './beta/paths/non-employee-sources-bulk-upload-status.yaml' + /non-employee-sources/{id}/schema-attributes-template/download: + $ref: './beta/paths/non-employee-sources-export-schema-attributes-template.yaml' + /non-employee-approvals: + $ref: './beta/paths/non-employee-approval-list.yaml' + /non-employee-approvals/{id}: + $ref: './beta/paths/non-employee-approve-get.yaml' + /non-employee-approvals/{id}/approve: + $ref: './beta/paths/non-employee-approve-request.yaml' + /non-employee-approvals/{id}/reject: + $ref: './beta/paths/non-employee-reject-request.yaml' + /non-employee-approvals/summary/{requested-for}: + $ref: './beta/paths/non-employee-approval-summary.yaml' + /non-employee-sources/{sourceId}/schema-attributes: + $ref: './beta/paths/non-employee-sources-schema-attributes.yaml' + /non-employee-sources/{sourceId}/schema-attributes/{attributeId}: + $ref: './beta/paths/non-employee-sources-schema-attribute.yaml' + /managed-clients/{id}/status: + $ref: './beta/paths/managed-client-status.yaml' + /managed-clusters/{id}: + $ref: './beta/paths/managed-cluster-path.yaml' + /managed-clusters/{id}/log-config: + $ref: './beta/paths/managed-cluster-log-config.yaml' + /managed-clusters: + $ref: './beta/paths/managed-clusters.yaml' + /mfa/{method}/config: + $ref: './beta/paths/mfa-config.yaml' + /mfa/{method}/test: + $ref: './beta/paths/mfa-config-test.yaml' + /notification-template-defaults: + $ref: './beta/paths/notification-template-defaults.yaml' + /notification-templates: + $ref: './beta/paths/notification-templates.yaml' + /notification-templates/{id}: + $ref: './beta/paths/notification-template.yaml' + /notification-templates/bulk-delete: + $ref: './beta/paths/notification-templates-bulk-delete.yaml' + /oauth-clients: + $ref: './beta/paths/oauth-clients.yaml' + /oauth-clients/{id}: + $ref: './beta/paths/oauth-client.yaml' + /org-config: + $ref: './beta/paths/org-config.yaml' + /org-config/valid-time-zones: + $ref: './beta/paths/org-config-valid-time-zones.yaml' + /outlier-summaries: + $ref: './beta/paths/outlier-summaries.yaml' + /outlier-summaries/latest: + $ref: './beta/paths/outlier-summaries-latest.yaml' + /outliers: + $ref: './beta/paths/outliers.yaml' + /outliers/ignore: + $ref: './beta/paths/outliers-ignore.yaml' + /outliers/unignore: + $ref: './beta/paths/outliers-unignore.yaml' + /outliers/export: + $ref: './beta/paths/outliers-export.yaml' + /password-dictionary: + $ref: './beta/paths/password-dictionary.yaml' + /query-password-info: + $ref: './beta/paths/query-password-info.yaml' + /set-password: + $ref: './beta/paths/set-password.yaml' + /password-change-status/{id}: + $ref: './beta/paths/password-change-status.yaml' + /password-sync-groups: + $ref: './beta/paths/password-sync-groups.yaml' + /password-sync-groups/{id}: + $ref: './beta/paths/password-sync-group.yaml' + /password-org-config: + $ref: './beta/paths/password-org-config.yaml' + /peer-group-strategies/{strategy}/identity-outliers: + $ref: './beta/paths/peer-group-strategies.yaml' + /personal-access-tokens: + $ref: './beta/paths/personal-access-tokens.yaml' + /personal-access-tokens/{id}: + $ref: './beta/paths/personal-access-token.yaml' + /public-identities-config: + $ref: './beta/paths/public-identities-config.yaml' + /notification-template-context: + $ref: './beta/paths/notification-template-context.yaml' + /notification-preferences/{key}: + $ref: './beta/paths/notification-preferences.yaml' + /recommendations/request: + $ref: './beta/paths/recommendations-request.yaml' + /recommendations/config: + $ref: './beta/paths/recommendations-config.yaml' + /requestable-objects: + $ref: './v3/paths/requestable-object-list.yaml' + /role-insights/requests: + $ref: './beta/paths/role-insights-requests.yaml' + /role-insights/requests/{id}: + $ref: './beta/paths/role-insights-request.yaml' + /role-insights/summary: + $ref: './beta/paths/role-insights-summary.yaml' + /role-insights: + $ref: './beta/paths/role-insights.yaml' + /role-insights/{insightId}: + $ref: './beta/paths/role-insight.yaml' + /role-insights/{insightId}/entitlement-changes: + $ref: './beta/paths/role-insights-entitlement-changes.yaml' + /role-insights/{insightId}/entitlement-changes/download: + $ref: './beta/paths/role-insights-entitlement-changes-download.yaml' + /role-insights/{insightId}/current-entitlements: + $ref: './beta/paths/role-insights-current-entitlements.yaml' + /role-insights/{insightId}/entitlement-changes/{entitlementId}/identities: + $ref: './beta/paths/role-insights-entitlement-changes-identities.yaml' + /role-mining-sessions: + $ref: './beta/paths/role-mining-sessions.yaml' + /role-mining-sessions/{sessionId}: + $ref: './beta/paths/role-mining-session.yaml' + /role-mining-sessions/{sessionId}/status: + $ref: './beta/paths/role-mining-session-status.yaml' + /role-mining-sessions/{sessionId}/potential-role-summaries: + $ref: './beta/paths/role-mining-session-potential-role-summaries.yaml' + /role-mining-sessions/{sessionId}/potential-role-summaries/{potentialRoleId}: + $ref: './beta/paths/role-mining-session-potential-role-summary.yaml' + /role-mining-sessions/{sessionId}/potential-role-summaries/{potentialRoleId}/applications: + $ref: './beta/paths/role-mining-session-potential-role-applications.yaml' + /role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/entitlement-popularities: + $ref: './beta/paths/role-mining-potential-role-entitlement-popularities.yaml' + /role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/entitlement-popularity-distribution: + $ref: './beta/paths/role-mining-potential-role-entitlement-popularity-distribution.yaml' + /role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/edit-entitlements: + $ref: './beta/paths/role-mining-potential-role-edit-entitlements.yaml' + /role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/identities: + $ref: './beta/paths/role-mining-potential-role-identities.yaml' + /role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export: + $ref: './beta/paths/role-mining-session-potential-role-export.yaml' + /role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export-async: + $ref: './beta/paths/role-mining-session-potential-role-export-async.yaml' + /role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export-async/{exportId}: + $ref: './beta/paths/role-mining-session-potential-role-export-status.yaml' + /role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export-async/{exportId}/download: + $ref: './beta/paths/role-mining-session-potential-role-export-download.yaml' + /role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/provision: + $ref: './beta/paths/role-mining-potential-role-provision.yaml' + /role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/excluded-entitlements: + $ref: './beta/paths/role-mining-potential-role-excluded-entitlements.yaml' + /roles: + $ref: './beta/paths/roles.yaml' + /roles/{id}: + $ref: './beta/paths/role.yaml' + /roles/{id}/assigned-identities: + $ref: './beta/paths/role-assigned-identities.yaml' + /segments: + $ref: './beta/paths/segments.yaml' + /segments/{id}: + $ref: './beta/paths/segment.yaml' + /send-test-notification: + $ref: './beta/paths/send-test-notification.yaml' + /service-desk-integrations: + $ref: './beta/paths/service-desk-integrations.yaml' + /service-desk-integrations/{id}: + $ref: './beta/paths/service-desk-integration.yaml' + /service-desk-integrations/types: + $ref: './beta/paths/service-desk-integration-types.yaml' + /service-desk-integrations/templates/{scriptName}: + $ref: './beta/paths/service-desk-integration-template.yaml' + /service-desk-integrations/status-check-configuration: + $ref: './beta/paths/service-desk-integration-configuration.yaml' + /sp-config/export: + $ref: './beta/paths/sp-config-export.yaml' + /sp-config/export/{id}: + $ref: './beta/paths/sp-config-export-status.yaml' + /sp-config/export/{id}/download: + $ref: './beta/paths/sp-config-export-download.yaml' + /sp-config/import: + $ref: './beta/paths/sp-config-import.yaml' + /sp-config/import/{id}: + $ref: './beta/paths/sp-config-import-status.yaml' + /sp-config/import/{id}/download: + $ref: './beta/paths/sp-config-import-download.yaml' + /sp-config/config-objects: + $ref: './beta/paths/sp-config-objects.yaml' + /sources: + $ref: './beta/paths/sources.yaml' + /sources/{id}: + $ref: './beta/paths/source.yaml' + /sources/{id}/attribute-sync-config: + $ref: './beta/paths/attr-sync-config-source.yaml' + /sources/{sourceId}/connector/check-connection: + $ref: './beta/paths/source-connector-check-connection.yaml' + /sources/{sourceId}/connector/peek-resource-objects: + $ref: './beta/paths/source-connector-peek-resource-objects.yaml' + /sources/{sourceId}/connector/ping-cluster: + $ref: './beta/paths/source-connector-ping-cluster.yaml' + /sources/{sourceId}/connector/test-configuration: + $ref: './beta/paths/source-connector-test-configuration.yaml' + /sources/{sourceId}/connectors/source-config: + $ref: './beta/paths/source-connectors-source-config.yaml' + /sources/{sourceId}/provisioning-policies: + $ref: './v3/paths/provisioning-policies.yaml' + /sources/{sourceId}/provisioning-policies/{usageType}: + $ref: './v3/paths/provisioning-policy.yaml' + /sources/{sourceId}/provisioning-policies/bulk-update: + $ref: './v3/paths/provisioning-policies-bulk-update.yaml' + /sources/{sourceId}/schemas: + $ref: './beta/paths/schemas.yaml' + /sources/{sourceId}/schemas/{schemaId}: + $ref: './beta/paths/schema.yaml' + /sources/{id}/schemas/accounts: + $ref: './beta/paths/source-accounts-schema.yaml' + /sources/{id}/schemas/entitlements: + $ref: './beta/paths/source-entitlements-schema.yaml' + /sources/{sourceId}/upload-connector-file: + $ref: './beta/paths/source-upload-connector-file.yaml' + /sources/{id}/synchronize-attributes: + $ref: './beta/paths/source-synchronize-attributes.yaml' + /tagged-objects: + $ref: './beta/paths/tagged-objects.yaml' + /tagged-objects/{type}: + $ref: './beta/paths/tagged-objects-type.yaml' + /tagged-objects/{type}/{id}: + $ref: './beta/paths/tagged-object.yaml' + /tagged-objects/bulk-add: + $ref: './beta/paths/bulk-add-tagged-objects.yaml' + /tagged-objects/bulk-remove: + $ref: './beta/paths/bulk-remove-tagged-objects.yaml' + /transforms: + $ref: './beta/paths/transforms.yaml' + /transforms/{id}: + $ref: './beta/paths/transform.yaml' + /translation-catalogs/{catalog-id}: + $ref: './beta/paths/message-catalog.yaml' + /triggers: + $ref: './beta/paths/triggers.yaml' + /trigger-subscriptions: + $ref: './beta/paths/trigger-subscriptions.yaml' + /trigger-subscriptions/{id}: + $ref: './beta/paths/trigger-subscription.yaml' + /trigger-subscriptions/validate-filter: + $ref: './beta/paths/trigger-subscriptions-validate-filter.yaml' + /trigger-invocations/status: + $ref: './beta/paths/trigger-invocations-status.yaml' + /trigger-invocations/{id}/complete: + $ref: './beta/paths/trigger-invocations-complete.yaml' + /trigger-invocations/test: + $ref: './beta/paths/trigger-invocations-test.yaml' + /verified-from-addresses: + $ref: './beta/paths/verified-from-addresses.yaml' + /verified-from-addresses/{id}: + $ref: './beta/paths/verified-from-address.yaml' + /sod-policies: + $ref: './beta/paths/sod-policies.yaml' + /sod-policies/{id}: + $ref: './beta/paths/sod-policy.yaml' + /sod-policies/{id}/schedule: + $ref: './beta/paths/sod-schedule.yaml' + /sod-policies/{id}/violation-report/run: + $ref: './beta/paths/sod-report-run.yaml' + /sod-policies/{id}/violation-report: + $ref: './beta/paths/sod-violation-report.yaml' + /sod-violations/predict: + $ref: './beta/paths/sod/predict-violations.yaml' + /sod-violation-report-status/{reportResultId}: + $ref: './beta/paths/sod-violation-report-status.yaml' + /sod-violation-report/run: + $ref: './beta/paths/sod-all-report-run.yaml' + /sod-violation-report: + $ref: './beta/paths/sod-all-report-status.yaml' + /sod-violation-report/{reportResultId}/download: + $ref: './beta/paths/sod-download-default-report.yaml' + /sod-violation-report/{reportResultId}/download/{fileName}: + $ref: './beta/paths/sod-download-custom-report.yaml' + /work-items: + $ref: './beta/paths/work-items.yaml' + /work-items/completed: + $ref: './beta/paths/work-items-completed.yaml' + /work-items/count: + $ref: './beta/paths/work-items-count.yaml' + /work-items/count/completed: + $ref: './beta/paths/work-items-completed-count.yaml' + /work-items/summary: + $ref: './beta/paths/work-items-summary.yaml' + /work-items/{id}: + $ref: './beta/paths/work-item.yaml' + /work-items/{id}/approve/{approvalItemId}: + $ref: './beta/paths/work-items-approve-approval-item.yaml' + /work-items/{id}/reject/{approvalItemId}: + $ref: './beta/paths/work-items-reject-approval-item.yaml' + /work-items/bulk-approve/{id}: + $ref: './beta/paths/work-items-bulk-approve-approval-item.yaml' + /work-items/bulk-reject/{id}: + $ref: './beta/paths/work-items-bulk-reject-approval-item.yaml' + /work-items/{id}/submit-account-selection: + $ref: './beta/paths/work-items-account-selection.yaml' + /workflows: + $ref: './beta/paths/workflows.yaml' + /workflows/{id}: + $ref: './beta/paths/workflow.yaml' + /workflows/{id}/test: + $ref: './beta/paths/workflow-test.yaml' + /workflows/{id}/executions: + $ref: './beta/paths/workflow-executions.yaml' + /workflow-executions/{id}: + $ref: './beta/paths/workflow-execution.yaml' + /workflow-executions/{id}/history: + $ref: './beta/paths/workflow-execution-history.yaml' + /workflow-executions/{id}/cancel: + $ref: './beta/paths/workflow-execution-cancel.yaml' + /workflow-library: + $ref: './beta/paths/workflow-library.yaml' + /workflow-library/actions: + $ref: './beta/paths/workflow-library-actions.yaml' + /workflow-library/triggers: + $ref: './beta/paths/workflow-library-triggers.yaml' + /workflow-library/operators: + $ref: './beta/paths/workflow-library-operators.yaml' + /workflows/{id}/external/oauth-clients: + $ref: './beta/paths/workflow-external-oauth-client.yaml' + /workflows/execute/external/{id}: + $ref: './beta/paths/workflow-external-execute.yaml' + /workflows/execute/external/{id}/test: + $ref: './beta/paths/workflow-external-execute-test.yaml' diff --git a/static/idn-api/sailpoint-api.internal.beta.yaml b/static/idn-api/sailpoint-api.internal.beta.yaml new file mode 100644 index 000000000..6ad023a0c --- /dev/null +++ b/static/idn-api/sailpoint-api.internal.beta.yaml @@ -0,0 +1,359 @@ +openapi: 3.0.1 +info: + title: SailPoint SaaS API + version: 3.1.0-beta-internal + description: >- + ## API Usage and Support + + + ![Beta](/api-beta.png) + + + Unless otherwise indicated, calling any API endpoint described herein requires an OAuth2 Bearer token (JWT). See + [Best Practices: IdentityNow REST API Authentication](https://community.sailpoint.com/t5/IdentityNow-Wiki/Best-Practices-IdentityNow-REST-API-Authentication/ta-p/79566). +tags: + - name: Access Request Recommendations + - name: Attribute Synchronization + - name: Auth Org Configuration + description: Configurations for authentication and authorization + - name: Auth User + description: Authentication service user retrieval and update + - name: Auth Support Login + description: Support and Services Login to Customer Org + - name: Auth MFA + description: Multi-factor authentication with TOTP code during login + - name: Authorization Model + description: Capabilities and Rights for the Authorization Model Service + - name: Certifications + - name: Certification Campaigns + - name: Entitlements + - name: Forgot Username + - name: IAI Common Access + - name: IAI Data Pipeline + description: Overall status for IAI Data Pipeline + - name: IAI Data Pipeline Events + description: Events Related to the IAI Data Pipeline + - name: IAI Data Roles + description: Information for role insights + - name: IAI Configuration + description: Configurations for IAI customers + - name: IAI Outliers + description: Identities classified as outliers by IAI + - name: Identities + - name: Identity Profiles + - name: Internal Use Only + - name: Lifecycle States + - name: Managed Clients + description: Read and write operations for managing client data + - name: Notifications + - name: Rosetta message handling + - name: S3 Access + description: Facilitates retrieving artifacts from S3 acting as a proxy endpoint to the caller. + - name: SaaS Management + - name: SOD Policy + - name: SOD Exception + - name: Sources + - name: SP-Scheduler + - name: Tags + description: Operations on Tags + - name: Task Management + description: Operations on TaskDefinition, TaskInvocation and TaskStatus + - name: Triggers + - name: Password + +components: + securitySchemes: + http: + type: http + scheme: bearer + bearerFormat: JWT + bearerAuth: + $ref: './beta/securitySchemes/OAuth2.yaml' + +paths: + /sod-risks/risks/{id}: + $ref: './beta/paths/sod/arm-risk.yaml' + /access-request-recommendations: + $ref: './beta/paths/rats-access-request-recommendations.yaml' + /access-roles/change-segment-assignments: + $ref: './beta/paths/access-roles-change-segment-assignments.yaml' + /assign-verified-from-addresses: + $ref: './beta/paths/assign-verified-from-addresses.yaml' + /attribute-sync-config: + $ref: './beta/paths/attr-sync-config-tenant.yaml' + /auth-config-service/auth-config-v3/auth-org: + $ref: './beta/paths/auth-org-config.yaml' + /auth-config-service/auth-config-v3/auth-org/lockout-config: + $ref: './beta/paths/auth-org-lockout-config.yaml' + /auth-config-service/auth-config-v3/auth-org/network-config: + $ref: './beta/paths/auth-org-network-config.yaml' + /auth-config-service/auth-config-v3/auth-org/service-provider-config: + $ref: './beta/paths/auth-org-service-provider-config.yaml' + /auth-config-service/auth-config-v3/auth-org/session-config: + $ref: './beta/paths/auth-org-session-config.yaml' + /auth-config-service/auth-config-v3/auth-support-tenants: + $ref: './beta/paths/supportlogin/auth-support-tenants.yaml' + /auth-config-service/auth-config-v3/auth-support-logins: + $ref: './beta/paths/supportlogin/auth-support-logins.yaml' + /auth-config-service/auth-config-v3/auth-support-logins/{authTenant}: + $ref: './beta/paths/supportlogin/auth-support-login.yaml' + /auth-config-service/auth-config-v3/auth-support-logins/{oldAuthTenant}/migrate: + $ref: './beta/paths/supportlogin/auth-support-logins-migrate.yaml' + /auth-config-service/auth-config-v3/auth-support-login-granters: + $ref: './beta/paths/supportlogin/access-granter-support-login-list.yaml' + /auth-config-service/auth-config-v3/auth-support-login-granters/{accessGranterTenant}: + $ref: './beta/paths/supportlogin/access-granter-support-login-get.yaml' + /auth-config-service/auth-config-v3/auth-support-login-transfers: + $ref: './beta/paths/supportlogin/auth-support-login-transfers-list.yaml' + /auth-config-service/auth-config-v3/auth-support-login-transfers/{tenant}: + $ref: './beta/paths/supportlogin/auth-support-login-transfer.yaml' + /auth-config-service/auth-config-v3/auth-support-user-eligibility: + $ref: './beta/paths/supportlogin/auth-support-user-eligibility-get.yaml' + /oathkeeper/auth-mfa/token: + $ref: './beta/paths/authmfa/generate-mfa-token.yaml' + /sp-mfa/sp-mfa-v3/totp/generate-secret: + $ref: './beta/paths/authmfa/generate-secret.yaml' + /sp-mfa/sp-mfa-v3/totp/confirm-registration: + $ref: './beta/paths/authmfa/confirm-registration.yaml' + /sp-mfa/sp-mfa-v3/totp/verify-code: + $ref: './beta/paths/authmfa/verify-code.yaml' + /sp-mfa/sp-mfa-v3/registration-status/{externalId}: + $ref: './beta/paths/authmfa/registration-status.yaml' + /sp-mfa/sp-mfa-v3/mfa-registration/reset: + $ref: './beta/paths/authmfa/mfa-registration-reset.yaml' + /auth-users/{id}: + $ref: './beta/paths/auth-user.yaml' + /auth-users/{id}/password: + $ref: './beta/paths/auth-user-password.yaml' + /auth-users/bulk-update: + $ref: './beta/paths/bulk-update-auth-user.yaml' + /authorization/authorization-capabilities: + $ref: './beta/paths/authorization-capabilities.yaml' + /certification-tasks/{id}: + $ref: './beta/paths/certification-task.yaml' + /certification-tasks: + $ref: './beta/paths/certification-tasks.yaml' + /campaigns/{id}/reassign: + $ref: './beta/paths/campaign-admin-cert-reassign.yaml' + /certifications: + $ref: './beta/paths/certifications.yaml' + /certifications/{id}: + $ref: './beta/paths/certification.yaml' + /certifications/{id}/decide: + $ref: './beta/paths/certifications-decide.yaml' + /certifications/{id}/reassign: + $ref: './beta/paths/certifications-reassign.yaml' + /certifications/{id}/reassign-async: + $ref: './beta/paths/certifications-reassign-async.yaml' + /certifications/{id}/sign-off: + $ref: './beta/paths/certifications-sign-off.yaml' + /certifications/{id}/review-items: + $ref: './beta/paths/certifications-review-items.yaml' + /certifications/{id}/review-items-activity/{activityDataId}: + $ref: './beta/paths/certifications-review-items-activity.yaml' + /certifications/{id}/review-items/{itemId}/entitlements/{entitlementId}/permissions: + $ref: './beta/paths/certifications-entitlement-permissions.yaml' + /certifications/{id}/decision-summary: + $ref: './beta/paths/certifications-decision-summary.yaml' + /certifications/{id}/access-summaries/{type}: + $ref: './beta/paths/certifications-access-summaries.yaml' + /certifications/{id}/target-summaries: + $ref: './beta/paths/certifications-target-summaries.yaml' + /certifications/{id}/target-summary/{targetSummaryId}: + $ref: './beta/paths/certifications-target-summary.yaml' + /common-access/classify: + $ref: './beta/paths/common-access-classify.yaml' + /common-access/classify/{id}: + $ref: './beta/paths/common-access-classify-request.yaml' + /connector/clusters/{clusterId}/messages/{messageType}/invoke: + $ref: './beta/paths/connector-messages.yaml' + /email-requests: + $ref: './beta/paths/email-requests.yaml' + /entitlements-v3/entitlements: + $ref: './beta/paths/entitlements.yaml' + /forgot-username: + $ref: './beta/paths/auth.yaml' + /iai-roles: + $ref: './beta/paths/iai-data-roles.yaml' + /iai-roles/{roleId}/identities: + $ref: './beta/paths/iai-data-role-entitlement-identities.yaml' + /iai-roles/{roleId}/identities-entitlements: + $ref: './beta/paths/iai-data-role-identities-entitlements.yaml' + /iai-roles/{roleId}/entitlements: + $ref: './beta/paths/iai-data-role-entitlements.yaml' + /identities/{identityId}: + $ref: './beta/paths/identity.yaml' + /identities/{identity-id}/set-lifecycle-state: + $ref: './beta/paths/identity-set-lifecycle-state.yaml' + /identities/{identityId}/team: + $ref: './beta/paths/identity-team.yaml' + /identities/{identityId}/system-account: + $ref: './beta/paths/system-accounts.yaml' + /identities/{identityId}/synchronize-attributes: + $ref: './beta/paths/identity-synchronize-attributes.yaml' + /identity-groups: + $ref: './beta/paths/identity-groups.yaml' + /identity-groups/{identityGroupId}: + $ref: './beta/paths/identity-group.yaml' + /identity-groups/{identityGroupId}/identity-distribution: + $ref: './beta/paths/identity-group-distribution.yaml' + /identity-groups/{identityGroupId}/applications: + $ref: './beta/paths/identity-group-applications.yaml' + /identity-groups/{identityGroupId}/identities: + $ref: './beta/paths/identity-group-identities.yaml' + /identity-groups/{identityGroupId}/entitlement-popularities: + $ref: './beta/paths/identity-group-entitlement-popularities.yaml' + /identity-profiles: + $ref: './beta/paths/identity-profiles.yaml' + /identity-profiles/{id}: + $ref: './beta/paths/identity-profiles-id.yaml' + /identity-profiles/bulk-delete: + $ref: './beta/paths/identity-profiles-bulk-delete.yaml' + /identity-profiles/identity-preview: + $ref: './beta/paths/identity-profiles-identity-preview.yaml' + /identity-profiles/{identity-profile-id}: + $ref: './beta/paths/identity-profile.yaml' + /identity-profiles/{identity-profile-id}/default-identity-attribute-config: + $ref: './beta/paths/identity-profile-default-config.yaml' + /identity-profiles/{identity-profile-id}/lifecycle-states: + $ref: './beta/paths/lifecycle-states.yaml' + /identity-profiles/{identity-profile-id}/lifecycle-states/{lifecycle-state-id}: + $ref: './beta/paths/delete-lifecycle-state.yaml' + /identity-profiles/{identity-profile-id}/refresh-identities: + $ref: './beta/paths/identity-profile-refresh-identities.yaml' + /managed-clients: + $ref: './beta/paths/managed-clients.yaml' + /managed-clients/{id}: + $ref: './beta/paths/managed-clients-path.yaml' + /managed-clients/{id}/request-credentials: + $ref: "./beta/paths/managed-clients-credentials.yaml" + /managed-clusters/{id}/jobs: + $ref: './beta/paths/managed-cluster-jobs.yaml' + /managed-clusters/{id}/process-config: + $ref: './beta/paths/managed-cluster-processes.yaml' + /managed-clusters/{id}/upgrade: + $ref: './beta/paths/managed-cluster-upgrade.yaml' + /managed-cluster-types/: + $ref: './beta/paths/managed-cluster-types.yaml' + /managed-cluster-types/{id}: + $ref: './beta/paths/managed-cluster-types-path.yaml' + /managed-processes/: + $ref: './beta/paths/managed-processes.yaml' + /managed-processes/{id}: + $ref: './beta/paths/managed-processes-path.yaml' + /managed-clusters/{id}: + $ref: './beta/paths/managed-cluster-path-internal.yaml' + /managed-clusters: + $ref: './beta/paths/managed-clusters-create.yaml' + /managed-clusters/{id}/status: + $ref: './beta/paths/managed-cluster-status.yaml' + /managed-clusters/cache: + $ref: './beta/paths/managed-cluster-cache.yaml' + /managed-clusters/{id}/set-encryption-keys: + $ref: './beta/paths/managed-clusters-set-encryption-keys.yaml' + /non-employee-sources/{sourceId}/aggregate: + $ref: './beta/paths/non-employee-source-aggregate.yaml' + /bulk-outlier-detection: + $ref: './beta/paths/outliers-bulk-outlier-detection.yaml' + /iai-configurations: + $ref: './beta/paths/iai-configurations.yaml' + /iai-configurations/{type}: + $ref: './beta/paths/iai-configuration.yaml' + /segments/{id}/change-assignments: + $ref: './beta/paths/segment-change-assignments.yaml' + /sources/{id}/attribute-sync-config: + $ref: './beta/paths/attr-sync-config-source.yaml' + /sources/{id}/synchronize-attributes: + $ref: './beta/paths/source-synchronize-attributes.yaml' + /sources/{id}/update-aggregation-state: + $ref: './beta/paths/source-aggregation-state.yaml' + /non-employee-sources/{id}/non-employee-bulk-upload/details: + $ref: './beta/paths/non-employee-sources-bulk-upload-details.yaml' + /non-employee-bulk-upload-job/{bulkUploadJobId}/fail: + $ref: './beta/paths/non-employee-bulk-upload-jobs-fail.yaml' + /trigger-subscriptions: + $ref: './beta/paths/trigger-subscriptions-internal.yaml' + /trigger-invocations/start: + $ref: './beta/paths/trigger-invocations-start.yaml' + /trigger-invocations: + $ref: './beta/paths/trigger-invocations.yaml' + /trigger-invocations/pending-events: + $ref: './beta/paths/trigger-invocations-pending-events.yaml' + /access-profiles/cleanup: + $ref: './beta/paths/access-profiles-cleanup.yaml' + /scheduled-actions: + $ref: './beta/paths/scheduled-actions.yaml' + /scheduled-actions/{id}: + $ref: './beta/paths/scheduled-actions-delete.yaml' + /scheduled-actions/bulk-delete: + $ref: './beta/paths/scheduled-actions-bulk-delete.yaml' + /data-pipelines: + $ref: './beta/paths/data-pipelines.yaml' + /data-pipelines/{type}/dags/{id}/run: + $ref: './beta/paths/run-datapipeline-dagid.yaml' + /data-pipelines/{type}/run-latest: + $ref: './beta/paths/run-datapipeline-dagtype.yaml' + /data-pipeline-events: + $ref: './beta/paths/data-pipeline-events.yaml' + /data-pipeline-events/{qualifier}: + $ref: './beta/paths/data-pipeline-events-qualifier.yaml' + /data-pipeline-events/{qualifier}/related: + $ref: './beta/paths/data-pipeline-events-qualifier-related.yaml' + /entitlements-v3/identities/{id}/entitlements: + $ref: './beta/paths/ears-identity-entitlement.yaml' + /entitlements-v3/entitlements/{id}/parents: + $ref: './beta/paths/ears-entitlement-parents.yaml' + /entitlements-v3/entitlements/{id}/children: + $ref: './beta/paths/ears-entitlement-children.yaml' + /entitlements-v3/entitlements/bulk-update: + $ref: './beta/paths/ears-entitlement-bulk-update.yaml' + /s3-proxy: + $ref: './beta/paths/s3-proxy.yaml' + /saas-management/applications: + $ref: './beta/paths/saas-management-applications.yaml' + /saas-management/applications/source/{id}: + $ref: './beta/paths/saas-management-application-for-source.yaml' + /saas-management/applications/update-map: + $ref: './beta/paths/saas-management-applications-update-map.yaml' + /saas-management/applications/source/{id}/test: + $ref: './beta/paths/saas-management-applications-test.yaml' + /sod-violations/check: + $ref: './beta/paths/sod-violation-check.yaml' + /sod-exceptions: + $ref: './beta/paths/sod-exceptions.yaml' + /sod-exceptions/{id}: + $ref: './beta/paths/sod-exception.yaml' + /sod-exceptions/bulk-create: + $ref: './beta/paths/sod-exceptions-bulk-create.yaml' + /sources/{id}/schemas/accounts: + $ref: './beta/paths/source-accounts-schema.yaml' + /sources/{id}/schemas/entitlements: + $ref: './beta/paths/source-entitlements-schema.yaml' + /sources/{id}/update-connector-state: + $ref: './beta/paths/source-connector-state.yaml' + /sources/{sourceId}/upload-connector-file: + $ref: './beta/paths/source-upload-connector-file.yaml' + /sources/{sourceId}/connector/extract/{messageType}: + $ref: './beta/paths/source-connector-initiate-extract.yaml' + /task-definitions: + $ref: './beta/paths/task-definitions.yaml' + /task-definitions/{id}: + $ref: './beta/paths/task-definition.yaml' + /task-execution/run: + $ref: './beta/paths/task-execution-run.yaml' + /task-execution/{id}/cancel: + $ref: './beta/paths/task-execution-cancel.yaml' + /task-status/{id}: + $ref: './beta/paths/task-status.yaml' + /task-status/pending-tasks: + $ref: './beta/paths/task-status-pending.yaml' + /password-v3/password-sync-groups: + $ref: './beta/paths/internal-password-sync-groups.yaml' + /roles/identity/{id}/roles: + $ref: './beta/paths/roles-by-identity.yaml' + /tags: + $ref: './beta/paths/tags.yaml' + /tags/{id}: + $ref: './beta/paths/tag.yaml' + /tags/bulk-get: + $ref: './beta/paths/tags-get-shared.yaml' \ No newline at end of file diff --git a/static/idn-api/sailpoint-api.v3.yaml b/static/idn-api/sailpoint-api.v3.yaml new file mode 100644 index 000000000..6cb67503b --- /dev/null +++ b/static/idn-api/sailpoint-api.v3.yaml @@ -0,0 +1,436 @@ +openapi: 3.0.1 +info: + contact: + email: developers@sailpoint.com + name: Developer Relations + url: https://developer.sailpoint.com/discuss + description: "These are the public APIs for SailPoint's SaaS services. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs." + title: SailPoint - SaaS API + version: 3.0.0 +servers: + - url: https://{tenant}.api.identitynow.com/v3 + description: This is the production API server. + variables: + tenant: + default: sailpoint + description: This is the name of your tenant, typically your company's name. + +tags: + - name: Access Request Approvals + description: | + Use this API to implement and customize access request approval functionality. + With this functionality in place, administrators can delegate qualified users to review users' requests for access or managers' requests to revoke team members' access to applications, entitlements, or roles. + This enables more qualified users to review access requests and the others to spend their time on other tasks. + + In IdentityNow, users can request access to applications, entitlements, and roles, and managers can request that team members' access be revoked. + For applications and entitlements, administrators can set access profiles to require approval from the access profile owner, the application owner, the source owner, the requesting user's manager, or a governance group for access to be granted or revoked. + For roles, administrators can also set roles to allow access requests and require approval from the role owner, the requesting user's manager, or a governance group for access to be granted or revoked. + If the administrator designates a governance group as the required approver, any governance group member can approve the requests. + + When a user submits an access request, IdentityNow sends the first required approver in the queue an email notification, based on the access request configuration's approval and reminder escalation configuration. + + In Approvals in IdentityNow, required approvers can view pending access requests under the Requested tab and approve or deny them, or the approvers can reassign the requests to different reviewers for approval. + If the required approver approves the request and is the only reviewer required, IdentityNow grants or revokes access, based on the request. + If multiple reviewers are required, IdentityNow sends the request to the next reviewer in the queue, based on the access request configuration's approval reminder and escalation configuration. + The required approver can then view any completed access requests under the Reviewed tab. + + Refer to the following link for more information about access request approvals. + externalDocs: + description: Learn more about access request approvals + url: https://documentation.sailpoint.com/saas/help/requests/index.html + - name: Access Requests + description: | + Use this API to implement and customize access request functionality. + With this functionality in place, users can request access to applications, entitlements, or roles, and managers can request that team members' access be revoked. + This allows users to get access to the tools they need quickly and securely, and it allows managers to take away access to those tools. + + In the Request Center in IdentityNow, users can view available applications, roles, and entitlements and request access to them. + If the requested tools requires approval, the requests appear as 'Pending' under the My Requests tab until the required approver approves, rejects, or cancels them. + + Users can use My Requests to track and/or cancel the requests. + + In My Team on the IdentityNow Home, managers can submit requests to revoke their team members' access. + They can use the My Requests tab under Request Center to track and/or cancel the requests. + + Refer to the following link for more information about access requests. + externalDocs: + description: Learn more about access requests + url: https://documentation.sailpoint.com/saas/user-help/requests/requesting_access.html + - name: Accounts + - name: Account Activities + - name: Certifications + - name: Certification Summaries + - name: Lifecycle States + - name: Identity Profiles + - name: Non-Employee Lifecycle Management + - name: OAuth Clients + - name: Password Management + - name: Personal Access Tokens + - name: Public Identities + - name: Public Identities Config + description: | + The purpose of this API is to set publicly visible attributes from your Identity Profile for your organization. + These attributes will be visible for request approvers within an Access Request or a Certification Campaign. + By default, first name, last name and manager will be shown. + - name: Requestable Objects + - name: Saved Search + - name: Scheduled Search + - name: Search + - name: Service Desk Integration + description: Operations for creating and accessing service desk integrations + - name: Sources + - name: Transforms + description: | + The purpose of this API is to expose functionality for the manipulation of Transform objects. + Transforms are a form of configurable objects which define an easy way to manipulate attribute data without having + to write code. These endpoints don't require API calls to other resources, audit service is used for keeping track + of which users have made changes to the Transforms. + externalDocs: + description: Learn more about Building Transforms + url: https://developer.sailpoint.com/docs/transforms/building_transforms/building_transforms.html + - name: Work Items + +paths: + /access-requests: + $ref: './v3/paths/access-requests.yaml' + /access-requests/cancel: + $ref: './v3/paths/access-request-cancel.yaml' + /access-request-config: + $ref: './v3/paths/access-request-config.yaml' + /access-request-status: + $ref: './v3/paths/access-request-status.yaml' + /access-request-approvals/pending: + $ref: './v3/paths/pending-access-request-approvals.yaml' + /access-request-approvals/completed: + $ref: './v3/paths/completed-access-request-approvals.yaml' + /access-request-approvals/{approvalId}/approve: + $ref: './v3/paths/approve-access-request-approval.yaml' + /access-request-approvals/{approvalId}/reject: + $ref: './v3/paths/reject-access-request-approval.yaml' + /access-request-approvals/{approvalId}/forward: + $ref: './v3/paths/forward-access-request-approval.yaml' + /access-request-approvals/approval-summary: + $ref: './v3/paths/access-request-approval-summary.yaml' + /accounts: + $ref: './v3/paths/accounts.yaml' + /accounts/{id}: + $ref: './v3/paths/account.yaml' + /accounts/{id}/entitlements: + $ref: './v3/paths/accounts-id-entitlements.yaml' + /accounts/{id}/reload: + $ref: './v3/paths/accounts-id-reload.yaml' + /accounts/{id}/enable: + $ref: './v3/paths/accounts-id-enable.yaml' + /accounts/{id}/disable: + $ref: './v3/paths/accounts-id-disable.yaml' + /accounts/{id}/unlock: + $ref: './v3/paths/accounts-id-unlock.yaml' + /account-activities: + $ref: './v3/paths/account-activity-list.yaml' + /account-activities/{id}: + $ref: './v3/paths/account-activity-get-one.yaml' + /certifications: + $ref: './v3/paths/identity-certifications.yaml' + /certifications/{id}: + $ref: './v3/paths/identity-certification.yaml' + /certifications/{id}/access-review-items: + $ref: './v3/paths/identity-certifications-access-review-items.yaml' + /certifications/{id}/decide: + $ref: './v3/paths/identity-certifications-decide.yaml' + /certifications/{id}/reassign: + $ref: './v3/paths/identity-certifications-reassign.yaml' + /certifications/{id}/sign-off: + $ref: './v3/paths/identity-certifications-sign-off.yaml' + /certifications/{id}/decision-summary: + $ref: './v3/paths/identity-certifications-decision-summary.yaml' + /certifications/{id}/identity-summaries: + $ref: './v3/paths/identity-certifications-identity-summaries.yaml' + /certifications/{id}/access-summaries/{type}: + $ref: './v3/paths/identity-certifications-access-summaries.yaml' + /certifications/{id}/identity-summary/{identitySummaryId}: + $ref: './v3/paths/identity-certifications-identity-summary.yaml' + /identities/{identity-id}/set-lifecycle-state: + $ref: './v3/paths/identity-set-lifecycle-state.yaml' + /identity-profiles/{identity-profile-id}/lifecycle-states: + $ref: './v3/paths/identity-profile-lifecycle-states.yaml' + /identity-profiles/{identity-profile-id}/lifecycle-states/{lifecycle-state-id}: + $ref: './v3/paths/identity-profile-lifecycle-state.yaml' + /identity-profiles: + $ref: './v3/paths/identity-profiles.yaml' + /identity-profiles/export: + $ref: './v3/paths/identity-profiles-export.yaml' + /identity-profiles/import: + $ref: './v3/paths/identity-profiles-import.yaml' + /identity-profiles/{identity-profile-id}: + $ref: './v3/paths/identity-profile.yaml' + /identity-profiles/{identity-profile-id}/default-identity-attribute-config: + $ref: './v3/paths/identity-profile-default-config.yaml' + /non-employee-records: + $ref: './v3/paths/non-employee-records.yaml' + /non-employee-records/{id}: + $ref: './v3/paths/non-employee-record.yaml' + /non-employee-records/bulk-delete: + $ref: './v3/paths/non-employee-records-bulk-delete.yaml' + /non-employee-requests: + $ref: './v3/paths/non-employee-requests.yaml' + /non-employee-requests/{id}: + $ref: './v3/paths/non-employee-request.yaml' + /non-employee-requests/summary/{requested-for}: + $ref: './v3/paths/non-employee-request-summary-get.yaml' + /non-employee-sources: + $ref: './v3/paths/non-employee-sources.yaml' + /non-employee-sources/{sourceId}: + $ref: './v3/paths/non-employee-source.yaml' + /non-employee-sources/{id}/non-employees/download: + $ref: './v3/paths/non-employee-sources-export-non-employees.yaml' + /non-employee-sources/{id}/non-employee-bulk-upload: + $ref: './v3/paths/non-employee-sources-bulk-upload-non-employees.yaml' + /non-employee-sources/{id}/non-employee-bulk-upload/status: + $ref: './v3/paths/non-employee-sources-bulk-upload-status.yaml' + /non-employee-sources/{id}/schema-attributes-template/download: + $ref: './v3/paths/non-employee-sources-export-schema-attributes-template.yaml' + /non-employee-approvals: + $ref: './v3/paths/non-employee-approval-list.yaml' + /non-employee-approvals/{id}: + $ref: './v3/paths/non-employee-approve-get.yaml' + /non-employee-approvals/{id}/approve: + $ref: './v3/paths/non-employee-approve-request.yaml' + /non-employee-approvals/{id}/reject: + $ref: './v3/paths/non-employee-reject-request.yaml' + /non-employee-approvals/summary/{requested-for}: + $ref: './v3/paths/non-employee-approval-summary.yaml' + /non-employee-sources/{sourceId}/schema-attributes: + $ref: './v3/paths/non-employee-sources-schema-attributes.yaml' + /non-employee-sources/{sourceId}/schema-attributes/{attributeId}: + $ref: './v3/paths/non-employee-sources-schema-attribute.yaml' + /oauth-clients: + $ref: './v3/paths/oauth-clients.yaml' + /oauth-clients/{id}: + $ref: './v3/paths/oauth-client.yaml' + /personal-access-tokens: + $ref: './v3/paths/personal-access-tokens.yaml' + /personal-access-tokens/{id}: + $ref: './v3/paths/personal-access-token.yaml' + /public-identities: + $ref: './v3/paths/public-identities.yaml' + /public-identities-config: + $ref: './v3/paths/public-identities-config.yaml' + /requestable-objects: + $ref: './v3/paths/requestable-object-list.yaml' + /saved-searches: + $ref: './v3/paths/saved-searches.yaml' + /saved-searches/{id}: + $ref: './v3/paths/saved-searches-id.yaml' + /saved-searches/{id}/execute: + $ref: './v3/paths/saved-searches-execute.yaml' + /scheduled-searches: + $ref: './v3/paths/scheduled-searches.yaml' + /scheduled-searches/{id}: + $ref: './v3/paths/scheduled-searches-id.yaml' + /scheduled-searches/{id}/unsubscribe: + $ref: './v3/paths/scheduled-searches-unsubscribe.yaml' + /search: + $ref: './v3/paths/search-post.yaml' + /search/count: + $ref: './v3/paths/search-count.yaml' + /search/aggregate: + $ref: './v3/paths/search-aggregate.yaml' + /search/{index}/{id}: + $ref: './v3/paths/search-get.yaml' + /service-desk-integrations: + $ref: './v3/paths/service-desk-integrations.yaml' + /service-desk-integrations/{id}: + $ref: './v3/paths/service-desk-integration.yaml' + /service-desk-integrations/types: + $ref: './v3/paths/service-desk-integration-types.yaml' + /service-desk-integrations/templates/{scriptName}: + $ref: './v3/paths/service-desk-integration-template.yaml' + /service-desk-integrations/status-check-configuration: + $ref: './v3/paths/service-desk-integration-configuration.yaml' + /query-password-info: + $ref: './v3/paths/query-password-info.yaml' + /set-password: + $ref: './v3/paths/set-password.yaml' + /password-change-status/{id}: + $ref: './v3/paths/password-change-status.yaml' + /sources: + $ref: './v3/paths/sources.yaml' + /sources/{id}: + $ref: './v3/paths/source.yaml' + /sources/{sourceId}/provisioning-policies: + $ref: './v3/paths/provisioning-policies.yaml' + /sources/{sourceId}/provisioning-policies/{usageType}: + $ref: './v3/paths/provisioning-policy.yaml' + /sources/{sourceId}/provisioning-policies/bulk-update: + $ref: './v3/paths/provisioning-policies-bulk-update.yaml' + /sources/{sourceId}/schemas: + $ref: './v3/paths/schemas.yaml' + /sources/{sourceId}/schemas/{schemaId}: + $ref: './v3/paths/schema.yaml' + /sources/{sourceId}/source-health: + $ref: './v3/paths/source-health.yaml' + /sources/{id}/schemas/accounts: + $ref: './v3/paths/source-accounts-schema.yaml' + /sources/{id}/schemas/entitlements: + $ref: './v3/paths/source-entitlements-schema.yaml' + /sources/{sourceId}/upload-connector-file: + $ref: './v3/paths/source-upload-connector-file.yaml' + /transforms: + $ref: './v3/paths/transforms.yaml' + /transforms/{id}: + $ref: './v3/paths/transform.yaml' + /work-items: + $ref: './v3/paths/work-items.yaml' + /work-items/completed: + $ref: './v3/paths/work-items-completed.yaml' + /work-items/count: + $ref: './v3/paths/work-items-count.yaml' + /work-items/completed/count: + $ref: './v3/paths/work-items-completed-count.yaml' + /work-items/summary: + $ref: './v3/paths/work-items-summary.yaml' + /work-items/{id}: + $ref: './v3/paths/work-item.yaml' + /work-items/{id}/approve/{approvalItemId}: + $ref: './v3/paths/work-items-approve-approval-item.yaml' + /work-items/{id}/reject/{approvalItemId}: + $ref: './v3/paths/work-items-reject-approval-item.yaml' + /work-items/bulk-approve/{id}: + $ref: './v3/paths/work-items-bulk-approve-approval-item.yaml' + /work-items/bulk-reject/{id}: + $ref: './v3/paths/work-items-bulk-reject-approval-item.yaml' + /work-items/{id}/submit-account-selection: + $ref: './v3/paths/work-items-account-selection.yaml' + +security: + - oauth2: [] + +components: + securitySchemes: + oauth2: + type: oauth2 + description: | + OAuth2 Bearer token (JWT). See [IdentityNow REST API Authentication](https://developer.sailpoint.com/docs/authentication.html) for more information. + - Directions for generating a [personal access token](https://developer.sailpoint.com/docs/authentication.html#personal-access-tokens) + - Directions using [client credentials flow](https://developer.sailpoint.com/docs/authentication.html#client-credentials-grant-flow) + - Directions for using [authorization code flow](https://developer.sailpoint.com/docs/authentication.html#authorization-code-grant-flow) + + Which authentication method should I choose? See our [guide](https://developer.sailpoint.com/docs/authentication.html#which-oauth-2-0-grant-flow-should-i-use) + + Learn more about how to find your `tokenUrl` and `authorizationUrl` [in our docs](https://developer.sailpoint.com/docs/authentication.html#finding-your-tenant-s-oauth-details) + flows: + clientCredentials: + tokenUrl: https://tenant.api.identitynow.com/oauth/token + scopes: + 'sp:scopes:default': 'default scope' + 'sp:scopes:all': 'access to all scopes' + authorizationCode: + authorizationUrl: https://tenant.identitynow.com/oauth/authorize + tokenUrl: https://tenant.api.identitynow.com/oauth/token + scopes: + 'sp:scopes:default': 'default scope' + 'sp:scopes:all': 'access to all scopes' + +# TODO: add the Entitlement, AccessProfile and Role models +# and the other new models? + schemas: + AccessRequest: + $ref: './v3/schemas/AccessRequest.yaml' + AccessRequestItem: + $ref: './v3/schemas/AccessRequestItem.yaml' + AccessProfileDocument: + $ref: './v3/schemas/search/model/access/profile/AccessProfile.yaml' + AccessProfileSummary: + $ref: './v3/schemas/search/model/access/AccessProfile.yaml' + AccessReviewReassignment: + $ref: './v3/schemas/ReviewReassign.yaml' + Account: + $ref: './v3/schemas/Account.yaml' + AccountActivity: + $ref: './v3/schemas/AccountActivity.yaml' + AccountActivitySearchedItem: + $ref: './v3/schemas/search/model/account/activity/AccountActivity.yaml' + AccountAttributes: + $ref: './v3/schemas/AccountAttributes.yaml' + AccountDocument: + $ref: './v3/schemas/search/model/account/Account.yaml' + AccountsAsyncResult: + $ref: './v3/schemas/AccountsAsyncResult.yaml' + AccountToggleRequest: + $ref: './v3/schemas/AccountToggleRequest.yaml' + AccountUnlockRequest: + $ref: './v3/schemas/AccountUnlockRequest.yaml' + Aggregation: + $ref: './v3/schemas/search/model/aggregation/Aggregation.yaml' + ApprovalItems: + $ref: './v3/schemas/ApprovalItemDetails.yaml' + Campaign: + $ref: './v3/schemas/CampaignReference.yaml' + Certification: + $ref: './v3/schemas/IdentityCertificationDto.yaml' + CertificationReference: + $ref: './v3/schemas/CertificationReference.yaml' + EntitlementDocument: + $ref: './v3/schemas/search/model/entitlement/Entitlement.yaml' + EntitlementSummary: + $ref: './v3/schemas/search/model/access/Entitlement.yaml' + Event: + $ref: './v3/schemas/search/model/event/Event.yaml' + IdentityDocument: + $ref: './v3/schemas/search/model/identity/Identity.yaml' + IdentityProfile: + $ref: './v3/schemas/IdentityProfile.yaml' + IdentityReferenceWithNameAndEmail: + $ref: './v3/schemas/IdentityReferenceWithNameAndEmail.yaml' + ProvisioningConfig: + $ref: './v3/schemas/ProvisioningConfig.yaml' + ProvisioningPolicy: + $ref: './v3/schemas/ProvisioningPolicyDto.yaml' + QueuedCheckConfigDetails: + $ref: './v3/schemas/QueuedCheckConfigDetails.yaml' + Reassignment: + $ref: './v3/schemas/Reassignment.yaml' + ReassignmentReference: + $ref: './v3/schemas/ReassignReference.yaml' + RemediationItems: + $ref: './v3/schemas/RemediationItemDetails.yaml' + RequestableObject: + $ref: './v3/schemas/RequestableObject.yaml' + RequestableObjectType: + $ref: './v3/schemas/RequestableObjectType.yaml' + RequestableObjectRequestStatus: + $ref: './v3/schemas/RequestableObjectRequestStatus.yaml' + Reviewer: + $ref: './v3/schemas/Reviewer.yaml' + RoleDocument: + $ref: './v3/schemas/search/model/role/Role.yaml' + RoleSummary: + $ref: './v3/schemas/search/model/access/Role.yaml' + SearchDocument: + $ref: './v3/schemas/search/documents/SearchDocument.yaml' + SavedSearch: + $ref: './v3/schemas/search/saved/SavedSearch.yaml' + Schedule: + $ref: './v3/schemas/schedule/Schedule.yaml' + ScheduledSearch: + $ref: './v3/schemas/search/scheduled/ScheduledSearch.yaml' + ServiceDeskIntegrationDto: + $ref: './v3/schemas/ServiceDeskIntegrationDto.yaml' + ServiceDeskIntegrationTemplateDto: + $ref: './v3/schemas/ServiceDeskIntegrationTemplateDto.yaml' + ServiceDeskIntegrationTemplateType: + $ref: './v3/schemas/ServiceDeskIntegrationTemplateType.yaml' + Source: + $ref: './v3/schemas/Source.yaml' + SourceHealthDto: + $ref: './v3/schemas/SourceHealthDto.yaml' + Transform: + $ref: './v3/schemas/Transform.yaml' + WorkItems: + $ref: './v3/schemas/WorkItems.yaml' + WorkItemsCount: + $ref: './v3/schemas/WorkItemsCount.yaml' + WorkItemsSummary: + $ref: './v3/schemas/WorkItemsSummary.yaml' + + diff --git a/static/idn-api/v3/ServiceDeskIntegrations-v3.1.0-oas3-swagger.yaml b/static/idn-api/v3/ServiceDeskIntegrations-v3.1.0-oas3-swagger.yaml new file mode 100644 index 000000000..0e87dc193 --- /dev/null +++ b/static/idn-api/v3/ServiceDeskIntegrations-v3.1.0-oas3-swagger.yaml @@ -0,0 +1,41 @@ +# +# Copyright (C) 2021 SailPoint Technologies, Inc. All rights reserved. +# +openapi: 3.0.0 +info: + title: Service Desk Integration API + description: This is an API for creating and accessing ServiceNow service desk integrations. + contact: + email: scrum-denali@sailpoint.com + version: 3.0.0-oas3 + x-copyright-year: 2020 +servers: + - url: http://localhost:7100/v3/ +tags: + - name: Service Desk Integration + description: Operations for creating and accessing ServiceNow service desk integrations +paths: + /service-desk-integrations: + $ref: "../v3/paths/service-desk-integrations.yaml" + /service-desk-integrations/{id}: + $ref: "../v3/paths/service-desk-integration.yaml" + /service-desk-integrations/types: + $ref: "../v3/paths/service-desk-integration-types.yaml" + /service-desk-integrations/templates/{scriptName}: + $ref: "../v3/paths/service-desk-integration-template.yaml" + /service-desk-integrations/status-check-configuration: + $ref: "../v3/paths/service-desk-integration-configuration.yaml" + +components: + securitySchemes: + bearerAuth: + type: oauth2 + description: This API uses OAuth 2 with the client credentials grant flow. + flows: + clientCredentials: + tokenUrl: https://acme-solar.api.cloud.sailpoint.com/oauth/token + scopes: + idn:service-desk-integration:read: Service Desk integration read access + idn:service-desk-integration:write: Service Desk integration write access + idn:service-desk-admin:read: Service Desk admin read access + idn:service-desk-admin:write: Service Desk admin write access diff --git a/static/idn-api/v3/parameters/count.yaml b/static/idn-api/v3/parameters/count.yaml new file mode 100644 index 000000000..31e84a959 --- /dev/null +++ b/static/idn-api/v3/parameters/count.yaml @@ -0,0 +1,18 @@ + in: query + name: count + description: >- + If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned + if *limit* and *offset* were ignored. + + + Since requesting a total count can have a performance impact, it is recommended not to send **count=true** if + that value will not be used. + + + See [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + for more information. + required: false + example: true + schema: + type: boolean + default: false diff --git a/static/idn-api/v3/parameters/limit.yaml b/static/idn-api/v3/parameters/limit.yaml new file mode 100644 index 000000000..592317a2d --- /dev/null +++ b/static/idn-api/v3/parameters/limit.yaml @@ -0,0 +1,15 @@ + in: query + name: limit + description: >- + Max number of results to return. + + See [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + for more information. + required: false + example: 250 + schema: + type: integer + format: int32 + minimum: 0 + maximum: 250 + default: 250 diff --git a/static/idn-api/v3/parameters/limit50.yaml b/static/idn-api/v3/parameters/limit50.yaml new file mode 100644 index 000000000..5b1c7058e --- /dev/null +++ b/static/idn-api/v3/parameters/limit50.yaml @@ -0,0 +1,15 @@ + in: query + name: limit + description: >- + Max number of results to return. + + See [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + for more information. + required: false + example: 50 + schema: + type: integer + format: int32 + minimum: 0 + maximum: 50 + default: 50 diff --git a/static/idn-api/v3/parameters/offset.yaml b/static/idn-api/v3/parameters/offset.yaml new file mode 100644 index 000000000..f3aad470d --- /dev/null +++ b/static/idn-api/v3/parameters/offset.yaml @@ -0,0 +1,14 @@ + in: query + name: offset + description: >- + Offset into the full result set. Usually specified with *limit* to paginate through the results. + + See [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + for more information. + required: false + example: 0 + schema: + type: integer + format: int32 + minimum: 0 + default: 0 diff --git a/static/idn-api/v3/parameters/path/search/id.yaml b/static/idn-api/v3/parameters/path/search/id.yaml new file mode 100644 index 000000000..775c8bd6b --- /dev/null +++ b/static/idn-api/v3/parameters/path/search/id.yaml @@ -0,0 +1,6 @@ +in: path +name: id +description: ID of the requested document. +schema: + type: string +required: true diff --git a/static/idn-api/v3/parameters/path/search/index.yaml b/static/idn-api/v3/parameters/path/search/index.yaml new file mode 100644 index 000000000..5b1ac1c57 --- /dev/null +++ b/static/idn-api/v3/parameters/path/search/index.yaml @@ -0,0 +1,9 @@ +in: path +name: index +description: | + The index from which to fetch the specified document. + + The currently supported index names are: *accessprofiles*, *accountactivities*, *accounts*, *aggregations*, *entitlements*, *events*, *identities*, and *roles*. +schema: + type: string +required: true diff --git a/static/idn-api/v3/paths/.gitignore b/static/idn-api/v3/paths/.gitignore new file mode 100644 index 000000000..787c488a9 --- /dev/null +++ b/static/idn-api/v3/paths/.gitignore @@ -0,0 +1,24 @@ +build +.idea +*.iml +.gradle +.DS_Store +/debug.log +velocity.log* +sptcbu-org-data +*~ +#*# +.#* +api-client-common/out + +node_modules +*.d.ts + +/bin +.classpath +.project +.vscode/ +.settings/ +/.settings +api-client-common/bin/ +design-docs/api-publisher \ No newline at end of file diff --git a/static/idn-api/v3/paths/access-request-approval-summary.yaml b/static/idn-api/v3/paths/access-request-approval-summary.yaml new file mode 100644 index 000000000..ec1d77d7f --- /dev/null +++ b/static/idn-api/v3/paths/access-request-approval-summary.yaml @@ -0,0 +1,48 @@ +get: + operationId: approvalSummary + summary: Get the number of access-requests-approvals + tags: + - Access Request Approvals + description: >- + This endpoint returns the number of pending, approved and rejected access requests approvals. + See "owner-id" query parameter below for authorization info. + parameters: + - in: query + name: owner-id + schema: + type: string + description: >- + The id of the owner or approver identity of the approvals. If present, the value returns approval summary for the specified identity. + * ORG_ADMIN users can call this with any identity ID value. + * ORG_ADMIN user can also fetch all the approvals in the org, when owner-id is not used. + * Non ORG_ADMIN users can only specify *me* or pass their own identity ID value. + example: 2c91808568c529c60168cca6f90c1313 + + - in: query + name: from-date + schema: + type: string + description: >- + From date is the date and time from which the results will be shown. It should be in a valid ISO-8601 format + example: from-date=2020-03-19T19:59:11Z + responses: + '200': + description: Number of pending, approved, rejected access request approvals. + content: + application/json: + schema: + $ref: '../schemas/ApprovalSummary.yaml' + '400': + description: Client Error - Returned if the query parameter is invalid. + content: + application/json: + schema: + $ref: '../schemas/ErrorResponseDto.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/access-request-cancel.yaml b/static/idn-api/v3/paths/access-request-cancel.yaml new file mode 100644 index 000000000..1b4a3bbfe --- /dev/null +++ b/static/idn-api/v3/paths/access-request-cancel.yaml @@ -0,0 +1,35 @@ +post: + operationId: cancelAccessRequest + tags: + - Access Requests + summary: Cancel Access Request + description: >- + This API endpoint cancels a pending access request. An access request can be cancelled only if it has not passed the approval step. + + Any token with ORG_ADMIN authority or token of the user who originally requested the access request is required to cancel it. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/CancelAccessRequest.yaml' + example: + { + "accountActivityId": "2c91808568c529c60168cca6f90c1313", + "comment": "I requested this role by mistake." + } + responses: + '202': + $ref: '../responses/202.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/access-request-config.yaml b/static/idn-api/v3/paths/access-request-config.yaml new file mode 100644 index 000000000..27e9a0f11 --- /dev/null +++ b/static/idn-api/v3/paths/access-request-config.yaml @@ -0,0 +1,57 @@ +get: + operationId: getAccessRequestConfig + summary: Get Access Request Configuration + tags: + - Access Requests + description: >- + This endpoint returns the current access-request configuration. + responses: + '200': + description: Access Request Configuration Details. + content: + application/json: + schema: + $ref: '../schemas/AccessRequestConfig.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' + +put: + operationId: updateAccessRequestConfig + summary: Update Access Request Configuration + tags: + - Access Requests + description: >- + This endpoint replaces the current access-request configuration. + + A token with ORG_ADMIN authority is required to call this API. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/AccessRequestConfig.yaml' + responses: + '200': + description: Access Request Configuration Details. + content: + application/json: + schema: + $ref: '../schemas/AccessRequestConfig.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/paths/access-request-status.yaml b/static/idn-api/v3/paths/access-request-status.yaml new file mode 100644 index 000000000..f4cb2a597 --- /dev/null +++ b/static/idn-api/v3/paths/access-request-status.yaml @@ -0,0 +1,90 @@ +get: + operationId: listAccessRequestStatus + tags: + - Access Requests + summary: Access Request Status + description: >- + The Access Request Status API returns a list of access request statuses based on the specified query parameters. + + Any token with any authority can request their own status. A token with ORG_ADMIN authority is required to call this API to get a list of statuses for other users. + parameters: + - in: query + name: requested-for + schema: + type: string + example: 2c9180877b2b6ea4017b2c545f971429 + description: >- + Filter the results by the identity for which the requests were made. *me* indicates the current user. Mutually exclusive with + *regarding-identity*. + required: false + - in: query + name: requested-by + schema: + type: string + example: 2c9180877b2b6ea4017b2c545f971429 + description: >- + Filter the results by the identity that made the requests. *me* indicates the current user. Mutually exclusive with + *regarding-identity*. + required: false + - in: query + name: regarding-identity + schema: + type: string + example: 2c9180877b2b6ea4017b2c545f971429 + description: >- + Filter the results by the specified identity which is either the requester or target of the requests. *me* indicates the + current user. Mutually exclusive with *requested-for* and *requested-by*. + required: false + - in: query + name: count + description: >- + If *true* it will populate the *X-Total-Count* response header with the number of results that would be returned + if *limit* and *offset* were ignored. + required: false + schema: + type: boolean + default: false + example: false + - in: query + name: limit + description: Max number of results to return. + required: false + schema: + type: integer + format: int32 + minimum: 0 + maximum: 250 + default: 250 + example: 100 + - in: query + name: offset + description: >- + Offset into the full result set. Usually specified with *limit* to paginate through the results. + Defaults to 0 if not specified. + required: false + schema: + type: integer + format: int32 + minimum: 0 + example: 10 + responses: + '200': + description: List of requested item status. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/RequestedItemStatus.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' + + diff --git a/static/idn-api/v3/paths/access-requests.yaml b/static/idn-api/v3/paths/access-requests.yaml new file mode 100644 index 000000000..025cce998 --- /dev/null +++ b/static/idn-api/v3/paths/access-requests.yaml @@ -0,0 +1,55 @@ +post: + operationId: createAccessRequest + summary: Submit an Access Request + tags: + - Access Requests + description: | + This submits the access request into IdentityNow, where it will follow any IdentityNow approval processes. + + Access requests are processed asynchronously by IdentityNow. A success response from this endpoint means the request + has been submitted to IDN and is queued for processing. Because this endpoint is asynchronous, it will not return an error + if you submit duplicate access requests in quick succession, or you submit an access request for access that is already in progress, approved, or rejected. + It is best practice to check for any existing access requests that reference the same access items before submitting a new access request. This can + be accomplished by using the [access request status](https://developer.sailpoint.com/apis/v3/#operation/listAccessRequestStatus) endpoint. You can also + use the [search API](https://developer.sailpoint.com/apis/v3/#operation/search) to check the existing access items that an identity has before submitting + an access request to ensure you are not requesting access that is already granted. + + There are two types of access request: + + __GRANT_ACCESS__ + * Can be requested for multiple identities in a single request. + * Supports self request and request on behalf of other users, see '/beta/access-request-config' endpoint for request configuration options. + * Allows any authenticated token (except API) to call this endpoint to request to grant access to themselves. Depending on the configuration, a user can request access for others. + * Roles, Access Profiles and Entitlements can be requested. + * While requesting entitlements, maximum of 5 entitlements and 10 recipients are allowed in a request. + + __REVOKE_ACCESS__ + * Can only be requested for a single identity at a time. + * Does not support self request. Only manager can request to revoke access for their directly managed employees. + * If removeDate is specified, then the access will be removed on that date and time. + * Allows a manager to request to revoke access for direct employees. A token with ORG_ADMIN authority can also request to revoke access from anyone. + * Roles and Access Profiles can be requested for revocation. Revoke request for entitlements are not supported currently. + + NOTE: There is no indication to the approver in the IdentityNow UI that the approval request is for a revoke action. Take this into consideration when calling this API. + + A token with API authority cannot be used to call this endpoint. + + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/AccessRequest.yaml' + responses: + '202': + $ref: '../responses/202.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/account-activities.yaml b/static/idn-api/v3/paths/account-activities.yaml new file mode 100644 index 000000000..43a96b3ce --- /dev/null +++ b/static/idn-api/v3/paths/account-activities.yaml @@ -0,0 +1,90 @@ +get: + operationId: listAccountActivities + tags: + - Account Activities + summary: List Account Activities + description: >- + This gets a collection of account activities that satisfy the given query parameters. + parameters: + - in: query + name: requested-for + schema: + type: string + description: >- + The identity that the activity was requested for. *me* indicates the current user. Mutually exclusive with + *regarding-identity*. + required: false + - in: query + name: requested-by + schema: + type: string + description: >- + The identity that requested the activity. *me* indicates the current user. Mutually exclusive with + *regarding-identity*. + required: false + - in: query + name: regarding-identity + schema: + type: string + description: >- + The specified identity will be either the requester or target of the account activity. *me* indicates the + current user. Mutually exclusive with *requested-for* and *requested-by*. + required: false + - in: query + name: type + schema: + type: string + description: The type of account activity. + required: false + - $ref: '../../parameters/v3/limit.yaml' + - $ref: '../../parameters/v3/offset.yaml' + - $ref: '../../parameters/v3/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **type**: *eq, in* + + + **created**: *gt, lt, ge, le* + + + **modified**: *gt, lt, ge, le* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **type, created, modified** + responses: + '200': + description: List of account activities + content: + application/json: + schema: + type: array + items: + $ref: '../../schemas/v3/AccountActivity.yaml' + '400': + $ref: '../../responses/v3/400.yaml' + '401': + $ref: '../../responses/v3/401.yaml' + '403': + $ref: '../../responses/v3/403.yaml' + '429': + $ref: '../../responses/v3/429.yaml' + '500': + $ref: '../../responses/v3/500.yaml' + + diff --git a/static/idn-api/v3/paths/account-activity-get-one.yaml b/static/idn-api/v3/paths/account-activity-get-one.yaml new file mode 100644 index 000000000..952cc01ee --- /dev/null +++ b/static/idn-api/v3/paths/account-activity-get-one.yaml @@ -0,0 +1,36 @@ +get: + operationId: getAccountActivity + tags: + - Account Activities + summary: Get an Account Activity + description: >- + This gets a single account activity by its id. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The account activity id + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: An account activity object + content: + application/json: + schema: + $ref: '../schemas/AccountActivity.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' + + diff --git a/static/idn-api/v3/paths/account-activity-list.yaml b/static/idn-api/v3/paths/account-activity-list.yaml new file mode 100644 index 000000000..a7e98ab95 --- /dev/null +++ b/static/idn-api/v3/paths/account-activity-list.yaml @@ -0,0 +1,85 @@ +get: + operationId: listAccountActivities + tags: + - Account Activities + summary: Get a list of Account Activities + description: >- + This gets a collection of account activities that satisfy the given query parameters. + parameters: + - in: query + name: requested-for + schema: + type: string + description: >- + The identity that the activity was requested for. *me* indicates the current user. Mutually exclusive with + *regarding-identity*. + required: false + - in: query + name: requested-by + schema: + type: string + description: >- + The identity that requested the activity. *me* indicates the current user. Mutually exclusive with + *regarding-identity*. + required: false + - in: query + name: regarding-identity + schema: + type: string + description: >- + The specified identity will be either the requester or target of the account activity. *me* indicates the + current user. Mutually exclusive with *requested-for* and *requested-by*. + required: false + - in: query + name: type + schema: + type: string + description: The type of account activity. + required: false + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + Filtering is supported for the following fields and operators: + + **type**: *eq, in* + + **created**: *gt, lt, ge, le* + + **modified**: *gt, lt, ge, le* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + Sorting is supported for the following fields: **type, created, modified** + responses: + '200': + description: List of account activities + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/AccountActivity.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' + + diff --git a/static/idn-api/v3/paths/account.yaml b/static/idn-api/v3/paths/account.yaml new file mode 100644 index 000000000..44d507267 --- /dev/null +++ b/static/idn-api/v3/paths/account.yaml @@ -0,0 +1,188 @@ +get: + operationId: getAccount + tags: + - Accounts + summary: Account Details + description: >- + This API returns the details for a single account based on the ID. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:account:read + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The account ID + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: An account object + content: + application/json: + schema: + $ref: '../schemas/Account.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +patch: + operationId: updateAccount + tags: + - Accounts + summary: Update Account + description: >- + Use this API to modify the following fields: + + * `identityId` + + + * `manuallyCorrelated` + + + >**NOTE: All other fields can not be modified.** + + + The request must provide a JSONPatch payload. + + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:account:update + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The account ID + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + description: >- + A list of account update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + content: + application/json-patch+json: + schema: + type: array + items: + type: object + example: + - op: "replace" + path: "/identityId" + value: "2c9180845d1edece015d27a975983e21" + responses: + '202': + description: Accepted. Update request accepted and is in progress. + $ref: '../responses/202.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +put: + operationId: putAccount + tags: + - Accounts + summary: Update Account + description: >- + This API submits an account update task and returns the task ID. + + A token with ORG_ADMIN authority is required to call this API. + + >**NOTE: The PUT Account API is designated only for Delimited File sources.** + security: + - bearerAuth: + - idn:account:update + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The account ID + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/AccountAttributes.yaml' + responses: + '202': + description: Async task details + content: + application/json: + schema: + $ref: '../schemas/AccountsAsyncResult.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +delete: + operationId: deleteAccount + tags: + - Accounts + summary: Delete Account + description: >- + This API submits an account delete task and returns the task ID. This operation can only be used on Flat File Sources. + Any attempt to execute this request on the source of other type will result in an error response with a status code of 400. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:account:delete + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The account ID + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '202': + description: Async task details + content: + application/json: + schema: + $ref: '../schemas/AccountsAsyncResult.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/accounts-id-disable.yaml b/static/idn-api/v3/paths/accounts-id-disable.yaml new file mode 100644 index 000000000..adc70b929 --- /dev/null +++ b/static/idn-api/v3/paths/accounts-id-disable.yaml @@ -0,0 +1,45 @@ +post: + operationId: disableAccount + tags: + - Accounts + summary: Disable Account + description: >- + This API submits a task to disable the account and returns the task ID. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:account:disable + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The account id + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/AccountToggleRequest.yaml' + responses: + '202': + description: Async task details + content: + application/json: + schema: + $ref: '../schemas/AccountsAsyncResult.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/accounts-id-enable.yaml b/static/idn-api/v3/paths/accounts-id-enable.yaml new file mode 100644 index 000000000..d5274c5f6 --- /dev/null +++ b/static/idn-api/v3/paths/accounts-id-enable.yaml @@ -0,0 +1,45 @@ +post: + operationId: enableAccount + tags: + - Accounts + summary: Enable Account + description: >- + This API submits a task to enable account and returns the task ID. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:account:enable + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The account id + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/AccountToggleRequest.yaml' + responses: + '202': + description: Async task details + content: + application/json: + schema: + $ref: '../schemas/AccountsAsyncResult.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/accounts-id-entitlements.yaml b/static/idn-api/v3/paths/accounts-id-entitlements.yaml new file mode 100644 index 000000000..21accce19 --- /dev/null +++ b/static/idn-api/v3/paths/accounts-id-entitlements.yaml @@ -0,0 +1,44 @@ +get: + operationId: getAccountEntitlements + tags: + - Accounts + summary: Account Entitlements + description: >- + This API returns entitlements of the account. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:account-entitlement:read + parameters: + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/count.yaml' + - in: path + name: id + schema: + type: string + required: true + description: The account id + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: An array of account entitlements + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/EntitlementDto.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/accounts-id-reload.yaml b/static/idn-api/v3/paths/accounts-id-reload.yaml new file mode 100644 index 000000000..6f527d34b --- /dev/null +++ b/static/idn-api/v3/paths/accounts-id-reload.yaml @@ -0,0 +1,39 @@ +post: + operationId: reloadAccount + tags: + - Accounts + summary: Reload Account + description: >- + This API asynchronously reloads the account directly from the connector and performs a one-time aggregation process. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:account:reload + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The account id + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '202': + description: Async task details + content: + application/json: + schema: + $ref: '../schemas/AccountsAsyncResult.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/accounts-id-unlock.yaml b/static/idn-api/v3/paths/accounts-id-unlock.yaml new file mode 100644 index 000000000..4d0347665 --- /dev/null +++ b/static/idn-api/v3/paths/accounts-id-unlock.yaml @@ -0,0 +1,45 @@ +post: + operationId: unlockAccount + tags: + - Accounts + summary: Unlock Account + description: >- + This API submits a task to unlock an account and returns the task ID. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:account:unlock + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The account id + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/AccountUnlockRequest.yaml' + responses: + '202': + description: Async task details + content: + application/json: + schema: + $ref: '../schemas/AccountsAsyncResult.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/accounts.yaml b/static/idn-api/v3/paths/accounts.yaml new file mode 100644 index 000000000..9fb26744c --- /dev/null +++ b/static/idn-api/v3/paths/accounts.yaml @@ -0,0 +1,98 @@ +get: + operationId: listAccounts + tags: + - Accounts + summary: Accounts List + description: >- + This returns a list of accounts. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:account-list:read + parameters: + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/count.yaml' + - in: query + name: filters + schema: + type: string + example: identityId eq "2c9180858082150f0180893dbaf44201" + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **identityId**: *eq* + + + **name**: *eq, in* + + + **nativeIdentity**: *eq, in* + + + **sourceId**: *eq, in* + + + **uncorrelated**: *eq* + responses: + '200': + description: List of account objects + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/Account.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +post: + operationId: createAccount + tags: + - Accounts + summary: Create Account + description: >- + This API submits an account creation task and returns the task ID. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:account:create + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/AccountAttributesCreate.yaml' + responses: + '202': + description: Async task details + content: + application/json: + schema: + $ref: '../schemas/AccountsAsyncResult.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/approve-access-request-approval.yaml b/static/idn-api/v3/paths/approve-access-request-approval.yaml new file mode 100644 index 000000000..b9cf184f1 --- /dev/null +++ b/static/idn-api/v3/paths/approve-access-request-approval.yaml @@ -0,0 +1,37 @@ +post: + operationId: approveRequest + summary: Approves an access request approval. + tags: + - Access Request Approvals + description: >- + This endpoint approves an access request approval. Only the owner of the approval and ORG_ADMIN users are allowed to perform this action. + parameters: + - in: path + name: approvalId + schema: + type: string + required: true + description: The id of the approval. + example: 2c91808b7294bea301729568c68c002e + requestBody: + description: Reviewer's comment. + required: false + content: + application/json: + schema: + $ref: "../schemas/CommentDto.yaml" + responses: + '202': + $ref: '../responses/202.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/completed-access-request-approvals.yaml b/static/idn-api/v3/paths/completed-access-request-approvals.yaml new file mode 100644 index 000000000..d5da01eaa --- /dev/null +++ b/static/idn-api/v3/paths/completed-access-request-approvals.yaml @@ -0,0 +1,76 @@ +get: + operationId: listCompletedApprovals + summary: Completed Access Request Approvals List + tags: + - Access Request Approvals + description: >- + This endpoint returns list of completed approvals. + See *owner-id* query parameter below for authorization info. + parameters: + - in: query + name: owner-id + required: false + schema: + type: string + description: >- + If present, the value returns only completed approvals for the specified identity. + * ORG_ADMIN users can call this with any identity ID value. + * ORG_ADMIN users can also fetch all the approvals in the org, when owner-id is not used. + * Non-ORG_ADMIN users can only specify *me* or pass their own identity ID value. + example: 2c91808568c529c60168cca6f90c1313 + + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/count.yaml' + - in: query + name: filters + required: false + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **requestedFor.id**: *eq, in* + + + **modified**: *gt, lt, ge, le* + example: id eq "2c91808568c529c60168cca6f90c1313" + + - in: query + name: sorters + required: false + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **created, modified** + example: modified + responses: + '200': + description: List of Completed Approvals. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/CompletedApproval.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/forward-access-request-approval.yaml b/static/idn-api/v3/paths/forward-access-request-approval.yaml new file mode 100644 index 000000000..ef1cf73ed --- /dev/null +++ b/static/idn-api/v3/paths/forward-access-request-approval.yaml @@ -0,0 +1,38 @@ +post: + operationId: forwardRequest + summary: Forwards an access request approval. + tags: + - Access Request Approvals + description: >- + This endpoint forwards an access request approval to a new owner. + Only the owner of the approval and ORG_ADMIN users are allowed to perform this action. + parameters: + - in: path + name: approvalId + schema: + type: string + required: true + description: The id of the approval. + example: 2c91808b7294bea301729568c68c002e + requestBody: + description: Information about the forwarded approval. + required: true + content: + application/json: + schema: + $ref: "../schemas/ForwardApprovalDto.yaml" + responses: + '202': + $ref: '../responses/202.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/identity-certification.yaml b/static/idn-api/v3/paths/identity-certification.yaml new file mode 100644 index 000000000..47023c5e5 --- /dev/null +++ b/static/idn-api/v3/paths/identity-certification.yaml @@ -0,0 +1,38 @@ +get: + operationId: getIdentityCertification + tags: + - Certifications + summary: Identity Certification by ID + description: >- + This API returns a single identity campaign certification by its ID. A token with ORG_ADMIN or CERT_ADMIN authority + is required to call this API. Reviewers for this certification can also call this API. This API does not support + requests for certifications assigned to Governance Groups. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The certification id + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: An identity campaign certification object + content: + application/json: + schema: + $ref: '../schemas/IdentityCertificationDto.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' + + diff --git a/static/idn-api/v3/paths/identity-certifications-access-review-items.yaml b/static/idn-api/v3/paths/identity-certifications-access-review-items.yaml new file mode 100644 index 000000000..556c1ad54 --- /dev/null +++ b/static/idn-api/v3/paths/identity-certifications-access-review-items.yaml @@ -0,0 +1,112 @@ +get: + operationId: listIdentityAccessReviewItems + tags: + - Certifications + summary: List of Access Review Items + description: >- + This API returns a list of access review items for an identity campaign certification. A token with ORG_ADMIN or + CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. This API + does not support requests for certifications assigned to Governance Groups. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The identity campaign certification ID + example: ef38f94347e94562b5bb8424a56397d8 + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **type / access.type**: *eq* + + + **completed**: *eq, ne* + + + **identitySummary.id**: *eq, in* + + + **identitySummary.name**: *eq, sw* + + + **access.id**: *eq, in* + + + **access.name**: *eq, sw* + + + **entitlement.sourceName**: *eq, sw* + + + **accessProfile.sourceName**: *eq, sw* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **identitySummary.name, access.name, access.type, entitlement.sourceName, accessProfile.sourceName** + - in: query + name: entitlements + schema: + type: string + description: + Filter results to view access review items that pertain to any of the specified comma-separated entitlement IDs. + + + An error will occur if this param is used with **access-profiles** or **roles** as only one of these query params can be used at a time. + - in: query + name: access-profiles + schema: + type: string + description: + Filter results to view access review items that pertain to any of the specified comma-separated access-profle IDs. + + + An error will occur if this param is used with **entitlements** or **roles** as only one of these query params can be used at a time. + - in: query + name: roles + schema: + type: string + description: + Filter results to view access review items that pertain to any of the specified comma-separated role IDs. + + + An error will occur if this param is used with **entitlements** or **access-profiles** as only one of these query params can be used at a time. + responses: + '200': + description: A list of access review items + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/AccessReviewItem.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/identity-certifications-access-summaries.yaml b/static/idn-api/v3/paths/identity-certifications-access-summaries.yaml new file mode 100644 index 000000000..36f5c9cc9 --- /dev/null +++ b/static/idn-api/v3/paths/identity-certifications-access-summaries.yaml @@ -0,0 +1,106 @@ +get: + operationId: getIdentityAccessSummaries + tags: + - Certification Summaries + summary: Access Summaries + description: >- + This API returns a list of access summaries for the specified identity campaign certification and type. A token with + ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this + API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The identity campaign certification ID + example: ef38f94347e94562b5bb8424a56397d8 + - in: path + name: type + schema: + type: string + enum: + - ROLE + - ACCESS_PROFILE + - ENTITLEMENT + required: true + description: The type of access review item to retrieve summaries for + example: ACCESS_PROFILE + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki-API-Standard-Collection-Parameters/ta-p/156407) + + + Filtering is supported for the following fields and operators: + + + **completed**: *eq, ne* + + + **access.id**: *eq, in* + + + **access.name**: *eq, sw* + + + **entitlement.sourceName**: *eq, sw* + + + **accessProfile.sourceName**: *eq, sw* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **access.name** + responses: + '200': + description: List of access summaries + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/AccessSummary.yaml' + example: + - access: + type: ENTITLEMENT + id: 2c9180857182305e01719937429e2bad + name: 'CN=Engineering' + entitlement: + id: 2c9180857182305e01719937429e2bad + name: 'CN=Engineering' + description: Access to the engineering database + privileged: false + owner: + email: brandon.gray@acme-solar.com + type: IDENTITY + id: 2c9180867160846801719932c5153fb7 + name: Brandon Gray + attributeName: memberOf + attributeValue: 'CN=Engineering' + sourceName: ODS-AD-Source + hasPermissions: true + revocable: true + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/identity-certifications-decide.yaml b/static/idn-api/v3/paths/identity-certifications-decide.yaml new file mode 100644 index 000000000..a4e79aa14 --- /dev/null +++ b/static/idn-api/v3/paths/identity-certifications-decide.yaml @@ -0,0 +1,56 @@ +post: + operationId: makeIdentityDecision + tags: + - Certifications + summary: Decide on a Certification Item + description: >- + The API makes a decision to approve or revoke one or more identity campaign certification items. A token with + ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this + API. This API does not support requests for certifications assigned to Governance Groups. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the identity campaign certification on which to make decisions + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + description: A non-empty array of decisions to be made. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/ReviewDecision.yaml' + minItems: 1 + maxItems: 250 + example: + - id: ef38f94347e94562b5bb8424a56396b5 + decision: APPROVE + bulk: true + comments: 'This user still needs access to this source.' + - id: ef38f94347e94562b5bb8424a56397d8 + decision: APPROVE + bulk: true + comments: 'This user still needs access to this source too.' + responses: + '200': + description: An identity campaign certification object + content: + application/json: + schema: + $ref: '../schemas/IdentityCertificationDto.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/identity-certifications-decision-summary.yaml b/static/idn-api/v3/paths/identity-certifications-decision-summary.yaml new file mode 100644 index 000000000..e046579eb --- /dev/null +++ b/static/idn-api/v3/paths/identity-certifications-decision-summary.yaml @@ -0,0 +1,48 @@ +get: + operationId: getIdentityDecisionSummary + tags: + - Certification Summaries + summary: Summary of Certification Decisions + description: >- + This API returns a summary of the decisions made on an identity campaign certification. The decisions are summarized + by type. A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this + certification can also call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The certification ID + example: ef38f94347e94562b5bb8424a56397d8 + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki-API-Standard-Collection-Parameters/ta-p/156407) + + + Filtering is supported for the following fields and operators: + + + **identitySummary.id**: *eq, in* + responses: + '200': + description: Summary of the decisions made + content: + application/json: + schema: + $ref: '../schemas/IdentityCertDecisionSummary.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/identity-certifications-identity-summaries.yaml b/static/idn-api/v3/paths/identity-certifications-identity-summaries.yaml new file mode 100644 index 000000000..a2b6a6853 --- /dev/null +++ b/static/idn-api/v3/paths/identity-certifications-identity-summaries.yaml @@ -0,0 +1,78 @@ +get: + operationId: getIdentitySummaries + tags: + - Certification Summaries + summary: Identity Summaries for Identity Campaign Certification + description: >- + This API returns a list of the identity summaries for a specific identity campaign certification. A token with + ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this + API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The identity campaign certification ID + example: ef38f94347e94562b5bb8424a56397d8 + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **completed**: *eq, ne* + + + **name**: *eq, sw* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **name** + responses: + '200': + description: List of identity summaries + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/CertificationIdentitySummary.yaml' + example: + - id: 2c91808772a504f50172a9540e501ba7 + name: Aaron Grey + identityId: 2c9180857182306001719937379633e4 + completed: false + - id: 2c91808772a504f50172a9540e501ba8 + name: Aglae Wilson + identityId: 2c9180857182306001719937377a33de + completed: true + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/identity-certifications-identity-summary.yaml b/static/idn-api/v3/paths/identity-certifications-identity-summary.yaml new file mode 100644 index 000000000..f1b6028d7 --- /dev/null +++ b/static/idn-api/v3/paths/identity-certifications-identity-summary.yaml @@ -0,0 +1,40 @@ +get: + operationId: getIdentitySummary + tags: + - Certification Summaries + summary: Summary for Identity + description: >- + This API returns the summary for an identity on a specified identity campaign certification. A token with ORG_ADMIN + or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The identity campaign certification ID + example: 'ef38f94347e94562b5bb8424a56397d8' + - in: path + name: identitySummaryId + schema: + type: string + required: true + description: The identity summary ID + example: '2c91808772a504f50172a9540e501ba8' + responses: + '200': + description: An identity summary + content: + application/json: + schema: + $ref: '../schemas/CertificationIdentitySummary.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/identity-certifications-reassign.yaml b/static/idn-api/v3/paths/identity-certifications-reassign.yaml new file mode 100644 index 000000000..960465fe8 --- /dev/null +++ b/static/idn-api/v3/paths/identity-certifications-reassign.yaml @@ -0,0 +1,41 @@ +post: + operationId: reassignIdentityCertifications + tags: + - Certifications + summary: Reassign Identities or Items + description: >- + This API reassigns up to 50 identities or items in an identity campaign certification to another reviewer. A token + with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can also call + this API. This API does not support requests for certifications assigned to Governance Groups. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The identity campaign certification ID + requestBody: + required: true + content: + application/json: + schema: + $ref: "../schemas/ReviewReassign.yaml" + responses: + '200': + description: An identity campaign certification details after completing the reassignment. + content: + application/json: + schema: + $ref: '../schemas/IdentityCertificationDto.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/identity-certifications-sign-off.yaml b/static/idn-api/v3/paths/identity-certifications-sign-off.yaml new file mode 100644 index 000000000..592cbbd18 --- /dev/null +++ b/static/idn-api/v3/paths/identity-certifications-sign-off.yaml @@ -0,0 +1,36 @@ +post: + operationId: signOffIdentityCertification + tags: + - Certifications + summary: Finalize Identity Certification Decisions + description: >- + This API finalizes all decisions made on an identity campaign certification and initiates any remediations required. + A token with ORG_ADMIN or CERT_ADMIN authority is required to call this API. Reviewers for this certification can + also call this API. This API does not support requests for certifications assigned to Governance Groups. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The identity campaign certification ID + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: An identity campaign certification object + content: + application/json: + schema: + $ref: '../schemas/IdentityCertificationDto.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/identity-certifications.yaml b/static/idn-api/v3/paths/identity-certifications.yaml new file mode 100644 index 000000000..a283ad919 --- /dev/null +++ b/static/idn-api/v3/paths/identity-certifications.yaml @@ -0,0 +1,66 @@ +get: + operationId: listIdentityCertifications + tags: + - Certifications + summary: Identity Campaign Certifications by IDs + description: >- + This API returns a list of identity campaign certifications that satisfy the given query parameters. Any + authenticated token can call this API, but only certifications you are authorized to review will be returned. This + API does not support requests for certifications assigned to Governance Groups. + parameters: + - in: query + name: reviewer-identity + schema: + type: string + description: >- + The ID of reviewer identity. *me* indicates the current user. + required: false + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + Filtering is supported for the following fields and operators: + + **id**: *eq, in* + + **campaign.id**: *eq, in* + + **phase**: *eq* + + **completed**: *eq, ne* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + Sorting is supported for the following fields: **name, due, signed** + responses: + '200': + description: List of identity campaign certifications + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/IdentityCertificationDto.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' + + diff --git a/static/idn-api/v3/paths/identity-profile-default-config.yaml b/static/idn-api/v3/paths/identity-profile-default-config.yaml new file mode 100644 index 000000000..514c8ddba --- /dev/null +++ b/static/idn-api/v3/paths/identity-profile-default-config.yaml @@ -0,0 +1,38 @@ +get: + operationId: getDefaultIdentityAttributeConfig + tags: + - Identity Profiles + summary: Get default Identity Attribute Config + description: >- + This returns the default identity attribute config. + + A token with ORG_ADMIN authority is required to call this API to get the default identity attribute config. + parameters: + - in: path + name: identity-profile-id + schema: + type: string + format: uuid + required: true + description: The Identity Profile ID. + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: An Identity Attribute Config object. + content: + application/json: + schema: + $ref: '../schemas/IdentityAttributeConfig.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' + security: + - bearerAuth: + - 'idn:identity-profile-default-mapping:read' diff --git a/static/idn-api/v3/paths/identity-profile-lifecycle-state.yaml b/static/idn-api/v3/paths/identity-profile-lifecycle-state.yaml new file mode 100644 index 000000000..c5d75b64d --- /dev/null +++ b/static/idn-api/v3/paths/identity-profile-lifecycle-state.yaml @@ -0,0 +1,175 @@ +get: + operationId: getLifecycleState + tags: + - Lifecycle States + summary: Retrieves Lifecycle State + description: >- + This endpoint retrieves a Lifecycle State. + + A token with ORG_ADMIN or API authority is required to call this API. + security: + - bearerAuth: + - idn:identity-profile-lifecycle-state:read + parameters: + - in: path + name: identity-profile-id + description: Identity Profile ID + required: true + schema: + type: string + - in: path + name: lifecycle-state-id + description: Lifecycle State ID + required: true + schema: + type: string + responses: + '200': + description: The requested LifecycleState was successfully retrieved. + content: + application/json: + schema: + $ref: '../schemas/LifecycleState.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +patch: + operationId: updateLifecycleStates + tags: + - Lifecycle States + summary: Update Lifecycle State + description: >- + This endpoint updates individual Lifecycle State fields using the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + + A token with ORG_ADMIN or API authority is required to call this API. + security: + - bearerAuth: + - idn:identity-profile-lifecycle-state:update + parameters: + - in: path + name: identity-profile-id + description: Identity Profile ID + required: true + schema: + type: string + - in: path + name: lifecycle-state-id + description: Lifecycle State ID + required: true + schema: + type: string + requestBody: + required: true + description: | + A list of lifecycle state update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + + The following fields can be updated: + * enabled + * description + * accountActions + * accessProfileIds + * emailNotificationOption + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + example: + - op: "replace" + path: "/description" + value: "Updated description!" + - op: "replace" + path: "/accessProfileIds" + value: + - "2c918087742bab150174407a80f3125e" + - "2c918087742bab150174407a80f3124f" + - op: "replace" + path: "/accountActions" + value: + - "action": "ENABLE" + "sourceIds": + - "2c9180846a2f82fb016a481c1b1560c5" + - "2c9180846a2f82fb016a481c1b1560cc" + - "action": "DISABLE" + "sourceIds": + - "2c91808869a0c9980169a207258513fb" + - op: "replace" + path: "/emailNotificationOption" + value: + "notifyManagers": true + "notifyAllAdmins": false + "notifySpecificUsers": false + "emailAddressList": [] + responses: + '200': + description: The LifecycleState was successfully updated. + content: + application/json: + schema: + $ref: '../schemas/LifecycleState.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +delete: + operationId: deleteLifecycleState + tags: + - Lifecycle States + summary: Delete Lifecycle State by ID + description: >- + This endpoint deletes the Lifecycle State using it's ID. + + A token with API, or ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:identity-profile-lifecycle-state:delete + parameters: + - in: path + name: identity-profile-id + description: Identity Profile ID + required: true + schema: + type: string + - in: path + name: lifecycle-state-id + description: Lifecycle State ID + required: true + schema: + type: string + responses: + '202': + description: The request was successfully accepted into the system. + content: + application/json: + schema: + $ref: '../schemas/BaseReferenceDto.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/identity-profile-lifecycle-states.yaml b/static/idn-api/v3/paths/identity-profile-lifecycle-states.yaml new file mode 100644 index 000000000..81af79061 --- /dev/null +++ b/static/idn-api/v3/paths/identity-profile-lifecycle-states.yaml @@ -0,0 +1,94 @@ +get: + operationId: listLifecycleStates + tags: + - Lifecycle States + summary: Lists LifecycleStates + description: >- + This end-point lists all the LifecycleStates associated with IdentityProfiles. + + A token with API, or ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:identity-profile-lifecycle-state:read + parameters: + - in: path + name: identity-profile-id + description: The IdentityProfile id + required: true + schema: + type: string + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/count.yaml' + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **created, modified** + responses: + '200': + description: List of LifecycleState objects + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/LifecycleState.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +post: + operationId: createLifecycleState + tags: + - Lifecycle States + summary: Create Lifecycle State + description: >- + This API creates a new Lifecycle State. + + A token with ORG_ADMIN or API authority is required to call this API. + security: + - bearerAuth: + - idn:identity-profile-lifecycle-state:create + parameters: + - in: path + name: identity-profile-id + description: Identity Profile ID + required: true + schema: + type: string + requestBody: + description: Lifecycle State + required: true + content: + application/json: + schema: + $ref: '../schemas/LifecycleState.yaml' + responses: + '201': + description: Created LifecycleState object. + content: + application/json: + schema: + $ref: '../schemas/LifecycleState.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/identity-profile.yaml b/static/idn-api/v3/paths/identity-profile.yaml new file mode 100644 index 000000000..ec39751cd --- /dev/null +++ b/static/idn-api/v3/paths/identity-profile.yaml @@ -0,0 +1,38 @@ +get: + operationId: getIdentityProfile + tags: + - Identity Profiles + summary: Get single Identity Profile + description: >- + This returns a single Identity Profile based on ID. + + A token with ORG_ADMIN or API authority is required to call this API. + parameters: + - in: path + name: identity-profile-id + schema: + type: string + format: uuid + required: true + description: The Identity Profile ID. + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: An Identity Profile object. + content: + application/json: + schema: + $ref: '../schemas/IdentityProfile.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' + security: + - bearerAuth: + - 'idn:identity-profile:read' diff --git a/static/idn-api/v3/paths/identity-profiles-export.yaml b/static/idn-api/v3/paths/identity-profiles-export.yaml new file mode 100644 index 000000000..71b82f3a5 --- /dev/null +++ b/static/idn-api/v3/paths/identity-profiles-export.yaml @@ -0,0 +1,61 @@ +get: + operationId: exportIdentityProfiles + tags: + - Identity Profiles + summary: Export Identity Profiles + description: >- + This exports existing identity profiles in the format specified by the sp-config service. + parameters: + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, ne* + + + **name**: *eq, ne* + + + **priority**: *eq, ne* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **id**, **name**, **priority** + responses: + '200': + description: List of export objects with identity profiles. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/IdentityProfileExportedObject.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' + security: + - bearerAuth: + - 'idn:identity-profile:read' diff --git a/static/idn-api/v3/paths/identity-profiles-import.yaml b/static/idn-api/v3/paths/identity-profiles-import.yaml new file mode 100644 index 000000000..e2b6bc60b --- /dev/null +++ b/static/idn-api/v3/paths/identity-profiles-import.yaml @@ -0,0 +1,36 @@ +post: + operationId: importIdentityProfiles + summary: Import Identity Profiles + description: >- + This imports previously exported identity profiles. + tags: + - Identity Profiles + requestBody: + description: Previously exported Identity Profiles. + required: true + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/IdentityProfileExportedObject.yaml' + responses: + '200': + description: The result of importing Identity Profiles. + content: + application/json: + schema: + $ref: '../schemas/ObjectImportResult.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' + security: + - bearerAuth: + - 'idn:identity-profile:create' diff --git a/static/idn-api/v3/paths/identity-profiles.yaml b/static/idn-api/v3/paths/identity-profiles.yaml new file mode 100644 index 000000000..e24ed6878 --- /dev/null +++ b/static/idn-api/v3/paths/identity-profiles.yaml @@ -0,0 +1,63 @@ +get: + operationId: listIdentityProfiles + tags: + - Identity Profiles + summary: Identity Profiles List + description: >- + This returns a list of Identity Profiles based on the specified query parameters. + + A token with ORG_ADMIN or API authority is required to call this API to get a list of Identity Profiles. + parameters: + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, ne* + + + **name**: *eq, ne* + + + **priority**: *eq, ne* + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **id**, **name**, **priority** + responses: + '200': + description: List of identityProfiles. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/IdentityProfile.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' + security: + - bearerAuth: + - 'idn:identity-profile:read' diff --git a/static/idn-api/v3/paths/identity-set-lifecycle-state.yaml b/static/idn-api/v3/paths/identity-set-lifecycle-state.yaml new file mode 100644 index 000000000..635d04555 --- /dev/null +++ b/static/idn-api/v3/paths/identity-set-lifecycle-state.yaml @@ -0,0 +1,54 @@ +post: + operationId: setLifecycleState + tags: + - Lifecycle States + summary: Set Lifecycle State + description: >- + This endpoint will set/update an identity's lifecycle state to the one provided and updates the corresponding Identity Profile. + + A token with ORG_ADMIN or API authority is required to call this API. + security: + - bearerAuth: + - idn:identity-lifecycle-state:update + parameters: + - in: path + name: identity-id + description: >- + The ID of the identity to update + required: true + example: 2c9180857893f1290178944561990364 + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + lifecycleStateId: + type: string + description: The ID of the lifecycle state to set + example: 2c9180877a86e408017a8c19fefe046c + responses: + '200': + description: The request was successfully accepted into the system. + content: + application/json: + schema: + type: object + properties: + accountActivityId: + type: string + example: 2c9180837ab5b716017ab7c6c9ef1e20 + description: The ID of the IdentityRequest object that was generated when the workflow launches + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/non-employee-approval-list.yaml b/static/idn-api/v3/paths/non-employee-approval-list.yaml new file mode 100644 index 000000000..5651e862c --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-approval-list.yaml @@ -0,0 +1,61 @@ +get: + operationId: nonEmployeeApprovalList + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Get List of Non-Employee Approval Requests + description: >- + This gets a list of non-employee approval requests.

        + + There are two contextual uses for this endpoint:
        + 1. The user has the role context of `idn:nesr:read`, in which case they can list the approvals for any approver.
        + 2. The user owns the requested approval. + parameters: + - in: query + name: requested-for + schema: + type: string + description: >- + The identity for whom the request was made. *me* indicates the current user. + required: false + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407)

        + Filtering is supported for the following fields and operators:

        + **approvalStatus**: *eq*

        + *Example:* approvalStatus eq "PENDING" + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407#toc-hId-2058949)

        + Sorting is supported for the following fields: **created, modified** + + responses: + '200': + description: List of approval items. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/non-employee/NonEmployeeApprovalItem.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/non-employee-approval-summary.yaml b/static/idn-api/v3/paths/non-employee-approval-summary.yaml new file mode 100644 index 000000000..164dc84f5 --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-approval-summary.yaml @@ -0,0 +1,37 @@ +get: + operationId: nonEmployeeApprovalSummary + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Get Summary of Non-Employee Approval Requests + description: >- + This request will retrieve a summary of non-employee approval requests.

        + There are two contextual uses for the `requested-for` path parameter:
        + 1. The user has the role context of `idn:nesr:read`, in which case he or she may request a summary of all non-employee approval requests assigned to a particular approver by passing in that approver's id.
        + 2. The current user is an approver, in which case "me" should be provided as the `requested-for` value. This will provide the approver with a summary of the approval items assigned to him or her. + parameters: + - in: path + name: requested-for + schema: + type: string + description: >- + The identity (UUID) of the approver for whom for whom the summary is being retrieved. Use "me" instead to indicate the current user. + required: true + responses: + '200': + description: summary of non-employee approval requests + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeApprovalSummary.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/non-employee-approve-get.yaml b/static/idn-api/v3/paths/non-employee-approve-get.yaml new file mode 100644 index 000000000..a65663852 --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-approve-get.yaml @@ -0,0 +1,44 @@ +get: + operationId: nonEmployeeApprovalGet + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Get a non-employee approval item detail + description: >- + Gets a non-employee approval item detail.

        + There are two contextual uses for this endpoint:
        + 1. The user has the role context of `idn:nesr:read`, in which case they can get any approval.
        + 2. The user owns the requested approval. + parameters: + - in: path + name: id + description: >- + Non-Employee approval item id (UUID) + required: true + schema: + type: string + - in: query + name: include-detail + description: >- + The object nonEmployeeRequest will not be included detail when set to false. *Default value is true* + required: false + schema: + type: string + responses: + '200': + description: Non-Employee approval item object. + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeApprovalItemDetail.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/non-employee-approve-request.yaml b/static/idn-api/v3/paths/non-employee-approve-request.yaml new file mode 100644 index 000000000..ee28397b3 --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-approve-request.yaml @@ -0,0 +1,41 @@ +post: + operationId: nonEmployeeApproveRequest + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Approve a Non-Employee Request + description: >- + Approves a non-employee approval request and notifies the next approver.

        + The current user must be the requested approver. + parameters: + - in: path + name: id + description: >- + Non-Employee approval item id (UUID) + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeApprovalDecision.yaml' + responses: + '200': + description: Non-Employee approval item object. + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeApprovalItem.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/non-employee-bulk-upload-jobs-fail.yaml b/static/idn-api/v3/paths/non-employee-bulk-upload-jobs-fail.yaml new file mode 100644 index 000000000..77a7b7421 --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-bulk-upload-jobs-fail.yaml @@ -0,0 +1,48 @@ +post: + # security: + # - bearerAuth: + # - 'idn:helpdesk' + operationId: nonEmployeeBulkUploadJobFail + tags: + - Non-Employee Lifecycle Management + summary: Fail Bulk Upload + description: | + This API does not stop the job. It flags the job as failed. The job continues to run if it was + running when the API was invoked.

        + + Before you submit this request, verify the transaction is actually failed in Kibana. When + the NON_EMPLOYEE_CREATE_PASSED events have stopped, then the job is completed.

        + + Important: This API does not stop the job, it flags the job as failed. The job continues to run if + the it was running when the API was invoked. If invoked while the transaction is still running, + other jobs are allowed to start but the second job to start will fail.

        + + Requires role context of `idn:nesr:update`.

        + + This is for internal use only. + parameters: + - in: path + name: bulkUploadJobId + description: >- + Bulk Upload Job ID (UUID) + required: true + schema: + type: string + responses: + '200': + description: >- + The bulk upload job was marked as failed. + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeBulkUploadJob.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/non-employee-record.yaml b/static/idn-api/v3/paths/non-employee-record.yaml new file mode 100644 index 000000000..35df522aa --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-record.yaml @@ -0,0 +1,172 @@ +get: + operationId: nonEmployeeRecordGet + # security: + # - bearerAuth: + # - 'idn:nesr:read' + tags: + - Non-Employee Lifecycle Management + summary: Get a Non-Employee Record + description: >- + This gets a non-employee record.

        + + Requires role context of `idn:nesr:read` + parameters: + - in: path + name: id + description: >- + Non-Employee record id (UUID) + required: true + example: ef38f94347e94562b5bb8424a56397d8 + schema: + type: string + responses: + '200': + description: Non-Employee record object + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeRecord.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +put: + operationId: nonEmployeeRecordUpdate + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Update Non-Employee Record + description: >- + This request will update a non-employee record.

        + There are two contextual uses for this endpoint:
        + 1. The user has the role context of `idn:nesr:update`, in which case they update all available fields.
        + 2. The user is owner of the source, in this case they can only update the end date. + parameters: + - in: path + name: id + description: >- + Non-employee record id (UUID) + example: ef38f94347e94562b5bb8424a56397d8 + required: true + schema: + type: string + requestBody: + description: Non-employee record creation request body. Attributes are restricted by user type. Owner of source can update end date. Organization admins can update all available fields. + required: true + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeRequestBody.yaml' + responses: + '200': + description: An updated non-employee record. + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeRecord.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +patch: + operationId: nonEmployeeRecordPatch + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Patch Non-Employee Record + description: >- + This request will patch a non-employee record.

        + There are two contextual uses for this endpoint:
        + 1. The user has the role context of `idn:nesr:update`, in which case they update all available fields.
        + 2. The user is owner of the source, in this case they can only update the end date. + parameters: + - in: path + name: id + description: >- + Non-employee record id (UUID) + example: ef38f94347e94562b5bb8424a56397d8 + required: true + schema: + type: string + requestBody: + description: A list of non-employee update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. Attributes are restricted by user type. Owner of source can update end date. Organization admins can update all available fields. + required: true + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + example: + - op: "replace" + path: "/endDate" + value: "2019-08-23T18:40:35.772Z" + responses: + '200': + description: A patched non-employee record. + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeRecord.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +delete: + operationId: nonEmployeeRecordDelete + # security: + # - bearerAuth: + # - 'idn:nesr:delete' + tags: + - Non-Employee Lifecycle Management + summary: Delete Non-Employee Record + description: >- + This request will delete a non-employee record.

        + + Requires role context of `idn:nesr:delete` + parameters: + - in: path + name: id + description: >- + Non-Employee record id (UUID) + example: ef38f94347e94562b5bb8424a56397d8 + required: true + schema: + type: string + responses: + '204': + $ref: '../responses/204.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/paths/non-employee-records-bulk-delete.yaml b/static/idn-api/v3/paths/non-employee-records-bulk-delete.yaml new file mode 100644 index 000000000..0423516c8 --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-records-bulk-delete.yaml @@ -0,0 +1,40 @@ +post: + operationId: nonEmployeeRecordBulkDelete + # security: + # - bearerAuth: + # - 'idn:nesr:delete' + tags: + - Non-Employee Lifecycle Management + summary: Delete Multiple Non-Employee Records + description: >- + This request will delete multiple non-employee records based on the non-employee ids provided.

        + Requires role context of `idn:nesr:delete` + requestBody: + description: Non-Employee bulk delete request body. + required: true + content: + application/json: + schema: + type: object + properties: + ids: + description: List of non-employee ids. + type: array + items: + type: string + format: uuid + required: + - ids + responses: + '204': + $ref: '../responses/204.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/paths/non-employee-records.yaml b/static/idn-api/v3/paths/non-employee-records.yaml new file mode 100644 index 000000000..2b368990d --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-records.yaml @@ -0,0 +1,92 @@ +post: + operationId: nonEmployeeRecordCreation + # security: + # - bearerAuth: + # - 'idn:nesr:create' + tags: + - Non-Employee Lifecycle Management + summary: Create Non-Employee Record + description: >- + This request will create a non-employee record.

        + + Requires role context of `idn:nesr:create` + requestBody: + description: Non-Employee record creation request body. + required: true + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeRequestBody.yaml' + responses: + '200': + description: Created non-employee record. + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeRecord.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +get: + operationId: nonEmployeeRecordList + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: List Non-Employee Records + description: >- + This gets a list of non-employee records.

        + There are two contextual uses for this endpoint:
        + 1. The user has the role context of `idn:nesr:read`, in which case they can get a list of all of the non-employees.
        + 2. The user is an account manager, in which case they can get a list of the non-employees that they manage. + parameters: + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/count.yaml' + - in: query + name: sorters + required: false + schema: + type: string + format: comma-separated + example: accountName,sourceId + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407#toc-hId-2058949)

        + Sorting is supported for the following fields: **id, accountName, sourceId, manager, firstName, lastName, email, phone, startDate, endDate, created, modified** + - in: query + name: filters + required: false + schema: + type: string + example: sourceId eq "2c91808568c529c60168cca6f90c1313" + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407)

        + Filtering is supported for the following fields and operators:

        + **sourceId**: *eq*

        + *Example:* sourceId eq "2c91808568c529c60168cca6f90c1313" + responses: + '200': + description: Non-Employee record objects + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/non-employee/NonEmployeeRecord.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/non-employee-reject-request.yaml b/static/idn-api/v3/paths/non-employee-reject-request.yaml new file mode 100644 index 000000000..32014e918 --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-reject-request.yaml @@ -0,0 +1,41 @@ +post: + operationId: nonEmployeeRejectRequest + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Reject a Non-Employee Request + description: >- + This endpoint will reject an approval item request and notify user.

        + The current user must be the requested approver. + parameters: + - in: path + name: id + description: >- + Non-Employee approval item id (UUID) + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeRejectApprovalDecision.yaml' + responses: + '200': + description: Non-Employee approval item object. + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeApprovalItem.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/non-employee-request-summary-get.yaml b/static/idn-api/v3/paths/non-employee-request-summary-get.yaml new file mode 100644 index 000000000..289c6e24b --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-request-summary-get.yaml @@ -0,0 +1,38 @@ +get: + operationId: nonEmployeeRequestSummaryGet + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Get Summary of Non-Employee Requests + description: >- + This request will retrieve a summary of non-employee requests.

        + There are two contextual uses for the `requested-for` path parameter:
        + 1. The user has the role context of `idn:nesr:read`, in which case he or she may request a summary of all non-employee approval requests assigned to a particular account manager by passing in that manager's id.
        + 2. The current user is an account manager, in which case "me" should be provided as the `requested-for` value. This will provide the user with a summary of the non-employee requests in the source(s) he or she manages. + parameters: + - in: path + name: requested-for + description: >- + The identity (UUID) of the non-employee account manager for whom the summary is being retrieved. Use "me" instead to indicate the current user. + required: true + schema: + type: string + format: uuid (if user is Org Admin) + responses: + '200': + description: Non-Employee request summary object. + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeRequestSummary.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/non-employee-request.yaml b/static/idn-api/v3/paths/non-employee-request.yaml new file mode 100644 index 000000000..2d5ebc8ec --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-request.yaml @@ -0,0 +1,77 @@ +get: + operationId: nonEmployeeRequestGet + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Get a Non-Employee Request + description: >- + This gets a non-employee request.

        + + There are two contextual uses for this endpoint:
        + 1. The user has the role context of `idn:nesr:read`, in this case the user can get the non-employee request for any user.
        + 2. The user must be the owner of the non-employee request. + parameters: + - in: path + name: id + description: >- + Non-Employee request id (UUID) + example: ef38f94347e94562b5bb8424a56397d8 + required: true + schema: + type: string + responses: + '200': + description: Non-Employee request object. + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeRequest.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +delete: + operationId: nonEmployeeRequestDeletion + # security: + # - bearerAuth: + # - 'idn:nesr:delete' + tags: + - Non-Employee Lifecycle Management + summary: Delete Non-Employee Request + description: >- + This request will delete a non-employee request.

        + + Requires role context of `idn:nesr:delete` + parameters: + - in: path + name: id + description: >- + Non-Employee request id in the UUID format + required: true + schema: + type: string + format: uuid + responses: + '204': + $ref: '../responses/204.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/paths/non-employee-requests.yaml b/static/idn-api/v3/paths/non-employee-requests.yaml new file mode 100644 index 000000000..10911d24f --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-requests.yaml @@ -0,0 +1,121 @@ +post: + operationId: nonEmployeeRequestCreation + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Create Non-Employee Request + description: >- + This request will create a non-employee request and notify the approver.

        + Requires role context of `idn:nesr:create` or the user must own the source. + requestBody: + description: Non-Employee creation request body + required: true + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeRequestBody.yaml' + responses: + '200': + description: Non-Employee request creation object + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeRequest.yaml' + '400': + description: Client Error - Returned if the request body is invalid. + content: + application/json: + schema: + $ref: '../schemas/ErrorResponseDto.yaml' + examples: + 400.1 Bad Request Content: + description: Response for bad request content + value: + detailCode: 400.1 Bad Request Content + trackingId: e7eab60924f64aa284175b9fa3309599 + messages: + - locale: en + localeOrigin: REQUEST + text: firstName is required; accountName is required; + 400.1.409 Reference conflict: + description: Response for reference conflict + value: + detailCode: 400.1.409 Reference conflict + trackingId: e7eab60924f64aa284175b9fa3309599 + messages: + - locale: en + localeOrigin: REQUEST + text: Unable to create Non-Employee because the accountName "existed" is already being used. + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +get: + operationId: nonEmployeeRequestList + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: List Non-Employee Requests + description: >- + This gets a list of non-employee requests.

        + There are two contextual uses for the `requested-for` path parameter:
        + 1. The user has the role context of `idn:nesr:read`, in which case he or she may request a list non-employee requests assigned to a particular account manager by passing in that manager's id.
        + 2. The current user is an account manager, in which case "me" should be provided as the `requested-for` value. This will provide the user with a list of the non-employee requests in the source(s) he or she manages. + parameters: + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/count.yaml' + - in: query + name: requested-for + required: true + schema: + type: string + example: "me" + description: >- + The identity for whom the request was made. *me* indicates the current user. + - in: query + name: sorters + required: false + schema: + type: string + format: comma-separated + example: "created,approvalStatus" + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407#toc-hId-2058949)

        + Sorting is supported for the following fields: **created, approvalStatus, firstName, lastName, email, phone, accountName, startDate, endDate** + - in: query + name: filters + required: false + schema: + type: string + example: "sourceId eq \"2c91808568c529c60168cca6f90c1313\"" + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407)

        + Filtering is supported for the following fields and operators:

        + **sourceId**: *eq*

        + *Example:* sourceId eq "2c91808568c529c60168cca6f90c1313" + responses: + '200': + description: List of non-employee request objects. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/non-employee/NonEmployeeRequest.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/paths/non-employee-source-aggregate.yaml b/static/idn-api/v3/paths/non-employee-source-aggregate.yaml new file mode 100644 index 000000000..49909d0bc --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-source-aggregate.yaml @@ -0,0 +1,35 @@ +post: + operationId: nonEmployeeSourceAggregateGet + # security: + # - bearerAuth: + # - 'idn:nesr:create' + tags: + - Non-Employee Lifecycle Management + summary: Aggregate all accounts for a Non-Employee Source + description: >- + This fetches all the non-employee records related to a non-employee source and publishes an aggregation event for each one.

        + + Requires auth scope of 'idn:nesr:create' + parameters: + - in: path + name: sourceId + description: >- + Non-Employee sourceId + required: true + schema: + type: string + responses: + '202': + $ref: '../responses/202.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/paths/non-employee-source.yaml b/static/idn-api/v3/paths/non-employee-source.yaml new file mode 100644 index 000000000..970f7f5ea --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-source.yaml @@ -0,0 +1,123 @@ +get: + operationId: nonEmployeeSourceGet + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Get a Non-Employee Source + description: >- + This gets a non-employee source.

        + There are two contextual uses for the requested-for path parameter:
        + 1. The user has the role context of `idn:nesr:read`, in which case he or she may request any source.
        + 2. The current user is an account manager, in which case the user can only request sources that they own. + parameters: + - in: path + name: sourceId + description: >- + Source Id + example: 2c91808b7c28b350017c2a2ec5790aa1 + required: true + schema: + type: string + responses: + '200': + description: Non-Employee source object. + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeSource.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +patch: + operationId: nonEmployeeSourcePatch + # security: + # - bearerAuth: + # - 'idn:nesr:update' + tags: + - Non-Employee Lifecycle Management + summary: Patch a Non-Employee Source + description: >- + patch a non-employee source. (partial update)
        + Patchable field: **name, description, approvers, accountManagers**

        + Requires role context of `idn:nesr:update`. + parameters: + - in: path + name: sourceId + description: >- + Source Id + required: true + schema: + type: string + requestBody: + description: A list of non-employee source update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + required: true + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + example: + - op: "replace" + path: "/name" + value: { "new name" } + - op: "replace" + path: "/approvers" + value: [ "2c91809f703bb37a017040a2fe8748c7", "48b1f463c9e8427db5a5071bd81914b8" ] + responses: + '200': + description: A patched non-employee source object. + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeSource.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +delete: + operationId: nonEmployeeSourceDelete + # security: + # - bearerAuth: + # - 'idn:nesr:delete' + tags: + - Non-Employee Lifecycle Management + summary: Delete Non-Employee Source + description: >- + This request will delete a non-employee source.

        + Requires role context of `idn:nesr:delete`. + parameters: + - in: path + name: sourceId + description: >- + Source Id + required: true + schema: + type: string + responses: + '204': + $ref: '../responses/204.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/paths/non-employee-sources-bulk-upload-details.yaml b/static/idn-api/v3/paths/non-employee-sources-bulk-upload-details.yaml new file mode 100644 index 000000000..9dca08740 --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-sources-bulk-upload-details.yaml @@ -0,0 +1,40 @@ +get: + operationId: nonEmployeeBulkUploadDetails + # security: + # - bearerAuth: + # - 'idn:nesr:read' + tags: + - Non-Employee Lifecycle Management + summary: Details of bulk upload job on source + description: | + This API returns the details of the newest bulk upload job for the specified source.

        + + Requires role context of `idn:nesr:read`

        + + This is for internal use only. + parameters: + - in: path + name: id + description: >- + Source ID (UUID) + required: true + schema: + type: string + responses: + '200': + description: >- + Details of the newest bulk-upload job, if any. + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeBulkUploadJob.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/non-employee-sources-bulk-upload-non-employees.yaml b/static/idn-api/v3/paths/non-employee-sources-bulk-upload-non-employees.yaml new file mode 100644 index 000000000..225f74d64 --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-sources-bulk-upload-non-employees.yaml @@ -0,0 +1,63 @@ +post: + operationId: nonEmployeeRecordsBulkUpload + # security: + # - bearerAuth: + # - 'idn:nesr:create' + tags: + - Non-Employee Lifecycle Management + summary: Imports, or Updates, Non-Employee Records + description: >- + This post will import, or update, Non-Employee records found in the CSV.

        + Requires role context of `idn:nesr:create` + parameters: + - in: path + name: id + description: >- + Source Id (UUID) + required: true + schema: + type: string + requestBody: + description: The form-data "name" attribute for the file content must be "data". See the schema specification. + content: + multipart/form-data: + schema: + type: object + properties: + data: + type: string + format: base64 + required: + - data + example: + { data: + "accountName,firstName,lastName,phone,email,manager,startDate,endDate + Jon.Smith, Jon, Smith, 555-555-5555, jon@jon.doe.nope.com, Jim Smith, 2020-04-05T08:00:00-10:00, 2020-08-07T19:00:00-10:00 + William.Chaffin, William, Chaffin, 555-555-5555, william@chaffins.nope.com, Bertram Chaffin, 2020-04-05T08:00:00-10:00, 2020-08-07T19:00:00-10:00" + } + responses: + '202': + description: >- + The CSV was accepted to be bulk inserted now or at a later time. + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeBulkUploadJob.yaml' + '400': + description: | + Client Error - Returned if the request body is invalid. + The response body will contain the list of specific errors with one on each line. + content: + application/json: + schema: + $ref: '../schemas/ErrorResponseDto.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/non-employee-sources-bulk-upload-status.yaml b/static/idn-api/v3/paths/non-employee-sources-bulk-upload-status.yaml new file mode 100644 index 000000000..a385aff7f --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-sources-bulk-upload-status.yaml @@ -0,0 +1,37 @@ +get: + operationId: nonEmployeeBulkUploadStatus + # security: + # - bearerAuth: + # - 'idn:nesr:read' + tags: + - Non-Employee Lifecycle Management + summary: Obtain the status of bulk upload on the source + description: | + The nonEmployeeBulkUploadStatus API returns the status of the newest bulk upload job for the specified source.

        + Requires role context of `idn:nesr:read` + parameters: + - in: path + name: id + description: >- + Source ID (UUID) + required: true + schema: + type: string + responses: + '200': + description: >- + Status of the newest bulk-upload job, if any. + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeBulkUploadStatus.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/non-employee-sources-export-non-employees.yaml b/static/idn-api/v3/paths/non-employee-sources-export-non-employees.yaml new file mode 100644 index 000000000..685d2908a --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-sources-export-non-employees.yaml @@ -0,0 +1,40 @@ +get: + operationId: nonEmployeeRecordsExport + # security: + # - bearerAuth: + # - 'idn:nesr:read' + tags: + - Non-Employee Lifecycle Management + summary: Exports Non-Employee Records to CSV + description: >- + This requests a CSV download for all non-employees from a provided source.

        + Requires role context of `idn:nesr:read` + parameters: + - in: path + name: id + description: >- + Source Id (UUID) + required: true + schema: + type: string + responses: + '200': + description: Exported CSV + content: + text/csv: + example: | + accountName,firstName,lastName,phone,email,manager,startDate,endDate + Jon.Smith, Jon, Smith, 555-555-5555, jon@jon.doe.nope.com, Jim Smith, 2020-04-05T08:00:00-10:00,2020-08-07T19:00:00-10:00 + William.Chaffin, William, Chaffin, 555-555-5555, william@chaffins.nope.com, Bertram Chaffin, 2020-04-05T08:00:00-10:00,2020-08-07T19:00:00-10:00 + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/non-employee-sources-export-schema-attributes-template.yaml b/static/idn-api/v3/paths/non-employee-sources-export-schema-attributes-template.yaml new file mode 100644 index 000000000..15056a2c1 --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-sources-export-schema-attributes-template.yaml @@ -0,0 +1,38 @@ +get: + operationId: nonEmployeeExportSourceSchemaTemplate + # security: + # - bearerAuth: + # - 'idn:nesr:read' + tags: + - Non-Employee Lifecycle Management + summary: Exports Source Schema Template + description: >- + This requests a download for the Source Schema Template for a provided source.

        + Requires role context of `idn:nesr:read` + parameters: + - in: path + name: id + description: >- + Source Id (UUID) + required: true + schema: + type: string + responses: + '200': + description: Exported Source Schema Template + content: + text/csv: + example: | + accountName,firstName,lastName,phone,email,manager,startDate,endDate + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/non-employee-sources-schema-attribute.yaml b/static/idn-api/v3/paths/non-employee-sources-schema-attribute.yaml new file mode 100644 index 000000000..21c2cc1da --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-sources-schema-attribute.yaml @@ -0,0 +1,133 @@ +get: + operationId: getSchemaAttribute + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: Get Schema Attribute Non-Employee Source + description: >- + This API gets a schema attribute by Id for the specified Non-Employee SourceId.

        + Requires role context of `idn:nesr:read` or the user must be an account manager of the source. + parameters: + - in: path + name: attributeId + schema: + type: string + required: true + description: The Schema Attribute Id (UUID) + - in: path + name: sourceId + schema: + type: string + required: true + description: The Source id + responses: + '200': + description: The Schema Attribute + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeSchemaAttribute.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +patch: + operationId: patchSchemaAttribute + # security: + # - bearerAuth: + # - 'idn:nesr:update' + tags: + - Non-Employee Lifecycle Management + summary: Patch a Schema Attribute for Non-Employee Source + description: | + This end-point patches a specific schema attribute for a non-employee SourceId.

        + Requires role context of `idn:nesr:update` + parameters: + - in: path + name: attributeId + schema: + type: string + required: true + description: The Schema Attribute Id (UUID) + - in: path + name: sourceId + schema: + type: string + required: true + description: The Source id + requestBody: + description: A list of schema attribute update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + The following properties are allowed for update ':' 'label', 'helpText', 'placeholder', 'required'. + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + example: + - op: "replace" + path: "/label" + value: { "new attribute label" } + required: true + responses: + '200': + description: The Schema Attribute was successfully patched. + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeSchemaAttribute.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +delete: + operationId: deleteSchemaAttribute + # security: + # - bearerAuth: + # - 'idn:nesr:delete' + tags: + - Non-Employee Lifecycle Management + summary: Delete a Schema Attribute for Non-Employee Source + description: | + This end-point deletes a specific schema attribute for a non-employee source.

        + Requires role context of `idn:nesr:delete` + parameters: + - in: path + name: attributeId + schema: + type: string + required: true + description: The Schema Attribute Id (UUID) + - in: path + name: sourceId + schema: + type: string + required: true + description: The Source id + responses: + '204': + $ref: '../responses/204.yaml' + description: The Schema Attribute was successfully deleted. + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/non-employee-sources-schema-attributes.yaml b/static/idn-api/v3/paths/non-employee-sources-schema-attributes.yaml new file mode 100644 index 000000000..e61d6c4a3 --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-sources-schema-attributes.yaml @@ -0,0 +1,118 @@ +get: + operationId: getSchemaAttributes + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: List Schema Attributes Non-Employee Source + description: This API gets the list of schema attributes for the specified Non-Employee SourceId. There are 8 + mandatory attributes added to each new Non-Employee Source automatically. Additionaly, user can + add up to 10 custom attributes. This interface returns all the mandatory attributes followed by + any custom attributes. At most, a total of 18 attributes will be returned.

        + + Requires role context of `idn:nesr:read` or the user must be an account manager of the source. + parameters: + - in: path + name: sourceId + schema: + type: string + required: true + description: The Source id + responses: + '200': + description: A list of Schema Attributes + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/non-employee/NonEmployeeSchemaAttribute.yaml' + maxItems: 18 + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +post: + operationId: createSchemaAttribute + # security: + # - bearerAuth: + # - 'idn:nesr:create' + tags: + - Non-Employee Lifecycle Management + summary: Create a new Schema Attribute for Non-Employee Source + description: >- + This API creates a new schema attribute for Non-Employee Source. The schema technical name must be + unique in the source. Attempts to create a schema attribute with an existing name will result in a + "400.1.409 Reference conflict" response. At most, 10 custom attributes can be created per schema. Attempts + to create more than 10 will result in a "400.1.4 Limit violation" response.

        + + Requires role context of `idn:nesr:create` + parameters: + - in: path + name: sourceId + schema: + type: string + required: true + description: The Source id + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeSchemaAttributeBody.yaml' + responses: + '200': + description: >- + Schema Attribute created. + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeSchemaAttribute.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +delete: + operationId: deleteSchemaAttributes + # security: + # - bearerAuth: + # - 'idn:nesr:delete' + tags: + - Non-Employee Lifecycle Management + summary: Delete all custom schema attributes for Non-Employee Source + description: >- + This end-point deletes all custom schema attributes for a non-employee source.

        + Requires role context of `idn:nesr:delete` + parameters: + - in: path + name: sourceId + schema: + type: string + required: true + description: The Source id + responses: + '204': + $ref: '../responses/204.yaml' + description: All custon Schema Attributes were successfully deleted. + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/paths/non-employee-sources.yaml b/static/idn-api/v3/paths/non-employee-sources.yaml new file mode 100644 index 000000000..d0a8e9678 --- /dev/null +++ b/static/idn-api/v3/paths/non-employee-sources.yaml @@ -0,0 +1,96 @@ +post: + operationId: nonEmployeeSourcesCreation + # security: + # - bearerAuth: + # - 'idn:nesr:create' + tags: + - Non-Employee Lifecycle Management + summary: Create Non-Employee Source + description: >- + This request will create a non-employee source.

        + Requires role context of `idn:nesr:create` + requestBody: + description: Non-Employee source creation request body. + required: true + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeSourceRequestBody.yaml' + responses: + '200': + description: Created non-employee source. + content: + application/json: + schema: + $ref: '../schemas/non-employee/NonEmployeeSourceWithCloudExternalId.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +get: + operationId: nonEmployeeSourcesList + security: + - bearerAuth: [] + tags: + - Non-Employee Lifecycle Management + summary: List Non-Employee Sources + description: >- + This gets a list of non-employee sources.

        + There are two contextual uses for the requested-for path parameter:
        + 1. The user has the role context of `idn:nesr:read`, in which case he or she may request a list sources assigned to a particular account manager by passing in that manager's id.
        + 2. The current user is an account manager, in which case "me" should be provided as the `requested-for` value. This will provide the user with a list of the sources that he or she owns. + parameters: + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/count.yaml' + - in: query + name: requested-for + required: true + schema: + type: string + example: me + description: >- + The identity for whom the request was made. *me* indicates the current user. + - in: query + name: non-employee-count + required: false + example: true + schema: + type: boolean + description: >- + The flag to determine whether return a non-employee count associate with source. + - in: query + name: sorters + required: false + schema: + type: string + format: comma-separated + example: "name,created" + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://community.sailpoint.com/t5/IdentityNow-Wiki/V3-API-Standard-Collection-Parameters/ta-p/156407#toc-hId-2058949)

        + Sorting is supported for the following fields: **name, created** + responses: + '200': + description: List of non-employee sources objects. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/non-employee/NonEmployeeSourceWithNECount.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/paths/oauth-client.yaml b/static/idn-api/v3/paths/oauth-client.yaml new file mode 100644 index 000000000..53124816f --- /dev/null +++ b/static/idn-api/v3/paths/oauth-client.yaml @@ -0,0 +1,154 @@ +get: + operationId: getOauthClient + # security: + # - bearerAuth: + # - 'idn:oathkeeper-client:read' + tags: + - OAuth Clients + summary: Get OAuth Client + description: >- + This gets details of an OAuth client. + + Request will require the following security scope: + + - 'idn:oathkeeper-client:read' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The OAuth client id + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: Request succeeded. + content: + application/json: + schema: + $ref: '../schemas/GetOAuthClientResponse.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +delete: + operationId: deleteOauthClient + # security: + # - bearerAuth: + # - 'idn:oathkeeper-client:delete' + # - 'idn:oathkeeper-internal-client:delete' + tags: + - OAuth Clients + summary: Delete OAuth Client + description: >- + This deletes an OAuth client. + + Request will require the following security scopes: + + - 'idn:oathkeeper-client:delete' + - 'idn:oathkeeper-internal-client:delete' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The OAuth client id + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '204': + description: No content. + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +patch: + operationId: patchOauthClient + # security: + # - bearerAuth: + # - 'idn:oathkeeper-client:update' + tags: + - OAuth Clients + summary: Patch OAuth Client + description: >- + This performs a targeted update to the field(s) of an OAuth client. + + Request will require a security scope of + + 'idn:oathkeeper-client:update' + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The OAuth client id + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + description: | + A list of OAuth client update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + + The following fields are patchable: + * tenant + * businessName + * homepageUrl + * name + * description + * accessTokenValiditySeconds + * refreshTokenValiditySeconds + * redirectUris + * grantTypes + * accessType + * enabled + * strongAuthSupported + * claimsSupported + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + example: + - op: "replace" + path: "/strongAuthSupported" + value: true + - op: "replace" + path: "/businessName" + value: "acme-solar" + responses: + '200': + description: >- + Indicates the PATCH operation succeeded, and returns the OAuth client's new representation. + content: + application/json: + schema: + $ref: '../schemas/GetOAuthClientResponse.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/oauth-clients.yaml b/static/idn-api/v3/paths/oauth-clients.yaml new file mode 100644 index 000000000..a45b2962d --- /dev/null +++ b/static/idn-api/v3/paths/oauth-clients.yaml @@ -0,0 +1,72 @@ +get: + operationId: listOauthClients + # security: + # - bearerAuth: + # - 'idn:oathkeeper-client-list:read' + tags: + - OAuth Clients + summary: List OAuth Clients + description: >- + This gets a list of OAuth clients. + + Request will require the following security scope: + + - 'idn:oathkeeper-client-list:read' + responses: + '200': + description: List of OAuth clients. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/GetOAuthClientResponse.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +post: + operationId: createOauthClient + # security: + # - bearerAuth: + # - 'idn:oathkeeper-client:create' + # - 'idn:oathkeeper-internal-client:create' + tags: + - OAuth Clients + summary: Create OAuth Client + description: >- + This creates an OAuth client. + + Request will require the following security scope: + + - 'idn:oathkeeper-client:create' + - 'idn:oathkeeper-internal-client:create' + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/CreateOAuthClientRequest.yaml' + responses: + '200': + description: Request succeeded. + content: + application/json: + schema: + $ref: '../schemas/CreateOAuthClientResponse.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/password-change-status.yaml b/static/idn-api/v3/paths/password-change-status.yaml new file mode 100644 index 000000000..513c6b3c2 --- /dev/null +++ b/static/idn-api/v3/paths/password-change-status.yaml @@ -0,0 +1,35 @@ +get: + operationId: getPasswordChangeStatus + tags: + - Password Management + summary: Get Password Change Request Status + description: >- + This API returns the status of a password change request. A token with identity owner or trusted API client application authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + example: 089899f13a8f4da7824996191587bab9 + description: >- + Password change request ID + responses: + '200': + description: Status of the password change request + content: + application/json: + schema: + $ref: '../schemas/PasswordStatus.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/v3/paths/pending-access-request-approvals.yaml b/static/idn-api/v3/paths/pending-access-request-approvals.yaml new file mode 100644 index 000000000..029fd80fe --- /dev/null +++ b/static/idn-api/v3/paths/pending-access-request-approvals.yaml @@ -0,0 +1,75 @@ +get: + operationId: listPendingApprovals + summary: Pending Access Request Approvals List + tags: + - Access Request Approvals + description: >- + This endpoint returns a list of pending approvals. + See "owner-id" query parameter below for authorization info. + parameters: + - in: query + name: owner-id + schema: + type: string + description: >- + If present, the value returns only pending approvals for the specified identity. + * ORG_ADMIN users can call this with any identity ID value. + * ORG_ADMIN users can also fetch all the approvals in the org, when owner-id is not used. + * Non-ORG_ADMIN users can only specify *me* or pass their own identity ID value. + example: 2c91808568c529c60168cca6f90c1313 + + required: false + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/count.yaml' + - in: query + name: filters + required: false + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **requestedFor.id**: *eq, in* + + + **modified**: *gt, lt, ge, le* + example: id eq "2c91808568c529c60168cca6f90c1313" + - in: query + name: sorters + required: false + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **created, modified** + example: modified + responses: + '200': + description: List of Pending Approvals. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/PendingApproval.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/paths/personal-access-token.yaml b/static/idn-api/v3/paths/personal-access-token.yaml new file mode 100644 index 000000000..c5d3cbdea --- /dev/null +++ b/static/idn-api/v3/paths/personal-access-token.yaml @@ -0,0 +1,37 @@ +delete: + operationId: deletePersonalAccessToken + tags: + - Personal Access Tokens + summary: Delete Personal Access Token + description: >- + This deletes a personal access token
        +
        + Any of the following rights are required to access this resource: +
          +
        • idn:my-personal-access-tokens:delete
        • +
        • idn:all-personal-access-tokens:delete
        • +
        • idn:managed-personal-access-tokens:delete
        • +
        + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The personal access token id + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '204': + description: No content. + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/personal-access-tokens.yaml b/static/idn-api/v3/paths/personal-access-tokens.yaml new file mode 100644 index 000000000..e22813b3e --- /dev/null +++ b/static/idn-api/v3/paths/personal-access-tokens.yaml @@ -0,0 +1,90 @@ +get: + operationId: listPersonalAccessTokens + tags: + - Personal Access Tokens + summary: List Personal Access Tokens + description: >- + This gets a collection of personal access tokens associated with the optional owner-id.
        + query parameter. If the owner-id query parameter is omitted, all personal access tokens
        + for a tenant will be retrieved, but the caller must have the 'idn:all-personal-access-tokens:read' right.
        +
        + Any of the following rights are required to access this resource: +
          +
        • idn:my-personal-access-tokens:read
        • +
        • idn:all-personal-access-tokens:read
        • +
        • idn:managed-personal-access-tokens:read
        • +
        + parameters: + - in: query + name: owner-id + description: >- + The identity ID of the owner whose personal access tokens should be listed.
        + If "me", the caller should have the following right: 'idn:my-personal-access-tokens:read'
        +
        + If an actual owner ID or if the owner-id parameter is omitted in the request,
        + the caller should have the following right: 'idn:all-personal-access-tokens:read'.
        +
        + If the caller has the following right, then managed personal access tokens associated with owner-id
        + will be retrieved: 'idn:managed-personal-access-tokens:read' + required: false + schema: + type: string + default: null + example: 2c9180867b50d088017b554662fb281e + responses: + '200': + description: List of personal access tokens. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/GetPersonalAccessTokenResponse.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +post: + operationId: createPersonalAccessToken + tags: + - Personal Access Tokens + summary: Create Personal Access Token + description: >- + This creates a personal access token.
        +
        + Any of the following rights are required to access this resource: +
          +
        • idn:my-personal-access-tokens:create
        • +
        • idn:all-personal-access-tokens:create
        • +
        • idn:managed-personal-access-tokens:create
        • +
        + requestBody: + description: Name and scope of personal access token. + required: true + content: + application/json: + schema: + $ref: '../schemas/CreatePersonalAccessTokenRequest.yaml' + responses: + '200': + description: Created. Note - this is the only time Personal Access Tokens' secret attribute will be displayed. + content: + application/json: + schema: + $ref: '../schemas/CreatePersonalAccessTokenResponse.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/provisioning-policies-bulk-update.yaml b/static/idn-api/v3/paths/provisioning-policies-bulk-update.yaml new file mode 100644 index 000000000..f22d03b8d --- /dev/null +++ b/static/idn-api/v3/paths/provisioning-policies-bulk-update.yaml @@ -0,0 +1,50 @@ +post: + operationId: bulkUpdateProvisioningPolicies + tags: + - Sources + summary: Bulk Update Provisioning Policies + description: >- + This end-point updates a list of provisioning policies on the specified source in IdentityNow. + + A token with API, or ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:provisioning-policy-bulk:update + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source id. + example: 2c9180835d191a86015d28455b4a2329 + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/ProvisioningPolicyDto.yaml' + responses: + '200': + description: >- + A list of the ProvisioningPolicyDto was successfully replaced. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/ProvisioningPolicyDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/v3/paths/provisioning-policies.yaml b/static/idn-api/v3/paths/provisioning-policies.yaml new file mode 100644 index 000000000..ecb6d95cf --- /dev/null +++ b/static/idn-api/v3/paths/provisioning-policies.yaml @@ -0,0 +1,180 @@ +get: + operationId: listProvisioningPolicies + tags: + - Sources + summary: Lists ProvisioningPolicies + description: >- + This end-point lists all the ProvisioningPolicies in IdentityNow. + + A token with API, or ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:provisioning-policy-list:read + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source id + example: 2c9180835d191a86015d28455b4a2329 + responses: + '200': + description: List of ProvisioningPolicyDto objects + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/ProvisioningPolicyDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +post: + operationId: createProvisioningPolicy + tags: + - Sources + summary: Create Provisioning Policy + description: >- + This API generates a create policy/template based on field value transforms. This API is intended for use when + setting up JDBC Provisioning type sources, but it will also work on other source types. + + A token with ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:provisioning-policy:create + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source id + example: 2c9180835d191a86015d28455b4a2329 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/ProvisioningPolicyDto.yaml' + examples: + Create Account Provisioning Policy: + value: + name: Account + description: Account Provisioning Policy + usageType: CREATE + fields: [{ + "name": "displayName", + "transform": { + "type": "identityAttribute", + "attributes": { + "name": "displayName" + } + }, + "attributes": {}, + "isRequired": false, + "type": "string", + "isMultiValued": false + }, + { + "name": "distinguishedName", + "transform": { + "type": "usernameGenerator", + "attributes": { + "sourceCheck": true, + "patterns": [ + "CN=$fi $ln,OU=zzUsers,OU=Demo,DC=seri,DC=sailpointdemo,DC=com", + "CN=$fti $ln,OU=zzUsers,OU=Demo,DC=seri,DC=sailpointdemo,DC=com", + "CN=$fn $ln,OU=zzUsers,OU=Demo,DC=seri,DC=sailpointdemo,DC=com", + "CN=$fn$ln${uniqueCounter},OU=zzUsers,OU=Demo,DC=seri,DC=sailpointdemo,DC=com" + ], + "fn": { + "type": "identityAttribute", + "attributes": { + "name": "firstname" + } + }, + "ln": { + "type": "identityAttribute", + "attributes": { + "name": "lastname" + } + }, + "fi": { + "type": "substring", + "attributes": { + "input": { + "type": "identityAttribute", + "attributes": { + "name": "firstname" + } + }, + "begin": 0.0, + "end": 1.0 + } + }, + "fti": { + "type": "substring", + "attributes": { + "input": { + "type": "identityAttribute", + "attributes": { + "name": "firstname" + } + }, + "begin": 0.0, + "end": 2.0 + } + } + } + }, + "attributes": { + "cloudMaxUniqueChecks": "5", + "cloudMaxSize": "100", + "cloudRequired": "true" + }, + "isRequired": false, + "type": "", + "isMultiValued": false + }, + { + "name": "description", + "transform": { + "type": "static", + "attributes": { + "value": "" + } + }, + "attributes": {}, + "isRequired": false, + "type": "string", + "isMultiValued": false + }] + responses: + '201': + description: Created ProvisioningPolicyDto object + content: + application/json: + schema: + $ref: '../schemas/ProvisioningPolicyDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/v3/paths/provisioning-policy.yaml b/static/idn-api/v3/paths/provisioning-policy.yaml new file mode 100644 index 000000000..121982782 --- /dev/null +++ b/static/idn-api/v3/paths/provisioning-policy.yaml @@ -0,0 +1,193 @@ +get: + operationId: getProvisioningPolicy + tags: + - Sources + summary: Get Provisioning Policy by UsageType + description: >- + This end-point retrieves the ProvisioningPolicy with the specified usage on the specified Source in IdentityNow. + + A token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:provisioning-policy:read + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source ID. + example: 2c9180835d191a86015d28455b4a2329 + - in: path + name: usageType + required: true + schema: + $ref: '../schemas/UsageType.yaml' + description: The type of ProvisioningPolicy usage. + example: REGISTER + responses: + '200': + description: The requested ProvisioningPolicyDto was successfully retrieved. + content: + application/json: + schema: + $ref: '../schemas/ProvisioningPolicyDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +put: + operationId: replaceProvisioningPolicy + tags: + - Sources + summary: Update Provisioning Policy by UsageType + description: >- + This end-point updates the provisioning policy with the specified usage on the specified source in IdentityNow. + + A token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:provisioning-policy:update + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source ID. + example: 2c9180835d191a86015d28455b4a2329 + - in: path + name: usageType + required: true + schema: + $ref: '../schemas/UsageType.yaml' + description: The type of ProvisioningPolicy usage. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/ProvisioningPolicyDto.yaml' + responses: + '200': + description: The ProvisioningPolicyDto was successfully replaced. + content: + application/json: + schema: + $ref: '../schemas/ProvisioningPolicyDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +patch: + operationId: updateProvisioningPolicy + tags: + - Sources + summary: Partial update of Provisioning Policy + description: >- + This API selectively updates an existing Provisioning Policy using a JSONPatch payload. + + A token with API, ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:provisioning-policy:update + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source id. + example: 2c9180835d191a86015d28455b4a2329 + - in: path + name: usageType + required: true + schema: + $ref: '../schemas/UsageType.yaml' + description: The type of ProvisioningPolicy usage. + requestBody: + required: true + description: The JSONPatch payload used to update the schema. + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + responses: + '200': + description: The ProvisioningPolicyDto was successfully updated. + content: + application/json: + schema: + $ref: '../schemas/ProvisioningPolicyDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: deleteProvisioningPolicy + tags: + - Sources + summary: Delete Provisioning Policy by UsageType + description: >- + Deletes the provisioning policy with the specified usage on an application. + + A token with API, or ORG_ADMIN authority is required to call this API. + security: + - bearerAuth: + - idn:provisioning-policy:delete + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source ID. + example: 2c9180835d191a86015d28455b4a2329 + - in: path + name: usageType + required: true + schema: + $ref: '../schemas/UsageType.yaml' + description: The type of ProvisioningPolicy usage. + responses: + '204': + $ref: '../../v3/responses/204.yaml' + description: The ProvisioningPolicyDto was successfully deleted. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/v3/paths/public-identities-config.yaml b/static/idn-api/v3/paths/public-identities-config.yaml new file mode 100644 index 000000000..819836839 --- /dev/null +++ b/static/idn-api/v3/paths/public-identities-config.yaml @@ -0,0 +1,60 @@ +get: + operationId: getPublicIdentityConfig + tags: + - Public Identities Config + summary: Get the Public Identities Configuration + description: >- + Returns the publicly visible attributes of an identity available to request approvers for Access Requests and Certification Campaigns. A token with ORG ADMIN authority is required to + call this API. + #security: + # - bearerAuth: + # - ORG_ADMIN + responses: + '200': + description: Request succeeded. + content: + application/json: + schema: + $ref: '../schemas/PublicIdentityConfig.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' +put: + operationId: updatePublicIdentityConfig + tags: + - Public Identities Config + summary: Update the Public Identities Configuration + description: >- + Updates the publicly visible attributes of an identity available to request approvers for Access Requests and Certification Campaigns. A token with ORG ADMIN authority is required to + call this API. + #security: + # - bearerAuth: + # - ORG_ADMIN + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/PublicIdentityConfig.yaml' + responses: + '200': + description: Request succeeded. + content: + application/json: + schema: + $ref: '../schemas/PublicIdentityConfig.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/public-identities.yaml b/static/idn-api/v3/paths/public-identities.yaml new file mode 100644 index 000000000..3ce383357 --- /dev/null +++ b/static/idn-api/v3/paths/public-identities.yaml @@ -0,0 +1,106 @@ +get: + operationId: getPublicIdentities + tags: + - Public Identities + summary: Get a list of public identities + parameters: + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/count.yaml' + - in: query + name: filters + schema: + type: string + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **alias**: *eq, sw* + + + **email**: *eq, sw* + + + **firstname**: *eq, sw* + + + **lastname**: *eq, sw* + - in: query + name: add-core-filters + description: >- + If *true*, only get identities which satisfy ALL the following criteria in addition to any criteria specified by *filters*: + - Should be either correlated or protected. + - Should not be "spadmin" or "cloudadmin". + - uid should not be null. + - lastname should not be null. + - email should not be null. + required: false + schema: + type: boolean + default: false + - in: query + name: sorters + schema: + type: string + format: comma-separated + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **name** + responses: + '200': + description: A list of public identity objects. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/PublicIdentity.yaml' + example: + - id: 2c9180857182305e0171993735622948 + name: Alison Ferguso + alias: alison.ferguso + email: alison.ferguso@acme-solar.com + status: Active + manager: + type: IDENTITY + id: 2c9180a46faadee4016fb4e018c20639 + name: Thomas Edison + attributes: + - key: phone + name: Phone + value: '5125551234' + - key: country + name: Country + value: US + - id: 2c9180a46faadee4016fb4e018c20639 + name: Thomas Edison + alias: thomas.edison + email: thomas.edison@acme-solar.com + status: Active + manager: + type: IDENTITY + id: 2c918086676d3e0601677611dbde220f + name: Mister Manager + attributes: + - key: phone + name: Phone + value: '5125554321' + - key: country + name: Country + value: US + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/query-password-info.yaml b/static/idn-api/v3/paths/query-password-info.yaml new file mode 100644 index 000000000..781161e6a --- /dev/null +++ b/static/idn-api/v3/paths/query-password-info.yaml @@ -0,0 +1,32 @@ +post: + operationId: queryPasswordInfo + tags: + - Password Management + summary: Query Password Info +# security: +# - bearerAuth: +# - API + description: This API is used to query password related information. A token with API authority is required to call this API. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/PasswordInfoQueryDTO.yaml' + responses: + '200': + description: Reference to the password info. + content: + application/json: + schema: + $ref: '../schemas/PasswordInfo.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/paths/reject-access-request-approval.yaml b/static/idn-api/v3/paths/reject-access-request-approval.yaml new file mode 100644 index 000000000..415c52c00 --- /dev/null +++ b/static/idn-api/v3/paths/reject-access-request-approval.yaml @@ -0,0 +1,37 @@ +post: + operationId: rejectRequest + summary: Rejects an access request approval. + tags: + - Access Request Approvals + description: >- + This endpoint rejects an access request approval. Only the owner of the approval and admin users are allowed to perform this action. + parameters: + - in: path + name: approvalId + schema: + type: string + required: true + description: The id of the approval. + example: 2c91808b7294bea301729568c68c002e + requestBody: + description: Reviewer's comment. + required: false + content: + application/json: + schema: + $ref: "../schemas/CommentDto.yaml" + responses: + '202': + $ref: '../responses/202.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/requestable-object-list.yaml b/static/idn-api/v3/paths/requestable-object-list.yaml new file mode 100644 index 000000000..a397cffec --- /dev/null +++ b/static/idn-api/v3/paths/requestable-object-list.yaml @@ -0,0 +1,102 @@ +get: + operationId: listRequestableObjects + tags: + - Requestable Objects + summary: Requestable Objects List + description: >- + This endpoint returns a list of acccess items that that can be requested through the Access Request endpoints. + Access items are marked with AVAILABLE, PENDING or ASSIGNED with respect to the identity provided using *identity-id* query param. + + Any authenticated token can call this endpoint to see their requestable access items. + A token with ORG_ADMIN authority is required to call this endpoint to return a list of all of the requestable access items for the org or for another identity. + parameters: + - in: query + name: identity-id + required: false + schema: + type: string + example: e7eab60924f64aa284175b9fa3309599 + description: >- + If present, the value returns only requestable objects for the specified identity. + * Admin users can call this with any identity ID value. + * Non-admin users can only specify *me* or pass their own identity ID value. + * If absent, returns a list of all requestable objects for the tenant. Only admin users can make such a call. In this case, the available, pending, assigned accesses will not be annotated in the result. + - in: query + name: types + description: >- + Filters the results to the specified type/types, where each type is one of ROLE or ACCESS_PROFILE. If absent, + all types are returned. Support for additional types may be added in the future without notice. + required: false + schema: + type: array + items: + $ref: '../schemas/RequestableObjectType.yaml' + example: ROLE,ACCESS_PROFILE + explode: false + - in: query + name: term + required: false + schema: + type: string + example: "Finance Role" + description: >- + It allows searching requestable access items with a partial match on the name or description. + If term is provided, then the *filter* query parameter will be ignored. + - in: query + name: statuses + description: >- + Filters the result to the specified status/statuses, where each status is one of AVAILABLE, ASSIGNED, or PENDING. + It is an error to specify this parameter without also specifying an *identity-id* parameter. Additional statuses + may be added in the future without notice. + required: false + schema: + type: array + items: + $ref: '../schemas/RequestableObjectRequestStatus.yaml' + explode: false + example: ["ASSIGNED","PENDING"] + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/count.yaml' + - in: query + name: filters + schema: + type: string + example: 'name sw "bob"' + description: | + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + Filtering is supported for the following fields and operators: + + **id**: *eq, in* + + **name**: *eq, in, sw* + - in: query + name: sorters + schema: + type: string + format: comma-separated + example: name + description: | + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + Sorting is supported for the following fields: **name** + responses: + '200': + description: List of requestable objects + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/RequestableObject.yaml' + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/saved-searches-execute.yaml b/static/idn-api/v3/paths/saved-searches-execute.yaml new file mode 100644 index 000000000..f89b0c1d8 --- /dev/null +++ b/static/idn-api/v3/paths/saved-searches-execute.yaml @@ -0,0 +1,29 @@ +post: + tags: + - Saved Search + description: | + Executes the specified saved search. + summary: Execute a saved search by ID + operationId: savedSearchExecute + parameters: + - $ref: '../parameters/path/search/id.yaml' + requestBody: + description: | + When saved search execution is triggered by a scheduled search, *scheduleId* will specify the ID of the triggering scheduled search. + + If *scheduleId* is not specified (when execution is triggered by a UI test), the *owner* and *recipients* arguments must be provided. + content: + application/json: + schema: + $ref: '../schemas/search/saved/Arguments.yaml' + examples: + scheduled: + $ref: '../schemas/search/saved/examples/execute-scheduled.yaml' + test: + $ref: '../schemas/search/saved/examples/execute-test.yaml' + required: true + responses: + '202': + description: Accepted - Returned if the request was successfully accepted into the system. + '404': + $ref: '../responses/404.yaml' diff --git a/static/idn-api/v3/paths/saved-searches-id.yaml b/static/idn-api/v3/paths/saved-searches-id.yaml new file mode 100644 index 000000000..68ee7d80a --- /dev/null +++ b/static/idn-api/v3/paths/saved-searches-id.yaml @@ -0,0 +1,64 @@ +put: + tags: + - Saved Search + description: | + Updates an existing saved search. + summary: | + Updates an existing saved search + operationId: savedSearchUpdate + parameters: + - $ref: '../parameters/path/search/id.yaml' + requestBody: + description: The saved search to persist. + content: + application/json: + schema: + $ref: '../schemas/search/saved/SavedSearch.yaml' + required: true + responses: + '200': + description: The persisted saved search. + content: + application/json: + schema: + $ref: '../schemas/search/saved/SavedSearch.yaml' + '400': + $ref: '../responses/400.yaml' + '403': + $ref: '../responses/403.yaml' +get: + tags: + - Saved Search + description: | + Returns the specified saved search. + summary: Return a saved search by ID + operationId: savedSearchGet + parameters: + - $ref: '../parameters/path/search/id.yaml' + responses: + '200': + description: The requested saved search. + content: + application/json: + schema: + $ref: '../schemas/search/saved/SavedSearch.yaml' + '404': + $ref: '../responses/404.yaml' +delete: + tags: + - Saved Search + description: | + Deletes the specified saved search. + summary: Delete a document by ID + operationId: savedSearchDelete + parameters: + - $ref: '../parameters/path/search/id.yaml' + responses: + '204': + description: No Content - Indicates the request was successful but there is no content to be returned in the response. + '400': + $ref: '../responses/400.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' diff --git a/static/idn-api/v3/paths/saved-searches.yaml b/static/idn-api/v3/paths/saved-searches.yaml new file mode 100644 index 000000000..2161a5336 --- /dev/null +++ b/static/idn-api/v3/paths/saved-searches.yaml @@ -0,0 +1,74 @@ +post: + tags: + - Saved Search + description: | + Creates a new saved search. + summary: Create a saved search + operationId: savedSearchCreate + requestBody: + description: The saved search to persist. + content: + application/json: + schema: + allOf: + - $ref: '../schemas/search/saved/Name.yaml' + - $ref: '../schemas/search/saved/Search.yaml' + required: true + responses: + '201': + description: The persisted saved search. + content: + application/json: + schema: + $ref: '../schemas/search/saved/SavedSearch.yaml' + '400': + $ref: '../responses/400.yaml' + '403': + $ref: '../responses/403.yaml' +get: + tags: + - Saved Search + description: | + Returns a list of saved searches. + summary: Return a list of Saved Searches + operationId: savedSearchList + parameters: + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/count.yaml' + - name: filters + in: query + schema: + type: string + description: | + An expression used to constrain the result set using the filtering syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html). + + Allowed filter properties: *owner.id*, *public* + + Allowed filter operator: *eq* + + **Example filters**: + + ```owner.id eq "0de46054-fe90-434a-b84e-c6b3359d0c64"``` -- returns saved searches for the specified owner ID + + ```public eq true``` -- returns all public saved searches + + ```owner.id eq me or public eq true``` -- returns all of the current user's saved searches as well as all public saved searches belonging to other users in the current org + responses: + '200': + description: The list of requested saved searches. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/search/saved/SavedSearch.yaml' + headers: + X-Total-Count: + description: The total result count (returned only if the *count* parameter is specified as *true*). + schema: + type: integer + '400': + $ref: '../responses/400.yaml' + '403': + $ref: '../responses/403.yaml' diff --git a/static/idn-api/v3/paths/scheduled-searches-id.yaml b/static/idn-api/v3/paths/scheduled-searches-id.yaml new file mode 100644 index 000000000..95584af8f --- /dev/null +++ b/static/idn-api/v3/paths/scheduled-searches-id.yaml @@ -0,0 +1,63 @@ +put: + tags: + - Scheduled Search + description: | + Updates an existing scheduled search. + summary: Update an existing Scheduled Search + operationId: scheduledSearchUpdate + parameters: + - $ref: '../parameters/path/search/id.yaml' + requestBody: + description: The scheduled search to persist. + content: + application/json: + schema: + $ref: '../schemas/search/scheduled/ScheduledSearch.yaml' + required: true + responses: + '200': + description: The persisted scheduled search. + content: + application/json: + schema: + $ref: '../schemas/search/scheduled/ScheduledSearch.yaml' + '400': + $ref: '../responses/400.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' +get: + tags: + - Scheduled Search + description: | + Returns the specified scheduled search. + summary: Return a Scheduled Search by ID + operationId: scheduledSearchGet + parameters: + - $ref: '../parameters/path/search/id.yaml' + responses: + '200': + description: The requested scheduled search. + content: + application/json: + schema: + $ref: '../schemas/search/scheduled/ScheduledSearch.yaml' + '404': + $ref: '../responses/404.yaml' +delete: + tags: + - Scheduled Search + description: | + Deletes the specified scheduled search. + operationId: scheduledSearchDelete + summary: Delete a Scheduled Search by ID + parameters: + - $ref: '../parameters/path/search/id.yaml' + responses: + '204': + description: No Content - Indicates the request was successful but there is no content to be returned in the response. + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' diff --git a/static/idn-api/v3/paths/scheduled-searches-unsubscribe.yaml b/static/idn-api/v3/paths/scheduled-searches-unsubscribe.yaml new file mode 100644 index 000000000..56d8a5c75 --- /dev/null +++ b/static/idn-api/v3/paths/scheduled-searches-unsubscribe.yaml @@ -0,0 +1,26 @@ +post: + tags: + - Scheduled Search + description: | + Unsubscribes a recipient from the specified scheduled search. + operationId: scheduledSearchUnsubscribe + summary: Unsubscribe a recipient from Scheduled Search + parameters: + - $ref: '../parameters/path/search/id.yaml' + requestBody: + description: | + The recipient to be removed from the scheduled search. + content: + application/json: + schema: + $ref: '../schemas/search/model/base/TypedReference.yaml' + required: true + responses: + '204': + description: No Content - Indicates the request was successful but there is no content to be returned in the response. + '400': + $ref: '../responses/400.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' diff --git a/static/idn-api/v3/paths/scheduled-searches.yaml b/static/idn-api/v3/paths/scheduled-searches.yaml new file mode 100644 index 000000000..d162d149e --- /dev/null +++ b/static/idn-api/v3/paths/scheduled-searches.yaml @@ -0,0 +1,74 @@ +post: + tags: + - Scheduled Search + description: | + Creates a new scheduled search. + summary: Create a new scheduled search + operationId: scheduledSearchCreate + requestBody: + description: The scheduled search to persist. + content: + application/json: + schema: + allOf: + - $ref: '../schemas/search/scheduled/Name.yaml' + - $ref: '../schemas/search/scheduled/Schedule.yaml' + required: true + responses: + '201': + description: The persisted scheduled search. + content: + application/json: + schema: + $ref: '../schemas/search/scheduled/ScheduledSearch.yaml' + '400': + $ref: '../responses/400.yaml' + '403': + $ref: '../responses/403.yaml' +get: + tags: + - Scheduled Search + description: | + Returns a list of scheduled searches. + summary: Return a list of scheduled searches + operationId: scheduledSearchList + parameters: + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/count.yaml' + - name: filters + in: query + schema: + type: string + description: | + An expression used to constrain the result set using the filtering syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html). + + Allowed filter properties: *owner.id*, *savedSearchId* + + Allowed filter operator: *eq* + + **Example filters**: + + ```owner.id eq "0de46054-fe90-434a-b84e-c6b3359d0c64"``` -- returns scheduled searches for the specified owner ID + + ```savedSearchId eq "6cc0945d-9eeb-4948-9033-72d066e1153e"``` -- returns scheduled searches that reference the specified saved search + + ```owner.id eq me or savedSearchId eq "6cc0945d-9eeb-4948-9033-72d066e1153e"``` -- returns all of the current user's scheduled searches as well as all scheduled searches that reference the specified saved search + responses: + '200': + description: The list of requested scheduled searches. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/search/scheduled/ScheduledSearch.yaml' + headers: + X-Total-Count: + description: The total result count (returned only if the *count* parameter is specified as *true*). + schema: + type: integer + '400': + $ref: '../responses/400.yaml' + '403': + $ref: '../responses/403.yaml' diff --git a/static/idn-api/v3/paths/schema.yaml b/static/idn-api/v3/paths/schema.yaml new file mode 100644 index 000000000..f1963c591 --- /dev/null +++ b/static/idn-api/v3/paths/schema.yaml @@ -0,0 +1,193 @@ + +get: + operationId: getSchema + tags: + - Sources + summary: Get Source Schema by ID + description: | + Get the Source Schema by ID in IdentityNow. + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source id. + example: 2c9180835d191a86015d28455b4a2329 + - in: path + name: schemaId + schema: + type: string + required: true + description: The Schema id. + example: 2c9180835d191a86015d28455b4a2329 + responses: + '200': + description: The requested Schema was successfully retrieved. + content: + application/json: + schema: + $ref: '../schemas/Schema.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +put: + operationId: replaceSchema + tags: + - Sources + summary: Update Source Schema (Full) + description: >- + This API will completely replace an existing Schema with the submitted payload. Some fields of the Schema cannot be updated. These fields are listed below. + + * id + + * name + + * created + + * modified + + Any attempt to modify these fields will result in an error response with a status code of 400. + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source id. + example: 2c9180835d191a86015d28455b4a2329 + - in: path + name: schemaId + schema: + type: string + required: true + description: The Schema id. + example: 2c9180835d191a86015d28455b4a2329 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/Schema.yaml' + responses: + '200': + description: The Schema was successfully replaced. + content: + application/json: + schema: + $ref: '../schemas/Schema.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +patch: + operationId: updateSchema + tags: + - Sources + summary: Update Source Schema (Partial) + description: >- + This API can be used to selectively update an existing Schema using a JSONPatch payload. Some fields of the Schema cannot be updated. These fields are listed below. + + * id + + * name + + * created + + * modified + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source id. + example: 2c9180835d191a86015d28455b4a2329 + - in: path + name: schemaId + schema: + type: string + required: true + description: The Schema id. + example: 2c9180835d191a86015d28455b4a2329 + requestBody: + required: true + description: The JSONPatch payload used to update the schema. + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + responses: + '200': + description: The Schema was successfully updated. + content: + application/json: + schema: + $ref: '../schemas/Schema.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: deleteSchema + tags: + - Sources + summary: Delete Source Schema by ID + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source id. + example: 2c9180835d191a86015d28455b4a2329 + - in: path + name: schemaId + schema: + type: string + required: true + description: The Schema id. + example: 2c9180835d191a86015d28455b4a2329 + responses: + '204': + $ref: '../../v3/responses/204.yaml' + description: The Schema was successfully deleted. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/v3/paths/schemas.yaml b/static/idn-api/v3/paths/schemas.yaml new file mode 100644 index 000000000..4ce9434e7 --- /dev/null +++ b/static/idn-api/v3/paths/schemas.yaml @@ -0,0 +1,84 @@ + +get: + operationId: listSchemas + tags: + - Sources + summary: List Schemas on a Source + description: | + Lists the Schemas that exist on the specified Source in IdentityNow. + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source ID. + example: 2c9180835d191a86015d28455b4a2329 + - in: query + name: include-types + required: false + schema: + type: string + description: >- + If set to 'group', then the account schema is filtered and only group schemas are returned. Only a + value of 'group' is recognized. + example: group + responses: + '200': + description: The Schemas were successfully retrieved. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/Schema.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +post: + operationId: createSchema + tags: + - Sources + summary: Create Schema on a Source + description: | + Creates a new Schema on the specified Source in IdentityNow. + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source id. + example: 2c9180835d191a86015d28455b4a2329 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/Schema.yaml' + responses: + '201': + description: The Schema was successfully created on the specified Source. + content: + application/json: + schema: + $ref: '../schemas/Schema.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/v3/paths/search-aggregate.yaml b/static/idn-api/v3/paths/search-aggregate.yaml new file mode 100644 index 000000000..9a50f44ce --- /dev/null +++ b/static/idn-api/v3/paths/search-aggregate.yaml @@ -0,0 +1,57 @@ +post: + tags: + - Search + description: >- + Performs a search query aggregation and returns aggregation result. + operationId: searchAggregate + summary: "Perform a Search Query Aggregation" + parameters: + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/count.yaml' + requestBody: + content: + application/json: + schema: + $ref: '../schemas/search/Search.yaml' + examples: + metricAggregation: + $ref: '../schemas/search/aggregate/examples/metricAggregation.yaml' + metricAggregation-dsl: + $ref: '../schemas/search/aggregate/examples/metricAggregation-dsl.yaml' + bucketAggregation: + $ref: '../schemas/search/aggregate/examples/bucketAggregation.yaml' + bucketAggregation-dsl: + $ref: '../schemas/search/aggregate/examples/bucketAggregation-dsl.yaml' + nestedAggregation-bucketAggregation: + $ref: '../schemas/search/aggregate/examples/nestedAggregation-bucketAggregation.yaml' + nestedAggregation-bucketAggregation-dsl: + $ref: '../schemas/search/aggregate/examples/nestedAggregation-bucketAggregation-dsl.yaml' + nestedAggregation-filterAggregation-bucketAggregation: + $ref: '../schemas/search/aggregate/examples/nestedAggregation-filterAggregation-bucketAggregation.yaml' + nestedAggregation-filterAggregation-bucketAggregation-dsl: + $ref: '../schemas/search/aggregate/examples/nestedAggregation-filterAggregation-bucketAggregation-dsl.yaml' + bucketAggregation-subAggregation: + $ref: '../schemas/search/aggregate/examples/bucketAggregation-subAggregation.yaml' + bucketAggregation-subAggregation-dsl: + $ref: '../schemas/search/aggregate/examples/bucketAggregation-subAggregation-dsl.yaml' + required: true + responses: + '200': + description: Aggregation results. + content: + application/json: + schema: + $ref: '../schemas/search/documents/AggregationResult.yaml' + text/csv: + schema: + $ref: '../schemas/search/documents/AggregationResult-csv.yaml' + headers: + X-Total-Count: + description: The total result count (returned only if the *count* parameter is specified as *true*). + schema: + type: integer + '400': + $ref: '../responses/400.yaml' + '403': + $ref: '../responses/403.yaml' diff --git a/static/idn-api/v3/paths/search-count.yaml b/static/idn-api/v3/paths/search-count.yaml new file mode 100644 index 000000000..875bfb1bb --- /dev/null +++ b/static/idn-api/v3/paths/search-count.yaml @@ -0,0 +1,28 @@ +post: + tags: + - Search + description: >- + Performs a search with provided query and returns count of results in the X-Total-Count header. + operationId: searchCount + summary: "Count the number of Documents satisfying a Query" + requestBody: + content: + application/json: + schema: + $ref: '../schemas/search/Search.yaml' + examples: + query-timeZone: + $ref: '../schemas/search/examples/query-timeZone.yaml' + required: true + responses: + '204': + description: No content - indicates the request was successful but there is no content to be returned in the response. + headers: + X-Total-Count: + description: The total result count. + schema: + type: integer + '400': + $ref: '../responses/400.yaml' + '403': + $ref: '../responses/403.yaml' diff --git a/static/idn-api/v3/paths/search-get.yaml b/static/idn-api/v3/paths/search-get.yaml new file mode 100644 index 000000000..133aadec0 --- /dev/null +++ b/static/idn-api/v3/paths/search-get.yaml @@ -0,0 +1,32 @@ +get: + tags: + - Search + description: >- + Fetches a single document from the specified index using the specified document ID. + operationId: searchGet + summary: "Get a Document by ID" + parameters: + - $ref: '../parameters/path/search/index.yaml' + - $ref: '../parameters/path/search/id.yaml' + responses: + '200': + description: The requested document. + content: + application/json: + schema: + $ref: '../schemas/search/documents/SearchDocument.yaml' + examples: + accessProfile: + $ref: '../schemas/search/documents/examples/accessProfile.yaml' + entitlement: + $ref: '../schemas/search/documents/examples/entitlement.yaml' + event: + $ref: '../schemas/search/documents/examples/event.yaml' + identity: + $ref: '../schemas/search/documents/examples/identity.yaml' + role: + $ref: '../schemas/search/documents/examples/role.yaml' + '403': + $ref: '../responses/403.yaml' + '404': + $ref: '../responses/404.yaml' diff --git a/static/idn-api/v3/paths/search-post.yaml b/static/idn-api/v3/paths/search-post.yaml new file mode 100644 index 000000000..4a242bf7b --- /dev/null +++ b/static/idn-api/v3/paths/search-post.yaml @@ -0,0 +1,72 @@ +post: + tags: + - Search + description: >- + Performs a search with provided query and returns matching result collection. + externalDocs: + description: Learn more about search. + url: https://documentation.sailpoint.com/saas/help/search/index.html + operationId: search + summary: "Get a list of Documents" + parameters: + - $ref: '../parameters/offset.yaml' + - $ref: '../parameters/limit.yaml' + - $ref: '../parameters/count.yaml' + requestBody: + content: + application/json: + schema: + $ref: '../schemas/search/Search.yaml' + examples: + query-fields: + $ref: '../schemas/search/examples/query-fields.yaml' + query-timeZone: + $ref: '../schemas/search/examples/query-timeZone.yaml' + query-innerHit: + $ref: '../schemas/search/examples/query-innerHit.yaml' + typeAheadQuery: + $ref: '../schemas/search/examples/typeAheadQuery.yaml' + typeAheadQuery-nestedType: + $ref: '../schemas/search/examples/typeAheadQuery-nestedType.yaml' + filter-exists: + $ref: '../schemas/search/examples/filter-exists.yaml' + filter-range: + $ref: '../schemas/search/examples/filter-range.yaml' + filter-terms: + $ref: '../schemas/search/examples/filter-terms.yaml' + required: true + responses: + '200': + description: List of matching documents. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/search/documents/SearchDocument.yaml' + examples: + accessProfiles: + $ref: '../schemas/search/documents/examples/accessProfiles.yaml' + entitlements: + $ref: '../schemas/search/documents/examples/entitlements.yaml' + events: + $ref: '../schemas/search/documents/examples/events.yaml' + identities: + $ref: '../schemas/search/documents/examples/identities.yaml' + roles: + $ref: '../schemas/search/documents/examples/roles.yaml' + headers: + X-Total-Count: + schema: + type: integer + description: The total result count (returned only if the *count* parameter is specified as *true*). + '400': + $ref: '../responses/400.yaml' + '401': + $ref: '../responses/401.yaml' + '403': + $ref: '../responses/403.yaml' + '429': + $ref: '../responses/429.yaml' + '500': + $ref: '../responses/500.yaml' diff --git a/static/idn-api/v3/paths/service-desk-integration-configuration.yaml b/static/idn-api/v3/paths/service-desk-integration-configuration.yaml new file mode 100644 index 000000000..4dbd07b75 --- /dev/null +++ b/static/idn-api/v3/paths/service-desk-integration-configuration.yaml @@ -0,0 +1,66 @@ +get: + tags: + - Service Desk Integration + summary: Get the time check configuration of queued SDIM tickets + description: Get the time check configuration of queued SDIM tickets. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + operationId: getStatusCheckDetails + responses: + "200": + description: QueuedCheckConfigDetails containing the configured values + content: + application/json: + schema: + $ref: '../schemas/QueuedCheckConfigDetails.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:service-desk-admin:read' + - 'idn:service-desk-integration:read' + +put: + tags: + - Service Desk Integration + summary: Update the time check configuration of queued SDIM tickets + description: Update the time check configuration of queued SDIM tickets. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + operationId: updateStatusCheckDetails + requestBody: + description: the modified time check configuration + content: + application/json: + schema: + $ref: '../schemas/QueuedCheckConfigDetails.yaml' + required: true + responses: + "200": + description: QueuedCheckConfigDetails as updated + content: + application/json: + schema: + $ref: '../schemas/QueuedCheckConfigDetails.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:service-desk-admin:write' + - 'idn:service-desk-integration:write' diff --git a/static/idn-api/v3/paths/service-desk-integration-template.yaml b/static/idn-api/v3/paths/service-desk-integration-template.yaml new file mode 100644 index 000000000..67773f67b --- /dev/null +++ b/static/idn-api/v3/paths/service-desk-integration-template.yaml @@ -0,0 +1,39 @@ +get: + tags: + - Service Desk Integration + summary: Service Desk integration template by scriptName. + description: This API endpoint returns an existing Service Desk integration template by scriptName. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + operationId: getServiceDeskIntegrationTemplate + parameters: + - name: scriptName + in: path + description: The scriptName value of the Service Desk integration template to get + required: true + style: simple + explode: false + schema: + type: string + example: aScriptName + responses: + "200": + description: Responds with the ServiceDeskIntegrationTemplateDto with the specified scriptName. + content: + application/json: + schema: + $ref: '../schemas/ServiceDeskIntegrationTemplateDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:service-desk-admin:read' + - 'idn:service-desk-integration:read' diff --git a/static/idn-api/v3/paths/service-desk-integration-types.yaml b/static/idn-api/v3/paths/service-desk-integration-types.yaml new file mode 100644 index 000000000..10b7d356f --- /dev/null +++ b/static/idn-api/v3/paths/service-desk-integration-types.yaml @@ -0,0 +1,31 @@ +get: + tags: + - Service Desk Integration + summary: Service Desk Integration Types List. + description: This API endpoint returns the current list of supported Service Desk integration types. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + operationId: getServiceDeskIntegrationTypes + responses: + "200": + description: Responds with an array of the currently supported Service Desk integration types. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/ServiceDeskIntegrationTemplateType.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:service-desk-admin:read' + - 'idn:service-desk-integration:read' diff --git a/static/idn-api/v3/paths/service-desk-integration.yaml b/static/idn-api/v3/paths/service-desk-integration.yaml new file mode 100644 index 000000000..524e232c9 --- /dev/null +++ b/static/idn-api/v3/paths/service-desk-integration.yaml @@ -0,0 +1,175 @@ +get: + tags: + - Service Desk Integration + summary: Get a Service Desk integration by ID + description: Get an existing Service Desk integration by ID. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + operationId: getServiceDeskIntegration + parameters: + - name: id + in: path + description: ID of the Service Desk integration to get + required: true + style: simple + explode: false + schema: + type: string + example: anId + responses: + "200": + description: ServiceDeskIntegrationDto with the given ID + content: + application/json: + schema: + $ref: '../schemas/ServiceDeskIntegrationDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:service-desk-admin:read' + - 'idn:service-desk-integration:read' + +put: + tags: + - Service Desk Integration + summary: Update a Service Desk integration by ID + description: Update an existing Service Desk integration by ID with updated value in JSON form as the request body. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + operationId: updateServiceDeskIntegration + parameters: + - name: id + in: path + description: ID of the Service Desk integration to update + required: true + style: simple + explode: false + schema: + type: string + example: anId + requestBody: + description: The specifics of the integration to update + content: + application/json: + schema: + $ref: '../schemas/ServiceDeskIntegrationDto.yaml' + required: true + responses: + "200": + description: ServiceDeskIntegrationDto as updated + content: + application/json: + schema: + $ref: '../schemas/ServiceDeskIntegrationDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:service-desk-admin:write' + - 'idn:service-desk-integration:write' + +delete: + tags: + - Service Desk Integration + summary: Delete a Service Desk integration by ID + description: Delete an existing Service Desk integration by ID. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + operationId: deleteServiceDeskIntegration + parameters: + - name: id + in: path + description: ID of Service Desk integration to delete + required: true + style: simple + explode: false + schema: + type: string + example: anId + responses: + "204": + description: Service Desk integration with the given ID successfully deleted + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:service-desk-admin:write' + - 'idn:service-desk-integration:write' + +patch: + operationId: patchServiceDeskIntegration + tags: + - Service Desk Integration + summary: Service Desk Integration Update - PATCH + description: Update an existing ServiceDeskIntegration by ID with a PATCH request. + parameters: + - name: id + in: path + description: ID of the Service Desk integration to update + required: true + style: simple + explode: false + schema: + type: string + example: anId + requestBody: + required: true + description: | + A list of SDIM update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + + PATCH can only be applied to the following fields: + * "beforeProvisioningRule" + + A 403 Forbidden Error indicates that you attempted to PATCH a field that is not allowed. + content: + application/json-patch+json: + schema: + $ref: '../schemas/JsonPatch.yaml' + responses: + "200": + description: ServiceDeskIntegrationDto as updated + content: + application/json: + schema: + $ref: '../schemas/ServiceDeskIntegrationDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:service-desk-admin:write' + - 'idn:service-desk-integration:write' \ No newline at end of file diff --git a/static/idn-api/v3/paths/service-desk-integrations.yaml b/static/idn-api/v3/paths/service-desk-integrations.yaml new file mode 100644 index 000000000..e25750741 --- /dev/null +++ b/static/idn-api/v3/paths/service-desk-integrations.yaml @@ -0,0 +1,109 @@ +get: + tags: + - Service Desk Integration + summary: List existing Service Desk Integrations + description: Get a list of ServiceDeskIntegrationDto for existing Service Desk Integrations. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + operationId: getServiceDeskIntegrationList + parameters: + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - name: sorters + in: query + required: false + style: form + explode: true + schema: + type: string + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **name** + - name: filters + in: query + required: false + style: form + explode: true + schema: + type: string + format: comma-separated + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **name**: *eq* + + + **type**: *eq, in* + + + **cluster**: *eq, in* + - $ref: '../../v3/parameters/count.yaml' + responses: + "200": + description: List of ServiceDeskIntegrationDto + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/ServiceDeskIntegrationDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:service-desk-admin:read' + - 'idn:service-desk-integration:read' + +post: + tags: + - Service Desk Integration + summary: Create a new Service Desk integration + description: Create a new Service Desk Integrations. A token with Org Admin or Service Desk Admin authority is required to access this endpoint. + operationId: createServiceDeskIntegration + requestBody: + description: The specifics of a new integration to create + content: + application/json: + schema: + $ref: '../schemas/ServiceDeskIntegrationDto.yaml' + required: true + responses: + "200": + description: details of the created integration + content: + application/json: + schema: + $ref: '../schemas/ServiceDeskIntegrationDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:service-desk-admin:write' + - 'idn:service-desk-integration:write' diff --git a/static/idn-api/v3/paths/set-password.yaml b/static/idn-api/v3/paths/set-password.yaml new file mode 100644 index 000000000..f0b473d10 --- /dev/null +++ b/static/idn-api/v3/paths/set-password.yaml @@ -0,0 +1,29 @@ +post: + operationId: setPassword + tags: + - Password Management + summary: Set Identity's Password + description: This API is used to set a password for an identity. The password can only be set by the actual identity owner or by a trusted API client application. + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/PasswordChangeRequest.yaml' + responses: + '202': + description: Reference to the password change. + content: + application/json: + schema: + $ref: '../schemas/PasswordChangeResponse.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/paths/source-accounts-schema.yaml b/static/idn-api/v3/paths/source-accounts-schema.yaml new file mode 100644 index 000000000..24450e299 --- /dev/null +++ b/static/idn-api/v3/paths/source-accounts-schema.yaml @@ -0,0 +1,92 @@ +get: + tags: + - Sources + summary: Downloads source accounts schema template + description: >- + This API downloads the CSV schema that defines the account attributes on a source. + + >**NOTE: This API is designated only for Delimited File sources.** + operationId: downloadSourceAccountsSchema + parameters: + - in: path + name: id + required: true + schema: + type: string + description: The Source id + example: '8c190e6787aa4ed9a90bd9d5344523fb' + responses: + '200': + description: Successfully downloaded the file + content: + text/csv: + example: "id,name,givenName,familyName,e-mail,location,manager,groups,startDate,endDate" + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:source-schema:read' +post: + tags: + - Sources + summary: Uploads source accounts schema template + description: >- + This API uploads a source schema template file to configure a source's account attributes. + + + To retrieve the file to modify and upload, log into Identity Now. + + + Click **Admin** -> **Connections** -> **Sources** -> **``** -> **Import Data** -> **Account Schema** -> **Options** -> **Download Schema** + + + >**NOTE: This API is designated only for Delimited File sources.** + operationId: uploadSourceAccountsSchema + parameters: + - in: path + name: id + required: true + schema: + type: string + description: The Source id + example: '8c190e6787aa4ed9a90bd9d5344523fb' + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '200': + description: Successfully uploaded the file + content: + application/json: + schema: + $ref: '../schemas/Schema.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:source-schema:update' diff --git a/static/idn-api/v3/paths/source-entitlements-schema.yaml b/static/idn-api/v3/paths/source-entitlements-schema.yaml new file mode 100644 index 000000000..40fffe747 --- /dev/null +++ b/static/idn-api/v3/paths/source-entitlements-schema.yaml @@ -0,0 +1,105 @@ +get: + tags: + - Sources + summary: Downloads source entitlements schema template + description: >- + This API downloads the CSV schema that defines the entitlement attributes on a source. + + + >**NOTE: This API is designated only for Delimited File sources.** + operationId: downloadSourceEntitlementsSchema + parameters: + - in: path + name: id + required: true + schema: + type: string + description: The Source id + example: '8c190e6787aa4ed9a90bd9d5344523fb' + - in: query + name: schemaName + schema: + type: string + description: Name of entitlement schema + example: '?schemaName=group' + responses: + '200': + description: Successfully downloaded the file + content: + text/csv: + example: "id,name,displayName,created,description,modified,entitlements,groups,permissions" + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:source-schema:read' +post: + tags: + - Sources + summary: Uploads source entitlements schema template + description: >- + This API uploads a source schema template file to configure a source's entitlement attributes. + + + To retrieve the file to modify and upload, log into Identity Now. + + + Click **Admin** -> **Connections** -> **Sources** -> **``** -> **Import Data** -> **Import Entitlements** -> **Download** + + + >**NOTE: This API is designated only for Delimited File sources.** + operationId: uploadSourceEntitlementsSchema + parameters: + - in: path + name: id + required: true + schema: + type: string + description: The Source id + example: '8c190e6787aa4ed9a90bd9d5344523fb' + - in: query + name: schemaName + schema: + type: string + description: Name of entitlement schema + example: '?schemaName=group' + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '200': + description: Successfully uploaded the file + content: + application/json: + schema: + $ref: '../schemas/Schema.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:source-schema:update' diff --git a/static/idn-api/v3/paths/source-health.yaml b/static/idn-api/v3/paths/source-health.yaml new file mode 100644 index 000000000..d9a0477f7 --- /dev/null +++ b/static/idn-api/v3/paths/source-health.yaml @@ -0,0 +1,36 @@ +get: + operationId: getSourceHealth + tags: + - Sources + summary: This API fetches source health by source's id + description: >- + This endpoint fetches source health by source's id + + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source id. + example: 2c9180835d191a86015d28455b4a2329 + responses: + '200': + description: >- + Fetched source health successfully + content: + application/json: + schema: + $ref: '../schemas/SourceHealthDto.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/paths/source-upload-connector-file.yaml b/static/idn-api/v3/paths/source-upload-connector-file.yaml new file mode 100644 index 000000000..b42ecc060 --- /dev/null +++ b/static/idn-api/v3/paths/source-upload-connector-file.yaml @@ -0,0 +1,46 @@ +post: + operationId: uploadConnectorFile + tags: + - Sources + summary: Upload connector file to source + parameters: + - in: path + name: sourceId + required: true + schema: + type: string + description: The Source id. + example: 2c9180835d191a86015d28455b4a2329 + description: >- + This uploads a supplemental source connector file (like jdbc driver jars) to a source's S3 bucket. + This also sends ETS and Audit events. + + A token with ORG_ADMIN authority is required to call this API. + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + responses: + '200': + description: >- + Uploaded the file successfully and sent all post-upload events + content: + application/json: + schema: + $ref: '../schemas/Source.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/paths/source.yaml b/static/idn-api/v3/paths/source.yaml new file mode 100644 index 000000000..0f91679a0 --- /dev/null +++ b/static/idn-api/v3/paths/source.yaml @@ -0,0 +1,278 @@ +get: + operationId: getSource + tags: + - Sources + summary: Get Source by ID + description: >- + This end-point gets a specific source in IdentityNow. + + A token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Source id + example: 2c9180835d191a86015d28455b4a2329 + responses: + '200': + description: A Source object + content: + application/json: + schema: + $ref: '../schemas/Source.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +put: + operationId: replaceSource + tags: + - Sources + summary: Update Source (Full) + description: | + This API updates a source in IdentityNow, using a full object representation. In other words, the existing Source + configuration is completely replaced. + + Some fields are immutable and cannot be changed, such as: + + * id + * type + * authoritative + * connector + * connectorClass + * passwordPolicies + + Attempts to modify these fields will result in a 400 error. + + A token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Source id + example: 2c9180835d191a86015d28455b4a2329 + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/Source.yaml' + responses: + '200': + description: >- + Updated Source object. Any passwords will only show the the encrypted cipher-text, as they are not decrypt-able + in IdentityNow cloud-based services, per IdentityNow security design. + content: + application/json: + schema: + $ref: '../schemas/Source.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +patch: + operationId: updateSource + tags: + - Sources + summary: Update Source (Partial) + description: | + This API partially updates a source in IdentityNow, using a list of patch operations according to the + [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + + Some fields are immutable and cannot be changed, such as: + + * id + * type + * authoritative + * created + * modified + * connector + * connectorClass + * passwordPolicies + + Attempts to modify these fields will result in a 400 error. + + A token with ORG_ADMIN, SOURCE_ADMIN, SOURCE_SUBADMIN, or API authority is required to call this API. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Source id + example: 2c9180835d191a86015d28455b4a2329 + requestBody: + required: true + description: >- + A list of account update operations according to the [JSON Patch](https://tools.ietf.org/html/rfc6902) standard. + Any password changes are submitted as plain-text and encrypted upon receipt in IdentityNow. + content: + application/json-patch+json: + schema: + type: array + items: + $ref: '../schemas/JsonPatchOperation.yaml' + examples: + Edit the source description: + description: This example shows how to edit a source description. + value: + [ + { + "op": "replace", + "path": "/description", + "value": "new description" + } + ] + Edit the source cluster: + description: This example shows how to edit a source cluster by id. + value: + [ + { + "op": "replace", + "path": "/cluster/id", + "value": "2c918087813a902001813f3f85736b45" + } + ] + + Edit source features: + description: This example illustrates how you can update source supported features + value: + [ + { + "op": "replace", + "path": "/features", + "value": [ + "PASSWORD", + "PROVISIONING", + "ENABLE", + "AUTHENTICATE" + ] + } + ] + Change a source description and cluster in One Call: + description: This example shows how multiple fields may be updated with a single patch call. + value: + [ + { + "op": "replace", + "path": "/description", + "value": "new description" + }, + { + "op": "replace", + "path": "/cluster/id", + "value": "2c918087813a902001813f3f85736b45" + } + ] + Add a filter string to the connector: + description: This example shows how you can add a filter to incoming accounts during the account aggregation process. In the example below, any account that does not have an "m" or "d" in the id will be aggregated. + value: + [ + { + "op": "add", + "path": "/connectorAttributes/filterString", + "value": "!( id.contains( \"m\" ) ) || !( id.contains( \"d\" ) )" + } + ] + Update connector attribute for specific operation type: + description: This example shows how you can update the 3rd object in the connection parameters operationType. This will change it from a standard group aggregation to a group aggregation on the "test" entitlement type + value: + [ + { + "op": "replace", + "path": "/connectorAttributes/connectionParameters/2/operationType", + "value": "Group Aggregation-test" + } + ] + responses: + '200': + description: >- + Updated Source object. Any passwords will only show the the encrypted cipher-text, as they are not decrypt-able + in IdentityNow cloud-based services, per IdentityNow security design. + content: + application/json: + schema: + $ref: '../schemas/Source.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +delete: + operationId: deleteSource + tags: + - Sources + summary: Delete Source by ID + description: >- + This end-point deletes a specific source in IdentityNow. + + A token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + + All of accounts on the source will be removed first, then the source will be deleted. + Actual status of task execution can be retrieved via method GET `/task-status/{id}` + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The Source id + example: 2c9180835d191a86015d28455b4a2329 + responses: + '202': + description: Accepted - Returned if the request was successfully accepted into the system. + content: + application/json: + schema: + $ref: '../schemas/BaseReferenceDto.yaml' + examples: + deleteSource: + summary: Response returned when deleting a source + value: {"type": "TASK_RESULT", "id": "2c91808779ecf55b0179f720942f181a", "name": null} + links: + GetTaskStatusById: + operationId: getTaskStatus + parameters: + id: '$response.body#/id' + description: > + The `id` value returned in the response can be used as the `id` parameter in `GET /task-status/{id}`. + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + diff --git a/static/idn-api/v3/paths/sources.yaml b/static/idn-api/v3/paths/sources.yaml new file mode 100644 index 000000000..4b947e956 --- /dev/null +++ b/static/idn-api/v3/paths/sources.yaml @@ -0,0 +1,152 @@ +get: + operationId: listSources + tags: + - Sources + summary: Lists all sources in IdentityNow. + description: >- + This end-point lists all the sources in IdentityNow. + + A token with ORG_ADMIN, SOURCE_ADMIN, SOURCE_SUBADMIN, or ROLE_SUBADMIN authority is required to call this API. + parameters: + - $ref: '../../v3/parameters/limit50.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: filters + schema: + type: string + example: name eq "#Employees" + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Filtering is supported for the following fields and operators: + + + **id**: *eq, in* + + + **name**: *co, eq, in, sw* + + + **type**: *eq, in* + + + **owner.id**: *eq, in* + + + **features**: *ca, co* + + + **created**: *eq* + + + **modified**: *eq* + + + **managementWorkgroup.id**: *eq* + + + **description**: *eq* + + + **authoritative**: *eq* + + + **healthy**: *eq* + + + **status**: *eq, in* + + + **connectionType**: *eq* + + + **connectorName**: *eq* + - in: query + name: sorters + schema: + type: string + format: comma-separated + example: name + description: >- + Sort results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + + Sorting is supported for the following fields: **type, created, modified, name, owner.name, healthy, status** + - in: query + name: for-subadmin + schema: + type: string + example: name + description: >- + Filter the returned list of sources for the identity specified by the parameter, which is the id of an identity + with the role SOURCE_SUBADMIN. By convention, the value **me** indicates the identity id of the current user. + + Subadmins may only view Sources which they are able to administer; all other Sources will be filtered out when + this parameter is set. If the current user is a SOURCE_SUBADMIN but fails to pass a valid value for this + parameter, a 403 Forbidden is returned. + responses: + '200': + description: List of Source objects + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/Source.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +post: + operationId: createSource + tags: + - Sources + summary: Creates a source in IdentityNow. + description: >- + This creates a specific source with a full source JSON representation. Any passwords are submitted as plain-text and + encrypted upon receipt in IdentityNow. + + A token with ORG_ADMIN, SOURCE_ADMIN, or SOURCE_SUBADMIN authority is required to call this API. + parameters: + - in: query + name: provisionAsCsv + description: >- + Configures the source as a DelimitedFile type of source. + schema: + type: boolean + required: false + requestBody: + required: true + content: + application/json: + schema: + $ref: '../schemas/Source.yaml' + responses: + '201': + description: >- + Created Source object. Any passwords will only show the the encrypted cipher-text, as they are not decrypt-able + in IdentityNow cloud-based services, per IdentityNow security design. + content: + application/json: + schema: + $ref: '../schemas/Source.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/v3/paths/transform.yaml b/static/idn-api/v3/paths/transform.yaml new file mode 100644 index 000000000..49fe45bf3 --- /dev/null +++ b/static/idn-api/v3/paths/transform.yaml @@ -0,0 +1,140 @@ +get: + tags: + - Transforms + summary: Transform by ID + description: >- + This API returns the transform specified by the given ID. + + A token with transform read authority is required to call this API. + + operationId: getTransform + parameters: + - name: id + in: path + description: ID of the transform to retrieve + required: true + style: simple + explode: false + example: 2cd78adghjkja34jh2b1hkjhasuecd + schema: + type: string + responses: + "200": + description: Transform with the given ID + content: + application/json: + schema: + $ref: '../schemas/Transform.yaml' + "400": + $ref: '../../v3/responses/400.yaml' + "401": + $ref: '../../v3/responses/401.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + "404": + $ref: '../../v3/responses/404.yaml' + "429": + $ref: '../../v3/responses/429.yaml' + "500": + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:transforms:read' +put: + tags: + - Transforms + summary: Update a transform + description: >- + Replaces the transform specified by the given ID with the transform provided in the request body. Only the + "attributes" field is mutable. Attempting to change other properties (ex. "name" and "type") will result in an error. + + A token with transform write authority is required to call this API. + + operationId: updateTransform + parameters: + - name: id + in: path + description: ID of the transform to update + required: true + style: simple + explode: false + schema: + type: string + requestBody: + description: >- + The updated transform object (must include "name", "type", and "attributes" fields). + content: + application/json: + schema: + $ref: '../schemas/Transform.yaml' + example: + name: Timestamp To Date + type: dateFormat + attributes: { "inputFormat": "MMM-dd-yyyy, HH:mm:ss.SSS", "outputFormat": "yyyy/dd/MM" } + responses: + "200": + description: Indicates the transform was successfully updated and returns its new representation. + content: + application/json: + schema: + $ref: '../schemas/Transform.yaml' + example: + id: 2cd78adghjkja34jh2b1hkjhasuecd + name: Timestamp To Date + type: dateFormat + attributes: { "inputFormat": "MMM-dd-yyyy, HH:mm:ss.SSS", "outputFormat": "yyyy/dd/MM" } + internal: false + "400": + $ref: '../../v3/responses/400.yaml' + "401": + $ref: '../../v3/responses/401.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + "404": + $ref: '../../v3/responses/404.yaml' + "429": + $ref: '../../v3/responses/429.yaml' + "500": + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:transforms:write' +delete: + tags: + - Transforms + summary: Delete a transform + description: >- + Deletes the transform specified by the given ID. + Attempting to delete a transform that is used in one or more Identity Profile mappings will result in an error. + If this occurs, you must first remove the transform from all mappings before deleting the transform. + + A token with transform delete authority is required to call this API. + + operationId: deleteTransform + parameters: + - name: id + in: path + description: ID of the transform to delete + required: true + style: simple + explode: false + schema: + type: string + responses: + "204": + $ref: '../../v3/responses/204.yaml' + "400": + $ref: '../../v3/responses/400.yaml' + "401": + $ref: '../../v3/responses/401.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + "404": + $ref: '../../v3/responses/404.yaml' + "429": + $ref: '../../v3/responses/429.yaml' + "500": + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:transforms:delete' diff --git a/static/idn-api/v3/paths/transforms.yaml b/static/idn-api/v3/paths/transforms.yaml new file mode 100644 index 000000000..83faa4494 --- /dev/null +++ b/static/idn-api/v3/paths/transforms.yaml @@ -0,0 +1,119 @@ +get: + tags: + - Transforms + summary: List transforms + description: >- + Gets a list of all saved transform objects. + + A token with transforms-list read authority is required to call this API. + + operationId: getTransformsList + parameters: + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/count.yaml' + - name: name + in: query + description: >- + Name of the transform to retrieve from the list. + required: false + style: form + schema: + type: string + example: "ExampleTransformName123" + - name: filters + in: query + description: >- + Filter results using the standard syntax described in [V3 API Standard Collection Parameters](https://developer.sailpoint.com/docs/standard_collection_parameters.html) + + Filtering is supported for the following fields and operators: + + **internal**: *eq* + + **name**: *eq*, *sw* + required: false + style: form + explode: true + example: name eq "Uppercase" + schema: + type: string + responses: + "200": + description: A list of transforms matching the given criteria. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/Transform.yaml' + example: + - id: 2cd78adghjkja34jh2b1hkjhasuecd + name: Timestamp To Date + type: dateFormat + attributes: { "inputFormat": "MMM-dd-yyyy, HH:mm:ss.SSS", "outputFormat": "yyyy/dd/MM" } + internal: false + - id: 2lkas8dhj4bkuakja77giih7l4ashh + name: PrefixSubstring + type: substring + attributes: { "begin": 0, "end": 3 } + internal: true + "400": + $ref: '../../v3/responses/400.yaml' + "401": + $ref: '../../v3/responses/401.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + "404": + $ref: '../../v3/responses/404.yaml' + "429": + $ref: '../../v3/responses/429.yaml' + "500": + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:transforms-list:read' +post: + tags: + - Transforms + summary: Create transform + description: >- + Creates a new transform object immediately. By default, the internal flag is set to false to indicate that this is + a custom transform. Only SailPoint employees have the ability to create a transform with internal set to true. + Newly created Transforms can be used in the Identity Profile mappings within the UI. A token with transform write + authority is required to call this API. + + operationId: createTransform + requestBody: + required: true + description: >- + The transform to be created. + content: + application/json: + schema: + $ref: '../schemas/Transform.yaml' + example: + name: Timestamp To Date + type: dateFormat + attributes: { "inputFormat": "MMM dd yyyy, HH:mm:ss.SSS", "outputFormat": "yyyy/dd/MM" } + responses: + "201": + description: Indicates the transform was successfully created and returns its representation. + content: + application/json: + schema: + $ref: '../schemas/Transform.yaml' + "400": + $ref: '../../v3/responses/400.yaml' + "401": + $ref: '../../v3/responses/401.yaml' + "403": + $ref: '../../v3/responses/403.yaml' + "404": + $ref: '../../v3/responses/404.yaml' + "429": + $ref: '../../v3/responses/429.yaml' + "500": + $ref: '../../v3/responses/500.yaml' + security: + - bearerAuth: + - 'idn:transforms:write' diff --git a/static/idn-api/v3/paths/work-item.yaml b/static/idn-api/v3/paths/work-item.yaml new file mode 100644 index 000000000..ab0f55be0 --- /dev/null +++ b/static/idn-api/v3/paths/work-item.yaml @@ -0,0 +1,65 @@ +get: + operationId: getWorkItems + tags: + - Work Items + summary: Get a Work Item + description: >- + This gets the details of a Work Item belonging to either the specified user(admin required), or the current user. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: ID of the work item. + responses: + '200': + description: The work item with the given ID. + content: + application/json: + schema: + $ref: '../schemas/WorkItems.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' +post: + operationId: completeWorkItem + tags: + - Work Items + summary: Complete a Work Item + description: >- + This API completes a work item. Either an admin, or the owning/current user must make this request. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the work item + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: A WorkItems object + content: + application/json: + schema: + $ref: '../schemas/WorkItems.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/v3/paths/work-items-account-selection.yaml b/static/idn-api/v3/paths/work-items-account-selection.yaml new file mode 100644 index 000000000..b557c5570 --- /dev/null +++ b/static/idn-api/v3/paths/work-items-account-selection.yaml @@ -0,0 +1,44 @@ +post: + operationId: submitAccountSelection + tags: + - Work Items + summary: Submit Account Selections + description: >- + This API submits account selections. Either an admin, or the owning/current user must make this request. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the work item + example: ef38f94347e94562b5bb8424a56397d8 + requestBody: + required: true + content: + application/json: + schema: + type: object + additionalProperties: true + example: { "fieldName": "fieldValue"} + description: Account Selection Data map, keyed on fieldName + + responses: + '200': + description: A work items details object. + content: + application/json: + schema: + $ref: '../schemas/WorkItems.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/v3/paths/work-items-approve-approval-item.yaml b/static/idn-api/v3/paths/work-items-approve-approval-item.yaml new file mode 100644 index 000000000..c59a6e5bd --- /dev/null +++ b/static/idn-api/v3/paths/work-items-approve-approval-item.yaml @@ -0,0 +1,41 @@ +post: + operationId: approveApprovalItem + tags: + - Work Items + summary: Approve an Approval Item + description: >- + This API approves an Approval Item. Either an admin, or the owning/current user must make this request. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the work item + example: ef38f94347e94562b5bb8424a56397d8 + - in: path + name: approvalItemId + schema: + type: string + required: true + description: The ID of the approval item. + example: 1211bcaa32112bcef6122adb21cef1ac + responses: + '200': + description: A work items details object. + content: + application/json: + schema: + $ref: '../schemas/WorkItems.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/v3/paths/work-items-bulk-approve-approval-item.yaml b/static/idn-api/v3/paths/work-items-bulk-approve-approval-item.yaml new file mode 100644 index 000000000..395464e9e --- /dev/null +++ b/static/idn-api/v3/paths/work-items-bulk-approve-approval-item.yaml @@ -0,0 +1,34 @@ +post: + operationId: bulkApproveApprovalItem + tags: + - Work Items + summary: Bulk approve Approval Items + description: >- + This API bulk approves Approval Items. Either an admin, or the owning/current user must make this request. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the work item + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: A work items details object. + content: + application/json: + schema: + $ref: '../schemas/WorkItems.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/v3/paths/work-items-bulk-reject-approval-item.yaml b/static/idn-api/v3/paths/work-items-bulk-reject-approval-item.yaml new file mode 100644 index 000000000..1ff04cff9 --- /dev/null +++ b/static/idn-api/v3/paths/work-items-bulk-reject-approval-item.yaml @@ -0,0 +1,34 @@ +post: + operationId: bulkRejectApprovalItem + tags: + - Work Items + summary: Bulk reject Approval Items + description: >- + This API bulk rejects Approval Items. Either an admin, or the owning/current user must make this request. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the work item + example: ef38f94347e94562b5bb8424a56397d8 + responses: + '200': + description: A work items details object. + content: + application/json: + schema: + $ref: '../schemas/WorkItems.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/v3/paths/work-items-completed-count.yaml b/static/idn-api/v3/paths/work-items-completed-count.yaml new file mode 100644 index 000000000..a89f27817 --- /dev/null +++ b/static/idn-api/v3/paths/work-items-completed-count.yaml @@ -0,0 +1,33 @@ +get: + operationId: countCompletedWorkItems + tags: + - Work Items + summary: Count Completed Work Items + description: >- + This gets a count of completed work items belonging to either the specified user(admin required), or the current user. + parameters: + - in: query + name: ownerId + schema: + type: string + description: ID of the work item owner. + required: false + responses: + '200': + description: List of work items + content: + application/json: + schema: + $ref: '../schemas/WorkItemsCount.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + + diff --git a/static/idn-api/v3/paths/work-items-completed.yaml b/static/idn-api/v3/paths/work-items-completed.yaml new file mode 100644 index 000000000..205f0ef7c --- /dev/null +++ b/static/idn-api/v3/paths/work-items-completed.yaml @@ -0,0 +1,39 @@ +get: + operationId: completedWorkItems + tags: + - Work Items + summary: Completed Work Items + description: >- + This gets a collection of completed work items belonging to either the specified user(admin required), or the current user. + parameters: + - in: query + name: ownerId + schema: + type: string + description: >- + The id of the owner of the work item list being requested. Either an admin, or the owning/current user must make this request. + required: false + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + responses: + '200': + description: List of completed work items. + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/WorkItems.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + + diff --git a/static/idn-api/v3/paths/work-items-count.yaml b/static/idn-api/v3/paths/work-items-count.yaml new file mode 100644 index 000000000..a70922285 --- /dev/null +++ b/static/idn-api/v3/paths/work-items-count.yaml @@ -0,0 +1,33 @@ +get: + operationId: countWorkItems + tags: + - Work Items + summary: Count Work Items + description: >- + This gets a count of work items belonging to either the specified user(admin required), or the current user. + parameters: + - in: query + name: ownerId + schema: + type: string + description: ID of the work item owner. + required: false + responses: + '200': + description: List of work items + content: + application/json: + schema: + $ref: '../schemas/WorkItemsCount.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + + diff --git a/static/idn-api/v3/paths/work-items-reject-approval-item.yaml b/static/idn-api/v3/paths/work-items-reject-approval-item.yaml new file mode 100644 index 000000000..308cb3926 --- /dev/null +++ b/static/idn-api/v3/paths/work-items-reject-approval-item.yaml @@ -0,0 +1,41 @@ +post: + operationId: rejectApprovalItem + tags: + - Work Items + summary: Reject an Approval Item + description: >- + This API rejects an Approval Item. Either an admin, or the owning/current user must make this request. + parameters: + - in: path + name: id + schema: + type: string + required: true + description: The ID of the work item + example: ef38f94347e94562b5bb8424a56397d8 + - in: path + name: approvalItemId + schema: + type: string + required: true + description: The ID of the approval item. + example: 1211bcaa32112bcef6122adb21cef1ac + responses: + '200': + description: A work items details object. + content: + application/json: + schema: + $ref: '../schemas/WorkItems.yaml' + '400': + $ref: '../../v3/responses/400.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' diff --git a/static/idn-api/v3/paths/work-items-summary.yaml b/static/idn-api/v3/paths/work-items-summary.yaml new file mode 100644 index 000000000..9bc40ee66 --- /dev/null +++ b/static/idn-api/v3/paths/work-items-summary.yaml @@ -0,0 +1,33 @@ +get: + operationId: summaryWorkItems + tags: + - Work Items + summary: Work Items Summary + description: >- + This gets a summary of work items belonging to either the specified user(admin required), or the current user. + parameters: + - in: query + name: ownerId + schema: + type: string + description: ID of the work item owner. + required: false + responses: + '200': + description: List of work items + content: + application/json: + schema: + $ref: '../schemas/WorkItemsSummary.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + + diff --git a/static/idn-api/v3/paths/work-items.yaml b/static/idn-api/v3/paths/work-items.yaml new file mode 100644 index 000000000..e0c30ec89 --- /dev/null +++ b/static/idn-api/v3/paths/work-items.yaml @@ -0,0 +1,38 @@ +get: + operationId: listWorkItems + tags: + - Work Items + summary: List Work Items + description: >- + This gets a collection of work items belonging to either the specified user(admin required), or the current user. + parameters: + - $ref: '../../v3/parameters/limit.yaml' + - $ref: '../../v3/parameters/offset.yaml' + - $ref: '../../v3/parameters/count.yaml' + - in: query + name: ownerId + schema: + type: string + description: ID of the work item owner. + required: false + responses: + '200': + description: List of work items + content: + application/json: + schema: + type: array + items: + $ref: '../schemas/WorkItems.yaml' + '401': + $ref: '../../v3/responses/401.yaml' + '403': + $ref: '../../v3/responses/403.yaml' + '404': + $ref: '../../v3/responses/404.yaml' + '429': + $ref: '../../v3/responses/429.yaml' + '500': + $ref: '../../v3/responses/500.yaml' + + diff --git a/static/idn-api/v3/responses/202.yaml b/static/idn-api/v3/responses/202.yaml new file mode 100644 index 000000000..0a6066ac7 --- /dev/null +++ b/static/idn-api/v3/responses/202.yaml @@ -0,0 +1,5 @@ +description: Accepted - Returned if the request was successfully accepted into the system. +content: + application/json: + schema: + type : object \ No newline at end of file diff --git a/static/idn-api/v3/responses/204.yaml b/static/idn-api/v3/responses/204.yaml new file mode 100644 index 000000000..99fb1585e --- /dev/null +++ b/static/idn-api/v3/responses/204.yaml @@ -0,0 +1,3 @@ +description: No content - indicates the request was successful but there is no content to be returned in the response. +content: + application/json: {} diff --git a/static/idn-api/v3/responses/400.yaml b/static/idn-api/v3/responses/400.yaml new file mode 100644 index 000000000..7bd00529d --- /dev/null +++ b/static/idn-api/v3/responses/400.yaml @@ -0,0 +1,5 @@ +description: Client Error - Returned if the request body is invalid. +content: + application/json: + schema: + $ref: '../../v3/schemas/ErrorResponseDto.yaml' diff --git a/static/idn-api/v3/responses/401.yaml b/static/idn-api/v3/responses/401.yaml new file mode 100644 index 000000000..5bd63b23c --- /dev/null +++ b/static/idn-api/v3/responses/401.yaml @@ -0,0 +1,10 @@ +description: Unauthorized - Returned if there is no authorization header, or if the JWT token is expired. +content: + application/json: + schema: + type: object + properties: + error: + description: A message describing the error + example: "JWT validation failed: JWT is expired" + diff --git a/static/idn-api/v3/responses/403.yaml b/static/idn-api/v3/responses/403.yaml new file mode 100644 index 000000000..9f0f225a4 --- /dev/null +++ b/static/idn-api/v3/responses/403.yaml @@ -0,0 +1,15 @@ +description: Forbidden - Returned if the user you are running as, doesn't have access to this end-point. +content: + application/json: + schema: + $ref: '../../v3/schemas/ErrorResponseDto.yaml' + examples: + "403": + summary: An example of a 403 response object + value: + detailCode: "403 Forbidden" + trackingId: "b21b1f7ce4da4d639f2c62a57171b427" + messages: + - locale: "en-US" + localeOrigin: "DEFAULT" + text: "The server understood the request but refuses to authorize it." diff --git a/static/idn-api/v3/responses/404.yaml b/static/idn-api/v3/responses/404.yaml new file mode 100644 index 000000000..d012065ca --- /dev/null +++ b/static/idn-api/v3/responses/404.yaml @@ -0,0 +1,16 @@ +description: Not Found - returned if the request URL refers to a resource or object that does not exist +content: + application/json: + schema: + $ref: '../../v3/schemas/ErrorResponseDto.yaml' + examples: + "404": + summary: An example of a 404 response object + value: + detailCode: "404 Not found" + trackingId: "b21b1f7ce4da4d639f2c62a57171b427" + messages: + - locale: "en-US" + localeOrigin: "DEFAULT" + text: "The server did not find a current representation for the target resource." + \ No newline at end of file diff --git a/static/idn-api/v3/responses/429.yaml b/static/idn-api/v3/responses/429.yaml new file mode 100644 index 000000000..6b2480dba --- /dev/null +++ b/static/idn-api/v3/responses/429.yaml @@ -0,0 +1,9 @@ +description: Too Many Requests - Returned in response to too many requests in a given period of time - rate limited. The Retry-After header in the response includes how long to wait before trying again. +content: + application/json: + schema: + type: object + properties: + message: + description: A message describing the error + example: " Rate Limit Exceeded " diff --git a/static/idn-api/v3/responses/500.yaml b/static/idn-api/v3/responses/500.yaml new file mode 100644 index 000000000..098cb365c --- /dev/null +++ b/static/idn-api/v3/responses/500.yaml @@ -0,0 +1,15 @@ +description: Internal Server Error - Returned if there is an unexpected error. +content: + application/json: + schema: + $ref: '../../v3/schemas/ErrorResponseDto.yaml' + examples: + "500": + summary: An example of a 500 response object + value: + detailCode: "500.0 Internal Fault" + trackingId: "b21b1f7ce4da4d639f2c62a57171b427" + messages: + - locale: "en-US" + localeOrigin: "DEFAULT" + text: "An internal fault occurred." \ No newline at end of file diff --git a/static/idn-api/v3/schemas/AccessRequest.yaml b/static/idn-api/v3/schemas/AccessRequest.yaml new file mode 100644 index 000000000..dfec889c6 --- /dev/null +++ b/static/idn-api/v3/schemas/AccessRequest.yaml @@ -0,0 +1,29 @@ +type : object +properties: + requestedFor: + description: A list of Identity IDs for whom the Access is requested. If it's a Revoke request, there can only be one Identity ID. + type: array + items: + type: string + example: 2c918084660f45d6016617daa9210584 + requestType: + $ref: 'AccessRequestType.yaml' + requestedItems: + type: array + items: + $ref: 'AccessRequestItem.yaml' + clientMetadata: + type: object + additionalProperties: + type: string + example: + requestedAppId: 2c91808f7892918f0178b78da4a305a1 + requestedAppName: test-app + example: + requestedAppId: 2c91808f7892918f0178b78da4a305a1 + requestedAppName: test-app + description: >- + Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on + associated APIs such as /account-activities. + +required : ["requestedFor", "requestedItems"] \ No newline at end of file diff --git a/static/idn-api/v3/schemas/AccessRequestConfig.yaml b/static/idn-api/v3/schemas/AccessRequestConfig.yaml new file mode 100644 index 000000000..2eed9835f --- /dev/null +++ b/static/idn-api/v3/schemas/AccessRequestConfig.yaml @@ -0,0 +1,19 @@ +type : object +properties: + approvalsMustBeExternal: + type: boolean + description: If true, then approvals must be processed by external system. + example: true + autoApprovalEnabled: + type: boolean + description: If true and requester and reviewer are the same, then automatically approve the approval. + example: true + requestOnBehalfOfConfig: + $ref: './RequestOnBehalfOfConfig.yaml' + description: Request On Behalf Of Configuration. + approvalReminderAndEscalationConfig: + $ref: './ApprovalReminderAndEscalationConfig.yaml' + description: Approval Reminder and Escalation Configuration. + entitlementRequestConfig: + $ref: './EntitlementRequestConfig.yaml' + description: Entitlement Request Configuration. \ No newline at end of file diff --git a/static/idn-api/v3/schemas/AccessRequestItem.yaml b/static/idn-api/v3/schemas/AccessRequestItem.yaml new file mode 100644 index 000000000..f510c6e48 --- /dev/null +++ b/static/idn-api/v3/schemas/AccessRequestItem.yaml @@ -0,0 +1,44 @@ +type : object +properties: + type: + type: string + # Can't use $ref to RequestableObjectType here because it's non-optional on access requests + enum: [ACCESS_PROFILE, ROLE, ENTITLEMENT] + description: The type of the item being requested. + example: ACCESS_PROFILE + id: + type: string + description: ID of Role, Access Profile or Entitlement being requested. + example: 2c9180835d2e5168015d32f890ca1581 + comment: + type: string + description: | + Comment provided by requester. + * Comment is required when the request is of type Revoke Access. + example: Requesting access profile for John Doe + clientMetadata: + type: object + additionalProperties: + type: string + example: + requestedAppId: 2c91808f7892918f0178b78da4a305a1 + requestedAppName: test-app + example: + requestedAppName: test-app + requestedAppId: 2c91808f7892918f0178b78da4a305a1 + description: >- + Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on + associated APIs such as /account-activities. + removeDate: + type: string + description: | + The date the role or access profile is no longer assigned to the specified identity. + * Specify a date in the future. + * The current SLA for the deprovisioning is 24 hours. + * This date can be modified to either extend or decrease the duration of access item assignments for the specified identity. + * Currently it is not supported for entitlements. + + format: 'date-time' + example: '2020-07-11T21:23:15.000Z' +required : ["id", "type"] + diff --git a/static/idn-api/v3/schemas/AccessRequestPhases.yaml b/static/idn-api/v3/schemas/AccessRequestPhases.yaml new file mode 100644 index 000000000..bfa1d5ddc --- /dev/null +++ b/static/idn-api/v3/schemas/AccessRequestPhases.yaml @@ -0,0 +1,39 @@ +type: object +properties: + started: + type: string + description: The time that this phase started. + format: 'date-time' + example: '2020-07-11T00:00:00Z' + finished: + type: string + description: The time that this phase finished. + format: 'date-time' + example: '2020-07-12T00:00:00Z' + name: + type: string + description: The name of this phase. + example: APPROVAL_PHASE + state: + type: string + enum: + - PENDING + - EXECUTING + - COMPLETED + - CANCELLED + description: The state of this phase. + example: COMPLETED + result: + type: string + enum: + - SUCCESSFUL + - FAILED + description: The state of this phase. + example: SUCCESSFUL + phaseReference: + type: string + description: >- + A reference to another object on the RequestedItemStatus that contains more details about the phase. + Note that for the Provisioning phase, this will be empty if there are no manual work items. + example: 'approvalDetails' +description: Provides additional details about this access request phase. \ No newline at end of file diff --git a/static/idn-api/v3/schemas/AccessRequestType.yaml b/static/idn-api/v3/schemas/AccessRequestType.yaml new file mode 100644 index 000000000..2f6292443 --- /dev/null +++ b/static/idn-api/v3/schemas/AccessRequestType.yaml @@ -0,0 +1,8 @@ +type: string +enum: + - GRANT_ACCESS + - REVOKE_ACCESS +description: >- + Access request type. Defaults to GRANT_ACCESS. + REVOKE_ACCESS type can only have a single Identity ID in the requestedFor field. Currently REVOKE_ACCESS is not supported for entitlements. +example: GRANT_ACCESS diff --git a/static/idn-api/v3/schemas/AccessReviewItem.yaml b/static/idn-api/v3/schemas/AccessReviewItem.yaml new file mode 100644 index 000000000..598601c2d --- /dev/null +++ b/static/idn-api/v3/schemas/AccessReviewItem.yaml @@ -0,0 +1,26 @@ +# Replaced by ReviewItem.yaml +# Cannot represent information from a Role Composition Certification Item +type : object +properties: + accessSummary: + $ref: './AccessSummary.yaml' + identitySummary: + $ref: './CertificationIdentitySummary.yaml' + id: + type: string + description: The review item's id + example: ef38f94347e94562b5bb8424a56397d8 + completed: + type: boolean + description: Whether the review item is complete + example: false + newAccess: + type: boolean + description: Indicates whether the review item is for new access to a source + decision: + $ref: './CertificationDecision.yaml' + comments: + nullable: true + type: string + description: Comments for this review item + example: This user still needs access to this source diff --git a/static/idn-api/v3/schemas/AccessSummary.yaml b/static/idn-api/v3/schemas/AccessSummary.yaml new file mode 100644 index 000000000..242ed4f4f --- /dev/null +++ b/static/idn-api/v3/schemas/AccessSummary.yaml @@ -0,0 +1,25 @@ +# Replaced by ReviewData.yaml +# Cannot represent information for a Role Composition Certification Item +type : object +description: An object holding the access that is being reviewed +properties: + access: + type: object + properties: + type: + description: The type of item being certified + $ref: './DtoType.yaml' + id: + type: string + description: The ID of the item being certified + example: 2c9180867160846801719932c5153fb7 + name: + type: string + description: The name of the item being certified + example: Entitlement for Company Database + entitlement: + $ref: './reviews/ReviewableEntitlement.yaml' + accessProfile: + $ref: './reviews/ReviewableAccessProfile.yaml' + role: + $ref: './reviews/ReviewableRole.yaml' diff --git a/static/idn-api/v3/schemas/AccessType.yaml b/static/idn-api/v3/schemas/AccessType.yaml new file mode 100644 index 000000000..3785efeb2 --- /dev/null +++ b/static/idn-api/v3/schemas/AccessType.yaml @@ -0,0 +1,6 @@ +type: string +enum: + - ONLINE + - OFFLINE +description: Access type of API Client indicating online or offline use +example: "OFFLINE" diff --git a/static/idn-api/v3/schemas/Account.yaml b/static/idn-api/v3/schemas/Account.yaml new file mode 100644 index 000000000..dee6fd36c --- /dev/null +++ b/static/idn-api/v3/schemas/Account.yaml @@ -0,0 +1,32 @@ +allOf: + - $ref: './BaseCommonDto.yaml' + - type: object + properties: + sourceId: + type: string + example: 2c9180835d2e5168015d32f890ca1581 + identityId: + type: string + example: 2c9180835d2e5168015d32f890ca1581 + attributes: + type: object + authoritative: + type: boolean + description: + type: string + disabled: + type: boolean + locked: + type: boolean + nativeIdentity: + type: string + systemAccount: + type: boolean + uncorrelated: + type: boolean + uuid: + type: string + manuallyCorrelated: + type: boolean + hasEntitlements: + type: boolean diff --git a/static/idn-api/v3/schemas/AccountAction.yaml b/static/idn-api/v3/schemas/AccountAction.yaml new file mode 100644 index 000000000..a2cb5b8af --- /dev/null +++ b/static/idn-api/v3/schemas/AccountAction.yaml @@ -0,0 +1,19 @@ +type : object +description: Object for specifying Actions to be performed on a specified list of sources' account. +properties: + action: + example: ENABLE + type: string + description: Describes if action will be enabled or disabled + enum: + - ENABLE + - DISABLE + sourceIds: + type: array + items: + type: string + uniqueItems: true + example: ["2c918084660f45d6016617daa9210584", "2c918084660f45d6016617daa9210500"] + description: >- + List of unique source IDs. The sources must have the ENABLE feature or flat file source. + See "/sources" endpoint for source features. diff --git a/static/idn-api/v3/schemas/AccountActivity.yaml b/static/idn-api/v3/schemas/AccountActivity.yaml new file mode 100644 index 000000000..7cbeaa3be --- /dev/null +++ b/static/idn-api/v3/schemas/AccountActivity.yaml @@ -0,0 +1,58 @@ +type: object +properties: + id: + type: string + description: Id of the account activity itself + example: 2c9180835d2e5168015d32f890ca1581 + name: + type: string + example: 2c9180835d2e5168015d32f890ca1581 + created: + type: string + format: 'date-time' + example: '2017-07-11T18:45:37.098Z' + modified: + type: string + format: 'date-time' + example: '2018-06-25T20:22:28.104Z' + completed: + type: string + format: 'date-time' + nullable: true + example: '2018-10-19T13:49:37.385Z' + completionStatus: + $ref: './CompletionStatus.yaml' + type: + type: string + example: appRequest + requesterIdentitySummary: + $ref: './IdentitySummary.yaml' + targetIdentitySummary: + $ref: './IdentitySummary.yaml' + errors: + nullable: true + type: array + items: + type: string + example: ["sailpoint.connector.ConnectorException: java.lang.InterruptedException: Timeout waiting for response to message 0 from client 57a4ab97-ab3f-4aef-9fe2-0eaf15c73d26 after 60 seconds."] + warnings: + nullable: true + type: array + items: + type: string + example: ["Some warning, another warning"] + items: + type: array + items: + $ref: './AccountActivityItem.yaml' + executionStatus: + $ref: './ExecutionStatus.yaml' + clientMetadata: + nullable: true + type: object + additionalProperties: + type: string + description: >- + Arbitrary key-value pairs, if any were included in the corresponding access request + + diff --git a/static/idn-api/v3/schemas/AccountActivityItem.yaml b/static/idn-api/v3/schemas/AccountActivityItem.yaml new file mode 100644 index 000000000..0ef011bf6 --- /dev/null +++ b/static/idn-api/v3/schemas/AccountActivityItem.yaml @@ -0,0 +1,60 @@ +type: object +properties: + id: + type: string + description: Item id + example: 2725138ee34949beb0d6cc982d2d4625 + name: + type: string + description: Human-readable display name of item + requested: + type: string + format: 'date-time' + description: Date and time item was requested + example: '2017-07-11T18:45:37.098Z' + approvalStatus: + $ref: './WorkItemState.yaml' + provisioningStatus: + $ref: './ProvisioningState.yaml' + requesterComment: + $ref: './Comment.yaml' + reviewerIdentitySummary: + $ref: './IdentitySummary.yaml' + reviewerComment: + $ref: './Comment.yaml' + operation: + $ref: './AccountActivityItemOperation.yaml' + attribute: + type: string + description: Attribute to which account activity applies + nullable: true + example: detectedRoles + value: + type: string + description: Value of attribute + nullable: true + example: Treasury Analyst [AccessProfile-1529010191212] + nativeIdentity: + nullable: true + type: string + description: Native identity in the target system to which the account activity applies + example: Sandie.Camero + sourceId: + type: string + description: Id of Source to which account activity applies + example: 2c91808363ef85290164000587130c0c + accountRequestInfo: + $ref: './AccountRequestInfo.yaml' + clientMetadata: + nullable: true + type: object + additionalProperties: + type: string + description: >- + Arbitrary key-value pairs, if any were included in the corresponding access request item + removeDate: + nullable: true + type: string + description: The date the role or access profile is no longer assigned to the specified identity. + format: 'date-time' + example: '2020-07-11T00:00:00Z' diff --git a/static/idn-api/v3/schemas/AccountActivityItemOperation.yaml b/static/idn-api/v3/schemas/AccountActivityItemOperation.yaml new file mode 100644 index 000000000..fff956c78 --- /dev/null +++ b/static/idn-api/v3/schemas/AccountActivityItemOperation.yaml @@ -0,0 +1,12 @@ +type: string +enum: + - ADD + - CREATE + - MODIFY + - DELETE + - DISABLE + - ENABLE + - UNLOCK + - LOCK + - REMOVE +description: Represents an operation in an account activity item diff --git a/static/idn-api/v3/schemas/AccountAttributes.yaml b/static/idn-api/v3/schemas/AccountAttributes.yaml new file mode 100644 index 000000000..517147d8d --- /dev/null +++ b/static/idn-api/v3/schemas/AccountAttributes.yaml @@ -0,0 +1,13 @@ +type : object +required: + - attributes +properties: + attributes: + description: The schema attribute values for the account + type: object + example: + city: Austin + displayName: John Doe + userName: jdoe + sAMAccountName: jDoe + mail: john.doe@sailpoint.com diff --git a/static/idn-api/v3/schemas/AccountAttributesCreate.yaml b/static/idn-api/v3/schemas/AccountAttributesCreate.yaml new file mode 100644 index 000000000..900e58f17 --- /dev/null +++ b/static/idn-api/v3/schemas/AccountAttributesCreate.yaml @@ -0,0 +1,24 @@ +type : object +required: + - attributes +properties: + attributes: + description: The schema attribute values for the account + type: object + required: + - sourceId + properties: + sourceId: + type: string + description: Target source to create an account + example: + 34bfcbe116c9407464af37acbaf7a4dc + additionalProperties: + type: string + example: + sourceId: 34bfcbe116c9407464af37acbaf7a4dc + city: Austin + displayName: John Doe + userName: jdoe + sAMAccountName: jDoe + mail: john.doe@sailpoint.com diff --git a/static/idn-api/v3/schemas/AccountRequestInfo.yaml b/static/idn-api/v3/schemas/AccountRequestInfo.yaml new file mode 100644 index 000000000..be62a8723 --- /dev/null +++ b/static/idn-api/v3/schemas/AccountRequestInfo.yaml @@ -0,0 +1,14 @@ +type: object +nullable: true +properties: + requestedObjectId: + type: string + description: Id of requested object + example: 2c91808563ef85690164001c31140c0c + requestedObjectName: + type: string + description: Human-readable name of requested object + example: Treasury Analyst + requestedObjectType: + $ref: './RequestableObjectType.yaml' +description: If an account activity item is associated with an access request, captures details of that request. diff --git a/static/idn-api/v3/schemas/AccountToggleRequest.yaml b/static/idn-api/v3/schemas/AccountToggleRequest.yaml new file mode 100644 index 000000000..ae265c633 --- /dev/null +++ b/static/idn-api/v3/schemas/AccountToggleRequest.yaml @@ -0,0 +1,14 @@ +description: Request used for account enable/disable +type: object +properties: + externalVerificationId: + description: If set, an external process validates that the user wants to proceed with this request. + type: string + example: 3f9180835d2e5168015d32f890ca1581 + forceProvisioning: + description: >- + If set, provisioning updates the account attribute at the source. + This option is used when the account is not synced to ensure the attribute is updated. + Providing 'true' for an unlocked account will add and process 'Unlock' operation by the workflow. + type: boolean + example: false diff --git a/static/idn-api/v3/schemas/AccountUnlockRequest.yaml b/static/idn-api/v3/schemas/AccountUnlockRequest.yaml new file mode 100644 index 000000000..e9fdd06cb --- /dev/null +++ b/static/idn-api/v3/schemas/AccountUnlockRequest.yaml @@ -0,0 +1,17 @@ +description: Request used for account unlock +type: object +properties: + externalVerificationId: + description: If set, an external process validates that the user wants to proceed with this request. + type: string + example: 3f9180835d2e5168015d32f890ca1581 + unlockIDNAccount: + description: If set, the IDN account is unlocked after the workflow completes. + type: boolean + example: false + forceProvisioning: + description: >- + If set, provisioning updates the account attribute at the source. + This option is used when the account is not synced to ensure the attribute is updated. + type: boolean + example: false diff --git a/static/idn-api/v3/schemas/AccountsAsyncResult.yaml b/static/idn-api/v3/schemas/AccountsAsyncResult.yaml new file mode 100644 index 000000000..1f33ab0a2 --- /dev/null +++ b/static/idn-api/v3/schemas/AccountsAsyncResult.yaml @@ -0,0 +1,9 @@ +description: Accounts async response containing details on started async process +required: + - id +type: object +properties: + id: + description: id of the task + type: string + example: 2c91808474683da6017468693c260195 diff --git a/static/idn-api/v3/schemas/ApprovalForwardHistory.yaml b/static/idn-api/v3/schemas/ApprovalForwardHistory.yaml new file mode 100644 index 000000000..792acd6d5 --- /dev/null +++ b/static/idn-api/v3/schemas/ApprovalForwardHistory.yaml @@ -0,0 +1,21 @@ +type: object +properties: + oldApproverName: + type: string + description: Display name of approver that forwarded the approval. + example: frank.mir + newApproverName: + type: string + description: Display name of approver to whom the approval was forwarded. + example: al.volta + comment: + type: string + description: Comment made by old approver when forwarding. + example: Fusce id orci vel consectetur amet ipsum quam. + modified: + type: string + format: date-time + description: Time at which approval was forwarded. + example: "2019-08-23T18:52:57.398Z" + + diff --git a/static/idn-api/v3/schemas/ApprovalItemDetails.yaml b/static/idn-api/v3/schemas/ApprovalItemDetails.yaml new file mode 100644 index 000000000..c75d1eff9 --- /dev/null +++ b/static/idn-api/v3/schemas/ApprovalItemDetails.yaml @@ -0,0 +1,28 @@ +type: object +properties: + id: + type: string + description: ID of the approval item + example: 2c9180835d2e5168015d32f890ca1581 + account: + type: string + description: The account referenced by the approval item + example: john.smith + application: + type: string + description: The name the application/source + example: Active Directory + attributeName: + type: string + description: The name of the attribute + example: emailAddress + attributeOperation: + type: string + description: The operation of the attribute + example: update + attributeValue: + type: string + description: The value of the attribute + example: a@b.com + state: + $ref: './WorkItemState.yaml' diff --git a/static/idn-api/v3/schemas/ApprovalReminderAndEscalationConfig.yaml b/static/idn-api/v3/schemas/ApprovalReminderAndEscalationConfig.yaml new file mode 100644 index 000000000..303d12e5a --- /dev/null +++ b/static/idn-api/v3/schemas/ApprovalReminderAndEscalationConfig.yaml @@ -0,0 +1,19 @@ +type : object +properties: + daysUntilEscalation: + type: integer + description: Number of days to wait before the first reminder. If no reminders are configured, then this is the number of days to wait before escalation. + format: int32 + example: 0 + daysBetweenReminders: + type: integer + description: Number of days to wait between reminder notifications. + format: int32 + example: 0 + maxReminders: + type: integer + description: Maximum number of reminder notification to send to the reviewer before approval escalation. + format: int32 + example: 0 + fallbackApproverRef: + $ref: './IdentityReferenceWithNameAndEmail.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/ApprovalScheme.yaml b/static/idn-api/v3/schemas/ApprovalScheme.yaml new file mode 100644 index 000000000..996c69c4d --- /dev/null +++ b/static/idn-api/v3/schemas/ApprovalScheme.yaml @@ -0,0 +1,9 @@ +type: string +enum: + - APP_OWNER + - SOURCE_OWNER + - MANAGER + - ROLE_OWNER + - ACCESS_PROFILE_OWNER + - GOVERNANCE_GROUP +description: Describes the individual or group that is responsible for an approval step. diff --git a/static/idn-api/v3/schemas/ApprovalStatusDto.yaml b/static/idn-api/v3/schemas/ApprovalStatusDto.yaml new file mode 100644 index 000000000..79d82d182 --- /dev/null +++ b/static/idn-api/v3/schemas/ApprovalStatusDto.yaml @@ -0,0 +1,39 @@ +type : object +properties: + forwarded: + type: boolean + description: True if the request for this item was forwarded from one owner to another. + originalOwner: + $ref: './BaseReferenceDto.yaml' + description: >- + Base identity/workgroup reference object representing the original owner, if forwarded. + currentOwner: + $ref: './BaseReferenceDto.yaml' + description: >- + Base reference of approver that will make decision. + reviewedBy: + $ref: './BaseReferenceDto.yaml' + description: The identity who has reviewed the approval. + modified: + type: string + format: date-time + description: Time at which item was modified. + example: "2019-08-23T18:52:57.398Z" + status: + $ref: './ManualWorkItemState.yaml' + scheme: + $ref: './ApprovalScheme.yaml' + errorMessages: + type: array + items: + $ref: './ErrorMessageDto.yaml' + description: >- + If the request failed, includes any error messages that were generated. + comment: + type: string + description: Comment, if any, provided by the approver. + removeDate: + type: string + description: The date the role or access profile is no longer assigned to the specified identity. + format: 'date-time' + example: '2020-07-11T00:00:00Z' diff --git a/static/idn-api/v3/schemas/ApprovalSummary.yaml b/static/idn-api/v3/schemas/ApprovalSummary.yaml new file mode 100644 index 000000000..dd7f6d0da --- /dev/null +++ b/static/idn-api/v3/schemas/ApprovalSummary.yaml @@ -0,0 +1,19 @@ +type: object +properties: + pending: + type: integer + description: The number of pending access requests approvals. + format: int32 + example: 0 + + approved: + type: integer + description: The number of approved access requests approvals. + format: int32 + example: 0 + + rejected: + type: integer + description: The number of rejected access requests approvals. + format: int32 + example: 0 \ No newline at end of file diff --git a/static/idn-api/v3/schemas/AttributeDefinition.yaml b/static/idn-api/v3/schemas/AttributeDefinition.yaml new file mode 100644 index 000000000..74d7f17b5 --- /dev/null +++ b/static/idn-api/v3/schemas/AttributeDefinition.yaml @@ -0,0 +1,34 @@ +type: object +properties: + name: + type: string + description: The name of the attribute. + example: sAMAccountName + type: + $ref: './AttributeDefinitionType.yaml' + description: The type of the attribute. + example: string + schema: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: A reference to the schema on the source to which the values of the attribute map. + example: { + type: "CONNECTOR_SCHEMA", + id: "2c9180866166b5b0016167c32ef31a66", + name: "group" + } + description: + type: string + description: A human-readable description of the attribute. + isMultiValued: + type: boolean + description: Flag indicating whether or not the attribute is multi-valued. + example: false + isEntitlement: + type: boolean + description: Flag indicating whether or not the attribute is an entitlement. + example: false + isGroup: + type: boolean + description: Flag indicating whether or not the attribute represents a group. + example: false + readOnly: true diff --git a/static/idn-api/v3/schemas/AttributeDefinitionType.yaml b/static/idn-api/v3/schemas/AttributeDefinitionType.yaml new file mode 100644 index 000000000..c0c28af13 --- /dev/null +++ b/static/idn-api/v3/schemas/AttributeDefinitionType.yaml @@ -0,0 +1,8 @@ + +type: string +enum: + - STRING + - LONG + - INT + - BOOLEAN +description: The underlying type of the value which an AttributeDefinition represents. diff --git a/static/idn-api/v3/schemas/BareReference.yaml b/static/idn-api/v3/schemas/BareReference.yaml new file mode 100644 index 000000000..c7553defa --- /dev/null +++ b/static/idn-api/v3/schemas/BareReference.yaml @@ -0,0 +1,11 @@ +type: object +properties: + type: + $ref: './DtoType.yaml' + description: DTO type + example: IDENTITY + id: + type: string + description: ID of the object to which this reference applies + example: 2c91808568c529c60168cca6f90c1313 + diff --git a/static/idn-api/v3/schemas/BaseCommonDto.yaml b/static/idn-api/v3/schemas/BaseCommonDto.yaml new file mode 100644 index 000000000..6a7cfd4b0 --- /dev/null +++ b/static/idn-api/v3/schemas/BaseCommonDto.yaml @@ -0,0 +1,25 @@ +type: object +required: + - name +properties: + id: + description: System-generated unique ID of the Object + type: string + example: id12345 + readOnly: true + name: + description: Name of the Object + type: string + example: aName + created: + description: Creation date of the Object + type: string + example: 2015-05-28T14:07:17Z + format: date-time + readOnly: true + modified: + description: Last modification date of the Object + type: string + example: 2015-05-28T14:07:17Z + format: date-time + readOnly: true diff --git a/static/idn-api/v3/schemas/BaseReferenceDto.yaml b/static/idn-api/v3/schemas/BaseReferenceDto.yaml new file mode 100644 index 000000000..871652eae --- /dev/null +++ b/static/idn-api/v3/schemas/BaseReferenceDto.yaml @@ -0,0 +1,13 @@ +type: object +properties: + type: + $ref: '../../v3/schemas/DtoType.yaml' + description: DTO type + id: + type: string + description: ID of the object to which this reference applies + example: 2c91808568c529c60168cca6f90c1313 + name: + type: string + description: Human-readable display name of the object to which this reference applies + example: William Wilson \ No newline at end of file diff --git a/static/idn-api/v3/schemas/CampaignReference.yaml b/static/idn-api/v3/schemas/CampaignReference.yaml new file mode 100644 index 000000000..5a244dd51 --- /dev/null +++ b/static/idn-api/v3/schemas/CampaignReference.yaml @@ -0,0 +1,35 @@ +type: object +required: +- id +- name +- type +- campaignType +- description +properties: + id: + type: string + description: The unique ID of the campaign. + example: ef38f94347e94562b5bb8424a56397d8 + name: + type: string + description: The name of the campaign. + example: 'Campaign Name' + type: + type: string + enum: + - CAMPAIGN + description: The type of object that is being referenced. + example: CAMPAIGN + campaignType: + type: string + enum: + - MANAGER + - SOURCE_OWNER + - SEARCH + description: The type of the campaign. + example: MANAGER + description: + type: string + description: The description of the campaign set by the admin who created it. + nullable: true + example: 'A description of the campaign' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/CancelAccessRequest.yaml b/static/idn-api/v3/schemas/CancelAccessRequest.yaml new file mode 100644 index 000000000..49eeca807 --- /dev/null +++ b/static/idn-api/v3/schemas/CancelAccessRequest.yaml @@ -0,0 +1,14 @@ +type : object +description: Request body payload for cancel access request endpoint. +required: + - accountActivityId + - comment +properties: + accountActivityId: + type: string + description: ID of the account activity object corresponding to the access request. + example: 2c9180835d2e5168015d32f890ca1581 + comment: + type: string + description: Reason for cancelling the pending access request. + example: "I requested this role by mistake." diff --git a/static/idn-api/v3/schemas/CancelledRequestDetails.yaml b/static/idn-api/v3/schemas/CancelledRequestDetails.yaml new file mode 100644 index 000000000..a042384a4 --- /dev/null +++ b/static/idn-api/v3/schemas/CancelledRequestDetails.yaml @@ -0,0 +1,14 @@ +type: object +properties: + comment: + type: string + description: Comment made by the owner when cancelling the associated request. + example: Nisl quis ipsum quam quisque condimentum nunc ut dolor nunc. + owner: + $ref: './BaseReferenceDto.yaml' + modified: + type: string + format: date-time + description: Date comment was added by the owner when cancelling the associated request + example: '2019-12-20T09:17:12.192Z' +description: Provides additional details for a request that has been cancelled. \ No newline at end of file diff --git a/static/idn-api/v3/schemas/CertificationDecision.yaml b/static/idn-api/v3/schemas/CertificationDecision.yaml new file mode 100644 index 000000000..01db2c1fb --- /dev/null +++ b/static/idn-api/v3/schemas/CertificationDecision.yaml @@ -0,0 +1,6 @@ +type: string +description: The decision to approve or revoke the review item +enum: + - APPROVE + - REVOKE +example: APPROVE diff --git a/static/idn-api/v3/schemas/CertificationIdentitySummary.yaml b/static/idn-api/v3/schemas/CertificationIdentitySummary.yaml new file mode 100644 index 000000000..4ed683a36 --- /dev/null +++ b/static/idn-api/v3/schemas/CertificationIdentitySummary.yaml @@ -0,0 +1,17 @@ +type : object +properties: + id: + type: string + description: The ID of the identity summary + example: 2c91808772a504f50172a9540e501ba7 + name: + type: string + description: Name of the linked identity + example: Alison Ferguso + identityId: + type: string + description: The ID of the identity being certified + example: 2c9180857182306001719937377a33de + completed: + type: boolean + description: Indicates whether the review items for the linked identity's certification have been completed diff --git a/static/idn-api/v3/schemas/CertificationPhase.yaml b/static/idn-api/v3/schemas/CertificationPhase.yaml new file mode 100644 index 000000000..3f3cfdeea --- /dev/null +++ b/static/idn-api/v3/schemas/CertificationPhase.yaml @@ -0,0 +1,11 @@ +type: string +description: | + The current phase of the campaign. + * `STAGED`: The campaign is waiting to be activated. + * `ACTIVE`: The campaign is active. + * `SIGNED`: The reviewer has signed off on the campaign, and it is considered complete. +enum: + - STAGED + - ACTIVE + - SIGNED +example: ACTIVE diff --git a/static/idn-api/v3/schemas/CertificationReference.yaml b/static/idn-api/v3/schemas/CertificationReference.yaml new file mode 100644 index 000000000..648d191f0 --- /dev/null +++ b/static/idn-api/v3/schemas/CertificationReference.yaml @@ -0,0 +1,16 @@ +type: object +properties: + id: + type: string + description: The id of the certification. + example: ef38f94347e94562b5bb8424a56397d8 + name: + type: string + description: The name of the certification. + example: 'Certification Name' + type: + type: string + enum: + - CERTIFICATION + reviewer: + $ref: './Reviewer.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/ClientType.yaml b/static/idn-api/v3/schemas/ClientType.yaml new file mode 100644 index 000000000..4582c0cff --- /dev/null +++ b/static/idn-api/v3/schemas/ClientType.yaml @@ -0,0 +1,6 @@ +type: string +enum: + - CONFIDENTIAL + - PUBLIC +description: Type of an API Client indicating public or confidentials use +example: "CONFIDENTIAL" diff --git a/static/idn-api/v3/schemas/Comment.yaml b/static/idn-api/v3/schemas/Comment.yaml new file mode 100644 index 000000000..85132cb06 --- /dev/null +++ b/static/idn-api/v3/schemas/Comment.yaml @@ -0,0 +1,21 @@ +type: object +nullable: true +properties: + commenterId: + type: string + description: Id of the identity making the comment + example: 2c918084660f45d6016617daa9210584 + commenterName: + type: string + description: Human-readable display name of the identity making the comment + example: Adam Kennedy + body: + type: string + description: Content of the comment + example: Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat. + date: + type: string + format: 'date-time' + description: Date and time comment was made + example: '2017-07-11T18:45:37.098Z' + diff --git a/static/idn-api/v3/schemas/CommentDto.yaml b/static/idn-api/v3/schemas/CommentDto.yaml new file mode 100644 index 000000000..52b294499 --- /dev/null +++ b/static/idn-api/v3/schemas/CommentDto.yaml @@ -0,0 +1,24 @@ +type: object +properties: + comment: + type: string + description: Content of the comment + example: Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat + author: + type: object + properties: + type: + $ref: './DtoType.yaml' + id: + type: string + description: ID of the author + example: 2c91808568c529c60168cca6f90c1313 + name: + type: string + description: Human-readable display name of the identity making the comment + example: Adam Kennedy + created: + type: string + format: 'date-time' + description: Date and time comment was created + example: '2017-07-11T18:45:37.098Z' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/CompletedApproval.yaml b/static/idn-api/v3/schemas/CompletedApproval.yaml new file mode 100644 index 000000000..8ad44050a --- /dev/null +++ b/static/idn-api/v3/schemas/CompletedApproval.yaml @@ -0,0 +1,83 @@ +type: object +properties: + id: + type: string + description: The approval id. + example: id12345 + name: + type: string + description: The name of the approval. + example: aName + created: + type: string + format: 'date-time' + description: When the approval was created. + example: '2017-07-11T18:45:37.098Z' + modified: + type: string + format: 'date-time' + description: When the approval was modified last time. + example: '2018-07-25T20:22:28.104Z' + requestCreated: + type: string + format: 'date-time' + description: When the access-request was created. + example: '2017-07-11T18:45:35.098Z' + requestType: + $ref: './AccessRequestType.yaml' + description: If the access-request was for granting or revoking access. + requester: + $ref: './BaseReferenceDto.yaml' + description: The identity that requested the item. + requestedFor: + $ref: './BaseReferenceDto.yaml' + description: The identity for whom the item is requested for. + reviewedBy: + $ref: './BaseReferenceDto.yaml' + description: The identity who has reviewed the approval. + owner: + $ref: './BaseReferenceDto.yaml' + description: The owner or approver of the approval. + requestedObject: + $ref: './RequestableObjectReference.yaml' + description: The requested access item. + requesterComment: + $ref: './CommentDto.yaml' + description: The requester's comment. + reviewerComment: + $ref: './CommentDto.yaml' + description: The approval's reviewer's comment. + previousReviewersComments: + type: array + items: + $ref: './CommentDto.yaml' + description: The history of the previous reviewers comments. + forwardHistory: + type: array + items: + $ref: './ApprovalForwardHistory.yaml' + description: The history of approval forward action. + commentRequiredWhenRejected: + type: boolean + description: When true the rejector has to provide comments when rejecting + example: true + state: + $ref: './CompletedApprovalState.yaml' + description: The final state of the approval + removeDate: + type: string + description: The date the role or access profile is no longer assigned to the specified identity. + format: 'date-time' + example: '2020-07-11T00:00:00Z' + removeDateUpdateRequested: + type: boolean + description: If true, then the request was to change the remove date or sunset date. + example: true + currentRemoveDate: + type: string + description: The remove date or sunset date that was assigned at the time of the request. + format: 'date-time' + example: '2020-07-11T00:00:00Z' + sodViolationContext: + $ref: './SodViolationContextCheckCompleted.yaml' + description: The details of the SOD violations for the associated approval. \ No newline at end of file diff --git a/static/idn-api/v3/schemas/CompletedApprovalState.yaml b/static/idn-api/v3/schemas/CompletedApprovalState.yaml new file mode 100644 index 000000000..ae1102cd2 --- /dev/null +++ b/static/idn-api/v3/schemas/CompletedApprovalState.yaml @@ -0,0 +1,7 @@ +type: string +enum: + - APPROVED + - REJECTED +description: >- + Enum represents completed approval object's state. +example: APPROVED diff --git a/static/idn-api/v3/schemas/CompletionStatus.yaml b/static/idn-api/v3/schemas/CompletionStatus.yaml new file mode 100644 index 000000000..95cd196cf --- /dev/null +++ b/static/idn-api/v3/schemas/CompletionStatus.yaml @@ -0,0 +1,7 @@ +nullable: true +type: string +enum: + - SUCCESS + - FAILURE + - INCOMPLETE + - PENDING diff --git a/static/idn-api/v3/schemas/CreateOAuthClientRequest.yaml b/static/idn-api/v3/schemas/CreateOAuthClientRequest.yaml new file mode 100644 index 000000000..5a5054566 --- /dev/null +++ b/static/idn-api/v3/schemas/CreateOAuthClientRequest.yaml @@ -0,0 +1,69 @@ +type: object +properties: + businessName: + type: string + description: The name of the business the API Client should belong to + example: Acme-Solar + homepageUrl: + type: string + description: The homepage URL associated with the owner of the API Client + example: http://localhost:12345 + name: + type: string + description: A human-readable name for the API Client + example: Demo API Client + description: + type: string + description: A description of the API Client + example: An API client used for the authorization_code, refresh_token, and client_credentials flows + accessTokenValiditySeconds: + type: string + description: The number of seconds an access token generated for this API Client is valid for + example: 750 + refreshTokenValiditySeconds: + type: string + description: The number of seconds a refresh token generated for this API Client is valid for + example: 86400 + redirectUris: + type: array + items: + type: string + description: A list of the approved redirect URIs. Provide one or more URIs when assigning the AUTHORIZATION_CODE grant type to a new OAuth Client. + example: ["http://localhost:12345"] + grantTypes: + type: array + items: + $ref: '../schemas/GrantType.yaml' + description: A list of OAuth 2.0 grant types this API Client can be used with + example: ["AUTHORIZATION_CODE", "CLIENT_CREDENTIALS", "REFRESH_TOKEN"] + accessType: + $ref: '../schemas/AccessType.yaml' + description: The access type (online or offline) of this API Client + example: "OFFLINE" + type: + $ref: '../schemas/ClientType.yaml' + description: The type of the API Client (public or confidential) + example: "CONFIDENTIAL" + internal: + type: boolean + description: An indicator of whether the API Client can be used for requests internal within the product. + example: false + enabled: + type: boolean + description: An indicator of whether the API Client is enabled for use + example: true + strongAuthSupported: + type: boolean + description: An indicator of whether the API Client supports strong authentication + example: false + claimsSupported: + type: boolean + description: An indicator of whether the API Client supports the serialization of SAML claims when used with the authorization_code flow + example: false +required: + - name + - description + - accessTokenValiditySeconds + - grantTypes + - accessType + - enabled diff --git a/static/idn-api/v3/schemas/CreateOAuthClientResponse.yaml b/static/idn-api/v3/schemas/CreateOAuthClientResponse.yaml new file mode 100644 index 000000000..1e377af49 --- /dev/null +++ b/static/idn-api/v3/schemas/CreateOAuthClientResponse.yaml @@ -0,0 +1,99 @@ +type: object +properties: + id: + type: string + description: ID of the OAuth client + example: 2c9180835d2e5168015d32f890ca1581 + secret: + type: string + description: Secret of the OAuth client (This field is only returned on the intial create call.) + example: 5c32dd9b21adb51c77794d46e71de117a1d0ddb36a7ff941fa28014ab7de2cf3 + businessName: + type: string + description: The name of the business the API Client should belong to + example: Acme-Solar + homepageUrl: + type: string + description: The homepage URL associated with the owner of the API Client + example: http://localhost:12345 + name: + type: string + description: A human-readable name for the API Client + example: Demo API Client + description: + type: string + description: A description of the API Client + example: An API client used for the authorization_code, refresh_token, and client_credentials flows + accessTokenValiditySeconds: + type: string + description: The number of seconds an access token generated for this API Client is valid for + example: 750 + refreshTokenValiditySeconds: + type: string + description: The number of seconds a refresh token generated for this API Client is valid for + example: 86400 + redirectUris: + type: array + items: + type: string + description: A list of the approved redirect URIs used with the authorization_code flow + example: ["http://localhost:12345"] + grantTypes: + type: array + items: + $ref: '../schemas/GrantType.yaml' + description: A list of OAuth 2.0 grant types this API Client can be used with + example: ["AUTHORIZATION_CODE", "CLIENT_CREDENTIALS", "REFRESH_TOKEN"] + accessType: + $ref: '../schemas/AccessType.yaml' + description: The access type (online or offline) of this API Client + example: "OFFLINE" + type: + $ref: '../schemas/ClientType.yaml' + description: The type of the API Client (public or confidential) + example: "CONFIDENTIAL" + internal: + type: boolean + description: An indicator of whether the API Client can be used for requests internal to IDN + example: false + enabled: + type: boolean + description: An indicator of whether the API Client is enabled for use + example: true + strongAuthSupported: + type: boolean + description: An indicator of whether the API Client supports strong authentication + example: false + claimsSupported: + type: boolean + description: An indicator of whether the API Client supports the serialization of SAML claims when used with the authorization_code flow + example: false + created: + type: string + format: 'date-time' + description: The date and time, down to the millisecond, when the API Client was created + example: '2017-07-11T18:45:37.098Z' + modified: + type: string + format: 'date-time' + description: The date and time, down to the millisecond, when the API Client was last updated + example: '2018-06-25T20:22:28.104Z' +required: + - id + - secret + - businessName + - homepageUrl + - name + - description + - accessTokenValiditySeconds + - refreshTokenValiditySeconds + - redirectUris + - grantTypes + - accessType + - type + - internal + - enabled + - strongAuthSupported + - claimsSupported + - created + - modified diff --git a/static/idn-api/v3/schemas/CreatePersonalAccessTokenRequest.yaml b/static/idn-api/v3/schemas/CreatePersonalAccessTokenRequest.yaml new file mode 100644 index 000000000..ad697e0ad --- /dev/null +++ b/static/idn-api/v3/schemas/CreatePersonalAccessTokenRequest.yaml @@ -0,0 +1,10 @@ +type: object +description: Object for specifying the name of a personal access token to create +properties: + name: + type: string + description: >- + The name of the personal access token (PAT) to be created. Cannot be the same as another PAT owned by the user for whom this PAT is being created. + example: "NodeJS Integration" +required: + - name diff --git a/static/idn-api/v3/schemas/CreatePersonalAccessTokenResponse.yaml b/static/idn-api/v3/schemas/CreatePersonalAccessTokenResponse.yaml new file mode 100644 index 000000000..5eb9997b3 --- /dev/null +++ b/static/idn-api/v3/schemas/CreatePersonalAccessTokenResponse.yaml @@ -0,0 +1,28 @@ +type: object +properties: + id: + type: string + description: The ID of the personal access token (to be used as the username for Basic Auth). + example: "86f1dc6fe8f54414950454cbb11278fa" + secret: + type: string + description: The secret of the personal access token (to be used as the password for Basic Auth). + example: "1d1bef2b9f426383447f64f69349fc7cac176042578d205c256ba3f37c59adb9" + name: + type: string + description: The name of the personal access token. Cannot be the same as other personal access tokens owned by a user. + example: "NodeJS Integration" + owner: + $ref: './BaseReferenceDto.yaml' + description: Details about the owner of the personal access token. + created: + type: string + format: 'date-time' + description: The date and time, down to the millisecond, when this personal access token was created. + example: '2017-07-11T18:45:37.098Z' +required: + - id + - secret + - name + - owner + - created diff --git a/static/idn-api/v3/schemas/DtoType.yaml b/static/idn-api/v3/schemas/DtoType.yaml new file mode 100644 index 000000000..416bd18c2 --- /dev/null +++ b/static/idn-api/v3/schemas/DtoType.yaml @@ -0,0 +1,30 @@ +type: string +enum: + - ACCOUNT_CORRELATION_CONFIG + - ACCESS_PROFILE + - ACCESS_REQUEST_APPROVAL + - ACCOUNT + - APPLICATION + - CAMPAIGN + - CAMPAIGN_FILTER + - CERTIFICATION + - CLUSTER + - CONNECTOR_SCHEMA + - ENTITLEMENT + - GOVERNANCE_GROUP + - IDENTITY + - IDENTITY_PROFILE + - IDENTITY_REQUEST + - LIFECYCLE_STATE + - PASSWORD_POLICY + - ROLE + - RULE + - SOD_POLICY + - SOURCE + - TAG_CATEGORY + - TASK_RESULT + - REPORT_RESULT + - SOD_VIOLATION + - ACCOUNT_ACTIVITY +description: An enumeration of the types of DTOs supported within the IdentityNow infrastructure. +example: IDENTITY diff --git a/static/idn-api/v3/schemas/EmailNotificationOption.yaml b/static/idn-api/v3/schemas/EmailNotificationOption.yaml new file mode 100644 index 000000000..056b7b02a --- /dev/null +++ b/static/idn-api/v3/schemas/EmailNotificationOption.yaml @@ -0,0 +1,23 @@ +type : object +description: This is used for representing email configuration for a lifecycle state +properties: + notifyManagers: + type: boolean + example: true + description: If true, then the manager is notified of the lifecycle state change. + notifyAllAdmins: + type: boolean + example: true + description: If true, then all the admins are notified of the lifecycle state change. + notifySpecificUsers: + type: boolean + example: true + description: If true, then the users specified in "emailAddressList" below are notified of lifecycle state change. + emailAddressList: + type: array + example: ["test@test.com", "test2@test.com"] + items: + type: string + description: >- + List of user email addresses. If "notifySpecificUsers" option is true, then these users are notified of lifecycle state change. + diff --git a/static/idn-api/v3/schemas/EntitlementDto.yaml b/static/idn-api/v3/schemas/EntitlementDto.yaml new file mode 100644 index 000000000..6716b0ba0 --- /dev/null +++ b/static/idn-api/v3/schemas/EntitlementDto.yaml @@ -0,0 +1,36 @@ +allOf: + - $ref: './BaseCommonDto.yaml' + - type: object + description: Entitlement object that represents entitlement + properties: + attribute: + description: Name of the entitlement attribute + type: string + example: authorizationType + value: + description: Raw value of the entitlement + type: string + example: CN=Users,dc=sailpoint,dc=com + description: + description: Entitlment description + type: string + attributes: + description: Entitlement attributes + type: object + sourceSchemaObjectType: + description: Schema objectType on the given application that maps to an Account Group + type: string + example: group + privileged: + description: Determines if this Entitlement is privileged. + type: boolean + cloudGoverned: + description: Determines if this Entitlement is goverened in the cloud. + type: boolean + source: + $ref: './BaseReferenceDto.yaml' + description: Reference to the source this entitlment belongs to. + example: + - type: 'SOURCE' + id: '2c9180835d191a86015d28455b4b232a' + name: 'HR Active Directory' diff --git a/static/idn-api/v3/schemas/EntitlementRequestConfig.yaml b/static/idn-api/v3/schemas/EntitlementRequestConfig.yaml new file mode 100644 index 000000000..946ba6a25 --- /dev/null +++ b/static/idn-api/v3/schemas/EntitlementRequestConfig.yaml @@ -0,0 +1,25 @@ +type : object +properties: + allowEntitlementRequest: + type: boolean + description: Flag for allowing entitlement request. + example: true + requestCommentsRequired: + type: boolean + description: Flag for requiring comments while submitting an entitlement request. + default: false + example: false + deniedCommentsRequired: + type: boolean + description: Flag for requiring comments while rejecting an entitlement request. + default: false + example: false + grantRequestApprovalSchemes: + type: string + description: | + Approval schemes for granting entitlement request. This can be empty if no approval is needed. + Multiple schemes must be comma-separated. The valid schemes are "sourceOwner", "manager" and "workgroup:{id}". + Multiple workgroups (governance groups) can be used. + default: sourceOwner + example: + "sourceOwner, manager, workgroup:2c918084660f45d6016617daa9210584" \ No newline at end of file diff --git a/static/idn-api/v3/schemas/ErrorMessageDto.yaml b/static/idn-api/v3/schemas/ErrorMessageDto.yaml new file mode 100644 index 000000000..bc62c6362 --- /dev/null +++ b/static/idn-api/v3/schemas/ErrorMessageDto.yaml @@ -0,0 +1,13 @@ +type : object +properties: + locale: + type: string + description: The locale for the message text, a BCP 47 language tag. + example: en-US + localeOrigin: + $ref: "../../v3/schemas/LocaleOrigin.yaml" + text: + type: string + description: Actual text of the error message in the indicated locale. + example: The request was syntactically correct but its content is semantically invalid. + diff --git a/static/idn-api/v3/schemas/ErrorMessageDtoList.yaml b/static/idn-api/v3/schemas/ErrorMessageDtoList.yaml new file mode 100644 index 000000000..343d700d7 --- /dev/null +++ b/static/idn-api/v3/schemas/ErrorMessageDtoList.yaml @@ -0,0 +1,3 @@ +type: array +items: + $ref: './ErrorMessageDto.yaml' diff --git a/static/idn-api/v3/schemas/ErrorResponseDto.yaml b/static/idn-api/v3/schemas/ErrorResponseDto.yaml new file mode 100644 index 000000000..7fcfac746 --- /dev/null +++ b/static/idn-api/v3/schemas/ErrorResponseDto.yaml @@ -0,0 +1,20 @@ +type : object +properties: + detailCode: + type: string + description: Fine-grained error code providing more detail of the error. + example: 400.1 Bad Request Content + trackingId: + type: string + description: Unique tracking id for the error. + example: e7eab60924f64aa284175b9fa3309599 + messages: + type: array + description: Generic localized reason for error + items: + $ref: "../../v3/schemas/ErrorMessageDto.yaml" + causes: + type: array + description: Plain-text descriptive reasons to provide additional detail to the text provided in the messages field + items: + $ref: "../../v3/schemas/ErrorMessageDto.yaml" diff --git a/static/idn-api/v3/schemas/ExecutionStatus.yaml b/static/idn-api/v3/schemas/ExecutionStatus.yaml new file mode 100644 index 000000000..2b0a5f3ef --- /dev/null +++ b/static/idn-api/v3/schemas/ExecutionStatus.yaml @@ -0,0 +1,6 @@ +type: string +enum: + - EXECUTING + - VERIFYING + - TERMINATED + - COMPLETED diff --git a/static/idn-api/v3/schemas/FieldDetailsDto.yaml b/static/idn-api/v3/schemas/FieldDetailsDto.yaml new file mode 100644 index 000000000..43c01000c --- /dev/null +++ b/static/idn-api/v3/schemas/FieldDetailsDto.yaml @@ -0,0 +1,36 @@ +type: object +properties: + name: + type: string + description: The name of the attribute. + example: userName + transform: + type: object + description: The transform to apply to the field + example: { type: "rule", attributes: { "name": "Create Unique LDAP Attribute" } } + default: {} + attributes: + type: object + description: Attributes required for the transform + example: + { + template: "${firstname}.${lastname}${uniqueCounter}", + cloudMaxUniqueChecks: "50", + cloudMaxSize: "20", + cloudRequired: "true", + } + isRequired: + type: boolean + readOnly: true + description: Flag indicating whether or not the attribute is required. + default: false + example: false + type: + type: string + description: The type of the attribute. + example: string + isMultiValued: + type: boolean + description: Flag indicating whether or not the attribute is multi-valued. + default: false + example: false \ No newline at end of file diff --git a/static/idn-api/v3/schemas/FormDetails.yaml b/static/idn-api/v3/schemas/FormDetails.yaml new file mode 100644 index 000000000..8f9f45394 --- /dev/null +++ b/static/idn-api/v3/schemas/FormDetails.yaml @@ -0,0 +1,24 @@ +type: object +properties: + id: + type: string + description: ID of the form + example: 2c9180835d2e5168015d32f890ca1581 + name: + type: string + description: Name of the form + example: AccountSelection Form + title: + type: string + description: The form title + example: Account Selection for John.Doe + subtitle: + type: string + description: The form subtitle. + example: Please select from the following + targetUser: + type: string + description: The name of the user that should be shown this form + example: Jane.Doe + sections: + $ref: './SectionDetails.yaml' diff --git a/static/idn-api/v3/schemas/FormItemDetails.yaml b/static/idn-api/v3/schemas/FormItemDetails.yaml new file mode 100644 index 000000000..7ffadeaac --- /dev/null +++ b/static/idn-api/v3/schemas/FormItemDetails.yaml @@ -0,0 +1,6 @@ +type: object +properties: + name: + type: string + description: Name of the FormItem + example: Field1 \ No newline at end of file diff --git a/static/idn-api/v3/schemas/ForwardApprovalDto.yaml b/static/idn-api/v3/schemas/ForwardApprovalDto.yaml new file mode 100644 index 000000000..8cbc9408b --- /dev/null +++ b/static/idn-api/v3/schemas/ForwardApprovalDto.yaml @@ -0,0 +1,18 @@ +type: object +required: + - newOwnerId + - comment +properties: + newOwnerId: + type: string + description: The Id of the new owner + example: Et quam massa maximus vivamus nisi ut urna tincidunt metus elementum erat + minLength: 1 + maxLength: 255 + + comment: + type: string + description: The comment provided by the forwarder + example: 2c91808568c529c60168cca6f90c1313 + minLength: 1 + maxLength: 255 diff --git a/static/idn-api/v3/schemas/GetOAuthClientResponse.yaml b/static/idn-api/v3/schemas/GetOAuthClientResponse.yaml new file mode 100644 index 000000000..5a72afe28 --- /dev/null +++ b/static/idn-api/v3/schemas/GetOAuthClientResponse.yaml @@ -0,0 +1,94 @@ +type: object +properties: + id: + type: string + description: ID of the OAuth client + example: 2c9180835d2e5168015d32f890ca1581 + businessName: + type: string + description: The name of the business the API Client should belong to + example: Acme-Solar + homepageUrl: + type: string + description: The homepage URL associated with the owner of the API Client + example: http://localhost:12345 + name: + type: string + description: A human-readable name for the API Client + example: Demo API Client + description: + type: string + description: A description of the API Client + example: An API client used for the authorization_code, refresh_token, and client_credentials flows + accessTokenValiditySeconds: + type: string + description: The number of seconds an access token generated for this API Client is valid for + example: 750 + refreshTokenValiditySeconds: + type: string + description: The number of seconds a refresh token generated for this API Client is valid for + example: 86400 + redirectUris: + type: array + items: + type: string + description: A list of the approved redirect URIs used with the authorization_code flow + example: ["http://localhost:12345"] + grantTypes: + type: array + items: + $ref: '../schemas/GrantType.yaml' + description: A list of OAuth 2.0 grant types this API Client can be used with + example: ["AUTHORIZATION_CODE", "CLIENT_CREDENTIALS", "REFRESH_TOKEN"] + accessType: + $ref: '../schemas/AccessType.yaml' + description: The access type (online or offline) of this API Client + example: "OFFLINE" + type: + $ref: '../schemas/ClientType.yaml' + description: The type of the API Client (public or confidential) + example: "CONFIDENTIAL" + internal: + type: boolean + description: An indicator of whether the API Client can be used for requests internal to IDN + example: false + enabled: + type: boolean + description: An indicator of whether the API Client is enabled for use + example: true + strongAuthSupported: + type: boolean + description: An indicator of whether the API Client supports strong authentication + example: false + claimsSupported: + type: boolean + description: An indicator of whether the API Client supports the serialization of SAML claims when used with the authorization_code flow + example: false + created: + type: string + format: 'date-time' + description: The date and time, down to the millisecond, when the API Client was created + example: '2017-07-11T18:45:37.098Z' + modified: + type: string + format: 'date-time' + description: The date and time, down to the millisecond, when the API Client was last updated + example: '2018-06-25T20:22:28.104Z' +required: + - id + - businessName + - homepageUrl + - name + - description + - accessTokenValiditySeconds + - refreshTokenValiditySeconds + - redirectUris + - grantTypes + - accessType + - type + - internal + - enabled + - strongAuthSupported + - claimsSupported + - created + - modified diff --git a/static/idn-api/v3/schemas/GetPersonalAccessTokenResponse.yaml b/static/idn-api/v3/schemas/GetPersonalAccessTokenResponse.yaml new file mode 100644 index 000000000..269324606 --- /dev/null +++ b/static/idn-api/v3/schemas/GetPersonalAccessTokenResponse.yaml @@ -0,0 +1,23 @@ +type: object +properties: + id: + type: string + description: The ID of the personal access token (to be used as the username for Basic Auth). + example: "86f1dc6fe8f54414950454cbb11278fa" + name: + type: string + description: The name of the personal access token. Cannot be the same as other personal access tokens owned by a user. + example: "NodeJS Integration" + owner: + $ref: './BaseReferenceDto.yaml' + description: Details about the owner of the personal access token. + created: + type: string + format: 'date-time' + description: The date and time, down to the millisecond, when this personal access token was created. + example: '2017-07-11T18:45:37.098Z' +required: + - id + - name + - owner + - created diff --git a/static/idn-api/v3/schemas/GrantType.yaml b/static/idn-api/v3/schemas/GrantType.yaml new file mode 100644 index 000000000..95cd5eddb --- /dev/null +++ b/static/idn-api/v3/schemas/GrantType.yaml @@ -0,0 +1,7 @@ +description: OAuth2 Grant Type +type: string +example: CLIENT_CREDENTIALS +enum: + - CLIENT_CREDENTIALS + - AUTHORIZATION_CODE + - REFRESH_TOKEN diff --git a/static/idn-api/v3/schemas/IdentityAttribute.yaml b/static/idn-api/v3/schemas/IdentityAttribute.yaml new file mode 100644 index 000000000..4a7326053 --- /dev/null +++ b/static/idn-api/v3/schemas/IdentityAttribute.yaml @@ -0,0 +1,14 @@ +type: object +properties: + key: + type: string + description: The attribute key + example: 'country' + name: + type: string + description: Human-readable display name of the attribute + example: 'Country' + value: + type: string + description: The attribute value + example: 'US' diff --git a/static/idn-api/v3/schemas/IdentityAttributeConfig.yaml b/static/idn-api/v3/schemas/IdentityAttributeConfig.yaml new file mode 100644 index 000000000..60927fc0c --- /dev/null +++ b/static/idn-api/v3/schemas/IdentityAttributeConfig.yaml @@ -0,0 +1,12 @@ +type: object +description: Defines all the identity attribute mapping configurations. + This defines how to generate or collect data for each identity attributes in identity refresh process. +properties: + enabled: + description: The backend will only promote values if the profile/mapping is enabled. + type: boolean + example: true + attributeTransforms: + type: array + items: + $ref: './IdentityAttributeTransform.yaml' diff --git a/static/idn-api/v3/schemas/IdentityAttributePreview.yaml b/static/idn-api/v3/schemas/IdentityAttributePreview.yaml new file mode 100644 index 000000000..c0ae4a499 --- /dev/null +++ b/static/idn-api/v3/schemas/IdentityAttributePreview.yaml @@ -0,0 +1,17 @@ +type: object +properties: + name: + type: string + description: Name of the attribute that is being previewed. + example: email + value: + type: object + description: Value that was derived during the preview. + example: email@mail.com + previousValue: + type: object + description: The value of the attribute before the preview. + example: oldEmail@mail.com + errorMessages: + $ref: '../schemas/ErrorMessageDtoList.yaml' + description: A list of errors that may have been encountered. diff --git a/static/idn-api/v3/schemas/IdentityAttributeTransform.yaml b/static/idn-api/v3/schemas/IdentityAttributeTransform.yaml new file mode 100644 index 000000000..865cc93c6 --- /dev/null +++ b/static/idn-api/v3/schemas/IdentityAttributeTransform.yaml @@ -0,0 +1,10 @@ +type: object +description: Defines a transformation definition for an identity attribute. +properties: + identityAttributeName: + type: string + description: Name of the identity attribute. + example: email + transformDefinition: + $ref: './TransformDefinition.yaml' + description: The seaspray transformation definition. diff --git a/static/idn-api/v3/schemas/IdentityCertDecisionSummary.yaml b/static/idn-api/v3/schemas/IdentityCertDecisionSummary.yaml new file mode 100644 index 000000000..099d84316 --- /dev/null +++ b/static/idn-api/v3/schemas/IdentityCertDecisionSummary.yaml @@ -0,0 +1,67 @@ +# Replaced by DecisionSummary.yaml +type : object +properties: + entitlementDecisionsMade: + type: integer + description: Number of entitlement decisions that have been made + example: 3 + accessProfileDecisionsMade: + type: integer + description: Number of access profile decisions that have been made + example: 5 + roleDecisionsMade: + type: integer + description: Number of role decisions that have been made + example: 2 + accountDecisionsMade: + type: integer + description: Number of account decisions that have been made + example: 4 + entitlementDecisionsTotal: + type: integer + description: The total number of entitlement decisions on the certification, both complete and incomplete + example: 6 + accessProfileDecisionsTotal: + type: integer + description: The total number of access profile decisions on the certification, both complete and incomplete + example: 10 + roleDecisionsTotal: + type: integer + description: The total number of role decisions on the certification, both complete and incomplete + example: 4 + accountDecisionsTotal: + type: integer + description: The total number of account decisions on the certification, both complete and incomplete + example: 8 + entitlementsApproved: + type: integer + description: The number of entitlement decisions that have been made which were approved + example: 2 + entitlementsRevoked: + type: integer + description: The number of entitlement decisions that have been made which were revoked + example: 1 + accessProfilesApproved: + type: integer + description: The number of access profile decisions that have been made which were approved + example: 3 + accessProfilesRevoked: + type: integer + description: The number of access profile decisions that have been made which were revoked + example: 2 + rolesApproved: + type: integer + description: The number of role decisions that have been made which were approved + example: 2 + rolesRevoked: + type: integer + description: The number of role decisions that have been made which were revoked + example: 0 + accountsApproved: + type: integer + description: The number of account decisions that have been made which were approved + example: 1 + accountsRevoked: + type: integer + description: The number of account decisions that have been made which were revoked + example: 3 diff --git a/static/idn-api/v3/schemas/IdentityCertificationDto.yaml b/static/idn-api/v3/schemas/IdentityCertificationDto.yaml new file mode 100644 index 000000000..8ffbfa1aa --- /dev/null +++ b/static/idn-api/v3/schemas/IdentityCertificationDto.yaml @@ -0,0 +1,64 @@ +# Has been replaced by CertificationDto.yaml +# Cannot represent certifications that are part of a Role Composition Campaign +type: object +properties: + id: + example: 2c9180835d2e5168015d32f890ca1581 + type: string + name: + example: Source Owner Access Review for Employees [source] + type: string + campaign: + $ref: './CampaignReference.yaml' + completed: + type: boolean + description: Have all decisions been made? + example: true + identitiesCompleted: + type: integer + description: The number of identities for whom all decisions have been made and are complete. + example: 5 + identitiesTotal: + type: integer + description: The total number of identities in the Certification, both complete and incomplete. + example: 10 + created: + example: '2018-06-25T20:22:28.104Z' + format: date-time + type: string + modified: + example: '2018-06-25T20:22:28.104Z' + format: date-time + type: string + decisionsMade: + type: integer + description: The number of approve/revoke/acknowledge decisions that have been made. + example: 20 + decisionsTotal: + type: integer + description: The total number of approve/revoke/acknowledge decisions. + example: 40 + due: + type: string + format: 'date-time' + description: The due date of the certification. + example: '2018-10-19T13:49:37.385Z' + signed: + type: string + format: 'date-time' + nullable: true + description: The date the reviewer signed off on the Certification. + example: '2018-10-19T13:49:37.385Z' + reviewer: + $ref: './Reviewer.yaml' + reassignment: + $ref: './Reassignment.yaml' + hasErrors: + type: boolean + example: false + errorMessage: + nullable: true + type: string + example: 'The certification has an error' + phase: + $ref: './CertificationPhase.yaml' diff --git a/static/idn-api/v3/schemas/IdentityExceptionReportReference.yaml b/static/idn-api/v3/schemas/IdentityExceptionReportReference.yaml new file mode 100644 index 000000000..c1c595f6f --- /dev/null +++ b/static/idn-api/v3/schemas/IdentityExceptionReportReference.yaml @@ -0,0 +1,11 @@ +type: object +properties: + taskResultId: + type: string + format: uuid + description: The id of the task result. + example: 2c918086795cd09201795d5f7d7533df + reportName: + type: string + example: My annual report + description: The name of the report. diff --git a/static/idn-api/v3/schemas/IdentityPreviewRequest.yaml b/static/idn-api/v3/schemas/IdentityPreviewRequest.yaml new file mode 100644 index 000000000..ec9982ccb --- /dev/null +++ b/static/idn-api/v3/schemas/IdentityPreviewRequest.yaml @@ -0,0 +1,10 @@ +type: object +properties: + identityId: + type: string + format: uuid + example: 2c9180857893f12901789445619b0366 + identityAttributeConfig: + type: array + items: + $ref: './IdentityAttributeConfig.yaml' diff --git a/static/idn-api/v3/schemas/IdentityPreviewResponse.yaml b/static/idn-api/v3/schemas/IdentityPreviewResponse.yaml new file mode 100644 index 000000000..1081362ca --- /dev/null +++ b/static/idn-api/v3/schemas/IdentityPreviewResponse.yaml @@ -0,0 +1,8 @@ +type: object +properties: + identity: + $ref: '../schemas/BaseReferenceDto.yaml' + previewAttributes: + type: array + items: + $ref: './IdentityAttributePreview.yaml' diff --git a/static/idn-api/v3/schemas/IdentityProfile.yaml b/static/idn-api/v3/schemas/IdentityProfile.yaml new file mode 100644 index 000000000..983b4359b --- /dev/null +++ b/static/idn-api/v3/schemas/IdentityProfile.yaml @@ -0,0 +1,50 @@ +allOf: +- $ref: './BaseReferenceDto.yaml' +- type: object + properties: + description: + type: string + description: The description of the Identity Profile. + example: My custom flat file profile + owner: + $ref: './BaseReferenceDto.yaml' + description: The owner of the Identity Profile. + priority: + type: integer + format: int64 + description: The priority for an Identity Profile. + example: 10 + authoritativeSource: + type: object + properties: + type: + type: string + enum: + - SOURCE + description: Type of the object to which this reference applies + example: SOURCE + id: + type: string + description: ID of the object to which this reference applies + example: 2c9180835d191a86015d28455b4b232a + name: + type: string + description: Human-readable display name of the object to which this reference applies + example: HR Active Directory + identityRefreshRequired: + type: boolean + description: True if a identity refresh is needed. Typically triggered when a change on the source has been made. + example: true + identityCount: + type: integer + description: The number of identities that belong to the Identity Profile. + format: int32 + example: 8 + identityAttributeConfig: + $ref: './IdentityAttributeConfig.yaml' + identityExceptionReportReference: + $ref: './IdentityExceptionReportReference.yaml' + hasTimeBasedAttr: + description: Indicates the value of requiresPeriodicRefresh attribute for the Identity Profile. + type: boolean + example: true diff --git a/static/idn-api/v3/schemas/IdentityProfileExportedObject.yaml b/static/idn-api/v3/schemas/IdentityProfileExportedObject.yaml new file mode 100644 index 000000000..e5f9acb31 --- /dev/null +++ b/static/idn-api/v3/schemas/IdentityProfileExportedObject.yaml @@ -0,0 +1,11 @@ +type: object +description: Identity Profile exported object +properties: + version: + type: integer + example: 1 + description: Version or object from the target service. + self: + $ref: '../schemas/BaseReferenceDto.yaml' + object: + $ref: '../schemas/IdentityProfile.yaml' diff --git a/static/idn-api/v3/schemas/IdentityReference.yaml b/static/idn-api/v3/schemas/IdentityReference.yaml new file mode 100644 index 000000000..8bea3b8fa --- /dev/null +++ b/static/idn-api/v3/schemas/IdentityReference.yaml @@ -0,0 +1,15 @@ +type: object +nullable: true +description: The manager for the identity. +properties: + type: + $ref: './DtoType.yaml' + example: 'IDENTITY' + id: + type: string + description: Identity id + example: '2c9180a46faadee4016fb4e018c20639' + name: + type: string + description: Human-readable display name of identity. + example: 'Thomas Edison' diff --git a/static/idn-api/v3/schemas/IdentityReferenceWithNameAndEmail.yaml b/static/idn-api/v3/schemas/IdentityReferenceWithNameAndEmail.yaml new file mode 100644 index 000000000..df31eb6cb --- /dev/null +++ b/static/idn-api/v3/schemas/IdentityReferenceWithNameAndEmail.yaml @@ -0,0 +1,20 @@ +type: object +nullable: true +properties: + type: + type: string + description: The type can only be IDENTITY. This is read-only + example: IDENTITY + id: + type: string + description: Identity id. + example: 5168015d32f890ca15812c9180835d2e + name: + type: string + description: Human-readable display name of identity. This is read-only + example: "Alison Ferguso" + email: + type: string + description: Email address of identity. This is read-only + example: "alison.ferguso@identitysoon.com" + diff --git a/static/idn-api/v3/schemas/IdentitySummary.yaml b/static/idn-api/v3/schemas/IdentitySummary.yaml new file mode 100644 index 000000000..ef9114f67 --- /dev/null +++ b/static/idn-api/v3/schemas/IdentitySummary.yaml @@ -0,0 +1,19 @@ +# Replaced by TargetSummary.yaml +type: object +nullable: true +properties: + id: + type: string + description: ID of this identity summary + example: ff80818155fe8c080155fe8d925b0316 + name: + type: string + description: Human-readable display name of identity + example: SailPoint Services + identityId: + type: string + description: ID of the identity that this summary represents + example: c15b9f5cca5a4e9599eaa0e64fa921bd + completed: + type: boolean + description: Indicates if all access items for this summary have been decided on diff --git a/static/idn-api/v3/schemas/JsonPatch.yaml b/static/idn-api/v3/schemas/JsonPatch.yaml new file mode 100644 index 000000000..f42dbf667 --- /dev/null +++ b/static/idn-api/v3/schemas/JsonPatch.yaml @@ -0,0 +1,16 @@ +type: object +description: A JSONPatch document as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902) +properties: + operations: + description: Operations to be applied + type: array + items: + $ref: './JsonPatchOperation.yaml' +example: >- + [ + { + "op": "replace", + "path": "/description", + "value": "A new description" + } + ] \ No newline at end of file diff --git a/static/idn-api/v3/schemas/JsonPatchOperation.yaml b/static/idn-api/v3/schemas/JsonPatchOperation.yaml new file mode 100644 index 000000000..68a96af07 --- /dev/null +++ b/static/idn-api/v3/schemas/JsonPatchOperation.yaml @@ -0,0 +1,34 @@ +type: object +description: A JSONPatch Operation as defined by [RFC 6902 - JSON Patch](https://tools.ietf.org/html/rfc6902) +required: + - "op" + - "path" +properties: + op: + type: string + description: The operation to be performed + enum: + - "add" + - "remove" + - "replace" + - "move" + - "copy" + - "test" + example: "replace" + path: + type: string + description: A string JSON Pointer representing the target path to an element to be affected by the operation + example: "/description" + value: + anyOf: + - type: string + - type: integer + - type: object + - type: array + items: + anyOf: + - type: string + - type: integer + - type: object + description: The value to be used for the operation, required for "add" and "replace" operations + example: "New description" diff --git a/static/idn-api/v3/schemas/LifecycleState.yaml b/static/idn-api/v3/schemas/LifecycleState.yaml new file mode 100644 index 000000000..47c90fbf0 --- /dev/null +++ b/static/idn-api/v3/schemas/LifecycleState.yaml @@ -0,0 +1,37 @@ +allOf: + - $ref: './BaseCommonDto.yaml' + - type: object + required: + - technicalName + properties: + enabled: + type: boolean + example: true + description: Whether the lifecycle state is enabled or disabled. + technicalName: + type: string + example: "Technical Name" + description: The technical name for lifecycle state. This is for internal use. + description: + type: string + example: "Lifecycle description" + description: Lifecycle state description. + identityCount: + type: integer + format: int32 + example: 42 + readOnly: true + description: Number of identities that have the lifecycle state. + emailNotificationOption: + $ref: './EmailNotificationOption.yaml' + accountActions: + type: array + items: + $ref: './AccountAction.yaml' + accessProfileIds: + type: array + items: + type: string + uniqueItems: true + example: ["2c918084660f45d6016617daa9210584", "2c918084660f45d6016617daa9210500"] + description: List of unique access-profile IDs that are associated with the lifecycle state. diff --git a/static/idn-api/v3/schemas/LocaleOrigin.yaml b/static/idn-api/v3/schemas/LocaleOrigin.yaml new file mode 100644 index 000000000..5bc895f0a --- /dev/null +++ b/static/idn-api/v3/schemas/LocaleOrigin.yaml @@ -0,0 +1,9 @@ +type: string +enum: + - DEFAULT + - REQUEST +description: >- + An indicator of how the locale was selected. *DEFAULT* means the locale is the system default. *REQUEST* means the + locale was selected from the request context (i.e., best match based on the *Accept-Language* header). + Additional values may be added in the future without notice. +example: DEFAULT \ No newline at end of file diff --git a/static/idn-api/v3/schemas/ManagerCorrelationMapping.yaml b/static/idn-api/v3/schemas/ManagerCorrelationMapping.yaml new file mode 100644 index 000000000..6ebdf4a8a --- /dev/null +++ b/static/idn-api/v3/schemas/ManagerCorrelationMapping.yaml @@ -0,0 +1,14 @@ +type: object +properties: + accountAttribute: + type: string + description: >- + Name of the attribute to use for manager correlation. The value found on the account attribute will be used to + lookup the manager's identity. + example: "manager" + identityAttribute: + type: string + description: >- + Name of the identity attribute to search when trying to find a manager using the value from the accountAttribute. + example: "manager" + diff --git a/static/idn-api/v3/schemas/ManualWorkItemDetails.yaml b/static/idn-api/v3/schemas/ManualWorkItemDetails.yaml new file mode 100644 index 000000000..6c516f193 --- /dev/null +++ b/static/idn-api/v3/schemas/ManualWorkItemDetails.yaml @@ -0,0 +1,21 @@ +type : object +properties: + forwarded: + type: boolean + description: True if the request for this item was forwarded from one owner to another. + example: true + originalOwner: + $ref: './BaseReferenceDto.yaml' + description: >- + Base identity/workgroup reference object representing the original owner, if forwarded. + currentOwner: + $ref: './BaseReferenceDto.yaml' + description: >- + Base reference of approver that will make decision. + modified: + type: string + format: date-time + description: Time at which item was modified. + example: "2019-08-23T18:52:57.398Z" + status: + $ref: './ManualWorkItemState.yaml' diff --git a/static/idn-api/v3/schemas/ManualWorkItemState.yaml b/static/idn-api/v3/schemas/ManualWorkItemState.yaml new file mode 100644 index 000000000..fd04d31d3 --- /dev/null +++ b/static/idn-api/v3/schemas/ManualWorkItemState.yaml @@ -0,0 +1,26 @@ +type: string +enum: + - PENDING + - APPROVED + - REJECTED + - EXPIRED + - CANCELLED + - ARCHIVED +description: >- + Indicates the state of the request processing for this item: + + * PENDING: The request for this item is awaiting processing. + + * APPROVED: The request for this item has been approved. + + * REJECTED: The request for this item was rejected. + + * EXPIRED: The request for this item expired with no action taken. + + * CANCELLED: The request for this item was cancelled with no user action. + + * ARCHIVED: The request for this item has been archived after completion. +example: PENDING + + + diff --git a/static/idn-api/v3/schemas/ObjectImportResult.yaml b/static/idn-api/v3/schemas/ObjectImportResult.yaml new file mode 100644 index 000000000..62d285769 --- /dev/null +++ b/static/idn-api/v3/schemas/ObjectImportResult.yaml @@ -0,0 +1,29 @@ +type: object +title: Import Object Response Body +description: Response model for import of a single object. +properties: + infos: + description: Informational messages returned from the target service on import. + type: array + items: + $ref: '../schemas/SpConfigMessage.yaml' + warnings: + description: Warning messages returned from the target service on import. + type: array + items: + $ref: '../schemas/SpConfigMessage.yaml' + errors: + description: Error messages returned from the target service on import. + type: array + items: + $ref: '../schemas/SpConfigMessage.yaml' + importedObjects: + description: References to objects that were created or updated by the import. + type: array + items: + $ref: '../schemas/BaseReferenceDto.yaml' +required: + - infos + - warnings + - errors + - importedObjects diff --git a/static/idn-api/v3/schemas/PasswordChangeRequest.yaml b/static/idn-api/v3/schemas/PasswordChangeRequest.yaml new file mode 100644 index 000000000..adcdef1af --- /dev/null +++ b/static/idn-api/v3/schemas/PasswordChangeRequest.yaml @@ -0,0 +1,25 @@ +type: object +properties: + identityId: + type: string + description: The identity ID that requested the password change + example: 8a807d4c73c545510173c545f0a002ff + encryptedPassword: + type: string + description: The RSA encrypted password + example: XzN+YwKgr2C+InkMYFMBG3UtjMEw5ZIql/XFlXo8cJNeslmkplx6vn4kd4/43IF9STBk5RnzR6XmjpEO+FwHDoiBwYZAkAZK/Iswxk4OdybG6Y4MStJCOCiK8osKr35IMMSV/mbO4wAeltoCk7daTWzTGLiI6UaT5tf+F2EgdjJZ7YqM8W8r7aUWsm3p2Xt01Y46ZRx0QaM91QruiIx2rECFT2pUO0wr+7oQ77jypATyGWRtADsu3YcvCk/6U5MqCnXMzKBcRas7NnZdSL/d5H1GglVGz3VLPMaivG4/oL4chOMmFCRl/zVsGxZ9RhN8rxsRGFFKn+rhExTi+bax3A== + publicKeyId: + type: string + description: The encryption key ID + example: YWQ2NjQ4MTItZjY0NC00MWExLWFjMjktOGNmMzU3Y2VlNjk2 + accountId: + type: string + description: >- + Account ID of the account + This is specified per account schema in the source configuration. It is used to distinguish accounts. + More info can be found here https://community.sailpoint.com/t5/IdentityNow-Connectors/How-do-I-designate-an-account-attribute-as-the-Account-ID-for-a/ta-p/80350 + example: CN=Abby Smith,OU=Austin,OU=Americas,OU=Demo,DC=seri,DC=acme,DC=com + sourceId: + type: string + description: The ID of the source for which identity is requesting the password change + example: 8a807d4c73c545510173c545d4b60246 \ No newline at end of file diff --git a/static/idn-api/v3/schemas/PasswordChangeResponse.yaml b/static/idn-api/v3/schemas/PasswordChangeResponse.yaml new file mode 100644 index 000000000..20c51ec4b --- /dev/null +++ b/static/idn-api/v3/schemas/PasswordChangeResponse.yaml @@ -0,0 +1,15 @@ +type: object +properties: + requestId: + type: string + nullable: true + description: The password change request ID + example: 089899f13a8f4da7824996191587bab9 + state: + type: string + enum: + - IN_PROGRESS + - FINISHED + - FAILED + description: Password change state + example: IN_PROGRESS \ No newline at end of file diff --git a/static/idn-api/v3/schemas/PasswordInfo.yaml b/static/idn-api/v3/schemas/PasswordInfo.yaml new file mode 100644 index 000000000..ea32f71e0 --- /dev/null +++ b/static/idn-api/v3/schemas/PasswordInfo.yaml @@ -0,0 +1,36 @@ +type: object +properties: + identityId: + type: string + description: Identity ID + example: "2c918085744fec4301746f9a5bce4605" + sourceId: + type: string + description: source ID + example: "2c918083746f642c01746f990884012a" + publicKeyId: + type: string + description: public key ID + example: "N2M1OTJiMGEtMDJlZS00ZWU3LTkyYTEtNjA5YmI5NWE3ZWVh" + publicKey: + type: string + description: User's public key with Base64 encoding + example: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuGFkWi2J75TztpbaPKd36bJnIB3J8gZ6UcoS9oSDYsqBzPpTsfZXYaEf4Y4BKGgJIXmE/lwhwuj7mU1itdZ2qTSNFtnXA8Fn75c3UUkk+h+wdZbkuSmqlsJo3R1OnJkwkJggcAy9Jvk9jlcrNLWorpQ1w9raUvxtvfgkSdq153KxotenQ1HciSyZ0nA/Kw0UaucLnho8xdRowZs11afXGXA9IT9H6D8T6zUdtSxm0nAyH+mluma5LdTfaM50W3l/L8q56Vrqmx2pZIiwdx/0+g3Y++jV70zom0ZBkC1MmSoLMrQYG5OICNjr72f78B2PaGXfarQHqARLjKpMVt9YIQIDAQAB" + accounts: + type: array + description: Account info related to queried identity and source + items: + $ref: './PasswordInfoAccount.yaml' + policies: + type: array + description: Password constraints + items: + type: string + example: + [ + "passwordRepeatedChar is 3", + "passwordMinAlpha is 1", + "passwordMinLength is 5", + "passwordMinNumeric is 1" + ] + diff --git a/static/idn-api/v3/schemas/PasswordInfoAccount.yaml b/static/idn-api/v3/schemas/PasswordInfoAccount.yaml new file mode 100644 index 000000000..7adc75379 --- /dev/null +++ b/static/idn-api/v3/schemas/PasswordInfoAccount.yaml @@ -0,0 +1,16 @@ +type: object +properties: + accountId: + type: string + description: >- + Account ID of the account. + This is specified per account schema in the source configuration. It is used to distinguish accounts. + More info can be found here https://community.sailpoint.com/t5/IdentityNow-Connectors/How-do-I-designate-an-account-attribute-as-the-Account-ID-for-a/ta-p/80350 + example: CN=Abby Smith,OU=Austin,OU=Americas,OU=Demo,DC=seri,DC=acme,DC=com + accountName: + type: string + description: >- + Display name of the account. + This is specified per account schema in the source configuration. It is used to display name of the account. + More info can be found here https://community.sailpoint.com/t5/IdentityNow-Connectors/How-do-I-designate-an-account-attribute-as-the-Account-Name-for/ta-p/74008 + example: Abby.Smith \ No newline at end of file diff --git a/static/idn-api/v3/schemas/PasswordInfoQueryDTO.yaml b/static/idn-api/v3/schemas/PasswordInfoQueryDTO.yaml new file mode 100644 index 000000000..6a701ea25 --- /dev/null +++ b/static/idn-api/v3/schemas/PasswordInfoQueryDTO.yaml @@ -0,0 +1,10 @@ +type: object +properties: + userName: + type: string + description: The login name of the user + example: Abby.Smith + sourceName: + type: string + description: The display name of the source + example: My-AD \ No newline at end of file diff --git a/static/idn-api/v3/schemas/PasswordStatus.yaml b/static/idn-api/v3/schemas/PasswordStatus.yaml new file mode 100644 index 000000000..48f0964c6 --- /dev/null +++ b/static/idn-api/v3/schemas/PasswordStatus.yaml @@ -0,0 +1,27 @@ +type: object +properties: + requestId: + type: string + nullable: true + description: The password change request ID + example: 089899f13a8f4da7824996191587bab9 + state: + type: string + enum: + - IN_PROGRESS + - FINISHED + - FAILED + description: Password change state + example: IN_PROGRESS + errors: + type: array + items: + type: string + description: The errors during the password change request + example: ["The password change payload is invalid"] + sourceIds: + type: array + items: + type: string + description: List of source IDs in the password change request + example: ["2c918083746f642c01746f990884012a"] \ No newline at end of file diff --git a/static/idn-api/v3/schemas/PendingApproval.yaml b/static/idn-api/v3/schemas/PendingApproval.yaml new file mode 100644 index 000000000..b92d7b71f --- /dev/null +++ b/static/idn-api/v3/schemas/PendingApproval.yaml @@ -0,0 +1,77 @@ +type: object +properties: + id: + type: string + description: The approval id. + example: id12345 + name: + type: string + description: The name of the approval. + example: aName + created: + type: string + format: 'date-time' + description: When the approval was created. + example: '2017-07-11T18:45:37.098Z' + modified: + type: string + format: 'date-time' + description: When the approval was modified last time. + example: '2018-07-25T20:22:28.104Z' + requestCreated: + type: string + format: 'date-time' + description: When the access-request was created. + example: '2017-07-11T18:45:35.098Z' + requestType: + $ref: './AccessRequestType.yaml' + description: If the access-request was for granting or revoking access. + requester: + $ref: './BaseReferenceDto.yaml' + description: The identity that requested the item. + requestedFor: + $ref: './BaseReferenceDto.yaml' + description: The identity for whom the item is requested for. + owner: + $ref: './BaseReferenceDto.yaml' + description: The owner or approver of the approval. + requestedObject: + $ref: './RequestableObjectReference.yaml' + description: The requested access item. + requesterComment: + $ref: './CommentDto.yaml' + description: The requester's comment. + previousReviewersComments: + type: array + items: + $ref: './CommentDto.yaml' + description: The history of the previous reviewers comments. + forwardHistory: + type: array + items: + $ref: './ApprovalForwardHistory.yaml' + description: The history of approval forward action. + commentRequiredWhenRejected: + type: boolean + description: When true the rejector has to provide comments when rejecting + example: true + actionInProcess: + $ref: './PendingApprovalAction.yaml' + description: Action that is performed on this approval, and system has not finished performing that action yet. + removeDate: + type: string + description: The date the role or access profile is no longer assigned to the specified identity. + format: 'date-time' + example: '2020-07-11T00:00:00Z' + removeDateUpdateRequested: + type: boolean + description: If true, then the request is to change the remove date or sunset date. + example: true + currentRemoveDate: + type: string + description: The remove date or sunset date that was assigned at the time of the request. + format: 'date-time' + example: '2020-07-11T00:00:00Z' + sodViolationContext: + $ref: './SodViolationContextCheckCompleted.yaml' + description: The details of the SOD violations for the associated approval. diff --git a/static/idn-api/v3/schemas/PendingApprovalAction.yaml b/static/idn-api/v3/schemas/PendingApprovalAction.yaml new file mode 100644 index 000000000..84a1a685f --- /dev/null +++ b/static/idn-api/v3/schemas/PendingApprovalAction.yaml @@ -0,0 +1,8 @@ +type: string +enum: + - APPROVED + - REJECTED + - FORWARDED +description: >- + Enum represents action that is being processed on an approval. +example: APPROVED diff --git a/static/idn-api/v3/schemas/PreApprovalTriggerDetails.yaml b/static/idn-api/v3/schemas/PreApprovalTriggerDetails.yaml new file mode 100644 index 000000000..ff471b4ea --- /dev/null +++ b/static/idn-api/v3/schemas/PreApprovalTriggerDetails.yaml @@ -0,0 +1,18 @@ +type: object +properties: + comment: + type: string + description: Comment left for the pre-approval decision + example: Access is Approved + reviewer: + type: string + description: The reviewer of the pre-approval decision + example: John Doe + decision: + type: string + enum: + - APPROVED + - REJECTED + description: The decision of the pre-approval trigger + example: APPROVED +description: Provides additional details about the pre-approval trigger for this request. \ No newline at end of file diff --git a/static/idn-api/v3/schemas/ProvisioningConfig.yaml b/static/idn-api/v3/schemas/ProvisioningConfig.yaml new file mode 100644 index 000000000..eddc4243c --- /dev/null +++ b/static/idn-api/v3/schemas/ProvisioningConfig.yaml @@ -0,0 +1,21 @@ +type: object +description: Specification of a Service Desk integration provisioning configuration. +properties: + universalManager: + description: Specifies whether this configuration is used to manage provisioning requests for all sources from the org. If true, no managedResourceRefs are allowed. + type: boolean + readOnly: true + managedResourceRefs: + description: References to sources for the Service Desk integration template. May only be specified if universalManager is false. + type: array + items: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + default: + type: SOURCE + planInitializerScript: + description: This is a reference to a plan initializer script. + type: object + properties: + source: + description: This is a Rule that allows provisioning instruction changes. + type: string diff --git a/static/idn-api/v3/schemas/ProvisioningDetails.yaml b/static/idn-api/v3/schemas/ProvisioningDetails.yaml new file mode 100644 index 000000000..1d7323a6f --- /dev/null +++ b/static/idn-api/v3/schemas/ProvisioningDetails.yaml @@ -0,0 +1,10 @@ +type: object +properties: + orderedSubPhaseReferences: + type: string + description: >- + Ordered CSV of sub phase references to objects that contain more information about provisioning. + For example, this can contain "manualWorkItemDetails" which indicate that there is further information + in that object for this phase. + example: manualWorkItemDetails +description: Provides additional details about provisioning for this request. \ No newline at end of file diff --git a/static/idn-api/v3/schemas/ProvisioningPolicyDto.yaml b/static/idn-api/v3/schemas/ProvisioningPolicyDto.yaml new file mode 100644 index 000000000..5d69cdcdf --- /dev/null +++ b/static/idn-api/v3/schemas/ProvisioningPolicyDto.yaml @@ -0,0 +1,14 @@ +type : object +required: + - name +properties: + name: + type: string + description: + type: string + usageType: + $ref: '../schemas/UsageType.yaml' + fields: + type: array + items: + $ref: './FieldDetailsDto.yaml' diff --git a/static/idn-api/v3/schemas/ProvisioningState.yaml b/static/idn-api/v3/schemas/ProvisioningState.yaml new file mode 100644 index 000000000..74705ad81 --- /dev/null +++ b/static/idn-api/v3/schemas/ProvisioningState.yaml @@ -0,0 +1,9 @@ +type: string +enum: + - PENDING + - FINISHED + - UNVERIFIABLE + - COMMITED + - FAILED + - RETRY +description: Provisioning state of an account activity item diff --git a/static/idn-api/v3/schemas/PublicIdentity.yaml b/static/idn-api/v3/schemas/PublicIdentity.yaml new file mode 100644 index 000000000..d4bb2e2da --- /dev/null +++ b/static/idn-api/v3/schemas/PublicIdentity.yaml @@ -0,0 +1,35 @@ +type : object +title: Public Identity +description: >- + Details about a public identity +properties: + id: + type: string + description: Identity id + example: '2c9180857182305e0171993735622948' + name: + type: string + description: Human-readable display name of identity. + example: 'Alison Ferguso' + alias: + type: string + description: Alternate unique identifier for the identity. + example: 'alison.ferguso' + email: + nullable: true + type: string + description: Email address of identity. + example: 'alison.ferguso@acme-solar.com' + status: + nullable: true + type: string + description: The lifecycle status for the identity + example: 'Active' + manager: + $ref: './IdentityReference.yaml' + description: An identity reference to the manager of this identity + attributes: + type: array + description: The public identity attributes of the identity + items: + $ref: './IdentityAttribute.yaml' diff --git a/static/idn-api/v3/schemas/PublicIdentityAttributeConfig.yaml b/static/idn-api/v3/schemas/PublicIdentityAttributeConfig.yaml new file mode 100644 index 000000000..57149a251 --- /dev/null +++ b/static/idn-api/v3/schemas/PublicIdentityAttributeConfig.yaml @@ -0,0 +1,12 @@ +type: object +description: >- + Used to map an attribute key for an Identity to its display name. +properties: + key: + type: string + description: The attribute key + example: "country" + name: + type: string + description: The attribute display name + example: "Country" diff --git a/static/idn-api/v3/schemas/PublicIdentityConfig.yaml b/static/idn-api/v3/schemas/PublicIdentityConfig.yaml new file mode 100644 index 000000000..c652fc083 --- /dev/null +++ b/static/idn-api/v3/schemas/PublicIdentityConfig.yaml @@ -0,0 +1,19 @@ +type : object +description: >- + Details of up to 5 Identity attributes that will be publicly accessible for all Identities to anyone in the org. +properties: + attributes: + type: array + description: >- + Up to 5 identity attributes that will be available to everyone in the org for all users in the org. + items: + $ref: './PublicIdentityAttributeConfig.yaml' + modified: + nullable: true + type: string + description: When this configuration was last modified. + format: 'date-time' + example: '2018-06-25T20:22:28.104Z' + modifiedBy: + description: The identity who last modified this configuration. + $ref: './IdentityReference.yaml' diff --git a/static/idn-api/v3/schemas/QueuedCheckConfigDetails.yaml b/static/idn-api/v3/schemas/QueuedCheckConfigDetails.yaml new file mode 100644 index 000000000..05466ea5b --- /dev/null +++ b/static/idn-api/v3/schemas/QueuedCheckConfigDetails.yaml @@ -0,0 +1,14 @@ +description: Configuration of maximum number days and interval for checking Service Desk integration queue status +required: + - provisioningStatusCheckIntervalMinutes + - provisioningMaxStatusCheckDays +type: object +properties: + provisioningStatusCheckIntervalMinutes: + description: interval in minutes between status checks + type: string + example: 30 + provisioningMaxStatusCheckDays: + description: maximum number of days to check + type: string + example: 2 diff --git a/static/idn-api/v3/schemas/ReassignReference.yaml b/static/idn-api/v3/schemas/ReassignReference.yaml new file mode 100644 index 000000000..d2f574974 --- /dev/null +++ b/static/idn-api/v3/schemas/ReassignReference.yaml @@ -0,0 +1,15 @@ +type: object +properties: + id: + type: string + description: The ID of item or identity being reassigned. + example: ef38f94347e94562b5bb8424a56397d8 + type: + type: string + enum: + - TARGET_SUMMARY + - ITEM + - IDENTITY_SUMMARY +required: + - id + - type diff --git a/static/idn-api/v3/schemas/Reassignment.yaml b/static/idn-api/v3/schemas/Reassignment.yaml new file mode 100644 index 000000000..d30680e66 --- /dev/null +++ b/static/idn-api/v3/schemas/Reassignment.yaml @@ -0,0 +1,9 @@ +type: object +nullable: true +properties: + from: + $ref: './CertificationReference.yaml' + comment: + type: string + description: The comment entered when the Certification was reassigned + example: Reassigned for a reason diff --git a/static/idn-api/v3/schemas/RemediationItemDetails.yaml b/static/idn-api/v3/schemas/RemediationItemDetails.yaml new file mode 100644 index 000000000..e58b524dc --- /dev/null +++ b/static/idn-api/v3/schemas/RemediationItemDetails.yaml @@ -0,0 +1,38 @@ +type: object +properties: + id: + type: string + description: The ID of the certification + example: 2c9180835d2e5168015d32f890ca1581 + targetId: + type: string + description: The ID of the certification target + example: 2c9180835d2e5168015d32f890ca1581 + targetName: + type: string + description: The name of the certification target + example: john.smith + targetDisplayName: + type: string + description: The display name of the certification target + example: emailAddress + applicationName: + type: string + description: The name of the application/source + example: Active Directory + attributeName: + type: string + description: The name of the attribute being certified + example: phoneNumber + attributeOperation: + type: string + description: The operation of the certification on the attribute + example: update + attributeValue: + type: string + description: The value of the attribute being certified + example: 512-555-1212 + nativeIdentity: + type: string + description: The native identity of the target + example: jason.smith2 diff --git a/static/idn-api/v3/schemas/RequestOnBehalfOfConfig.yaml b/static/idn-api/v3/schemas/RequestOnBehalfOfConfig.yaml new file mode 100644 index 000000000..1ceaf48f2 --- /dev/null +++ b/static/idn-api/v3/schemas/RequestOnBehalfOfConfig.yaml @@ -0,0 +1,10 @@ +type : object +properties: + allowRequestOnBehalfOfAnyoneByAnyone: + type: boolean + description: If anyone can request access for anyone. + example: true + allowRequestOnBehalfOfEmployeeByManager: + type: boolean + description: If a manager can request access for his/her direct reports. + example: true diff --git a/static/idn-api/v3/schemas/RequestableObject.yaml b/static/idn-api/v3/schemas/RequestableObject.yaml new file mode 100644 index 000000000..76ff5e6c2 --- /dev/null +++ b/static/idn-api/v3/schemas/RequestableObject.yaml @@ -0,0 +1,40 @@ +type: object +properties: + id: + type: string + description: Id of the requestable object itself + example: 2c9180835d2e5168015d32f890ca1581 + name: + type: string + description: Human-readable display name of the requestable object + example: Applied Research Access + created: + type: string + format: 'date-time' + example: '2017-07-11T18:45:37.098Z' + modified: + nullable: true + type: string + format: 'date-time' + example: '2018-06-25T20:22:28.104Z' + description: + type: string + description: Description of the requestable object. + example: Access to research information, lab results, and schematics. + type: + $ref: './RequestableObjectType.yaml' + requestStatus: + $ref: './RequestableObjectRequestStatus.yaml' + identityRequestId: + type: string + description: If *requestStatus* is *PENDING*, indicates the id of the associated account activity. + nullable: true + example: null + ownerRef: + $ref: './IdentityReferenceWithNameAndEmail.yaml' + requestCommentsRequired: + type: boolean + description: Whether the requester must provide comments when requesting the object. + + + diff --git a/static/idn-api/v3/schemas/RequestableObjectReference.yaml b/static/idn-api/v3/schemas/RequestableObjectReference.yaml new file mode 100644 index 000000000..6ac84035d --- /dev/null +++ b/static/idn-api/v3/schemas/RequestableObjectReference.yaml @@ -0,0 +1,22 @@ +type: object +properties: + id: + type: string + description: Id of the object. + example: 2c9180835d2e5168015d32f890ca1581 + name: + type: string + description: Name of the object. + example: Applied Research Access + description: + type: string + description: Description of the object. + example: Access to research information, lab results, and schematics + type: + type: string + enum: + - ACCESS_PROFILE + - ROLE + - ENTITLEMENT + description: Type of the object. + example: ROLE \ No newline at end of file diff --git a/static/idn-api/v3/schemas/RequestableObjectRequestStatus.yaml b/static/idn-api/v3/schemas/RequestableObjectRequestStatus.yaml new file mode 100644 index 000000000..15fb6e970 --- /dev/null +++ b/static/idn-api/v3/schemas/RequestableObjectRequestStatus.yaml @@ -0,0 +1,11 @@ +type: string +enum: + - AVAILABLE + - PENDING + - ASSIGNED +description: >- + Status indicating the ability of an access request for the object to be made by or on behalf of the identity + specified by *identity-id*. *AVAILABLE* indicates the object is available to request. *PENDING* indicates the object + is unavailable because the identity has a pending request in flight. *ASSIGNED* indicates the object is unavailable + because the identity already has the indicated role or access profile. If *identity-id* is not specified (allowed + only for admin users), then status will be *AVAILABLE* for all results. diff --git a/static/idn-api/v3/schemas/RequestableObjectType.yaml b/static/idn-api/v3/schemas/RequestableObjectType.yaml new file mode 100644 index 000000000..0b2be11f5 --- /dev/null +++ b/static/idn-api/v3/schemas/RequestableObjectType.yaml @@ -0,0 +1,9 @@ +type: string +enum: + - ACCESS_PROFILE + - ROLE +description: >- + Enum represented the currently supported requestable object types. Additional values may be added in the future + without notice. +example: ACCESS_PROFILE + diff --git a/static/idn-api/v3/schemas/RequestedItemStatus.yaml b/static/idn-api/v3/schemas/RequestedItemStatus.yaml new file mode 100644 index 000000000..1fc592874 --- /dev/null +++ b/static/idn-api/v3/schemas/RequestedItemStatus.yaml @@ -0,0 +1,88 @@ +type: object +properties: + name: + type: string + description: Human-readable display name of the item being requested. + example: "AccessProfile1" + type: + type: string + enum: + - ACCESS_PROFILE + - ROLE + - ENTITLEMENT + description: Type of requested object. + example: ACCESS_PROFILE + cancelledRequestDetails: + $ref: './CancelledRequestDetails.yaml' + errorMessages: + type: array + items: + $ref: './ErrorMessageDtoList.yaml' + description: List of list of localized error messages, if any, encountered during the approval/provisioning process. + state: + $ref: './RequestedItemStatusRequestState.yaml' + approvalDetails: + type: array + items: + $ref: './ApprovalStatusDto.yaml' + description: Approval details for each item. + manualWorkItemDetails: + type: array + items: + $ref: './ManualWorkItemDetails.yaml' + description: Manual work items created for provisioning the item. + accountActivityItemId: + type: string + description: Id of associated account activity item. + example: "2c9180926cbfbddd016cbfc7c3b10010" + requestType: + $ref: './AccessRequestType.yaml' + modified: + type: string + format: date-time + description: When the request was last modified. + example: "2019-08-23T18:52:59.162Z" + created: + type: string + format: date-time + description: When the request was created. + example: "2019-08-23T18:40:35.772Z" + requester: + $ref: './BaseReferenceDto.yaml' + description: The identity that requested the item. + requestedFor: + $ref: './BaseReferenceDto.yaml' + description: The identity for whom the Access Request Status is requested for. + requesterComment: + $ref: './CommentDto.yaml' + description: The requester's comment. + sodViolationContext: + $ref: './SodViolationContextCheckCompleted.yaml' + description: The details of the SOD violations for the associated approval. + provisioningDetails: + $ref: './ProvisioningDetails.yaml' + preApprovalTriggerDetails: + $ref: './PreApprovalTriggerDetails.yaml' + accessRequestPhases: + type: array + items: + $ref: './AccessRequestPhases.yaml' + description: A list of Phases that the Access Request has gone through in order, to help determine the status of the request. + description: + type: string + description: Description associated to the requested object. + example: "This is the Engineering role that engineers are granted." + removeDate: + type: string + format: date-time + description: When the role access is scheduled for removal. + example: "2019-10-23T00:00:00.000Z" + cancelable: + type: boolean + description: True if the request can be canceled. + example: true + accessRequestId: + type: string + format: uuid + description: This is the account activity id. + example: "ef38f94347e94562b5bb8424a56397d8" \ No newline at end of file diff --git a/static/idn-api/v3/schemas/RequestedItemStatusRequestState.yaml b/static/idn-api/v3/schemas/RequestedItemStatusRequestState.yaml new file mode 100644 index 000000000..fbbaae0be --- /dev/null +++ b/static/idn-api/v3/schemas/RequestedItemStatusRequestState.yaml @@ -0,0 +1,32 @@ +type: string +enum: + - EXECUTING + - REQUEST_COMPLETED + - CANCELLED + - TERMINATED + - PROVISIONING_VERIFICATION_PENDING + - REJECTED + - PROVISIONING_FAILED + - NOT_ALL_ITEMS_PROVISIONED + - ERROR +description: >- + Indicates the state of an access request: + + * EXECUTING: The request is executing, which indicates the system is doing some processing. + + * REQUEST_COMPLETED: Indicates the request has been completed. + + * CANCELLED: The request was cancelled with no user input. + + * TERMINATED: The request has been terminated before it was able to complete. + + * PROVISIONING_VERIFICATION_PENDING: The request has finished any approval steps and provisioning is waiting to be verified. + + * REJECTED: The request was rejected. + + * PROVISIONING_FAILED: The request has failed to complete. + + * NOT_ALL_ITEMS_PROVISIONED: One or more of the requested items failed to complete, but there were one or more successes. + + * ERROR: An error occurred during request processing. +example: EXECUTING diff --git a/static/idn-api/v3/schemas/Response.yaml b/static/idn-api/v3/schemas/Response.yaml new file mode 100644 index 000000000..91bf3091f --- /dev/null +++ b/static/idn-api/v3/schemas/Response.yaml @@ -0,0 +1 @@ +type: object diff --git a/static/idn-api/v3/schemas/ReviewDecision.yaml b/static/idn-api/v3/schemas/ReviewDecision.yaml new file mode 100644 index 000000000..b06b23421 --- /dev/null +++ b/static/idn-api/v3/schemas/ReviewDecision.yaml @@ -0,0 +1,26 @@ +type : object +properties: + id: + type: string + example: ef38f94347e94562b5bb8424a56397d8 + decision: + $ref: './CertificationDecision.yaml' + proposedEndDate: + type: string + format: date-time + description: The date at which a user's access should be taken away. Should only be set for `REVOKE` decisions. + bulk: + type: boolean + description: Indicates whether decision should be marked as part of a larger bulk decision + example: true + recommendation: + nullable: true + $ref: './ReviewRecommendation.yaml' + comments: + type: string + description: Comments recorded when the decision was made + example: 'This user no longer needs access to this source' +required: + - id + - decision + - bulk diff --git a/static/idn-api/v3/schemas/ReviewReassign.yaml b/static/idn-api/v3/schemas/ReviewReassign.yaml new file mode 100644 index 000000000..5e71cbf59 --- /dev/null +++ b/static/idn-api/v3/schemas/ReviewReassign.yaml @@ -0,0 +1,18 @@ +type: object +properties: + reassign: + type: array + items: + $ref: './ReassignReference.yaml' + reassignTo: + type: string + description: The ID of the identity to which the certification is reassigned + example: ef38f94347e94562b5bb8424a56397d8 + reason: + type: string + description: The reason comment for why the reassign was made + example: 'reassigned for some reason' +required: + - reassign + - reassignTo + - reason diff --git a/static/idn-api/v3/schemas/ReviewRecommendation.yaml b/static/idn-api/v3/schemas/ReviewRecommendation.yaml new file mode 100644 index 000000000..c1e451d03 --- /dev/null +++ b/static/idn-api/v3/schemas/ReviewRecommendation.yaml @@ -0,0 +1,16 @@ +type : object +properties: + recommendation: + type: string + description: >- + The recommendation from IAI at the time of the decision. This field will be null if no recommendation was made. + reasons: + type: array + items: + type: string + description: A list of reasons for the recommendation. + timestamp: + type: string + format: date-time + description: The time at which the recommendation was recorded. + example: '2020-06-01T13:49:37.385Z' diff --git a/static/idn-api/v3/schemas/Reviewer.yaml b/static/idn-api/v3/schemas/Reviewer.yaml new file mode 100644 index 000000000..45d123cf8 --- /dev/null +++ b/static/idn-api/v3/schemas/Reviewer.yaml @@ -0,0 +1,28 @@ +type: object +properties: + id: + type: string + description: The id of the reviewer. + example: ef38f94347e94562b5bb8424a56397d8 + name: + type: string + description: The name of the reviewer. + example: 'Reviewer Name' + email: + type: string + description: The email of the reviewing identity. + example: reviewer@test.com + type: + type: string + enum: + - IDENTITY + created: + nullable: true + example: '2018-06-25T20:22:28.104Z' + format: date-time + type: string + modified: + nullable: true + example: '2018-06-25T20:22:28.104Z' + format: date-time + type: string diff --git a/static/idn-api/v3/schemas/Schema.yaml b/static/idn-api/v3/schemas/Schema.yaml new file mode 100644 index 000000000..ba7f29b33 --- /dev/null +++ b/static/idn-api/v3/schemas/Schema.yaml @@ -0,0 +1,78 @@ +type: object +properties: + id: + type: string + description: The id of the Schema. + example: 2c9180835d191a86015d28455b4a2329 + name: + type: string + description: The name of the Schema. + example: account + nativeObjectType: + type: string + description: The name of the object type on the native system that the schema represents. + example: User + identityAttribute: + type: string + description: The name of the attribute used to calculate the unique identifier for an object in the schema. + example: sAMAccountName + displayAttribute: + type: string + description: The name of the attribute used to calculate the display value for an object in the schema. + example: distinguishedName + hierarchyAttribute: + type: string + description: The name of the attribute whose values represent other objects in a hierarchy. Only relevant to group schemas. + example: memberOf + includePermissions: + type: boolean + description: Flag indicating whether or not the include permissions with the object data when aggregating the schema. + example: false + features: + type: array + items: + $ref: './SourceFeature.yaml' + description: The features that the schema supports. + example: [ + "PROVISIONING", + "NO_PERMISSIONS_PROVISIONING", + "GROUPS_HAVE_MEMBERS" + ] + configuration: + type: object + description: Holds any extra configuration data that the schema may require. + example: { + groupMemberAttribute: "member" + } + attributes: + type: array + description: The attribute definitions which form the schema. + items: + $ref: './AttributeDefinition.yaml' + example: [ + { + name: "sAMAccountName", + type: "string", + isMultiValued: false, + isEntitlement: false, + isGroup: false + }, + { + name: "memberOf", + type: "string", + description: "Group membership", + isMultiValued: true, + isEntitlement: true, + isGroup: true + } + ] + created: + type: string + description: The date the Schema was created. + format: 'date-time' + example: '2019-12-24T22:32:58.104Z' + modified: + type: string + description: The date the Schema was last modified. + format: 'date-time' + example: '2019-12-31T20:22:28.104Z' diff --git a/static/idn-api/v3/schemas/SectionDetails.yaml b/static/idn-api/v3/schemas/SectionDetails.yaml new file mode 100644 index 000000000..784ca9211 --- /dev/null +++ b/static/idn-api/v3/schemas/SectionDetails.yaml @@ -0,0 +1,15 @@ +type: object +allOf: +- $ref: './FormItemDetails.yaml' +- type: object + properties: + label: + type: string + description: Label of the section + example: Section 1 + formItems: + type: array + items: + type: object + description: List of FormItems. FormItems can be SectionDetails and/or FieldDetails + example: [] diff --git a/static/idn-api/v3/schemas/ServiceDeskIntegrationDto.yaml b/static/idn-api/v3/schemas/ServiceDeskIntegrationDto.yaml new file mode 100644 index 000000000..5175ce39c --- /dev/null +++ b/static/idn-api/v3/schemas/ServiceDeskIntegrationDto.yaml @@ -0,0 +1,50 @@ +allOf: + - $ref: './BaseCommonDto.yaml' + - type: object + description: Specification of a Service Desk integration + required: + - description + - type + - attributes + properties: + description: + description: Description of the Service Desk integration + type: string + example: A very nice Service Desk integration + type: + description: Type of the Service Desk integration + type: string + default: ServiceNowSDIM + ownerRef: + description: Reference to the identity that is the owner of this Service Desk integration + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + default: + type: IDENTITY + clusterRef: + description: Reference to the source cluster for this Service Desk integration + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + default: + type: CLUSTER + cluster: + description: ID of the cluster for the Service Desk integration (replaced by clusterRef, retained for backward compatibility) + type: string + example: xyzzy999 + deprecated: true + managedSources: + description: Source IDs for the Service Desk integration (replaced by provisioningConfig.managedSResourceRefs, but retained here for backward compatibility) + type: array + items: + type: string + deprecated: true + provisioningConfig: + description: The 'provisioningConfig' property specifies the configuration used to provision integrations. + $ref: './ProvisioningConfig.yaml' + attributes: + description: Attributes of the Service Desk integration. Validation constraints enforced by the implementation. + type: object + additionalProperties: true + beforeProvisioningRule: + description: Reference to beforeProvisioningRule for this Service Desk integration + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + default: + type: RULE diff --git a/static/idn-api/v3/schemas/ServiceDeskIntegrationTemplateDto.yaml b/static/idn-api/v3/schemas/ServiceDeskIntegrationTemplateDto.yaml new file mode 100644 index 000000000..d1ff56889 --- /dev/null +++ b/static/idn-api/v3/schemas/ServiceDeskIntegrationTemplateDto.yaml @@ -0,0 +1,21 @@ +allOf: + - $ref: './BaseCommonDto.yaml' + - type: object + description: This is the model for a Service Desk integration template, used to create and edit Service Desk Integrations. + required: + - type + - attributes + - provisioningConfig + properties: + type: + description: The 'type' property specifies the type of the Service Desk integration template. + type: string + example: Web Service SDIM + default: Web Service SDIM + attributes: + description: The 'attributes' property value is a map of attributes available for integrations using this Service Desk integration template. + type: object + additionalProperties: true + provisioningConfig: + description: The 'provisioningConfig' property specifies the configuration used to provision integrations using the template. + $ref: './ProvisioningConfig.yaml' diff --git a/static/idn-api/v3/schemas/ServiceDeskIntegrationTemplateType.yaml b/static/idn-api/v3/schemas/ServiceDeskIntegrationTemplateType.yaml new file mode 100644 index 000000000..95ff9e0a5 --- /dev/null +++ b/static/idn-api/v3/schemas/ServiceDeskIntegrationTemplateType.yaml @@ -0,0 +1,18 @@ +description: This represents a Service Desk Integration template type. +required: + - type + - scriptName +type: object +properties: + name: + description: This is the name of the type. + example: aName + type: string + type: + description: This is the type value for the type. + example: aType + type: string + scriptName: + description: This is the scriptName attribute value for the type. + example: aScriptName + type: string diff --git a/static/idn-api/v3/schemas/SodExemptCriteria.yaml b/static/idn-api/v3/schemas/SodExemptCriteria.yaml new file mode 100644 index 000000000..f342afd22 --- /dev/null +++ b/static/idn-api/v3/schemas/SodExemptCriteria.yaml @@ -0,0 +1,18 @@ +description: Details of the Entitlement criteria +type: object +properties: + existing: + type: boolean + example: true + description: If the entitlement already belonged to the user or not. + type: + $ref: "./DtoType.yaml" + example: "ENTITLEMENT" + id: + type: string + description: Entitlement ID + example: "2c918085771e9d3301773b3cb66f6398" + name: + type: string + description: Entitlement name + example: "My HR Entitlement" \ No newline at end of file diff --git a/static/idn-api/v3/schemas/SodViolationCheck.yaml b/static/idn-api/v3/schemas/SodViolationCheck.yaml new file mode 100644 index 000000000..31476bc1d --- /dev/null +++ b/static/idn-api/v3/schemas/SodViolationCheck.yaml @@ -0,0 +1,15 @@ +description: An object referencing an SOD violation check +required: + - requestId +type: object +properties: + requestId: + description: The id of the original request + example: 089899f13a8f4da7824996191587bab9 + type: string + created: + type: string + format: date-time + readOnly: true + description: The date-time when this request was created. + example: "2020-01-01T00:00:00.000000Z" \ No newline at end of file diff --git a/static/idn-api/v3/schemas/SodViolationCheckResult.yaml b/static/idn-api/v3/schemas/SodViolationCheckResult.yaml new file mode 100644 index 000000000..9d6b959e7 --- /dev/null +++ b/static/idn-api/v3/schemas/SodViolationCheckResult.yaml @@ -0,0 +1,37 @@ +description: The inner object representing the completed SOD Violation check +type: object +properties: + message: + $ref: './ErrorMessageDto.yaml' + description: >- + If the request failed, includes any error message that was generated. + example: + - locale: "en-US" + localeOrigin: "DEFAULT" + text: "An error has occurred during the SOD violation check" + clientMetadata: + type: object + additionalProperties: + type: string + description: >- + Arbitrary key-value pairs. They will never be processed by the IdentityNow system but will be returned on + completion of the violation check. + example: + requestedAppName: test-app + requestedAppId: 2c91808f7892918f0178b78da4a305a1 + violationContexts: + type: array + items: + $ref: './SodViolationContext.yaml' + violatedPolicies: + type: array + description: A list of the Policies that were violated + items: + $ref: './BaseReferenceDto.yaml' + description: Reference to the policy that was violated + example: + - type: "SOD_POLICY" + id: "69129440-422d-4a23-aadd-35c828d5bfda" + name: 'HR Policy' + + diff --git a/static/idn-api/v3/schemas/SodViolationContext.yaml b/static/idn-api/v3/schemas/SodViolationContext.yaml new file mode 100644 index 000000000..24a18692b --- /dev/null +++ b/static/idn-api/v3/schemas/SodViolationContext.yaml @@ -0,0 +1,24 @@ +description: The contextual information of the violated criteria +type: object +properties: + policy: + $ref: "./BaseReferenceDto.yaml" + description: Reference to the Policy that is being violated. + conflictingAccessCriteria: + type: object + description: The object which contains the left and right hand side of the entitlements that got violated according to the policy. + properties: + leftCriteria: + type: object + properties: + criteriaList: + type: array + items: + $ref: "./SodExemptCriteria.yaml" + rightCriteria: + type: object + properties: + criteriaList: + type: array + items: + $ref: "./SodExemptCriteria.yaml" \ No newline at end of file diff --git a/static/idn-api/v3/schemas/SodViolationContextCheckCompleted.yaml b/static/idn-api/v3/schemas/SodViolationContextCheckCompleted.yaml new file mode 100644 index 000000000..869472c27 --- /dev/null +++ b/static/idn-api/v3/schemas/SodViolationContextCheckCompleted.yaml @@ -0,0 +1,14 @@ +description: An object referencing a completed SOD violation check +type: object +properties: + state: + type: string + enum: [ SUCCESS, ERROR ] + description: The status of SOD violation check + example: "SUCCESS" + uuid: + description: The id of the Violation check event + type: string + example: "f73d16e9-a038-46c5-b217-1246e15fdbdd" + violationCheckResult: + $ref: "./SodViolationCheckResult.yaml" \ No newline at end of file diff --git a/static/idn-api/v3/schemas/Source.yaml b/static/idn-api/v3/schemas/Source.yaml new file mode 100644 index 000000000..81d8aad60 --- /dev/null +++ b/static/idn-api/v3/schemas/Source.yaml @@ -0,0 +1,154 @@ +type: object +properties: + id: + type: string + readOnly: true + description: the id of the Source + example: "2c91808568c529c60168cca6f90c1324" + description: + type: string + description: Human-readable description of the source + example: "This is the corporate directory." + owner: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: Reference to an owning Identity Object + cluster: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: Reference to the associated Cluster + example: + type: "CLUSTER" + id: "2c9180866166b5b0016167c32ef31a66" + name: "Corporate Cluster" + accountCorrelationConfig: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: Reference to a Correlation Config object + example: + type: "ACCOUNT_CORRELATION_CONFIG" + id: "2c9180855d191c59015d28583727245a" + name: "Directory [source-62867] Account Correlation" + accountCorrelationRule: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: >- + Reference to a Rule that can do COMPLEX the correlation, should only be used when accountCorrelationConfig can't + be used. + managerCorrelationMapping: + $ref: '../../v3/schemas/ManagerCorrelationMapping.yaml' + description: >- + Filter Object used during manager correlation to match incoming manager values to an existing manager's + Account/Identity + managerCorrelationRule: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: >- + Reference to the ManagerCorrelationRule, only used when a simple filter isn't sufficient. + beforeProvisioningRule: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: >- + Rule that runs on the CCG and allows for customization of provisioning plans before the connector is called. + schemas: + type: array + items: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: >- + List of references to Schema objects + example: + - type: "CONNECTOR_SCHEMA" + id: "2c9180835d191a86015d28455b4b232a" + name: "account" + - type: "CONNECTOR_SCHEMA" + id: "2c9180835d191a86015d28455b4b232b" + name: "group" + passwordPolicies: + type: array + items: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: >- + List of references to the associated PasswordPolicy objects. + example: + - type: "PASSWORD_POLICY" + id: "2c9180855d191c59015d291ceb053980" + name: "Corporate Password Policy" + features: + type: array + description: >- + Optional features that can be supported by a source. + items: + $ref: '../../v3/schemas/SourceFeature.yaml' + example: [ + "SYNC_PROVISIONING", + "MANAGER_LOOKUP", + "SEARCH", + "PROVISIONING", + "AUTHENTICATE", + "GROUP_PROVISIONING", + "PASSWORD" + ] + type: + type: string + description: >- + Specifies the type of system being managed e.g. Active Directory, Workday, etc.. + example: "OpenLDAP - Direct" + connector: + type: string + description: Connector script name. + example: active-directory + connectorClass: + type: string + description: >- + The fully qualified name of the Java class that implements the connector interface. + example: "sailpoint.connector.LDAPConnector" + connectorAttributes: + type: object + description: >- + Connector specific configuration; will differ from type to type. + example: + healthCheckTimeout: 30 + authSearchAttributes: [ + "cn", + "uid", + "mail" + ] + deleteThreshold: + type: integer + format: int32 + description: >- + Number from 0 to 100 that specifies when to skip the delete phase. + example: 10 + authoritative: + type: boolean + description: >- + When true indicates the source is referenced by an IdentityProfile. + example: false + managementWorkgroup: + $ref: '../../v3/schemas/BaseReferenceDto.yaml' + description: Reference to Management Workgroup for this Source + healthy: + type: boolean + description: >- + When true indicates a healthy source + example: true + status: + type: string + description: >- + A status identifier, giving specific information on why a source is healthy or not + example: "SOURCE_STATE_HEALTHY" + since: + type: string + description: >- + Timestamp showing when a source health check was last performed + example: "2021-09-28T15:48:29.3801666300Z" + connectorId: + type: string + description: The id of connector + example: "active-directory" + connectorName: + type: string + description: The name of the connector that was chosen on source creation + example: "Active Directory" + connectionType: + type: string + description: The type of connection (direct or file) + example: "file" + connectorImplementstionId: + type: string + description: The connector implementstion id + example: "delimited-file" diff --git a/static/idn-api/v3/schemas/SourceFeature.yaml b/static/idn-api/v3/schemas/SourceFeature.yaml new file mode 100644 index 000000000..906283412 --- /dev/null +++ b/static/idn-api/v3/schemas/SourceFeature.yaml @@ -0,0 +1,82 @@ +type: string +enum: + - AUTHENTICATE + - COMPOSITE + - DIRECT_PERMISSIONS + - DISCOVER_SCHEMA + - ENABLE + - MANAGER_LOOKUP + - NO_RANDOM_ACCESS + - PROXY + - SEARCH + - TEMPLATE + - UNLOCK + - UNSTRUCTURED_TARGETS + - SHAREPOINT_TARGET + - PROVISIONING + - GROUP_PROVISIONING + - SYNC_PROVISIONING + - PASSWORD + - CURRENT_PASSWORD + - ACCOUNT_ONLY_REQUEST + - ADDITIONAL_ACCOUNT_REQUEST + - NO_AGGREGATION + - GROUPS_HAVE_MEMBERS + - NO_PERMISSIONS_PROVISIONING + - NO_GROUP_PERMISSIONS_PROVISIONING + - NO_UNSTRUCTURED_TARGETS_PROVISIONING + - NO_DIRECT_PERMISSIONS_PROVISIONING +description: >- + Optional features that can be supported by an source. + + * AUTHENTICATE: The source supports pass-through authentication. + + * COMPOSITE: The source supports composite source creation. + + * DIRECT_PERMISSIONS: The source supports returning DirectPermissions. + + * DISCOVER_SCHEMA: The source supports discovering schemas for users and groups. + + * ENABLE The source supports reading if an account is enabled or disabled. + + * MANAGER_LOOKUP: The source supports looking up managers as they are encountered in a feed. This is the opposite of NO_RANDOM_ACCESS. + + * NO_RANDOM_ACCESS: The source does not support random access and the getObject() methods should not be called and expected to perform. + + * PROXY: The source can serve as a proxy for another source. When an source has a proxy, all connector calls made with that source are redirected through the connector for the proxy source. + + * SEARCH + + * TEMPLATE + + * UNLOCK: The source supports reading if an account is locked or unlocked. + + * UNSTRUCTURED_TARGETS: The source supports returning unstructured Targets. + + * SHAREPOINT_TARGET: The source supports returning unstructured Target data for SharePoint. It will be typically used by AD, LDAP sources. + + * PROVISIONING: The source can both read and write accounts. Having this feature implies that the provision() method is implemented. It also means that direct and target permissions can also be provisioned if they can be returned by aggregation. + + * GROUP_PROVISIONING: The source can both read and write groups. Having this feature implies that the provision() method is implemented. + + * SYNC_PROVISIONING: The source can provision accounts synchronously. + + * PASSWORD: The source can provision password changes. Since sources can never read passwords, this is should only be used in conjunction with the PROVISIONING feature. + + * CURRENT_PASSWORD: Some source types support verification of the current password + + * ACCOUNT_ONLY_REQUEST: The source supports requesting accounts without entitlements. + + * ADDITIONAL_ACCOUNT_REQUEST: The source supports requesting additional accounts. + + * NO_AGGREGATION: A source that does not support aggregation. + + * GROUPS_HAVE_MEMBERS: The source models group memberships with a member attribute on the group object rather than a groups attribute on the account object. This effects the implementation of delta account aggregation. + + * NO_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for accounts. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for accounts. + + * NO_GROUP_PERMISSIONS_PROVISIONING: Indicates that the connector cannot provision direct or target permissions for groups. When DIRECT_PERMISSIONS and PROVISIONING features are present, it is assumed that the connector can also provision direct permissions. This feature disables that assumption and causes permission request to be converted to work items for groups. + + * NO_UNSTRUCTURED_TARGETS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING. + + * NO_DIRECT_PERMISSIONS_PROVISIONING: This string will be replaced by NO_GROUP_PERMISSIONS_PROVISIONING and NO_PERMISSIONS_PROVISIONING. diff --git a/static/idn-api/v3/schemas/SourceHealthDto.yaml b/static/idn-api/v3/schemas/SourceHealthDto.yaml new file mode 100644 index 000000000..3692c6e2e --- /dev/null +++ b/static/idn-api/v3/schemas/SourceHealthDto.yaml @@ -0,0 +1,50 @@ +type: object +description: Dto for source health data +properties: + id: + type: string + readOnly: true + description: the id of the Source + example: "2c91808568c529c60168cca6f90c1324" + type: + type: string + description: >- + Specifies the type of system being managed e.g. Active Directory, Workday, etc.. + example: "OpenLDAP - Direct" + name: + type: string + description: the name of the source + example: "Source1234" + org: + type: string + description: source's org + example: "denali-cjh" + isAuthoritative: + type: boolean + isCluster: + type: boolean + hostname: + type: string + example: "megapod-useast1-secret-hostname.sailpoint.com" + pod: + type: string + description: source's pod + example: "megapod-useast1" + iqServiceVersion: + type: string + example: "iqVersion123" + status: + type: string + enum: + - SOURCE_STATE_ERROR_CLUSTER + - SOURCE_STATE_ERROR_SOURCE + - SOURCE_STATE_ERROR_VA + - SOURCE_STATE_FAILURE_CLUSTER + - SOURCE_STATE_FAILURE_SOURCE + - SOURCE_STATE_HEALTHY + - SOURCE_STATE_UNCHECKED_CLUSTER + - SOURCE_STATE_UNCHECKED_CLUSTER_NO_SOURCES + - SOURCE_STATE_UNCHECKED_SOURCE + - SOURCE_STATE_UNCHECKED_SOURCE_NO_ACCOUNTS + description: connection test result + example: "SOURCE_STATE_UNCHECKED_SOURCE" \ No newline at end of file diff --git a/static/idn-api/v3/schemas/SpConfigMessage.yaml b/static/idn-api/v3/schemas/SpConfigMessage.yaml new file mode 100644 index 000000000..202029084 --- /dev/null +++ b/static/idn-api/v3/schemas/SpConfigMessage.yaml @@ -0,0 +1,22 @@ +type: object +title: Config Import/Export Message +description: Message model for Config Import/Export. +properties: + key: + type: string + description: Message key. + example: "UNKNOWN_REFERENCE_RESOLVER" + text: + type: string + description: Message text. + example: "Unable to resolve reference for object [type: IDENTITY, id: 2c91808c746e9c9601747d6507332ecz, name: random identity]" + details: + type: object + description: Message details if any, in key:value pairs. + additionalProperties: + type: object + example: { "details": "message details" } +required: + - key + - text + - details diff --git a/static/idn-api/v3/schemas/Transform.yaml b/static/idn-api/v3/schemas/Transform.yaml new file mode 100644 index 000000000..859cc9e58 --- /dev/null +++ b/static/idn-api/v3/schemas/Transform.yaml @@ -0,0 +1,102 @@ +type: object +description: >- + The representation of an internally- or customer-defined transform. +required: + - name + - type + - attributes +properties: + id: + type: string + readOnly: true + description: >- + Unique ID of this transform + example: 2cd78adghjkja34jh2b1hkjhasuecd + name: + type: string + description: >- + Unique name of this transform + example: Timestamp To Date + type: + type: string + description: >- + The type of transform operation + enum: + - accountAttribute + - base64Decode + - base64Encode + - concat + - conditional + - dateCompare + - dateFormat + - dateMath + - decomposeDiacriticalMarks + - e164phone + - firstValid + - rule + - identityAttribute + - indexOf + - iso3166 + - lastIndexOf + - leftPad + - lookup + - lower + - normalizeNames + - randomAlphaNumeric + - randomNumeric + - reference + - replaceAll + - replace + - rightPad + - split + - static + - substring + - trim + - upper + - usernameGenerator + - uuid + example: dateFormat + externalDocs: + description: Transform Operations + url: https://developer.sailpoint.com/docs/transforms/transform_operations/transform_operations.html#transform-operations + attributes: + description: >- + Meta-data about the transform. Values in this list are specific to the type of transform to be executed. + oneOf: + - $ref: './transforms/AccountAttribute.yaml' + - $ref: './transforms/Base64Decode.yaml' + - $ref: './transforms/Base64Encode.yaml' + - $ref: './transforms/Concatenation.yaml' + - $ref: './transforms/Conditional.yaml' + - $ref: './transforms/DateCompare.yaml' + - $ref: './transforms/DateFormat.yaml' + - $ref: './transforms/DateMath.yaml' + - $ref: './transforms/DecomposeDiacriticalMarks.yaml' + - $ref: './transforms/E164phone.yaml' + - $ref: './transforms/FirstValid.yaml' + - $ref: './transforms/Rule.yaml' + - $ref: './transforms/IdentityAttribute.yaml' + - $ref: './transforms/IndexOf.yaml' + - $ref: './transforms/ISO3166.yaml' + - $ref: './transforms/LeftPad.yaml' + - $ref: './transforms/Lookup.yaml' + - $ref: './transforms/Lower.yaml' + - $ref: './transforms/NameNormalizer.yaml' + - $ref: './transforms/RandomAlphaNumeric.yaml' + - $ref: './transforms/RandomNumeric.yaml' + - $ref: './transforms/Reference.yaml' + - $ref: './transforms/ReplaceAll.yaml' + - $ref: './transforms/Replace.yaml' + - $ref: './transforms/RightPad.yaml' + - $ref: './transforms/Split.yaml' + - $ref: './transforms/Static.yaml' + - $ref: './transforms/Substring.yaml' + - $ref: './transforms/Trim.yaml' + - $ref: './transforms/Upper.yaml' + - $ref: './transforms/UUIDGenerator.yaml' + internal: + type: boolean + readOnly: true + description: >- + Indicates whether this is an internal SailPoint-created transform or a customer-created transform + example: false diff --git a/static/idn-api/v3/schemas/TransformDefinition.yaml b/static/idn-api/v3/schemas/TransformDefinition.yaml new file mode 100644 index 000000000..bcb276da5 --- /dev/null +++ b/static/idn-api/v3/schemas/TransformDefinition.yaml @@ -0,0 +1,17 @@ +type: object +properties: + type: + type: string + description: The type of the transform definition. + example: accountAttribute + attributes: + type: object + additionalProperties: + type: object + description: >- + Arbitrary key-value pairs to store any metadata for the object + example: { + attributeName: 'e-mail', + sourceName: 'MySource', + sourceId: '2c9180877a826e68017a8c0b03da1a53' + } diff --git a/static/idn-api/v3/schemas/UsageType.yaml b/static/idn-api/v3/schemas/UsageType.yaml new file mode 100644 index 000000000..3782113d0 --- /dev/null +++ b/static/idn-api/v3/schemas/UsageType.yaml @@ -0,0 +1,19 @@ +type: string +nullable: false +enum: + - CREATE + - UPDATE + - DELETE + - ASSIGN + - UNASSIGN + - CREATE_GROUP + - UPDATE_GROUP + - DELETE_GROUP + - REGISTER + - CREATE_IDENTITY + - UPDATE_IDENTITY + - EDIT_GROUP + - ENABLE + - DISABLE + - UNLOCK + - CHANGE_PASSWORD diff --git a/static/idn-api/v3/schemas/WorkItemState.yaml b/static/idn-api/v3/schemas/WorkItemState.yaml new file mode 100644 index 000000000..87d0cf60f --- /dev/null +++ b/static/idn-api/v3/schemas/WorkItemState.yaml @@ -0,0 +1,8 @@ +type: string +enum: + - FINISHED + - REJECTED + - RETURNED + - EXPIRED + - PENDING + - CANCELED \ No newline at end of file diff --git a/static/idn-api/v3/schemas/WorkItemType.yaml b/static/idn-api/v3/schemas/WorkItemType.yaml new file mode 100644 index 000000000..c49b32401 --- /dev/null +++ b/static/idn-api/v3/schemas/WorkItemType.yaml @@ -0,0 +1,17 @@ +type: string +enum: + - UNKNOWN + - GENERIC + - CERTIFICATION + - REMEDIATION + - DELEGATION + - APPROVAL + - VIOLATIONREVIEW + - FORM + - POLICYVIOLATION + - CHALLENGE + - IMPACTANALYSIS + - SIGNOFF + - EVENT + - MANUALACTION + - TEST \ No newline at end of file diff --git a/static/idn-api/v3/schemas/WorkItems.yaml b/static/idn-api/v3/schemas/WorkItems.yaml new file mode 100644 index 000000000..91f81fd07 --- /dev/null +++ b/static/idn-api/v3/schemas/WorkItems.yaml @@ -0,0 +1,63 @@ +type: object +properties: + id: + type: string + description: ID of the work item + example: 2c9180835d2e5168015d32f890ca1581 + requesterId: + type: string + description: ID of the requester + example: 2c9180835d2e5168015d32f890ca1581 + requesterDisplayName: + type: string + description: The displayname of the requester + example: John Smith + ownerId: + type: string + description: The ID of the owner + example: 2c9180835d2e5168015d32f890ca1581 + ownerName: + type: string + description: The name of the owner + example: Jason Smith + created: + type: string + format: 'date-time' + example: '2017-07-11T18:45:37.098Z' + modified: + type: string + format: 'date-time' + example: '2018-06-25T20:22:28.104Z' + description: + type: string + description: The description of the work item + example: Create account on source 'AD' + state: + $ref: './WorkItemState.yaml' + type: + $ref: './WorkItemType.yaml' + remediationItems: + $ref: './RemediationItemDetails.yaml' + approvalItems: + $ref: './ApprovalItemDetails.yaml' + name: + type: string + description: The work item name + example: Account Create + completed: + type: string + format: 'date-time' + example: '2018-10-19T13:49:37.385Z' + numItems: + type: integer + description: The number of items in the work item + example: 19 + form: + $ref: './FormDetails.yaml' + errors: + type: array + items: + type: string + example: ["The work item ID that was specified was not found."] + + diff --git a/static/idn-api/v3/schemas/WorkItemsCount.yaml b/static/idn-api/v3/schemas/WorkItemsCount.yaml new file mode 100644 index 000000000..c28259347 --- /dev/null +++ b/static/idn-api/v3/schemas/WorkItemsCount.yaml @@ -0,0 +1,6 @@ +type: object +properties: + count: + type: integer + description: The count of work items + example: 29 diff --git a/static/idn-api/v3/schemas/WorkItemsSummary.yaml b/static/idn-api/v3/schemas/WorkItemsSummary.yaml new file mode 100644 index 000000000..55c35af8a --- /dev/null +++ b/static/idn-api/v3/schemas/WorkItemsSummary.yaml @@ -0,0 +1,14 @@ +type: object +properties: + open: + type: integer + description: The count of open work items + example: 29 + completed: + type: integer + description: The count of completed work items + example: 1 + total: + type: integer + description: The count of total work items + example: 30 diff --git a/static/idn-api/v3/schemas/access/AccessProfile.yaml b/static/idn-api/v3/schemas/access/AccessProfile.yaml new file mode 100644 index 000000000..64109365f --- /dev/null +++ b/static/idn-api/v3/schemas/access/AccessProfile.yaml @@ -0,0 +1,109 @@ +type: object +properties: + id: + type: string + description: The ID of the Access Profile + example: 2c91808a7190d06e01719938fcd20792 + readOnly: true + name: + type: string + description: Name of the Access Profile + example: Employee-database-read-write + description: + type: string + description: Information about the Access Profile + example: Collection of entitlements to read/write the employee database + created: + type: string + description: Date the Access Profile was created + format: 'date-time' + example: '2021-03-01T22:32:58.104Z' + readOnly: true + modified: + type: string + description: Date the Access Profile was last modified. + format: 'date-time' + example: '2021-03-02T20:22:28.104Z' + readOnly: true + enabled: + type: boolean + description: Whether the Access Profile is enabled. If the Access Profile is enabled then you must include at least one Entitlement. + example: true + owner: + $ref: './OwnerReference.yaml' + description: Owner of the Access Profile + source: + $ref: './AccessProfileSourceRef.yaml' + entitlements: + type: array + description: A list of entitlements associated with the Access Profile. If enabled is false this is allowed to be empty otherwise it needs to contain at least one Entitlement. + items: + $ref: './EntitlementRef.yaml' + requestable: + type: boolean + description: >- + Whether the Access Profile is requestable via access request. Currently, making an Access Profile non-requestable is only supported + for customers enabled with the new Request Center. Otherwise, attempting to create an Access Profile with a value + **false** in this field results in a 400 error. + example: true + accessRequestConfig: + $ref: './Requestability.yaml' + description: Access request configuration for this object + revocationRequestConfig: + $ref: './Revocability.yaml' + description: >- + Revocation request configuration for this object. + segments: + type: array + items: + type: string + description: List of IDs of segments, if any, to which this Access Profile is assigned. + example: [ + "f7b1b8a3-5fed-4fd4-ad29-82014e137e19", + "29cb6c06-1da8-43ea-8be4-b3125f248f2a" + ] + provisioningCriteria: + $ref: './ProvisioningCriteriaLevel1.yaml' + description: >- + When an Identity has multiple Accounts on the Source with which an Access Profile is associated, this expression + is evaluated against those Accounts to choose one to provision with the Access Profile. + nullable: true + example: { + "operation": "OR", + "children": [ + { + "operation": "AND", + "children": [ + { + "attribute": "dn", + "operation": "CONTAINS", + "value": "useast" + }, + { + "attribute": "manager", + "operation": "CONTAINS", + "value": "Scott.Clark" + } + ] + }, + { + "operation": "AND", + "children": [ + { + "attribute": "dn", + "operation": "EQUALS", + "value": "Gibson" + }, + { + "attribute": "telephoneNumber", + "operation": "CONTAINS", + "value": "512" + } + ] + } + ] + } +required: + - owner + - name + - source diff --git a/static/idn-api/v3/schemas/access/AccessProfileBulkDeleteRequest.yaml b/static/idn-api/v3/schemas/access/AccessProfileBulkDeleteRequest.yaml new file mode 100644 index 000000000..3a965f67a --- /dev/null +++ b/static/idn-api/v3/schemas/access/AccessProfileBulkDeleteRequest.yaml @@ -0,0 +1,14 @@ +type: object +properties: + accessProfileIds: + description: List of IDs of Access Profiles to be deleted. + type: array + items: + type: string + example: ["2c9180847812e0b1017817051919ecca","2c9180887812e0b201781e129f151816"] + bestEffortOnly: + description: >- + If **true**, silently skip over any of the specified Access Profiles if they cannot be deleted because they + are in use. If **false**, no deletions will be attempted if any of the Access Profiles are in use. + type: boolean + example: true \ No newline at end of file diff --git a/static/idn-api/v3/schemas/access/AccessProfileBulkDeleteResponse.yaml b/static/idn-api/v3/schemas/access/AccessProfileBulkDeleteResponse.yaml new file mode 100644 index 000000000..dac92cf83 --- /dev/null +++ b/static/idn-api/v3/schemas/access/AccessProfileBulkDeleteResponse.yaml @@ -0,0 +1,19 @@ +type: object +properties: + taskId: + type: string + description: >- + ID of the task which is executing the bulk deletion. This can be passed to the **/task-status** API to + track status. + example: 2c9180867817ac4d017817c491119a20 + pending: + type: array + description: List of IDs of Access Profiles which are pending deletion. + items: + type: string + example: ["2c91808876438bbb017668c21919ecca","2c91808876438bb201766e129f151816"] + inUse: + type: array + description: List of usages of Access Profiles targeted for deletion. + items: + $ref: './AccessProfileUsage.yaml' diff --git a/static/idn-api/v3/schemas/access/AccessProfileRef.yaml b/static/idn-api/v3/schemas/access/AccessProfileRef.yaml new file mode 100644 index 000000000..2be1933fd --- /dev/null +++ b/static/idn-api/v3/schemas/access/AccessProfileRef.yaml @@ -0,0 +1,17 @@ +type: object +properties: + id: + type: string + description: ID of the Access Profile + example: ff808081751e6e129f1518161919ecca + type: + type: string + description: Type of requested object. This field must be either left null or set to 'ACCESS_PROFILE' when creating an Access Profile, otherwise a 400 Bad Request error will result. + enum: + - ACCESS_PROFILE + example: "ACCESS_PROFILE" + name: + type: string + description: Human-readable display name of the Access Profile. This field is ignored on input. + example: Access Profile 2567 + diff --git a/static/idn-api/v3/schemas/access/AccessProfileSourceRef.yaml b/static/idn-api/v3/schemas/access/AccessProfileSourceRef.yaml new file mode 100644 index 000000000..7de02a342 --- /dev/null +++ b/static/idn-api/v3/schemas/access/AccessProfileSourceRef.yaml @@ -0,0 +1,16 @@ +type: object +properties: + id: + type: string + description: The ID of the Source with with which the Access Profile is associated + example: 2c91809773dee3610173fdb0b6061ef4 + type: + type: string + enum: + - SOURCE + description: The type of the Source, will always be SOURCE + example: SOURCE + name: + type: string + description: The display name of the associated Source + example: "ODS-AD-SOURCE" diff --git a/static/idn-api/v3/schemas/access/AccessProfileUsage.yaml b/static/idn-api/v3/schemas/access/AccessProfileUsage.yaml new file mode 100644 index 000000000..19ca1a1a2 --- /dev/null +++ b/static/idn-api/v3/schemas/access/AccessProfileUsage.yaml @@ -0,0 +1,12 @@ +type: object +properties: + accessProfileId: + type: string + description: ID of the Access Profile that is in use + example: "2c91808876438bbb017668c21919ecca" + usedBy: + type: array + description: List of references to objects which are using the indicated Access Profile + items: + $ref: '../BaseReferenceDto.yaml' + diff --git a/static/idn-api/v3/schemas/access/ApprovalScheme.yaml b/static/idn-api/v3/schemas/access/ApprovalScheme.yaml new file mode 100644 index 000000000..4332ba7a3 --- /dev/null +++ b/static/idn-api/v3/schemas/access/ApprovalScheme.yaml @@ -0,0 +1,31 @@ +type: object +properties: + approverType: + type: string + enum: + - OWNER + - SOURCE_OWNER + - MANAGER + - GOVERNANCE_GROUP + description: >- + Describes the individual or group that is responsible for an approval step. Values are as follows. + + + **OWNER**: Owner of the associated Access Profile or Role + + + **SOURCE_OWNER**: Owner of the Source associated with an Access Profile + + + **MANAGER**: Manager of the Identity making the request + + + **GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field + + example: GOVERNANCE_GROUP + approverId: + type: string + description: Id of the specific approver, used only when approverType is GOVERNANCE_GROUP + example: 46c79819-a69f-49a2-becb-12c971ae66c6 + + diff --git a/static/idn-api/v3/schemas/access/ApprovalSchemeForRole.yaml b/static/idn-api/v3/schemas/access/ApprovalSchemeForRole.yaml new file mode 100644 index 000000000..19c244e09 --- /dev/null +++ b/static/idn-api/v3/schemas/access/ApprovalSchemeForRole.yaml @@ -0,0 +1,27 @@ +type: object +properties: + approverType: + type: string + enum: + - OWNER + - MANAGER + - GOVERNANCE_GROUP + description: >- + Describes the individual or group that is responsible for an approval step. Values are as follows. + + + **OWNER**: Owner of the associated Role + + + **MANAGER**: Manager of the Identity making the request + + + **GOVERNANCE_GROUP**: A Governance Group, the ID of which is specified by the **approverId** field + + example: GOVERNANCE_GROUP + approverId: + type: string + description: Id of the specific approver, used only when approverType is GOVERNANCE_GROUP + example: 46c79819-a69f-49a2-becb-12c971ae66c6 + + diff --git a/static/idn-api/v3/schemas/access/EntitlementRef.yaml b/static/idn-api/v3/schemas/access/EntitlementRef.yaml new file mode 100644 index 000000000..c4c7e3258 --- /dev/null +++ b/static/idn-api/v3/schemas/access/EntitlementRef.yaml @@ -0,0 +1,16 @@ +type: object +properties: + id: + type: string + description: The ID of the Entitlement + example: 2c91809773dee32014e13e122092014e + type: + type: string + enum: + - ENTITLEMENT + description: The type of the Entitlement, will always be ENTITLEMENT + example: ENTITLEMENT + name: + type: string + description: The display name of the Entitlement + example: "CN=entitlement.490efde5,OU=OrgCo,OU=ServiceDept,DC=HQAD,DC=local" diff --git a/static/idn-api/v3/schemas/access/IdentityReference.yaml b/static/idn-api/v3/schemas/access/IdentityReference.yaml new file mode 100644 index 000000000..a788f675d --- /dev/null +++ b/static/idn-api/v3/schemas/access/IdentityReference.yaml @@ -0,0 +1,15 @@ +type: object +description: A reference to an Identity +properties: + type: + $ref: '../DtoType.yaml' + example: 'IDENTITY' + id: + type: string + description: Identity id + example: '2c9180a46faadee4016fb4e018c20639' + name: + type: string + nullable: true + description: Human-readable display name of the Identity. + example: 'Thomas Edison' diff --git a/static/idn-api/v3/schemas/access/OwnerReference.yaml b/static/idn-api/v3/schemas/access/OwnerReference.yaml new file mode 100644 index 000000000..11f05a545 --- /dev/null +++ b/static/idn-api/v3/schemas/access/OwnerReference.yaml @@ -0,0 +1,15 @@ +type: object +description: The owner of this object. +properties: + type: + $ref: '../DtoType.yaml' + description: Owner type. This field must be either left null or set to 'IDENTITY' on input, otherwise a 400 Bad Request error will result. + example: 'IDENTITY' + id: + type: string + description: Identity id + example: '2c9180a46faadee4016fb4e018c20639' + name: + type: string + description: Human-readable display name of the owner. It may be left null or omitted in a POST or PATCH. If set, it must match the current value of the owner's display name, otherwise a 400 Bad Request error will result. + example: 'support' diff --git a/static/idn-api/v3/schemas/access/ProvisioningCriteriaLevel1.yaml b/static/idn-api/v3/schemas/access/ProvisioningCriteriaLevel1.yaml new file mode 100644 index 000000000..a456f468d --- /dev/null +++ b/static/idn-api/v3/schemas/access/ProvisioningCriteriaLevel1.yaml @@ -0,0 +1,29 @@ +type: object +description: Defines matching criteria for an Account to be provisioned with a specific Access Profile +properties: + operation: + $ref: './ProvisioningCriteriaOperation.yaml' + attribute: + type: string + description: >- + Name of the Account attribute to be tested. If **operation** is one of EQUALS, NOT_EQUALS, CONTAINS, or HAS, + this field is required. Otherwise, specifying it is an error. + example: email + nullable: true + value: + type: string + description: >- + String value to test the Account attribute w/r/t the specified operation. If the operation is one of EQUALS, + NOT_EQUALS, or CONTAINS, this field is required. Otherwise, specifying it is an error. If the Attribute is + not String-typed, it will be converted to the appropriate type. + example: "carlee.cert1c9f9b6fd@mailinator.com" + children: + type: array + items: + $ref: './ProvisioningCriteriaLevel2.yaml' + nullable: true + description: >- + Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum + of three levels of criteria are supported, including leaf nodes. + example: null + diff --git a/static/idn-api/v3/schemas/access/ProvisioningCriteriaLevel2.yaml b/static/idn-api/v3/schemas/access/ProvisioningCriteriaLevel2.yaml new file mode 100644 index 000000000..778cafbde --- /dev/null +++ b/static/idn-api/v3/schemas/access/ProvisioningCriteriaLevel2.yaml @@ -0,0 +1,29 @@ +type: object +description: Defines matching criteria for an Account to be provisioned with a specific Access Profile +properties: + operation: + $ref: './ProvisioningCriteriaOperation.yaml' + attribute: + type: string + description: >- + Name of the Account attribute to be tested. If **operation** is one of EQUALS, NOT_EQUALS, CONTAINS, or HAS, + this field is required. Otherwise, specifying it is an error. + example: email + nullable: true + value: + type: string + description: >- + String value to test the Account attribute w/r/t the specified operation. If the operation is one of EQUALS, + NOT_EQUALS, or CONTAINS, this field is required. Otherwise, specifying it is an error. If the Attribute is + not String-typed, it will be converted to the appropriate type. + example: "carlee.cert1c9f9b6fd@mailinator.com" + children: + type: array + items: + $ref: './ProvisioningCriteriaLevel3.yaml' + nullable: true + description: >- + Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum + of three levels of criteria are supported, including leaf nodes. + example: null + diff --git a/static/idn-api/v3/schemas/access/ProvisioningCriteriaLevel3.yaml b/static/idn-api/v3/schemas/access/ProvisioningCriteriaLevel3.yaml new file mode 100644 index 000000000..4f8d461a8 --- /dev/null +++ b/static/idn-api/v3/schemas/access/ProvisioningCriteriaLevel3.yaml @@ -0,0 +1,21 @@ +type: object +description: Defines matching criteria for an Account to be provisioned with a specific Access Profile +properties: + operation: + $ref: './ProvisioningCriteriaOperation.yaml' + attribute: + type: string + description: >- + Name of the Account attribute to be tested. If **operation** is one of EQUALS, NOT_EQUALS, CONTAINS, or HAS, + this field is required. Otherwise, specifying it is an error. + example: email + nullable: true + value: + type: string + description: >- + String value to test the Account attribute w/r/t the specified operation. If the operation is one of EQUALS, + NOT_EQUALS, or CONTAINS, this field is required. Otherwise, specifying it is an error. If the Attribute is + not String-typed, it will be converted to the appropriate type. + example: "carlee.cert1c9f9b6fd@mailinator.com" + + diff --git a/static/idn-api/v3/schemas/access/ProvisioningCriteriaOperation.yaml b/static/idn-api/v3/schemas/access/ProvisioningCriteriaOperation.yaml new file mode 100644 index 000000000..45cd8346e --- /dev/null +++ b/static/idn-api/v3/schemas/access/ProvisioningCriteriaOperation.yaml @@ -0,0 +1,11 @@ +type: string +enum: + - EQUALS + - NOT_EQUALS + - CONTAINS + - HAS + - AND + - OR +description: Supported operations on ProvisioningCriteria +example: EQUALS + diff --git a/static/idn-api/v3/schemas/access/Requestability.yaml b/static/idn-api/v3/schemas/access/Requestability.yaml new file mode 100644 index 000000000..2d482ee86 --- /dev/null +++ b/static/idn-api/v3/schemas/access/Requestability.yaml @@ -0,0 +1,16 @@ +type: object +properties: + commentsRequired: + type: boolean + description: Whether the requester of the containing object must provide comments justifying the request + example: true + denialCommentsRequired: + type: boolean + description: Whether an approver must provide comments when denying the request + example: true + approvalSchemes: + type: array + description: List describing the steps in approving the request + items: + $ref: './ApprovalScheme.yaml' + diff --git a/static/idn-api/v3/schemas/access/RequestabilityForRole.yaml b/static/idn-api/v3/schemas/access/RequestabilityForRole.yaml new file mode 100644 index 000000000..02ddbfcb7 --- /dev/null +++ b/static/idn-api/v3/schemas/access/RequestabilityForRole.yaml @@ -0,0 +1,16 @@ +type: object +properties: + commentsRequired: + type: boolean + description: Whether the requester of the containing object must provide comments justifying the request + example: true + denialCommentsRequired: + type: boolean + description: Whether an approver must provide comments when denying the request + example: true + approvalSchemes: + type: array + description: List describing the steps in approving the request + items: + $ref: './ApprovalSchemeForRole.yaml' + diff --git a/static/idn-api/v3/schemas/access/Revocability.yaml b/static/idn-api/v3/schemas/access/Revocability.yaml new file mode 100644 index 000000000..c749b080f --- /dev/null +++ b/static/idn-api/v3/schemas/access/Revocability.yaml @@ -0,0 +1,8 @@ +type: object +properties: + approvalSchemes: + type: array + description: List describing the steps in approving the revocation request + items: + $ref: './ApprovalScheme.yaml' + diff --git a/static/idn-api/v3/schemas/access/Role.yaml b/static/idn-api/v3/schemas/access/Role.yaml new file mode 100644 index 000000000..0c1a389d0 --- /dev/null +++ b/static/idn-api/v3/schemas/access/Role.yaml @@ -0,0 +1,81 @@ +type: object +description: A Role +properties: + id: + type: string + description: The id of the Role. This field must be left null when creating an Role, otherwise a 400 Bad Request error will result. + example: 2c918086749d78830174a1a40e121518 + name: + type: string + description: The human-readable display name of the Role + maxLength: 128 + example: Role 2567 + created: + type: string + description: Date the Role was created + format: 'date-time' + example: '2021-03-01T22:32:58.104Z' + readOnly: true + modified: + type: string + description: Date the Role was last modified. + format: 'date-time' + example: '2021-03-02T20:22:28.104Z' + readOnly: true + description: + type: string + nullable: true + description: A human-readable description of the Role + example: Urna amet cursus pellentesque nisl orci maximus lorem nisl euismod fusce morbi placerat adipiscing maecenas nisi tristique et metus et lacus sed morbi nunc nisl maximus magna arcu varius sollicitudin elementum enim maecenas nisi id ipsum tempus fusce diam ipsum tortor. + owner: + $ref: './OwnerReference.yaml' + accessProfiles: + type: array + items: + $ref: './AccessProfileRef.yaml' + nullable: true + membership: + $ref: './RoleMembershipSelector.yaml' + nullable: true + legacyMembershipInfo: + type: object + nullable: true + description: >- + This field is not directly modifiable and is generally expected to be *null*. + In very rare instances, some Roles may have been created using membership selection criteria that are no + longer fully supported. While these Roles will still work, they should be migrated to STANDARD or + IDENTITY_LIST selection criteria. This field exists for informational purposes as an aid to such migration. + example: { "type": "IDENTITY_LIST" } + additionalProperties: true + enabled: + type: boolean + description: Whether the Role is enabled or not. This field is false by default. + example: true + requestable: + type: boolean + description: Whether the Role can be the target of Access Requests. This field is false by default. + example: true + accessRequestConfig: + $ref: './RequestabilityForRole.yaml' + nullable: true + description: Access request configuration for this object + revocationRequestConfig: + $ref: './Revocability.yaml' + nullable: true + description: >- + Revocation request configuration for this object. + segments: + type: array + items: + type: string + nullable: true + description: List of IDs of segments, if any, to which this Role is assigned. + example: [ + "f7b1b8a3-5fed-4fd4-ad29-82014e137e19", + "29cb6c06-1da8-43ea-8be4-b3125f248f2a" + ] +required: + - name + + + diff --git a/static/idn-api/v3/schemas/access/RoleAssignmentSourceType.yaml b/static/idn-api/v3/schemas/access/RoleAssignmentSourceType.yaml new file mode 100644 index 000000000..785ae73e8 --- /dev/null +++ b/static/idn-api/v3/schemas/access/RoleAssignmentSourceType.yaml @@ -0,0 +1,8 @@ +type: string +enum: + - ACCESS_REQUEST + - ROLE_MEMBERSHIP +description: >- + Type which indicates how a particular Identity obtained a particular Role +example: ACCESS_REQUEST + diff --git a/static/idn-api/v3/schemas/access/RoleCriteriaKey.yaml b/static/idn-api/v3/schemas/access/RoleCriteriaKey.yaml new file mode 100644 index 000000000..02ffe9639 --- /dev/null +++ b/static/idn-api/v3/schemas/access/RoleCriteriaKey.yaml @@ -0,0 +1,21 @@ +type: object +description: Refers to a specific Identity attribute, Account attibute, or Entitlement used in Role membership criteria +properties: + type: + $ref: './RoleCriteriaKeyType.yaml' + property: + type: string + description: The name of the attribute or entitlement to which the associated criteria applies. + example: "attribute.email" + sourceId: + type: string + nullable: true + description: >- + ID of the Source from which an account attribute or entitlement is drawn. Required if type is ACCOUNT or + ENTITLEMENT + example: 2c9180867427f3a301745aec18211519 +required: + - type + - property + + diff --git a/static/idn-api/v3/schemas/access/RoleCriteriaKeyType.yaml b/static/idn-api/v3/schemas/access/RoleCriteriaKeyType.yaml new file mode 100644 index 000000000..7ba3904a5 --- /dev/null +++ b/static/idn-api/v3/schemas/access/RoleCriteriaKeyType.yaml @@ -0,0 +1,9 @@ +type: string +enum: + - IDENTITY + - ACCOUNT + - ENTITLEMENT +description: >- + Indicates whether the associated criteria represents an expression on identity attributes, account attributes, or + entitlements, respectively. +example: ACCOUNT diff --git a/static/idn-api/v3/schemas/access/RoleCriteriaLevel1.yaml b/static/idn-api/v3/schemas/access/RoleCriteriaLevel1.yaml new file mode 100644 index 000000000..90e92a105 --- /dev/null +++ b/static/idn-api/v3/schemas/access/RoleCriteriaLevel1.yaml @@ -0,0 +1,25 @@ +type: object +description: Defines STANDARD type Role membership +properties: + operation: + $ref: './RoleCriteriaOperation.yaml' + key: + $ref: './RoleCriteriaKey.yaml' + stringValue: + type: string + description: >- + String value to test the Identity attribute, Account attribute, or Entitlement specified in the key w/r/t + the specified operation. If this criteria is a leaf node, that is, if the operation is one of + EQUALS, NOT_EQUALS, CONTAINS, STARTS_WITH, or ENDS_WITH, this field is required. Otherwise, specifying it + is an error. + example: "carlee.cert1c9f9b6fd@mailinator.com" + children: + type: array + items: + $ref: './RoleCriteriaLevel2.yaml' + nullable: true + description: >- + Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum + of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be + children or OR nodes and vice-versa. + diff --git a/static/idn-api/v3/schemas/access/RoleCriteriaLevel2.yaml b/static/idn-api/v3/schemas/access/RoleCriteriaLevel2.yaml new file mode 100644 index 000000000..b0579a020 --- /dev/null +++ b/static/idn-api/v3/schemas/access/RoleCriteriaLevel2.yaml @@ -0,0 +1,25 @@ +type: object +description: Defines STANDARD type Role membership +properties: + operation: + $ref: './RoleCriteriaOperation.yaml' + key: + $ref: './RoleCriteriaKey.yaml' + stringValue: + type: string + description: >- + String value to test the Identity attribute, Account attribute, or Entitlement specified in the key w/r/t + the specified operation. If this criteria is a leaf node, that is, if the operation is one of + EQUALS, NOT_EQUALS, CONTAINS, STARTS_WITH, or ENDS_WITH, this field is required. Otherwise, specifying it + is an error. + example: "carlee.cert1c9f9b6fd@mailinator.com" + children: + type: array + items: + $ref: './RoleCriteriaLevel3.yaml' + nullable: true + description: >- + Array of child criteria. Required if the operation is AND or OR, otherwise it must be left null. A maximum + of three levels of criteria are supported, including leaf nodes. Additionally, AND nodes can only be + children or OR nodes and vice-versa. + diff --git a/static/idn-api/v3/schemas/access/RoleCriteriaLevel3.yaml b/static/idn-api/v3/schemas/access/RoleCriteriaLevel3.yaml new file mode 100644 index 000000000..075ec1949 --- /dev/null +++ b/static/idn-api/v3/schemas/access/RoleCriteriaLevel3.yaml @@ -0,0 +1,16 @@ +type: object +description: Defines STANDARD type Role membership +properties: + operation: + $ref: './RoleCriteriaOperation.yaml' + key: + $ref: './RoleCriteriaKey.yaml' + stringValue: + type: string + description: >- + String value to test the Identity attribute, Account attribute, or Entitlement specified in the key w/r/t + the specified operation. If this criteria is a leaf node, that is, if the operation is one of + EQUALS, NOT_EQUALS, CONTAINS, STARTS_WITH, or ENDS_WITH, this field is required. Otherwise, specifying it + is an error. + example: "carlee.cert1c9f9b6fd@mailinator.com" + diff --git a/static/idn-api/v3/schemas/access/RoleCriteriaOperation.yaml b/static/idn-api/v3/schemas/access/RoleCriteriaOperation.yaml new file mode 100644 index 000000000..28ddfbe88 --- /dev/null +++ b/static/idn-api/v3/schemas/access/RoleCriteriaOperation.yaml @@ -0,0 +1,11 @@ +type: string +enum: + - EQUALS + - NOT_EQUALS + - CONTAINS + - STARTS_WITH + - ENDS_WITH + - AND + - OR +description: An operation +example: EQUALS diff --git a/static/idn-api/v3/schemas/access/RoleIdentity.yaml b/static/idn-api/v3/schemas/access/RoleIdentity.yaml new file mode 100644 index 000000000..534a48c62 --- /dev/null +++ b/static/idn-api/v3/schemas/access/RoleIdentity.yaml @@ -0,0 +1,26 @@ +type: object +description: A subset of the fields of an Identity which is a member of a Role. +properties: + id: + type: string + description: >- + The ID of the Identity + example: 2c9180a46faadee4016fb4e018c20639 + aliasName: + type: string + description: >- + The alias / username of the Identity + example: 't.edison' + name: + type: string + description: >- + The human-readable display name of the Identity + example: 'Thomas Edison' + email: + type: string + description: >- + Email address of the Identity + example: 't.edison@identitynow.com' + roleAssignmentSource: + $ref: './RoleAssignmentSourceType.yaml' + diff --git a/static/idn-api/v3/schemas/access/RoleMembershipIdentity.yaml b/static/idn-api/v3/schemas/access/RoleMembershipIdentity.yaml new file mode 100644 index 000000000..b1b317ec4 --- /dev/null +++ b/static/idn-api/v3/schemas/access/RoleMembershipIdentity.yaml @@ -0,0 +1,21 @@ +type: object +description: A reference to an Identity in an IDENTITY_LIST role membership criteria. +properties: + type: + $ref: '../DtoType.yaml' + nullable: true + example: 'IDENTITY' + id: + type: string + description: Identity id + example: '2c9180a46faadee4016fb4e018c20639' + name: + type: string + nullable: true + description: Human-readable display name of the Identity. + example: 'Thomas Edison' + aliasName: + type: string + nullable: true + description: User name of the Identity + example: 't.edison' diff --git a/static/idn-api/v3/schemas/access/RoleMembershipSelector.yaml b/static/idn-api/v3/schemas/access/RoleMembershipSelector.yaml new file mode 100644 index 000000000..cd2df838a --- /dev/null +++ b/static/idn-api/v3/schemas/access/RoleMembershipSelector.yaml @@ -0,0 +1,18 @@ +type: object +description: >- + When present, specifies that the Role is to be granted to Identities which either satisfy specific criteria or + which are members of a given list of Identities. +properties: + type: + $ref: './RoleMembershipSelectorType.yaml' + criteria: + $ref: './RoleCriteriaLevel1.yaml' + nullable: true + identities: + type: array + items: + $ref: './RoleMembershipIdentity.yaml' + nullable: true + description: >- + Defines role membership as being exclusive to the specified Identities, when type is + IDENTITY_LIST. diff --git a/static/idn-api/v3/schemas/access/RoleMembershipSelectorType.yaml b/static/idn-api/v3/schemas/access/RoleMembershipSelectorType.yaml new file mode 100644 index 000000000..7d5867c8c --- /dev/null +++ b/static/idn-api/v3/schemas/access/RoleMembershipSelectorType.yaml @@ -0,0 +1,13 @@ +type: string +enum: + - STANDARD + - IDENTITY_LIST +description: >- + This enum characterizes the type of a Role's membership selector. Only the following two are fully supported: + + + STANDARD: Indicates that Role membership is defined in terms of a criteria expression + + + IDENTITY_LIST: Indicates that Role membership is conferred on the specific identities listed +example: IDENTITY_LIST \ No newline at end of file diff --git a/static/idn-api/v3/schemas/filter/Bound.yaml b/static/idn-api/v3/schemas/filter/Bound.yaml new file mode 100644 index 000000000..13d25ee89 --- /dev/null +++ b/static/idn-api/v3/schemas/filter/Bound.yaml @@ -0,0 +1,12 @@ +type: object +required: ['value'] +properties: + value: + description: >- + The value of the range's endpoint. + type: string + inclusive: + description: >- + Indicates if the endpoint is included in the range. + type: boolean + default: false diff --git a/static/idn-api/v3/schemas/filter/Filter.yaml b/static/idn-api/v3/schemas/filter/Filter.yaml new file mode 100644 index 000000000..7157d1e62 --- /dev/null +++ b/static/idn-api/v3/schemas/filter/Filter.yaml @@ -0,0 +1,17 @@ +type: 'object' +properties: + type: + $ref: 'FilterType.yaml' + range: + $ref: 'Range.yaml' + terms: + description: >- + The terms to be filtered. + type: array + items: + type: string + exclude: + description: >- + Indicates if the filter excludes results. + type: boolean + default: false diff --git a/static/idn-api/v3/schemas/filter/FilterType.yaml b/static/idn-api/v3/schemas/filter/FilterType.yaml new file mode 100644 index 000000000..e39e30572 --- /dev/null +++ b/static/idn-api/v3/schemas/filter/FilterType.yaml @@ -0,0 +1,10 @@ +description: >- + Enum representing the currently supported filter types. + + Additional values may be added in the future without notice. +type: string +enum: +- EXISTS +- RANGE +- TERMS +example: RANGE diff --git a/static/idn-api/v3/schemas/filter/Range.yaml b/static/idn-api/v3/schemas/filter/Range.yaml new file mode 100644 index 000000000..873330643 --- /dev/null +++ b/static/idn-api/v3/schemas/filter/Range.yaml @@ -0,0 +1,10 @@ +type: object +description: >- + The range of values to be filtered. +properties: + lower: + description: The lower bound of the range. + $ref: 'Bound.yaml' + upper: + description: The upper bound of the range. + $ref: 'Bound.yaml' diff --git a/static/idn-api/v3/schemas/filter/examples/exists.yaml b/static/idn-api/v3/schemas/filter/examples/exists.yaml new file mode 100644 index 000000000..3879c3291 --- /dev/null +++ b/static/idn-api/v3/schemas/filter/examples/exists.yaml @@ -0,0 +1,3 @@ +attributes.cloudAuthoritativeSource: + type: 'EXISTS' + exclude: true diff --git a/static/idn-api/v3/schemas/filter/examples/range.yaml b/static/idn-api/v3/schemas/filter/examples/range.yaml new file mode 100644 index 000000000..4e5427608 --- /dev/null +++ b/static/idn-api/v3/schemas/filter/examples/range.yaml @@ -0,0 +1,13 @@ +accessCount: + type: 'RANGE' + range: + lower: + value: '3' +created: + type: 'RANGE' + range: + lower: + value: '2019-12-01' + inclusive: true + upper: + value: '2020-01-01' diff --git a/static/idn-api/v3/schemas/filter/examples/terms.yaml b/static/idn-api/v3/schemas/filter/examples/terms.yaml new file mode 100644 index 000000000..03335296e --- /dev/null +++ b/static/idn-api/v3/schemas/filter/examples/terms.yaml @@ -0,0 +1,10 @@ +source.name: + type: 'TERMS' + terms: + - 'HR Employees' + - 'Corporate Active Directory' + exclude: true +protected: + type: 'TERMS' + terms: + - 'true' diff --git a/static/idn-api/v3/schemas/non-employee/ApprovalItemDetails.yaml b/static/idn-api/v3/schemas/non-employee/ApprovalItemDetails.yaml new file mode 100644 index 000000000..19c878fad --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/ApprovalItemDetails.yaml @@ -0,0 +1,26 @@ +type: object +properties: + id: + type: string + description: ID of the approval item + example: 2c9180835d2e5168015d32f890ca1581 + account: + type: string + description: The account referenced by the approval item + example: john.smith + application: + type: string + description: The name the application/source + example: Active Directory + attributeName: + type: string + description: The name of the attribute + example: emailAddress + attributeOperation: + type: string + description: The operation of the attribute + example: update + attributeValue: + type: string + description: The value of the attribute + example: a@b.com diff --git a/static/idn-api/v3/schemas/non-employee/ApprovalReminderAndEscalationConfig.yaml b/static/idn-api/v3/schemas/non-employee/ApprovalReminderAndEscalationConfig.yaml new file mode 100644 index 000000000..f98218868 --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/ApprovalReminderAndEscalationConfig.yaml @@ -0,0 +1,13 @@ +type : object +properties: + daysUntilEscalation: + type: integer + description: Number of days to wait before escalating the approval. + daysBetweenReminders: + type: integer + description: Number of days to wait between reminder notifications. + maxReminders: + type: integer + description: Maximum number of reminder notification to send to the reviewer before approval escalation. + fallbackApproverRef: + $ref: '../IdentityReferenceWithNameAndEmail.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/non-employee/ApprovalStatus.yaml b/static/idn-api/v3/schemas/non-employee/ApprovalStatus.yaml new file mode 100644 index 000000000..1fb7037ab --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/ApprovalStatus.yaml @@ -0,0 +1,8 @@ +type: string +enum: + - APPROVED + - REJECTED + - PENDING + - NOT_READY + - CANCELLED +description: Enum representing the non-employee request approval status \ No newline at end of file diff --git a/static/idn-api/v3/schemas/non-employee/ApprovalSummary.yaml b/static/idn-api/v3/schemas/non-employee/ApprovalSummary.yaml new file mode 100644 index 000000000..0676df7fb --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/ApprovalSummary.yaml @@ -0,0 +1,11 @@ +type: object +properties: + pending: + type: integer + description: The number of pending access requests approvals. + approved: + type: integer + description: The number of approved access requests approvals. + rejected: + type: integer + description: The number of rejected access requests approvals. \ No newline at end of file diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeApprovalDecision.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeApprovalDecision.yaml new file mode 100644 index 000000000..9eb102354 --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeApprovalDecision.yaml @@ -0,0 +1,6 @@ +type: object +properties: + comment: + type: string + description: Comment on the approval item. + maxLength: 4000 \ No newline at end of file diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeApprovalItem.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeApprovalItem.yaml new file mode 100644 index 000000000..bc5fbbd0c --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeApprovalItem.yaml @@ -0,0 +1,6 @@ +allOf: + - $ref: './NonEmployeeApprovalItemBase.yaml' + - type: object + properties: + nonEmployeeRequest: + $ref: './NonEmployeeRequestLite.yaml' diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeApprovalItemBase.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeApprovalItemBase.yaml new file mode 100644 index 000000000..569b30ec2 --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeApprovalItemBase.yaml @@ -0,0 +1,33 @@ +type: object +properties: + id: + type: string + format: UUID + description: Non-Employee approval item id + example: 2c1e388b-1e55-4b0a-ab5c-897f1204159c + approver: + $ref: './NonEmployeeIdentityReferenceWithId.yaml' + description: Reference to the associated Identity + accountName: + type: string + description: Requested identity account name + example: test.account + approvalStatus: + $ref: './ApprovalStatus.yaml' + approvalOrder: + type: number + description: Approval order + example: 1 + comment: + type: string + description: comment of approver + modified: + type: string + format: date-time + description: When the request was last modified. + example: "2019-08-23T18:52:59.162Z" + created: + type: string + format: date-time + description: When the request was created. + example: "2019-08-23T18:40:35.772Z" \ No newline at end of file diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeApprovalItemDetail.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeApprovalItemDetail.yaml new file mode 100644 index 000000000..0830e7138 --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeApprovalItemDetail.yaml @@ -0,0 +1,7 @@ +allOf: + - $ref: './NonEmployeeApprovalItemBase.yaml' + - type: object + properties: + nonEmployeeRequest: + $ref: './NonEmployeeRequestWithoutApprovalItem.yaml' + description: Non-Employee request associated to this approval \ No newline at end of file diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeApprovalSummary.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeApprovalSummary.yaml new file mode 100644 index 000000000..724f318e7 --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeApprovalSummary.yaml @@ -0,0 +1,11 @@ +type: object +properties: + approved: + type: number + description: The number of approved non-employee approval requests. + pending: + type: number + description: The number of pending non-employee approval requests. + rejected: + type: number + description: The number of rejected non-employee approval requests. \ No newline at end of file diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeBulkUploadJob.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeBulkUploadJob.yaml new file mode 100644 index 000000000..bd342281f --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeBulkUploadJob.yaml @@ -0,0 +1,34 @@ +type: object +properties: + id: + type: string + description: The bulk upload job's ID. (UUID) + example: "2c91808568c529c60168cca6f90cffff" + sourceId: + type: string + description: The ID of the source to bulk-upload non-employees to. (UUID) + example: "2c91808568c529c60168cca6f90c1313" + created: + type: string + format: date-time + description: The date-time the job was submitted. + example: "2019-08-23T18:52:59.162Z" + modified: + type: string + format: date-time + description: The date-time that the job was last updated. + example: "2019-08-23T18:52:59.162Z" + status: + type: string + enum: + - PENDING + - IN_PROGRESS + - COMPLETED + - ERROR + description: | + Returns the following values indicating the progress or result of the bulk upload job. + "PENDING" means the job is queued and waiting to be processed. + "IN_PROGRESS" means the job is currently being processed. + "COMPLETED" means the job has been completed without any errors. + "ERROR" means the job failed to process with errors. + example: "PENDING" \ No newline at end of file diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeBulkUploadStatus.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeBulkUploadStatus.yaml new file mode 100644 index 000000000..accb6660f --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeBulkUploadStatus.yaml @@ -0,0 +1,17 @@ +type: object +properties: + status: + type: string + enum: + - PENDING + - IN_PROGRESS + - COMPLETED + - ERROR + description: | + Returns the following values indicating the progress or result of the bulk upload job. + "PENDING" means the job is queued and waiting to be processed. + "IN_PROGRESS" means the job is currently being processed. + "COMPLETED" means the job has been completed without any errors. + "ERROR" means the job failed to process with errors. + null means job has been submitted to the source. + example: "PENDING" \ No newline at end of file diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeIdentityDtoType.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeIdentityDtoType.yaml new file mode 100644 index 000000000..5b249905b --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeIdentityDtoType.yaml @@ -0,0 +1,5 @@ +type: string +enum: + - GOVERNANCE_GROUP + - IDENTITY +example: IDENTITY diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeIdentityReferenceWithId.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeIdentityReferenceWithId.yaml new file mode 100644 index 000000000..8cc677415 --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeIdentityReferenceWithId.yaml @@ -0,0 +1,8 @@ +type: object +properties: + type: + $ref: './NonEmployeeIdentityDtoType.yaml' + id: + type: string + description: Identity id + example: 5168015d32f890ca15812c9180835d2e \ No newline at end of file diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeIdnUserRequest.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeIdnUserRequest.yaml new file mode 100644 index 000000000..8ac8b585c --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeIdnUserRequest.yaml @@ -0,0 +1,9 @@ +type: object +properties: + id: + type: string + format: UUID + description: Identity id. + example: 2c91808570313110017040b06f344ec9 +required: + - id \ No newline at end of file diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeRecord.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeRecord.yaml new file mode 100644 index 000000000..f51f85602 --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeRecord.yaml @@ -0,0 +1,58 @@ +type: object +properties: + id: + type: string + format: UUID + description: Non-Employee record id. + accountName: + type: string + description: Requested identity account name. + firstName: + type: string + description: Non-Employee's first name. + example: William + lastName: + type: string + description: Non-Employee's last name. + example: Smith + email: + type: string + description: Non-Employee's email. + example: william.smith@example.com + phone: + type: string + description: Non-Employee's phone. + example: "5555555555" + manager: + type: string + description: The account ID of a valid identity to serve as this non-employee's manager. + example: jane.doe + sourceId: + type: string + description: Non-Employee's source id. + example: "2c91808568c529c60168cca6f90c1313" + data: + type: object + additionalProperties: + type: string + description: Attribute blob/bag for a non-employee. + startDate: + type: string + format: date-time + description: Non-Employee employment start date. + example: "2019-08-23T18:52:59.162Z" + endDate: + type: string + format: date-time + description: Non-Employee employment end date. + example: "2020-08-23T18:52:59.162Z" + modified: + type: string + format: date-time + description: When the request was last modified. + example: "2019-08-23T18:52:59.162Z" + created: + type: string + format: date-time + description: When the request was created. + example: "2019-08-23T18:40:35.772Z" \ No newline at end of file diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeRejectApprovalDecision.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeRejectApprovalDecision.yaml new file mode 100644 index 000000000..5657a8709 --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeRejectApprovalDecision.yaml @@ -0,0 +1,8 @@ +type: object +properties: + comment: + type: string + description: Comment on the approval item. + maxLength: 4000 +required: + - comment \ No newline at end of file diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeRequest.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeRequest.yaml new file mode 100644 index 000000000..cb7f18d4d --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeRequest.yaml @@ -0,0 +1,70 @@ +allOf: + - $ref: './NonEmployeeSourceLite.yaml' + - type: object + properties: + accountName: + type: string + description: Requested identity account name. + example: william.smith + firstName: + type: string + description: Non-Employee's first name. + example: William + lastName: + type: string + description: Non-Employee's last name. + example: Smith + email: + type: string + description: Non-Employee's email. + example: william.smith@example.com + phone: + type: string + description: Non-Employee's phone. + example: "5555555555" + manager: + type: string + description: The account ID of a valid identity to serve as this non-employee's manager. + example: jane.doe + nonEmployeeSource: + $ref: './NonEmployeeSourceLite.yaml' + data: + type: object + additionalProperties: + type: string + description: Attribute blob/bag for a non-employee. + approvalItems: + description: List of approval item for the request + type: array + items: + $ref: './NonEmployeeApprovalItemBase.yaml' + approvalStatus: + $ref: './ApprovalStatus.yaml' + comment: + type: string + description: comment of requester + completionDate: + type: string + format: date-time + description: When the request was completely approved. + example: "2020-03-24T11:11:41.139-05:00" + startDate: + type: string + format: date-time + description: Non-Employee employment start date. + example: "2020-03-24T00:00:00-05:00" + endDate: + type: string + format: date-time + description: Non-Employee employment end date. + example: "2021-03-25T00:00:00-05:00" + modified: + type: string + format: date-time + description: When the request was last modified. + example: "2020-03-24T11:11:41.139-05:00" + created: + type: string + format: date-time + description: When the request was created. + example: "2020-03-24T11:11:41.139-05:00" \ No newline at end of file diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeRequestBody.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeRequestBody.yaml new file mode 100644 index 000000000..5c1123dfc --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeRequestBody.yaml @@ -0,0 +1,56 @@ +type: object +properties: + accountName: + type: string + description: Requested identity account name. + example: william.smith + firstName: + type: string + description: Non-Employee's first name. + example: William + lastName: + type: string + description: Non-Employee's last name. + example: Smith + email: + type: string + description: Non-Employee's email. + example: william.smith@example.com + phone: + type: string + description: Non-Employee's phone. + example: "5555555555" + manager: + type: string + description: The account ID of a valid identity to serve as this non-employee's manager. + example: jane.doe + sourceId: + type: string + description: Non-Employee's source id. + example: "2c91808568c529c60168cca6f90c1313" + data: + type: object + additionalProperties: + type: string + #maxItems: 10 + description: Attribute blob/bag for a non-employee, 10 attributes is the maximum size supported. + startDate: + type: string + format: date-time + description: Non-Employee employment start date. + example: "2020-03-24T00:00:00-05:00" + endDate: + type: string + format: date-time + description: Non-Employee employment end date. + example: "2021-03-25T00:00:00-05:00" +required: + - accountName + - firstName + - lastName + - email + - phone + - manager + - sourceId + - startDate + - endDate diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeRequestLite.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeRequestLite.yaml new file mode 100644 index 000000000..7c94d90d0 --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeRequestLite.yaml @@ -0,0 +1,12 @@ +type: object +properties: + id: + type: string + format: UUID + description: Non-Employee request id. + requester: + $ref: './NonEmployeeIdentityReferenceWithId.yaml' + example: + type: "IDENTITY" + id: "2c9180866166b5b0016167c32ef31a66" + name: "William Smith" \ No newline at end of file diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeRequestSummary.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeRequestSummary.yaml new file mode 100644 index 000000000..b9801abe3 --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeRequestSummary.yaml @@ -0,0 +1,14 @@ +type: object +properties: + approved: + type: number + description: The number of approved non-employee requests on all sources that *requested-for* user manages. + rejected: + type: number + description: The number of rejected non-employee requests on all sources that *requested-for* user manages. + pending: + type: number + description: The number of pending non-employee requests on all sources that *requested-for* user manages. + nonEmployeeCount: + type: number + description: The number of non-employee records on all sources that *requested-for* user manages. \ No newline at end of file diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeRequestWithoutApprovalItem.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeRequestWithoutApprovalItem.yaml new file mode 100644 index 000000000..4de5b2996 --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeRequestWithoutApprovalItem.yaml @@ -0,0 +1,65 @@ +allOf: + - $ref: './NonEmployeeRequestLite.yaml' + - type: object + properties: + accountName: + type: string + description: Requested identity account name. + example: william.smith + firstName: + type: string + description: Non-Employee's first name. + example: William + lastName: + type: string + description: Non-Employee's last name. + example: Smith + email: + type: string + description: Non-Employee's email. + example: william.smith@example.com + phone: + type: string + description: Non-Employee's phone. + example: "5555555555" + manager: + type: string + description: The account ID of a valid identity to serve as this non-employee's manager. + example: jane.doe + nonEmployeeSource: + $ref: './NonEmployeeSourceLiteWithSchemaAttributes.yaml' + data: + type: object + additionalProperties: + type: string + description: Attribute blob/bag for a non-employee. + approvalStatus: + $ref: './ApprovalStatus.yaml' + comment: + type: string + description: comment of requester + completionDate: + type: string + format: date-time + description: When the request was completely approved. + example: "2020-03-24T11:11:41.139-05:00" + startDate: + type: string + format: date + description: Non-Employee employment start date. + example: "2020-03-24" + endDate: + type: string + format: date + description: Non-Employee employment end date. + example: "2021-03-25" + modified: + type: string + format: date-time + description: When the request was last modified. + example: "2020-03-24T11:11:41.139-05:00" + created: + type: string + format: date-time + description: When the request was created. + example: "2020-03-24T11:11:41.139-05:00" \ No newline at end of file diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeSchemaAttribute.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeSchemaAttribute.yaml new file mode 100644 index 000000000..37ffec90a --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeSchemaAttribute.yaml @@ -0,0 +1,47 @@ +type: object +properties: + id: + type: string + format: UUID + example: "ac110005-7156-1150-8171-5b292e3e0084" + description: Schema Attribute Id + system: + type: boolean + description: True if this schema attribute is mandatory on all non-employees sources. + example: true + modified: + type: string + format: date-time + description: When the schema attribute was last modified. + example: "2019-08-23T18:52:59.162Z" + created: + type: string + format: date-time + description: When the schema attribute was created. + example: "2019-08-23T18:40:35.772Z" + type: + $ref: './NonEmployeeSchemaAttributeType.yaml' + label: + type: string + description: Label displayed on the UI for this schema attribute. + example: "Account Name" + technicalName: + type: string + description: The technical name of the attribute. Must be unique per source. + example: "account.name" + helpText: + type: string + description: help text displayed by UI. + example: "The unique identifier for the account" + placeholder: + type: string + description: Hint text that fills UI box. + example: "Enter a unique user name for this account." + required: + type: boolean + description: If true, the schema attribute is required for all non-employees in the source + example: true +required: + - type + - technicalName + - label diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeSchemaAttributeBody.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeSchemaAttributeBody.yaml new file mode 100644 index 000000000..ed754e068 --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeSchemaAttributeBody.yaml @@ -0,0 +1,30 @@ +type: object +properties: + type: + type: string + description: Type of the attribute. Only type 'TEXT' is supported for custom attributes. + example: "TEXT" + label: + type: string + description: Label displayed on the UI for this schema attribute. + example: "Account Name" + technicalName: + type: string + description: The technical name of the attribute. Must be unique per source. + example: "account.name" + helpText: + type: string + description: help text displayed by UI. + example: "The unique identifier for the account" + placeholder: + type: string + description: Hint text that fills UI box. + example: "Enter a unique user name for this account." + required: + type: boolean + description: If true, the schema attribute is required for all non-employees in the source + example: true +required: + - type + - technicalName + - label diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeSchemaAttributeType.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeSchemaAttributeType.yaml new file mode 100644 index 000000000..dc79492d6 --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeSchemaAttributeType.yaml @@ -0,0 +1,6 @@ +type: string +enum: + - TEXT + - DATE + - IDENTITY +description: Enum representing the type of data a schema attribute accepts. diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeSource.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeSource.yaml new file mode 100644 index 000000000..c19f40e44 --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeSource.yaml @@ -0,0 +1,24 @@ +allOf: + - $ref: './NonEmployeeSourceLite.yaml' + - type: object + properties: + approvers: + description: List of approvers + type: array + items: + $ref: './NonEmployeeIdentityReferenceWithId.yaml' + accountManagers: + description: List of account managers + type: array + items: + $ref: './NonEmployeeIdentityReferenceWithId.yaml' + modified: + type: string + format: date-time + description: When the request was last modified. + example: "2019-08-23T18:52:59.162Z" + created: + type: string + format: date-time + description: When the request was created. + example: "2019-08-23T18:40:35.772Z" \ No newline at end of file diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeSourceLite.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeSourceLite.yaml new file mode 100644 index 000000000..2f094cbc9 --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeSourceLite.yaml @@ -0,0 +1,19 @@ +type: object +properties: + id: + type: string + format: UUID + description: Non-Employee source id. + example: a0303682-5e4a-44f7-bdc2-6ce6112549c1 + sourceId: + type: string + description: Source Id associated with this non-employee source. + example: 2c91808568c529c60168cca6f90c1313 + name: + type: string + description: Source name associated with this non-employee source. + example: Retail + description: + type: string + description: Source description associated with this non-employee source. + example: Source description \ No newline at end of file diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeSourceLiteWithSchemaAttributes.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeSourceLiteWithSchemaAttributes.yaml new file mode 100644 index 000000000..82d7ff8c3 --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeSourceLiteWithSchemaAttributes.yaml @@ -0,0 +1,9 @@ +allOf: + - $ref: './NonEmployeeSourceLite.yaml' + - type: object + properties: + schemaAttributes: + description: List of schema attributes associated with this non-employee source. + type: array + items: + $ref: './NonEmployeeSchemaAttribute.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeSourceRequestBody.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeSourceRequestBody.yaml new file mode 100644 index 000000000..39e0ef15c --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeSourceRequestBody.yaml @@ -0,0 +1,33 @@ +type: object +properties: + name: + type: string + description: Name of non-employee source. + example: Retail + description: + type: string + description: Description of non-employee source. + example: Source description + owner: + description: Owner of non-employee source. + $ref: './NonEmployeeIdnUserRequest.yaml' + managementWorkgroup: + type: string + description: The ID for the management workgroup that contains source sub-admins + example: '123299' + approvers: + description: List of approvers. + type: array + items: + $ref: './NonEmployeeIdnUserRequest.yaml' + maxItems: 3 + accountManagers: + description: List of account managers. + type: array + items: + $ref: './NonEmployeeIdnUserRequest.yaml' + maxItems: 10 +required: + - owner + - name + - description diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeSourceWithCloudExternalId.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeSourceWithCloudExternalId.yaml new file mode 100644 index 000000000..9e0c79c11 --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeSourceWithCloudExternalId.yaml @@ -0,0 +1,8 @@ +allOf: + - $ref: './NonEmployeeSource.yaml' + - type: object + properties: + cloudExternalId: + type: string + description: Legacy ID used for sources from the V1 API. This attribute will be removed from a future version of the API and will not be considered a breaking change. No clients should rely on this ID always being present. + example: '99999' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/non-employee/NonEmployeeSourceWithNECount.yaml b/static/idn-api/v3/schemas/non-employee/NonEmployeeSourceWithNECount.yaml new file mode 100644 index 000000000..551ba59b6 --- /dev/null +++ b/static/idn-api/v3/schemas/non-employee/NonEmployeeSourceWithNECount.yaml @@ -0,0 +1,7 @@ +allOf: + - $ref: './NonEmployeeSource.yaml' + - type: object + properties: + nonEmployeeCount: + type: number + description: Number of non-employee records associated with this source. \ No newline at end of file diff --git a/static/idn-api/v3/schemas/reviews/ReviewableAccessProfile.yaml b/static/idn-api/v3/schemas/reviews/ReviewableAccessProfile.yaml new file mode 100644 index 000000000..9916db599 --- /dev/null +++ b/static/idn-api/v3/schemas/reviews/ReviewableAccessProfile.yaml @@ -0,0 +1,44 @@ +type : object +properties: + id: + type: string + description: The id of the Access Profile + example: 2c91808a7190d06e01719938fcd20792 + name: + type: string + description: Name of the Access Profile + example: Employee-database-read-write + description: + type: string + description: Information about the Access Profile + example: Collection of entitlements to read/write the employee database + privileged: + type: boolean + description: Indicates if the entitlement is a privileged entitlement + cloudGoverned: + type: boolean + description: True if the entitlement is cloud governed + endDate: + nullable: true + type: string + format: 'date-time' + description: The date at which a user's access expires + example: '2021-12-25T00:00:00.000Z' + owner: + $ref: '../IdentityReferenceWithNameAndEmail.yaml' + description: Owner of the Access Profile + entitlements: + type: array + description: A list of entitlements associated with this Access Profile + items: + $ref: './ReviewableEntitlement.yaml' + created: + type: string + description: Date the Access Profile was created. + format: 'date-time' + example: '2021-01-01T22:32:58.104Z' + modified: + type: string + description: Date the Access Profile was last modified. + format: 'date-time' + example: '2021-02-01T22:32:58.104Z' diff --git a/static/idn-api/v3/schemas/reviews/ReviewableEntitlement.yaml b/static/idn-api/v3/schemas/reviews/ReviewableEntitlement.yaml new file mode 100644 index 000000000..df6e81200 --- /dev/null +++ b/static/idn-api/v3/schemas/reviews/ReviewableEntitlement.yaml @@ -0,0 +1,96 @@ +type: object +nullable: true +properties: + id: + type: string + description: The id for the entitlement + example: 2c918085718230600171993742c63558 + name: + type: string + description: The name of the entitlement + example: 'CN=entitlement.bbb7c650' + description: + nullable: true + type: string + description: Information about the entitlement + example: Gives read/write access to the company database + privileged: + type: boolean + example: false + description: Indicates if the entitlement is a privileged entitlement + owner: + $ref: '../IdentityReferenceWithNameAndEmail.yaml' + attributeName: + type: string + description: The name of the attribute on the source + example: memberOf + attributeValue: + type: string + description: The value of the attribute on the source + example: 'CN=entitlement.bbb7c650' + sourceSchemaObjectType: + type: string + description: The schema object type on the source used to represent the entitlement and its attributes + example: 'groups' + sourceName: + type: string + description: The name of the source for which this entitlement belongs + example: ODS-AD-Source + sourceType: + type: string + description: The type of the source for which the entitlement belongs + example: Active Directory - Direct + hasPermissions: + type: boolean + description: Indicates if the entitlement has permissions + example: false + isPermission: + type: boolean + description: Indicates if the entitlement is a representation of an account permission + example: false + revocable: + type: boolean + description: Indicates whether the entitlement can be revoked + example: true + cloudGoverned: + type: boolean + description: True if the entitlement is cloud governed + account: + type: object + nullable: true + description: Information about the status of the entitlement + properties: + nativeIdentity: + type: string + description: The native identity for this account + example: 'CN=Alison Ferguso' + disabled: + type: boolean + example: false + description: Indicates whether this account is currently disabled + locked: + type: boolean + example: false + description: Indicates whether this account is currently locked + type: + $ref: '../DtoType.yaml' + id: + nullable: true + type: string + description: The id associated with the account + example: 2c9180857182305e0171993737eb29e6 + name: + nullable: true + type: string + created: + nullable: true + type: string + format: date-time + description: When the account was created + example: '2020-04-20T20:11:05.067Z' + modified: + nullable: true + type: string + format: date-time + description: When the account was last modified + example: '2020-05-20T18:57:16.987Z' diff --git a/static/idn-api/v3/schemas/reviews/ReviewableRole.yaml b/static/idn-api/v3/schemas/reviews/ReviewableRole.yaml new file mode 100644 index 000000000..4e19b724b --- /dev/null +++ b/static/idn-api/v3/schemas/reviews/ReviewableRole.yaml @@ -0,0 +1,33 @@ +type : object +nullable: true +properties: + id: + type: string + description: The id for the Role + example: 2c91808a7190d06e0171993907fd0794 + name: + type: string + description: The name of the Role + example: Accounting-Employees + description: + type: string + description: Information about the Role + example: Role for members of the accounting department with the necessary Access Profiles + privileged: + type: boolean + description: Indicates if the entitlement is a privileged entitlement + owner: + $ref: '../IdentityReferenceWithNameAndEmail.yaml' + revocable: + type: boolean + description: Indicates whether the Role can be revoked or requested + endDate: + type: string + format: 'date-time' + description: The date when a user's access expires. + example: '2021-12-25T00:00:00.000Z' + accessProfiles: + type: array + description: The list of Access Profiles associated with this Role + items: + $ref: './ReviewableAccessProfile.yaml' diff --git a/static/idn-api/v3/schemas/schedule/Schedule.yaml b/static/idn-api/v3/schemas/schedule/Schedule.yaml new file mode 100644 index 000000000..0b331ef25 --- /dev/null +++ b/static/idn-api/v3/schemas/schedule/Schedule.yaml @@ -0,0 +1,41 @@ +type: object +description: | + The schedule information. +properties: + type: + $ref: 'ScheduleType.yaml' + months: + $ref: Selector.yaml + description: 'The months selected.' + days: + description: | + The days selected. + example: + type: 'LIST' + values: + - 'MON' + - 'WED' + - 'FRI' + $ref: Selector.yaml + hours: + description: | + The hours selected. + example: + type: 'RANGE' + values: + - '9' + - '18' + interval: 3 + $ref: Selector.yaml + expiration: + description: | + The schedule expiration date. Latest possible expiration date is '2038-01-19T03:14:07+0000' + $ref: ../search/model/base/DateTime.yaml + timeZoneId: + description: | + The ID of the time zone for the schedule. + type: string + example: 'GMT-06:00' +required: +- type +- hours diff --git a/static/idn-api/v3/schemas/schedule/ScheduleType.yaml b/static/idn-api/v3/schemas/schedule/ScheduleType.yaml new file mode 100644 index 000000000..c98800f65 --- /dev/null +++ b/static/idn-api/v3/schemas/schedule/ScheduleType.yaml @@ -0,0 +1,11 @@ +description: | + Enum representing the currently supported schedule types. + + Additional values may be added in the future without notice. +type: string +enum: +- DAILY +- WEEKLY +- MONTHLY +- CALENDAR +example: WEEKLY diff --git a/static/idn-api/v3/schemas/schedule/Selector.yaml b/static/idn-api/v3/schemas/schedule/Selector.yaml new file mode 100644 index 000000000..b6cc29fa8 --- /dev/null +++ b/static/idn-api/v3/schemas/schedule/Selector.yaml @@ -0,0 +1,22 @@ +type: object +nullable: true +properties: + type: + $ref: 'SelectorType.yaml' + values: + description: | + The selected values. + type: array + items: + type: string + example: ['MON', 'WED'] + interval: + nullable: true + description: | + The selected interval for RANGE selectors. + type: integer + format: int32 + example: 3 +required: +- type +- values diff --git a/static/idn-api/v3/schemas/schedule/SelectorType.yaml b/static/idn-api/v3/schemas/schedule/SelectorType.yaml new file mode 100644 index 000000000..4529e8993 --- /dev/null +++ b/static/idn-api/v3/schemas/schedule/SelectorType.yaml @@ -0,0 +1,13 @@ +description: | + Enum representing the currently supported selector types. + + LIST - the *values* array contains one or more distinct values. + + RANGE - the *values* array contains two values: the start and end of the range, inclusive. + + Additional values may be added in the future without notice. +type: string +enum: +- LIST +- RANGE +example: LIST diff --git a/static/idn-api/v3/schemas/search/ElasticVersion.yaml b/static/idn-api/v3/schemas/search/ElasticVersion.yaml new file mode 100644 index 000000000..57b3617c0 --- /dev/null +++ b/static/idn-api/v3/schemas/search/ElasticVersion.yaml @@ -0,0 +1,4 @@ +description: >- + The current Elasticserver version. +type: string +default: '5.2' diff --git a/static/idn-api/v3/schemas/search/Index.yaml b/static/idn-api/v3/schemas/search/Index.yaml new file mode 100644 index 000000000..82e47ef79 --- /dev/null +++ b/static/idn-api/v3/schemas/search/Index.yaml @@ -0,0 +1,13 @@ +description: >- + Enum representing the currently supported indices. + + Additional values may be added in the future without notice. +type: string +enum: +- accessprofiles +- accountactivities +- entitlements +- events +- identities +- roles +example: identities diff --git a/static/idn-api/v3/schemas/search/InnerHit.yaml b/static/idn-api/v3/schemas/search/InnerHit.yaml new file mode 100644 index 000000000..19337d8bb --- /dev/null +++ b/static/idn-api/v3/schemas/search/InnerHit.yaml @@ -0,0 +1,15 @@ +type : object +description: >- + Inner Hit query object that will cause the specified nested type to be returned as the result matching the supplied query. +required: ["query", "type"] +properties: + query: + description: >- + The search query using the Elasticsearch [Query String Query](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string) syntax from the Query DSL extended by SailPoint to support Nested queries. + type: string + example: 'source.name:\"Active Directory\"' + type: + description: >- + The nested type to use in the inner hits query. + type: string + example: 'access' diff --git a/static/idn-api/v3/schemas/search/Query.yaml b/static/idn-api/v3/schemas/search/Query.yaml new file mode 100644 index 000000000..72b6588c2 --- /dev/null +++ b/static/idn-api/v3/schemas/search/Query.yaml @@ -0,0 +1,26 @@ +type: object +description: >- + Query parameters used to construct an Elasticsearch query object. +properties: + query: + description: >- + The query using the Elasticsearch [Query String Query](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string) syntax from the Query DSL extended by SailPoint to support Nested queries. + type: string + example: 'name:a*' + fields: + description: >- + The fields to which the specified query will be applied. The available fields are dependent on the indice(s) being searched on. Please refer to the response schema of this API for a list of available fields. + type: array + items: + type: string + example: + - 'name' + timeZone: + description: >- + The time zone to be applied to any range query related to dates. + type: string + example: 'America/Chicago' + innerHit: + description: >- + Inner Hit query object that will cause the specified nested type to be returned as the result matching the supplied query. + $ref: 'InnerHit.yaml' diff --git a/static/idn-api/v3/schemas/search/QueryResultFilter.yaml b/static/idn-api/v3/schemas/search/QueryResultFilter.yaml new file mode 100644 index 000000000..23372afe9 --- /dev/null +++ b/static/idn-api/v3/schemas/search/QueryResultFilter.yaml @@ -0,0 +1,18 @@ +type: object +description: >- + Allows the query results to be filtered by specifying a list of fields to include and/or exclude from the result documents. +properties: + includes: + description: >- + The list of field names to include in the result documents. + type: array + items: + type: string + example: [ 'name', 'displayName' ] + excludes: + description: >- + The list of field names to exclude from the result documents. + type: array + items: + type: string + example: [ 'stacktrace' ] diff --git a/static/idn-api/v3/schemas/search/QueryType.yaml b/static/idn-api/v3/schemas/search/QueryType.yaml new file mode 100644 index 000000000..35a192c9e --- /dev/null +++ b/static/idn-api/v3/schemas/search/QueryType.yaml @@ -0,0 +1,13 @@ +description: >- + The type of query to use. By default, the `SAILPOINT` query type is used, which requires the `query` object to be defined in the request body. + + To use the `queryDsl` or `typeAheadQuery` objects in the request, you must set the type to `DSL` or `TYPEAHEAD` accordingly. + + Additional values may be added in the future without notice. +type: string +enum: +- DSL +- SAILPOINT +- TYPEAHEAD +default: SAILPOINT +example: SAILPOINT diff --git a/static/idn-api/v3/schemas/search/Search.yaml b/static/idn-api/v3/schemas/search/Search.yaml new file mode 100644 index 000000000..5390e11c6 --- /dev/null +++ b/static/idn-api/v3/schemas/search/Search.yaml @@ -0,0 +1,104 @@ +type : object +properties: + indices: + description: >- + The names of the Elasticsearch indices in which to search. + externalDocs: + description: Learn more about search indices here. + url: https://documentation.sailpoint.com/saas/help/search/searchable-fields.html + type: array + items: + $ref: 'Index.yaml' + example: + - 'identities' + + queryType: + $ref: 'QueryType.yaml' + + queryVersion: + allOf: + - $ref: 'ElasticVersion.yaml' + - type : string + description: >- + The version of the query object. + + This version number will map to the version of Elasticsearch for the query strings and objects being used. + + query: + $ref: 'Query.yaml' + + queryDsl: + description: >- + The search query using the Elasticsearch [Query DSL](https://www.elastic.co/guide/en/elasticsearch/reference/7.10/query-dsl.html) syntax. + type: object + example: + match: + name: "john.doe" + + typeAheadQuery: + $ref: 'TypeAheadQuery.yaml' + + includeNested: + description: >- + Indicates if nested objects from returned search results should be included. + type: boolean + default: true + example: true + + queryResultFilter: + $ref: 'QueryResultFilter.yaml' + + aggregationType: + $ref: 'aggregate/AggregationType.yaml' + + aggregationsVersion: + allOf: + - $ref: 'ElasticVersion.yaml' + - type : string + description: >- + The version of the language being used for aggregation queries. + + This version number will map to the version of Elasticsearch for the aggregation query object. + + aggregationsDsl: + description: >- + The aggregation search query using Elasticsearch [Aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations.html) syntax. + type: object + + aggregations: + description: | + The aggregation’s specifications, such as the groupings and calculations to be performed. + $ref: 'aggregate/Aggregation.yaml' + + sort: + description: >- + The fields to be used to sort the search results. + Use + or - to specify the sort direction. + type: array + items: + type: string + example: "+id" + + searchAfter: + description: >- + Used to begin the search window at the values specified. + + This parameter consists of the last values of the sorted fields in the current record set. + + This is used to expand the Elasticsearch limit of 10K records by shifting the 10K window to begin at this value. + + For example, when searching for identities, if the last idenitity ID in the search result is 2c91808375d8e80a0175e1f88a575221, then using that ID in this property will start a new search after this identity. + type: array + items: + type: string + example: "2c91808375d8e80a0175e1f88a575221" + + filters: + description: >- + The filters to be applied for each filtered field name. + type: object + additionalProperties: + $ref: '../filter/Filter.yaml' + +required: +- indices diff --git a/static/idn-api/v3/schemas/search/TypeAheadQuery.yaml b/static/idn-api/v3/schemas/search/TypeAheadQuery.yaml new file mode 100644 index 000000000..5cf507ecf --- /dev/null +++ b/static/idn-api/v3/schemas/search/TypeAheadQuery.yaml @@ -0,0 +1,35 @@ +type: object +description: >- + Query parameters used to construct an Elasticsearch type ahead query object. +required: +- query +- field +properties: + query: + description: >- + The type ahead query string used to construct a phrase prefix match query. + type: string + example: 'Work' + field: + description: >- + The field on which to perform the type ahead search. + type: string + example: 'source.name' + nestedType: + description: >- + The nested type. + type: string + example: 'access' + maxExpansions: + description: >- + The number of suffixes the last term will be expanded into. + + Influences the performance of the query and the number results returned. + + Valid values: 1 to 1000. + type: integer + format: int32 + minimum: 1 + maximum: 1000 + default: 10 + example: 10 diff --git a/static/idn-api/v3/schemas/search/aggregate/Aggregation-2.yaml b/static/idn-api/v3/schemas/search/aggregate/Aggregation-2.yaml new file mode 100644 index 000000000..efb681c84 --- /dev/null +++ b/static/idn-api/v3/schemas/search/aggregate/Aggregation-2.yaml @@ -0,0 +1,8 @@ +allOf: +- $ref: 'Aggregations.yaml' +- type : object + properties: + subAggregation: + description: >- + Aggregation to be performed on the result of the parent bucket aggregation. + $ref: 'Aggregations.yaml' diff --git a/static/idn-api/v3/schemas/search/aggregate/Aggregation.yaml b/static/idn-api/v3/schemas/search/aggregate/Aggregation.yaml new file mode 100644 index 000000000..35221d616 --- /dev/null +++ b/static/idn-api/v3/schemas/search/aggregate/Aggregation.yaml @@ -0,0 +1,8 @@ +allOf: +- $ref: 'Aggregations.yaml' +- type: object + properties: + subAggregation: + description: >- + Aggregation to be performed on the result of the parent bucket aggregation. + $ref: 'Aggregation-2.yaml' diff --git a/static/idn-api/v3/schemas/search/aggregate/AggregationType.yaml b/static/idn-api/v3/schemas/search/aggregate/AggregationType.yaml new file mode 100644 index 000000000..9a62dcbfe --- /dev/null +++ b/static/idn-api/v3/schemas/search/aggregate/AggregationType.yaml @@ -0,0 +1,10 @@ +description: | + Enum representing the currently available query languages for aggregations, which are used to perform calculations or groupings on search results. + + Additional values may be added in the future without notice. +type: string +enum: +- DSL +- SAILPOINT +default: DSL +example: DSL diff --git a/static/idn-api/v3/schemas/search/aggregate/Aggregations.yaml b/static/idn-api/v3/schemas/search/aggregate/Aggregations.yaml new file mode 100644 index 000000000..f43e5b398 --- /dev/null +++ b/static/idn-api/v3/schemas/search/aggregate/Aggregations.yaml @@ -0,0 +1,10 @@ +type: object +properties: + nested: + $ref: 'NestedAggregation.yaml' + metric: + $ref: 'MetricAggregation.yaml' + filter: + $ref: 'FilterAggregation.yaml' + bucket: + $ref: 'BucketAggregation.yaml' diff --git a/static/idn-api/v3/schemas/search/aggregate/BucketAggregation.yaml b/static/idn-api/v3/schemas/search/aggregate/BucketAggregation.yaml new file mode 100644 index 000000000..48f49ab6a --- /dev/null +++ b/static/idn-api/v3/schemas/search/aggregate/BucketAggregation.yaml @@ -0,0 +1,31 @@ +type: object +description: >- + The bucket to group the results of the aggregation query by. +required: ["name", "field"] +properties: + name: + description: >- + The name of the bucket aggregate to be included in the result. + type: string + example: 'Identity Locations' + type: + $ref: 'BucketType.yaml' + field: + description: >- + The field to bucket on. + + Prefix the field name with '@' to reference a nested object. + type: string + example: 'attributes.city' + size: + description: >- + Maximum number of buckets to include. + type: integer + format: int32 + example: 100 + minDocCount: + description: >- + Minimum number of documents a bucket should have. + type: integer + format: int32 + example: 2 diff --git a/static/idn-api/v3/schemas/search/aggregate/BucketType.yaml b/static/idn-api/v3/schemas/search/aggregate/BucketType.yaml new file mode 100644 index 000000000..a39eb2d4f --- /dev/null +++ b/static/idn-api/v3/schemas/search/aggregate/BucketType.yaml @@ -0,0 +1,9 @@ +description: >- + Enum representing the currently supported bucket aggregation types. + + Additional values may be added in the future without notice. +type: string +enum: +- TERMS +default: TERMS +example: TERMS diff --git a/static/idn-api/v3/schemas/search/aggregate/FilterAggregation.yaml b/static/idn-api/v3/schemas/search/aggregate/FilterAggregation.yaml new file mode 100644 index 000000000..0d5636a6d --- /dev/null +++ b/static/idn-api/v3/schemas/search/aggregate/FilterAggregation.yaml @@ -0,0 +1,24 @@ +type: object +description: >- + An additional filter to constrain the results of the search query. +required: ["name", "field", "value"] +properties: + name: + description: >- + The name of the filter aggregate to be included in the result. + type: string + example: 'Entitlements' + type: + $ref: 'FilterType.yaml' + field: + description: | + The search field to apply the filter to. + + Prefix the field name with '@' to reference a nested object. + type: string + example: 'access.type' + value: + description: >- + The value to filter on. + type: string + example: 'ENTITLEMENT' diff --git a/static/idn-api/v3/schemas/search/aggregate/FilterType.yaml b/static/idn-api/v3/schemas/search/aggregate/FilterType.yaml new file mode 100644 index 000000000..0d563be32 --- /dev/null +++ b/static/idn-api/v3/schemas/search/aggregate/FilterType.yaml @@ -0,0 +1,8 @@ +description: >- + Enum representing the currently supported filter aggregation types. + + Additional values may be added in the future without notice. +type: string +enum: +- TERM +default: TERM diff --git a/static/idn-api/v3/schemas/search/aggregate/MetricAggregation.yaml b/static/idn-api/v3/schemas/search/aggregate/MetricAggregation.yaml new file mode 100644 index 000000000..6ab336d05 --- /dev/null +++ b/static/idn-api/v3/schemas/search/aggregate/MetricAggregation.yaml @@ -0,0 +1,22 @@ +type: object +description: >- + The calculation done on the results of the query +required: ["name", "field"] +properties: + name: + description: >- + The name of the metric aggregate to be included in the result. + + If the metric aggregation is omitted, the resulting aggregation will be a count of the documents in the search results. + type: string + example: 'Access Name Count' + type: + $ref: 'MetricType.yaml' + field: + description: | + The field the calculation is performed on. + + Prefix the field name with '@' to reference a nested object. + type: string + example: '@access.name' + diff --git a/static/idn-api/v3/schemas/search/aggregate/MetricType.yaml b/static/idn-api/v3/schemas/search/aggregate/MetricType.yaml new file mode 100644 index 000000000..6c8758b86 --- /dev/null +++ b/static/idn-api/v3/schemas/search/aggregate/MetricType.yaml @@ -0,0 +1,14 @@ +description: >- + Enum representing the currently supported metric aggregation types. + + Additional values may be added in the future without notice. +type: string +enum: +- COUNT +- UNIQUE_COUNT +- AVG +- SUM +- MEDIAN +- MIN +- MAX +default: UNIQUE_COUNT diff --git a/static/idn-api/v3/schemas/search/aggregate/NestedAggregation.yaml b/static/idn-api/v3/schemas/search/aggregate/NestedAggregation.yaml new file mode 100644 index 000000000..37a8025bc --- /dev/null +++ b/static/idn-api/v3/schemas/search/aggregate/NestedAggregation.yaml @@ -0,0 +1,16 @@ +type: object +description: >- + The nested aggregation object. +required: ["name", "type"] +properties: + name: + description: >- + The name of the nested aggregate to be included in the result. + type: string + example: 'id' + type: + description: >- + The type of the nested object. + type: string + example: 'access' + diff --git a/static/idn-api/v3/schemas/search/aggregate/examples/bucketAggregation-dsl.yaml b/static/idn-api/v3/schemas/search/aggregate/examples/bucketAggregation-dsl.yaml new file mode 100644 index 000000000..1d537bc2d --- /dev/null +++ b/static/idn-api/v3/schemas/search/aggregate/examples/bucketAggregation-dsl.yaml @@ -0,0 +1,8 @@ +summary: BucketAggregation using DSL +value: + indices: [ 'aggregations' ] + aggregationType: 'DSL' + aggregationsDsl: + Identity Locations: + terms: + field: 'attributes.city.exact' diff --git a/static/idn-api/v3/schemas/search/aggregate/examples/bucketAggregation-subAggregation-dsl.yaml b/static/idn-api/v3/schemas/search/aggregate/examples/bucketAggregation-subAggregation-dsl.yaml new file mode 100644 index 000000000..d8a93bcad --- /dev/null +++ b/static/idn-api/v3/schemas/search/aggregate/examples/bucketAggregation-subAggregation-dsl.yaml @@ -0,0 +1,12 @@ +summary: BucketAggregation with SubAggregation using DSL +value: + indices: [ 'aggregations' ] + aggregationType: 'DSL' + aggregationsDsl: + Identity Department: + terms: + field: 'attributes.department.exact' + aggs: + Identity Locations: + terms: + field: 'attributes.city.exact' diff --git a/static/idn-api/v3/schemas/search/aggregate/examples/bucketAggregation-subAggregation.yaml b/static/idn-api/v3/schemas/search/aggregate/examples/bucketAggregation-subAggregation.yaml new file mode 100644 index 000000000..2490d002f --- /dev/null +++ b/static/idn-api/v3/schemas/search/aggregate/examples/bucketAggregation-subAggregation.yaml @@ -0,0 +1,14 @@ +summary: BucketAggregation with SubAggregation +value: + indices: [ 'aggregations' ] + aggregationType: 'SAILPOINT' + aggregations: + bucket: + name: 'Identity Department' + type: 'TERMS' + field: 'attributes.department' + subAggregation: + bucket: + name: 'Identity Locations' + type: 'TERMS' + field: 'attributes.city' diff --git a/static/idn-api/v3/schemas/search/aggregate/examples/bucketAggregation.yaml b/static/idn-api/v3/schemas/search/aggregate/examples/bucketAggregation.yaml new file mode 100644 index 000000000..f61db24d5 --- /dev/null +++ b/static/idn-api/v3/schemas/search/aggregate/examples/bucketAggregation.yaml @@ -0,0 +1,9 @@ +summary: BucketAggregation +value: + indices: [ 'aggregations' ] + aggregationType: 'SAILPOINT' + aggregations: + bucket: + name: 'Identity Locations' + type: 'TERMS' + field: 'attributes.city' diff --git a/static/idn-api/v3/schemas/search/aggregate/examples/metricAggregation-dsl.yaml b/static/idn-api/v3/schemas/search/aggregate/examples/metricAggregation-dsl.yaml new file mode 100644 index 000000000..fc08c6c2b --- /dev/null +++ b/static/idn-api/v3/schemas/search/aggregate/examples/metricAggregation-dsl.yaml @@ -0,0 +1,8 @@ +summary: MetricAggregation using DSL +value: + indices: [ 'aggregations' ] + aggregationType: 'DSL' + aggregationsDsl: + How Many Locations: + cardinality: + field: 'attributes.city.exact' diff --git a/static/idn-api/v3/schemas/search/aggregate/examples/metricAggregation.yaml b/static/idn-api/v3/schemas/search/aggregate/examples/metricAggregation.yaml new file mode 100644 index 000000000..ef327643e --- /dev/null +++ b/static/idn-api/v3/schemas/search/aggregate/examples/metricAggregation.yaml @@ -0,0 +1,9 @@ +summary: MetricAggregation +value: + indices: [ 'aggregations' ] + aggregationType: 'SAILPOINT' + aggregations: + metric: + name: 'How Many Locations' + type: 'UNIQUE_COUNT' + field: 'attributes.city' diff --git a/static/idn-api/v3/schemas/search/aggregate/examples/nestedAggregation-bucketAggregation-dsl.yaml b/static/idn-api/v3/schemas/search/aggregate/examples/nestedAggregation-bucketAggregation-dsl.yaml new file mode 100644 index 000000000..7eba60c65 --- /dev/null +++ b/static/idn-api/v3/schemas/search/aggregate/examples/nestedAggregation-bucketAggregation-dsl.yaml @@ -0,0 +1,12 @@ +summary: NestedAggregation with BucketAggregation using DSL +value: + indices: [ 'aggregations' ] + aggregationType: 'DSL' + aggregationsDsl: + access: + nested: + path: 'access' + aggs: + Access Source Name: + terms: + field: 'access.source.name.exact' diff --git a/static/idn-api/v3/schemas/search/aggregate/examples/nestedAggregation-bucketAggregation.yaml b/static/idn-api/v3/schemas/search/aggregate/examples/nestedAggregation-bucketAggregation.yaml new file mode 100644 index 000000000..895e68372 --- /dev/null +++ b/static/idn-api/v3/schemas/search/aggregate/examples/nestedAggregation-bucketAggregation.yaml @@ -0,0 +1,13 @@ +summary: NestedAggregation with BucketAggregation +value: + indices: [ 'aggregations' ] + aggregationType: 'SAILPOINT' + aggregations: + nested: + name: 'Access' + field: 'access' + type: 'TERMS' + bucket: + name: 'Access Source Name' + type: 'TERMS' + field: 'access.source.name' diff --git a/static/idn-api/v3/schemas/search/aggregate/examples/nestedAggregation-filterAggregation-bucketAggregation-dsl.yaml b/static/idn-api/v3/schemas/search/aggregate/examples/nestedAggregation-filterAggregation-bucketAggregation-dsl.yaml new file mode 100644 index 000000000..753966d03 --- /dev/null +++ b/static/idn-api/v3/schemas/search/aggregate/examples/nestedAggregation-filterAggregation-bucketAggregation-dsl.yaml @@ -0,0 +1,17 @@ +summary: NestedAggregation with FilterAggregation and BucketAggregation using DSL +value: + indices: [ 'aggregations' ] + aggregationType: 'DSL' + aggregationsDsl: + access: + nested: + path: 'access' + aggs: + Entitlements: + filter: + term: + access.type: 'ENTITLEMENT' + aggs: + Access Name: + terms: + field: 'access.name.exact' diff --git a/static/idn-api/v3/schemas/search/aggregate/examples/nestedAggregation-filterAggregation-bucketAggregation.yaml b/static/idn-api/v3/schemas/search/aggregate/examples/nestedAggregation-filterAggregation-bucketAggregation.yaml new file mode 100644 index 000000000..12310e700 --- /dev/null +++ b/static/idn-api/v3/schemas/search/aggregate/examples/nestedAggregation-filterAggregation-bucketAggregation.yaml @@ -0,0 +1,17 @@ +summary: NestedAggregation with FilterAggregation and BucketAggregation +value: + indices: [ 'aggregations' ] + aggregationType: 'SAILPOINT' + aggregations: + nested: + name: 'Access' + field: 'access' + type: 'TERMS' + filter: + name: 'Entitlements' + field: 'access.type' + value: 'ENTITLEMENT' + bucket: + name: 'Access Name' + type: 'TERMS' + field: 'access.name' diff --git a/static/idn-api/v3/schemas/search/documents/AggregationResult-csv.yaml b/static/idn-api/v3/schemas/search/documents/AggregationResult-csv.yaml new file mode 100644 index 000000000..25fa26516 --- /dev/null +++ b/static/idn-api/v3/schemas/search/documents/AggregationResult-csv.yaml @@ -0,0 +1,16 @@ +description: | + If the *Accept:text/csv* header is specified and the *aggregationType* parameter in the request body is *SAILPOINT*, + + the aggregation result will be returned as a CSV document. +type: string +example: +- 'Identity Locations,Count' +- 'Munich,23' +- 'Brussels,26' +- 'Singapore,22' +- 'Tokyo,20' +- 'Taipei,16' +- 'London,64' +- 'Austin,109' +- 'Sao Paulo,24' +- 'San Jose,27' diff --git a/static/idn-api/v3/schemas/search/documents/AggregationResult.yaml b/static/idn-api/v3/schemas/search/documents/AggregationResult.yaml new file mode 100644 index 000000000..cc5ec4bfc --- /dev/null +++ b/static/idn-api/v3/schemas/search/documents/AggregationResult.yaml @@ -0,0 +1,35 @@ +type: object +properties: + aggregations: + type: object + description: | + The document containing the results of the aggregation. This document is controlled by Elasticsearch and depends on the type of aggregation query that is run. + + See Elasticsearch [Aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations.html) documentation for information. + example: + Identity Locations: + buckets: + - key: 'Austin' + doc_count: 109 + - key: 'London' + doc_count: 64 + - key: 'San Jose' + doc_count: 27 + - key: 'Brussels' + doc_count: 26 + - key: 'Sao Paulo' + doc_count: 24 + - key: 'Munich' + doc_count: 23 + - key: 'Singapore' + doc_count: 22 + - key: 'Tokyo' + doc_count: 20 + - key: 'Taipei' + doc_count: 16 + hits: + description: | + The results of the aggregation search query. + type: array + items: + $ref: 'SearchDocument.yaml' diff --git a/static/idn-api/v3/schemas/search/documents/SearchDocument.yaml b/static/idn-api/v3/schemas/search/documents/SearchDocument.yaml new file mode 100644 index 000000000..22ed47bbc --- /dev/null +++ b/static/idn-api/v3/schemas/search/documents/SearchDocument.yaml @@ -0,0 +1,22 @@ +discriminator: + propertyName: '_type' + mapping: + accessprofile: '../model/access/profile/AccessProfile.yaml' + accountactivity: '../model/account/activity/AccountActivity.yaml' + account: '../model/account/Account.yaml' + aggregation: '../model/aggregation/Aggregation.yaml' + entitlement: '../model/entitlement/Entitlement.yaml' + event: '../model/event/Event.yaml' + identity: '../model/identity/Identity.yaml' + role: '../model/role/Role.yaml' + +oneOf: +- $ref: '../model/access/profile/AccessProfile.yaml' +- $ref: '../model/account/activity/AccountActivity.yaml' +- $ref: '../model/account/Account.yaml' +- $ref: '../model/aggregation/Aggregation.yaml' +- $ref: '../model/entitlement/Entitlement.yaml' +- $ref: '../model/event/Event.yaml' +- $ref: '../model/identity/Identity.yaml' +- $ref: '../model/role/Role.yaml' + diff --git a/static/idn-api/v3/schemas/search/documents/examples/accessProfile.yaml b/static/idn-api/v3/schemas/search/documents/examples/accessProfile.yaml new file mode 100644 index 000000000..8d379c586 --- /dev/null +++ b/static/idn-api/v3/schemas/search/documents/examples/accessProfile.yaml @@ -0,0 +1,30 @@ +summary: AccessProfile +value: + id: '2c9180825a6c1adc015a71c9023f0818' + name: 'Cloud Eng' + _type: 'accessprofile' + description: 'Cloud Eng' + created: '2017-02-24T20:21:23.145Z' + modified: '2019-05-24T20:36:04.312Z' + synced: '2020-02-18T05:30:20.414Z' + enabled: true + requestable: true + requestCommentsRequired: false + owner: + id: 'ff8081815757d36a015757d42e56031e' + name: 'SailPoint Support' + type: 'IDENTITY' + email: 'cloud-support@sailpoint.com' + source: + id: 'ff8081815757d4fb0157588f3d9d008f' + name: 'Employees' + entitlements: + - id: '2c918084575812550157589064f33b89' + name: 'CN=Cloud Engineering,DC=sailpoint,DC=COM' + description: mull + attribute: 'memberOf' + value: 'CN=Cloud Engineering,DC=sailpoint,DC=COM' + entitlementCount: 1 + tags: + - 'TAG_1' + - 'TAG_2' diff --git a/static/idn-api/v3/schemas/search/documents/examples/accessProfiles.yaml b/static/idn-api/v3/schemas/search/documents/examples/accessProfiles.yaml new file mode 100644 index 000000000..928dd5695 --- /dev/null +++ b/static/idn-api/v3/schemas/search/documents/examples/accessProfiles.yaml @@ -0,0 +1,32 @@ +summary: 'A collection of AccessProfiles' +value: + - id: '2c9180825a6c1adc015a71c9023f0818' + name: 'Cloud Eng' + _type: 'accessprofile' + description: 'Cloud Eng' + created: '2017-02-24T20:21:23.145Z' + modified: '2019-05-24T20:36:04.312Z' + synced: '2020-02-18T05:30:20.414Z' + enabled: true + requestable: true + requestCommentsRequired: false + owner: + id: 'ff8081815757d36a015757d42e56031e' + name: 'SailPoint Support' + type: 'IDENTITY' + email: 'cloud-support@sailpoint.com' + source: + id: 'ff8081815757d4fb0157588f3d9d008f' + name: 'Employees' + entitlements: + - id: '2c918084575812550157589064f33b89' + name: 'CN=Cloud Engineering,DC=sailpoint,DC=COM' + description: mull + attribute: 'memberOf' + value: 'CN=Cloud Engineering,DC=sailpoint,DC=COM' + entitlementCount: 1 + tags: + - 'TAG_1' + - 'TAG_2' + + diff --git a/static/idn-api/v3/schemas/search/documents/examples/bullet-bull-dog.yml b/static/idn-api/v3/schemas/search/documents/examples/bullet-bull-dog.yml new file mode 100644 index 000000000..a156ca430 --- /dev/null +++ b/static/idn-api/v3/schemas/search/documents/examples/bullet-bull-dog.yml @@ -0,0 +1,5 @@ +summary : "A sample dog" +value: + id: 1 + name: "bullet" + _type: "dog" \ No newline at end of file diff --git a/static/idn-api/v3/schemas/search/documents/examples/entitlement.yaml b/static/idn-api/v3/schemas/search/documents/examples/entitlement.yaml new file mode 100644 index 000000000..5f1b7f339 --- /dev/null +++ b/static/idn-api/v3/schemas/search/documents/examples/entitlement.yaml @@ -0,0 +1,19 @@ +summary: Entitlement +value: + id: '2c9180946ed0c43d016eec1a80892fbd' + name: 'entitlement.aa415ae7' + _type: 'entitlement' + description: 'null' + attribute: 'groups' + value: 'entitlement.aa415ae7' + modified: '2019-12-09T19:19:50.154Z' + synced: '2020-02-19T04:30:32.906Z' + displayName: 'entitlement.aa415ae7' + source: + id: '2c91808b6e9e6fb8016eec1a2b6f7b5f' + name: 'ODS-HR-Employees' + privileged: false + identityCount: 68 + tags: + - 'TAG_1' + - 'TAG_2' diff --git a/static/idn-api/v3/schemas/search/documents/examples/entitlements.yaml b/static/idn-api/v3/schemas/search/documents/examples/entitlements.yaml new file mode 100644 index 000000000..5d297f266 --- /dev/null +++ b/static/idn-api/v3/schemas/search/documents/examples/entitlements.yaml @@ -0,0 +1,19 @@ +summary: A collection of Entitlements +value: + - id: '2c9180946ed0c43d016eec1a80892fbd' + name: 'entitlement.aa415ae7' + _type: 'entitlement' + description: 'null' + attribute: 'groups' + value: 'entitlement.aa415ae7' + modified: '2019-12-09T19:19:50.154Z' + synced: '2020-02-19T04:30:32.906Z' + displayName: 'entitlement.aa415ae7' + source: + id: '2c91808b6e9e6fb8016eec1a2b6f7b5f' + name: 'ODS-HR-Employees' + privileged: false + identityCount: 68 + tags: + - 'TAG_1' + - 'TAG_2' diff --git a/static/idn-api/v3/schemas/search/documents/examples/event.yaml b/static/idn-api/v3/schemas/search/documents/examples/event.yaml new file mode 100644 index 000000000..6b0cf7a89 --- /dev/null +++ b/static/idn-api/v3/schemas/search/documents/examples/event.yaml @@ -0,0 +1,25 @@ +summary: Event +value: + id: 'e092842f-c904-4b59-aac8-2544abeeef4b' + name: 'Update Task Schedule Passed' + _type: 'event' + created: '2020-02-17T16:23:18.327Z' + synced: '2020-02-17T16:23:18.388Z' + action: 'TASK_SCHEDULE_UPDATE_PASSED' + type: 'SYSTEM_CONFIG' + actor: + name: 'MantisTaskScheduler' + target: + name: 'Perform provisioning activity search delete synchronization' + stack: 'tpe' + trackingNumber: 'c6b98bc39ece48b080826d16c76b166c' + ipAddress: '207.189.160.158' + details: "null" + attributes: + sourceName: 'SailPoint' + objects: + - 'TASK' + - 'SCHEDULE' + operation: 'UPDATE' + status: 'PASSED' + technicalName: 'TASK_SCHEDULE_UPDATE_PASSED' diff --git a/static/idn-api/v3/schemas/search/documents/examples/events.yaml b/static/idn-api/v3/schemas/search/documents/examples/events.yaml new file mode 100644 index 000000000..9e6010586 --- /dev/null +++ b/static/idn-api/v3/schemas/search/documents/examples/events.yaml @@ -0,0 +1,25 @@ +summary: A collection of Events +value: + - id: 'e092842f-c904-4b59-aac8-2544abeeef4b' + name: 'Update Task Schedule Passed' + _type: 'event' + created: '2020-02-17T16:23:18.327Z' + synced: '2020-02-17T16:23:18.388Z' + action: 'TASK_SCHEDULE_UPDATE_PASSED' + type: 'SYSTEM_CONFIG' + actor: + name: 'MantisTaskScheduler' + target: + name: 'Perform provisioning activity search delete synchronization' + stack: 'tpe' + trackingNumber: 'c6b98bc39ece48b080826d16c76b166c' + ipAddress: '207.189.160.158' + details: "null" + attributes: + sourceName: 'SailPoint' + objects: + - 'TASK' + - 'SCHEDULE' + operation: 'UPDATE' + status: 'PASSED' + technicalName: 'TASK_SCHEDULE_UPDATE_PASSED' diff --git a/static/idn-api/v3/schemas/search/documents/examples/identities.yaml b/static/idn-api/v3/schemas/search/documents/examples/identities.yaml new file mode 100644 index 000000000..0176a54ad --- /dev/null +++ b/static/idn-api/v3/schemas/search/documents/examples/identities.yaml @@ -0,0 +1,128 @@ +summary: A collection of Identities +value: + - id: '2c9180865c45e7e3015c46c434a80622' + name: 'ad.admin' + _type: 'identity' + firstName: 'AD' + lastName: 'Admin' + displayName: 'AD Admin' + email: 'SLPT.CLOUD.SAILPOINT.TEST+AD-ADMIN@GMAIL.COM' + created: '2018-08-22T19:54:54.302Z' + modified: '2018-08-22T19:54:54.302Z' + synced: '2018-08-22T19:54:54.302Z' + phone: '512-942-7578' + inactive: false + protected: false + status: 'UNREGISTERED' + employeeNumber: 'O349804' + manager: null + isManager: false + identityProfile: + id: '2c918085605c8d0601606f357cb231e6' + name: 'E2E AD' + source: + id: '2c9180855c45b230015c46c19b9c0202' + name: 'EndToEnd-ADSource' + attributes: + uid: 'ad.admin' + firstname: 'AD' + cloudAuthoritativeSource: '2c9180855c45b230015c46c19b9c0202' + cloudStatus: 'UNREGISTERED' + iplanet-am-user-alias-list: null + displayName: 'AD Admin' + internalCloudStatus: 'UNREGISTERED' + workPhone: '512-942-7578' + email: 'SLPT.CLOUD.SAILPOINT.TEST+AD-ADMIN@GMAIL.COM' + lastname: 'Admin' + processingState: null + processingDetails: null + accounts: + - id: '2c9180865c45e7e3015c46c434a80623' + name: 'ad.admin' + accountId: 'CN=AD Admin,OU=slpt-automation,DC=TestAutomationAD,DC=local' + source: + id: '2c9180855c45b230015c46c19b9c0202' + name: 'EndToEnd-ADSource' + type: 'Active Directory - Direct' + disabled: false + locked: false + privileged: false + manuallyCorrelated: false + passwordLastSet: '2018-08-22T19:54:54.302Z' + entitlementAttributes: + memberOf: + - 'CN=Group Policy Creator Owners,CN=Users,DC=TestAutomationAD,DC=local' + - 'CN=Domain Guests,CN=Users,DC=TestAutomationAD,DC=local' + - 'CN=Domain Admins,CN=Users,DC=TestAutomationAD,DC=local' + - 'CN=Enterprise Admins,CN=Users,DC=TestAutomationAD,DC=local' + - 'CN=Schema Admins,CN=Users,DC=TestAutomationAD,DC=local' + - 'CN=Guests,CN=Builtin,DC=TestAutomationAD,DC=local' + - 'CN=Administrators,CN=Builtin,DC=TestAutomationAD,DC=local' + created: '2018-08-22T19:54:54.302Z' + - id: '2c918083606d670c01606f35a30a0349' + name: 'ad.admin' + accountId: 'ad.admin' + source: + id: 'ff8081815c46b85b015c46b90c7c02a6' + name: 'IdentityNow' + type: 'IdentityNowConnector' + disabled: false + locked: false + privileged: false + manuallyCorrelated: false + passwordLastSet: null + entitlementAttributes: + created: '2018-08-22T19:54:54.302Z' + accountCount: 2 + apps: + - id: '22751' + name: 'ADP Workforce Now' + source: + id: '2c9180855c45b230015c46e2f6a8026a' + name: 'Corporate Active Directory' + account: + id: '2c9180865c45efa4015c470be0de1606' + accountId: 'CN=Bob Wilson,OU=Austin,OU=Americas,OU=Demo,DC=seri,DC=acme,DC=com' + appCount: 1 + access: + - id: '2c918083634bc6cb01639808d40270ba' + name: 'test [AccessProfile-1527264105448]' + displayName: 'test' + type: 'ACCESS_PROFILE' + description: 'test' + source: + id: '2c9180855c45b230015c46c19b9c0202' + name: 'EndToEnd-ADSource' + owner: + id: '2c9180865c45e7e3015c46c434a80622' + name: 'ad.admin' + displayName: 'AD Admin' + - id: '2c9180865c45e7e3015c46c457c50755' + name: 'Administrators' + displayName: 'Administrators' + type: 'ENTITLEMENT' + description: null + source: + id: '2c9180855c45b230015c46c19b9c0202' + name: 'EndToEnd-ADSource' + privileged: false + attribute: 'memberOf' + value: 'CN=Administrators,CN=Builtin,DC=TestAutomationAD,DC=local' + standalone: false + - id: '2c9180865decdaa5015e06598b293108' + name: 'test [cloudRole-1503345085223]' + displayName: 'test' + type: 'ROLE' + description: 'test' + owner: + id: '2c9180865c45e7e3015c46c5030707a0' + name: 'will.albin' + displayName: 'Albin Will' + disabled: false + accessCount: 3 + accessProfileCount: 1 + entitlementCount: 1 + roleCount: 1 + tags: + - 'TAG_1' + - 'TAG_2' diff --git a/static/idn-api/v3/schemas/search/documents/examples/identity.yaml b/static/idn-api/v3/schemas/search/documents/examples/identity.yaml new file mode 100644 index 000000000..ad0e6e5a3 --- /dev/null +++ b/static/idn-api/v3/schemas/search/documents/examples/identity.yaml @@ -0,0 +1,128 @@ +summary: Identity +value: + id: '2c9180865c45e7e3015c46c434a80622' + name: 'ad.admin' + _type: 'identity' + firstName: 'AD' + lastName: 'Admin' + displayName: 'AD Admin' + email: 'SLPT.CLOUD.SAILPOINT.TEST+AD-ADMIN@GMAIL.COM' + created: '2018-08-22T19:54:54.302Z' + modified: '2018-08-22T19:54:54.302Z' + synced: '2018-08-22T19:54:54.302Z' + phone: '512-942-7578' + inactive: false + protected: false + status: 'UNREGISTERED' + employeeNumber: 'O349804' + manager: null + isManager: false + identityProfile: + id: '2c918085605c8d0601606f357cb231e6' + name: 'E2E AD' + source: + id: '2c9180855c45b230015c46c19b9c0202' + name: 'EndToEnd-ADSource' + attributes: + uid: 'ad.admin' + firstname: 'AD' + cloudAuthoritativeSource: '2c9180855c45b230015c46c19b9c0202' + cloudStatus: 'UNREGISTERED' + iplanet-am-user-alias-list: null + displayName: 'AD Admin' + internalCloudStatus: 'UNREGISTERED' + workPhone: '512-942-7578' + email: 'SLPT.CLOUD.SAILPOINT.TEST+AD-ADMIN@GMAIL.COM' + lastname: 'Admin' + processingState: null + processingDetails: null + accounts: + - id: '2c9180865c45e7e3015c46c434a80623' + name: 'ad.admin' + accountId: 'CN=AD Admin,OU=slpt-automation,DC=TestAutomationAD,DC=local' + source: + id: '2c9180855c45b230015c46c19b9c0202' + name: 'EndToEnd-ADSource' + type: 'Active Directory - Direct' + disabled: false + locked: false + privileged: false + manuallyCorrelated: false + passwordLastSet: '2018-08-22T19:54:54.302Z' + entitlementAttributes: + memberOf: + - 'CN=Group Policy Creator Owners,CN=Users,DC=TestAutomationAD,DC=local' + - 'CN=Domain Guests,CN=Users,DC=TestAutomationAD,DC=local' + - 'CN=Domain Admins,CN=Users,DC=TestAutomationAD,DC=local' + - 'CN=Enterprise Admins,CN=Users,DC=TestAutomationAD,DC=local' + - 'CN=Schema Admins,CN=Users,DC=TestAutomationAD,DC=local' + - 'CN=Guests,CN=Builtin,DC=TestAutomationAD,DC=local' + - 'CN=Administrators,CN=Builtin,DC=TestAutomationAD,DC=local' + created: '2018-08-22T19:54:54.302Z' + - id: '2c918083606d670c01606f35a30a0349' + name: 'ad.admin' + accountId: 'ad.admin' + source: + id: 'ff8081815c46b85b015c46b90c7c02a6' + name: 'IdentityNow' + type: 'IdentityNowConnector' + disabled: false + locked: false + privileged: false + manuallyCorrelated: false + passwordLastSet: null + entitlementAttributes: + created: '2018-08-22T19:54:54.302Z' + accountCount: 2 + apps: + - id: '22751' + name: 'ADP Workforce Now' + source: + id: '2c9180855c45b230015c46e2f6a8026a' + name: 'Corporate Active Directory' + account: + id: '2c9180865c45efa4015c470be0de1606' + accountId: 'CN=Bob Wilson,OU=Austin,OU=Americas,OU=Demo,DC=seri,DC=acme,DC=com' + appCount: 1 + access: + - id: '2c918083634bc6cb01639808d40270ba' + name: 'test [AccessProfile-1527264105448]' + displayName: 'test' + type: 'ACCESS_PROFILE' + description: 'test' + source: + id: '2c9180855c45b230015c46c19b9c0202' + name: 'EndToEnd-ADSource' + owner: + id: '2c9180865c45e7e3015c46c434a80622' + name: 'ad.admin' + displayName: 'AD Admin' + - id: '2c9180865c45e7e3015c46c457c50755' + name: 'Administrators' + displayName: 'Administrators' + type: 'ENTITLEMENT' + description: null + source: + id: '2c9180855c45b230015c46c19b9c0202' + name: 'EndToEnd-ADSource' + privileged: false + attribute: 'memberOf' + value: 'CN=Administrators,CN=Builtin,DC=TestAutomationAD,DC=local' + standalone: false + - id: '2c9180865decdaa5015e06598b293108' + name: 'test [cloudRole-1503345085223]' + displayName: 'test' + type: 'ROLE' + description: 'test' + owner: + id: '2c9180865c45e7e3015c46c5030707a0' + name: 'will.albin' + displayName: 'Albin Will' + disabled: false + accessCount: 3 + accessProfileCount: 1 + entitlementCount: 1 + roleCount: 1 + tags: + - 'TAG_1' + - 'TAG_2' diff --git a/static/idn-api/v3/schemas/search/documents/examples/nina-kitty.yml b/static/idn-api/v3/schemas/search/documents/examples/nina-kitty.yml new file mode 100644 index 000000000..d2050eb78 --- /dev/null +++ b/static/idn-api/v3/schemas/search/documents/examples/nina-kitty.yml @@ -0,0 +1,5 @@ +summary : "a cat example" +value : + id : 0 + name: "nina" + _type : "cat" diff --git a/static/idn-api/v3/schemas/search/documents/examples/role.yaml b/static/idn-api/v3/schemas/search/documents/examples/role.yaml new file mode 100644 index 000000000..06c6ab0a1 --- /dev/null +++ b/static/idn-api/v3/schemas/search/documents/examples/role.yaml @@ -0,0 +1,24 @@ +summary: Role +value: + id: '2c91808c6faadea6016fb4f2bc69077b' + name: 'IT Role' + _type: 'role' + description: 'IT role' + created: '2020-01-17T19:20:15.040Z' + modified: null + synced: '2020-02-18T05:30:20.145Z' + enabled: true + requestable: false + requestCommentsRequired: false + owner: + id: '2c9180a46faadee4016fb4e018c20639' + name: 'Cloud Support' + type: 'IDENTITY' + email: 'thomas.edison@acme-solar.com' + accessProfiles: + - id: '2c91809c6faade77016fb4f0b63407ae' + name: 'Admin Access' + accessProfileCount: 1 + tags: + - 'TAG_1' + - 'TAG_2' diff --git a/static/idn-api/v3/schemas/search/documents/examples/roles.yaml b/static/idn-api/v3/schemas/search/documents/examples/roles.yaml new file mode 100644 index 000000000..8035b2237 --- /dev/null +++ b/static/idn-api/v3/schemas/search/documents/examples/roles.yaml @@ -0,0 +1,24 @@ +summary: A collection of Roles +value: + - id: '2c91808c6faadea6016fb4f2bc69077b' + name: 'IT Role' + _type: 'role' + description: 'IT role' + created: '2020-01-17T19:20:15.040Z' + modified: null + synced: '2020-02-18T05:30:20.145Z' + enabled: true + requestable: false + requestCommentsRequired: false + owner: + id: '2c9180a46faadee4016fb4e018c20639' + name: 'Cloud Support' + type: 'IDENTITY' + email: 'thomas.edison@acme-solar.com' + accessProfiles: + - id: '2c91809c6faade77016fb4f0b63407ae' + name: 'Admin Access' + accessProfileCount: 1 + tags: + - 'TAG_1' + - 'TAG_2' diff --git a/static/idn-api/v3/schemas/search/examples/filter-exists.yaml b/static/idn-api/v3/schemas/search/examples/filter-exists.yaml new file mode 100644 index 000000000..2bf96d287 --- /dev/null +++ b/static/idn-api/v3/schemas/search/examples/filter-exists.yaml @@ -0,0 +1,10 @@ +summary: Filter with Exists +value: + indices: + - 'identities' + query: + query: 'attributes.city:London' + filters: + attributes.cloudAuthoritativeSource: + type: 'EXISTS' + exclude: true diff --git a/static/idn-api/v3/schemas/search/examples/filter-range.yaml b/static/idn-api/v3/schemas/search/examples/filter-range.yaml new file mode 100644 index 000000000..cd9235a36 --- /dev/null +++ b/static/idn-api/v3/schemas/search/examples/filter-range.yaml @@ -0,0 +1,21 @@ +summary: Filter with Range +value: + indices: + - 'identities' + query: + query: 'attributes.city:London' + timeZone: 'Europe/London' + filters: + accessCount: + type: 'RANGE' + range: + lower: + value: '3' + created: + type: 'RANGE' + range: + lower: + value: '2019-12-01' + inclusive: true + upper: + value: '2020-01-01' diff --git a/static/idn-api/v3/schemas/search/examples/filter-terms.yaml b/static/idn-api/v3/schemas/search/examples/filter-terms.yaml new file mode 100644 index 000000000..bf6ab1e19 --- /dev/null +++ b/static/idn-api/v3/schemas/search/examples/filter-terms.yaml @@ -0,0 +1,17 @@ +summary: Filter with Terms +value: + indices: + - 'identities' + query: + query: 'attributes.city:London' + filters: + source.name: + type: 'TERMS' + terms: + - 'HR Employees' + - 'Corporate Active Directory' + exclude: true + protected: + type: 'TERMS' + terms: + - 'true' diff --git a/static/idn-api/v3/schemas/search/examples/query-fields.yaml b/static/idn-api/v3/schemas/search/examples/query-fields.yaml new file mode 100644 index 000000000..0de4e53db --- /dev/null +++ b/static/idn-api/v3/schemas/search/examples/query-fields.yaml @@ -0,0 +1,8 @@ +summary: Query with Fields +value: + indices: + - 'identities' + query: + query: '"John Doe"' + fields: + - 'name' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/search/examples/query-innerHit.yaml b/static/idn-api/v3/schemas/search/examples/query-innerHit.yaml new file mode 100644 index 000000000..db10a46eb --- /dev/null +++ b/static/idn-api/v3/schemas/search/examples/query-innerHit.yaml @@ -0,0 +1,9 @@ +summary: Query with InnerHit +value: + indices: + - 'identities' + query: + query: '"John Doe"' + innerHit: + type: 'access' + query: 'source.name:\"Active Directory\"' diff --git a/static/idn-api/v3/schemas/search/examples/query-timeZone.yaml b/static/idn-api/v3/schemas/search/examples/query-timeZone.yaml new file mode 100644 index 000000000..c46a47ba6 --- /dev/null +++ b/static/idn-api/v3/schemas/search/examples/query-timeZone.yaml @@ -0,0 +1,7 @@ +summary: Query with TimeZone +value: + indices: + - 'identities' + query: + query: 'created: [2022-05-19T19:26:03.351Z TO now]' + timeZone: 'America/Los_Angeles' diff --git a/static/idn-api/v3/schemas/search/examples/typeAheadQuery-nestedType.yaml b/static/idn-api/v3/schemas/search/examples/typeAheadQuery-nestedType.yaml new file mode 100644 index 000000000..95af646ad --- /dev/null +++ b/static/idn-api/v3/schemas/search/examples/typeAheadQuery-nestedType.yaml @@ -0,0 +1,10 @@ +summary: TypeAheadQuery with NestedType +value: + indices: + - 'identities' + queryType: 'TYPEAHEAD' + typeAheadQuery: + field: 'source.name' + nestedType: 'access' + query: 'Work' + maxExpansions: 50 diff --git a/static/idn-api/v3/schemas/search/examples/typeAheadQuery.yaml b/static/idn-api/v3/schemas/search/examples/typeAheadQuery.yaml new file mode 100644 index 000000000..dbbebed7d --- /dev/null +++ b/static/idn-api/v3/schemas/search/examples/typeAheadQuery.yaml @@ -0,0 +1,9 @@ +summary: TypeAheadQuery +value: + indices: + - 'identities' + queryType: 'TYPEAHEAD' + typeAheadQuery: + field: 'name' + query: 'Jo' + maxExpansions: 50 diff --git a/static/idn-api/v3/schemas/search/model/access/Access.yaml b/static/idn-api/v3/schemas/search/model/access/Access.yaml new file mode 100644 index 000000000..702e5fb0e --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/access/Access.yaml @@ -0,0 +1,9 @@ +allOf: +- $ref: '../base/DisplayReference.yaml' +- type: object + properties: + type: + $ref: '../../../DtoType.yaml' + description: + type: string + nullable: true diff --git a/static/idn-api/v3/schemas/search/model/access/AccessProfile.yaml b/static/idn-api/v3/schemas/search/model/access/AccessProfile.yaml new file mode 100644 index 000000000..8e866dc96 --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/access/AccessProfile.yaml @@ -0,0 +1,12 @@ +description: >- + This is a summary representation of an access profile. +allOf: +- $ref: 'Access.yaml' +- type: object + properties: + source: + $ref: '../base/Reference.yaml' + owner: + $ref: '../base/DisplayReference.yaml' + revocable: + type: boolean \ No newline at end of file diff --git a/static/idn-api/v3/schemas/search/model/access/BaseAccess.yaml b/static/idn-api/v3/schemas/search/model/access/BaseAccess.yaml new file mode 100644 index 000000000..8acf8301c --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/access/BaseAccess.yaml @@ -0,0 +1,20 @@ +allOf: +- $ref: '../base/Reference.yaml' +- type: object + properties: + description: + type: string + created: + $ref: '../base/DateTime.yaml' + modified: + $ref: '../base/DateTime.yaml' + synced: + $ref: '../base/DateTime.yaml' + enabled: + type: boolean + requestable: + type: boolean + requestCommentsRequired: + type: boolean + owner: + $ref: '../identity/Owner.yaml' diff --git a/static/idn-api/v3/schemas/search/model/access/Entitlement.yaml b/static/idn-api/v3/schemas/search/model/access/Entitlement.yaml new file mode 100644 index 000000000..6d973ee02 --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/access/Entitlement.yaml @@ -0,0 +1,15 @@ +description: EntitlementReference +allOf: +- $ref: 'Access.yaml' +- type: object + properties: + source: + $ref: '../base/Reference.yaml' + privileged: + type: boolean + attribute: + type: string + value: + type: string + standalone: + type: boolean diff --git a/static/idn-api/v3/schemas/search/model/access/Role.yaml b/static/idn-api/v3/schemas/search/model/access/Role.yaml new file mode 100644 index 000000000..2866560fd --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/access/Role.yaml @@ -0,0 +1,11 @@ +description: Role +allOf: +- $ref: 'Access.yaml' +- type : object + properties: + owner: + $ref: '../base/DisplayReference.yaml' + disabled: + type: boolean + revocable: + type: boolean \ No newline at end of file diff --git a/static/idn-api/v3/schemas/search/model/access/profile/AccessProfile.yaml b/static/idn-api/v3/schemas/search/model/access/profile/AccessProfile.yaml new file mode 100644 index 000000000..2688d5726 --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/access/profile/AccessProfile.yaml @@ -0,0 +1,17 @@ +description: >- + This is more of a complete representation of an access profile. +allOf: +- $ref: '../../base/BaseDocument.yaml' +- $ref: '../BaseAccess.yaml' +- type: object + properties: + source: + $ref: '../../base/Reference.yaml' + entitlements: + type: array + items: + $ref: '../../entitlement/BaseEntitlement.yaml' + entitlementCount: + type: integer + tags: + $ref: '../../base/Tags.yaml' diff --git a/static/idn-api/v3/schemas/search/model/account/Account.yaml b/static/idn-api/v3/schemas/search/model/account/Account.yaml new file mode 100644 index 000000000..a41acbd7e --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/account/Account.yaml @@ -0,0 +1,23 @@ +description: Account +allOf: +- $ref: '../base/BaseDocument.yaml' +- $ref: 'BaseAccount.yaml' +- type: object + properties: + modified: + $ref: '../base/DateTime.yaml' + attributes: + type: object + description: "a map or dictionary of key/value pairs" + identity: + $ref: '../base/DisplayReference.yaml' + access: + type: array + items: + $ref: '../access/Entitlement.yaml' + entitlementCount: + type: integer + uncorrelated: + type: boolean + tags: + $ref: '../base/Tags.yaml' diff --git a/static/idn-api/v3/schemas/search/model/account/BaseAccount.yaml b/static/idn-api/v3/schemas/search/model/account/BaseAccount.yaml new file mode 100644 index 000000000..77ea70ce0 --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/account/BaseAccount.yaml @@ -0,0 +1,24 @@ +allOf: +- $ref: '../base/Reference.yaml' +- type: object + properties: + accountId: + type: string + source: + $ref: 'Source.yaml' + disabled: + type: boolean + locked: + type: boolean + privileged: + type: boolean + manuallyCorrelated: + type: boolean + passwordLastSet: + $ref: '../base/DateTime.yaml' + entitlementAttributes: + type: object + nullable: true + description: "a map or dictionary of key/value pairs" + created: + $ref: '../base/DateTime.yaml' diff --git a/static/idn-api/v3/schemas/search/model/account/Source.yaml b/static/idn-api/v3/schemas/search/model/account/Source.yaml new file mode 100644 index 000000000..5009f0ce6 --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/account/Source.yaml @@ -0,0 +1,6 @@ +allOf: +- $ref: '../base/Reference.yaml' +- type: object + properties: + type: + type: string diff --git a/static/idn-api/v3/schemas/search/model/account/activity/AccountActivity.yaml b/static/idn-api/v3/schemas/search/model/account/activity/AccountActivity.yaml new file mode 100644 index 000000000..46341e0de --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/account/activity/AccountActivity.yaml @@ -0,0 +1,51 @@ +description: AccountActivity +allOf: +- $ref: '../../base/BaseDocument.yaml' +- type: object + properties: + action: + type: string + created: + $ref: '../../base/DateTime.yaml' + modified: + $ref: '../../base/DateTime.yaml' + stage: + type: string + origin: + type: string + status: + type: string + requester: + $ref: '../Source.yaml' + recipient: + $ref: '../Source.yaml' + trackingNumber: + type: string + errors: + type: array + items: + type: string + warnings: + type: array + items: + type: string + approvals: + type: array + items: + $ref: 'Approval.yaml' + originalRequests: + type: array + items: + $ref: 'OriginalRequest.yaml' + expansionItems: + type: array + items: + $ref: 'ExpansionItem.yaml' + accountRequests: + type: array + items: + $ref: 'AccountRequest.yaml' + sources: + type: array + items: + type: string diff --git a/static/idn-api/v3/schemas/search/model/account/activity/AccountRequest.yaml b/static/idn-api/v3/schemas/search/model/account/activity/AccountRequest.yaml new file mode 100644 index 000000000..f1831b633 --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/account/activity/AccountRequest.yaml @@ -0,0 +1,25 @@ +type: object +properties: + accountId: + type: string + attributeRequests: + type: array + items: + $ref: 'AttributeRequest.yaml' + op: + type: string + provisioningTarget: + $ref: '../Source.yaml' + result: + type: object + properties: + errors: + type: array + items: + type: string + status: + type: string + ticketId: + type: string + source: + $ref: '../Source.yaml' diff --git a/static/idn-api/v3/schemas/search/model/account/activity/Approval.yaml b/static/idn-api/v3/schemas/search/model/account/activity/Approval.yaml new file mode 100644 index 000000000..080301144 --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/account/activity/Approval.yaml @@ -0,0 +1,16 @@ +type: object +properties: + comments: + type: array + items: + $ref: 'Comment.yaml' + created: + $ref: '../../base/DateTime.yaml' + modified: + $ref: '../../base/DateTime.yaml' + owner: + $ref: '../Source.yaml' + result: + type: string + type: + type: string diff --git a/static/idn-api/v3/schemas/search/model/account/activity/AttributeRequest.yaml b/static/idn-api/v3/schemas/search/model/account/activity/AttributeRequest.yaml new file mode 100644 index 000000000..882bb2849 --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/account/activity/AttributeRequest.yaml @@ -0,0 +1,8 @@ +type: object +properties: + name: + type: string + op: + type: string + value: + type: string diff --git a/static/idn-api/v3/schemas/search/model/account/activity/Comment.yaml b/static/idn-api/v3/schemas/search/model/account/activity/Comment.yaml new file mode 100644 index 000000000..3a7b84787 --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/account/activity/Comment.yaml @@ -0,0 +1,8 @@ +type: object +properties: + comment: + type: string + commenter: + type: string + date: + $ref: '../../base/DateTime.yaml' diff --git a/static/idn-api/v3/schemas/search/model/account/activity/ExpansionItem.yaml b/static/idn-api/v3/schemas/search/model/account/activity/ExpansionItem.yaml new file mode 100644 index 000000000..a74f6f2ec --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/account/activity/ExpansionItem.yaml @@ -0,0 +1,14 @@ +type: object +properties: + accountId: + type: string + cause: + type: string + name: + type: string + attributeRequests: + type: array + items: + $ref: 'AttributeRequest.yaml' + source: + $ref: '../Source.yaml' diff --git a/static/idn-api/v3/schemas/search/model/account/activity/OriginalRequest.yaml b/static/idn-api/v3/schemas/search/model/account/activity/OriginalRequest.yaml new file mode 100644 index 000000000..54b6f4690 --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/account/activity/OriginalRequest.yaml @@ -0,0 +1,12 @@ +type: object +properties: + accountId: + type: string + attributeRequests: + type: array + items: + $ref: 'AttributeRequest.yaml' + op: + type: string + source: + $ref: '../Source.yaml' diff --git a/static/idn-api/v3/schemas/search/model/aggregation/Aggregation.yaml b/static/idn-api/v3/schemas/search/model/aggregation/Aggregation.yaml new file mode 100644 index 000000000..29fd7fb2e --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/aggregation/Aggregation.yaml @@ -0,0 +1,19 @@ +description: Aggregation +allOf: +- $ref: '../base/BaseDocument.yaml' +- type: object + properties: + status: + type: string + duration: + type: integer + avgDuration: + type: integer + changedAccounts: + type: integer + nextScheduled: + $ref: '../base/DateTime.yaml' + startTime: + $ref: '../base/DateTime.yaml' + sourceOwner: + type: string diff --git a/static/idn-api/v3/schemas/search/model/base/BaseDocument.yaml b/static/idn-api/v3/schemas/search/model/base/BaseDocument.yaml new file mode 100644 index 000000000..70bb8d714 --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/base/BaseDocument.yaml @@ -0,0 +1,9 @@ +type: object +required : ["id", "name", "_type"] +properties: + id: + type: string + name: + type: string + _type: + $ref: 'DocumentType.yaml' diff --git a/static/idn-api/v3/schemas/search/model/base/DateTime.yaml b/static/idn-api/v3/schemas/search/model/base/DateTime.yaml new file mode 100644 index 000000000..eea28a847 --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/base/DateTime.yaml @@ -0,0 +1,5 @@ +type: string +nullable: true +format: 'date-time' +example: '2018-06-25T20:22:28.104Z' +description: A date-time in ISO-8601 format diff --git a/static/idn-api/v3/schemas/search/model/base/DisplayReference.yaml b/static/idn-api/v3/schemas/search/model/base/DisplayReference.yaml new file mode 100644 index 000000000..7fe69fa1d --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/base/DisplayReference.yaml @@ -0,0 +1,7 @@ +allOf: +- $ref: 'Reference.yaml' +- type : object + properties: + displayName: + type : string + example: 'John Q. Doe' diff --git a/static/idn-api/v3/schemas/search/model/base/DocumentType.yaml b/static/idn-api/v3/schemas/search/model/base/DocumentType.yaml new file mode 100644 index 000000000..7bf66baba --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/base/DocumentType.yaml @@ -0,0 +1,15 @@ +description: >- + Enum representing the currently supported document types. + + + Additional values may be added in the future without notice. +type: string +enum: +- accessprofile +- accountactivity +- account +- aggregation +- entitlement +- event +- identity +- role diff --git a/static/idn-api/v3/schemas/search/model/base/Reference.yaml b/static/idn-api/v3/schemas/search/model/base/Reference.yaml new file mode 100644 index 000000000..775ba520e --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/base/Reference.yaml @@ -0,0 +1,8 @@ +type: object +properties: + id: + type: string + example: '2c91808568c529c60168cca6f90c1313' + name: + type: string + example: 'John Doe' diff --git a/static/idn-api/v3/schemas/search/model/base/Tags.yaml b/static/idn-api/v3/schemas/search/model/base/Tags.yaml new file mode 100644 index 000000000..34779dc09 --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/base/Tags.yaml @@ -0,0 +1,6 @@ +type: array +items: + type: string +example: +- 'TAG_1' +- 'TAG_2' diff --git a/static/idn-api/v3/schemas/search/model/base/TypedReference.yaml b/static/idn-api/v3/schemas/search/model/base/TypedReference.yaml new file mode 100644 index 000000000..b9a90d5da --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/base/TypedReference.yaml @@ -0,0 +1,10 @@ +type: object +properties: + type: + $ref: ../../../DtoType.yaml + id: + type: string + example: '2c91808568c529c60168cca6f90c1313' +required: +- type +- id diff --git a/static/idn-api/v3/schemas/search/model/entitlement/BaseEntitlement.yaml b/static/idn-api/v3/schemas/search/model/entitlement/BaseEntitlement.yaml new file mode 100644 index 000000000..ad7502991 --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/entitlement/BaseEntitlement.yaml @@ -0,0 +1,10 @@ +allOf: +- $ref: '../base/Reference.yaml' +- type: object + properties: + description: + type: string + attribute: + type: string + value: + type: string diff --git a/static/idn-api/v3/schemas/search/model/entitlement/Entitlement.yaml b/static/idn-api/v3/schemas/search/model/entitlement/Entitlement.yaml new file mode 100644 index 000000000..5404a10db --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/entitlement/Entitlement.yaml @@ -0,0 +1,20 @@ +description: Entitlement +allOf: +- $ref: '../base/BaseDocument.yaml' +- $ref: 'BaseEntitlement.yaml' +- type: object + properties: + modified: + $ref: '../base/DateTime.yaml' + synced: + $ref: '../base/DateTime.yaml' + displayName: + type: string + source: + $ref: '../base/Reference.yaml' + privileged: + type: boolean + identityCount: + type: integer + tags: + $ref: '../base/Tags.yaml' diff --git a/static/idn-api/v3/schemas/search/model/event/Event.yaml b/static/idn-api/v3/schemas/search/model/event/Event.yaml new file mode 100644 index 000000000..19cca70b2 --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/event/Event.yaml @@ -0,0 +1,37 @@ +description: Event +allOf: +- $ref: '../base/BaseDocument.yaml' +- type: object + properties: + created: + $ref: '../base/DateTime.yaml' + synced: + $ref: '../base/DateTime.yaml' + action: + type: string + type: + type: string + actor: + $ref: 'NameType.yaml' + target: + $ref: 'NameType.yaml' + stack: + type: string + trackingNumber: + type: string + ipAddress: + type: string + details: + type: string + attributes: + type: object + objects: + type: array + items: + type: string + operation: + type: string + status: + type: string + technicalName: + type: string diff --git a/static/idn-api/v3/schemas/search/model/event/NameType.yaml b/static/idn-api/v3/schemas/search/model/event/NameType.yaml new file mode 100644 index 000000000..a50522719 --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/event/NameType.yaml @@ -0,0 +1,7 @@ +type: object +properties: + name: + type: string + example: 'John Doe' + type: + $ref: '../../../DtoType.yaml' diff --git a/static/idn-api/v3/schemas/search/model/identity/Access.yaml b/static/idn-api/v3/schemas/search/model/identity/Access.yaml new file mode 100644 index 000000000..7656af401 --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/identity/Access.yaml @@ -0,0 +1,10 @@ +discriminator: + propertyName: 'type' + mapping: + ACCESS_PROFILE: '../access/AccessProfile.yaml' + ENTITLEMENT: '../access/Entitlement.yaml' + ROLE: '../access/Role.yaml' +oneOf: +- $ref: '../access/AccessProfile.yaml' +- $ref: '../access/Entitlement.yaml' +- $ref: '../access/Role.yaml' diff --git a/static/idn-api/v3/schemas/search/model/identity/App.yaml b/static/idn-api/v3/schemas/search/model/identity/App.yaml new file mode 100644 index 000000000..184f914c7 --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/identity/App.yaml @@ -0,0 +1,13 @@ +allOf: +- $ref: '../base/Reference.yaml' +- type: object + properties: + source: + $ref: '../base/Reference.yaml' + account: + type: object + properties: + id: + type: string + accountId: + type: string diff --git a/static/idn-api/v3/schemas/search/model/identity/Identity.yaml b/static/idn-api/v3/schemas/search/model/identity/Identity.yaml new file mode 100644 index 000000000..bd7976ffc --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/identity/Identity.yaml @@ -0,0 +1,76 @@ +description: Identity +allOf: +- $ref: '../base/BaseDocument.yaml' +- $ref: '../base/DisplayReference.yaml' +- type: object + properties: + firstName: + type: string + lastName: + type: string + displayName: + type: string + email: + type: string + created: + $ref: '../base/DateTime.yaml' + modified: + $ref: '../base/DateTime.yaml' + synced: + $ref: '../base/DateTime.yaml' + phone: + type: string + inactive: + type: boolean + protected: + type: boolean + status: + type: string + employeeNumber: + type: string + manager: + $ref: '../base/DisplayReference.yaml' + nullable: true + isManager: + type: boolean + identityProfile: + $ref: '../base/Reference.yaml' + source: + $ref: '../base/Reference.yaml' + attributes: + type: object + description: "a map or dictionary of key/value pairs" + processingState: + type: string + nullable: true + processingDetails: + $ref: 'ProcessingDetails.yaml' + nullable: true + accounts: + type: array + items: + $ref: '../account/BaseAccount.yaml' + accountCount: + type: integer + apps: + type: array + items: + $ref: 'App.yaml' + appCount: + type: integer + access: + type: array + items: + $ref: 'Access.yaml' + accessCount: + type: integer + accessProfileCount: + type: integer + entitlementCount: + type: integer + roleCount: + type: integer + owns: + $ref: 'Owns.yaml' + tags: + $ref: '../base/Tags.yaml' diff --git a/static/idn-api/v3/schemas/search/model/identity/IdentityReference.yaml b/static/idn-api/v3/schemas/search/model/identity/IdentityReference.yaml new file mode 100644 index 000000000..c5523e7fc --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/identity/IdentityReference.yaml @@ -0,0 +1,6 @@ +allOf: +- $ref: '../base/Reference.yaml' +- type: object + properties: + type: + $ref: '../../../DtoType.yaml' diff --git a/static/idn-api/v3/schemas/search/model/identity/Owner.yaml b/static/idn-api/v3/schemas/search/model/identity/Owner.yaml new file mode 100644 index 000000000..70943149f --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/identity/Owner.yaml @@ -0,0 +1,6 @@ +allOf: +- $ref: 'IdentityReference.yaml' +- type: object + properties: + email: + type: string diff --git a/static/idn-api/v3/schemas/search/model/identity/Owns.yaml b/static/idn-api/v3/schemas/search/model/identity/Owns.yaml new file mode 100644 index 000000000..5e500c11d --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/identity/Owns.yaml @@ -0,0 +1,28 @@ +type: object +properties: + sources: + type: array + items: + $ref: '../base/Reference.yaml' + entitlements: + type: array + items: + $ref: '../base/Reference.yaml' + accessProfiles: + type: array + items: + $ref: '../base/Reference.yaml' + roles: + type: array + items: + $ref: '../base/Reference.yaml' + apps: + type: array + items: + $ref: '../base/Reference.yaml' + governanceGroups: + type: array + items: + $ref: '../base/Reference.yaml' + fallbackApprover: + type: boolean diff --git a/static/idn-api/v3/schemas/search/model/identity/ProcessingDetails.yaml b/static/idn-api/v3/schemas/search/model/identity/ProcessingDetails.yaml new file mode 100644 index 000000000..e706120b3 --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/identity/ProcessingDetails.yaml @@ -0,0 +1,12 @@ +type: object +properties: + date: + $ref: '../base/DateTime.yaml' + stage: + type: string + retryCount: + type: integer + stackTrace: + type: string + message: + type: string diff --git a/static/idn-api/v3/schemas/search/model/role/Role.yaml b/static/idn-api/v3/schemas/search/model/role/Role.yaml new file mode 100644 index 000000000..24e89e53d --- /dev/null +++ b/static/idn-api/v3/schemas/search/model/role/Role.yaml @@ -0,0 +1,14 @@ +description: Role +allOf: +- $ref: '../base/BaseDocument.yaml' +- $ref: '../access/BaseAccess.yaml' +- type: object + properties: + accessProfiles: + type: array + items: + $ref: '../base/Reference.yaml' + accessProfileCount: + type: integer + tags: + $ref: '../base/Tags.yaml' diff --git a/static/idn-api/v3/schemas/search/saved/Arguments.yaml b/static/idn-api/v3/schemas/search/saved/Arguments.yaml new file mode 100644 index 000000000..c9b450bbd --- /dev/null +++ b/static/idn-api/v3/schemas/search/saved/Arguments.yaml @@ -0,0 +1,18 @@ +type: object +properties: + scheduleId: + description: | + The ID of the scheduled search that triggered the saved search execution. + type: string + example: '7a724640-0c17-4ce9-a8c3-4a89738459c8' + owner: + description: | + The owner of the scheduled search being tested. + allOf: + - $ref: '../model/base/TypedReference.yaml' + recipients: + description: | + The email recipients of the scheduled search being tested. + type: array + items: + $ref: '../model/base/TypedReference.yaml' diff --git a/static/idn-api/v3/schemas/search/saved/Column.yaml b/static/idn-api/v3/schemas/search/saved/Column.yaml new file mode 100644 index 000000000..19d7ca5c7 --- /dev/null +++ b/static/idn-api/v3/schemas/search/saved/Column.yaml @@ -0,0 +1,12 @@ +type: object +properties: + field: + description: | + The name of the field. + type: string + header: + description: | + The value of the header. + type: string +required: +- field diff --git a/static/idn-api/v3/schemas/search/saved/Name.yaml b/static/idn-api/v3/schemas/search/saved/Name.yaml new file mode 100644 index 000000000..ac8fa31cf --- /dev/null +++ b/static/idn-api/v3/schemas/search/saved/Name.yaml @@ -0,0 +1,12 @@ +type: object +properties: + name: + description: | + The name of the saved search. + type: string + example: 'Disabled accounts' + description: + description: | + The description of the saved search. + type: string + example: 'Disabled accounts' diff --git a/static/idn-api/v3/schemas/search/saved/SavedSearch.yaml b/static/idn-api/v3/schemas/search/saved/SavedSearch.yaml new file mode 100644 index 000000000..5222ba9bf --- /dev/null +++ b/static/idn-api/v3/schemas/search/saved/SavedSearch.yaml @@ -0,0 +1,15 @@ +type: object +allOf: +- type: object + properties: + id: + description: | + The saved search ID. + type: string + example: '0de46054-fe90-434a-b84e-c6b3359d0c64' + owner: + description: | + The owner of the saved search. + $ref: ../model/base/TypedReference.yaml +- $ref: 'Name.yaml' +- $ref: 'Search.yaml' diff --git a/static/idn-api/v3/schemas/search/saved/Search.yaml b/static/idn-api/v3/schemas/search/saved/Search.yaml new file mode 100644 index 000000000..348186a07 --- /dev/null +++ b/static/idn-api/v3/schemas/search/saved/Search.yaml @@ -0,0 +1,95 @@ +type: object +properties: + public: + description: | + Indicates if the saved search is public. + type: boolean + default: false + created: + description: | + The date the saved search was initially created. + $ref: ../model/base/DateTime.yaml + modified: + description: | + The last date the saved search was modified. + $ref: ../model/base/DateTime.yaml + indices: + description: | + The names of the Elasticsearch indices in which to search. + type: array + items: + $ref: '../Index.yaml' + example: [ 'identities' ] + columns: + description: | + The columns to be returned (specifies the order in which they will be presented) for each document type. + + The currently supported document types are: _accessprofile_, _accountactivity_, _account_, _aggregation_, _entitlement_, _event_, _identity_, and _role_. + type: object + additionalProperties: + type: array + items: + $ref: 'Column.yaml' + example: + identity: + - field: 'displayName' + header: 'Display Name' + - field: 'email' + header: 'Work Email' + - field: 'attributes.cloudLifecycleState' + header: 'Lifecycle State' + query: + description: | + The search query using Elasticsearch [Query String Query](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string) syntax from the Query DSL. + type: string + example: '@accounts(disabled:true)' + fields: + description: | + The fields to be searched against in a multi-field query. + type: array + items: + type: string + example: [ 'disabled' ] + sort: + description: | + The fields to be used to sort the search results. + type: array + items: + type: string + example: [ 'displayName' ] + filters: + nullable: true + allOf: + - type: object + description: The filters to be applied for each filtered field name. + example: + attributes.cloudAuthoritativeSource: + type: 'EXISTS' + exclude: true + accessCount: + type: 'RANGE' + range: + lower: + value: '3' + created: + type: 'RANGE' + range: + lower: + value: '2019-12-01' + inclusive: true + upper: + value: '2020-01-01' + source.name: + type: 'TERMS' + terms: + - 'HR Employees' + - 'Corporate Active Directory' + exclude: true + protected: + type: 'TERMS' + terms: + - 'true' + - $ref: '../../filter/Filter.yaml' +required: +- indices +- query diff --git a/static/idn-api/v3/schemas/search/saved/examples/execute-scheduled.yaml b/static/idn-api/v3/schemas/search/saved/examples/execute-scheduled.yaml new file mode 100644 index 000000000..571f28640 --- /dev/null +++ b/static/idn-api/v3/schemas/search/saved/examples/execute-scheduled.yaml @@ -0,0 +1,4 @@ +summary: Triggered by Scheduled Search +value: + scheduleId: + '7a724640-0c17-4ce9-a8c3-4a89738459c8' diff --git a/static/idn-api/v3/schemas/search/saved/examples/execute-test.yaml b/static/idn-api/v3/schemas/search/saved/examples/execute-test.yaml new file mode 100644 index 000000000..ed5fe505c --- /dev/null +++ b/static/idn-api/v3/schemas/search/saved/examples/execute-test.yaml @@ -0,0 +1,8 @@ +summary: Triggered by UI Test +value: + owner: + type: 'IDENTITY' + id: '2c91808568c529c60168cca6f90c1313' + recipients: + - type: 'IDENTITY' + id: '2c91808568c529c60168cca6f90c1313' diff --git a/static/idn-api/v3/schemas/search/scheduled/Name.yaml b/static/idn-api/v3/schemas/search/scheduled/Name.yaml new file mode 100644 index 000000000..d526744fe --- /dev/null +++ b/static/idn-api/v3/schemas/search/scheduled/Name.yaml @@ -0,0 +1,12 @@ +type: object +properties: + name: + description: | + The name of the scheduled search. + type: string + example: 'Daily disabled accounts' + description: + description: | + The description of the scheduled search. + type: string + example: 'Daily disabled accounts' diff --git a/static/idn-api/v3/schemas/search/scheduled/Schedule.yaml b/static/idn-api/v3/schemas/search/scheduled/Schedule.yaml new file mode 100644 index 000000000..8f3d09b5c --- /dev/null +++ b/static/idn-api/v3/schemas/search/scheduled/Schedule.yaml @@ -0,0 +1,42 @@ +type: object +properties: + savedSearchId: + description: | + The ID of the saved search that will be executed. + type: string + example: '554f1511-f0a1-4744-ab14-599514d3e57c' + created: + description: | + The date the scheduled search was initially created. + $ref: ../model/base/DateTime.yaml + modified: + description: | + The last date the scheduled search was modified. + $ref: ../model/base/DateTime.yaml + schedule: + $ref: '../../schedule/Schedule.yaml' + recipients: + description: | + The email recipients. + type: array + items: + $ref: '../model/base/TypedReference.yaml' + enabled: + description: | + Indicates if the scheduled search is enabled. + type: boolean + default: false + emailEmptyResults: + description: | + Indicates if email generation should not be suppressed if search returns no results. + type: boolean + default: false + displayQueryDetails: + description: | + Indicates if the generated email should include the query and search results preview (which could include PII). + type: boolean + default: false +required: +- savedSearchId +- schedule +- recipients diff --git a/static/idn-api/v3/schemas/search/scheduled/ScheduledSearch.yaml b/static/idn-api/v3/schemas/search/scheduled/ScheduledSearch.yaml new file mode 100644 index 000000000..70efb51c4 --- /dev/null +++ b/static/idn-api/v3/schemas/search/scheduled/ScheduledSearch.yaml @@ -0,0 +1,20 @@ +type: object +allOf: +- $ref: 'Name.yaml' +- $ref: 'Schedule.yaml' +- type: object + properties: + id: + description: | + The scheduled search ID. + type: string + example: '0de46054-fe90-434a-b84e-c6b3359d0c64' + owner: + description: | + The owner of the scheduled search. + $ref: ../model/base/TypedReference.yaml + ownerId: + description: The ID of the scheduled search owner + type: string + example: 2c9180867624cbd7017642d8c8c81f67 + diff --git a/static/idn-api/v3/schemas/transforms/AccountAttribute.yaml b/static/idn-api/v3/schemas/transforms/AccountAttribute.yaml new file mode 100644 index 000000000..05ea339cc --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/AccountAttribute.yaml @@ -0,0 +1,55 @@ +title: accountAttribute +type: object +required: +- sourceName +- attributeName +properties: + sourceName: + type: string + description: A reference to the source to search for the account + example: Workday + attributeName: + type: string + description: The name of the attribute on the account to return. This should match the name of the account attribute name visible in the user interface, or on the source schema. + example: DEPARTMENT + accountSortAttribute: + type: string + description: The value of this configuration is a string name of the attribute to use when determining the ordering of returned accounts when there are multiple entries + example: created + accountSortDescending: + type: string + description: >- + The value of this configuration is a boolean (true/false). Controls the order of the sort when there are multiple accounts. + If not defined, the transform will default to false (ascending order) + example: false + accountReturnFirstLink: + type: string + description: >- + The value of this configuration is a boolean (true/false). Controls which account to source a value from for an attribute. + If this flag is set to true, the transform returns the value from the first account in the list, even if it is null. If it is set to false, the transform returns the first non-null value. + If not defined, the transform will default to false + example: false + accountFilter: + type: string + description: >- + This expression queries the database to narrow search results. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the database. + The default filter will always include the source and identity, and any subsequent expressions will be combined in an AND operation to the existing search criteria. + + + Only certain searchable attributes are available:
        + - `nativeIdentity` - the Account ID
        + - `displayName` - the Account Name
        + - `entitlements` - a boolean value to determine if the account has entitlements + example: "!(nativeIdentity.startsWith(\"*DELETED*\"))" + accountPropertyFilter: + type: string + description: >- + This expression is used to search and filter accounts in memory. The value of this configuration is a sailpoint.object.Filter expression and used when searching against the returned resultset. + + + All account attributes are available for filtering as this operation is performed in memory. + example: "(groups.containsAll({'Admin'}) || location == 'Austin')" + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/Base64Decode.yaml b/static/idn-api/v3/schemas/transforms/Base64Decode.yaml new file mode 100644 index 000000000..281cfd4d9 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/Base64Decode.yaml @@ -0,0 +1,10 @@ +title: base64Decode +type: object +properties: + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' + + + diff --git a/static/idn-api/v3/schemas/transforms/Base64Encode.yaml b/static/idn-api/v3/schemas/transforms/Base64Encode.yaml new file mode 100644 index 000000000..dc7d0fe64 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/Base64Encode.yaml @@ -0,0 +1,7 @@ +title: base64Encode +type: object +properties: + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/Concatenation.yaml b/static/idn-api/v3/schemas/transforms/Concatenation.yaml new file mode 100644 index 000000000..1f5e6a83c --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/Concatenation.yaml @@ -0,0 +1,15 @@ +title: concat +type: object +required: +- values +properties: + values: + type: array + items: + type: object + description: An array of items to join together + example: ["John", " ", "Smith"] + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/Conditional.yaml b/static/idn-api/v3/schemas/transforms/Conditional.yaml new file mode 100644 index 000000000..faf505896 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/Conditional.yaml @@ -0,0 +1,29 @@ +title: conditional +type: object +required: +- expression +- positiveCondition +- negativeCondition +properties: + expression: + type: string + description: >- + A comparison statement that follows the structure of `ValueA eq ValueB` where `ValueA` and `ValueB` are static strings or outputs of other transforms. + + + The `eq` operator is the only valid comparison + example: "ValueA eq ValueB" + positiveCondition: + type: string + description: >- + The output of the transform if the expression evalutes to true + example: "true" + negativeCondition: + type: string + description: >- + The output of the transform if the expression evalutes to false + example: "false" + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' diff --git a/static/idn-api/v3/schemas/transforms/DateCompare.yaml b/static/idn-api/v3/schemas/transforms/DateCompare.yaml new file mode 100644 index 000000000..32bb733e2 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/DateCompare.yaml @@ -0,0 +1,47 @@ +title: dateCompare +type: object +required: +- firstDate +- secondDate +- operator +- positiveCondition +- negativeCondition +properties: + firstDate: + description: >- + This is the first date to consider (The date that would be on the left hand side of the comparison operation). + oneOf: + - $ref: './AccountAttribute.yaml' + - $ref: './DateFormat.yaml' + secondDate: + description: >- + This is the second date to consider (The date that would be on the right hand side of the comparison operation). + oneOf: + - $ref: './AccountAttribute.yaml' + - $ref: './DateFormat.yaml' + operator: + type: string + description: | + This is the comparison to perform. + | Operation | Description | + | --------- | ------- | + | LT | Strictly less than: firstDate < secondDate | + | LTE | Less than or equal to: firstDate <= secondDate | + | GT | Strictly greater than: firstDate > secondDate | + | GTE | Greater than or equal to: firstDate >= secondDate | + enum: ['LT', 'LTE', 'GT', 'GTE'] + example: 'LT' + positiveCondition: + type: string + description: >- + The output of the transform if the expression evalutes to true + example: "true" + negativeCondition: + type: string + description: >- + The output of the transform if the expression evalutes to false + example: false + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' diff --git a/static/idn-api/v3/schemas/transforms/DateFormat.yaml b/static/idn-api/v3/schemas/transforms/DateFormat.yaml new file mode 100644 index 000000000..1ed4ef3dc --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/DateFormat.yaml @@ -0,0 +1,25 @@ +title: dateFormat +type: object +properties: + inputFormat: + description: >- + A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data is coming in as. + + + *If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + oneOf: + - $ref: './date-formats/namedConstructs.yaml' + - $ref: './date-formats/simpleDateFormat.yaml' + outputFormat: + description: >- + A string value indicating either the explicit SimpleDateFormat or the built-in named format that the data should be formatted into. + + + *If no inputFormat is provided, the transform assumes that it is in ISO8601 format* + oneOf: + - $ref: './date-formats/namedConstructs.yaml' + - $ref: './date-formats/simpleDateFormat.yaml' + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' diff --git a/static/idn-api/v3/schemas/transforms/DateMath.yaml b/static/idn-api/v3/schemas/transforms/DateMath.yaml new file mode 100644 index 000000000..edfda9d56 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/DateMath.yaml @@ -0,0 +1,31 @@ +title: dateMath +type: object +required: +- expression +properties: + expression: + type: string + description: | + A string value of the date and time components to operation on, along with the math operations to execute. + externalDocs: + description: Date Math Expressions + url: https://developer.sailpoint.com/docs/transforms/transform_operations/operations/date_math.html#transform-structure + example: 'now+1w' + roundUp: + type: boolean + description: | + A boolean value to indicate whether the transform should round up or down when a rounding `/` operation is defined in the expression. + + + If not provided, the transform will default to `false` + + + `true` indicates the transform should round up (i.e., truncate the fractional date/time component indicated and then add one unit of that component) + + + `false` indicates the transform should round down (i.e., truncate the fractional date/time component indicated) + example: false + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' diff --git a/static/idn-api/v3/schemas/transforms/DecomposeDiacriticalMarks.yaml b/static/idn-api/v3/schemas/transforms/DecomposeDiacriticalMarks.yaml new file mode 100644 index 000000000..432c6da57 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/DecomposeDiacriticalMarks.yaml @@ -0,0 +1,7 @@ +title: decomposeDiacriticalMarks +type: object +properties: + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/E164phone.yaml b/static/idn-api/v3/schemas/transforms/E164phone.yaml new file mode 100644 index 000000000..80445e6ff --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/E164phone.yaml @@ -0,0 +1,18 @@ +title: e164phone +type: object +properties: + defaultRegion: + type: string + description: | + This is an optional attribute that can be used to define the region of the phone number to format into. + + + If defaultRegion is not provided, it will take US as the default country. + + + The format of the country code should be in [ISO 3166-1 alpha-2 format](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) + example: 'US' + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/FirstValid.yaml b/static/idn-api/v3/schemas/transforms/FirstValid.yaml new file mode 100644 index 000000000..4a1ee9821 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/FirstValid.yaml @@ -0,0 +1,36 @@ +title: firstValid +type: object +required: +- values +properties: + values: + type: array + items: + type: object + description: An array of attributes to evaluate for existence. + example: + [ + { + "attributes": + { + "sourceName": "Active Directory", + "attributeName": "sAMAccountName", + }, + "type": "accountAttribute", + }, + { + "attributes": { "sourceName": "Okta", "attributeName": "login" }, + "type": "accountAttribute", + }, + { + "attributes": + { "sourceName": "HR Source", "attributeName": "employeeID" }, + "type": "accountAttribute", + }, + ] + ignoreErrors: + type: boolean + description: a true or false value representing to move on to the next option if an error (like an Null Pointer Exception) were to occur. + example: false + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' diff --git a/static/idn-api/v3/schemas/transforms/ISO3166.yaml b/static/idn-api/v3/schemas/transforms/ISO3166.yaml new file mode 100644 index 000000000..b2a88b820 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/ISO3166.yaml @@ -0,0 +1,21 @@ +title: iso3166 +type: object +properties: + format: + type: string + description: | + An optional value to denote which ISO 3166 format to return. Valid values are: + + + `alpha2` - Two-character country code (e.g., "US"); this is the default value if no format is supplied + + + `alpha3` - Three-character country code (e.g., "USA") + + + `numeric` - The numeric country code (e.g., "840") + example: 'alpha2' + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/IdentityAttribute.yaml b/static/idn-api/v3/schemas/transforms/IdentityAttribute.yaml new file mode 100644 index 000000000..0e9de47a9 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/IdentityAttribute.yaml @@ -0,0 +1,13 @@ +title: identityAttribute +type: object +required: +- name +properties: + name: + type: string + description: The system (camel-cased) name of the identity attribute to bring in + example: 'email' + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/IndexOf.yaml b/static/idn-api/v3/schemas/transforms/IndexOf.yaml new file mode 100644 index 000000000..e2e862e7c --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/IndexOf.yaml @@ -0,0 +1,13 @@ +title: indexOf +type: object +required: +- substring +properties: + substring: + type: string + description: A substring to search for, searches the entire calling string, and returns the index of the first occurrence of the specified substring. + example: 'admin_' + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/LastIndexOf.yaml b/static/idn-api/v3/schemas/transforms/LastIndexOf.yaml new file mode 100644 index 000000000..ac2a74a6a --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/LastIndexOf.yaml @@ -0,0 +1,13 @@ +title: lastIndexOf +type: object +required: +- substring +properties: + substring: + type: string + description: A substring to search for, searches the entire string provided, and returns the index of the last occurrence of the specified substring. + example: 'admin_' + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/LeftPad.yaml b/static/idn-api/v3/schemas/transforms/LeftPad.yaml new file mode 100644 index 000000000..2168e5568 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/LeftPad.yaml @@ -0,0 +1,21 @@ +title: leftPad +type: object +required: +- length +properties: + length: + type: string + description: An integer value for the desired length of the final output string + example: "4" + padding: + type: string + description: | + A string value representing the character that the incoming data should be padded with to get to the desired length + + + If not provided, the transform will default to a single space (" ") character for padding + example: "0" + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/Lookup.yaml b/static/idn-api/v3/schemas/transforms/Lookup.yaml new file mode 100644 index 000000000..8d952235e --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/Lookup.yaml @@ -0,0 +1,23 @@ +title: lookup +type: object +required: +- table +properties: + table: + type: object + additionalProperties: true + description: | + This is a JSON object of key-value pairs. The key is the string that will attempt to be matched to the input, and the value is the output string that should be returned if the key is matched + + + >**Note** the use of the optional default key value here; if none of the three countries in the above example match the input string, the transform will return "Unknown Region" for the attribute that is mapped to this transform. + example: { + "USA": "Americas", + "FRA": "EMEA", + "AUS": "APAC", + "default": "Unknown Region" + } + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/Lower.yaml b/static/idn-api/v3/schemas/transforms/Lower.yaml new file mode 100644 index 000000000..7f1ae1541 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/Lower.yaml @@ -0,0 +1,7 @@ +title: lower +type: object +properties: + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/NameNormalizer.yaml b/static/idn-api/v3/schemas/transforms/NameNormalizer.yaml new file mode 100644 index 000000000..aef72f206 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/NameNormalizer.yaml @@ -0,0 +1,7 @@ +title: nameNormalizer +type: object +properties: + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/RandomAlphaNumeric.yaml b/static/idn-api/v3/schemas/transforms/RandomAlphaNumeric.yaml new file mode 100644 index 000000000..5caf4d63a --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/RandomAlphaNumeric.yaml @@ -0,0 +1,21 @@ +title: randomAlphaNumeric +type: object +properties: + length: + type: string + description: | + This is an integer value specifying the size/number of characters the random string must contain + + + * This value must be a positive number and cannot be blank + + + * If no length is provided, the transform will default to a value of `32` + + + * Due to identity attribute data constraints, the maximum allowable value is `450` characters + example: "10" + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/RandomNumeric.yaml b/static/idn-api/v3/schemas/transforms/RandomNumeric.yaml new file mode 100644 index 000000000..07d5d2a19 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/RandomNumeric.yaml @@ -0,0 +1,21 @@ +title: randomNumeric +type: object +properties: + length: + type: string + description: | + This is an integer value specifying the size/number of characters the random string must contain + + + * This value must be a positive number and cannot be blank + + + * If no length is provided, the transform will default to a value of `32` + + + * Due to identity attribute data constraints, the maximum allowable value is `450` characters + example: "10" + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/Reference.yaml b/static/idn-api/v3/schemas/transforms/Reference.yaml new file mode 100644 index 000000000..f7c868945 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/Reference.yaml @@ -0,0 +1,13 @@ +title: reference +type: object +required: +- id +properties: + id: + type: string + description: This ID specifies the name of the pre-existing transform which you want to use within your current transform + example: "Existing Transform" + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/Replace.yaml b/static/idn-api/v3/schemas/transforms/Replace.yaml new file mode 100644 index 000000000..d883b7427 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/Replace.yaml @@ -0,0 +1,21 @@ +title: replace +type: object +required: +- regex +- replacement +properties: + regex: + type: string + description: This can be a string or a regex pattern in which you want to replace. + example: "[^a-zA-Z]" + externalDocs: + description: Regex Builder + url: https://regex101.com/ + replacement: + type: string + description: This is the replacement string that should be substituded wherever the string or pattern is found. + example: " " + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/ReplaceAll.yaml b/static/idn-api/v3/schemas/transforms/ReplaceAll.yaml new file mode 100644 index 000000000..d6a5660f8 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/ReplaceAll.yaml @@ -0,0 +1,19 @@ +title: replaceAll +type: object +required: +- table +properties: + table: + type: object + additionalProperties: true + description: An attribute of key-value pairs. Each pair identifies the pattern to search for as its key, and the replacement string as its value. + example: + { + "-": " ", + "\"": "'", + "ñ": "n" + } + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/RequiresPeriodicRefresh.yaml b/static/idn-api/v3/schemas/transforms/RequiresPeriodicRefresh.yaml new file mode 100644 index 000000000..5fc108345 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/RequiresPeriodicRefresh.yaml @@ -0,0 +1,4 @@ + type: boolean + description: A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process + example: false + default: false \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/RightPad.yaml b/static/idn-api/v3/schemas/transforms/RightPad.yaml new file mode 100644 index 000000000..61ee36f9c --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/RightPad.yaml @@ -0,0 +1,21 @@ +title: rightPad +type: object +required: +- length +properties: + length: + type: string + description: An integer value for the desired length of the final output string + example: "4" + padding: + type: string + description: | + A string value representing the character that the incoming data should be padded with to get to the desired length + + + If not provided, the transform will default to a single space (" ") character for padding + example: "0" + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/Rule.yaml b/static/idn-api/v3/schemas/transforms/Rule.yaml new file mode 100644 index 000000000..3a82f13dc --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/Rule.yaml @@ -0,0 +1,5 @@ +title: rule +oneOf: + - $ref: './rules/GenericRule.yaml' + - $ref: './rules/GenerateRandomString.yaml' + - $ref: './rules/GetReferenceIdentityAttribute.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/Split.yaml b/static/idn-api/v3/schemas/transforms/Split.yaml new file mode 100644 index 000000000..bfc883c71 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/Split.yaml @@ -0,0 +1,32 @@ +title: split +type: object +required: +- delimiter +- index +properties: + delimiter: + type: string + description: This can be either a single character or a regex expression, and is used by the transform to identify the break point between two substrings in the incoming data + example: ',' + index: + type: string + description: An integer value for the desired array element after the incoming data has been split into a list; the array is a 0-based object, so the first array element would be index 0, the second element would be index 1, etc. + example: "5" + throws: + type: boolean + description: | + A boolean (true/false) value which indicates whether an exception should be thrown and returned as an output when an index is out of bounds with the resultant array (i.e., the provided index value is larger than the size of the array) + + + `true` - The transform should return "IndexOutOfBoundsException" + + + `false` - The transform should return null + + + If not provided, the transform will default to false and return a null + example: true + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/Static.yaml b/static/idn-api/v3/schemas/transforms/Static.yaml new file mode 100644 index 000000000..6fa711302 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/Static.yaml @@ -0,0 +1,14 @@ +title: static +type: object +required: +- values +properties: + values: + type: string + description: This must evaluate to a JSON string, either through a fixed value or through conditional logic using the Apache Velocity Template Language. + example: "string$variable" + externalDocs: + description: Static Transform Documentation + url: https://developer.sailpoint.com/docs/transforms/transform_operations/operations/static.html + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/Substring.yaml b/static/idn-api/v3/schemas/transforms/Substring.yaml new file mode 100644 index 000000000..83a3f236a --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/Substring.yaml @@ -0,0 +1,42 @@ +title: substring +type: object +required: +- begin +properties: + begin: + type: integer + description: | + The index of the first character to include in the returned substring. + + + If `begin` is set to -1, the transform will begin at character 0 of the input data + example: 1 + format: int32 + beginOffset: + type: integer + description: | + This integer value is the number of characters to add to the begin attribute when returning a substring. + + This attribute is only used if begin is not -1. + example: 3 + format: int32 + end: + type: integer + description: | + The index of the first character to exclude from the returned substring. + + If end is -1 or not provided at all, the substring transform will return everything up to the end of the input string. + example: 6 + format: int32 + endOffset: + type: integer + description: | + This integer value is the number of characters to add to the end attribute when returning a substring. + + This attribute is only used if end is provided and is not -1. + example: 1 + format: int32 + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' diff --git a/static/idn-api/v3/schemas/transforms/Trim.yaml b/static/idn-api/v3/schemas/transforms/Trim.yaml new file mode 100644 index 000000000..239f4249e --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/Trim.yaml @@ -0,0 +1,7 @@ +title: trim +type: object +properties: + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/UUIDGenerator.yaml b/static/idn-api/v3/schemas/transforms/UUIDGenerator.yaml new file mode 100644 index 000000000..575739518 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/UUIDGenerator.yaml @@ -0,0 +1,5 @@ +title: uuid +type: object +properties: + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/Upper.yaml b/static/idn-api/v3/schemas/transforms/Upper.yaml new file mode 100644 index 000000000..53cb9f9fe --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/Upper.yaml @@ -0,0 +1,7 @@ +title: upper +type: object +properties: + requiresPeriodicRefresh: + $ref: './RequiresPeriodicRefresh.yaml' + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/date-formats/namedConstructs.yaml b/static/idn-api/v3/schemas/transforms/date-formats/namedConstructs.yaml new file mode 100644 index 000000000..194ae5ced --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/date-formats/namedConstructs.yaml @@ -0,0 +1,12 @@ +title: Named Construct +type: string +description: | + | Construct | Date Time Pattern | Description | + | --------- | ----------------- | ----------- | + | ISO8601 | `yyyy-MM-dd'T'HH:mm:ss.SSSX` | The ISO8601 standard. | + | LDAP | `yyyyMMddHHmmss.Z` | The LDAP standard. | + | PEOPLE_SOFT | `MM/dd/yyyy` | The date format People Soft uses. | + | EPOCH_TIME_JAVA | # ms from midnight, January 1st, 1970 | The incoming date value as elapsed time in milliseconds from midnight, January 1st, 1970. | + | EPOCH_TIME_WIN32| # intervals of 100ns from midnight, January 1st, 1601 | The incoming date value as elapsed time in 100-nanosecond intervals from midnight, January 1st, 1601. | +enum: ["ISO8601", "LDAP", "PEOPLE_SOFT", "EPOCH_TIME_JAVA", "EPOCH_TIME_WIN32"] +example: "PEOPLE_SOFT" \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/date-formats/simpleDateFormat.yaml b/static/idn-api/v3/schemas/transforms/date-formats/simpleDateFormat.yaml new file mode 100644 index 000000000..ebbebfaa0 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/date-formats/simpleDateFormat.yaml @@ -0,0 +1,23 @@ +title: Java Simple Date Format +type: string +description: | + There are a variety of date time patterns you can express using SimpleDateFormat. The following table lists examples of different date time patterns expressed in the SimpleDateFormat and how they display. Refer to the SimpleDateFormat syntax page for more information. + + >NOTE: The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local time in the U.S. Pacific Time time zone. + (This table is from the SimpleDateFormat page.) + + | Date Time Pattern | Result | + | ----------------- | ------ | + | `yyyy.MM.dd G 'at' HH:mm:ss z` | `2001.07.04 AD at 12:08:56 PDT` | + | `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | + | `h:mm a` | 12:08 PM | + | `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | + | `K:mm a, z` | 0:08 PM, PDT | + | `yyyyy.MMMMM.dd GGG hh:mm aaa` | 02001.July.04 AD 12:08 PM | + | `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | + | `yyMMddHHmmssZ` | 010704120856-0700 | + | `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | + | `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | + | `YYYY-'W'ww-u` | 2001-W27-3 | + +example: "mm/dd/yyyy" \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/input.yaml b/static/idn-api/v3/schemas/transforms/input.yaml new file mode 100644 index 000000000..3af6cf1ba --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/input.yaml @@ -0,0 +1,12 @@ +type: object +description: >- + This is an optional attribute that can explicitly define the input data which will be fed into the transform logic. If input is not provided, the transform will take its input from the source and attribute combination configured via the UI. +additionalProperties: true +example: { + "type": accountAttribute, + "attributes": { + "attributeName": "first_name", + "sourceName": "Source" + } +} + diff --git a/static/idn-api/v3/schemas/transforms/rules/GenerateRandomString.yaml b/static/idn-api/v3/schemas/transforms/rules/GenerateRandomString.yaml new file mode 100644 index 000000000..68ef6d4b5 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/rules/GenerateRandomString.yaml @@ -0,0 +1,36 @@ +type: object +required: +- name +- operation +- includeNumbers +- includeSpecialChars +- length +properties: + name: + type: string + description: This must always be set to "Cloud Services Deployment Utility" + example: 'Cloud Services Deployment Utility' + operation: + type: string + description: The operation to perform `generateRandomString` + example: 'generateRandomString' + includeNumbers: + type: boolean + description: This must be either "true" or "false" to indicate whether the generator logic should include numbers + example: true + includeSpecialChars: + type: boolean + description: This must be either "true" or "false" to indicate whether the generator logic should include special characters + example: true + length: + type: string + description: | + This specifies how long the randomly generated string needs to be + + + >NOTE Due to identity attribute data constraints, the maximum allowable value is 450 characters + example: "10" + requiresPeriodicRefresh: + type: boolean + description: A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process + example: false \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/rules/GenericRule.yaml b/static/idn-api/v3/schemas/transforms/rules/GenericRule.yaml new file mode 100644 index 000000000..3347b8b69 --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/rules/GenericRule.yaml @@ -0,0 +1,12 @@ +type: object +required: +- name +properties: + name: + type: string + description: This is the name of the Generic rule that needs to be invoked by the transform + example: 'Generic Calculation Rule' + requiresPeriodicRefresh: + type: boolean + description: A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process + example: false \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/rules/GetEndOfString.yaml b/static/idn-api/v3/schemas/transforms/rules/GetEndOfString.yaml new file mode 100644 index 000000000..1fae5408e --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/rules/GetEndOfString.yaml @@ -0,0 +1,24 @@ +type: object +required: +- name +- operation +- numChars +properties: + name: + type: string + description: This must always be set to "Cloud Services Deployment Utility" + example: 'Cloud Services Deployment Utility' + operation: + type: string + description: The operation to perform `getEndOfString` + example: 'getEndOfString' + numChars: + type: string + description: This specifies how many of the rightmost characters within the incoming string should be returned; if the value of numChars is greater than the string length, the transform will return null. + example: '4' + requiresPeriodicRefresh: + type: boolean + description: A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process + example: false + input: + $ref: './input.yaml' \ No newline at end of file diff --git a/static/idn-api/v3/schemas/transforms/rules/GetReferenceIdentityAttribute.yaml b/static/idn-api/v3/schemas/transforms/rules/GetReferenceIdentityAttribute.yaml new file mode 100644 index 000000000..639703ceb --- /dev/null +++ b/static/idn-api/v3/schemas/transforms/rules/GetReferenceIdentityAttribute.yaml @@ -0,0 +1,25 @@ +type: object +required: +- name +- operation +- uid +properties: + name: + type: string + description: This must always be set to "Cloud Services Deployment Utility" + example: 'Cloud Services Deployment Utility' + operation: + type: string + description: The operation to perform `getReferenceIdentityAttribute` + example: 'getReferenceIdentityAttribute' + uid: + type: string + description: | + This is the SailPoint User Name (uid) value of the identity whose attribute is desired + + As a convenience feature, you can use the `manager` keyword to dynamically look up the user's manager and then get that manager's identity attribute. + example: 2c91808570313110017040b06f344ec9 + requiresPeriodicRefresh: + type: boolean + description: A value that indicates whether the transform logic should be re-evaluated every evening as part of the identity refresh process + example: false \ No newline at end of file diff --git a/static/idn-api/vlegacy/internal.yaml b/static/idn-api/vlegacy/internal.yaml new file mode 100644 index 000000000..6baf1f367 --- /dev/null +++ b/static/idn-api/vlegacy/internal.yaml @@ -0,0 +1,102 @@ +openapi: 3.0.1 +info: + title: SailPoint SaaS API + version: 3.1.0-beta-internal + description: >- + ## API Usage and Support + + + ![Beta](/api-beta.png) + + + Unless otherwise indicated, calling any API endpoint described herein requires an OAuth2 Bearer token (JWT). See + [Best Practices: IdentityNow REST API Authentication](https://community.sailpoint.com/t5/IdentityNow-Wiki/Best-Practices-IdentityNow-REST-API-Authentication/ta-p/79566). +tags: + - name: Access Request Approvals + - name: Auth Org Configuration + description: Configurations for authentication and authorization + - name: DataPipeline + - name: IAIConfiguration + - name: Internal Use Only + - name: Notifications + - name: Rosetta message handling + - name: SP-Scheduler + - name: SOD Policy + - name: Triggers + +components: + securitySchemes: + bearerAuth: + $ref: './securitySchemes/OAuth2.yaml' + +paths: + /connector/clusters/{clusterId}/messages/{messageType}/invoke: + $ref: './paths/beta/connector-messages.yaml' + /assign-verified-from-addresses: + $ref: './paths/beta/assign-verified-from-addresses.yaml' + /auth-org-configuration: + $ref: './paths/beta/auth-org-config.yaml' + /email-requests: + $ref: './paths/beta/email-requests.yaml' + /non-employee-sources/{sourceId}/aggregate: + $ref: './paths/beta/non-employee-source-aggregate.yaml' + /iai-configurations: + $ref: './paths/beta/iai-configurations.yaml' + /iai-configurations/{type}: + $ref: './paths/beta/iai-configuration.yaml' + /trigger-subscriptions: + $ref: './paths/beta/trigger-subscriptions-internal.yaml' + /trigger-invocations/start: + $ref: './paths/beta/trigger-invocations-start.yaml' + /trigger-invocations: + $ref: './paths/beta/trigger-invocations.yaml' + /trigger-invocations/pending-events: + $ref: './paths/beta/trigger-invocations-pending-events.yaml' + /access-profiles/cleanup: + $ref: './paths/beta/access-profiles-cleanup.yaml' + /scheduled-actions: + $ref: './paths/beta/scheduled-actions.yaml' + /scheduled-actions/{id}: + $ref: './paths/beta/scheduled-actions-delete.yaml' + /scheduled-actions/bulk-delete: + $ref: './paths/beta/scheduled-actions-bulk-delete.yaml' + /access-request-approvals/pending: + $ref: './paths/beta/pending-access-request-approvals.yaml' + /access-request-approvals/completed: + $ref: './paths/beta/completed-access-request-approvals.yaml' + /access-request-approvals/{approvalId}/approve: + $ref: './paths/beta/approve-access-request-approval.yaml' + /access-request-approvals/{approvalId}/reject: + $ref: './paths/beta/reject-access-request-approval.yaml' + /access-request-approvals/{approvalId}/forward: + $ref: './paths/beta/forward-access-request-approval.yaml' + /access-request-approvals/approval-summary: + $ref: './paths/beta/access-request-approval-summary.yaml' + /sod-policies: + $ref: './paths/beta/sod-policies.yaml' + /sod-policies/{id}: + $ref: './paths/beta/sod-policy.yaml' + /sod-policies/{id}/schedule: + $ref: './paths/beta/sod-schedule.yaml' + /sod-policies/{id}/violation-report/run: + $ref: './paths/beta/sod-report-run.yaml' + /sod-policies/{id}/violation-report: + $ref: './paths/beta/sod-violation-report.yaml' + /sod-violation-report-status/{reportResultId}: + $ref: './paths/beta/sod-violation-report-status.yaml' + /sod-violation-report/run: + $ref: './paths/beta/sod-all-report-run.yaml' + /sod-violation-report: + $ref: './paths/beta/sod-all-report-status.yaml' + /sod-violation-report/{reportResultId}/download: + $ref: './paths/beta/sod-download-default-report.yaml' + /sod-violation-report/{reportResultId}/download/{fileName}: + $ref: './paths/beta/sod-download-custom-report.yaml' + /data-pipelines: + $ref: './paths/beta/data-pipelines.yaml' + /data-pipelines/{type}/dags/{id}/run: + $ref: './paths/beta/run-datapipeline-dagid.yaml' + /data-pipelines/{type}/run-latest: + $ref: './paths/beta/run-datapipeline-dagtype.yaml' + /entitlements-v3/identities/{identityId}/entitlements: + $ref: './paths/beta/ears-identity-entitlement.yaml' diff --git a/static/idn-api/vlegacy/parameters/v2/identities/sourceId.yaml b/static/idn-api/vlegacy/parameters/v2/identities/sourceId.yaml new file mode 100644 index 000000000..6020ba6a0 --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/identities/sourceId.yaml @@ -0,0 +1,6 @@ +name: sourceId +description: ID of a flat-file source into which the new identity will be created. +schema: + type: string +required: true +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/path/accessProfileId.yaml b/static/idn-api/vlegacy/parameters/v2/path/accessProfileId.yaml new file mode 100644 index 000000000..e35d2affc --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/path/accessProfileId.yaml @@ -0,0 +1,6 @@ +name: accessProfileId +description: ID of an access profile. +schema: + type: string +required: true +in: path diff --git a/static/idn-api/vlegacy/parameters/v2/path/accountId.yaml b/static/idn-api/vlegacy/parameters/v2/path/accountId.yaml new file mode 100644 index 000000000..0506da5d9 --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/path/accountId.yaml @@ -0,0 +1,6 @@ +name: id +description: ID of an Account +schema: + type: string +required: true +in: path diff --git a/static/idn-api/vlegacy/parameters/v2/path/approvalId.yaml b/static/idn-api/vlegacy/parameters/v2/path/approvalId.yaml new file mode 100644 index 000000000..b95a6795c --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/path/approvalId.yaml @@ -0,0 +1,6 @@ +name: approvalId +description: ID of an access request approval. +schema: + type: string +required: true +in: path diff --git a/static/idn-api/vlegacy/parameters/v2/path/identityAlias.yaml b/static/idn-api/vlegacy/parameters/v2/path/identityAlias.yaml new file mode 100644 index 000000000..31bddfa7d --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/path/identityAlias.yaml @@ -0,0 +1,6 @@ +name: identityAlias +description: Alias of an identity. +schema: + type: string +required: true +in: path diff --git a/static/idn-api/vlegacy/parameters/v2/path/identityIdOrAlias.yaml b/static/idn-api/vlegacy/parameters/v2/path/identityIdOrAlias.yaml new file mode 100644 index 000000000..6075866aa --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/path/identityIdOrAlias.yaml @@ -0,0 +1,6 @@ +name: identityIdOrAlias +description: ID or alias of an identity. +schema: + type: string +required: true +in: path diff --git a/static/idn-api/vlegacy/parameters/v2/path/index.yaml b/static/idn-api/vlegacy/parameters/v2/path/index.yaml new file mode 100644 index 000000000..d908641fb --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/path/index.yaml @@ -0,0 +1,6 @@ +name: index +description: Search index to use (currently identities, entitlements, and events). +schema: + type: string +required: true +in: path diff --git a/static/idn-api/vlegacy/parameters/v2/path/launcherId.yaml b/static/idn-api/vlegacy/parameters/v2/path/launcherId.yaml new file mode 100644 index 000000000..ad2121edb --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/path/launcherId.yaml @@ -0,0 +1,6 @@ +name: launcherId +description: ID of a launcher. +schema: + type: string +required: true +in: path diff --git a/static/idn-api/vlegacy/parameters/v2/path/provisioningActivityId.yaml b/static/idn-api/vlegacy/parameters/v2/path/provisioningActivityId.yaml new file mode 100644 index 000000000..625c8947c --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/path/provisioningActivityId.yaml @@ -0,0 +1,6 @@ +name: provisioningActivityId +description: ID of a provisioning activity. +schema: + type: string +required: true +in: path diff --git a/static/idn-api/vlegacy/parameters/v2/path/taskResultIdOrName.yaml b/static/idn-api/vlegacy/parameters/v2/path/taskResultIdOrName.yaml new file mode 100644 index 000000000..79d05d033 --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/path/taskResultIdOrName.yaml @@ -0,0 +1,6 @@ +name: taskResultIdOrName +description: ID or name of a task. +schema: + type: string +required: true +in: path diff --git a/static/idn-api/vlegacy/parameters/v2/query/accounts/sourceId-get-list.yaml b/static/idn-api/vlegacy/parameters/v2/query/accounts/sourceId-get-list.yaml new file mode 100644 index 000000000..6f4978ca3 --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/accounts/sourceId-get-list.yaml @@ -0,0 +1,6 @@ +name: sourceId +description: ID of a source for the Account list +schema: + type: integer +required: true +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/query/accounts/sourceId.yaml b/static/idn-api/vlegacy/parameters/v2/query/accounts/sourceId.yaml new file mode 100644 index 000000000..ac5ea82c0 --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/accounts/sourceId.yaml @@ -0,0 +1,6 @@ +name: sourceId +description: ID of a flat-file source into which the new account will be created. +schema: + type: string +required: true +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/query/filters.yaml b/static/idn-api/vlegacy/parameters/v2/query/filters.yaml new file mode 100644 index 000000000..4c2ee8d6f --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/filters.yaml @@ -0,0 +1,5 @@ +name: filters +description: 'Search filters. Example: ''property EQ "value"''' +schema: + type: string +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/query/goto.yaml b/static/idn-api/vlegacy/parameters/v2/query/goto.yaml new file mode 100644 index 000000000..77efe4833 --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/goto.yaml @@ -0,0 +1,5 @@ +name: goto +description: The goto URL. +schema: + type: string +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/query/identity-apps-filters.yaml b/static/idn-api/vlegacy/parameters/v2/query/identity-apps-filters.yaml new file mode 100644 index 000000000..d9dd93117 --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/identity-apps-filters.yaml @@ -0,0 +1,6 @@ +name: filters +description: 'Search filters. Supported operator is ''EQ''. Supported attribute for + filtering is ‘description’. Example: ''description EQ "Some description."''.' +schema: + type: string +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/query/identity-filter.yaml b/static/idn-api/vlegacy/parameters/v2/query/identity-filter.yaml new file mode 100644 index 000000000..84ee2be6d --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/identity-filter.yaml @@ -0,0 +1,6 @@ +name: filters +description: 'Search filters. Supported operator is ''EQ''. Supported attribute for + filtering is ‘permissions’. Example: ''permissions EQ "admin"''.' +schema: + type: string +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/query/identityLaunchers/accessProfileId.yaml b/static/idn-api/vlegacy/parameters/v2/query/identityLaunchers/accessProfileId.yaml new file mode 100644 index 000000000..e66413cce --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/identityLaunchers/accessProfileId.yaml @@ -0,0 +1,6 @@ +name: accessProfileId +description: ID of an access profile to request access for when creating a launcher. +schema: + type: string +required: false +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/query/identityLaunchers/appId.yaml b/static/idn-api/vlegacy/parameters/v2/query/identityLaunchers/appId.yaml new file mode 100644 index 000000000..76b41671f --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/identityLaunchers/appId.yaml @@ -0,0 +1,6 @@ +name: appId +description: ID of the app to create a launcher for. +schema: + type: string +required: true +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/query/identityLaunchers/context.yaml b/static/idn-api/vlegacy/parameters/v2/query/identityLaunchers/context.yaml new file mode 100644 index 000000000..131ee7484 --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/identityLaunchers/context.yaml @@ -0,0 +1,8 @@ +name: context +description: Context of launcher links to include. Specifying a mobile context will + provide links to mobile resources for the launcher if available. +schema: + type: string + enum: + - mobile +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/query/limit.yaml b/static/idn-api/vlegacy/parameters/v2/query/limit.yaml new file mode 100644 index 000000000..44d478c34 --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/limit.yaml @@ -0,0 +1,9 @@ +name: limit +description: Paging limit. +schema: + type: integer + format: int32 + minimum: 1 + maximum: 2500 + default: 250 +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/query/offset.yaml b/static/idn-api/vlegacy/parameters/v2/query/offset.yaml new file mode 100644 index 000000000..63b7c647f --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/offset.yaml @@ -0,0 +1,8 @@ +name: offset +description: Paging offset. +schema: + type: integer + format: int32 + minimum: 0 + default: 0 +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/query/org.yaml b/static/idn-api/vlegacy/parameters/v2/query/org.yaml new file mode 100644 index 000000000..a79b41803 --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/org.yaml @@ -0,0 +1,5 @@ +name: org +description: Name of the org. +schema: + type: string +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/query/provisioning-activities-filters.yaml b/static/idn-api/vlegacy/parameters/v2/query/provisioning-activities-filters.yaml new file mode 100644 index 000000000..3063c0e95 --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/provisioning-activities-filters.yaml @@ -0,0 +1,8 @@ +name: filters +description: 'Search filters. Supported operators are ''co'', ''sw'', ''eq'', ''or'', + ''and'', ''gt'', ''lt'', ''ge'', ''le'', ''ne'', ''not'' and ''pr'' which are SCIM-compliant. + Supported attributes for filtering are ‘operation’, ’name’, ‘sourceName’ and ‘status’. + Example: ''property eq "value"''.' +schema: + type: string +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/query/provisioning-activities-sort.yaml b/static/idn-api/vlegacy/parameters/v2/query/provisioning-activities-sort.yaml new file mode 100644 index 000000000..1ffd5b297 --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/provisioning-activities-sort.yaml @@ -0,0 +1,8 @@ +name: sort +description: One or more attributes on which to sort each separated by a ','. Prefix + the attribute name with a minus sign (ex. -dateCreated) for descending sort. Supported + attributes for sorting are 'operation', 'name', 'sourceName' ,'status', 'dateCreated' + and 'lastUpdated'. +schema: + type: string +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/query/search/column-fields.yaml b/static/idn-api/vlegacy/parameters/v2/query/search/column-fields.yaml new file mode 100644 index 000000000..0899c351d --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/search/column-fields.yaml @@ -0,0 +1,7 @@ +name: fields +description: List of field columns that should be included in the export. +schema: + type: array + items: + type: string +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/query/search/fields.yaml b/static/idn-api/vlegacy/parameters/v2/query/search/fields.yaml new file mode 100644 index 000000000..78f815074 --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/search/fields.yaml @@ -0,0 +1,7 @@ +name: fields +description: List of fields that the query should be restricted. +schema: + type: array + items: + type: string +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/query/search/index.yaml b/static/idn-api/vlegacy/parameters/v2/query/search/index.yaml new file mode 100644 index 000000000..7753d8e66 --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/search/index.yaml @@ -0,0 +1,6 @@ +name: index +description: Index to be used (currently identities, entitlements, and events). +schema: + type: string +required: true +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/query/search/query-fields.yaml b/static/idn-api/vlegacy/parameters/v2/query/search/query-fields.yaml new file mode 100644 index 000000000..2fbcd83d8 --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/search/query-fields.yaml @@ -0,0 +1,7 @@ +name: queryFields +description: List of query fields that the query should be restricted. +schema: + type: array + items: + type: string +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/query/search/query.yaml b/static/idn-api/vlegacy/parameters/v2/query/search/query.yaml new file mode 100644 index 000000000..6388da673 --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/search/query.yaml @@ -0,0 +1,7 @@ +name: query +description: Query using the [Elastic Search Query String syntax](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string-syntax) + from the Query DSL. +schema: + type: string +required: true +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/query/search/type.yaml b/static/idn-api/vlegacy/parameters/v2/query/search/type.yaml new file mode 100644 index 000000000..1dae7f318 --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/search/type.yaml @@ -0,0 +1,6 @@ +name: type +description: Type to query (currently either identity, entitlement or event). +schema: + type: string +required: true +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/query/search/types.yaml b/static/idn-api/vlegacy/parameters/v2/query/search/types.yaml new file mode 100644 index 000000000..9766e1a54 --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/search/types.yaml @@ -0,0 +1,7 @@ +name: types +description: List of types to query (currently identity, entitlement or event). +schema: + type: array + items: + type: string +in: query diff --git a/static/idn-api/vlegacy/parameters/v2/query/sort.yaml b/static/idn-api/vlegacy/parameters/v2/query/sort.yaml new file mode 100644 index 000000000..cac36ad28 --- /dev/null +++ b/static/idn-api/vlegacy/parameters/v2/query/sort.yaml @@ -0,0 +1,6 @@ +name: sort +description: One or more attributes on which to sort, each separated by a ','. Prefix + with a minus sign (ex. -dateCreated) for descending sort. +schema: + type: string +in: query diff --git a/static/idn-api/vlegacy/paths/v2/AccessProfileEntitlements.yaml b/static/idn-api/vlegacy/paths/v2/AccessProfileEntitlements.yaml new file mode 100644 index 000000000..599d33b4c --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/AccessProfileEntitlements.yaml @@ -0,0 +1,27 @@ +get: + tags: + - access-profiles + summary: Lists all entitlements of an access profile. + description: Lists all entitlements of an access profile. + operationId: listAccessProfileEntitlements + parameters: + - "$ref": "../../parameters/v2/path/accessProfileId.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../schemas/v2/Entitlement.yaml" + headers: + X-Total-Count: + description: Total number of items, regardless of paging limits. + schema: + type: integer + format: int64 + Link: + description: Links to alternate or related resources. + schema: + type: string + '404': + "$ref": "../../responses/v2/404.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/AccessProfileId.yaml b/static/idn-api/vlegacy/paths/v2/AccessProfileId.yaml new file mode 100644 index 000000000..31fd84bc7 --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/AccessProfileId.yaml @@ -0,0 +1,120 @@ +get: + tags: + - access-profiles + summary: Retrieves an access profile. + description: Retrieves an access profile by ID. + operationId: getAccessProfile + parameters: + - "$ref": "../../parameters/v2/path/accessProfileId.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../schemas/v2/AccessProfile.yaml" + headers: + ETag: + description: Entity tag. + schema: + type: string + Last-Modified: + description: Last modified date. + schema: + type: string + format: date-time + Link: + description: Links to alternate or related resources. + schema: + type: string + '404': + "$ref": "../../responses/v2/404.yaml" +put: + tags: + - access-profiles + summary: Updates an existing access profile. + description: Updates an existing access profile, found by ID. + operationId: putAccessProfile + parameters: + - "$ref": "../../parameters/v2/path/accessProfileId.yaml" + requestBody: + description: Access profile attributes to update. + required: true + content: + application/json: + schema: + "$ref": "../../schemas/v2/AccessProfileCreateEto.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../schemas/v2/AccessProfile.yaml" + headers: + ETag: + description: Entity tag. + schema: + type: string + Last-Modified: + description: Last modified date. + schema: + type: string + format: date-time + Link: + description: Links to alternate or related resources. + schema: + type: string + '404': + "$ref": "../../responses/v2/404.yaml" +patch: + tags: + - access-profiles + summary: Updates one or more access profile attributes. + description: Updates one or more attributes of access profile, found by ID. + operationId: patchAccessProfile + parameters: + - "$ref": "../../parameters/v2/path/accessProfileId.yaml" + requestBody: + description: Access profile attributes to update. + required: true + content: + application/json: + schema: + "$ref": "../../schemas/v2/AccessProfile.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../schemas/v2/AccessProfile.yaml" + headers: + ETag: + description: Entity tag. + schema: + type: string + Last-Modified: + description: Last modified date. + schema: + type: string + format: date-time + Link: + description: Links to alternate or related resources. + schema: + type: string + '404': + "$ref": "../../responses/v2/404.yaml" +delete: + tags: + - access-profiles + summary: Deletes an access profile. + description: Deletes an access profile, found by ID. + operationId: deleteAccessProfile + parameters: + - "$ref": "../../parameters/v2/path/accessProfileId.yaml" + responses: + '204': + "$ref": "../../responses/v2/204.yaml" + '404': + "$ref": "../../responses/v2/404.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/AccessProfiles.yaml b/static/idn-api/vlegacy/paths/v2/AccessProfiles.yaml new file mode 100644 index 000000000..161433da7 --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/AccessProfiles.yaml @@ -0,0 +1,64 @@ +get: + tags: + - access-profiles + summary: Lists the access profiles. + description: Lists the access profiles. + operationId: listAccessProfiles + parameters: + - "$ref": "../../parameters/v2/query/filters.yaml" + - "$ref": "../../parameters/v2/query/sort.yaml" + - "$ref": "../../parameters/v2/query/offset.yaml" + - "$ref": "../../parameters/v2/query/limit.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + type: array + items: + "$ref": "../../schemas/v2/AccessProfile.yaml" + headers: + X-Total-Count: + description: Total number of items, regardless of paging limits. + schema: + type: integer + format: int64 + Link: + description: Links to alternate or related resources. + schema: + type: string +post: + tags: + - access-profiles + summary: Creates a new access profile. + description: Creates a new access profile. + operationId: createAccessProfile + requestBody: + description: Attribute values for the new access profile. + required: true + content: + application/json: + schema: + "$ref": "../../schemas/v2/AccessProfile.yaml" + responses: + '201': + description: Created. + content: + application/json: + schema: + "$ref": "../../responses/v2/201.yaml" + headers: + ETag: + description: Entity tag. + schema: + type: string + Last-Modified: + description: Last modified date. + schema: + type: string + format: date-time + Link: + description: Links to alternate or related resources. + schema: + type: string diff --git a/static/idn-api/vlegacy/paths/v2/AccessRequests.yaml b/static/idn-api/vlegacy/paths/v2/AccessRequests.yaml new file mode 100644 index 000000000..6db84cff7 --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/AccessRequests.yaml @@ -0,0 +1,28 @@ +get: + tags: + - access-requests + summary: Lists the access request for an identity. + description: Lists both the pending and past access requests for an identity. + operationId: listAccessRequests + parameters: + - "$ref": "../../parameters/v2/query/offset.yaml" + - "$ref": "../../parameters/v2/query/limit.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + type: array + items: + "$ref": "../../schemas/v2/AccessRequest.yaml" + headers: + X-Total-Count: + description: Total number of items, regardless of paging limits. + schema: + type: integer + format: int64 + Link: + description: Links to alternate or related resources. + schema: + type: string diff --git a/static/idn-api/vlegacy/paths/v2/Accounts.yaml b/static/idn-api/vlegacy/paths/v2/Accounts.yaml new file mode 100644 index 000000000..945457477 --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/Accounts.yaml @@ -0,0 +1,114 @@ +get: + tags: + - accounts + summary: Retrieves list of Accounts for a given source. + description: >- + Retrieves list of Accounts for a given source. + + A token with ORG_ADMIN or API_CLIENT authority is required to call this API + operationId: getAccounts + parameters: + - "$ref": "../../parameters/v2/query/accounts/sourceId-get-list.yaml" + - "$ref": "../../parameters/v2/query/sort.yaml" + - "$ref": "../../parameters/v2/query/offset.yaml" + - "$ref": "../../parameters/v2/query/limit.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + type: array + items: + "$ref": "../../schemas/v2/Account.yaml" + headers: + X-Total-Count: + description: Total number of items, regardless of paging limits. + schema: + type: integer + format: int64 + Link: + description: Links to alternate or related resources. + schema: + type: string + '400': + "$ref": "../../responses/v2/400.yaml" +post: + tags: + - accounts + summary: Creates a new account on a flat-file source. + description: >- + Creates a new account on a flat-file source. + + A token with ORG_ADMIN or API_CLIENT authority is required to call this API + operationId: createAccount + parameters: + - "$ref": "../../parameters/v2/query/accounts/sourceId.yaml" + requestBody: + description: Attribute values for the new account. The schema and required attributes + are dictated by the source. + required: true + content: + application/json: + schema: + "$ref": "../../schemas/v2/DynamicSchemaEto.yaml" + example: + businessCategory: Engineering + carLicense: carLicense + cn: example + departmentNumber: Engineering + description: description + destinationIndicator: destinationIndicator + displayName: example + distinguishedName: DN=example + employeeNumber: '1781263' + employeeType: Full Time + facsimileTelephoneNumber: 512-666-6666 + givenName: exampleName + homePhone: 512-666-6666 + homePostalAddress: 11305 Four Points Blvd + initials: KVN1 + internationaliSDNNumber: internationaliSDNNumber + mail: example@sailpoint.com + manager: DN=example manager + mobile: '9018888888' + o: o + ou: ou + pager: pager + physicalDeliveryOfficeName: physicalDeliveryOfficeName + postOfficeBox: postOfficeBox + postalAddress: postalAddress + postalCode: '78729' + preferredDeliveryMethod: preferredDeliveryMethod + preferredLanguage: preferredLanguage + registeredAddress: registeredAddress + roomNumber: roomNumber + secretary: secretary + seeAlso: seeAlso + sn: LastName + st: st + street: street + telephoneNumber: '9018888888' + teletexTerminalIdentifier: teletexTerminalIdentifier + telexNumber: telexNumber + title: title + uid: uid + objectClass: objectClass + memberOf: Engineering + objectSid: objectSid + sAMAccountName: example + primaryGroupID: primaryGroupID + primaryGroupDN: primaryGroupDN + accountFlags: accountFlags + department: department + msNPCallingStationID: msNPCallingStationID + msRADIUSFramedRoute: msRADIUSFramedRoute + msNPAllowDialin: msNPAllowDialin + msRADIUSCallbackNumber: msRADIUSCallbackNumber + msRADIUSFramedIPAddress: msRADIUSFramedIPAddress + mailNickname: mailNickname + homeMDB: homeMDB + msExchHideFromAddressLists: msExchHideFromAddressLists + responses: + '202': + "$ref": "../../responses/v2/202.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/AccountsWithId.yaml b/static/idn-api/vlegacy/paths/v2/AccountsWithId.yaml new file mode 100644 index 000000000..037005464 --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/AccountsWithId.yaml @@ -0,0 +1,215 @@ +get: + tags: + - accounts + summary: Retrieves the Account by Id. + description: >- + Retrieves the Account by Id. + + A token with ORG_ADMIN or API_CLIENT authority is required to call this API + operationId: getAccount + parameters: + - "$ref": "../../parameters/v2/path/accountId.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../schemas/v2/Account.yaml" + headers: + ETag: + description: Entity tag. + schema: + type: string + Last-Modified: + description: Last modified date. + schema: + type: string + format: date-time + Link: + description: Links to alternate or related resources. + schema: + type: string + '404': + "$ref": "../../responses/v2/404.yaml" +patch: + tags: + - accounts + summary: Updates an existing account from a flat-file source. + description: >- + Updates an existing account from a flat-file source. + + A token with ORG_ADMIN or API_CLIENT authority is required to call this API + operationId: patchAccount + parameters: + - "$ref": "../../parameters/v2/path/accountId.yaml" + requestBody: + description: >- + Attribute values for the account. The schema and required attributes + are dictated by the source. + required: true + content: + application/json: + schema: + "$ref": "../../schemas/v2/DynamicSchemaEto.yaml" + example: + businessCategory: Engineering + carLicense: carLicense + cn: example + departmentNumber: Engineering + description: description + destinationIndicator: destinationIndicator + displayName: example + distinguishedName: DN=example + employeeNumber: '1781263' + employeeType: Full Time + facsimileTelephoneNumber: 512-666-6666 + givenName: exampleName + homePhone: 512-666-6666 + homePostalAddress: 11305 Four Points Blvd + initials: KVN1 + internationaliSDNNumber: internationaliSDNNumber + mail: example@sailpoint.com + manager: DN=example manager + mobile: '9018888888' + o: o + ou: ou + pager: pager + physicalDeliveryOfficeName: physicalDeliveryOfficeName + postOfficeBox: postOfficeBox + postalAddress: postalAddress + postalCode: '78729' + preferredDeliveryMethod: preferredDeliveryMethod + preferredLanguage: preferredLanguage + registeredAddress: registeredAddress + roomNumber: roomNumber + secretary: secretary + seeAlso: seeAlso + sn: LastName + st: st + street: street + telephoneNumber: '9018888888' + teletexTerminalIdentifier: teletexTerminalIdentifier + telexNumber: telexNumber + title: title + uid: uid + objectClass: objectClass + memberOf: Engineering + objectSid: objectSid + sAMAccountName: example + primaryGroupID: primaryGroupID + primaryGroupDN: primaryGroupDN + accountFlags: accountFlags + department: department + msNPCallingStationID: msNPCallingStationID + msRADIUSFramedRoute: msRADIUSFramedRoute + msNPAllowDialin: msNPAllowDialin + msRADIUSCallbackNumber: msRADIUSCallbackNumber + msRADIUSFramedIPAddress: msRADIUSFramedIPAddress + mailNickname: mailNickname + homeMDB: homeMDB + msExchHideFromAddressLists: msExchHideFromAddressLists + responses: + '202': + "$ref": "../../responses/v2/202.yaml" + '404': + "$ref": "../../responses/v2/404.yaml" +put: + tags: + - accounts + summary: Updates an existing account from a flat-file source by replacing all values. + description: >- + Updates an existing account from a flat-file source. The body represents + all the values to be defined on the account. Attributes that are not present in + the body will be removed from the account. + + A token with ORG_ADMIN or API_CLIENT authority is required to call this API + operationId: putAccount + parameters: + - "$ref": "../../parameters/v2/path/accountId.yaml" + requestBody: + description: Attribute values for the account. The schema and required attributes + are dictated by the source. + required: true + content: + application/json: + schema: + "$ref": "../../schemas/v2/DynamicSchemaEto.yaml" + example: + businessCategory: Engineering + carLicense: carLicense + cn: example + departmentNumber: Engineering + description: description + destinationIndicator: destinationIndicator + displayName: example + distinguishedName: DN=example + employeeNumber: '1781263' + employeeType: Full Time + facsimileTelephoneNumber: 512-666-6666 + givenName: exampleName + homePhone: 512-666-6666 + homePostalAddress: 11305 Four Points Blvd + initials: KVN1 + internationaliSDNNumber: internationaliSDNNumber + mail: example@sailpoint.com + manager: DN=example manager + mobile: '9018888888' + o: o + ou: ou + pager: pager + physicalDeliveryOfficeName: physicalDeliveryOfficeName + postOfficeBox: postOfficeBox + postalAddress: postalAddress + postalCode: '78729' + preferredDeliveryMethod: preferredDeliveryMethod + preferredLanguage: preferredLanguage + registeredAddress: registeredAddress + roomNumber: roomNumber + secretary: secretary + seeAlso: seeAlso + sn: LastName + st: st + street: street + telephoneNumber: '9018888888' + teletexTerminalIdentifier: teletexTerminalIdentifier + telexNumber: telexNumber + title: title + uid: uid + objectClass: objectClass + memberOf: Engineering + objectSid: objectSid + sAMAccountName: example + primaryGroupID: primaryGroupID + primaryGroupDN: primaryGroupDN + accountFlags: accountFlags + department: department + msNPCallingStationID: msNPCallingStationID + msRADIUSFramedRoute: msRADIUSFramedRoute + msNPAllowDialin: msNPAllowDialin + msRADIUSCallbackNumber: msRADIUSCallbackNumber + msRADIUSFramedIPAddress: msRADIUSFramedIPAddress + mailNickname: mailNickname + homeMDB: homeMDB + msExchHideFromAddressLists: msExchHideFromAddressLists + responses: + '202': + "$ref": "../../responses/v2/202.yaml" + '404': + "$ref": "../../responses/v2/404.yaml" +delete: + tags: + - accounts + summary: Deletes an existing account from a flat-file source. + description: >- + Deletes an existing account from a flat-file source. + + A token with ORG_ADMIN or API_CLIENT authority is required to call this API + operationId: deleteAccount + parameters: + - "$ref": "../../parameters/v2/path/accountId.yaml" + responses: + '202': + "$ref": "../../responses/v2/202.yaml" + '404': + "$ref": "../../responses/v2/404.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/Orgs.yaml b/static/idn-api/vlegacy/paths/v2/Orgs.yaml new file mode 100644 index 000000000..c54423eda --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/Orgs.yaml @@ -0,0 +1,62 @@ +get: + tags: + - org + summary: Retrieves your org settings. + description: Retrieves information and operational settings for your org (as determined + by the URL domain). + operationId: getOrgSettings + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../schemas/v2/Org.yaml" + headers: + ETag: + description: Entity tag. + schema: + type: string + Last-Modified: + description: Last modified date. + schema: + type: string + format: date-time + Link: + description: Links to alternate or related resources. + schema: + type: string +patch: + tags: + - org + summary: Updates one or more org attributes. + description: Updates one or more attributes for your org. + operationId: updateOrgSettings + requestBody: + description: Org settings to update. + required: true + content: + application/json: + schema: + "$ref": "../../schemas/v2/OrgEto.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../schemas/v2/Org.yaml" + headers: + ETag: + description: Entity tag. + schema: + type: string + Last-Modified: + description: Last modified date. + schema: + type: string + format: date-time + Link: + description: Links to alternate or related resources. + schema: + type: string diff --git a/static/idn-api/vlegacy/paths/v2/Search.yaml b/static/idn-api/vlegacy/paths/v2/Search.yaml new file mode 100644 index 000000000..0b6fa4f53 --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/Search.yaml @@ -0,0 +1,98 @@ +get: + tags: + - search + summary: Searches and retrieves the types specified (currently identity, entitlement, + and event). + description: |- + Searches and retrieves the types specified (currently identity, entitlement, and event) using the [Elastic Search Query String syntax](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string-syntax) from the Query DSL in the query string. + + [BETA] This endpoint is in beta phase. + operationId: runSearch + parameters: + - "$ref": "../../parameters/v2/query/search/types.yaml" + - "$ref": "../../parameters/v2/query/sort.yaml" + - "$ref": "../../parameters/v2/query/offset.yaml" + - "$ref": "../../parameters/v2/query/limit.yaml" + - "$ref": "../../parameters/v2/query/search/fields.yaml" + - "$ref": "../../parameters/v2/query/search/query.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + type: object + properties: + identity: + type: array + items: + "$ref": "../../schemas/v2/search/SearchIdentity.yaml" + entitlement: + type: array + items: + "$ref": "../../schemas/v2/search/SearchEntitlement.yaml" + event: + type: array + items: + "$ref": "../../schemas/v2/search/SearchEvent.yaml" + headers: + X-Total-Count: + description: Total number of items, regardless of paging limits. + schema: + type: integer + format: int64 + Link: + description: Links to alternate or related resources. + schema: + type: string + '400': + "$ref": "../../responses/v2/400.yaml" +post: + tags: + - search + summary: Searches and retrieves the types specified (current identity, entitlement, + and event). + description: |- + Searches and retrieves the types specified (current identity, entitlement, and event) using the [Elastic Search Query String syntax](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string-syntax) from the Query DSL in the query string. + + [BETA] This endpoint is in beta phase. + operationId: runSearchPost + parameters: + - "$ref": "../../parameters/v2/query/search/types.yaml" + - "$ref": "../../parameters/v2/query/sort.yaml" + - "$ref": "../../parameters/v2/query/offset.yaml" + - "$ref": "../../parameters/v2/query/limit.yaml" + - "$ref": "../../parameters/v2/query/search/fields.yaml" + - "$ref": "../../parameters/v2/query/search/query.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + type: object + properties: + identity: + type: array + items: + "$ref": "../../schemas/v2/search/SearchIdentity.yaml" + entitlement: + type: array + items: + "$ref": "../../schemas/v2/search/SearchEntitlement.yaml" + event: + type: array + items: + "$ref": "../../schemas/v2/search/SearchEvent.yaml" + headers: + X-Total-Count: + description: Total number of items, regardless of paging limits. + schema: + type: integer + format: int64 + Link: + description: Links to alternate or related resources. + schema: + type: string + '400': + "$ref": "../../responses/v2/400.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/TaskResultIdOrName.yaml b/static/idn-api/vlegacy/paths/v2/TaskResultIdOrName.yaml new file mode 100644 index 000000000..bd059e730 --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/TaskResultIdOrName.yaml @@ -0,0 +1,34 @@ +get: + tags: + - task-results + summary: Retrieve Result of Background Task + description: >- + This API retrieves the result of the specified background task. + + A token with USER or API_CLIENT authority is required to call this API. + operationId: getBackgroundTaskResults + parameters: + - "$ref": "../../parameters/v2/path/taskResultIdOrName.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../schemas/v2/TaskResult.yaml" + headers: + ETag: + description: Entity tag. + schema: + type: string + Last-Modified: + description: Last modified date. + schema: + type: string + format: date-time + Link: + description: Links to alternate or related resources. + schema: + type: string + '404': + "$ref": "../../responses/v2/404.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/approvals/ApprovalsList.yaml b/static/idn-api/vlegacy/paths/v2/approvals/ApprovalsList.yaml new file mode 100644 index 000000000..afccbaeef --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/approvals/ApprovalsList.yaml @@ -0,0 +1,29 @@ +get: + tags: + - approvals + summary: Lists the approvals. + description: Lists the access request approvals. + operationId: listAccessRequestApproval + parameters: + - "$ref": "../../../parameters/v2/query/sort.yaml" + - "$ref": "../../../parameters/v2/query/offset.yaml" + - "$ref": "../../../parameters/v2/query/limit.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + type: array + items: + "$ref": "../../../schemas/v2/Approval.yaml" + headers: + X-Total-Count: + description: Total number of items, regardless of paging limits. + schema: + type: integer + format: int64 + Link: + description: Links to alternate or related resources. + schema: + type: string diff --git a/static/idn-api/vlegacy/paths/v2/approvals/ApproveRequest.yaml b/static/idn-api/vlegacy/paths/v2/approvals/ApproveRequest.yaml new file mode 100644 index 000000000..9779f14b2 --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/approvals/ApproveRequest.yaml @@ -0,0 +1,38 @@ +post: + tags: + - approvals + summary: Approves an access request. + description: Approves an access request. + operationId: approveAccessRequest + parameters: + - "$ref": "../../../parameters/v2/path/approvalId.yaml" + requestBody: + description: Reviewer's comment. + required: false + content: + application/json: + schema: + "$ref": "../../../schemas/v2/CommentEto.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../../schemas/v2/Approval.yaml" + headers: + ETag: + description: Entity tag. + schema: + type: string + Last-Modified: + description: Last modified date. + schema: + type: string + format: date-time + Link: + description: Links to alternate or related resources. + schema: + type: string + '404': + "$ref": "../../../responses/v2/404.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/approvals/Forward.yaml b/static/idn-api/vlegacy/paths/v2/approvals/Forward.yaml new file mode 100644 index 000000000..1515f245c --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/approvals/Forward.yaml @@ -0,0 +1,38 @@ +post: + tags: + - approvals + summary: Forwards an access request approval. + description: Forwards an access request approval to a new owner. + operationId: forwardAccessRequestApproval + parameters: + - "$ref": "../../../parameters/v2/path/approvalId.yaml" + requestBody: + description: Information about the forwarded approval. + required: true + content: + application/json: + schema: + "$ref": "../../../schemas/v2/ForwardApprovalEto.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../../schemas/v2/Approval.yaml" + headers: + ETag: + description: Entity tag. + schema: + type: string + Last-Modified: + description: Last modified date. + schema: + type: string + format: date-time + Link: + description: Links to alternate or related resources. + schema: + type: string + '404': + "$ref": "../../../responses/v2/404.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/approvals/RejectRequest.yaml b/static/idn-api/vlegacy/paths/v2/approvals/RejectRequest.yaml new file mode 100644 index 000000000..3d38c650d --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/approvals/RejectRequest.yaml @@ -0,0 +1,38 @@ +post: + tags: + - approvals + summary: Rejects an access request. + description: Rejects an access request. + operationId: rejectAccessRequest + parameters: + - "$ref": "../../../parameters/v2/path/approvalId.yaml" + requestBody: + description: Reason about the approval rejection. + required: false + content: + application/json: + schema: + "$ref": "../../../schemas/v2/CommentEto.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../../schemas/v2/Approval.yaml" + headers: + ETag: + description: Entity tag. + schema: + type: string + Last-Modified: + description: Last modified date. + schema: + type: string + format: date-time + Link: + description: Links to alternate or related resources. + schema: + type: string + '404': + "$ref": "../../../responses/v2/404.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/identities/Identities.yaml b/static/idn-api/vlegacy/paths/v2/identities/Identities.yaml new file mode 100644 index 000000000..129518844 --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/identities/Identities.yaml @@ -0,0 +1,110 @@ +get: + tags: + - identities + summary: Retrieves the identities. + description: Retrieves the identities. + operationId: listIdentities + parameters: + - "$ref": "../../../parameters/v2/query/identity-filter.yaml" + - "$ref": "../../../parameters/v2/query/sort.yaml" + - "$ref": "../../../parameters/v2/query/offset.yaml" + - "$ref": "../../../parameters/v2/query/limit.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + type: array + items: + "$ref": "../../../schemas/v2/IdentityV2.yaml" + headers: + X-Total-Count: + description: Total number of items, regardless of paging limits. + schema: + type: integer + format: int64 + Link: + description: Links to alternate or related resources. + schema: + type: string +post: + tags: + - identities + summary: Creates a new identity. + description: Creates a new identity. + operationId: createIdentity + parameters: + - "$ref": "../../../parameters/v2/identities/sourceId.yaml" + requestBody: + description: Attribute values for the new identity. The schema and required attributes + are dictated by the source. + required: true + content: + application/json: + schema: + "$ref": "../../../schemas/v2/DynamicSchemaEto.yaml" + example: + businessCategory: Engineering + carLicense: carLicense + cn: example + departmentNumber: Engineering + description: description + destinationIndicator: destinationIndicator + displayName: example + distinguishedName: DN=example + employeeNumber: '1781263' + employeeType: Full Time + facsimileTelephoneNumber: 512-666-6666 + givenName: exampleName + homePhone: 512-666-6666 + homePostalAddress: 11305 Four Points Blvd + initials: KVN1 + internationaliSDNNumber: internationaliSDNNumber + mail: example@sailpoint.com + manager: DN=example manager + mobile: '9018888888' + o: o + ou: ou + pager: pager + physicalDeliveryOfficeName: physicalDeliveryOfficeName + postOfficeBox: postOfficeBox + postalAddress: postalAddress + postalCode: '78729' + preferredDeliveryMethod: preferredDeliveryMethod + preferredLanguage: preferredLanguage + registeredAddress: registeredAddress + roomNumber: roomNumber + secretary: secretary + seeAlso: seeAlso + sn: LastName + st: st + street: street + telephoneNumber: '9018888888' + teletexTerminalIdentifier: teletexTerminalIdentifier + telexNumber: telexNumber + title: title + uid: uid + objectClass: objectClass + memberOf: Engineering + objectSid: objectSid + sAMAccountName: example + primaryGroupID: primaryGroupID + primaryGroupDN: primaryGroupDN + accountFlags: accountFlags + department: department + msNPCallingStationID: msNPCallingStationID + msRADIUSFramedRoute: msRADIUSFramedRoute + msNPAllowDialin: msNPAllowDialin + msRADIUSCallbackNumber: msRADIUSCallbackNumber + msRADIUSFramedIPAddress: msRADIUSFramedIPAddress + mailNickname: mailNickname + homeMDB: homeMDB + msExchHideFromAddressLists: msExchHideFromAddressLists + responses: + '202': + "$ref": "../../../responses/v2/202.yaml" + '400': + "$ref": "../../../responses/v2/400.yaml" + '403': + "$ref": "../../../responses/v2/403.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/identities/IdentitiesBulkLock.yaml b/static/idn-api/vlegacy/paths/v2/identities/IdentitiesBulkLock.yaml new file mode 100644 index 000000000..ec99f2a87 --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/identities/IdentitiesBulkLock.yaml @@ -0,0 +1,31 @@ +post: + tags: + - identities + summary: Locks one or more identities. + description: Locks one or more identities. Identities MUST reset their password + in order to be unlocked. + operationId: lockIdentities + requestBody: + description: Array of one or more IDs. + required: true + content: + application/json: + schema: + type: array + items: + type: string + responses: + '200': + description: List of locked identities. + content: + application/json: + schema: + "$ref": "../../../responses/v2/MultiStatusObject.yaml" + '207': + description: List of Success, Map of Failed with messages + content: + application/json: + schema: + "$ref": "../../../responses/v2/MultiStatusObject.yaml" + '500': + description: Failed. diff --git a/static/idn-api/vlegacy/paths/v2/identities/IdentityAliasAuthDetails.yaml b/static/idn-api/vlegacy/paths/v2/identities/IdentityAliasAuthDetails.yaml new file mode 100644 index 000000000..527998c51 --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/identities/IdentityAliasAuthDetails.yaml @@ -0,0 +1,18 @@ +get: + tags: + - identities + summary: Retrieves authentication details of an identity. + description: Retrieves authentication details of an identity. + operationId: getIdentityAuthDetails + parameters: + - "$ref": "../../../parameters/v2/path/identityAlias.yaml" + - "$ref": "../../../parameters/v2/query/org.yaml" + required: true + - "$ref": "../../../parameters/v2/query/goto.yaml" + responses: + '200': + description: OK. + schema: + "$ref": "../../../schemas/v2/AuthDetails.yaml" + '400': + "$ref": "../../../responses/v2/400.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/identities/IdentityIdOrAlias.yaml b/static/idn-api/vlegacy/paths/v2/identities/IdentityIdOrAlias.yaml new file mode 100644 index 000000000..b8d606704 --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/identities/IdentityIdOrAlias.yaml @@ -0,0 +1,89 @@ +get: + tags: + - identities + summary: Retrieves the identity by ID or alias. + description: Retrieves the identity by ID or alias. + operationId: getIdentity + parameters: + - "$ref": "../../../parameters/v2/path/identityIdOrAlias.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../../schemas/v2/IdentityV2.yaml" + headers: + ETag: + description: Entity tag. + schema: + type: string + Last-Modified: + description: Last modified date. + schema: + type: string + format: date-time + Link: + description: Links to alternate or related resources. + schema: + type: string + '404': + "$ref": "../../../responses/v2/404.yaml" +patch: + tags: + - identities + summary: Updates one or more identity attributes. + description: Updates one or more attributes of an identity, found by ID or alias. + operationId: updateIdentity + parameters: + - "$ref": "../../../parameters/v2/path/identityIdOrAlias.yaml" + requestBody: + description: Identity attributes to update. + required: true + content: + application/json: + schema: + "$ref": "../../../schemas/v2/IdentityEto.yaml" + responses: + '200': + description: OK. Identity has been updated. + content: + application/json: + schema: + "$ref": "../../../schemas/v2/IdentityV2.yaml" + headers: + ETag: + description: Entity tag. + schema: + type: string + Last-Modified: + description: Last modified date. + schema: + type: string + format: date-time + Link: + description: Links to alternate or related resources. + schema: + type: string + '202': + description: Accepted. Update request accepted and is in progress. + "$ref": "../../../responses/v2/202.yaml" + '400': + "$ref": "../../../responses/v2/400.yaml" + '404': + "$ref": "../../../responses/v2/404.yaml" +delete: + tags: + - identities + summary: Deletes an identity. + description: Deletes an existing identity. + operationId: deleteIdentity + parameters: + - "$ref": "../../../parameters/v2/path/identityIdOrAlias.yaml" + responses: + '204': + "$ref": "../../../responses/v2/204.yaml" + '404': + "$ref": "../../../responses/v2/404.yaml" + '503': + "$ref": "../../../responses/v2/503.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/identities/IdentityIdOrAliasApprovals.yaml b/static/idn-api/vlegacy/paths/v2/identities/IdentityIdOrAliasApprovals.yaml new file mode 100644 index 000000000..8396e0a4f --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/identities/IdentityIdOrAliasApprovals.yaml @@ -0,0 +1,30 @@ +get: + tags: + - identities + summary: Lists the approvals. + description: Lists access request approvals owned by the given identity. + operationId: listApprovals + parameters: + - "$ref": "../../../parameters/v2/path/identityIdOrAlias.yaml" + - "$ref": "../../../parameters/v2/query/sort.yaml" + - "$ref": "../../../parameters/v2/query/offset.yaml" + - "$ref": "../../../parameters/v2/query/limit.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + type: array + items: + "$ref": "../../../schemas/v2/Approval.yaml" + headers: + X-Total-Count: + description: Total number of items, regardless of paging limits. + schema: + type: integer + format: int64 + Link: + description: Links to alternate or related resources. + schema: + type: string diff --git a/static/idn-api/vlegacy/paths/v2/identities/IdentityIdOrAliasApps.yaml b/static/idn-api/vlegacy/paths/v2/identities/IdentityIdOrAliasApps.yaml new file mode 100644 index 000000000..1c49e65b4 --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/identities/IdentityIdOrAliasApps.yaml @@ -0,0 +1,34 @@ +get: + tags: + - identities + summary: Lists available apps. + description: Lists all apps available to the given identity. The list will include + apps which have launchers created for the identity. + operationId: listApps + parameters: + - "$ref": "../../../parameters/v2/path/identityIdOrAlias.yaml" + - "$ref": "../../../parameters/v2/query/identity-apps-filters.yaml" + - "$ref": "../../../parameters/v2/query/sort.yaml" + - "$ref": "../../../parameters/v2/query/offset.yaml" + - "$ref": "../../../parameters/v2/query/limit.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + type: array + items: + "$ref": "../../../schemas/v2/App.yaml" + headers: + X-Total-Count: + description: Total number of items, regardless of paging limits. + schema: + type: integer + format: int64 + Link: + description: Links to alternate or related resources. + schema: + type: string + '404': + "$ref": "../../../responses/v2/404.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/identities/IdentityIdOrAliasLaunchers.yaml b/static/idn-api/vlegacy/paths/v2/identities/IdentityIdOrAliasLaunchers.yaml new file mode 100644 index 000000000..72e9ff352 --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/identities/IdentityIdOrAliasLaunchers.yaml @@ -0,0 +1,53 @@ +get: + tags: + - identities + summary: Lists the launchers. + description: Lists the launchers for the given identity. + operationId: listLaunchers + parameters: + - "$ref": "../../../parameters/v2/path/identityIdOrAlias.yaml" + - "$ref": "../../../parameters/v2/query/identityLaunchers/context.yaml" + - "$ref": "../../../parameters/v2/query/sort.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + type: array + items: + "$ref": "../../../schemas/v2/Launcher.yaml" + headers: + X-Total-Count: + description: Total number of items, regardless of paging limits. + schema: + type: integer + format: int64 + Link: + description: Links to alternate or related resources. + schema: + type: string + '404': + "$ref": "../../../responses/v2/404.yaml" +post: + tags: + - identities + summary: Creates a new launcher. + description: Creates a new launcher for the given identity. This endpoint is found + in links within the 'accessMethods' attribute for GET identities/{id}/apps response + body. + operationId: createLauncher + parameters: + - "$ref": "../../../parameters/v2/path/identityIdOrAlias.yaml" + - "$ref": "../../../parameters/v2/query/identityLaunchers/appId.yaml" + - "$ref": "../../../parameters/v2/query/identityLaunchers/accessProfileId.yaml" + - "$ref": "../../../parameters/v2/query/identityLaunchers/context.yaml" + responses: + '201': + description: Created. + content: + application/json: + schema: + "$ref": "../../../schemas/v2/Launcher.yaml" + '404': + "$ref": "../../../responses/v2/404.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/identities/LauncherId.yaml b/static/idn-api/vlegacy/paths/v2/identities/LauncherId.yaml new file mode 100644 index 000000000..b53c5e9df --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/identities/LauncherId.yaml @@ -0,0 +1,14 @@ +delete: + tags: + - identities + summary: Deletes a launcher. + description: Deletes an existing launcher for the given identity. + operationId: deleteLauncher + parameters: + - "$ref": "../../../parameters/v2/path/identityIdOrAlias.yaml" + - "$ref": "../../../parameters/v2/path/launcherId.yaml" + responses: + '204': + "$ref": "../../../responses/v2/204.yaml" + '404': + "$ref": "../../../responses/v2/404.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/launchers/Click.yaml b/static/idn-api/vlegacy/paths/v2/launchers/Click.yaml new file mode 100644 index 000000000..42e676104 --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/launchers/Click.yaml @@ -0,0 +1,13 @@ +post: + tags: + - launchers + summary: Records a launcher click. + description: Increments internal 'click' statistics for the launcher. + operationId: logLauncherClick + parameters: + - "$ref": "../../../parameters/v2/path/launcherId.yaml" + responses: + '204': + "$ref": "../../../responses/v2/204.yaml" + '404': + "$ref": "../../../responses/v2/404.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/launchers/LauncherId.yaml b/static/idn-api/vlegacy/paths/v2/launchers/LauncherId.yaml new file mode 100644 index 000000000..6a4e09144 --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/launchers/LauncherId.yaml @@ -0,0 +1,69 @@ +get: + tags: + - launchers + summary: Retrieves the details of the launcher. + description: Retrieves the details of the launcher. + operationId: getLauncher + parameters: + - "$ref": "../../../parameters/v2/path/launcherId.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../../schemas/v2/Launcher.yaml" + headers: + ETag: + description: Entity tag. + schema: + type: string + Last-Modified: + description: Last modified date. + schema: + type: string + format: date-time + Link: + description: Links to alternate or related resources. + schema: + type: string + '404': + "$ref": "../../../responses/v2/404.yaml" +patch: + tags: + - launchers + summary: Updates one or more attributes of a launcher. + description: Updates one or more attributes of a launcher. + operationId: updateLauncher + parameters: + - "$ref": "../../../parameters/v2/path/launcherId.yaml" + requestBody: + description: Launcher attributes to be updated. + required: true + content: + application/json: + schema: + "$ref": "../../../schemas/v2/LauncherEto.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../../schemas/v2/Launcher.yaml" + headers: + ETag: + description: Entity tag. + schema: + type: string + Last-Modified: + description: Last modified date. + schema: + type: string + format: date-time + Link: + description: Links to alternate or related resources. + schema: + type: string + '404': + "$ref": "../../../responses/v2/404.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/provisioning-activities/GetProvisioningActivity.yaml b/static/idn-api/vlegacy/paths/v2/provisioning-activities/GetProvisioningActivity.yaml new file mode 100644 index 000000000..e1926f55e --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/provisioning-activities/GetProvisioningActivity.yaml @@ -0,0 +1,31 @@ +get: + tags: + - provisioning-activities + summary: Retrieves a provisioning activity. + description: Retrieves a provisioning activity by ID. + operationId: getProvisioningActivity + parameters: + - "$ref": "../../../parameters/v2/path/provisioningActivityId.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../../schemas/v2/ProvisioningActivity.yaml" + headers: + ETag: + description: Entity tag. + schema: + type: string + Last-Modified: + description: Last modified date. + schema: + type: string + format: date-time + Link: + description: Links to alternate or related resources. + schema: + type: string + '404': + "$ref": "../../../responses/v2/404.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/provisioning-activities/ProvisioningActivitiesList.yaml b/static/idn-api/vlegacy/paths/v2/provisioning-activities/ProvisioningActivitiesList.yaml new file mode 100644 index 000000000..8dd7703ae --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/provisioning-activities/ProvisioningActivitiesList.yaml @@ -0,0 +1,30 @@ +get: + tags: + - provisioning-activities + summary: Lists the provisioning activities. + description: Lists the provisioning activities. + operationId: listProvisioningActivities + parameters: + - "$ref": "../../../parameters/v2/query/provisioning-activities-filters.yaml" + - "$ref": "../../../parameters/v2/query/provisioning-activities-sort.yaml" + - "$ref": "../../../parameters/v2/query/offset.yaml" + - "$ref": "../../../parameters/v2/query/limit.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + type: array + items: + "$ref": "../../../schemas/v2/ProvisioningActivity.yaml" + headers: + X-Total-Count: + description: Total number of items, regardless of paging limits. + schema: + type: integer + format: int64 + Link: + description: Links to alternate or related resources. + schema: + type: string diff --git a/static/idn-api/vlegacy/paths/v2/search/Entitlements.yaml b/static/idn-api/vlegacy/paths/v2/search/Entitlements.yaml new file mode 100644 index 000000000..6ea868ddf --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/search/Entitlements.yaml @@ -0,0 +1,72 @@ +get: + tags: + - search + summary: Searches and retrieves the entitlements. + description: |- + Searches and retrieves the entitlements using the [Elastic Search Query String syntax](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string-syntax) from the Query DSL in the query string. + + [BETA] This endpoint is in beta phase. + operationId: entitlementSearch + parameters: + - "$ref": "../../../parameters/v2/query/sort.yaml" + - "$ref": "../../../parameters/v2/query/offset.yaml" + - "$ref": "../../../parameters/v2/query/limit.yaml" + - "$ref": "../../../parameters/v2/query/search/fields.yaml" + - "$ref": "../../../parameters/v2/query/search/query.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + type: array + items: + "$ref": "../../../schemas/v2/search/SearchEntitlement.yaml" + headers: + X-Total-Count: + description: Total number of items, regardless of paging limits. + schema: + type: integer + format: int64 + Link: + description: Links to alternate or related resources. + schema: + type: string + '400': + "$ref": "../../../responses/v2/400.yaml" +post: + tags: + - search + summary: Searches and retrieves the entitlements. + description: |- + Searches and retrieves the entitlements using the [Elastic Search Query String syntax](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string-syntax) from the Query DSL in the query string. + + [BETA] This endpoint is in beta phase. + operationId: entitlementSearchPost + parameters: + - "$ref": "../../../parameters/v2/query/sort.yaml" + - "$ref": "../../../parameters/v2/query/offset.yaml" + - "$ref": "../../../parameters/v2/query/limit.yaml" + - "$ref": "../../../parameters/v2/query/search/fields.yaml" + - "$ref": "../../../parameters/v2/query/search/query.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + type: array + items: + "$ref": "../../../schemas/v2/search/SearchEntitlement.yaml" + headers: + X-Total-Count: + description: Total number of items, regardless of paging limits. + schema: + type: integer + format: int64 + Link: + description: Links to alternate or related resources. + schema: + type: string + '400': + "$ref": "../../../responses/v2/400.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/search/EntitlementsRunExport.yaml b/static/idn-api/vlegacy/paths/v2/search/EntitlementsRunExport.yaml new file mode 100644 index 000000000..ac1842274 --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/search/EntitlementsRunExport.yaml @@ -0,0 +1,61 @@ +get: + tags: + - search + summary: Runs csv results export job for a given search for entitlements. + description: |- + Runs csv results export job for a given search for entitlements using the [Elastic Search Query String syntax](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string-syntax) from the Query DSL in the query string. + + [BETA] This endpoint is in beta phase. + operationId: entitlementSearchExport + parameters: + - "$ref": "../../../parameters/v2/query/search/query.yaml" + - "$ref": "../../../parameters/v2/query/search/query-fields.yaml" + - "$ref": "../../../parameters/v2/query/sort.yaml" + - "$ref": "../../../parameters/v2/query/search/column-fields.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../../schemas/v2/TaskResult.yaml" + '400': + "$ref": "../../../responses/v2/400.yaml" +post: + tags: + - search + summary: Runs csv results export job for a given search for entitlements. + description: |- + Runs csv results export job for a given search for entitlements using the [Elastic Search Query String syntax](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string-syntax) from the Query DSL in the query string. + + [BETA] This endpoint is in beta phase. + operationId: entitlementSearchExportPost + parameters: + - "$ref": "../../../parameters/v2/query/sort.yaml" + - "$ref": "../../../parameters/v2/query/search/column-fields.yaml" + requestBody: + description: Query object using the query portion of the [Elastic Search Query DSL + JSON object](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl.html). + required: true + content: + application/json: + schema: + type: object + properties: + match: + type: object + properties: + displayName: + type: string + example: + match: + displayName: Thomas Edison + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../../schemas/v2/TaskResult.yaml" + '400': + "$ref": "../../../responses/v2/400.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/search/Events.yaml b/static/idn-api/vlegacy/paths/v2/search/Events.yaml new file mode 100644 index 000000000..940092603 --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/search/Events.yaml @@ -0,0 +1,72 @@ +get: + tags: + - search + summary: Searches and retrieves the events. + description: |- + Searches and retrieves the entitlements using the [Elastic Search Query String syntax](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string-syntax) from the Query DSL in the query string. + + [BETA] This endpoint is in beta phase. + operationId: runEventSearch + parameters: + - "$ref": "../../../parameters/v2/query/sort.yaml" + - "$ref": "../../../parameters/v2/query/offset.yaml" + - "$ref": "../../../parameters/v2/query/limit.yaml" + - "$ref": "../../../parameters/v2/query/search/fields.yaml" + - "$ref": "../../../parameters/v2/query/search/query.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + type: array + items: + "$ref": "../../../schemas/v2/search/SearchEvent.yaml" + headers: + X-Total-Count: + description: Total number of items, regardless of paging limits. + schema: + type: integer + format: int64 + Link: + description: Links to alternate or related resources. + schema: + type: string + '400': + "$ref": "../../../responses/v2/400.yaml" +post: + tags: + - search + summary: Searches and retrieves the events. + description: |- + Searches and retrieves the events using the [Elastic Search Query String syntax](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string-syntax) from the Query DSL in the query string. + + [BETA] This endpoint is in beta phase. + operationId: runEventSearchPost + parameters: + - "$ref": "../../../parameters/v2/query/sort.yaml" + - "$ref": "../../../parameters/v2/query/offset.yaml" + - "$ref": "../../../parameters/v2/query/limit.yaml" + - "$ref": "../../../parameters/v2/query/search/fields.yaml" + - "$ref": "../../../parameters/v2/query/search/query.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + type: array + items: + "$ref": "../../../schemas/v2/search/SearchEvent.yaml" + headers: + X-Total-Count: + description: Total number of items, regardless of paging limits. + schema: + type: integer + format: int64 + Link: + description: Links to alternate or related resources. + schema: + type: string + '400': + "$ref": "../../../responses/v2/400.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/search/Identities.yaml b/static/idn-api/vlegacy/paths/v2/search/Identities.yaml new file mode 100644 index 000000000..823719e66 --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/search/Identities.yaml @@ -0,0 +1,73 @@ +--- +get: + tags: + - search + summary: Searches and retrieves the identities. + description: |- + Searches and retrieves the identities using the [Elastic Search Query String syntax](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string-syntax) from the Query DSL in the query string. + + [BETA] This endpoint is in beta phase. + operationId: searchIdentities + parameters: + - "$ref": "../../../parameters/v2/query/sort.yaml" + - "$ref": "../../../parameters/v2/query/offset.yaml" + - "$ref": "../../../parameters/v2/query/limit.yaml" + - "$ref": "../../../parameters/v2/query/search/fields.yaml" + - "$ref": "../../../parameters/v2/query/search/query.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + type: array + items: + "$ref": "../../../schemas/v2/search/SearchIdentity.yaml" + headers: + X-Total-Count: + description: Total number of items, regardless of paging limits. + schema: + type: integer + format: int64 + Link: + description: Links to alternate or related resources. + schema: + type: string + '400': + "$ref": "../../../responses/v2/400.yaml" +post: + tags: + - search + summary: Searches and retrieves the identities. + description: |- + Searches and retrieves the identities using the query portion of the [Elastic Search Query DSL JSON object](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl.html) in the body. + + [BETA] This endpoint is in beta phase. + operationId: searchIdentitiesPost + parameters: + - "$ref": "../../../parameters/v2/query/sort.yaml" + - "$ref": "../../../parameters/v2/query/offset.yaml" + - "$ref": "../../../parameters/v2/query/limit.yaml" + - "$ref": "../../../parameters/v2/query/search/fields.yaml" + - "$ref": "../../../parameters/v2/query/search/query.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + type: array + items: + "$ref": "../../../schemas/v2/search/SearchIdentity.yaml" + headers: + X-Total-Count: + description: Total number of items, regardless of paging limits. + schema: + type: integer + format: int64 + Link: + description: Links to alternate or related resources. + schema: + type: string + '400': + "$ref": "../../../responses/v2/400.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/search/IdentitiesRunExport.yaml b/static/idn-api/vlegacy/paths/v2/search/IdentitiesRunExport.yaml new file mode 100644 index 000000000..25f48cfeb --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/search/IdentitiesRunExport.yaml @@ -0,0 +1,61 @@ +get: + tags: + - search + summary: Runs csv results export job for a given search for identities. + description: |- + Runs csv results export job for a given search for identities using the [Elastic Search Query String syntax](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string-syntax) from the Query DSL in the query string. + + [BETA] This endpoint is in beta phase. + operationId: exportIdentitySearch + parameters: + - "$ref": "../../../parameters/v2/query/search/query.yaml" + - "$ref": "../../../parameters/v2/query/search/query-fields.yaml" + - "$ref": "../../../parameters/v2/query/sort.yaml" + - "$ref": "../../../parameters/v2/query/search/column-fields.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../../schemas/v2/TaskResult.yaml" + '400': + "$ref": "../../../responses/v2/400.yaml" +post: + tags: + - search + summary: Runs csv results export job for a given search for identities. + description: |- + Runs csv results export job for a given search for identities using the [Elastic Search Query String syntax](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string-syntax) from the Query DSL in the query string. + + [BETA] This endpoint is in beta phase. + operationId: runIdentitySearch + parameters: + - "$ref": "../../../parameters/v2/query/sort.yaml" + - "$ref": "../../../parameters/v2/query/search/column-fields.yaml" + requestBody: + description: Query object using the query portion of the [Elastic Search Query DSL + JSON object](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl.html). + required: true + content: + application/json: + schema: + type: object + properties: + match: + type: object + properties: + displayName: + type: string + example: + match: + displayName: Thomas Edison + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../../schemas/v2/TaskResult.yaml" + '400': + "$ref": "../../../responses/v2/400.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/search/IndexMappings.yaml b/static/idn-api/vlegacy/paths/v2/search/IndexMappings.yaml new file mode 100644 index 000000000..b63763d58 --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/search/IndexMappings.yaml @@ -0,0 +1,19 @@ +get: + tags: + - search + summary: Retrieves the mappings and operators for the search service for the given + index path. + description: Returns a JSON map of all the objects, fields, types and operators + that are searchable. + operationId: getSearchIndexMapping + parameters: + - "$ref": "../../../parameters/v2/path/index.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../../schemas/v2/search/Mapping.yaml" + '400': + "$ref": "../../../responses/v2/400.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/search/Mappings.yaml b/static/idn-api/vlegacy/paths/v2/search/Mappings.yaml new file mode 100644 index 000000000..3283263e3 --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/search/Mappings.yaml @@ -0,0 +1,16 @@ +get: + tags: + - search + summary: Retrieves the mappings and operators for the search service. + description: Returns a JSON map of all the objects, fields, types and operators + that are searchable. + operationId: getSearchMapping + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../../schemas/v2/search/Mapping.yaml" + '400': + "$ref": "../../../responses/v2/400.yaml" diff --git a/static/idn-api/vlegacy/paths/v2/search/RunExport.yaml b/static/idn-api/vlegacy/paths/v2/search/RunExport.yaml new file mode 100644 index 000000000..9cde2912f --- /dev/null +++ b/static/idn-api/vlegacy/paths/v2/search/RunExport.yaml @@ -0,0 +1,65 @@ +get: + tags: + - search + summary: Runs csv results export job for a given search query. + description: |- + Runs csv results export job for a given search query using the [Elastic Search Query String syntax](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string-syntax) from the Query DSL in the query string. + + [BETA] This endpoint is in beta phase. + operationId: exportSearchCsv + parameters: + - "$ref": "../../../parameters/v2/query/search/query.yaml" + - "$ref": "../../../parameters/v2/query/search/query-fields.yaml" + - "$ref": "../../../parameters/v2/query/sort.yaml" + - "$ref": "../../../parameters/v2/query/search/fields.yaml" + - "$ref": "../../../parameters/v2/query/search/index.yaml" + - "$ref": "../../../parameters/v2/query/search/type.yaml" + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../../schemas/v2/TaskResult.yaml" + '400': + "$ref": "../../../responses/v2/400.yaml" +post: + tags: + - search + summary: Runs csv results export job for a given search query. + description: |- + Runs csv results export job for a given search query using the [Elastic Search Query String syntax](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-query-string-query.html#query-string-syntax) from the Query DSL in the query string. + + [BETA] This endpoint is in beta phase. + operationId: exportSearchCsvPost + parameters: + - "$ref": "../../../parameters/v2/query/sort.yaml" + - "$ref": "../../../parameters/v2/query/search/column-fields.yaml" + - "$ref": "../../../parameters/v2/query/search/index.yaml" + - "$ref": "../../../parameters/v2/query/search/type.yaml" + requestBody: + description: Query object using the query portion of the [Elastic Search Query DSL + JSON object](https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl.html). + required: true + content: + application/json: + schema: + type: object + properties: + match: + type: object + properties: + displayName: + type: string + example: + match: + displayName: Thomas Edison + responses: + '200': + description: OK. + content: + application/json: + schema: + "$ref": "../../../schemas/v2/TaskResult.yaml" + '400': + "$ref": "../../../responses/v2/400.yaml" diff --git a/static/idn-api/vlegacy/responses/v2/201.yaml b/static/idn-api/vlegacy/responses/v2/201.yaml new file mode 100644 index 000000000..37ac5fdaa --- /dev/null +++ b/static/idn-api/vlegacy/responses/v2/201.yaml @@ -0,0 +1 @@ +description: Created. \ No newline at end of file diff --git a/static/idn-api/vlegacy/responses/v2/202.yaml b/static/idn-api/vlegacy/responses/v2/202.yaml new file mode 100644 index 000000000..1d6388dde --- /dev/null +++ b/static/idn-api/vlegacy/responses/v2/202.yaml @@ -0,0 +1,6 @@ +description: Accepted. +headers: + Link: + description: Link to the background task. + schema: + type: string diff --git a/static/idn-api/vlegacy/responses/v2/204.yaml b/static/idn-api/vlegacy/responses/v2/204.yaml new file mode 100644 index 000000000..97251a8ee --- /dev/null +++ b/static/idn-api/vlegacy/responses/v2/204.yaml @@ -0,0 +1 @@ +description: No content. \ No newline at end of file diff --git a/static/idn-api/vlegacy/responses/v2/400.yaml b/static/idn-api/vlegacy/responses/v2/400.yaml new file mode 100644 index 000000000..adc107676 --- /dev/null +++ b/static/idn-api/vlegacy/responses/v2/400.yaml @@ -0,0 +1,5 @@ +description: Bad request. +content: + application/json: + schema: + "$ref": "../../responses/v2/ExceptionObject.yaml" diff --git a/static/idn-api/vlegacy/responses/v2/403.yaml b/static/idn-api/vlegacy/responses/v2/403.yaml new file mode 100644 index 000000000..a89eda290 --- /dev/null +++ b/static/idn-api/vlegacy/responses/v2/403.yaml @@ -0,0 +1 @@ +description: Forbidden. \ No newline at end of file diff --git a/static/idn-api/vlegacy/responses/v2/404.yaml b/static/idn-api/vlegacy/responses/v2/404.yaml new file mode 100644 index 000000000..1a773b900 --- /dev/null +++ b/static/idn-api/vlegacy/responses/v2/404.yaml @@ -0,0 +1 @@ +description: Not found. \ No newline at end of file diff --git a/static/idn-api/vlegacy/responses/v2/503.yaml b/static/idn-api/vlegacy/responses/v2/503.yaml new file mode 100644 index 000000000..57ea9b8df --- /dev/null +++ b/static/idn-api/vlegacy/responses/v2/503.yaml @@ -0,0 +1,10 @@ +description: Service unavailable. +headers: + X-Retry-After: + description: Recommended number of seconds to wait before you retry the request. + schema: + type: integer +content: + application/json: + schema: + "$ref": "../../responses/v2/ExceptionObject.yaml" diff --git a/static/idn-api/vlegacy/responses/v2/ExceptionObject.yaml b/static/idn-api/vlegacy/responses/v2/ExceptionObject.yaml new file mode 100644 index 000000000..45ef76587 --- /dev/null +++ b/static/idn-api/vlegacy/responses/v2/ExceptionObject.yaml @@ -0,0 +1,32 @@ +type: object +properties: + code: + type: integer + message: + type: string + errors: + type: array + items: + type: object + properties: + codes: + type: array + items: + type: string + properties: + type: array + items: + type: object + properties: {} + object: + type: string + message: + type: string + field: + type: string + rejectedValue: + type: object + properties: {} +required: + - code + - message \ No newline at end of file diff --git a/static/idn-api/vlegacy/responses/v2/MultiStatusObject.yaml b/static/idn-api/vlegacy/responses/v2/MultiStatusObject.yaml new file mode 100644 index 000000000..9b30afaf3 --- /dev/null +++ b/static/idn-api/vlegacy/responses/v2/MultiStatusObject.yaml @@ -0,0 +1,15 @@ +type: object +properties: + success: + type: array + items: + type: string + fail: + type: array + items: + type: object + properties: + id: + type: string + message: + type: string \ No newline at end of file diff --git a/static/idn-api/vlegacy/schemas/v2/AccessProfile.yaml b/static/idn-api/vlegacy/schemas/v2/AccessProfile.yaml new file mode 100644 index 000000000..2493324c0 --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/AccessProfile.yaml @@ -0,0 +1,38 @@ +type: object +properties: + name: + type: string + minLength: 1 + maxLength: 255 + description: + type: string + maxLength: 255 + ownerId: + type: string + sourceId: + type: string + entitlements: + type: array + items: + type: string + approvalSchemes: + type: string + description: Comma-separated list of approval schemes. Each approval scheme is one of
        + - manager
        + - appOwner
        + - sourceOwner
        + - accessProfileOwner
        + - workgroup:\ + revokeRequestApprovalSchemes: + type: string + description: Comma-separated list of revoke request approval schemes. Each approval scheme is one of
        + - manager
        + - sourceOwner
        + - accessProfileOwner
        + - workgroup:\ + requestCommentsRequired: + type: boolean + deniedCommentsRequired: + type: boolean + disabled: + type: boolean diff --git a/static/idn-api/vlegacy/schemas/v2/AccessProfileCreateEto.yaml b/static/idn-api/vlegacy/schemas/v2/AccessProfileCreateEto.yaml new file mode 100644 index 000000000..0380dc336 --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/AccessProfileCreateEto.yaml @@ -0,0 +1,44 @@ +type: object +properties: + name: + type: string + minLength: 1 + maxLength: 255 + description: + type: string + maxLength: 255 + sourceId: + type: string + ownerId: + type: string + entitlements: + type: array + items: + type: string + approvalSchemes: + type: string + description: Comma-separated list of approval schemes. Each approval scheme is one of
        + - manager
        + - appOwner
        + - sourceOwner
        + - accessProfileOwner
        + - workgroup:\ + revokeRequestApprovalSchemes: + type: string + description: Comma-separated list of revoke request approval schemes. Each approval scheme is one of
        + - manager
        + - sourceOwner
        + - accessProfileOwner
        + - workgroup:\ + requestCommentsRequired: + type: boolean + deniedCommentsRequired: + type: boolean + disabled: + type: boolean +required: + - name + - description + - ownerId + - sourceId + - entitlements diff --git a/static/idn-api/vlegacy/schemas/v2/AccessRequest.yaml b/static/idn-api/vlegacy/schemas/v2/AccessRequest.yaml new file mode 100644 index 000000000..7ed3a1c91 --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/AccessRequest.yaml @@ -0,0 +1,65 @@ +type: object +properties: + approvals: + type: array + items: + "$ref": '../../schemas/v2/Approval.yaml' + completionDate: + type: string + format: date-time + completionStatus: + type: string + enum: + - Success + - Failure + - Incomplete + - Pending + dateCreated: + type: string + format: date-time + errors: + type: array + items: + type: string + executionStatus: + type: string + enum: + - Executing + - Verifying + - Terminated + - Completed + id: + type: string + lastUpdated: + type: string + format: date-time + name: + type: string + priority: + type: string + requestSummaries: + type: array + items: + "$ref": '../../schemas/v2/RequestSummary.yaml' + requesterId: + type: string + requesterDisplayName: + type: string + source: + type: string + sourceName: + type: string + targetName: + type: string + targetDisplayName: + type: string + targetId: + type: string + type: + type: string + warnings: + type: array + items: + type: string + workflowStep: + type: string diff --git a/static/idn-api/vlegacy/schemas/v2/Account.yaml b/static/idn-api/vlegacy/schemas/v2/Account.yaml new file mode 100644 index 000000000..2d6deb9c4 --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/Account.yaml @@ -0,0 +1,46 @@ +type: object +properties: + accountId: + type: string + application: + "$ref": '../../schemas/v2/AccountApplication.yaml' + attributes: + "$ref": '../../schemas/v2/AccountAttributes.yaml' + authoritative: + type: boolean + description: + type: string + disabled: + type: boolean + displayName: + type: string + features: + type: array + items: + type: string + id: + type: string + identity: + "$ref": '../../schemas/v2/AccountIdentity.yaml' + locked: + type: boolean + meta: + "$ref": '../../schemas/v2/AccountMeta.yaml' + name: + type: string + nativeIdentity: + type: string + pendingAccessRequestIds: + type: array + items: + type: string + schema: + type: string + supportsPasswordChange: + type: boolean + systemAccount: + type: boolean + uncorrelated: + type: boolean + uuid: + type: string diff --git a/static/idn-api/vlegacy/schemas/v2/AccountApplication.yaml b/static/idn-api/vlegacy/schemas/v2/AccountApplication.yaml new file mode 100644 index 000000000..d473687e1 --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/AccountApplication.yaml @@ -0,0 +1,8 @@ +type: object +properties: + id: + type: string + name: + type: string + type: + type: string diff --git a/static/idn-api/vlegacy/schemas/v2/AccountAttributes.yaml b/static/idn-api/vlegacy/schemas/v2/AccountAttributes.yaml new file mode 100644 index 000000000..249a0fdd0 --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/AccountAttributes.yaml @@ -0,0 +1,48 @@ +type: object +properties: + accountFlags: + type: array + items: + type: string + cn: + type: string + displayName: + type: string + distinguishedName: + type: string + domain: + type: string + givenName: + type: string + idNowDescription: + type: string + mail: + type: string + memberOf: + type: array + items: + type: string + msDS-PrincipalName: + type: string + msNPAllowDialin: + type: string + objectClass: + type: array + items: + type: string + objectSid: + type: string + objectguid: + type: string + passwordLastSet: + type: integer + primaryGroupID: + type: string + pwdLastSet: + type: string + sAMAccountName: + type: string + sn: + type: string + userPrincipalName: + type: string diff --git a/static/idn-api/vlegacy/schemas/v2/AccountIdentity.yaml b/static/idn-api/vlegacy/schemas/v2/AccountIdentity.yaml new file mode 100644 index 000000000..aeae0fc86 --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/AccountIdentity.yaml @@ -0,0 +1,6 @@ +type: object +properties: + id: + type: string + name: + type: string diff --git a/static/idn-api/vlegacy/schemas/v2/AccountMeta.yaml b/static/idn-api/vlegacy/schemas/v2/AccountMeta.yaml new file mode 100644 index 000000000..dc59001ec --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/AccountMeta.yaml @@ -0,0 +1,8 @@ +type: object +properties: + created: + type: string + modified: + type: string + type: + type: string diff --git a/static/idn-api/vlegacy/schemas/v2/App.yaml b/static/idn-api/vlegacy/schemas/v2/App.yaml new file mode 100644 index 000000000..f92248639 --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/App.yaml @@ -0,0 +1,36 @@ +type: object +properties: + id: + type: string + name: + type: string + description: + type: string + dateCreated: + type: string + format: date-time + lastUpdated: + type: string + format: date-time + icon: + type: string + accessMethods: + type: array + items: + type: object + properties: + name: + type: string + description: + type: string + href: + type: string + method: + type: string + rel: + type: string + enum: + - LAUNCHER + - REQUEST + status: + type: string diff --git a/static/idn-api/vlegacy/schemas/v2/Approval.yaml b/static/idn-api/vlegacy/schemas/v2/Approval.yaml new file mode 100644 index 000000000..c985110eb --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/Approval.yaml @@ -0,0 +1,42 @@ +type: object +properties: + id: + type: string + description: + type: string + accessProfileName: + type: string + accessProfileDescription: + type: string + appName: + type: string + appId: + type: string + accessRequestId: + type: string + ownerId: + type: string + ownerName: + type: string + requesterId: + type: string + requesterName: + type: string + requesteeId: + type: string + requesteeName: + type: string + state: + type: string + enum: + - Pending + - Approved + - Rejected + completed: + type: boolean + created: + type: string + format: date-time + modified: + type: string + format: date-time diff --git a/static/idn-api/vlegacy/schemas/v2/ApprovalConfigEto.yaml b/static/idn-api/vlegacy/schemas/v2/ApprovalConfigEto.yaml new file mode 100644 index 000000000..97c00d1fd --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/ApprovalConfigEto.yaml @@ -0,0 +1,15 @@ +type: object +properties: + daysTillEscalation: + type: integer + daysBetweenReminders: + type: integer + maxReminders: + type: integer + fallbackApprover: + type: string +required: + - daysTillEscalation + - daysBetweenReminders + - maxReminders + - fallbackApprover diff --git a/static/idn-api/vlegacy/schemas/v2/AuthDetails.yaml b/static/idn-api/vlegacy/schemas/v2/AuthDetails.yaml new file mode 100644 index 000000000..a11806bc2 --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/AuthDetails.yaml @@ -0,0 +1,20 @@ +type: object +properties: + auth: + type: object + properties: + service: + type: string + encryption: + type: string + publicKey: + type: string + org: + type: object + properties: + authErrorText: + type: string + ssoServerUrl: + type: string + gotoOnFail: + type: string diff --git a/static/idn-api/vlegacy/schemas/v2/CommentEto.yaml b/static/idn-api/vlegacy/schemas/v2/CommentEto.yaml new file mode 100644 index 000000000..1ecdce758 --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/CommentEto.yaml @@ -0,0 +1,4 @@ +type: object +properties: + comment: + type: string \ No newline at end of file diff --git a/static/idn-api/vlegacy/schemas/v2/DynamicSchemaEto.yaml b/static/idn-api/vlegacy/schemas/v2/DynamicSchemaEto.yaml new file mode 100644 index 000000000..3acee3193 --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/DynamicSchemaEto.yaml @@ -0,0 +1,5 @@ +type: object +description: Dynamic schema, with no predefined attributes. +properties: + attribute: + type: string \ No newline at end of file diff --git a/static/idn-api/vlegacy/schemas/v2/Entitlement.yaml b/static/idn-api/vlegacy/schemas/v2/Entitlement.yaml new file mode 100644 index 000000000..30d7705ef --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/Entitlement.yaml @@ -0,0 +1,20 @@ +type: object +properties: + id: + type: string + applicationName: + type: string + applicationId: + type: string + attribute: + type: string + value: + type: string + displayName: + type: string + displayableName: + type: string + description: + type: string + privileged: + type: boolean diff --git a/static/idn-api/vlegacy/schemas/v2/ForwardApprovalEto.yaml b/static/idn-api/vlegacy/schemas/v2/ForwardApprovalEto.yaml new file mode 100644 index 000000000..049c2935e --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/ForwardApprovalEto.yaml @@ -0,0 +1,12 @@ +type: object +required: + - newOwnerId +properties: + newOwnerId: + type: string + minLength: 1 + maxLength: 255 + comment: + type: string + minLength: 1 + maxLength: 255 diff --git a/static/idn-api/vlegacy/schemas/v2/IdentityEto.yaml b/static/idn-api/vlegacy/schemas/v2/IdentityEto.yaml new file mode 100644 index 000000000..d137483e7 --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/IdentityEto.yaml @@ -0,0 +1,40 @@ +type: object +description: One or more attributes of an identity. +properties: + encryptionKey: + type: string + encryptionCheck: + type: string + altAuthVia: + description: Alternate authentication type. + type: string + enum: + - ASK + - SMS_PERSONAL + - VOICE_PERSONAL + - SMS_WORK + - VOICE_WORK + - KBA + - EMAIL_PERSONAL + - EMAIL_WORK + - PASSWORD + - INTEGRATION + altAuthViaIntegrationData: + type: string + altPhone: + description: Alternate phone. + type: string + altEmail: + description: Alternate email. + type: string + identityFlags: + type: object + properties: + RESPONSIVE_LAUNCHPAD: + type: string +example: + altPhone: '8085551212' + altEmail: example@sailpoint.com + altAuthVia: SMS + identityFlags: + RESPONSIVE_LAUNCHPAD: 'true' diff --git a/static/idn-api/vlegacy/schemas/v2/IdentityV2.yaml b/static/idn-api/vlegacy/schemas/v2/IdentityV2.yaml new file mode 100644 index 000000000..5254d7f01 --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/IdentityV2.yaml @@ -0,0 +1,64 @@ +type: object +properties: + id: + type: string + alias: + type: string + uid: + type: string + name: + type: string + uuid: + type: string + status: + type: string + dateCreated: + type: string + format: date-time + lastUpdated: + type: string + format: date-time + encryptionKey: + type: string + encryptionCheck: + type: string + passwordResetSinceLastLogin: + type: boolean + usageCertAttested: + type: string + format: date-time + identityFlags: + type: object + properties: {} + enabled: + type: boolean + altAuthVia: + type: string + altAuthViaIntegrationData: + type: string + kbaAnswers: + type: integer + disablePasswordReset: + type: boolean + ptaSourceId: + type: string + supportsPasswordPush: + type: boolean + attributes: + "$ref": "../../schemas/v2/DynamicSchemaEto.yaml" + role: + type: array + items: + type: string + phone: + description: Work phone. + type: string + email: + description: Work email. + type: string + altEmail: + type: string + altPhone: + type: string + employeeNumber: + type: string diff --git a/static/idn-api/vlegacy/schemas/v2/Launcher.yaml b/static/idn-api/vlegacy/schemas/v2/Launcher.yaml new file mode 100644 index 000000000..d29fbeae0 --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/Launcher.yaml @@ -0,0 +1,34 @@ +type: object +properties: + id: + type: string + name: + type: string + description: + type: string + dateCreated: + type: string + format: date-time + lastUpdated: + type: string + format: date-time + icon: + type: string + state: + type: string + usageCertText: + type: string + usageCertAttest: + type: string + format: date-time + account: + type: object + properties: + id: + type: string + name: + type: string + links: + type: array + items: + "$ref": "../../schemas/v2/LauncherLink.yaml" diff --git a/static/idn-api/vlegacy/schemas/v2/LauncherEto.yaml b/static/idn-api/vlegacy/schemas/v2/LauncherEto.yaml new file mode 100644 index 000000000..306774b9a --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/LauncherEto.yaml @@ -0,0 +1,4 @@ +type: object +properties: + usageCertAttested: + type: boolean diff --git a/static/idn-api/vlegacy/schemas/v2/LauncherLink.yaml b/static/idn-api/vlegacy/schemas/v2/LauncherLink.yaml new file mode 100644 index 000000000..6fc6c4fec --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/LauncherLink.yaml @@ -0,0 +1,18 @@ +type: object +properties: + id: + type: string + name: + type: string + description: + type: string + dateCreated: + type: string + format: date-time + lastUpdated: + type: string + format: date-time + href: + type: string + rel: + type: string \ No newline at end of file diff --git a/static/idn-api/vlegacy/schemas/v2/Notification.yaml b/static/idn-api/vlegacy/schemas/v2/Notification.yaml new file mode 100644 index 000000000..70640f065 --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/Notification.yaml @@ -0,0 +1,13 @@ +type: object +properties: + type: + type: string + byEmail: + type: boolean + thresholds: + type: object + properties: + healthy: + type: string + unhealthy: + type: string diff --git a/static/idn-api/vlegacy/schemas/v2/Org.yaml b/static/idn-api/vlegacy/schemas/v2/Org.yaml new file mode 100644 index 000000000..78e6f1648 --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/Org.yaml @@ -0,0 +1,104 @@ +--- +type: object +properties: + id: + type: string + name: + type: string + description: + type: string + dateCreated: + type: string + format: date-time + lastUpdated: + type: string + format: date-time + scriptName: + type: string + ssoDomain: + type: string + status: + type: string + enum: + - inactive + - active + - demo + - test + maxRegisteredIdentities: + type: integer + identityCount: + type: integer + kbaReqForAuthn: + type: integer + kbaReqAnswers: + type: integer + lockoutAttemptThreshold: + type: integer + lockoutTimeMinutes: + type: integer + usageCertRequired: + type: boolean + adminStrongAuthRequired: + type: boolean + enableExternalPasswordChange: + type: boolean + enablePasswordReplay: + type: boolean + enableAutomaticPasswordReplay: + type: boolean + netmasks: + type: array + items: + type: string + countryCodes: + type: array + items: + type: string + whiteList: + type: boolean + emailTestMode: + type: boolean + emailTestAddress: + type: string + format: email + usernameEmptyText: + type: string + usernameLabel: + type: string + enableAutomationGeneration: + type: boolean + passwordReplayState: + type: string + enum: + - enabled + - passive + - disabled + systemNotificationConfig: + type: object + properties: + notifications: + type: array + items: + "$ref": '../../schemas/v2/Notification.yaml' + recipientType: + type: string + enum: + - allAdmins + - specificIdentities + systemNotificationEmails: + type: array + items: + type: string + format: email + loginUrl: + type: string + redirectPatterns: + type: array + items: + type: string + styleHash: + type: string + approvalConfig: + "$ref": '../../schemas/v2/ApprovalConfigEto.yaml' + ssoPartnerSource: + type: string diff --git a/static/idn-api/vlegacy/schemas/v2/OrgEto.yaml b/static/idn-api/vlegacy/schemas/v2/OrgEto.yaml new file mode 100644 index 000000000..e752ef37d --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/OrgEto.yaml @@ -0,0 +1,65 @@ +type: object +properties: + countryCodes: + type: array + items: + type: string + enableExternalPasswordChange: + type: boolean + enableAutomaticPasswordReplay: + type: boolean + enableAutomationGeneration: + type: boolean + kbaReqAnswers: + type: integer + format: int32 + kbaReqForAuthn: + type: integer + format: int32 + lockoutAttemptThreshold: + type: integer + format: int32 + lockoutTimeMinutes: + type: integer + format: int32 + loginUrl: + type: string + netmasks: + type: array + items: + type: string + notifyAuthenticationSettingChange: + type: boolean + passwordReplayState: + type: string + enum: + - enabled + - passive + - disabled + preferredIdentityInviteTemplate: + type: string + redirectPatterns: + type: array + items: + type: string + ssoPartnerSource: + type: string + systemNotificationEmails: + type: array + items: + type: string + format: email + trackAnalytics: + type: boolean + usageCertRequired: + type: boolean + usageCertText: + type: string + usernameEmptyText: + type: string + usernameLabel: + type: string + whiteList: + type: boolean + approvalConfig: + "$ref": '../../schemas/v2/ApprovalConfigEto.yaml' diff --git a/static/idn-api/vlegacy/schemas/v2/ProvisioningActivity.yaml b/static/idn-api/vlegacy/schemas/v2/ProvisioningActivity.yaml new file mode 100644 index 000000000..c4f0ad004 --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/ProvisioningActivity.yaml @@ -0,0 +1,43 @@ +type: object +properties: + id: + type: string + name: + type: string + dateCreated: + type: string + format: date-time + lastUpdated: + type: string + format: date-time + operation: + type: string + status: + type: string + enum: + - Committed + - Failed + - Finished + - Not Verifiable + - Pending + - Retry + sourceId: + type: string + sourceName: + type: string + accountName: + type: string + ownerName: + type: string + approverName: + type: string + warnings: + type: array + items: + type: string + errors: + type: array + items: + type: string + provisioningPlan: + type: string diff --git a/static/idn-api/vlegacy/schemas/v2/RequestSummary.yaml b/static/idn-api/vlegacy/schemas/v2/RequestSummary.yaml new file mode 100644 index 000000000..43c88ca6c --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/RequestSummary.yaml @@ -0,0 +1,6 @@ +type: object +properties: + name: + type: string + description: + type: string \ No newline at end of file diff --git a/static/idn-api/vlegacy/schemas/v2/TaskResult.yaml b/static/idn-api/vlegacy/schemas/v2/TaskResult.yaml new file mode 100644 index 000000000..4fa93e018 --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/TaskResult.yaml @@ -0,0 +1,54 @@ +type: object +properties: + type: + type: string + id: + type: string + name: + type: string + description: + type: string + parentName: + type: string + launcher: + type: string + completed: + type: string + format: date-time + launched: + type: string + format: date-time + completionStatus: + type: string + enum: + - Success + - Warning + - Error + - Terminated + - TempError + messages: + type: array + items: + type: object + properties: + localizedText: + type: string + type: + type: string + enum: + - Info + - Warn + - Error + returns: + type: array + items: + type: object + properties: + attributeName: + type: string + displayLabel: + type: string + attributes: + "$ref": '../../schemas/v2/DynamicSchemaEto.yaml' + progress: + type: string diff --git a/static/idn-api/vlegacy/schemas/v2/search/Mapping.yaml b/static/idn-api/vlegacy/schemas/v2/search/Mapping.yaml new file mode 100644 index 000000000..990a21b36 --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/search/Mapping.yaml @@ -0,0 +1,6 @@ +type: object +properties: + mappings: + type: object + operators: + type: object diff --git a/static/idn-api/vlegacy/schemas/v2/search/SearchEntitlement.yaml b/static/idn-api/vlegacy/schemas/v2/search/SearchEntitlement.yaml new file mode 100644 index 000000000..edd549bcc --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/search/SearchEntitlement.yaml @@ -0,0 +1,29 @@ +type: object +properties: + id: + type: string + name: + type: string + displayName: + type: string + description: + type: string + source: + type: object + properties: + id: + type: string + name: + type: string + privileged: + type: boolean + attribute: + type: string + value: + type: string + modified: + type: string + format: date-time + synced: + type: string + format: date-time diff --git a/static/idn-api/vlegacy/schemas/v2/search/SearchEvent.yaml b/static/idn-api/vlegacy/schemas/v2/search/SearchEvent.yaml new file mode 100644 index 000000000..35000a9a2 --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/search/SearchEvent.yaml @@ -0,0 +1,75 @@ +type: object +properties: + id: + type: string + action: + type: string + type: + type: string + created: + type: string + format: date-time + synced: + type: string + format: date-time + actor: + type: object + properties: + name: + type: string + type: + type: string + target: + type: object + properties: + name: + type: string + type: + type: string + stack: + type: string + requestId: + type: string + hostname: + type: string + ipAddress: + type: string + attributes: + type: object + description: Dynamic schema + properties: + error: + type: string + reviewer: + type: object + properties: + name: + type: string + type: + type: string + comments: + type: string + requester: + type: object + properties: + name: + type: string + type: + type: string + comments: + type: string + oldValue: + type: string + newValue: + type: string + accountName: + type: string + sourceName: + type: string + SSO: + type: object + properties: + contextId: + type: string + ipAddress: + type: string diff --git a/static/idn-api/vlegacy/schemas/v2/search/SearchIdentity.yaml b/static/idn-api/vlegacy/schemas/v2/search/SearchIdentity.yaml new file mode 100644 index 000000000..bb29b500f --- /dev/null +++ b/static/idn-api/vlegacy/schemas/v2/search/SearchIdentity.yaml @@ -0,0 +1,193 @@ +type: object +properties: + id: + type: string + firstName: + type: string + lastName: + type: string + displayName: + type: string + name: + type: string + email: + type: string + created: + type: string + format: date-time + modified: + type: string + format: date-time + synced: + type: string + format: date-time + phone: + type: string + inactive: + type: boolean + status: + type: string + employeeNumber: + type: string + source: + type: object + properties: + id: + type: string + name: + type: string + identityProfile: + type: object + properties: + id: + type: string + name: + type: string + manager: + type: object + properties: + id: + type: string + name: + type: string + displayName: + type: string + attributes: + type: object + description: Dynamic schema, with no predefined attributes. + properties: + attribute: + type: string + processingState: + type: string + processingDetails: + type: object + properties: + date: + type: string + format: date-time + stage: + type: string + retryCount: + type: integer + stackTrace: + type: string + message: + type: string + accountCount: + type: integer + accounts: + type: array + items: + type: object + properties: + id: + type: string + name: + type: string + accountId: + type: string + source: + type: object + description: '' + properties: + id: + type: string + name: + type: string + type: + type: string + disabled: + type: boolean + locked: + type: boolean + manuallyCorrelated: + type: boolean + privileged: + type: boolean + passwordLastSet: + type: string + format: date-time + created: + type: string + format: date-time + entitlementAttributes: + type: object + description: Dynamic schema, with no predefined attributes. + properties: + attribute: + type: string + appCount: + type: integer + apps: + type: array + items: + type: object + properties: + id: + type: string + name: + type: string + source: + type: object + description: '' + properties: + id: + type: string + name: + type: string + account: + properties: + id: + type: string + accountId: + type: string + accessCount: + type: integer + entitlementCount: + type: integer + roleCount: + type: integer + accessProfileCount: + type: integer + access: + type: array + items: + type: object + properties: + id: + type: string + type: + type: string + displayName: + type: string + name: + type: string + description: + type: string + source: + type: object + description: '' + properties: + id: + type: string + name: + type: string + owner: + type: object + description: '' + properties: + id: + type: string + name: + type: string + displayName: + type: string + privileged: + type: boolean + attribute: + type: string + value: + type: string + disabled: + type: boolean diff --git a/static/idn-api/vlegacy/securitySchemes/OAuth2.yaml b/static/idn-api/vlegacy/securitySchemes/OAuth2.yaml new file mode 100644 index 000000000..6a971aa30 --- /dev/null +++ b/static/idn-api/vlegacy/securitySchemes/OAuth2.yaml @@ -0,0 +1,19 @@ +type: oauth2 +description: >- + OAuth2 Bearer token (JWT). See + [https://community.sailpoint.com/t5/IdentityNow-Wiki/Best-Practices-IdentityNow-REST-API-Authentication/ta-p/79566](Best Practices: IdentityNow REST API Authentication) +flows: + authorizationCode: + authorizationUrl: 'https://{tenant}.identitynow.com/oauth/authorize' + tokenUrl: 'https://{tenant}.identitynow.com/oauth/token' + scopes: + 'idn:task-definition:read': Task Definition read access + 'idn:task-definition:write': Task Definition write access + 'idn:task-management:read': Task Management read access (TaskStatus) + 'idn:task-management:write': Task Management write access (TaskInvocation) + 'idn:service-desk-integration:read': Service Desk integration read access + 'idn:service-desk-integration:write': Service Desk integration write access + 'idn:managed-cluster:read': ManagedCluster read access + 'idn:managed-cluster-log-config:read': ManagedCluster log configuration read access + 'idn:managed-cluster-log-config:write': ManagedCluster log configuration write access + 'idn:managed-cluster:upgrade': ManagedCluster client version upgrade access diff --git a/static/idn-api/vlegacy/v2.yaml b/static/idn-api/vlegacy/v2.yaml new file mode 100644 index 000000000..11cca059a --- /dev/null +++ b/static/idn-api/vlegacy/v2.yaml @@ -0,0 +1,85 @@ +openapi: 3.0.1 +info: + title: SailPoint SaaS API + version: 2.0.0 +components: + securitySchemes: + bearerAuth: + $ref: './securitySchemes/OAuth2.yaml' +tags: + - name: access-profiles + - name: access-requests + - name: accounts + - name: approvals + - name: identities + - name: launchers + - name: org + - name: provisioning-activities + - name: search + - name: task-results +paths: + '/access-profiles': + $ref: './paths/v2/AccessProfiles.yaml' + '/access-profiles/{accessProfileId}': + $ref: './paths/v2/AccessProfileId.yaml' + '/access-profiles/{accessProfileId}/entitlements': + $ref: './paths/v2/AccessProfileEntitlements.yaml' + '/access-requests': + $ref: './paths/v2/AccessRequests.yaml' + '/accounts': + $ref: './paths/v2/Accounts.yaml' + '/accounts/{id}': + $ref: './paths/v2/AccountsWithId.yaml' + '/approvals': + $ref: './paths/v2/approvals/ApprovalsList.yaml' + '/approvals/{approvalId}/approve-request': + $ref: './paths/v2/approvals/ApproveRequest.yaml' + '/approvals/{approvalId}/forward': + $ref: './paths/v2/approvals/Forward.yaml' + '/approvals/{approvalId}/reject-request': + $ref: './paths/v2/approvals/RejectRequest.yaml' + '/identities': + $ref: './paths/v2/identities/Identities.yaml' + '/identities/{identityIdOrAlias}': + $ref: './paths/v2/identities/IdentityIdOrAlias.yaml' + '/identities/{identityIdOrAlias}/approvals': + $ref: './paths/v2/identities/IdentityIdOrAliasApprovals.yaml' + '/identities/{identityIdOrAlias}/apps': + $ref: './paths/v2/identities/IdentityIdOrAliasApps.yaml' + '/identities/{identityIdOrAlias}/launchers': + $ref: './paths/v2/identities/IdentityIdOrAliasLaunchers.yaml' + '/identities/{identityIdOrAlias}/launchers/{launcherId}': + $ref: './paths/v2/identities/LauncherId.yaml' + '/identities/bulk-lock': + $ref: './paths/v2/identities/IdentitiesBulkLock.yaml' + '/launchers/{launcherId}': + $ref: './paths/v2/launchers/LauncherId.yaml' + '/launchers/{launcherId}/click': + $ref: './paths/v2/launchers/Click.yaml' + '/org': + $ref: './paths/v2/Orgs.yaml' + '/provisioning-activities': + $ref: './paths/v2/provisioning-activities/ProvisioningActivitiesList.yaml' + '/provisioning-activities/{provisioningActivityId}': + $ref: './paths/v2/provisioning-activities/GetProvisioningActivity.yaml' + '/search': + $ref: './paths/v2/Search.yaml' + '/search/runExport': + "$ref": './paths/v2/search/RunExport.yaml' + '/search/identities': + "$ref": './paths/v2/search/Identities.yaml' + '/search/identities/runExport': + "$ref": './paths/v2/search/IdentitiesRunExport.yaml' + '/search/entitlements': + "$ref": './paths/v2/search/Entitlements.yaml' + '/search/entitlements/runExport': + "$ref": './paths/v2/search/EntitlementsRunExport.yaml' + '/search/events': + "$ref": './paths/v2/search/Events.yaml' + '/search/mappings': + "$ref": './paths/v2/search/Mappings.yaml' + '/search/{index}/mappings': + "$ref": './paths/v2/search/IndexMappings.yaml' + '/task-results/{taskResultIdOrName}': + $ref: './paths/v2/TaskResultIdOrName.yaml' + diff --git a/static/iiq-api/swagger.json b/static/iiq-api/swagger.json new file mode 100644 index 000000000..2aef4f871 --- /dev/null +++ b/static/iiq-api/swagger.json @@ -0,0 +1,8904 @@ +{ + "openapi": "3.0.3", + "info": { + "description": "IdentityIQ REST Endpoint Interface Documentation for SCIM\n\n# Authentication\n\n", + "version": "8.3", + "title": "IdentityIQ SCIM REST API" + }, + "servers": [ + { + "url": "http://localhost:8080/identityiq/scim/v2", + "description": "IdentityIQ SCIM server basepath and path to API." + } + ], + "tags": [ + { + "name": "Accounts" + }, + { + "name": "Alerts" + }, + { + "name": "Applications", + "description": "Alert object, a generic real time event processing object." + }, + { + "name": "Checked Policy Violations" + }, + { + "name": "Entitlements" + }, + { + "name": "LaunchedWorkflows" + }, + { + "name": "ObjectConfig" + }, + { + "name": "PolicyViolations" + }, + { + "name": "ResourceTypes" + }, + { + "name": "Roles" + }, + { + "name": "Schemas" + }, + { + "name": "ServiceProviderConfig" + }, + { + "name": "TaskResults" + }, + { + "name": "Users" + }, + { + "name": "Workflows" + } + ], + "security": [ + { + "basicAuth": [] + } + ], + "paths": { + "/Accounts": { + "get": { + "operationId": "getAccounts", + "tags": [ + "Accounts" + ], + "summary": "Returns all Account resources.", + "description": "This endpoint returns all Account resources.", + "parameters": [ + { + "in": "query", + "name": "filter", + "schema": { + "type": "string", + "example": "application.value eq \"7f000001804444fe818051b44414444c\" and displayName sw \"G\"" + }, + "description": "Allows for query filters according to RFC-7644, Section 3.4.2.2 - not all operations are supported." + }, + { + "in": "query", + "name": "sortBy", + "schema": { + "type": "string", + "example": "displayName" + }, + "description": "Allows sorting the results by a resource's attributes." + }, + { + "in": "query", + "name": "sortOrder", + "schema": { + "type": "string", + "example": "descending", + "default": "ascending" + }, + "description": "Determines what order to sort results in." + }, + { + "in": "query", + "name": "startIndex", + "schema": { + "type": "integer", + "example": 2313, + "default": 1 + }, + "description": "Determines the starting index of the result set." + }, + { + "in": "query", + "name": "count", + "schema": { + "type": "integer", + "example": 10, + "default": 1000 + }, + "description": "Specifies the number of results per page." + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "displayName,active" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "displayName,active" + }, + "description": "A comma-separated list of attributes to exclude from the response. *Some attributes cannot be excluded.*" + } + ], + "responses": { + "200": { + "description": "Returns all Account resources.", + "content": { + "application/json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of Account resources returned", + "type": "integer", + "example": "18," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/accountResponse" + } + } + } + } + }, + "application/scim+json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of Account resources returned.", + "type": "integer", + "example": "1500," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "description": "The SCIM resources returned for this endpoint.", + "type": "array", + "items": { + "$ref": "#/components/schemas/accountResponse" + } + } + } + } + } + } + } + } + }, + "post": { + "operationId": "createAccount", + "tags": [ + "Accounts" + ], + "summary": "Creates an Account.", + "description": "The endpoint used to create an Account resource. The required payload fields can differ drastically depending on the Application.", + "parameters": [ + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "displayName,active" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "displayName,active" + }, + "description": "A comma-separated list of attributes to exclude from the response. *Some attributes cannot be excluded.*" + } + ], + "requestBody": { + "required": true, + "content": { + "application/scim+json": { + "schema": { + "$ref": "#/components/schemas/accountPostRequest" + } + }, + "*/*": { + "schema": { + "$ref": "#/components/schemas/accountPostRequest" + } + } + } + }, + "responses": { + "201": { + "description": "Creates an Account and returns the resultant Account.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/accountResponse" + } + } + } + } + } + } + }, + "/Accounts/{accountId}": { + "get": { + "operationId": "getAccountById", + "tags": [ + "Accounts" + ], + "summary": "Returns an Account resource based on id.", + "description": "The Account resource with matching id is returned.", + "parameters": [ + { + "name": "accountId", + "in": "path", + "schema": { + "type": "string", + "example": "c7c7777c7ef77e77777ee77e7a1f0444" + }, + "description": "The id of the Account.", + "required": true + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "displayName,active" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "displayName,active" + }, + "description": "A comma-separated list of attributes to exclude from the response. *Some attributes cannot be excluded.*" + } + ], + "responses": { + "200": { + "description": "Returns a single Account resource based on the id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/accountResponse" + } + }, + "application/scim+json": { + "schema": { + "$ref": "#/components/schemas/accountResponse" + } + } + } + } + } + }, + "put": { + "operationId": "updateAccount", + "tags": [ + "Accounts" + ], + "summary": "Updates an existing Account.", + "description": "The endpoint used to update an Account resource. The required payload fields depend on the corresponding Application.", + "parameters": [ + { + "name": "accountId", + "in": "path", + "schema": { + "type": "string", + "example": "c7c7777c7ef77e77777ee77e7a1f0444" + }, + "description": "The id of the Account.", + "required": true + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "displayName,active" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "displayName,active" + }, + "description": "A comma-separated list of attributes to exclude from the response. *Some attributes cannot be excluded.*" + } + ], + "requestBody": { + "required": true, + "content": { + "application/scim+json": { + "schema": { + "$ref": "#/components/schemas/accountPostRequest" + } + }, + "*/*": { + "schema": { + "$ref": "#/components/schemas/accountPostRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Updates an existing Account and returns that Account.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/accountResponse" + } + } + } + } + } + }, + "delete": { + "operationId": "deleteAccount", + "tags": [ + "Accounts" + ], + "summary": "Deletes an existing Account.", + "description": "The endpoint used to delete an Account resource. **This is not reversible.**", + "parameters": [ + { + "name": "accountId", + "in": "path", + "schema": { + "type": "string", + "example": "c7c7777c7ef77e77777ee77e7a1f0444" + }, + "description": "The id of the Account.", + "required": true + } + ], + "responses": { + "204": { + "description": "Returns a 204 with no response body if delete was successful." + } + } + } + }, + "/Alerts": { + "get": { + "operationId": "getAlerts", + "tags": [ + "Alerts" + ], + "summary": "Returns all Alert resources.", + "description": "This endpoint returns all Alert resources.

        \nAttributes to include in the response can be specified with the 'attributes' query parameter.

        \nAttributes to exclude from the response can be specified with the 'excludedAttributes' query parameter.

        \nThe schemas related to Alerts are:\n- **urn:ietf:params:scim:schemas:core:1.0:Alert**\n- **urn:ietf:params:scim:schemas:core:1.0:AlertInput**\n", + "parameters": [ + { + "in": "query", + "name": "filter", + "schema": { + "type": "string", + "example": "name eq \"0000000001\"" + }, + "description": "Allows for query filters according to RFC-7644, Section 3.4.2.2 - not all operations are supported." + }, + { + "in": "query", + "name": "lookupByName", + "schema": { + "type": "boolean", + "default": false, + "example": true + }, + "description": "Set to true if the Alert name is passed instead of the Alert id." + }, + { + "in": "query", + "name": "sortBy", + "schema": { + "type": "string", + "example": "name" + }, + "description": "Allows sorting the results by a resource's attributes." + }, + { + "in": "query", + "name": "sortOrder", + "schema": { + "type": "string", + "default": "ascending" + }, + "example": "descending", + "description": "Determines what order to sort results in." + }, + { + "in": "query", + "name": "startIndex", + "schema": { + "type": "integer", + "example": "10", + "default": 1 + }, + "description": "Determines the starting index of the result set." + }, + { + "in": "query", + "name": "count", + "schema": { + "type": "integer", + "example": "10", + "default": 1000 + }, + "description": "Specifies the number of results per page." + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "name" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "name, application" + }, + "description": "A comma-separated list of attributes to exclude from the response. **Some attributes cannot be excluded.**" + } + ], + "responses": { + "200": { + "description": "Returned all SCIM resources for this endpoint.", + "content": { + "application/json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of resources returned for this endpoint.", + "type": "integer", + "example": "1," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/alertGetResponse" + } + } + } + } + }, + "application/scim+json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of Alert resources returned.", + "type": "integer", + "example": "1500," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "description": "The SCIM resources returned for this endpoint.", + "type": "array", + "items": { + "$ref": "#/components/schemas/alertGetResponse" + } + } + } + } + } + } + } + } + }, + "post": { + "operationId": "createAlert", + "tags": [ + "Alerts" + ], + "summary": "Creates a new Alert.", + "description": "The endpoint used to create an Alert resource.", + "parameters": [ + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "name" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "name, application" + }, + "description": "A comma-separated list of attributes to exclude from the response. **Some attributes cannot be excluded.**" + } + ], + "requestBody": { + "required": true, + "content": { + "application/scim+json": { + "schema": { + "$ref": "#/components/schemas/alertPostRequestBody" + } + } + } + }, + "responses": { + "201": { + "description": "Creates an Alert and returns the resultant Alert.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/alertGetResponse" + } + } + } + } + } + } + }, + "/Alerts/{alertId}": { + "get": { + "operationId": "getAlertById", + "tags": [ + "Alerts" + ], + "summary": "Returns an Alert resource based on id.", + "description": ">The Alert resource with matching id is returned.

        \n>Attributes to include in the response can be specified with the attributes query parameter.

        \n>Attributes to exclude from the response can be specified with the excludedAttributes query parameter.

        \n", + "parameters": [ + { + "name": "alertId", + "in": "path", + "schema": { + "type": "string", + "example": "c0a8019c802d1e5a81802eb2b57e020f" + }, + "description": "id of Alert resource.", + "required": true + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "name" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "name, application" + }, + "description": "A comma-separated list of attributes to exclude from the response. **Some attributes cannot be excluded.**" + } + ], + "responses": { + "200": { + "description": "Returns a single Alert resource based on the id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/alertByIdGetBody" + } + } + } + } + } + } + }, + "/Applications": { + "get": { + "operationId": "getApplications", + "tags": [ + "Applications" + ], + "summary": "Returns all Application resources.", + "description": "This endpoint returns all Application resources.

        \nAttributes to include in the response can be specified with the 'attributes' query parameter.

        \nAttributes to exclude from the response can be specified with the 'excludedAttributes' query parameter.

        \nThe schema related to Applications is: \n- **urn:ietf:params:scim:schemas:core:1.0:Application**\n", + "parameters": [ + { + "in": "query", + "name": "filter", + "schema": { + "type": "string", + "example": "type eq \"Active Directory - Direct\"" + }, + "description": "Allows for query filters according to RFC-7644, Section 3.4.2.2 - not all operations are supported." + }, + { + "in": "query", + "name": "lookupByName", + "schema": { + "type": "boolean", + "default": false, + "example": true + } + }, + { + "in": "query", + "name": "sortBy", + "schema": { + "type": "string", + "example": "name" + }, + "description": "Allows sorting the results by a resource's attributes." + }, + { + "in": "query", + "name": "sortOrder", + "schema": { + "type": "string", + "default": "ascending", + "example": "descending" + }, + "description": "Determines what order to sort results in." + }, + { + "in": "query", + "name": "startIndex", + "schema": { + "type": "integer", + "example": 10, + "default": 1 + }, + "description": "Determines the starting index of the result set." + }, + { + "in": "query", + "name": "count", + "schema": { + "type": "integer", + "example": 10, + "default": 1 + }, + "description": "Specifies the number of results per page." + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "name,type,features" + }, + "description": "The Application attributes to include in the response. The query parameter value is a comma-separated list of fields to be returned in the response for each Application. The attributes listed will be the only ones returned in the response, with the exception of id, schemas, and meta, which are always returned for an Application." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "features" + }, + "description": "The Application attributes to exclude frome the response. The query parameter value is a comma-separated list of fields to be excluded from the response for each Application. The attributes listed will be the only ones excluded frome the response, with the exception of id, schemas, and meta, which are always returned for an Application." + } + ], + "responses": { + "200": { + "description": "Returns all SCIM Application resources.", + "content": { + "application/json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of Application resources returned.", + "type": "integer", + "example": "18," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/applicationResponse" + } + } + } + } + }, + "application/scim+json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of Application resources returned.", + "type": "integer", + "example": "1500," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "description": "The SCIM resources returned for this endpoint.", + "type": "array", + "items": { + "$ref": "#/components/schemas/applicationResponse" + } + } + } + } + } + } + } + } + } + }, + "/Applications/{applicationId}": { + "get": { + "operationId": "getApplication", + "tags": [ + "Applications" + ], + "summary": "Returns an Application resource based on id or name.", + "description": "The Application resource with matching id or name is returned. Attributes to include in the response can be specified with the 'attributes' query parameter. \nAttributes to exclude from the response can be specified with the 'excludedAttributes' query parameter. \nThe schema related to Application is: \n- **urn:ietf:params:scim:schemas:sailpoint:1.0:Application.**\n", + "parameters": [ + { + "name": "applicationId", + "in": "path", + "schema": { + "type": "string", + "example": "7f00000180281df7818028bfaae8035b" + }, + "description": "id or name of Application resource.", + "required": true + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "name,type,features" + }, + "description": "The Application attributes to include in the response. The query parameter value is a comma-separated list of fields to be returned in the response for each Application. The attributes listed will be the only ones returned in the response, with the exception of id, schemas, and meta, which are always returned for an Application." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "features" + }, + "description": "The Application attributes to exclude frome the response. The query parameter value is a comma-separated list of fields to be excluded from the response for each Application. The attributes listed will be the only ones excluded frome the response, with the exception of id, schemas, and meta, which are always returned for an Application." + } + ], + "responses": { + "200": { + "description": "Returns a single Application resource based on the id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/applicationResponse" + } + } + } + } + } + } + }, + "/CheckedPolicyViolations": { + "post": { + "operationId": "checkPolicyViolations", + "tags": [ + "Checked Policy Violations" + ], + "summary": "This endpoint simulates provisioning a set of access items, and then checks against a set of policies to determine if granting the access items would cause creation of new policy violations.", + "description": ">This submits a set of access items to request and a set of policies to check after the access provisioning is simulated in order to determine if policy violations would be created by provisioning the access items.

        It receives a payload that includes:

        \n\n>**An identity:** Used as the recipient for the access items on the simulation.

        \n\n>**A provisioning plan:** To specify the changes to be simulatedly provisioned in the provided identity

        \n\n>**A list of policies:** to check after the simulation of provisioning plan was applied to the identity in order to determine if the access granted in the simulation causes new policy violations.

        \n\n>Optionally you can pass a list of attributes, as query params, to be included or excluded from the response, this setting is applicable only to top level attributes as defined in the schema ***urn:ietf:params:scim:schemas:sailpoint:1.0:CheckedPolicyViolation.***

        \n\n>**Valid values**:
        \n**- policies**
        **- identity**
        **- plan**
        **- violations**
        **- leftBundles**
        **- rightBundles**
        \n", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/checkedPolicyViolationsPostRequest" + } + } + } + }, + "responses": { + "201": { + "description": "Returns a list of violations based on simulated requested access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/checkedPolicyViolationResponse" + } + } + } + } + }, + "parameters": [ + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string" + }, + "description": "A list of attributes to indicate what top level attributes to include in the response" + }, + { + "in": "query", + "name": "authnPassword", + "schema": { + "type": "string" + }, + "description": "Password for authentication" + }, + { + "in": "query", + "name": "authnUsername", + "schema": { + "type": "string" + }, + "description": "Username for authentication" + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string" + }, + "description": "A list of attributes to indicate what top level attributes to exclude from the response" + }, + { + "in": "query", + "name": "lookupByName", + "schema": { + "type": "boolean" + }, + "description": "This is not required in this endpoint, the returned object is a new PolicyViolation and not one returned from the persistence layer. This is inherited from the BaseSCIMResource and is used to override the default id based lookup, and use a name based lookup instead, if for any reason the artifact id is not present.", + "example": false + } + ] + } + }, + "/Entitlements": { + "get": { + "operationId": "getEntitlements", + "tags": [ + "Entitlements" + ], + "summary": "Returns all Entitlement resources.", + "description": "This endpoint returns all Entitlement resources.

        \nAttributes to include in the response can be specified with the 'attributes' query parameter.

        \nAttributes to exclude from the response can be specified with the 'excludedAttributes' query parameter.

        \nThe schemas related to Entitlements are:\n- **urn:ietf:params:scim:schemas:sailpoint:1.0:Entitlement**\n", + "parameters": [ + { + "in": "query", + "name": "filter", + "schema": { + "type": "string", + "example": "displayableName eq \"accessLog\"" + }, + "description": "Allows for query filters according to RFC-7644, Section 3.4.2.2 - not all operations are supported." + }, + { + "in": "query", + "name": "sortBy", + "schema": { + "type": "string", + "example": "application" + }, + "description": "Allows sorting the results by a resource's attributes." + }, + { + "in": "query", + "name": "sortOrder", + "schema": { + "type": "string", + "default": "ascending", + "example": "descending" + }, + "description": "Determines what order to sort results in." + }, + { + "in": "query", + "name": "startIndex", + "schema": { + "type": "integer", + "example": 10, + "default": 1 + }, + "description": "Determines the starting index of the result set." + }, + { + "in": "query", + "name": "count", + "schema": { + "type": "integer", + "example": 10, + "default": 1000 + }, + "description": "Specifies the number of results per page." + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "application" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "application" + }, + "description": "A comma-separated list of attributes to exclude from the response. **Some attributes cannot be excluded.**" + } + ], + "responses": { + "200": { + "description": "Returned all SCIM resources for this endpoint.", + "content": { + "application/json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of resources returned for this endpoint.", + "type": "integer", + "example": "1," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/entitlementGetResponse" + } + } + } + } + }, + "application/scim+json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of Entitlement resources returned.", + "type": "integer", + "example": "1500," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "description": "The SCIM resources returned for this endpoint.", + "type": "array", + "items": { + "$ref": "#/components/schemas/entitlementGetResponse" + } + } + } + } + } + } + } + } + } + }, + "/Entitlements/{entitlementId}": { + "get": { + "operationId": "getEntitlementById", + "tags": [ + "Entitlements" + ], + "summary": "Returns an Entitlement resource based on id.", + "description": "The Entitlement resource with matching id is returned.

        \nAttributes to include in the response can be specified with the attributes query parameter.

        \nAttributes to exclude from the response can be specified with the excludedAttributes query parameter.

        \n", + "parameters": [ + { + "name": "entitlementId", + "in": "path", + "schema": { + "type": "string", + "example": "c0a8019c802d1e5a81802eb2b57e020f" + }, + "description": "id of Entitlement resource.", + "required": true + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "application" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "name, application" + }, + "description": "A comma-separated list of attributes to exclude from the response. **Some attributes cannot be excluded.**" + } + ], + "responses": { + "200": { + "description": "Returns a single Entitlement resource based on the id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/entitlementByIdGetBody" + } + } + } + } + } + } + }, + "/LaunchedWorkflows": { + "get": { + "operationId": "LaunchedWorkflows", + "tags": [ + "LaunchedWorkflows" + ], + "summary": "Returns all LaunchedWorkflow resources.", + "description": "This endpoint returns all LaunchedWorkflow resources.

        \nAttributes to include in the response can be specified with the 'attributes' query parameter.

        \nAttributes to exclude from the response can be specified with the 'excludedAttributes' query parameter.

        \nThe schema related to LaunchedWorkflow is: \n- **urn:ietf:params:scim:schemas:sailpoint:1.0:LaunchedWorkflow**\n", + "parameters": [ + { + "in": "query", + "name": "filter", + "schema": { + "type": "string", + "example": "completed eq \"2022-05-03T16:40:34.271-05:00\"" + }, + "description": "Allows for query filters according to RFC-7644, Section 3.4.2.2 - not all operations are supported." + }, + { + "in": "query", + "name": "sortBy", + "schema": { + "type": "string", + "example": "application" + }, + "description": "Allows sorting the results by a resource's attributes." + }, + { + "in": "query", + "name": "sortOrder", + "schema": { + "type": "string", + "default": "ascending" + }, + "example": "descending", + "description": "Determines what order to sort results in." + }, + { + "in": "query", + "name": "startIndex", + "schema": { + "type": "integer", + "example": 10, + "default": 1 + }, + "description": "Determines the starting index of the result set." + }, + { + "in": "query", + "name": "count", + "schema": { + "type": "integer", + "example": 10, + "default": 1000 + }, + "description": "Specifies the number of results per page." + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "name, expiration" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "identityRequestId" + }, + "description": "A comma-separated list of attributes to exclude from the response. **Some attributes cannot be excluded.**" + } + ], + "responses": { + "200": { + "description": "Returned all SCIM resources for this endpoint.
        **LaunchedWorkflow responses include attributes from the TaskResult related to the Workflow execution.**", + "content": { + "application/json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of resources returned for this endpoint", + "type": "integer", + "example": "1," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/launchedWorkflowGetResponse" + } + } + } + } + }, + "application/scim+json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of LaunchedWorkflow resources returned.", + "type": "integer", + "example": "1500," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "description": "The SCIM resources returned for this endpoint.", + "type": "array", + "items": { + "$ref": "#/components/schemas/launchedWorkflowGetResponse" + } + } + } + } + } + } + } + } + }, + "post": { + "operationId": "launchWorkflow", + "tags": [ + "LaunchedWorkflows" + ], + "summary": "Endpoint used to launch a Workflow.", + "description": "Endpoint to launch or execute a Workflow. A payload for the request is required and this can include inputs specific to the Workflow being launched.", + "parameters": [ + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "input" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "workflowName" + }, + "description": "A comma-separated list of attributes to exclude from the response. *Some attributes cannot be excluded.*" + } + ], + "requestBody": { + "required": true, + "content": { + "application/scim+json": { + "schema": { + "$ref": "#/components/schemas/launchedWorkflowsPostRequest" + } + }, + "*/*": { + "schema": { + "$ref": "#/components/schemas/launchedWorkflowsPostRequest" + } + } + } + }, + "responses": { + "201": { + "description": "Executes a workflow and returns the resulting LaunchedWorkflow. **LaunchedWorkflow responses include attributes from the TaskResult related to the Workflow execution.**", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/launchedWorkflowsPostResponse" + } + } + } + } + } + } + }, + "/LaunchedWorkflow/{launchedWorkflowId}": { + "get": { + "operationId": "getLaunchedWorkflowById", + "tags": [ + "LaunchedWorkflows" + ], + "summary": "Returns a LaunchedWorkflow resource based on id.", + "description": "The LaunchedWorkflow resource with matching id is returned.

        \nAttributes to include in the response can be specified with the attributes query parameter.

        \nAttributes to exclude from the response can be specified with the excludedAttributes query parameter.

        \n\nThe schema related to LaunchedWorkflow is: \n- **urn:ietf:params:scim:schemas:sailpoint:1.0:LaunchedWorkflow**\n", + "parameters": [ + { + "name": "launchedWorkflowId", + "in": "path", + "schema": { + "type": "string", + "example": "c0a8019c802d1e5a81802eb2b57e020f" + }, + "description": "id of LaunchedWorkflow resource.", + "required": true + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "expiration" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "names" + }, + "description": "A comma-separated list of attributes to exclude from the response. **Some attributes cannot be excluded.**" + } + ], + "responses": { + "200": { + "description": "Returns a single LaunchedWorkflow resource based on the id.
        **LaunchedWorkflow responses include attributes from the TaskResult related to the Workflow execution.**", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/launchedWorkflowByIdGetBody" + } + } + } + } + } + } + }, + "/ObjectConfigs": { + "get": { + "operationId": "getObjectConfigs", + "tags": [ + "ObjectConfig" + ], + "summary": "Returns all object of type ObjectConfig.", + "description": "This endpoint returns all ObjectConfig resources.
        \n\nAttributes to include in the response can be specified with the attributes query parameter.
        \n\nAttributes to exclude from the response can be specified with the excludedAttributes query parameter.
        \n\nThe schema related to ObjectConfig is: \n- **urn:ietf:params:scim:schemas:sailpoint:1.0:ObjectConfig**.\n", + "parameters": [ + { + "in": "query", + "name": "filter", + "schema": { + "type": "string", + "example": "name eq \"identity\"" + }, + "description": "Allows for query filters according to RFC-7644, Section 3.4.2.2 - not all operations are supported." + }, + { + "in": "query", + "name": "lookupByName", + "schema": { + "type": "boolean", + "default": false, + "example": true + }, + "description": "(OPTIONAL) Set to true if the ObjectConfig name is passed instead of the ObjectConfig id." + }, + { + "in": "query", + "name": "sortBy", + "schema": { + "type": "string", + "example": "name" + }, + "description": "Allows sorting the results by a resource's attributes." + }, + { + "in": "query", + "name": "sortOrder", + "schema": { + "type": "string", + "default": "ascending" + }, + "example": "descending", + "description": "Determines what order to sort results in." + }, + { + "in": "query", + "name": "startIndex", + "schema": { + "type": "integer", + "example": 10, + "default": 1 + }, + "description": "Determines the starting index of the result set." + }, + { + "in": "query", + "name": "count", + "schema": { + "type": "integer", + "example": 10, + "default": 1000 + }, + "description": "Specifies the number of results per page." + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "name" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "name, objectAttributes" + }, + "description": "A comma-separated list of attributes to exclude from the response. **Some attributes cannot be excluded.**" + } + ], + "responses": { + "200": { + "description": "Returned all SCIM resources for this endpoint.", + "content": { + "application/json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of resources returned for this endpoint", + "type": "integer", + "example": "1," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/objectConfigGetResponse" + } + } + } + } + }, + "application/scim+json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of ObjectConfig resources returned.", + "type": "integer", + "example": "1500," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "description": "The SCIM resources returned for this endpoint.", + "type": "array", + "items": { + "$ref": "#/components/schemas/objectConfigGetResponse" + } + } + } + } + } + } + } + } + } + }, + "/ObjectConfig/{objectConfigId}": { + "get": { + "operationId": "getObjectConfigById", + "tags": [ + "ObjectConfig" + ], + "summary": "Returns an ObjectConfig resource based on its name or id.", + "description": "The ObjectConfig resource with matching name or id is returned.
        \n\nAttributes to include in the response can be specified with the 'attributes' query parameter.
        \n\nAttributes to exclude from the response can be specified with the 'excludedAttributes' query parameter.\n\nThe schema related to ObjectConfig is:\n- **urn:ietf:params:scim:schemas:sailpoint:1.0:ObjectConfig**\n", + "parameters": [ + { + "name": "objectConfigId", + "in": "path", + "schema": { + "type": "string", + "example": "7f00000180281df7818028be62e500e8" + }, + "description": "id of ObjectConfig resource.", + "required": true + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "objectAttributes" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "name" + }, + "description": "A comma-separated list of attributes to exclude from the response. **Some attributes cannot be excluded.**" + } + ], + "responses": { + "200": { + "description": "Returns a single ObjectConfig resource based on its name or id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/objectConfigByIdGetBody" + } + } + } + } + } + } + }, + "/PolicyViolations": { + "get": { + "operationId": "getPolicyViolations", + "tags": [ + "PolicyViolations" + ], + "summary": "Returns all PolicyViolation resources.", + "description": "This endpoint returns all PolicyViolation resources.", + "parameters": [ + { + "in": "query", + "name": "filter", + "schema": { + "type": "string", + "example": "constraintName eq \"Mock Constraint\"" + }, + "description": "Allows for query filters according to RFC-7644, Section 3.4.2.2 - not all operations are supported." + }, + { + "in": "query", + "name": "sortBy", + "schema": { + "type": "string", + "example": "constraintName" + }, + "description": "Allows sorting the results by a resource's attributes." + }, + { + "in": "query", + "name": "sortOrder", + "schema": { + "type": "string", + "example": "descending", + "default": "ascending" + }, + "description": "Determines what order to sort results in." + }, + { + "in": "query", + "name": "startIndex", + "schema": { + "type": "integer", + "example": 2313, + "default": 1 + }, + "description": "Determines the starting index of the result set." + }, + { + "in": "query", + "name": "count", + "schema": { + "type": "integer", + "example": 10, + "default": 1000 + }, + "description": "Specifies the number of results per page." + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "policyName,constraintName" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "policyName,constraintName" + }, + "description": "A comma-separated list of attributes to exclude from the response. *Some attributes cannot be excluded.*" + } + ], + "responses": { + "200": { + "description": "Returns all PolicyViolation resources.", + "content": { + "application/json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of PolicyViolation resources returned", + "type": "integer", + "example": "18," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/policyViolationResponse" + } + } + } + } + }, + "application/scim+json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of PolicyViolation resources returned.", + "type": "integer", + "example": "1500," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "description": "The SCIM resources returned for this endpoint.", + "type": "array", + "items": { + "$ref": "#/components/schemas/policyViolationResponse" + } + } + } + } + } + } + } + } + } + }, + "/PolicyViolations/{policyViolationId}": { + "get": { + "operationId": "getPolicyViolationById", + "tags": [ + "PolicyViolations" + ], + "summary": "Returns a PolicyViolation resource based on id.", + "description": "The PolicyViolation resource with matching id is returned.", + "parameters": [ + { + "name": "policyViolationId", + "in": "path", + "schema": { + "type": "string" + }, + "description": "The id of the PolicyViolation.", + "required": true + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "policyName,constraintName" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "policyName,constraintName" + }, + "description": "A comma-separated list of attributes to exclude from the response. *Some attributes cannot be excluded.*" + } + ], + "responses": { + "200": { + "description": "Returns a PolicyViolation resource based on the id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/policyViolationResponse" + } + }, + "application/scim+json": { + "schema": { + "$ref": "#/components/schemas/policyViolationResponse" + } + } + } + } + } + } + }, + "/ResourceTypes": { + "get": { + "operationId": "getResourceTypes", + "tags": [ + "ResourceTypes" + ], + "summary": "Returns all ResourceType resources.", + "description": "All ResourceType resources are listed in the response. The common fields for each ResourceType entry are 'endpoint', 'id', 'name', 'description', 'schema' and 'schemaExtensions'.", + "responses": { + "200": { + "description": "Returns all ResourceType resources.", + "content": { + "application/json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of ResourceType resources returned.", + "type": "integer", + "example": 18 + }, + "schemas": { + "description": "The ResourceTypes type represented by URN used for this response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resourceTypeResponse" + } + } + } + } + }, + "application/scim+json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of Schema resources returned.", + "type": "integer", + "example": 18 + }, + "schemas": { + "description": "The Schema type represented by URN used for this response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resourceTypeResponse" + } + } + } + } + } + } + } + } + } + }, + "/ResourceTypes/{resourceTypeId}": { + "get": { + "operationId": "getResourceTypeById", + "tags": [ + "ResourceTypes" + ], + "summary": "Returns a ResourceType resource based on ID.", + "description": "The ResourceType with the matching ID is returned. The ID is the URN of the SCIM resource. The common fields for each ResourceType entry are 'endpoint', 'id', 'name', 'description', 'schema' and 'schemaExtensions'.", + "parameters": [ + { + "name": "resourceTypeId", + "in": "path", + "schema": { + "type": "string" + }, + "description": "ID of ResourceType resource.", + "required": true + } + ], + "responses": { + "200": { + "description": "Returns a single ResourceType resource based on the ID.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/resourceTypeResponse" + } + } + } + } + } + } + }, + "/Roles": { + "get": { + "operationId": "getRoles", + "tags": [ + "Roles" + ], + "summary": "Returns all Role resources.", + "description": "This endpoint returns all Role resources. Attributes to include in the response can be specified with the 'attributes' query parameter. Attributes to exclude from the response can be specified with the 'excludedAttributes' query parameter. The core schema is urn:ietf:params:scim:schemas:sailpoint:1.0:Role.", + "parameters": [ + { + "in": "query", + "name": "filter", + "schema": { + "type": "string" + }, + "description": "Allows for query filters according to RFC-7644, Section 3.4.2.2 - not all operations are supported.

        **Example**: filter=name eq \"Data Analyst\"" + }, + { + "in": "query", + "name": "sortBy", + "schema": { + "type": "string" + }, + "description": "Allows sorting the results by a resource's attributes.

        **Example**: sortBy=\"name\"" + }, + { + "in": "query", + "name": "sortOrder", + "schema": { + "type": "string" + }, + "description": "Determines what order to sort results in.

        **Example**: sortOrder=\"descending\"" + }, + { + "in": "query", + "name": "startIndex", + "schema": { + "type": "integer" + }, + "description": "Determines the starting index of the result set.

        **Example**: startIndex=1100" + }, + { + "in": "query", + "name": "count", + "schema": { + "type": "integer" + }, + "description": "Specifies the number of results per page.

        **Example**: count=10" + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string" + }, + "description": "The Role attributes to include in the response. The query parameter value is a comma-separated list of fields to be returned in the response for each Role.

        **Example**: attributes=name,type,classifications

        The attributes listed will be the only ones returned in the response, with the exception of id, schemas, and meta, which are always returned for a Role." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string" + }, + "description": "The Role attributes to exclude frome the response. The query parameter value is a comma-separated list of fields to be excluded from the response for each Role.

        **Example**: excludedAttributes=permits,requirements,inheritance

        The attributes listed will be the only ones excluded frome the response, with the exception of id, schemas, and meta, which are always returned for a Role." + } + ], + "responses": { + "200": { + "description": "Returns all SCIM Role resources.", + "content": { + "application/json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of Role resources returned", + "type": "integer", + "example": "18," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/roleResponse" + } + } + } + } + }, + "application/scim+json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of Role resources returned.", + "type": "integer", + "example": "1500," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "description": "The SCIM resources returned for this endpoint.", + "type": "array", + "items": { + "$ref": "#/components/schemas/roleResponse" + } + } + } + } + } + } + } + } + } + }, + "/Roles/{roleId}": { + "get": { + "operationId": "getRole", + "tags": [ + "Roles" + ], + "summary": "Returns a Role resource based on ID or name.", + "description": "The Role resource with matching ID or name is returned. Attributes to include in the response can be specified with the 'attributes' query parameter. Attributes to exclude from the response can be specified with the 'excludedAttributes' query parameter. The core schema is urn:ietf:params:scim:schemas:sailpoint:1.0:Role.", + "parameters": [ + { + "name": "roleId", + "in": "path", + "schema": { + "type": "string" + }, + "description": "ID or name of Role resource.", + "required": true + }, + { + "in": "query", + "name": "lookupByName", + "schema": { + "type": "boolean" + }, + "description": "A boolean value that determines if the Role resource will be looked up by name instead of Id (value in path parameter 'roleId'). Setting this query parameter to true will cause the value pulled from the 'roleId' path parameter to be treated as a name when searching for the resource.

        **Example**: scim/v2/Roles/**Data Analyst**?**lookupByName=true**" + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string" + }, + "description": "The Role attributes to include in the response. The query parameter value is a comma-separated list of fields to be returned in the response for each Role.

        **Example**: attributes=name,type

        The attributes listed will be the only ones returned in the response, with the exception of id, schemas, and meta, which are always returned for a Role." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string" + }, + "description": "The Role attributes to exclude frome the response. The query parameter value is a comma-separated list of fields to be excluded from the response for each Role.

        **Example**: excludedAttributes=permits,requirements

        The attributes listed will be the only ones excluded frome the response, with the exception of id, schemas, and meta, which are always returned for a Role." + } + ], + "responses": { + "200": { + "description": "Returns a single Role resource based on the ID.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/roleResponse" + } + } + } + } + } + } + }, + "/Schemas": { + "get": { + "operationId": "getSchemas", + "tags": [ + "Schemas" + ], + "summary": "Returns all Schema resources.", + "description": "All Schema resources are listed in the response. The 'attributes' field holds the schema-specific attributes which differ depending on Schema type.", + "responses": { + "200": { + "description": "Returns all Schema resources.", + "content": { + "application/json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of Schemas returned.", + "type": "integer", + "example": 18 + }, + "schemas": { + "description": "The Schema type used for this response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/schemaResponse" + } + } + } + } + }, + "application/scim+json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of Schemas returned.", + "type": "integer", + "example": 18 + }, + "schemas": { + "description": "The Schema type used for this response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/schemaResponse" + } + } + } + } + } + } + } + } + } + }, + "/Schemas/{schemaId}": { + "get": { + "operationId": "getSchemaById", + "tags": [ + "Schemas" + ], + "summary": "Returns a Schema based on id.", + "description": "The Schema with the matching id is returned. The id is the URN of the SCIM resource. The 'attributes' field holds the schema-specific attributes which differ depending on Schema type.", + "parameters": [ + { + "name": "schemaId", + "in": "path", + "schema": { + "type": "string" + }, + "description": "The id of the Schema.", + "required": true + } + ], + "responses": { + "200": { + "description": "Returns a single Schema based on the id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/schemaResponse" + } + } + } + } + } + } + }, + "/ServiceProviderConfig": { + "description": "Schema for representing the service provider's configuration", + "get": { + "operationId": "ServiceProviderConfig", + "tags": [ + "ServiceProviderConfig" + ], + "summary": "Returns all ServiceProviderConfig resources.", + "description": "This endpoint returns all ServiceProviderConfig resources.

        \nAttributes to include in the response can be specified with the 'attributes' query parameter.

        \nAttributes to exclude from the response can be specified with the 'excludedAttributes' query parameter.

        \nThe schema related to ServiceProviderConfig is:
        \n- **urn:ietf:params:scim:schemas:sailpoint:2.0:ServiceProviderConfig**\n", + "responses": { + "200": { + "description": "Returned all SCIM resources for this endpoint.", + "content": { + "application/json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of resources returned for this endpoint.", + "type": "integer", + "example": "1," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/serviceProviderConfigGetResponse" + } + } + } + } + }, + "application/scim+json": { + "schema": { + "properties": { + "maxResults": { + "description": "Number of ServiceProviderConfig resources returned.", + "type": "integer", + "example": "1500," + }, + "supported": { + "type": "boolean", + "example": true + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "description": "The SCIM resources returned for this endpoint.", + "type": "array", + "items": { + "$ref": "#/components/schemas/serviceProviderConfigGetResponse" + } + } + } + } + } + } + } + } + } + }, + "/TaskResults": { + "get": { + "operationId": "TaskResults", + "tags": [ + "TaskResults" + ], + "summary": "Returns all TaskResult resources.", + "description": "This endpoint returns all TaskResult resources.

        \nAttributes to include in the response can be specified with the 'attributes' query parameter.

        \nAttributes to exclude from the response can be specified with the 'excludedAttributes' query parameter.

        \nThe schema related to TaskResult is:\n- **urn:ietf:params:scim:schemas:sailpoint:1.0:TaskResult**\n", + "parameters": [ + { + "in": "query", + "name": "filter", + "schema": { + "type": "string", + "example": "name eq \"AdminsAggTask\"" + }, + "description": "Allows for query filters according to RFC-7644, Section 3.4.2.2 - not all operations are supported." + }, + { + "in": "query", + "name": "lookupByName", + "schema": { + "type": "boolean", + "default": false, + "example": true + }, + "description": "**(OPTIONAL)** Set to true if the TaskResult name is passed instead of the TaskResult id." + }, + { + "in": "query", + "name": "sortBy", + "schema": { + "type": "string", + "example": "launched" + }, + "description": "Allows sorting the results by a resource's attributes." + }, + { + "in": "query", + "name": "sortOrder", + "schema": { + "type": "string", + "default": "ascending" + }, + "example": "descending", + "description": "Determines what order to sort results in." + }, + { + "in": "query", + "name": "startIndex", + "schema": { + "type": "integer", + "example": 10, + "default": 1 + }, + "description": "Determines the starting index of the result set." + }, + { + "in": "query", + "name": "count", + "schema": { + "type": "integer", + "example": 5, + "default": 1000 + }, + "description": "Specifies the number of results per page." + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "completionStatus, attributes" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "taskDefinition, host" + }, + "description": "A comma-separated list of attributes to exclude from the response. **Some attributes cannot be excluded.**" + } + ], + "responses": { + "200": { + "description": "Returned all SCIM resources for this endpoint.", + "content": { + "application/json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of resources returned for this endpoint", + "type": "integer", + "example": "1," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/taskResultGetResponse" + } + } + } + } + }, + "application/scim+json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of TaskResult resources returned.", + "type": "integer", + "example": "1500," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "description": "The SCIM resources returned for this endpoint.", + "type": "array", + "items": { + "$ref": "#/components/schemas/taskResultGetResponse" + } + } + } + } + } + } + } + } + } + }, + "/TaskResults/{taskResultId}": { + "get": { + "operationId": "getTaskResultById", + "tags": [ + "TaskResults" + ], + "summary": "Returns a TaskResult resource based on id.", + "description": "The TaskResult resource with matching id is returned.

        \nAttributes to include in the response can be specified with the attributes query parameter.

        \nAttributes to exclude from the response can be specified with the excludedAttributes query parameter.

        \nThe schema related to TaskResult is:\n- **urn:ietf:params:scim:schemas:sailpoint:1.0:TaskResult**\n", + "parameters": [ + { + "name": "taskResultId", + "in": "path", + "schema": { + "type": "string", + "example": "c0a8019c802d1e5a81802eb2b57e020f" + }, + "description": "id of TaskResult resource.", + "required": true + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "host" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "name, messages" + }, + "description": "A comma-separated list of attributes to exclude from the response. **Some attributes cannot be excluded.**" + } + ], + "responses": { + "200": { + "description": "Returns a single TaskResult resource based on the id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/taskResultByIdGetBody" + } + } + } + } + } + } + }, + "/Users": { + "get": { + "operationId": "getUsers", + "tags": [ + "Users" + ], + "summary": "Returns all User resources.", + "description": "This endpoint returns all User resources. There are attributes marked as 'returned only by request', such as **roles**, which must be provided as part of the **attributes** query parameter in order to be included in the response.", + "parameters": [ + { + "in": "query", + "name": "filter", + "schema": { + "type": "string", + "example": "location eq \"Raleigh\" and name.givenName sw \"j\" and name.familyName sw \"s\"" + }, + "description": "Allows for query filters according to RFC-7644, Section 3.4.2.2 - not all operations are supported." + }, + { + "in": "query", + "name": "sortBy", + "schema": { + "type": "string", + "example": "userName" + }, + "description": "Allows sorting the results by a resource's attributes." + }, + { + "in": "query", + "name": "sortOrder", + "schema": { + "type": "string", + "example": "descending", + "default": "ascending" + }, + "description": "Determines what order to sort results in." + }, + { + "in": "query", + "name": "startIndex", + "schema": { + "type": "integer", + "example": 2313, + "default": 1 + }, + "description": "Determines the starting index of the result set." + }, + { + "in": "query", + "name": "count", + "schema": { + "type": "integer", + "example": 10, + "default": 1000 + }, + "description": "Specifies the number of results per page." + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "userName,nativeIdentity" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "userName,manuallyCorrelated" + }, + "description": "A comma-separated list of attributes to exclude from the response. *Some attributes cannot be excluded.*" + } + ], + "responses": { + "200": { + "description": "Returns all SCIM User resources.", + "content": { + "application/json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of User resources returned", + "type": "integer", + "example": "18," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/userResponse" + } + } + } + } + }, + "application/scim+json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of User resources returned.", + "type": "integer", + "example": "1500," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "description": "The SCIM resources returned for this endpoint.", + "type": "array", + "items": { + "$ref": "#/components/schemas/userResponse" + } + } + } + } + } + } + } + } + }, + "post": { + "operationId": "createUser", + "tags": [ + "Users" + ], + "summary": "Creates a User.", + "description": "The endpoint used to create a User resource. There are attributes marked as 'returned only by request', such as **roles**, which must be provided as part of the **attributes** query parameter in order to be included in the response.", + "parameters": [ + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "userName,nativeIdentity" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "userName,manuallyCorrelated" + }, + "description": "A comma-separated list of attributes to exclude from the response. *Some attributes cannot be excluded.*" + } + ], + "requestBody": { + "required": true, + "content": { + "application/scim+json": { + "schema": { + "$ref": "#/components/schemas/userPostRequest" + } + }, + "*/*": { + "schema": { + "$ref": "#/components/schemas/userPostRequest" + } + } + } + }, + "responses": { + "201": { + "description": "Creates a User and returns the resultant User.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/userResponse" + } + } + } + }, + "409": { + "description": "Returned if userName is not unique.", + "content": { + "application/json": { + "schema": { + "properties": { + "schemas": { + "description": "SCIM Schemas used in response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:Error" + ] + }, + "scimType": { + "description": "Type of problem that exists for request.", + "type": "string", + "example": "uniqueness" + }, + "detail": { + "description": "Explanation for the the problem with the request.", + "type": "string", + "example": "Resource already exists:Mock.User" + }, + "status": { + "description": "HTTP status code of the response.", + "type": "string", + "example": "409" + } + } + } + } + } + } + } + } + }, + "/Users/{userId}": { + "get": { + "operationId": "getUserById", + "tags": [ + "Users" + ], + "summary": "Returns a User resource based on id.", + "description": "The User resource with matching id is returned. There are attributes marked as 'returned only by request', such as **roles**, which must be provided as part of the **attributes** query parameter in order to be included in the response.", + "parameters": [ + { + "name": "userId", + "in": "path", + "schema": { + "type": "string", + "example": "c7c7777c7ef77e77777ee77e7a1f0444" + }, + "description": "The id of User resource. If **lookupByName** is set to **true**, this path parameter should be set to the **userName** of the User.", + "required": true + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "userName,nativeIdentity" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "userName,manuallyCorrelated" + }, + "description": "A comma-separated list of attributes to exclude from the response. *Some attributes cannot be excluded.*" + }, + { + "in": "query", + "name": "lookupByName", + "schema": { + "type": "boolean", + "example": false, + "default": false + }, + "description": "A boolean value that determines if the User resource will be looked up by userName instead of userId (value in path parameter 'userId'). Setting this query parameter to true will cause the value pulled from the 'userId' path parameter to be treated as a userName when searching for the resource.

        **Example**: scim/v2/Users/**Mock.User**?**lookupByName=true**" + } + ], + "responses": { + "200": { + "description": "Returns a single User resource based on the id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/userResponse" + } + }, + "application/scim+json": { + "schema": { + "$ref": "#/components/schemas/userResponse" + } + } + } + } + } + }, + "put": { + "operationId": "updateUser", + "tags": [ + "Users" + ], + "summary": "Updates an existing User.", + "description": "The endpoint used to update a User resource. There are attributes marked as 'returned only by request', such as **roles**, which must be provided as part of the **attributes** query parameter in order to be included in the response.

        In order for Lifecycle Events to have access to previous Identity values, a new IdentityArchive object is created and saved to the database. This feature is turned on by default and *could* have an impact on the overall performance of the SCIM update. It is not expected for the impact of this change to be noticeable, but in cases where it is, and when configured Lifecycle Events are not dependent on the previous Identity attributes, the creation of the IdentityArchive object during a SCIM update is configurable. By default, the IdentityArchive creation during a SCIM update is enabled. To disable the creation of the IdentityArchive object during SCIM updates, the following attribute can be set on the SystemConfiguration object:

        **<entry key=\"scimTriggerSnapshots\" value=\"false\">**", + "parameters": [ + { + "name": "userId", + "in": "path", + "schema": { + "type": "string", + "example": "c7c7777c7ef77e77777ee77e7a1f0444" + }, + "description": "The id of User resource. If **lookupByName** is set to **true**, this path parameter should be set to the **userName** of the User.", + "required": true + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string" + }, + "description": "A comma-separated list of attributes to exclude from the response. *Some attributes cannot be excluded.*" + }, + { + "in": "query", + "name": "lookupByName", + "schema": { + "type": "boolean", + "example": false, + "default": false + }, + "description": "A boolean value that determines if the User resource will be looked up by userName instead of userId (value in path parameter 'userId'). Setting this query parameter to true will cause the value pulled from the 'userId' path parameter to be treated as a userName when searching for the resource.

        **Example**: scim/v2/Users/**Mock.User**?**lookupByName=true**" + } + ], + "requestBody": { + "required": true, + "content": { + "application/scim+json": { + "schema": { + "$ref": "#/components/schemas/userPostRequest" + } + }, + "*/*": { + "schema": { + "$ref": "#/components/schemas/userPostRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Updates an existing User and returns that User.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/userResponse" + } + } + } + } + } + }, + "delete": { + "operationId": "deleteUser", + "tags": [ + "Users" + ], + "summary": "Deletes an existing User.", + "description": "The endpoint used to delete a User resource. **This is not reversible.**", + "parameters": [ + { + "name": "userId", + "in": "path", + "schema": { + "type": "string", + "example": "c7c7777c7ef77e77777ee77e7a1f0444" + }, + "description": "The id of User resource. If **lookupByName** is set to **true**, this path parameter should be set to the **userName** of the User.", + "required": true + }, + { + "in": "query", + "name": "lookupByName", + "schema": { + "type": "boolean", + "example": false, + "default": false + }, + "description": "A boolean value that determines if the User resource will be looked up by userName instead of userId (value in path parameter 'userId'). Setting this query parameter to true will cause the value pulled from the 'userId' path parameter to be treated as a userName when searching for the resource.

        **Example**: scim/v2/Users/**Mock.User**?**lookupByName=true**" + } + ], + "responses": { + "204": { + "description": "Returns a 204 with no response body if delete was successful." + } + } + } + }, + "/Workflows": { + "get": { + "operationId": "Workflows", + "tags": [ + "Workflows" + ], + "summary": "Returns all Workflow resources.", + "description": "This endpoint returns all Workflow resources.

        \nAttributes to include in the response can be specified with the 'attributes' query parameter.

        \nAttributes to exclude from the response can be specified with the 'excludedAttributes' query parameter.

        \nThe schema related to Workflow is:
        \n- **urn:ietf:params:scim:schemas:sailpoint:1.0:Workflow**\n", + "parameters": [ + { + "in": "query", + "name": "filter", + "schema": { + "type": "string", + "example": "name eq \"Do Provisioning Forms\"" + }, + "description": "Allows for query filters according to RFC-7644, Section 3.4.2.2 - not all operations are supported." + }, + { + "in": "query", + "name": "lookupByName", + "schema": { + "type": "boolean", + "default": false, + "example": true + }, + "description": "**(OPTIONAL)** Set to true if the Workflows name is passed instead of the Workflow id." + }, + { + "in": "query", + "name": "sortBy", + "schema": { + "type": "string", + "example": "name" + }, + "description": "Allows sorting the results by a resource's attributes." + }, + { + "in": "query", + "name": "sortOrder", + "schema": { + "type": "string", + "default": "ascending", + "example": "descending" + }, + "description": "Determines what order to sort results in." + }, + { + "in": "query", + "name": "startIndex", + "schema": { + "type": "integer", + "example": 15, + "default": 1 + }, + "description": "Determines the starting index of the result set." + }, + { + "in": "query", + "name": "count", + "schema": { + "type": "integer", + "example": 15, + "default": 1000 + }, + "description": "Specifies the number of results per page." + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "name" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "name, type" + }, + "description": "A comma-separated list of attributes to exclude from the response. **Some attributes cannot be excluded.**" + } + ], + "responses": { + "200": { + "description": "Returned all SCIM resources for this endpoint.", + "content": { + "application/json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of resources returned for this endpoint.", + "type": "integer", + "example": "1," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/workflowGetResponse" + } + } + } + } + }, + "application/scim+json": { + "schema": { + "properties": { + "totalResults": { + "description": "Number of Workflow resources returned.", + "type": "integer", + "example": "1500," + }, + "startIndex": { + "description": "The starting index of the resource set list. Can be specified with startIndex query parameter.", + "type": "integer", + "example": 1 + }, + "schemas": { + "description": "SCIM Schema used for response.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:api:messages:2.0:ListResponse" + ] + }, + "Resources": { + "description": "The SCIM resources returned for this endpoint.", + "type": "array", + "items": { + "$ref": "#/components/schemas/workflowGetResponse" + } + } + } + } + } + } + } + } + } + }, + "/Workflows/{workflowId}": { + "get": { + "operationId": "getWorkflowById", + "tags": [ + "Workflows" + ], + "summary": "Returns a Workflow resource based on id.", + "description": "The Workflow resource with matching id is returned.

        \nAttributes to include in the response can be specified with the attributes query parameter.

        \nAttributes to exclude from the response can be specified with the excludedAttributes query parameter.

        \n\nThe schema related to Workflow is:
        \n- **urn:ietf:params:scim:schemas:sailpoint:1.0:Workflow**\n", + "parameters": [ + { + "name": "workflowId", + "in": "path", + "schema": { + "type": "string", + "example": "c0a8019c802d1e5a81802eb2b57e020f" + }, + "description": "id of Workflow resource.", + "required": true + }, + { + "in": "query", + "name": "attributes", + "schema": { + "type": "string", + "example": "name, type" + }, + "description": "A comma-separated list of attributes to return in the response. This query parameter supersedes excludedAttributes, so providing the same attribute(s) to both will result in the attribute(s) being returned." + }, + { + "in": "query", + "name": "excludedAttributes", + "schema": { + "type": "string", + "example": "name, handler" + }, + "description": "A comma-separated list of attributes to exclude from the response. **Some attributes cannot be excluded.**" + } + ], + "responses": { + "200": { + "description": "Returns a single Workflow resource based on the id.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/workflowByIdGetBody" + } + } + } + } + } + } + } + }, + "components": { + "securitySchemes": { + "basicAuth": { + "type": "http", + "scheme": "basic" + } + }, + "schemas": { + "accountPostRequest": { + "properties": { + "identity": { + "required": [ + "value" + ], + "description": "The corresponding User object of the Account.", + "properties": { + "userName": { + "description": "The identity name of the Account User.", + "type": "string", + "example": "Barbara.Jensen" + }, + "displayName": { + "description": "The displayable name of the Account User.", + "type": "string", + "example": "Barbara Jensen" + }, + "value": { + "description": "IdentityIQ identifier for the Account User.", + "type": "string", + "example": "c0a7778b7ef71e79817ee74e6a1f0444" + }, + "ref": { + "description": "The URI of the SCIM resource representing the Account User.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Users/c0a7778b7ef71e79817ee74e6a1f0444" + } + } + }, + "application": { + "required": [ + "value" + ], + "description": "The corresponding Application object of the Account.", + "properties": { + "displayName": { + "description": "The displayable name of the Account Application.", + "type": "string", + "example": "Mock Application1" + }, + "value": { + "description": "IdentityIQ identifier for the Account Application.", + "type": "string", + "example": "c0a7778b7ef71e79817ee74e6a1f0444" + }, + "ref": { + "description": "The URI of the SCIM resource representing the Account Application.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Applications/c0a7778b7ef71e79817ee74e6a1f0444" + } + } + }, + "nativeIdentity": { + "description": "The Account unique identifier associated with the native application. This field is immutable.", + "type": "string", + "example": "a1b2c3" + }, + "displayName": { + "description": "The name of the Account, suitable for display to end-users.", + "type": "string", + "example": "Barbara Jensen" + }, + "instance": { + "description": "The instance identifier of the Account. This field is immutable.", + "type": "string", + "example": "mockInstance" + }, + "password": { + "description": "The password of the Account, used in created or changing the Account password. This attribute is write-only and will never be returned in a response.", + "type": "string", + "example": "useStrongPwd123!" + }, + "currentPassword": { + "description": "The current password of the Account, used in created or changing the Account password. This attribute is write-only and will never be returned in a response.", + "type": "string", + "example": "useStrongPwd123!" + }, + "urn:ietf:params:scim:schemas:sailpoint:1.0:Application:Schema:APPLICATION NAME:account": { + "description": "Provide the name of Application that corresponds to this Account in APPLICATION NAME. This field contains an object structure dependent on the Application that the Account applies to.

        Example: urn:ietf:params:scim:schemas:sailpoint:1.0:Application:Schema:**My Application1**:account: { \"department\": \"IT\"}", + "type": "object", + "additionalProperties": true + }, + "active": { + "description": "Flag to indicate this account is enabled or disabled.", + "type": "boolean", + "example": true + }, + "locked": { + "description": "Flag to indicate this account is locked. An account may be unlocked by setting this attribute to false, but can not be locked by setting a false value to true.", + "type": "boolean", + "example": true + } + }, + "required": [ + "identity", + "application", + "nativeIdentity", + "urn:ietf:params:scim:schemas:sailpoint:1.0:Application:Schema:APPLICATION NAME:account" + ] + }, + "accountResponse": { + "properties": { + "id": { + "description": "IdentityIQ id of the Account.", + "type": "string", + "example": "c0b4568a4fe7458c434ee77d1fbt156b" + }, + "identity": { + "description": "The corresponding User object of the Account.", + "properties": { + "userName": { + "description": "The identity name of the Account User.", + "type": "string", + "example": "Barbara.Jensen" + }, + "displayName": { + "description": "The displayable name of the Account User.", + "type": "string", + "example": "Barbara Jensen" + }, + "value": { + "description": "IdentityIQ identifier for the Account User.", + "type": "string", + "example": "c0a7778b7ef71e79817ee74e6a1f0444" + }, + "ref": { + "description": "The URI of the SCIM resource representing the Account User.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Users/c0a7778b7ef71e79817ee74e6a1f0444" + } + } + }, + "application": { + "description": "The corresponding Application object of the Account.", + "properties": { + "displayName": { + "description": "The displayable name of the Account Application.", + "type": "string", + "example": "Mock Application1" + }, + "value": { + "description": "IdentityIQ identifier for the Account Application.", + "type": "string", + "example": "c0a7778b7ef71e79817ee74e6a1f0444" + }, + "ref": { + "description": "The URI of the SCIM resource representing the Account Application.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Applications/c0a7778b7ef71e79817ee74e6a1f0444" + } + } + }, + "nativeIdentity": { + "description": "The Account unique identifier associated with the native application. This field is immutable.", + "type": "string", + "example": "a1b2c3" + }, + "displayName": { + "description": "The name of the Account, suitable for display to end-users.", + "type": "string", + "example": "Barbara Jensen" + }, + "instance": { + "description": "The instance identifier of the Account. This field is immutable.", + "type": "string", + "example": null + }, + "uuid": { + "description": "The UUID of the Account.", + "type": "string", + "example": "{f99999ff-f000-444b-b6ae-4443dd6cd6ed}" + }, + "urn:ietf:params:scim:schemas:sailpoint:1.0:Application:Schema:APPLICATION NAME:account": { + "description": "Provide the name of Application that corresponds to this Account in APPLICATION NAME. This field contains an object structure dependent on the Application that the Account applies to.

        Example: urn:ietf:params:scim:schemas:sailpoint:1.0:Application:Schema:**My Application1**:account: { \"department\": \"IT\"}", + "type": "object", + "additionalProperties": true + }, + "active": { + "description": "Flag to indicate this account is enabled or disabled.", + "type": "boolean", + "example": true + }, + "locked": { + "description": "Flag to indicate this account is locked. An account may be unlocked by setting this attribute to false, but can not be locked by setting a false value to true.", + "type": "boolean", + "example": true + }, + "manuallyCorrelated": { + "description": "Flag to indicate this account has been manually correlated in the UI.", + "type": "boolean", + "example": true + }, + "hasEntitlements": { + "description": "Flag to indicate this account has one or more entitlement attributes.", + "type": "boolean", + "example": true + }, + "lastRefresh": { + "description": "Datetime representation of the last refresh for this Account.", + "type": "string", + "format": "date-time" + }, + "lastTargetAggregation": { + "description": "Datetime representation of last targeted aggregation for the Account.", + "type": "string", + "format": "date-time" + }, + "meta": { + "description": "Metadata of the SCIM resource.", + "properties": { + "created": { + "description": "Datetime this resource was created.", + "type": "string", + "format": "date-time", + "example": "2022-02-11T01:34:04.074-05:00" + }, + "location": { + "description": "The location of the resource.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Accounts/c0b4568a4fe7458c434ee77d1fbt156b" + }, + "lastModified": { + "description": "Datetime the resource was last modified.", + "type": "string", + "format": "date-time", + "example": "2022-02-11T01:08:45.866-05:00" + }, + "version": { + "description": "The version of the SCIM resource.", + "type": "string", + "example": "W\"1644561244074\"" + }, + "resourceType": { + "description": "The resource type.", + "type": "string", + "example": "Account" + } + } + }, + "schemas": { + "description": "The schemas involved in the SCIM resource.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:schemas:sailpoint:1.0:Account", + "urn:ietf:params:scim:schemas:sailpoint:1.0:Application:Schema:Mock Application:account" + ] + } + } + }, + "SailPoint-Alert-Schema": { + "description": "Attributes for schema: urn:ietf:params:scim:schemas:sailpoint:1.0:Alert", + "type": "object", + "properties": { + "id": { + "description": "Unique identifier of the Alert.", + "type": "string", + "example": "c0a8019c7fe11678817fe18984351477" + }, + "name": { + "description": "Name of the Alert, auto-generated by the SCIM Server.", + "type": "string", + "example": "Low-Level Alert" + }, + "displayName": { + "description": "Display name of the Alert.", + "type": "string", + "example": "Auto-generated low level alert." + }, + "type": { + "description": "Type of the Alert.", + "type": "string", + "example": "Business Process Alert." + }, + "attributes": { + "type": "array", + "description": "A list of attributes of the Alert.", + "items": { + "properties": { + "key": { + "description": "The attribute key.", + "type": "string", + "example": "Active" + }, + "value": { + "description": "The attribute value.", + "type": "string", + "example": "False" + } + } + } + }, + "application": { + "description": "The corresponding Application object of the Alert.", + "type": "array", + "items": { + "properties": { + "value": { + "description": "The Application associated with the Alert.", + "type": "string", + "example": "ADDirectDemoData" + }, + "$ref": { + "description": "The URI of the SCIM resource representating the Alert application.", + "type": "object", + "example": "http://localhost:8080/identityiq/scim/v2/Applications/7f00000180281df7818028bfed10a75a" + }, + "displayName": { + "description": "The name of the Alert Application. OPTIONAL and READ-ONLY.", + "type": "string", + "example": "Active Directory Demo Data" + } + } + } + }, + "actions": { + "description": "Not empty if action was taken on the Alert.", + "type": "array", + "items": { + "properties": { + "type": { + "description": "The type of action performed as a result of the Alert.", + "type": "string", + "enum": [ + "WORKFLOW", + "CERTIFICATION", + "NOTIFICATION" + ], + "example": "WORKFLOW" + }, + "alertDefinitionName": { + "description": "The name of the Alert Definition that triggered the action.", + "type": "string", + "example": "lowSeverityAlertDefinition" + }, + "resultId": { + "description": "Typically actions create other objects, a certificationId or workflowId as a result of the action taken.", + "type": "string", + "example": "7f00000180281df7818028c109ea1742" + }, + "result": { + "description": "The Task Result of the Alert.", + "type": "array", + "items": { + "properties": { + "name": { + "description": "The name of the Task Result for the Alert action.", + "type": "string" + }, + "workflowName": { + "description": "The name of the Workflow used in the Alert action task result.", + "type": "string", + "example": "LCM Provisioning" + }, + "notifications": { + "description": "Notifications to send when a Alert action is generated.", + "type": "array", + "items": { + "properties": { + "name": { + "description": "The name of configured notifications for Alert action results.", + "type": "string", + "example": "lowLevelAlertNotification" + }, + "displayName": { + "description": "Display name for the Alert action notification.", + "type": "string", + "example": "lowLevelAlert result notification" + }, + "emailAddresses": { + "description": "A list of email addresses to send an Alert action notification.", + "type": "string", + "example": "amanda.ross@demoexample.com, alice.ford@demoexample.com" + } + } + } + } + } + } + } + } + } + }, + "alertDate": { + "description": "The Alert DateTime, this could have different meanings based on the type of alert.", + "type": "string", + "format": "date-time", + "example": "2022-03-31T14:52:40.265-05:00" + }, + "lastProcessed": { + "description": "The DateTime of the last time the Alert was processed, this does not indicate the system took action on the Alert.", + "type": "string", + "format": "date-time", + "example": "2022-03-31T14:52:40.260-05:00" + }, + "nativeId": { + "description": "Unique Identifier of the Alert in the native system.", + "type": "string", + "example": "420bebfb-c87a-406f-930c-29e06feb47bc" + }, + "targetId": { + "description": "Unique Identifier of the target object which caused the Alert.", + "type": "string", + "example": "c0a8019c7fe51750817fe634a6b10171" + }, + "targetType": { + "description": "The type of SailPointObject the target is.", + "type": "string", + "example": "Certification" + }, + "targetDisplayName": { + "description": "User friendly display name of the target object.", + "type": "string", + "example": "Manager Certification" + }, + "meta": { + "type": "object", + "properties": { + "created": { + "description": "DateTime when the Alert was created.", + "type": "string", + "format": "date-time", + "example": "2022-04-15T14:28:25.471-05:00" + }, + "lastModified": { + "description": "DateTime of Alert last modification.", + "type": "string", + "example": "2022-04-05T15:52:30.119-05:00" + }, + "location": { + "description": "URL to the Alert.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Alerts/c0a8019c802d1e5a81802eb2b57e020f" + }, + "version": { + "description": "Alert version.", + "type": "string", + "example": "W\"1650050905471\"" + }, + "resourceType": { + "description": "Resource type of the metadata subject.", + "type": "string", + "example": "Alert" + } + } + } + } + }, + "SailPoint-AlertInput-Schema": { + "description": "Alert input object, used to pass arguments to Alert related operations. Attributes as specified in schema: urn:ietf:params:scim:schemas:sailpoint:1.0:AlertInput", + "type": "object", + "properties": { + "input": { + "description": "A list of arguments to provide during real-time alert processing.", + "type": "array", + "items": { + "properties": { + "key": { + "description": "The attribute key.", + "type": "string", + "example": "renewThreshold" + }, + "value": { + "description": "The attribute value.", + "type": "string", + "example": "100" + }, + "type": { + "description": "The attribute type.", + "type": "string", + "example": "integer" + } + } + } + }, + "aggregationTaskInput": { + "description": "A list of arguments to provide to the alert aggregation task.", + "type": "array", + "items": { + "properties": { + "key": { + "description": "The attribute key.", + "type": "string", + "example": "promoteAttributes" + }, + "value": { + "description": "The attribute value.", + "type": "string", + "example": "false" + }, + "type": { + "description": "The attribute type.", + "type": "string", + "example": "boolean" + } + } + } + }, + "processorTaskInput": { + "description": "A list of arguments to provide to the alert processor task.", + "type": "array", + "items": { + "properties": { + "key": { + "description": "The attribute key.", + "type": "string", + "example": "promoteAttributes" + }, + "value": { + "description": "The attribute value.", + "type": "string", + "example": "false" + }, + "type": { + "description": "The attribute type.", + "type": "string", + "example": "boolean" + } + } + } + } + } + }, + "alertGetResponse": { + "properties": { + "id": { + "description": "Unique identifier of the Alert.", + "type": "string", + "example": "c0a8019c7fe11678817fe18984351477" + }, + "name": { + "description": "Name of the Alert, auto-generated by the SCIM Server.", + "type": "string", + "example": "0000000001" + }, + "displayName": { + "description": "Display name of the Alert.", + "type": "string", + "example": "Hello World!" + }, + "type": { + "description": "Type of the Alert.", + "type": "string", + "example": "Permission" + }, + "attributes": { + "description": "A list of attributes of the Alert.", + "type": "array", + "items": { + "properties": { + "value": { + "description": "The attribute value.", + "type": "string", + "example": "Grackle5.Test.Sailpoint.com" + }, + "key": { + "description": "The attribute key.", + "type": "string", + "example": "bamName" + } + } + } + }, + "application": { + "description": "The corresponding Application object of the Alert.", + "type": "object", + "properties": { + "value": { + "description": "The Application associated with the Alert.", + "type": "string", + "example": "Active_Directory" + }, + "$ref": { + "description": "The URI of the SCIM resource representating the Alert application.", + "type": "object", + "example": "http://localhost:8080/identityiq/scim/v2/Applications/7f00000180281df7818028bfed100826" + }, + "displayName": { + "description": "The name of the Alert Application.", + "type": "string", + "example": "Active_Directory" + } + } + }, + "actions": { + "description": "Not empty if action was taken on the Alert.", + "type": "array", + "items": { + "properties": { + "type": { + "description": "The type of action performed as a result of the Alert.", + "type": "string", + "enum": [ + "WORKFLOW", + "CERTIFICATION", + "NOTIFICATION" + ], + "example": "WORKFLOW" + }, + "alertDefinitionName": { + "description": "The name of the Alert Definition that triggered the action.", + "type": "string", + "example": "lowSeverityAlertDefinition" + }, + "resultId": { + "description": "Typically actions create other objects, a certificationId or workflowId as a result of the action taken.", + "type": "string", + "example": "7f00000180281df7818028c109ea1742" + }, + "result": { + "description": "The Task Result of the Alert.", + "type": "array", + "items": { + "properties": { + "name": { + "description": "The name of the Task Result for the Alert action.", + "type": "string" + }, + "workflowName": { + "description": "The name of the Workflow used in the Alert action task result.", + "type": "string", + "example": "LCM Provisioning" + }, + "notifications": { + "description": "Notifications to send when a Alert action is generated.", + "type": "array", + "items": { + "properties": { + "name": { + "description": "The name of configured notifications for Alert action results.", + "type": "string", + "example": "lowLevelAlertNotification" + }, + "displayName": { + "description": "Display name for the Alert action notification.", + "type": "string", + "example": "lowLevelAlert result notification" + }, + "emailAddresses": { + "description": "A list of email addresses to send an Alert action notification.", + "type": "string", + "example": "amanda.ross@demoexample.com, alice.ford@demoexample.com" + } + } + } + } + } + } + } + } + } + }, + "alertDate": { + "description": "The Alert DateTime, this could have different meanings based on the type of alert.", + "type": "string", + "format": "date-time", + "example": "2022-03-31T14:52:40.265-05:00" + }, + "lastProcessed": { + "description": "The DateTime of the last time the alert was processed, this does not indicate the system took action on the Alert.", + "type": "string", + "format": "date-time", + "example": "2022-03-31T14:52:40.260-05:00" + }, + "nativeId": { + "description": "Unique Identifier of the Alert in the native system.", + "type": "string", + "example": "420bebfb-c87a-406f-930c-29e06feb47bc" + }, + "targetId": { + "description": "Unique Identifier of the target object which caused the Alert.", + "type": "string", + "example": "c0a8019c7fe51750817fe634a6b10171" + }, + "targetType": { + "description": "The type of SailPointObject the target is.", + "type": "string", + "example": "Certification" + }, + "targetDisplayName": { + "description": "User friendly display name of the target object.", + "type": "string", + "example": "Manager Certification" + }, + "meta": { + "description": "Metadata for the Alert.", + "type": "array", + "items": { + "properties": { + "created": { + "description": "DateTime when the Alert was created.", + "type": "string", + "format": "date-time", + "example": "2022-03-31T14:52:40.245-05:00" + }, + "location": { + "description": "URL to the Alert.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Alerts/c0a8019c7fe11678817fe18984351477" + }, + "lastModified": { + "description": "DateTime of Alert last modification.", + "type": "string", + "format": "date-time", + "example": "2022-03-31T14:52:40.265-05:00" + }, + "version": { + "description": "Alert version.", + "type": "string", + "example": "W\"1650050901217\"" + }, + "resourceType": { + "description": "Resource type of the metadata subject.", + "type": "string", + "example": "Alert" + } + } + } + }, + "schemas": { + "description": "A list of the schemas used for Alerts.", + "type": "array", + "items": { + "type": "string", + "example": [ + "urn:ietf:params:scim:schemas:sailpoint:1.0:AlertInput", + "urn:ietf:params:scim:schemas:sailpoint:1.0:Alert" + ] + } + } + } + }, + "alertPostRequestBody": { + "properties": { + "displayName": { + "description": "Display name of the Alert.", + "type": "string", + "example": "Confidential File Opened" + }, + "type": { + "description": "Type of the Alert.", + "type": "string", + "example": "alert" + }, + "attributes": { + "description": "A list of attributes of the Alert.", + "type": "array", + "items": { + "properties": { + "key": { + "description": "The attribute key.", + "type": "string", + "example": "userFullName" + }, + "value": { + "description": "The attribute value.", + "type": "string", + "example": "TEST/Anne.Arnold" + } + } + } + }, + "alertDate": { + "description": "The Alert DateTime, this could have different meanings based on the type of alert.", + "type": "string", + "format": "date-time", + "example": "2022-05-04T13:24:09.661-05:00" + }, + "nativeId": { + "description": "Unique Identifier of the Alert in the native system.", + "type": "string", + "example": "2351234513245349" + }, + "targetId": { + "description": "Unique Identifier of the target object which caused the Alert.", + "type": "string", + "example": "2c9091d24f65486f014f6568be4400f7" + }, + "targetType": { + "description": "The type of SailPointObject the target is.", + "type": "string", + "example": "Identity" + }, + "targetDisplayName": { + "description": "User friendly display name of the target object.", + "type": "string", + "example": "Anne.Arnold" + }, + "application": { + "description": "The corresponding Application object of the Alert.", + "type": "object", + "properties": { + "displayName": { + "description": "The name of the Alert Application. OPTIONAL and READ-ONLY.", + "type": "string", + "example": "JDBCDirectAlerts" + }, + "value": { + "description": "The Application associated with the Alert.", + "type": "string", + "example": "7f00000180281df7818028bfed100826" + }, + "$ref": { + "description": "The URI of the SCIM resource representating the Alert application.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Applications/7f00000180281df7818028bfed100826" + } + } + } + } + }, + "alertByIdGetBody": { + "properties": { + "id": { + "description": "Unique identifier of the Alert.", + "type": "string", + "example": "c0a8019c7ffa186e817ffb80170a0195" + }, + "name": { + "description": "Name of the Alert, auto-generated by the SCIM Server.", + "type": "string", + "example": "0000000002" + }, + "displayName": { + "description": "Display name of the Alert.", + "type": "string", + "example": "Workflow Alert" + }, + "type": { + "description": "Type of the Alert.", + "type": "string", + "example": "Business Process Alert" + }, + "attributes": { + "description": "A list of attributes of the Alert.", + "type": "array", + "items": { + "properties": { + "value": { + "description": "The attribute value.", + "type": "string", + "example": "Windows File Server (Agent)" + }, + "key": { + "description": "The attribute key.", + "type": "string", + "example": "applicationType" + } + } + } + }, + "application": { + "description": "The corresponding Application object of the Alert.", + "type": "array", + "items": { + "properties": { + "value": { + "description": "The Application associated with the Alert.", + "type": "string", + "example": "SAP" + }, + "$ref": { + "description": "The URI of the SCIM resource representating the Alert application.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Applications/7f00000180281df7818028bfed100826" + }, + "displayName": { + "description": "The name of the Alert Application. OPTIONAL and READ-ONLY.", + "type": "string", + "example": "SAP Financial App" + } + } + } + }, + "actions": { + "description": "Alert actions.", + "type": "array", + "items": { + "properties": { + "type": { + "description": "The type of action performed as a result of the Alert.", + "type": "string", + "enum": [ + "WORKFLOW", + "CERTIFICATION", + "NOTIFICATION" + ], + "example": "Certification" + }, + "alertDefinitionName": { + "description": "The name of the Alert Definition that triggered the action.", + "type": "string", + "example": "certLauncher" + }, + "resultId": { + "description": "Typically actions create other objects, a certificationId or workflowId as a result of the action taken.", + "type": "string", + "example": "7f00000180281df7818028c109ea1742" + }, + "result": { + "description": "The Task Result of the Alert.", + "type": "array", + "items": { + "properties": { + "name": { + "description": "The name of the Task Result for the Alert action.", + "type": "string", + "example": "Alert 0000000001 Certification Result" + }, + "workflowName": { + "description": "The name of the Workflow used in the Alert action task result.", + "type": "string", + "example": "refreshCerficationSchedule" + }, + "notifications": { + "type": "array", + "description": "Notifications to send when a Alert action is generated.", + "items": { + "properties": { + "name": { + "description": "The name of configured notifications for Alert action results.", + "type": "string", + "example": "000000009" + }, + "displayName": { + "description": "Display name for the Alert action notification.", + "type": "string", + "example": "Certification Refresh Notification for James.Smith" + }, + "emailAddresses": { + "description": "A list of email addresses to send an Alert action notification.", + "type": "string", + "example": "james.smith@demoexample.com" + } + } + } + } + } + } + } + } + } + }, + "alertDate": { + "description": "The Alert DateTime, this could have different meanings based on the type of alert.", + "type": "string", + "format": "date-time", + "example": "2022-03-31T14:52:40.265-05:00" + }, + "lastProcessed": { + "description": "The DateTime of the last time the Alert was processed, this does not indicate the system took action on the Alert.", + "type": "string", + "format": "date-time", + "example": "2022-03-31T14:52:40.260-05:00" + }, + "nativeId": { + "description": "Unique Identifier of the Alert in the native system.", + "type": "string", + "example": "420bebfb-c87a-406f-930c-29e06feb47bc" + }, + "targetId": { + "description": "Unique Identifier of the target object which caused the Alert.", + "type": "string", + "example": "c0a8019c7fe51750817fe634a6b10171" + }, + "targetType": { + "description": "The type of SailPointObject the target is.", + "type": "string", + "example": "Certification" + }, + "targetDisplayName": { + "description": "User friendly display name of the target object.", + "type": "string", + "example": "Manager Certification" + }, + "meta": { + "type": "object", + "properties": { + "created": { + "description": "DateTime when the Alert was created.", + "type": "string", + "format": "date-time", + "example": "2022-04-05T15:52:30.090-05:00" + }, + "location": { + "description": "URL to the Alert.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Alerts/c0a8019c7ffa186e817ffb80170a0195" + }, + "lastModified": { + "description": "DateTime of Alert last modification.", + "type": "string", + "format": "date-time", + "example": "2022-04-05T15:52:30.119-05:00" + }, + "version": { + "description": "Alert version.", + "type": "string", + "example": "W\"1649191950119\"" + }, + "resourceType": { + "description": "Resource type of the metadata subject.", + "type": "string", + "example": "Alert" + } + } + } + } + }, + "applicationResponse": { + "properties": { + "id": { + "description": "IdentityIQ id of the Application.", + "type": "string", + "example": "c0b4568a4fe7458c434ee77d1fbt156b" + }, + "name": { + "description": "Unique name for the Application. This name MUST be unique across the entire set of Applications.", + "type": "string", + "example": "Active Directory" + }, + "descriptions": { + "description": "A list of localized descriptions of the Application.", + "type": "array", + "example": [ + { + "locale": "en_US", + "value": "The main Active_Directory domain data for the corporate network." + } + ] + }, + "type": { + "description": "The type of the Application.", + "type": "string", + "example": "Active Directory - Direct" + }, + "features": { + "description": "A list of features of the Application.", + "type": "array", + "example": [ + [ + "DIRECT_PERMISSIONS", + "NO_RANDOM_ACCESS", + "DISCOVER_SCHEMA" + ] + ] + }, + "owner": { + "description": "The owner of the Application.", + "type": "object", + "properties": { + "displayName": { + "description": "Display name of the application owner.", + "type": "string", + "example": "Joe Smith" + }, + "value": { + "description": "id of the application owner.", + "type": "string", + "example": "c0b4568a4fe7458c434ee77d1fbt156b" + }, + "$ref": { + "description": "URI reference of the application owner resource.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Users/c0b4568a4fe7458c434ee77d1fbt156b" + } + } + }, + "applicationSchemas": { + "description": "List of the Application Schemas.", + "type": "object", + "properties": { + "value": { + "description": "The urn of the Application Schema.", + "type": "string", + "example": "urn:ietf:params:scim:schemas:sailpoint:1.0:Application:Schema:Active Directory:account" + }, + "type": { + "description": "The type of Application Schema (account, group, etc.).", + "type": "string", + "example": "account" + }, + "$ref": { + "description": "The URI of the SCIM resource representing the Entitlement.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Schemas/urn:ietf:params:scim:schemas:sailpoint:1.0:Application:Schema:Active%20Directory:account" + } + } + }, + "meta": { + "description": "Metadata of the SCIM resource.", + "properties": { + "created": { + "description": "Datetime this Application was created.", + "type": "string", + "format": "date-time", + "example": "2022-02-11T01:34:04.074-05:00" + }, + "location": { + "description": "The location of the SCIM resource.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Applications/c0b4568a4fe7458c434ee77d1fbt156b" + }, + "lastModified": { + "description": "Datetime the Application was last modified.", + "type": "string", + "format": "date-time", + "example": "2022-02-11T01:08:45.866-05:00" + }, + "version": { + "description": "The version of the SCIM resource.", + "type": "string", + "example": "W\"1644561244074\"" + }, + "resourceType": { + "description": "The SCIM resource type.", + "type": "string", + "example": "Application" + }, + "schemas": { + "description": "The schemas involved in the SCIM resource.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:schemas:sailpoint:1.0:Application" + ] + } + } + } + } + }, + "checkedPolicyViolationsPostRequest": { + "type": "object", + "properties": { + "identity": { + "description": "An identity for whom access is requested on the provisioning simulation", + "type": "string", + "example": { + "identity": "Ryan.Russell" + } + }, + "plan": { + "description": "A provisioning plan detailing the access to request on the simulation", + "type": "object", + "properties": { + "value": { + "type": "object", + "properties": { + "accounts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "op": { + "description": "The operation to perform on the provisioning.", + "type": "string", + "example": "Modify" + }, + "instance": { + "type": "string", + "example": "null", + "description": "A particular instance to provision this access to" + }, + "application": { + "type": "string", + "example": "Active_Directory", + "description": "The application that owns the access items in the request" + }, + "attributes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "op": { + "description": "The operation to perform on the access item.", + "type": "string", + "example": "Add" + }, + "name": { + "description": "The type of access item to provision.", + "type": "string", + "example": "groupmbr" + }, + "value": { + "description": "The name of the access item to provision.", + "type": "string", + "example": "UnixAdministration" + } + } + } + } + } + } + } + } + } + } + }, + "type": { + "type": "string", + "example": "application/sailpoint.object.ProvisioningPlan+json" + }, + "policies": { + "description": "A list of policies to check for new policy violations on the access provisioned by the simulation.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "SOD Policy", + "Entitlement Policy", + "RandomPolicyNotExisting" + ] + } + } + }, + "checkedPolicyViolationResponse": { + "type": "object", + "properties": { + "identity": { + "description": "An identity for whom access was requested on the provisioning simulation", + "type": "string", + "example": { + "identity": "Ryan.Russell" + } + }, + "meta": { + "type": "object", + "properties": { + "resourceType": { + "description": "", + "type": "string", + "example": "CheckedPolicyViolation" + } + } + }, + "violations": { + "type": "array", + "items": { + "properties": { + "entitlements": { + "description": "An array of the entitlements used in the provisioning simulation.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "a2a", + "a2b", + "benefits" + ] + }, + "policyName": { + "description": "The name of the policy that conflicted with the access items provisioned in the simulation causing policy violation.", + "type": "string", + "example": "SOD Policy" + }, + "policyType": { + "description": "The type of the policy that conflicted with the access items provisioned in the simulation causing policy violation(s).", + "type": "string", + "example": "SOD" + }, + "description": { + "description": "The description of the policy violation(s) caused by the access provisioned in the simulation.", + "type": "string", + "example": "Security design should not be combined with administrative permissions." + }, + "constraintName": { + "description": "The specific constraint in the policy that conflicted with the access items provisioned in the simulation.", + "type": "string", + "example": " IT SOD-117" + }, + "leftBundles": { + "description": "The left set of entitlements defined in the policy constraint in order to check against another set of entitlements for compliance.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "Security Architect - IT" + ] + }, + "rightBundles": { + "description": "The right set of entitlements defined in the policy constraint in order to check against another set of entitlements for compliance.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "Unix Administrator - IT" + ] + } + } + } + }, + "schemas": { + "description": "The SCIM schema for Checked Policy Violations.", + "type": "array", + "items": { + "type": "string", + "example": "urn:ietf:params:scim:schemas:sailpoint:1.0:CheckedPolicyViolation" + } + }, + "policies": { + "description": "The set of policies used to check for conflicting access in the provisioning simulation", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "SOD Policy", + "Entitlement Policy", + "RandomPolicyNotExisting" + ] + }, + "plan": { + "description": "A provisioning plan detailing the access to request on the simulation", + "type": "object", + "properties": { + "value": { + "type": "object", + "properties": { + "accounts": { + "type": "array", + "items": { + "type": "object", + "properties": { + "op": { + "description": "The operation performed on the access in the provisioning simulation.", + "type": "string", + "example": "Modify" + }, + "instance": { + "type": "string", + "example": "null", + "description": "A particular instance to provision this access to" + }, + "application": { + "type": "string", + "example": "Active_Directory", + "description": "The application that owns the access provisioned in the simulation." + }, + "attributes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "op": { + "description": "The operation performed on the access in the provisioning simulation.", + "type": "string", + "example": "Add" + }, + "name": { + "description": "The type of provisioned access.", + "type": "string", + "example": "groupmbr" + }, + "value": { + "description": "The name of the provisioned access items.", + "type": "string", + "example": "UnixAdministration" + } + } + } + } + } + } + } + } + }, + "type": { + "type": "string", + "example": "application/sailpoint.object.ProvisioningPlan+json" + } + } + } + } + }, + "SailPoint-Entitlement-Schema": { + "description": "Attributes for schema: urn:ietf:params:scim:schemas:sailpoint:1.0:Entitlement", + "type": "object", + "properties": { + "id": { + "description": "Unique identifier of the Entitlement.", + "type": "string", + "example": "c0a8019c7fe11678817fe18984351477" + }, + "descriptions": { + "description": "A list of localized descriptions of the Entitlement.", + "items": { + "type": "array", + "properties": { + "locale": { + "description": "The locale associated with this Entitlement description.", + "type": "string", + "example": "en_US" + }, + "value": { + "description": "The description in localized form.", + "type": "string", + "example": "**Card Reader Directory** target friendly description" + } + } + } + }, + "displayableName": { + "description": "Displayable name of the Entitlement.", + "type": "string", + "example": "Boolean" + }, + "type": { + "description": "Type of the Entitlement.", + "type": "string", + "example": "Permission" + }, + "application": { + "description": "The corresponding Application object of the Entitlement.", + "type": "array", + "items": { + "properties": { + "value": { + "description": "The Application associated with the Entitlement.", + "type": "string", + "example": "ADDirectDemoData" + }, + "$ref": { + "description": "The URI of the SCIM resource representating the Entitlement application.", + "type": "object", + "example": "http://localhost:8080/identityiq/scim/v2/Applications/7f00000180281df7818028bfed100826" + }, + "displayName": { + "description": "The name of the Entitlement Application. OPTIONAL and READ-ONLY.", + "type": "string", + "example": "Active Directory Demo Data" + } + } + } + }, + "owner": { + "description": "The owner of the Entitlement.", + "type": "array", + "items": { + "properties": { + "value": { + "description": "The id of the SCIM resource representing the Entitlement Owner.", + "type": "string", + "example": "7f00000180281df7818028bfb0d103c7" + }, + "$ref": { + "description": "The URI of the SCIM resource representing the Entitlement Owner.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Users/7f00000180281df7818028bfb0d103c7" + }, + "displayName": { + "description": "The displayName of the Entitlement Owner. OPTIONAL and READ-ONLY.", + "type": "string", + "example": "Debra Wood" + } + } + } + }, + "requestable": { + "description": "Flag to indicate this entitlement is requestable.", + "type": "boolean", + "example": false + }, + "aggregated": { + "description": "Flag to indicate this entitlement has been aggregated.", + "type": "boolean", + "example": true + }, + "attribute": { + "description": "Attribute of the Entitlement.", + "type": "string", + "example": "Employee Data" + }, + "value": { + "description": "Attribute value of the Entitlement.", + "type": "string", + "example": "a2a" + }, + "lastRefresh": { + "description": "The DateTime when the Entitlement was refreshed.", + "type": "string", + "format": "date-time", + "example": "2022-04-14T10:44:54.880-05:00" + }, + "lastTargetAggregation": { + "description": "The date aggregation was last targeted of the Entitlement.", + "type": "string", + "format": "date-time", + "example": "2022-04-14T10:48:01.907-05:00" + }, + "classifications": { + "description": "Classifications of this Entitlement.", + "type": "object", + "items": { + "required": [ + "classification" + ], + "properties": { + "source": { + "description": "The source of the ObjectClassification.", + "type": "string", + "example": "IdentityAI" + }, + "effective": { + "description": "Flag indicating this is an effective Classification.", + "type": "boolean", + "example": false + }, + "classification": { + "description": "Classification of this object.", + "type": "array", + "items": { + "properties": { + "name": { + "description": "The name of the Classification.", + "type": "string", + "example": "structuralDesign1" + }, + "displayName": { + "description": "The displayName of the Classification.", + "type": "string", + "example": "Structural Design" + }, + "origin": { + "description": "The origin of the Classification.", + "type": "string", + "example": "Source Templates" + }, + "type": { + "description": "The type of the Classification.", + "type": "string", + "example": "aggregation" + } + } + } + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "resourceType": { + "example": "Schema" + } + } + }, + "entitleAuth": { + "description": "This is an Extended Attribute from Managed Attribute used to describe the authorization level of an Entitlement.", + "type": "string", + "enum": [ + "HIGH", + "MEDIUM", + "LOW", + "NONE" + ], + "example": "HIGH" + }, + "entDate": { + "description": "This is an Extended Attribute from Managed Attribute. The Entitlement DateTime.", + "type": "string", + "format": "date-time", + "example": "2022-04-14T10:44:54.741-05:00" + }, + "active": { + "description": "This is an Extended Attribute from Managed Attribute. Describes if an Entitlement is active.", + "type": "boolean", + "example": true + }, + "rank": { + "description": "This is an Extended Attribute from Managed Attribute.", + "type": "integer", + "example": 1 + }, + "rule": { + "description": "This is an Extended Attribute from Managed Attribute. Used to specify a Rule object for the Entitlement.", + "type": "string", + "example": "EntitlementOwnerRule" + }, + "reviewer": { + "description": "This is an Extended Attribute from Managed Attribute. The Identity that reviewed the Entitlement.", + "type": "object", + "properties": { + "displayName": { + "description": "Display name of the Entitlement reviewer.", + "type": "string", + "example": "Debra Wood" + }, + "value": { + "description": "id of the Entitlement reviewer.", + "type": "string", + "example": "c0b4568a4fe7458c434ee77d1fbt156b" + }, + "$ref": { + "description": "URI reference of the Entitlement reviewer resource.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Users/c0b4568a4fe7458c434ee77d1fbt156b" + } + } + }, + "email": { + "description": "This is an Extended Attribute from Managed Attribute. Used to specify the Entitlement owner email.", + "type": "string", + "example": "test@example.com" + } + } + }, + "entitlementGetResponse": { + "properties": { + "id": { + "description": "Unique identifier of the Entitlement.", + "type": "string", + "example": "7f00000180281df7818028bfb83204dc" + }, + "descriptions": { + "description": "A list of localized descriptions of the Entitlement.", + "type": "object", + "properties": { + "locale": { + "description": "The locale associated with this Entitlement description.", + "type": "string", + "example": "en_GB" + }, + "value": { + "description": "The description in localized form.", + "type": "string", + "example": "**AP_Logins** Target Friendly Description" + } + } + }, + "displayName": { + "description": "Displayable name of the Entitlement.", + "type": "string", + "example": "AP_Logins" + }, + "type": { + "description": "Type of the Entitlement.", + "type": "string", + "example": "Permission" + }, + "application": { + "description": "The corresponding Application object of the Entitlement.", + "type": "array", + "items": { + "properties": { + "value": { + "description": "The Application associated with the Entitlement.", + "type": "string", + "example": "7f00000180281df7818028bfac5a0367" + }, + "$ref": { + "description": "The URI of the SCIM resource representating the Entitlement application.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Applications/7f00000180281df7818028bfed100826" + }, + "displayName": { + "description": "The name of the Entitlement Application. OPTIONAL and READ-ONLY.", + "type": "string", + "example": "Oracle_DB_oasis" + } + } + } + }, + "owner": { + "description": "The owner of the Entitlement.", + "type": "array", + "items": { + "properties": { + "value": { + "description": "The id of the SCIM resource representing the Entitlement Owner.", + "type": "string", + "example": "7f00000180281df7818028bfb0d103c7" + }, + "$ref": { + "description": "The URI of the SCIM resource representing the Entitlement Owner.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Users/7f00000180281df7818028bfb0d103c7" + }, + "displayName": { + "description": "The displayName of the Entitlement Owner. OPTIONAL and READ-ONLY.", + "type": "string", + "example": "Debra Wood" + } + } + } + }, + "requestable": { + "description": "Flag to indicate this entitlement is requestable.", + "type": "boolean", + "example": true + }, + "aggregated": { + "description": "Flag to indicate this entitlement has been aggregated.", + "type": "boolean", + "example": true + }, + "attribute": { + "description": "Attribute of the Entitlement.", + "type": "string", + "example": "AP_Logins" + }, + "value": { + "description": "Attribute value of the Entitlement.", + "type": "string", + "example": "CN=AP_Logins,OU=Security,OU=Permissions,DC=test,DC=sailpoint,DC=com" + }, + "lastRefresh": { + "description": "The DateTime when the Entitlement was refreshed.", + "type": "string", + "format": "date-time", + "example": "2022-04-14T10:48:01.907-05:00" + }, + "lastTargetAggregation": { + "description": "The date aggregation was last targeted of the Entitlement.", + "type": "string", + "format": "date-time", + "example": "2022-04-14T10:48:01.907-05:00" + }, + "classifications": { + "description": "Classifications of this Entitlement.", + "type": "object", + "required": [ + "classification" + ], + "properties": { + "source": { + "description": "The source of the ObjectClassification.", + "type": "string", + "example": "UI" + }, + "effective": { + "description": "Flag indicating this is an effective Classification.", + "type": "boolean", + "example": false + }, + "classification": { + "description": "Classification of this object.", + "type": "object", + "properties": { + "name": { + "description": "The name of the classification.", + "type": "string", + "example": "ClassificationB" + }, + "displayName": { + "description": "The display name of the classification.", + "type": "string", + "example": "ClassB" + }, + "origin": { + "description": "The origin of the Classification.", + "type": "string", + "example": "PAMSource" + }, + "type": { + "description": "The type of the Classification.", + "type": "string", + "example": "Aggregation" + } + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "created": { + "description": "DateTime when the Entitlement was created.", + "type": "string", + "format": "date-time", + "example": "2022-04-14T10:44:54.834-05:00" + }, + "location": { + "description": "URL to the Entitlement.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Entitlements/7f00000180281df7818028bfb83204dc" + }, + "lastModified": { + "description": "DateTime of Entitlement last modification.", + "type": "string", + "format": "date-time", + "example": "2022-04-05T15:52:30.119-05:00" + }, + "version": { + "description": "Entitlement version.", + "type": "string", + "example": "\"W\"1649951094834\"" + }, + "resourceType": { + "description": "Resource type of the metadata subject.", + "type": "string", + "example": "Entitlement" + } + } + }, + "schemas": { + "type": "array", + "example": [ + "urn:ietf:params:scim:schemas:sailpoint:1.0:Entitlement" + ] + }, + "entitleAuth": { + "description": "This is an Extended Attribute from Managed Attribute used to describe the authorization level of an Entitlement.", + "type": "string", + "example": "Low" + }, + "entDate": { + "description": "This is an Extended Attribute from Managed Attribute. The Entitlement DateTime.", + "type": "string", + "format": "date-time", + "example": "2022-04-14T10:44:54.738-05:00" + }, + "active": { + "description": "This is an Extended Attribute from Managed Attribute. Describes if an Entitlement is active.", + "type": "boolean", + "example": false + }, + "rank": { + "description": "This is an Extended Attribute from Managed Attribute.", + "type": "integer", + "example": 3 + }, + "rule": { + "description": "This is an Extended Attribute from Managed Attribute. Used to specify a Rule object for the Entitlement.", + "type": "string", + "example": "APLogin-Contractors-Rule" + }, + "reviewer": { + "description": "This is an Extended Attribute from Managed Attribute. The Identity that reviewed the Entitlement.", + "type": "object", + "properties": { + "displayName": { + "description": "Display name of the Entitlement reviewer.", + "type": "string", + "example": "Dan Patrick" + }, + "value": { + "description": "id of the Entitlement reviewer.", + "type": "string", + "example": "c0b4568a4fe7458c434ee77f2fad267c" + }, + "$ref": { + "description": "URI reference of the Entitlement reviewer resource.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Users/c0b4568a4fe7458c434ee77f2fad267c" + } + } + }, + "email": { + "description": "This is an Extended Attribute from Managed Attribute. Used to specify the Entitlement owner email.", + "type": "string", + "example": "dpatrick@demoexample.com" + } + } + }, + "entitlementByIdGetBody": { + "properties": { + "id": { + "description": "Unique identifier of the Entitlement.", + "type": "string", + "example": "7f00000180281df7818028bfb7d204c1" + }, + "descriptions": { + "description": "A list of localized descriptions of the Entitlement.", + "type": "object", + "properties": { + "locale": { + "description": "The locale associated with this Entitlement description.", + "type": "string", + "example": "en_US" + }, + "value": { + "description": "The description in localized form.", + "type": "string", + "example": "**Employee Database** target friendly description" + } + } + }, + "displayableName": { + "description": "Displayable name of the Entitlement.", + "type": "string", + "example": "a2a" + }, + "type": { + "description": "Type of the Entitlement.", + "type": "string", + "example": "group" + }, + "application": { + "description": "The corresponding Application object of the Entitlement.", + "type": "array", + "items": { + "properties": { + "value": { + "description": "The Application associated with the Entitlement.", + "type": "string", + "example": "7f00000180281df7818028bfed100826" + }, + "$ref": { + "description": "The URI of the SCIM resource representating the Entitlement application.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Applications/7f00000180281df7818028bfed100826" + }, + "displayName": { + "description": "The name of the Entitlement Application. OPTIONAL and READ-ONLY.", + "type": "string", + "example": "SAP" + } + } + } + }, + "owner": { + "description": "The owner of the Entitlement.", + "type": "array", + "items": { + "properties": { + "value": { + "description": "The id of the SCIM resource representing the Entitlement Owner.", + "type": "string", + "example": "7f00000180281df7818028bfab930361" + }, + "$ref": { + "description": "The URI of the SCIM resource representing the Entitlement Owner.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Users/7f00000180281df7818028bfab930361" + }, + "displayName": { + "description": "The displayName of the Entitlement Owner. OPTIONAL and READ-ONLY.", + "type": "string", + "example": "Mary Johnson" + } + } + } + }, + "requestable": { + "description": "Flag to indicate this entitlement is requestable.", + "type": "boolean", + "example": true + }, + "aggregated": { + "description": "Flag to indicate this entitlement has been aggregated.", + "type": "boolean", + "example": true + }, + "attribute": { + "description": "Attribute of the Entitlement.", + "type": "string", + "example": "memberOf" + }, + "value": { + "description": "Attribute value of the Entitlement.", + "type": "string", + "example": "CN=a2a,OU=HierarchicalGroups,OU=DemoData,DC=test,DC=sailpoint,DC=com" + }, + "lastRefresh": { + "description": "The DateTime when the Entitlement was refreshed.", + "format": "date-time", + "type": "string", + "example": "2022-04-14T10:48:01.907-05:00" + }, + "lastTargetAggregation": { + "description": "The date aggregation was last targeted of the Entitlement.", + "type": "string", + "format": "date-time", + "example": "2022-04-14T10:48:01.907-05:00" + }, + "classifications": { + "description": "Classifications of this Entitlement.", + "type": "object", + "required": [ + "classification" + ], + "properties": { + "source": { + "description": "The source of the ObjectClassification.", + "type": "string", + "example": "UI" + }, + "effective": { + "description": "Flag indicating this is an effective Classification.", + "type": "boolean", + "example": false + }, + "classification": { + "description": "Classification of this object.", + "type": "object", + "properties": { + "name": { + "description": "The name of the Classification.", + "type": "string", + "example": "ClassificationA" + }, + "displayName": { + "description": "The displayName of the Classification.", + "type": "string", + "example": "ClassA" + }, + "origin": { + "description": "The origin of the Classification.", + "type": "string", + "example": "FAM Aggregation" + }, + "type": { + "description": "The type of the Classification.", + "type": "string", + "example": "Aggregation" + } + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "created": { + "description": "DateTime when the Entitlement was created.", + "type": "string", + "format": "date-time", + "example": "2022-04-05T15:52:30.090-05:00" + }, + "location": { + "description": "URL to the Entitlement.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Entitlements/c0a8019c7ffa186e817ffb80170a0195" + }, + "lastModified": { + "description": "DateTime of Entitlement last modification.", + "type": "string", + "format": "date-time", + "example": "2022-04-05T15:52:30.119-05:00" + }, + "version": { + "description": "Entitlement version.", + "type": "string", + "example": "\"W\"1649191950119\"" + }, + "resourceType": { + "description": "Resource type of the metadata subject.", + "type": "string", + "example": "Entitlement" + } + } + }, + "schemas": { + "type": "array", + "example": [ + "urn:ietf:params:scim:schemas:sailpoint:1.0:Entitlement" + ] + }, + "entitleAuth": { + "description": "This is an Extended Attribute from Managed Attribute used to describe the authorization level of an Entitlement.", + "type": "string", + "example": "None" + }, + "entDate": { + "description": "This is an Extended Attribute from Managed Attribute. The Entitlement DateTime.", + "type": "string", + "format": "date-time", + "example": "2022-04-14T10:44:54.738-05:00" + }, + "active": { + "description": "This is an Extended Attribute from Managed Attribute. Describes if an Entitlement is active.", + "type": "boolean", + "example": false + }, + "rank": { + "description": "This is an Extended Attribute from Managed Attribute.", + "type": "integer", + "example": 3 + }, + "rule": { + "description": "This is an Extended Attribute from Managed Attribute. Used to specify a Rule object for the Entitlement.", + "type": "string", + "example": "APLogin-Contractors-Rule" + }, + "reviewer": { + "description": "This is an Extended Attribute from Managed Attribute. The Identity that reviewed the Entitlement.", + "type": "object", + "properties": { + "displayName": { + "description": "Display name of the Entitlement reviewer.", + "type": "string", + "example": "Caroline Lee" + }, + "value": { + "description": "id of the Entitlement reviewer.", + "type": "string", + "example": "c0b4568a4fe7458c434ee77f2fad267c" + }, + "$ref": { + "description": "URI reference of the Entitlement reviewer resource.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Users/c0b4568a4fe7458c434ee77f2fad267c" + } + } + }, + "emails": { + "description": "This is an Extended Attribute from Managed Attribute. Used to specify the Entitlement owner email.", + "type": "string", + "example": "clee@demoexample.com" + } + } + }, + "SailPoint-LaunchedWorkflow-Schema": { + "description": "Attributes for schema: urn:ietf:params:scim:schemas:sailpoint:1.0:LaunchedWorkflow", + "type": "object", + "properties": { + "workflowName": { + "description": "Name of the Workflow to launch.", + "type": "string", + "example": "LCM Provisioning" + }, + "identityRequestId": { + "type": "string", + "description": "Id representing the identity request.", + "example": "7f000001806719888180675c8f8a016a" + }, + "workflowCaseId": { + "description": "Id representing the workflow case (a running instance of a workflow).", + "type": "string", + "example": "7f000001806719888180675c8f8a025d" + }, + "workflowProcessId": { + "type": "string", + "description": "Id representing the workflow monitoring process log.", + "example": "7f000001806719888180675c8f8a031g" + }, + "retries": { + "type": "integer", + "description": "The number of retries performed during the execution of provisioning activities.", + "example": 0 + }, + "approvalSet": { + "type": "string", + "description": "XML representation of approvals.", + "example": " " + }, + "workflowSummary": { + "type": "string", + "description": "XML representation of the workflow summary.", + "example": "\"\"" + }, + "input": { + "type": "object", + "description": "A list of input attributes of the Launched Workflow.", + "properties": { + "key": { + "type": "string", + "description": "The attribute key.", + "example": "maxRetries" + }, + "value": { + "type": "string", + "description": "The attribute value.", + "example": 2 + }, + "type": { + "type": "string", + "description": "The attribute type.", + "example": "integer" + } + } + }, + "output": { + "type": "object", + "description": "A list of output attributes of the Launched Workflow.", + "properties": { + "key": { + "type": "string", + "description": "The attribute key.", + "example": "retries" + }, + "value": { + "type": "string", + "description": "The attribute value.", + "example": "0" + }, + "type": { + "type": "string", + "description": "The attribute type.", + "example": "application/int" + } + } + } + } + }, + "launchedWorkflowGetResponse": { + "properties": { + "partitioned": { + "description": "Flag to indicate this TaskResult is partitioned. (From the TaskResult used to launch the Workflow).", + "type": "boolean", + "example": true + }, + "completed": { + "type": "string", + "format": "date-time", + "description": "The completed DateTime of the TaskResult. (From the TaskResult used to launch the Workflow).", + "example": "2022-04-14T10:45:26.098-05:00" + }, + "type": { + "description": "Type of the TaskResult. (From the TaskResult used to launch the Workflow).", + "type": "string", + "example": "Workflow" + }, + "launched": { + "type": "string", + "format": "date-time", + "description": "The launched DateTime of the TaskResult. (From the TaskResult used to launch the Workflow).", + "example": "2022-04-14T10:45:26.114-05:00" + }, + "pendingSignOffs": { + "description": "The number of pending signoffs of this TaskResult. (From the TaskResult used to launch the Workflow).", + "type": "integer", + "example": 2 + }, + "workflowName": { + "description": "Name of the Workflow to launch.", + "type": "string", + "example": "Update Identity Adam.Kennedy AccessRequest" + }, + "identityRequestId": { + "description": "Id representing the identity request.", + "type": "string", + "example": "0000000001" + }, + "workflowCaseId": { + "description": "Id representing the workflow case (a running instance of a workflow).", + "type": "string", + "example": "c0a8019c808b1baa81808bde2c2201b3" + }, + "workflowProcessId": { + "type": "string", + "description": "Id representing the workflow monitoring process log.", + "example": "7f000001806719888180675c8f8a225g" + }, + "retries": { + "description": "The number of retries performed during the execution of provisioning activities.", + "type": "integer", + "example": 1 + }, + "approvalSet": { + "description": "XML representation of approvals.", + "type": "string", + "example": "example: " + }, + "workflowSummary": { + "description": "XML representation of the workflow summary.", + "type": "string", + "example": "example: \"\"" + }, + "input": { + "description": "A list of input attributes of the Launched Workflow.", + "type": "object", + "properties": { + "key": { + "description": "The attribute key.", + "type": "string", + "example": "_workflowRef" + }, + "value": { + "description": "The attribute value.", + "type": "string", + "example": "UpdateIdentityWorkflow" + }, + "type": { + "description": "The attribute type.", + "type": "string", + "example": "string" + } + } + }, + "output": { + "description": "A list of output attributes of the Launched Workflow.", + "type": "object", + "properties": { + "key": { + "description": "The attribute key.", + "type": "string", + "example": "workflowSummary" + }, + "value": { + "description": "The attribute value.", + "type": "string", + "example": "\\n \\n \\n \\n\\n" + }, + "type": { + "description": "The attribute type.", + "type": "string", + "example": "application/xml" + } + } + }, + "targetClass": { + "description": "Target Class of the TaskResult. (From the TaskResult used to launch the Workflow).", + "type": "string", + "example": "Permission" + }, + "name": { + "description": "Name of the TaskResult. (From the TaskResult used to launch the Workflow).", + "type": "string", + "example": "Update Account Group a2a" + }, + "messages": { + "description": "List of messages of the TaskResult. (From the TaskResult used to launch the Workflow).", + "type": "array", + "items": { + "example": [ + "Task executed successfully." + ] + } + }, + "attributes": { + "description": "A list of attributes of the TaskResult. (From the TaskResult used to launch the Workflow).", + "type": "array", + "items": { + "properties": { + "key": { + "description": "The attribute key.", + "type": "string", + "example": "Workflow Summary" + }, + "value": { + "description": "The attribute value.", + "type": "string", + "example": "\\n \\n \\n \\n\\n" + } + } + } + }, + "id": { + "description": "Unique identifier of the TaskResult. (From the TaskResult used to launch the Workflow).", + "type": "string", + "example": "7f00000180281df7818028c03252085c" + }, + "completionStatus": { + "type": "string", + "description": "Completion Status of the TaskResult. (From the TaskResult used to launch the Workflow).", + "enum": [ + "Success", + "Warning", + "Error", + "Terminated", + "TempError" + ], + "example": "Success" + }, + "taskDefinition": { + "type": "string", + "description": "Name of the TaskDefinition of the TaskResult. (From the TaskResult used to launch the Workflow).", + "example": "Workflow Launcher" + }, + "terminated": { + "description": "Flag to indicate this TaskResult is terminated. (From the TaskResult used to launch the Workflow).", + "type": "boolean", + "example": true + }, + "launcher": { + "description": "Launcher of the TaskResult. (From the TaskResult used to launch the Workflow).", + "type": "string", + "example": "spadmin" + }, + "meta": { + "type": "object", + "properties": { + "created": { + "description": "DateTime when the TaskResult was created. (From the TaskResult used to launch the Workflow).", + "type": "string", + "format": "date-time", + "example": "2022-04-14T10:44:54.834-05:00" + }, + "location": { + "description": "URL to the TaskResult. (From the TaskResult used to launch the Workflow).", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/TaskResults/7f00000180281df7818028c03252085c" + }, + "lastModified": { + "description": "DateTime of TaskResult last modification. (From the TaskResult used to launch the Workflow).", + "type": "string", + "format": "date-time", + "example": "2022-04-05T15:52:30.119-05:00" + }, + "version": { + "description": "TaskResult version. (From the TaskResult used to launch the Workflow).", + "type": "string", + "example": "\"W\"1649951094834\"" + }, + "resourceType": { + "description": "Resource type of the metadata subject. (From the TaskResult used to launch the Workflow).", + "type": "string", + "example": "TaskResult" + } + } + } + } + }, + "launchedWorkflowByIdGetBody": { + "properties": { + "partitioned": { + "description": "Flag to indicate this TaskResult is partitioned. (From the TaskResult used to launch the Workflow).", + "type": "boolean", + "example": true + }, + "completed": { + "type": "string", + "format": "date-time", + "description": "The completed DateTime of the TaskResult. (From the TaskResult used to launch the Workflow).", + "example": "2022-04-14T10:45:26.098-05:00" + }, + "type": { + "description": "Type of the TaskResult. (From the TaskResult used to launch the Workflow).", + "type": "string", + "example": "Workflow" + }, + "launched": { + "type": "string", + "format": "date-time", + "description": "The launched DateTime of the TaskResult. (From the TaskResult used to launch the Workflow).", + "example": "2022-04-14T10:45:26.114-05:00" + }, + "pendingSignOffs": { + "description": "The number of pending signoffs of this TaskResult. (From the TaskResult used to launch the Workflow).", + "type": "integer", + "example": 2 + }, + "workflowName": { + "description": "Name of the Workflow to launch.", + "type": "string", + "example": "Update Account Group a2a" + }, + "identityRequestId": { + "description": "Id representing the identity request.", + "type": "string", + "example": "0000000002" + }, + "workflowCaseId": { + "description": "Id representing the workflow case (a running instance of a workflow).", + "type": "string", + "example": "7f000001806719888180675c8f8a016a" + }, + "workflowProcessId": { + "type": "string", + "description": "Id representing the workflow monitoring process log.", + "example": "7f000001806719888180675c8f8a0017b" + }, + "retries": { + "description": "The number of retries performed during the execution of provisioning activities.", + "type": "integer", + "example": 1 + }, + "approvalSet": { + "description": "XML representation of approvals.", + "type": "string", + "example": "example: " + }, + "workflowSummary": { + "description": "XML representation of the workflow summary.", + "type": "string", + "example": "example: \"\"" + }, + "input": { + "description": "A list of input attributes of the Launched Workflow.", + "type": "object", + "properties": { + "key": { + "description": "The attribute key.", + "type": "string", + "example": "_caseName" + }, + "value": { + "description": "The attribute value.", + "type": "string", + "example": "WorkflowCaseRegistry" + }, + "type": { + "description": "The attribute type.", + "type": "string", + "example": "string" + } + } + }, + "output": { + "description": "A list of output attributes of the Launched Workflow.", + "type": "object", + "properties": { + "key": { + "description": "The attribute key.", + "type": "string", + "example": "workflowSummary" + }, + "value": { + "description": "The attribute value.", + "type": "string", + "example": "\\n \\n \\n \\n\\n" + }, + "type": { + "description": "The attribute type.", + "type": "string", + "example": "application/xml" + } + } + }, + "targetClass": { + "description": "Target Class of the TaskResult. (From the TaskResult used to launch the Workflow).", + "type": "string", + "example": "Permission" + }, + "name": { + "description": "Name of the TaskResult. (From the TaskResult used to launch the Workflow).", + "type": "string", + "example": "Update Account Group a2a" + }, + "messages": { + "description": "List of messages of the TaskResult. (From the TaskResult used to launch the Workflow).", + "type": "array", + "items": { + "example": [ + "Task executed successfully." + ] + } + }, + "attributes": { + "description": "A list of attributes of the TaskResult. (From the TaskResult used to launch the Workflow).", + "type": "array", + "items": { + "properties": { + "key": { + "description": "The attribute key.", + "type": "string", + "example": "Workflow Summary" + }, + "value": { + "description": "The attribute value.", + "type": "string", + "example": "\\n \\n \\n \\n\\n" + } + } + } + }, + "id": { + "description": "Unique identifier of the TaskResult. (From the TaskResult used to launch the Workflow).", + "type": "string", + "example": "7f00000180281df7818028c03252085c" + }, + "completionStatus": { + "type": "string", + "description": "Completion Status of the TaskResult. (From the TaskResult used to launch the Workflow).", + "enum": [ + "Success", + "Warning", + "Error", + "Terminated", + "TempError" + ], + "example": "Success" + }, + "taskDefinition": { + "type": "string", + "description": "Name of the TaskDefinition of the TaskResult. (From the TaskResult used to launch the Workflow).", + "example": "Workflow Launcher" + }, + "terminated": { + "description": "Flag to indicate this TaskResult is terminated. (From the TaskResult used to launch the Workflow).", + "type": "boolean", + "example": true + }, + "launcher": { + "description": "Launcher of the TaskResult. (From the TaskResult used to launch the Workflow).", + "type": "string", + "example": "spadmin" + }, + "meta": { + "type": "object", + "properties": { + "created": { + "description": "DateTime when the TaskResult was created. (From the TaskResult used to launch the Workflow).", + "type": "string", + "format": "date-time", + "example": "2022-04-14T10:44:54.834-05:00" + }, + "location": { + "description": "URL to the TaskResult. (From the TaskResult used to launch the Workflow).", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/TaskResults/7f00000180281df7818028c03252085c" + }, + "lastModified": { + "description": "DateTime of TaskResult last modification. (From the TaskResult used to launch the Workflow).", + "type": "string", + "format": "date-time", + "example": "2022-04-05T15:52:30.119-05:00" + }, + "version": { + "description": "TaskResult version. (From the TaskResult used to launch the Workflow).", + "type": "string", + "example": "\"W\"1649951094834\"" + }, + "resourceType": { + "description": "Resource type of the metadata subject. (From the TaskResult used to launch the Workflow).", + "type": "string", + "example": "TaskResult" + } + } + } + } + }, + "launchedWorkflowsPostRequest": { + "properties": { + "schemas": { + "type": "array", + "description": "Schemas related to Launched Workflows.", + "items": { + "example": [ + "urn:ietf:params:scim:schemas:sailpoint:1.0:LaunchedWorkflow", + "urn:ietf:params:scim:schemas:sailpoint:1.0:TaskResult" + ] + } + }, + "workflowName": { + "type": "string", + "description": "Name of the Workflow to launch.", + "example": "LCM Manage Passwords" + }, + "input": { + "type": "array", + "description": "A list of input attributes of the Launched Workflow.", + "items": { + "properties": { + "key": { + "type": "string", + "description": "The attribute key.", + "example": "plan" + }, + "value": { + "type": "string", + "description": "The attribute value.", + "example": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n" + }, + "type": { + "type": "string", + "description": "The attribute type.", + "example": "application/xml" + } + } + } + } + } + }, + "launchedWorkflowsPostResponse": { + "type": "object", + "description": "Response example for a POST request to execute a Workflow.", + "properties": { + "targetName": { + "type": "string", + "description": "Target name of the TaskResult.", + "example": "Ernest.Wagner" + }, + "verified": { + "type": "string", + "format": "date-time", + "description": "The verified date of the TaskResult.", + "example": "2022-05-26T11:17:13.481-05:00" + }, + "partitioned": { + "type": "boolean", + "description": "Flag to indicate if the TaskResult is partitioned.", + "example": false + }, + "completed": { + "type": "string", + "format": "date-time", + "description": "The completed date of the TaskResult.", + "example": "2022-05-26T11:17:13.678-05:00" + }, + "type": { + "type": "string", + "description": "Type of the TaskResult.", + "example": "LCM" + }, + "launched": { + "type": "string", + "description": "The launched date of the TaskResult." + }, + "pendingSignOffs": { + "type": "integer", + "description": "Number of pending signoffs of this TaskResult.", + "example": 0 + }, + "urn:ietf:params:scim:schemas:sailpoint:1.0:LaunchedWorkflow": { + "type": "object", + "description": "LaunchedWorkflow properties.", + "properties": { + "output": { + "type": "array", + "items": { + "properties": { + "type": { + "type": "string", + "description": "The output attribute type.", + "example": "application/int" + }, + "value": { + "type": "string", + "description": "The output attribute value.", + "example": "0" + }, + "key": { + "type": "string", + "description": "The output attribute key.", + "example": "workflowSummary" + } + } + } + }, + "retries": { + "type": "integer", + "description": "The number of retries performed during the execution of provisioning activities.", + "example": 0 + }, + "input": { + "type": "array", + "items": { + "properties": { + "key": { + "type": "string", + "description": "The input attribute key.", + "example": "optimisticProvisioning" + }, + "value": { + "type": "string", + "description": "The input attribute value.", + "example": "true" + }, + "type": { + "type": "string", + "description": "The input attribute type.", + "example": "boolean" + } + } + } + }, + "workflowSummary": { + "type": "string", + "description": "XML representation of the workflow summary.", + "example": "\n" + }, + "workflowName": { + "type": "string", + "description": "Name of the workflow to launch.", + "example": "LCM Manage Passwords." + }, + "identityRequestId": { + "type": "string", + "description": "Id representing the identity request.", + "example": "0000000004" + }, + "workflowCaseId": { + "type": "string", + "description": "Id representing the workflow case (a running instance of a workflow).", + "example": "c0a8019c810011478181012862b81568" + } + } + }, + "targetClass": { + "type": "string", + "description": "Target class of the Task Result.", + "example": "Identity" + }, + "meta": { + "description": "Metadata for the LaunchedWorkflow TaskResult.", + "type": "array", + "items": { + "properties": { + "created": { + "description": "Datetime when the TaskResult for the LaunchedWorkflow was created.", + "type": "string", + "format": "date-time", + "example": "2022-03-31T14:52:40.245-05:00" + }, + "location": { + "description": "URL to the TaskResult.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/TaskResults/c0a8019c810011478181012862b51567" + }, + "lastModified": { + "description": "Datetime of LaunchedWorkflow TaskResult last modification", + "type": "string", + "format": "date-time", + "example": "2022-03-31T14:52:40.265-05:00" + }, + "version": { + "description": "Version of the LaunchedWorkflow TaskResult.", + "type": "string", + "example": "\"W\"1649951092552\"" + }, + "resourceType": { + "description": "Resource type of the metadata subject", + "type": "string", + "example": "LaunchedWorkflow" + } + } + } + }, + "schemas": { + "type": "array", + "description": "Schemas related to LaunchedWorkflow.", + "items": { + "example": [ + "urn:ietf:params:scim:schemas:sailpoint:1.0:LaunchedWorkflow", + "urn:ietf:params:scim:schemas:sailpoint:1.0:TaskResult" + ] + } + }, + "name": { + "type": "string", + "description": "Name of the TaskResult for the Workflow launch.", + "example": "LCM Manage Passwords - 2" + }, + "messages": { + "type": "array", + "description": "List of messages of the TaskResult.", + "items": { + "example": [ + "Connection error" + ] + } + }, + "Attributes": { + "type": "object", + "description": "A list of attributes of the TaskResult.", + "properties": { + "key": { + "type": "string", + "description": "The attribute key.", + "example": "retries" + }, + "value": { + "type": "string", + "description": "The attribute value.", + "example": "0" + } + } + }, + "id": { + "type": "string", + "description": "Id of the task result for the Workflow launch.", + "example": "c0a8019c810011478181012862b51567" + }, + "completionStatus": { + "type": "string", + "description": "Completion Status of the TaskResult.", + "enum": [ + "Success", + "Warning", + "Error", + "Terminated", + "TempError" + ], + "example": "Success" + }, + "taskDefinition": { + "type": "string", + "description": "Name of the TaskDefinition of the TaskResult.", + "example": "Workflow Launcher" + }, + "terminated": { + "type": "boolean", + "description": "Flag to indicate this TaskResult is terminated.", + "example": false + }, + "launcher": { + "type": "string", + "description": "Launcher of the TaskResult.", + "example": "spadmin" + } + } + }, + "objectConfigGetResponse": { + "properties": { + "id": { + "description": "Unique identifier of the ObjectConfig.", + "type": "string", + "example": "c0a8019c7fe11678817fe18984351477" + }, + "name": { + "description": "Name of the ObjectConfig.", + "type": "string", + "example": "Link" + }, + "objectAttributes": { + "description": "A list of attributes of the ObjectConfig.", + "type": "array", + "items": { + "properties": { + "name": { + "description": "The object attribute name.", + "type": "string", + "example": "inactive" + }, + "displayName": { + "description": "The display name of the object attribute.", + "type": "string", + "example": "attr_demoInactive" + }, + "type": { + "description": "The type of the object attribute.", + "type": "string", + "example": "boolean" + }, + "multi": { + "description": "A Boolean value indicating this is a multi-valued attribute.", + "type": "boolean", + "example": false + }, + "defaultValue": { + "description": "The default value of the object attribute.", + "type": "string", + "example": "false" + }, + "system": { + "description": "A Boolean value indicating this is a system attribute that does not have a source and is not configurable.", + "type": "boolean", + "example": true + }, + "standard": { + "description": "A Boolean value indicating this is a standard attribute (i.e. manager, email, firstname, lastname).", + "type": "boolean", + "example": false + }, + "extendedNumber": { + "description": "Integer value of the extended attribute column number in the database schema.", + "type": "integer", + "example": 1 + }, + "namedColumn": { + "description": "A Boolean value indicating this attribute has a named column in the database schema.", + "type": "boolean", + "example": false + }, + "ruleName": { + "description": "Rule used to derive the value. Usually specified when there are no attributeSources defined.", + "type": "string", + "example": "lastLoginToDateRule" + }, + "groupFactory": { + "description": "A Boolean value indicating this attribute can be used in a group factory. Identity attributes only.", + "type": "boolean", + "example": true + }, + "editMode": { + "description": "Enumeration indicating whether this attribute allows modification.", + "type": "string", + "enum": [ + "READONLY", + "PERMANENT", + "UNTILFEEDVALUECHANGES" + ], + "example": "READONLY" + }, + "attributeSources": { + "description": "Sources of values for this atribute. Identity attributes only.", + "type": "array", + "items": { + "properties": { + "name": { + "description": "The name of the attribute on the application.", + "type": "string", + "example": "app1_inactive" + }, + "key": { + "description": "Derived identifier for this source.", + "type": "string", + "example": "Active_Directory:app1_inactive" + }, + "instance": { + "description": "Optional instance name for template applications.", + "type": "string", + "example": "test-environment" + }, + "ruleName": { + "description": "Rule used to derive the value.", + "type": "string", + "example": "attributeSource-aws-S3-rule" + } + } + } + }, + "attributeTargets": { + "description": "Targets of this attribute that should receive the value upon attribute synchronization. Identity attributes only.", + "type": "array", + "items": { + "properties": { + "name": { + "description": "The name of the attribute on the application.", + "type": "string", + "example": "app2_active" + }, + "key": { + "description": "Derived identifier for this target.", + "type": "string", + "example": "Composite_ERP_Global_Platform:app2_inactive" + }, + "instance": { + "description": "Optional instance name for template applications.", + "type": "string", + "example": "continuous-integration-environment1" + }, + "ruleName": { + "description": "Rule used to derive the value.", + "type": "string", + "example": "attributeTarget-aws-S3-rule" + }, + "provisionAllAccount": { + "description": "Return whether to provision all accounts if an identity has multiple accounts on the target application. Identity attributes only.", + "type": "boolean", + "example": false + } + } + } + } + } + } + }, + "meta": { + "description": "Metadata for the ObjectConfig", + "type": "array", + "items": { + "properties": { + "created": { + "description": "Datetime when the ObjectConfig was created", + "type": "string", + "example": "2022-03-31T14:52:40.245-05:00" + }, + "location": { + "description": "URL to the ObjectConfig", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/ObjectConfig/7f00000180281df7818028be62ef00e9" + }, + "lastModified": { + "description": "Datetime of ObjectConfig last modification", + "type": "string", + "example": "2022-03-31T14:52:40.265-05:00" + }, + "version": { + "description": "ObjectConfig version", + "type": "string", + "example": "\"W\"1649951092552\"" + }, + "resourceType": { + "description": "Resource type of the metadata subject", + "type": "string", + "example": "ObjectConfig" + } + } + } + } + } + }, + "objectConfigByIdGetBody": { + "properties": { + "id": { + "description": "Unique identifier of the ObjectConfig.", + "type": "string", + "example": "7f00000180281df7818028be63aa00ef" + }, + "name": { + "description": "Name of the ObjectConfig.", + "type": "string", + "example": "Bundle" + }, + "objectAttributes": { + "description": "A list of attributes of the ObjectConfig.", + "type": "array", + "items": { + "properties": { + "name": { + "description": "The object attribute name.", + "type": "string", + "example": "StringAttr" + }, + "displayName": { + "description": "The display name of the object attribute.", + "type": "string", + "example": "attr_demoString" + }, + "type": { + "description": "The type of the object attribute.", + "type": "string", + "example": "string" + }, + "multi": { + "description": "A Boolean value indicating this is a multi-valued attribute.", + "type": "boolean", + "example": false + }, + "defaultValue": { + "description": "The default value of the object attribute.", + "type": "string", + "example": "None" + }, + "system": { + "description": "A Boolean value indicating this is a system attribute that does not have a source and is not configurable.", + "type": "boolean", + "example": false + }, + "standard": { + "description": "A Boolean value indicating this is a standard attribute (i.e. manager, email, firstname, lastname).", + "type": "boolean", + "example": false + }, + "extendedNumber": { + "description": "Integer value of the extended attribute column number in the database schema.", + "type": "integer", + "example": 2 + }, + "namedColumn": { + "description": "A Boolean value indicating this attribute has a named column in the database schema.", + "type": "boolean", + "example": false + }, + "ruleName": { + "description": "Rule used to derive the value. Usually specified when there are no attributeSources defined.", + "type": "string", + "example": "lastLoginToDate" + }, + "groupFactory": { + "description": "A Boolean value indicating this attribute can be used in a group factory. Identity attributes only.", + "type": "boolean", + "example": true + }, + "editMode": { + "description": "Enumeration indicating whether this attribute allows modification.", + "type": "string", + "enum": [ + "READONLY", + "PERMANENT", + "UNTILFEEDVALUECHANGES" + ], + "example": "READONLY" + }, + "attributeSources": { + "description": "Sources of values for this atribute. Identity attributes only.", + "type": "array", + "items": { + "properties": { + "name": { + "description": "The name of the attribute on the application.", + "type": "string", + "example": "lastName" + }, + "key": { + "description": "Derived identifier for this source.", + "type": "string", + "example": "testInstancesApplication/inst2:lastName" + }, + "instance": { + "description": "Optional instance name for template applications.", + "type": "string", + "example": "inst2" + }, + "ruleName": { + "description": "Rule used to derive the value.", + "type": "string", + "example": "Identity Attribute Rule - Type" + } + } + } + }, + "attributeTargets": { + "description": "Targets of this attribute that should receive the value upon attribute synchronization. Identity attributes only.", + "type": "array", + "items": { + "properties": { + "name": { + "description": "The name of the attribute on the application.", + "type": "string", + "example": "app2_active" + }, + "key": { + "description": "Derived identifier for this target.", + "type": "string", + "example": "Composite_ERP_Global_Platform:app2_inactive" + }, + "instance": { + "description": "Optional instance name for template applications.", + "type": "string", + "example": "continuous-integration-environment1" + }, + "ruleName": { + "description": "Rule used to derive the value.", + "type": "string", + "example": "attributeTarget-aws-S3-rule" + }, + "provisionAllAccount": { + "description": "Return whether to provision all accounts if an identity has multiple accounts on the target application. Identity attributes only.", + "type": "boolean", + "example": false + } + } + } + } + } + } + }, + "meta": { + "description": "Metadata for the ObjectConfig", + "type": "array", + "items": { + "properties": { + "created": { + "description": "Datetime when the ObjectConfig was created", + "type": "string", + "example": "2022-03-31T14:52:40.245-05:00" + }, + "location": { + "description": "URL to the ObjectConfig", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/ObjectConfig/7f00000180281df7818028be62ef00e9" + }, + "lastModified": { + "description": "Datetime of ObjectConfig last modification", + "type": "string", + "example": "2022-03-31T14:52:40.265-05:00" + }, + "version": { + "description": "ObjectConfig version", + "type": "string", + "example": "\"W\"1649951092552\"" + }, + "resourceType": { + "description": "Resource type of the metadata subject", + "type": "string", + "example": "ObjectConfig" + } + } + } + } + } + }, + "urn-ietf-params-scim-schemas-sailpoint-1.0-ObjectConfig": { + "description": "Attributes for schema: urn:ietf:params:scim:schemas:sailpoint:1.0:ObjectConfig", + "type": "object", + "properties": { + "id": { + "description": "Unique identifier of the ObjectConfig.", + "type": "string", + "example": "c0a8019c7fe11678817fe18984351477" + }, + "name": { + "description": "Name of the ObjectConfig.", + "type": "string", + "example": "Link" + }, + "displayName": { + "description": "Display name of the ObjectConfig.", + "type": "string", + "example": "Link Object Configuration" + }, + "objectAttributes": { + "description": "A list of attributes of the ObjectConfig.", + "type": "array", + "items": { + "properties": { + "name": { + "description": "The object attribute name.", + "type": "string", + "example": "lastLogin" + }, + "displayName": { + "description": "The display name of the object attribute.", + "type": "string", + "example": "attr_demoLastLogin" + }, + "type": { + "description": "The type of the object attribute.", + "type": "string", + "example": "date" + }, + "multi": { + "description": "A Boolean value indicating this is a multi-valued attribute.", + "type": "boolean", + "example": "false" + }, + "defaultValue": { + "description": "The default value of the object attribute.", + "type": "string", + "example": "2022-03-31T14:52:40.260-05:00" + }, + "system": { + "description": "A Boolean value indicating this is a system attribute that does not have a source and is not configurable.", + "type": "boolean", + "example": "true" + }, + "standard": { + "description": "A Boolean value indicating this is a standard attribute (i.e. manager, email, firstname, lastname).", + "type": "boolean", + "example": "false" + }, + "extendedNumber": { + "description": "Integer value of the extended attribute column number in the database schema.", + "type": "integer", + "example": 1 + }, + "namedColumn": { + "description": "A Boolean value indicating this attribute has a named column in the database schema.", + "type": "boolean", + "example": false + }, + "ruleName": { + "description": "Rule used to derive the value. Usually specified when there are no attributeSources defined.", + "type": "string", + "example": "SimpleUpdateRule" + }, + "groupFactory": { + "description": "A Boolean value indicating this attribute can be used in a group factory. Identity attributes only.", + "type": "boolean", + "example": false + }, + "editMode": { + "description": "Enumeration indicating whether this attribute allows modification.", + "type": "string", + "enum": [ + "READONLY", + "PERMANENT", + "UNTILFEEDVALUECHANGES" + ], + "example": "READONLY" + }, + "attributeSources": { + "description": "Sources of values for this atribute. Identity attributes only.", + "type": "array", + "items": { + "properties": { + "instance": { + "description": "Optional instance name for template applications.", + "type": "string", + "example": "localInstance1" + }, + "name": { + "description": "The name of the attribute on the application.", + "type": "string", + "example": "attribute1" + }, + "ruleName": { + "description": "Rule used to derive the value.", + "type": "string", + "example": "attribute1SourceRule" + }, + "key": { + "description": "Derived identifier for this source.", + "type": "string", + "example": "rule1" + } + } + } + }, + "attributeTargets": { + "description": "Targets of this attribute that should receive the value upon attribute synchronization. Identity attributes only.", + "type": "array", + "items": { + "properties": { + "instance": { + "description": "Optional instance name for template applications.", + "type": "string", + "example": "localInstance1" + }, + "name": { + "description": "The name of the attribute on the application.", + "type": "string", + "example": "attribute1" + }, + "ruleName": { + "description": "Rule used to derive the value.", + "type": "string", + "example": "attribute1TargetRule" + }, + "key": { + "description": "Derived identifier for this target.", + "type": "string", + "example": "rule1" + }, + "provisionAllAccounts": { + "description": "Return whether to provision all accounts if an identity has multiple accounts on the target application. Identity attributes only.", + "type": "boolean", + "example": false + } + } + } + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "created": { + "description": "DateTime when the Alert was created.", + "type": "string", + "format": "date-time", + "example": "2022-04-14T10:43:27.461-05:00" + }, + "lastModified": { + "description": "DateTime of Alert last modification.", + "type": "string", + "example": "2022-04-14T10:45:09.726-05:00" + }, + "location": { + "description": "URL to the Alert.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/ObjectConfig/7f00000180281df7818028be62e500e8" + }, + "version": { + "description": "Alert version.", + "type": "string", + "example": "W\"1649951109726\"" + }, + "resourceType": { + "description": "Resource type of the metadata subject.", + "type": "string", + "example": "ObjectConfig" + } + } + } + } + }, + "policyViolationResponse": { + "properties": { + "id": { + "description": "IdentityIQ id of the PolicyViolation.", + "type": "string", + "example": "c0b4568a4fe7458c434ee77d1fbt156b" + }, + "policyName": { + "description": "Name of the Policy this PolicyViolation is associated with.", + "type": "string", + "example": "Entitlement Policy with Details" + }, + "constraintName": { + "description": "Name of the Constraint this PolicyViolation is associated with.", + "type": "string", + "example": "Entitlement Policy with Details" + }, + "identity": { + "description": "The Identity (User) that caused the PolicyViolation.", + "type": "object", + "properties": { + "displayName": { + "description": "Display name of the Identity that caused the PolicyViolation.", + "type": "string", + "example": "Bob Smith" + }, + "value": { + "description": "The id of the Identity which caused the PolicyViolation.", + "type": "string", + "example": "c0a7778b7ef71e79817ee74e6a1f0444" + }, + "$ref": { + "description": "URI reference to the Identity (User).", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Users/c0a7778b7ef71e79817ee74e6a1f0444" + } + } + }, + "owner": { + "description": "The User that owns the Policy.", + "type": "object", + "properties": { + "displayName": { + "description": "Display name of the Policy owner.", + "type": "string", + "example": "Bob Smith" + }, + "value": { + "description": "The id of the Policy owner.", + "type": "string", + "example": "c0a7778b7ef71e79817ee74e6a1f0444" + }, + "$ref": { + "description": "URI reference to the Policy owner.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Users/c0a7778b7ef71e79817ee74e6a1f0444" + } + } + }, + "description": { + "description": "Description of the PolicyViolation.", + "type": "string", + "example": "Production and development systems should not be available to one person." + }, + "status": { + "description": "Status of the PolicyViolation. This can be Open, Mitigated, Remediated, or Delegated.", + "type": "string", + "example": "Open" + }, + "meta": { + "description": "Metadata of the resource.", + "properties": { + "created": { + "description": "Datetime this Resource was created.", + "type": "string", + "format": "date-time", + "example": "2022-02-11T01:34:04.074-05:00" + }, + "location": { + "description": "The location of the resource.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Users/c0b4568a4fe7458c434ee77d1fbt156b" + }, + "lastModified": { + "description": "Datetime the resource was last modified.", + "type": "string", + "format": "date-time", + "example": "2022-02-11T01:08:45.866-05:00" + }, + "version": { + "description": "The version of the resource.", + "type": "string", + "example": "W/\"1644561244074\"" + }, + "resourceType": { + "description": "The SCIM resource type.", + "type": "string", + "example": "PolicyViolation" + } + } + }, + "schemas": { + "description": "The schemas involved in the SCIM resource.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:schemas:sailpoint:1.0:PolicyViolation" + ] + } + } + }, + "resourceTypeResponse": { + "type": "object", + "properties": { + "id": { + "description": "ID of the ResourceType.", + "type": "string", + "example": "User" + }, + "name": { + "description": "Name of the ResourceType.", + "type": "string", + "example": "User" + }, + "endpoint": { + "description": "The ResourceType's HTTP addressable endpoint relative to the Base URL.", + "type": "string", + "example": "/Applications" + }, + "description": { + "description": "Description of the ResourceType.", + "type": "string", + "example": "User Account." + }, + "schema": { + "description": "The primary/base schema URI of the ResourceType.", + "type": "string", + "example": "urn:ietf:params:scim:schemas:sailpoint:1.0:User" + }, + "schemaExtensions": { + "description": "A list of URIs of the ResourceType's schema extensions.", + "type": "array", + "items": { + "example": [ + { + "schema": "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User", + "required": true + }, + { + "schema": "urn:ietf:params:scim:schemas:sailpoint:1.0:User", + "required": true + } + ] + } + }, + "meta": { + "description": "Metadata of the ResourceType.", + "type": "object", + "properties": { + "location": { + "description": "The location of the ResourceType.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/ResourceTypes/User" + }, + "resourceType": { + "description": "The SCIM resource type.", + "type": "string", + "example": "ResourceType" + } + } + }, + "schemas": { + "description": "The schema for the ResourceType resource.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:schemas:core:2.0:ResourceType" + ] + } + } + }, + "roleResponse": { + "properties": { + "id": { + "description": "IIQ ID of the Role.", + "type": "string", + "example": "c0b4568a4fe7458c434ee77d1fbt156b" + }, + "name": { + "description": "Unique name for the Role. This name MUST be unique across the entire set of Roles.", + "type": "string", + "example": "ADDirect-Production Manager" + }, + "descriptions": { + "description": "A list of localized descriptions of the Role.", + "type": "array", + "example": [ + { + "locale": "en_US", + "value": "Directs production operations and processes for a plant, division, or company. Plans and maintains production schedules. Manages facilities and equipment maintenance." + } + ] + }, + "type": { + "description": "The type of the Role.", + "type": "object", + "example": { + "iiq": false, + "requirements": false, + "permits": false, + "displayName": "IT", + "manualAssignment": false, + "name": "it", + "autoAssignment": false, + "assignmentSelector": false + } + }, + "displayableName": { + "description": "Displayable name of the Role.", + "type": "string", + "example": "Staging Test Engineer - IT" + }, + "active": { + "description": "Flag to indicate this Role is enabled or active.", + "type": "boolean", + "example": true + }, + "activationDate": { + "description": "The date the Role will turn from inactive/disabled to active/enabled.", + "type": "string", + "format": "date-time", + "example": "2022-02-11T01:08:45.866-05:00" + }, + "deactivationDate": { + "description": "The date the Role will turn from active/enabled to inactive/disabled.", + "type": "string", + "format": "date-time", + "example": "2022-02-11T01:08:45.866-05:00" + }, + "owner": { + "description": "The owner of the Role.", + "type": "object", + "properties": { + "displayName": { + "description": "Display name of the Role owner.", + "type": "string", + "example": "Lori Ferguson" + }, + "value": { + "description": "ID of the Role owner.", + "type": "string", + "example": "ac1301737f901991817f90d9eb050372" + }, + "$ref": { + "description": "URI reference of the Role owner resource.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Users/ac1301737f901991817f90d9eb050372" + } + } + }, + "inheritance": { + "description": "Parent Roles this role inherits from.", + "type": "array", + "properties": { + "displayName": { + "description": "Display name of the parent Role.", + "type": "string", + "example": "Finance & Accounting" + }, + "value": { + "description": "ID of the parent Role.", + "type": "string", + "example": "ac1301737f901991817f90d9f054041c" + }, + "$ref": { + "description": "URI reference of the parent Role resource.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Roles/ac1301737f901991817f90d9f054041c" + } + } + }, + "requirements": { + "description": "Roles this role requires. This is normally used with business roles to reference IT roles as a way of indicating which IT roles are required to support a business role.", + "type": "array", + "properties": { + "displayName": { + "description": "Display name of the required Role.", + "type": "string", + "example": "Accounting General Access - IT" + }, + "value": { + "description": "ID of the required Role.", + "type": "string", + "example": "ac1301737f901991817f90d9ed110387" + }, + "$ref": { + "description": "URI reference of the required Role resource.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Roles/ac1301737f901991817f90d9ed110387" + } + } + }, + "permits": { + "description": "Roles this role permits. This is normally used with business roles to reference IT roles as a way of indicating which IT roles are allowed to support a business role.", + "type": "array", + "properties": { + "displayName": { + "description": "Display name of the permitted Role.", + "type": "string", + "example": "Accounts Payable Access - IT" + }, + "value": { + "description": "ID of the permitted Role.", + "type": "string", + "example": "ac1301737f901991817f90d9ed170388" + }, + "$ref": { + "description": "URI reference of the permitted Role resource.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Roles/ac1301737f901991817f90d9ed170388" + } + } + }, + "classifications": { + "description": "Classifications of this Role.", + "type": "array", + "example": [ + { + "effective": false, + "source": "UI", + "classification": { + "displayName": "Special2", + "origin": "JDBCDirectDemoData", + "name": "Special2" + } + }, + { + "effective": false, + "source": "UI", + "classification": { + "displayName": "Special7", + "origin": "JDBCDirectDemoData", + "name": "Special7" + } + } + ], + "properties": { + "source": { + "description": "The source of the ObjectClassification.", + "type": "string" + }, + "effective": { + "description": "Flag indicating this is an effective Classification.", + "type": "boolean" + }, + "classification": { + "description": "Classification of this Object.", + "type": "object", + "properties": { + "name": { + "description": "The name of the Classification.", + "type": "string" + }, + "displayName": { + "description": "The displayName of the Classification.", + "type": "string" + }, + "origin": { + "description": "The origin of the Classification.", + "type": "string" + }, + "type": { + "description": "The type of the Classification. This can be used to group Classifications in/across different origins.", + "type": "string" + } + } + } + } + }, + "meta": { + "description": "Metadata of the SCIM resource.", + "properties": { + "created": { + "description": "Datetime this Role was created.", + "type": "string", + "format": "date-time", + "example": "2022-02-11T01:34:04.074-05:00" + }, + "location": { + "description": "The location of the SCIM resource.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Roles/c0b4568a4fe7458c434ee77d1fbt156b" + }, + "lastModified": { + "description": "Datetime the Role was last modified.", + "type": "string", + "format": "date-time", + "example": "2022-02-11T01:08:45.866-05:00" + }, + "version": { + "description": "The version of the SCIM resource.", + "type": "string", + "example": "W/\\\"1644561244074\\\"" + }, + "resourceType": { + "description": "The SCIM resource type.", + "type": "string", + "example": "Role" + } + } + }, + "schemas": { + "description": "The schemas involved in the SCIM resource.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:schemas:sailpoint:1.0:Role" + ] + } + } + }, + "schemaResponse": { + "type": "object", + "properties": { + "id": { + "description": "The id of the Schema. The id is the SCIM URN of the Schema.", + "type": "string", + "example": "urn:ietf:params:scim:schemas:sailpoint:1.0:User" + }, + "name": { + "description": "Name of the Schema.", + "type": "string", + "example": "User" + }, + "description": { + "description": "Description of the Schema.", + "type": "string", + "example": "Schema for a SCIM User." + }, + "attributes": { + "description": "Attributes used to describe this Schema.", + "type": "array", + "items": { + "properties": { + "uniqueness": { + "description": "Determines whether there can be other Schema resources with the same value for this attribute. 'none' means there is no concern for uniqueness, 'server' means the uniqueness of this attribute should be guaranteed for this type of resource, and 'global' means the uniqueness should be guaranteed across all resources.", + "type": "string", + "example": "none" + }, + "name": { + "description": "Name of the attribute.", + "type": "string", + "example": "displayName" + }, + "description": { + "description": "Description of the attribute.", + "type": "string", + "example": "Display name of the User." + }, + "mutability": { + "description": "Indicates the ability to change this attribute. Possible values are 'readOnly', 'readWrite', and 'writeOnly'.", + "type": "string", + "example": "readOnly" + }, + "type": { + "description": "Defined as 'simple' or 'complex', where simple indicates attribute values stored as strings, integers, etc., and complex indicates object-based values.", + "type": "string", + "example": "string" + }, + "multiValued": { + "description": "Describes whether this attribute is allowed multiple values.", + "type": "boolean", + "example": false + }, + "caseExact": { + "description": "True if attribute value is case-sensitive; false otherwise.", + "type": "boolean", + "example": false + }, + "returned": { + "description": "Dictates whether the attribute should be returned in a SCIM response body. Can be 'always', 'default', 'request', or 'never'.", + "type": "string", + "example": "default" + }, + "required": { + "description": "True if this attribute is required for this Schema; false otherwise.", + "type": "boolean", + "example": false + }, + "canonicalValues": { + "description": "List of canonical values that could be used to supplement attribute.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "httpbasic", + "httpdigest", + "oauth" + ] + }, + "subAttributes": { + "description": "Only required if 'complex' is specified for 'type'. If this attribute is of 'complex' type, an array of objects can be stored in 'subAttributes' with attributes relevant to the respective Schema.", + "type": "array", + "items": { + "additionalProperties": { + "anyOf": [ + { + "type": "object" + } + ] + } + } + } + } + } + }, + "meta": { + "description": "Metadata of the Schema.", + "type": "object", + "properties": { + "location": { + "description": "The location of the Schema.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Schemas/7f0123417e941b00007f9db3702906cb" + }, + "version": { + "description": "The version of the Schema.", + "type": "string", + "example": "W\"1647617443639\"" + }, + "resourceType": { + "description": "The SCIM resource type.", + "type": "string", + "example": "Schema" + } + } + }, + "schemas": { + "description": "The schema for the Schema resource.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:schemas:core:2.0:Schema" + ] + } + } + }, + "SailPoint-ServiceProviderConfig-Schema": { + "description": "Attributes for schema: urn:ietf:params:scim:schemas:sailpoint:2.0:ServiceProviderConfig.", + "type": "object", + "required": [ + "patch", + "etag", + "bulk", + "filter", + "changePassword", + "sort", + "authenticationSchemes" + ], + "properties": { + "documentationUri": { + "description": "An HTTP addressable URL pointing to the service provider's human consumable help documentation.", + "type": "string", + "example": "https://community.sailpoint.com/community/identityiq/product-downloads" + }, + "patch": { + "type": "object", + "description": "A complex type that specifies PATCH configuration options.", + "required": [ + "supported" + ], + "properties": { + "supported": { + "type": "boolean", + "description": "Boolean value specifying whether the operation is supported.", + "example": false + } + } + }, + "etag": { + "description": "A complex type that specifies ETAG configuration options.", + "type": "object", + "required": [ + "supported" + ], + "properties": { + "supported": { + "type": "boolean", + "description": "Boolean value specifying whether the operation is supported.", + "example": true + } + } + }, + "bulk": { + "description": "A complex type that specifies ETAG configuration options.", + "type": "object", + "required": [ + "supported", + "maxOperations", + "maxPayloadSize" + ], + "properties": { + "supported": { + "type": "boolean", + "description": "Boolean value specifying whether the operation is supported.", + "example": true + }, + "maxOperations": { + "type": "integer", + "description": "An integer value specifying the maximum number of operations.", + "example": 2 + }, + "maxPayloadSize": { + "type": "integer", + "description": "An integer value specifying the maximum payload size in bytes.", + "example": 128 + } + } + }, + "filter": { + "description": "A complex type that specifies FILTER options.", + "type": "object", + "required": [ + "supported", + "maxResults" + ], + "properties": { + "supported": { + "type": "boolean", + "description": "Boolean value specifying whether the operation is supported.", + "example": true + }, + "maxResults": { + "type": "integer", + "description": "Integer value specifying the maximum number of resources returned in a response.", + "example": 10 + } + } + }, + "changePassword": { + "type": "object", + "description": "A complex type that specifies change password options.", + "required": [ + "supported" + ], + "properties": { + "supported": { + "type": "boolean", + "description": "Boolean value specifying whether the operation is supported.", + "example": true + } + } + }, + "sort": { + "type": "object", + "description": "A complex type that specifies sort result options.", + "required": [ + "supported" + ], + "properties": { + "supported": { + "type": "boolean", + "description": "Boolean value specifying whether the operation is supported.", + "example": false + } + } + }, + "authenticationSchemes": { + "description": "A complex type that specifies supported Authentication Scheme properties.", + "type": "object", + "required": [ + "name", + "description", + "type" + ], + "properties": { + "name": { + "type": "string", + "description": "The common authentication scheme name; e.g., HTTP Basic.", + "example": "HTTP Basic" + }, + "description": { + "type": "string", + "description": "A description of the authentication scheme.", + "example": "Authentication Scheme using the Http Basic Standard." + }, + "specUri": { + "type": "string", + "description": "An HTTP addressable URL pointing to the Authentication Scheme's specification.", + "example": "http://www.ietf.org/rfc/rfc2617.txt" + }, + "documentationUri": { + "type": "string", + "description": "An HTTP addressable URL pointing to the Authentication Scheme's usage documentation.", + "example": "https://community.sailpoint.com/community/identityiq/product-downloads" + }, + "type": { + "type": "string", + "description": "The authentication scheme.", + "enum": [ + "oauth", + "oauth2", + "oauthbearertoken", + "httpbasic", + "httpdigest" + ], + "example": "oauthbearertoken" + } + } + }, + "meta": { + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "URL to ServiceProviderConfig resource.", + "example": "http://localhost:8080/identityiq/scim/v2/ServiceProviderConfig" + }, + "resourceType": { + "type": "string", + "description": "Resource type of the metadata subject.", + "example": "ServiceProviderConfig" + } + } + } + } + }, + "serviceProviderConfigGetResponse": { + "required": [ + "patch", + "etag", + "bulk", + "filter", + "changePassword", + "sort", + "authenticationSchemes" + ], + "properties": { + "documentationUri": { + "description": "An HTTP addressable URL pointing to the service provider's human consumable help documentation.", + "type": "string", + "example": "https://community.sailpoint.com/community/identityiq/product-downloads" + }, + "patch": { + "description": "A complex type that specifies PATCH configuration options.", + "type": "object", + "required": [ + "supported" + ], + "properties": { + "supported": { + "type": "boolean", + "description": "Boolean value specifying whether the operation is supported.", + "example": false + } + } + }, + "etag": { + "description": "A complex type that specifies ETAG configuration options.", + "type": "object", + "required": [ + "supported" + ], + "properties": { + "supported": { + "description": "Boolean value specifying whether the operation is supported.", + "type": "boolean" + } + } + }, + "bulk": { + "description": "A complex type that specifies ETAG configuration options.", + "type": "object", + "required": [ + "supported", + "maxOperations", + "maxPayloadSize" + ], + "properties": { + "supported": { + "description": "Boolean value specifying whether the operation is supported.", + "type": "boolean", + "example": false + }, + "maxOperations": { + "description": "An integer value specifying the maximum number of operations.", + "type": "integer", + "example": 3 + }, + "maxPayloadSize": { + "description": "An integer value specifying the maximum payload size in bytes.", + "type": "integer", + "example": 128 + } + } + }, + "filter": { + "description": "A complex type that specifies FILTER options.", + "type": "object", + "required": [ + "supported", + "maxResults" + ], + "properties": { + "supported": { + "description": "Boolean value specifying whether the operation is supported.", + "type": "boolean", + "example": true + }, + "maxResults": { + "description": "Integer value specifying the maximum number of resources returned in a response.", + "type": "integer", + "example": 10 + } + } + }, + "changePassword": { + "description": "A complex type that specifies change password options.", + "type": "object", + "required": [ + "supported" + ], + "properties": { + "supported": { + "description": "Boolean value specifying whether the operation is supported.", + "type": "boolean", + "example": false + } + } + }, + "sort": { + "description": "A complex type that specifies sort result options.", + "type": "object", + "required": [ + "supported" + ], + "properties": { + "supported": { + "description": "Boolean value specifying whether the operation is supported.", + "type": "boolean", + "example": false + } + } + }, + "authenticationSchemes": { + "description": "A complex type that specifies supported Authentication Scheme properties.", + "type": "object", + "required": [ + "name", + "description", + "type" + ], + "properties": { + "name": { + "description": "The common authentication scheme name; e.g., HTTP Basic.", + "type": "string", + "example": "HTTP Basic" + }, + "description": { + "description": "A description of the authentication scheme.", + "type": "string", + "example": "Authentication Scheme using the Http Basic Standard." + }, + "specUri": { + "description": "An HTTP addressable URL pointing to the Authentication Scheme's specification.", + "type": "string", + "example": "http://www.ietf.org/rfc/rfc2617.txt" + }, + "documentationUri": { + "description": "An HTTP addressable URL pointing to the Authentication Scheme's usage documentation.", + "type": "string", + "example": "https://community.sailpoint.com/community/identityiq/product-downloads" + }, + "type": { + "type": "string", + "description": "The authentication scheme.", + "enum": [ + "oauth", + "oauth2", + "oauthbearertoken", + "httpbasic", + "httpdigest" + ], + "example": "oauthbearertoken" + } + } + }, + "meta": { + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "URL to ServiceProviderConfig resource.", + "example": "http://localhost:8080/identityiq/scim/v2/ServiceProviderConfig" + }, + "resourceType": { + "type": "string", + "description": "Resource type of the metadata subject.", + "example": "ServiceProviderConfig" + } + } + } + } + }, + "SailPoint-TaskResult-Schema": { + "description": "Attributes for schema: urn:ietf:params:scim:schemas:sailpoint:1.0:TaskResult", + "type": "object", + "properties": { + "id": { + "description": "Unique identifier of the TaskResult.", + "type": "string", + "example": "c0a8019c7fe11678817fe18984351477" + }, + "name": { + "type": "string", + "description": "Name of the TaskResult.", + "example": "Aggregate Correlated Applications" + }, + "type": { + "description": "Type of the TaskResult.", + "type": "string", + "example": "Report" + }, + "completionStatus": { + "type": "string", + "description": "Completion Status of the TaskResult.", + "enum": [ + "Success", + "Warning", + "Error", + "Terminated", + "TempError" + ], + "example": "Success" + }, + "launcher": { + "type": "string", + "description": "Launcher of the TaskResult.", + "example": "spadmin" + }, + "host": { + "type": "string", + "description": "Host of the TaskResult.", + "example": "chocobo-local-console" + }, + "progress": { + "type": "string", + "description": "Progress of the TaskResult.", + "example": "Completed 5 of 12 partitions." + }, + "targetClass": { + "type": "string", + "description": "Target Class of the TaskResult.", + "example": "ManagedAttribute" + }, + "targetName": { + "type": "string", + "description": "Target Name of the Task Result.", + "example": "managedAttributeDemoPopulation" + }, + "terminated": { + "type": "boolean", + "description": "Flag to indicate this TaskResult is terminated.", + "example": false + }, + "partitioned": { + "type": "boolean", + "description": "Flag to indicate this TaskResult is partitioned.", + "example": true + }, + "launched": { + "type": "string", + "format": "date-time", + "description": "The launched DateTime of the TaskResult.", + "example": "2022-04-14T12:30:42.760-05:00" + }, + "completed": { + "type": "string", + "format": "date-time", + "description": "The completed DateTime of the TaskResult.", + "example": "2022-04-14T12:31:16.688-05:00" + }, + "expiration": { + "type": "string", + "format": "date-time", + "description": "The expiration DateTime of the TaskResult.", + "example": "2022-04-26T14:32:33.184-05:00" + }, + "verified": { + "type": "string", + "format": "date-time", + "description": "The verification DateTime of the TaskResult.", + "example": "2022-04-26T14:32:40.966-05:00" + }, + "percentageComplete": { + "type": "integer", + "description": "The percentage completed of this TaskResult.", + "example": 30 + }, + "pendingSignOffs": { + "type": "integer", + "description": "The number of pending signoffs of this TaskResult.", + "example": 2 + }, + "taskDefinition": { + "type": "string", + "description": "Name of the TaskDefinition of the TaskResult.", + "example": "Workflow Launcher" + }, + "taskSchedule": { + "type": "string", + "description": "Name of the TaskSchedule of the TaskResult.", + "example": "Check expired work items daily" + }, + "Attributes": { + "type": "object", + "description": "A list of attributes of the TaskResult.", + "properties": { + "key": { + "type": "string", + "description": "The attribute key.", + "example": "reminders" + }, + "value": { + "type": "string", + "description": "The attribute value.", + "example": "0" + } + } + }, + "messages": { + "type": "array", + "description": "List of messages of the TaskResult.", + "items": { + "example": [ + "Connection error" + ] + } + }, + "signoff": { + "type": "string", + "description": "Signoff of the TaskResult.", + "example": "Certification Sign-off" + }, + "meta": { + "type": "object", + "properties": { + "created": { + "description": "DateTime when the TaskResult was created.", + "type": "string", + "format": "date-time", + "example": "2022-04-14T10:44:54.834-05:00" + }, + "location": { + "description": "URL to the TaskResult.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/TaskResults/7f00000180281df7818028c03252162a" + }, + "lastModified": { + "description": "DateTime of TaskResult last modification.", + "type": "string", + "format": "date-time", + "example": "2022-05-05T15:52:30.119-05:00" + }, + "version": { + "description": "TaskResult version.", + "type": "string", + "example": "\"W\"1649951094834\"" + }, + "resourceType": { + "description": "Resource type of the metadata subject.", + "type": "string", + "example": "TaskResult" + } + } + } + } + }, + "taskResultGetResponse": { + "properties": { + "id": { + "description": "Unique identifier of the TaskResult.", + "type": "string", + "example": "7f00000180281df7818028c03252085c" + }, + "name": { + "description": "Name of the TaskResult.", + "type": "string", + "example": "Aggregate HR Authoritative" + }, + "type": { + "description": "Type of the TaskResult.", + "type": "string", + "example": "AccountAggregation" + }, + "completionStatus": { + "type": "string", + "description": "Completion Status of the TaskResult.", + "enum": [ + "Success", + "Warning", + "Error", + "Terminated", + "TempError" + ], + "example": "Success" + }, + "launcher": { + "description": "Launcher of the TaskResult.", + "type": "string", + "example": "spadmin" + }, + "host": { + "description": "Host of the TaskResult.", + "type": "string", + "example": "centos-server.local" + }, + "progress": { + "description": "Progress of the TaskResult.", + "type": "string", + "example": "Launched 2 partitions." + }, + "targetClass": { + "description": "Target Class of the TaskResult.", + "type": "string", + "example": "Permission" + }, + "targetName": { + "description": "Target Name of the Task Result.", + "type": "string", + "example": "PAM Credential Container" + }, + "terminated": { + "description": "Flag to indicate this TaskResult is terminated.", + "type": "boolean", + "example": true + }, + "partitioned": { + "description": "Flag to indicate this TaskResult is partitioned.", + "type": "boolean", + "example": true + }, + "launched": { + "type": "string", + "format": "date-time", + "description": "The launched DateTime of the TaskResult.", + "example": "2022-04-14T10:45:26.114-05:00" + }, + "completed": { + "type": "string", + "format": "date-time", + "description": "The completed DateTime of the TaskResult.", + "example": "2022-04-14T10:45:26.098-05:00" + }, + "expiration": { + "type": "string", + "format": "date-time", + "description": "The expiration DateTime of the TaskResult.", + "example": "2022-05-03T16:40:34.271-05:00" + }, + "verified": { + "type": "string", + "format": "date-time", + "description": "The verification DateTime of the TaskResult.", + "example": "2022-05-03T16:40:34.271-05:00" + }, + "percentageComplete": { + "type": "integer", + "description": "The percentage completed of this TaskResult.", + "example": 55 + }, + "pendingSignOffs": { + "description": "The number of pending signoffs of this TaskResult.", + "type": "integer", + "example": 2 + }, + "taskDefinition": { + "type": "string", + "description": "Name of the TaskDefinition of the TaskResult.", + "example": "Aggregate HR Authoritative" + }, + "taskSchedule": { + "description": "Name of the TaskSchedule of the TaskResult.", + "type": "string", + "example": "Perform maintenance" + }, + "attributes": { + "description": "A list of attributes of the TaskResult.", + "type": "array", + "items": { + "properties": { + "key": { + "description": "The attribute key.", + "type": "string", + "example": "total" + }, + "value": { + "description": "The attribute value.", + "type": "string", + "example": "3" + } + } + } + }, + "messages": { + "description": "List of messages of the TaskResult.", + "type": "array", + "items": { + "example": [ + "Unathorized access to database in server: 192.100.1.25" + ] + } + }, + "meta": { + "type": "object", + "properties": { + "created": { + "description": "DateTime when the TaskResult was created.", + "type": "string", + "format": "date-time", + "example": "2022-04-14T10:44:54.834-05:00" + }, + "location": { + "description": "URL to the TaskResult.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/TaskResults/7f00000180281df7818028c03252085c" + }, + "lastModified": { + "description": "DateTime of TaskResult last modification.", + "type": "string", + "format": "date-time", + "example": "2022-04-05T15:52:30.119-05:00" + }, + "version": { + "description": "TaskResult version.", + "type": "string", + "example": "\"W\"1649951094834\"" + }, + "resourceType": { + "description": "Resource type of the metadata subject.", + "type": "string", + "example": "TaskResult" + } + } + }, + "schemas": { + "type": "array", + "example": [ + "urn:ietf:params:scim:schemas:sailpoint:1.0:TaskResult" + ] + } + } + }, + "taskResultByIdGetBody": { + "properties": { + "id": { + "description": "Unique identifier of the TaskResult.", + "type": "string", + "example": "c0a8019c80761c398180856488d2051d" + }, + "name": { + "description": "Name of the TaskResult.", + "type": "string", + "example": "Aggregate Composite Application" + }, + "type": { + "description": "Type of the TaskResult.", + "type": "string", + "example": "AccountAggregation" + }, + "completionStatus": { + "type": "string", + "description": "Completion Status of the TaskResult.", + "enum": [ + "Success", + "Warning", + "Error", + "Terminated", + "TempError" + ], + "example": "Success" + }, + "launcher": { + "description": "Launcher of the TaskResult.", + "type": "string", + "example": "james.smith" + }, + "host": { + "description": "Host of the TaskResult.", + "type": "string", + "example": "mandrake.testdomain.com" + }, + "progress": { + "description": "Progress of the TaskResult.", + "type": "string", + "example": "3/5 tasks completed." + }, + "targetClass": { + "description": "Target Class of the TaskResult.", + "type": "string", + "example": "Permission" + }, + "targetName": { + "description": "Target Name of the Task Result.", + "type": "string", + "example": "Adam.Kennedy" + }, + "terminated": { + "description": "Flag to indicate this TaskResult is terminated.", + "type": "boolean", + "example": false + }, + "partitioned": { + "description": "Flag to indicate this TaskResult is partitioned.", + "type": "boolean", + "example": true + }, + "launched": { + "type": "string", + "format": "date-time", + "description": "The launched DateTime of the TaskResult.", + "example": "2022-05-02T10:30:00.014-05:00" + }, + "completed": { + "type": "string", + "format": "date-time", + "description": "The completed DateTime of the TaskResult.", + "example": "2022-05-02T10:30:00.035-05:00" + }, + "expiration": { + "type": "string", + "format": "date-time", + "description": "The expiration DateTime of the TaskResult.", + "example": "2022-05-03T16:40:34.271-05:00" + }, + "verified": { + "type": "string", + "format": "date-time", + "description": "The verification DateTime of the TaskResult.", + "example": "2022-05-03T16:40:34.271-05:00" + }, + "percentageComplete": { + "type": "integer", + "description": "The percentage completed of this TaskResult.", + "example": 30 + }, + "pendingSignOffs": { + "description": "The number of pending signoffs of this TaskResult.", + "type": "integer", + "example": 0 + }, + "taskDefinition": { + "type": "string", + "description": "Name of the TaskDefinition of the TaskResult.", + "example": "Workflow Launcher" + }, + "taskSchedule": { + "description": "Name of the TaskSchedule of the TaskResult.", + "type": "string", + "example": "Perform Identity Request Maintenance" + }, + "attributes": { + "description": "A list of attributes of the TaskResult.", + "type": "array", + "items": { + "properties": { + "key": { + "description": "The attribute key.", + "type": "string", + "example": "inactiveWorkItemsForwarded" + }, + "value": { + "description": "The attribute value.", + "type": "string", + "example": "0" + } + } + } + }, + "messages": { + "description": "List of messages of the TaskResult.", + "type": "array", + "items": { + "example": [ + "Partition 2 is pending." + ] + } + }, + "meta": { + "type": "object", + "properties": { + "created": { + "description": "DateTime when the TaskResult was created.", + "type": "string", + "format": "date-time", + "example": "2022-05-02T10:30:00.018-05:00" + }, + "location": { + "description": "URL to the TaskResult.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/TaskResults/c0a8019c80761c398180856488d2051d" + }, + "lastModified": { + "description": "DateTime of TaskResult last modification.", + "type": "string", + "format": "date-time", + "example": "2022-05-02T10:30:00.036-05:00" + }, + "version": { + "description": "TaskResult version.", + "type": "string", + "example": "W\"1651505400036\"" + }, + "resourceType": { + "description": "Resource type of the metadata subject.", + "type": "string", + "example": "TaskResult" + } + } + }, + "schemas": { + "type": "array", + "example": [ + "urn:ietf:params:scim:schemas:sailpoint:1.0:TaskResult" + ] + } + } + }, + "userPostRequest": { + "properties": { + "userName": { + "description": "Unique identifier for the User. Typically used to directly authenticate to the service provider. Each User MUST include a non-empty userName value. This identifier MUST be unique across the entire set of Users. This attribute cannot be changed.", + "type": "string", + "example": "Mock.User" + }, + "name": { + "description": "The components of the User’s real name. Providers may return just the full name as a single string in the formatted sub-attribute, or they MAY return just the individual component attributes using the other sub-attributes, or they MAY return both. If both variants are returned, they SHOULD be describing the same name, with the formatted name indicating how the component attributes should be combined.", + "properties": { + "formatted": { + "description": "The full name, including all middle names, titles, and suffixes as appropriate, formatted for display.", + "type": "string", + "example": "Ms. Barbara J Jensen, III" + }, + "familyName": { + "description": "The family name of the User, or Last Name in most Western languages", + "type": "string", + "example": "Jensen" + }, + "givenName": { + "description": "The given name of the User, or First Name in most Western languages", + "type": "string", + "example": "Barbara" + } + } + }, + "displayName": { + "description": "The name of the User, suitable for display to end-users. The name should be the full name of the User being described.", + "type": "string", + "example": "Barbara Jensen" + }, + "userType": { + "description": "The type of the User, identifying the relationship between the organization and the User.", + "type": "string", + "example": "employee" + }, + "active": { + "description": "A Boolean value indicating the User’s administrative status.", + "type": "boolean", + "example": true + }, + "password": { + "description": "The User's case-sensitive cleartext password. This attribute is intended to be used as a means to specify an initial password when creating a new User or to reset an existing User's password. This attribute will never be returned in a response.", + "type": "string" + }, + "emails": { + "description": "Email addresses for the user. The value SHOULD be canonicalized by the Service Provider, e.g., bjensen@example.com instead of bjensen@EXAMPLE.COM. Canonical Type values of work, home, and other.", + "type": "array", + "items": { + "properties": { + "type": { + "description": "Type of email address (work, home, other).", + "type": "string", + "example": "work" + }, + "value": { + "description": "Canonicalized email address.", + "type": "string", + "format": "email", + "example": "Barbara.Jensen@example.com" + }, + "primary": { + "description": "A Boolean value indicating the primary e-mail address. The primary attribute value 'true' MUST appear no more than once.", + "type": "boolean", + "example": "true" + } + } + } + }, + "urn:ietf:params:scim:schemas:sailpoint:1.0:User": { + "properties": { + "capabilities": { + "description": "Capabilities assigned to this User.", + "type": "array", + "items": { + "type": "string" + }, + "example": "[\"SystemAdministrator\"]" + }, + "administrator": { + "description": "The Administrator of the RPA or Service Account. This attribute is only applicable if the User type is RPA/Bots or Service.", + "properties": { + "displayName": { + "description": "The display name of the Administrator of RPA user or Service account.", + "type": "string", + "example": "Bob Smith" + }, + "value": { + "description": "The id of the SCIM resource representing the Administrator of RPA user or Service account.", + "type": "string", + "example": "c0a7777a7f74744d817e74fc12362c67O" + }, + "$ref": { + "description": "The URI of the SCIM resource representing the Administrator of RPA user or Service Account.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Users/c0a7777a7f74744d817e74fc12362c67" + } + } + }, + "softwareVersion": { + "description": "The software version of the RPA/Bots.", + "type": "string", + "example": "7.3" + }, + "empId": { + "description": "Employee id associated with this User.", + "type": "string", + "example": "1b2a3c" + }, + "dn": { + "description": "Distinguished name for this User.", + "type": "string", + "example": "cn=Bob Smith,ou=services" + }, + "region": { + "description": "The region this User is assigned to.", + "type": "string", + "example": "Americas" + }, + "regionOwner": { + "description": "The User who owns the region that this resource (User) belongs to.", + "properties": { + "displayName": { + "description": "Display name of the region owner.", + "type": "string", + "example": "Joe Smith" + }, + "value": { + "description": "The id of the region owner.", + "type": "string", + "example": "c0b4568a4fe7458c434ee77d1fbt156b" + }, + "$ref": { + "description": "URI reference of the region owner resource.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Users/c0b4568a4fe7458c434ee77d1fbt156b" + } + } + }, + "location": { + "description": "The location this User is assigned to.", + "type": "string", + "example": "Singapore" + }, + "locationOwner": { + "description": "The User who owns the location that this resource (User) belongs to.", + "type": "object", + "properties": { + "displayName": { + "description": "Display name of the location owner.", + "type": "string", + "example": "Bob Smith" + }, + "value": { + "description": "The id of the location owner.", + "type": "string", + "example": "c0a7778b7ef71e79817ee74e6a1f0444" + }, + "$ref": { + "description": "URI reference to the location owner resource.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Users/c0a7778b7ef71e79817ee74e6a1f0444" + } + } + }, + "Department": { + "description": "Department this User is assigned to.", + "type": "string", + "example": "Regional Operations" + }, + "costcenter": { + "description": "Cost centers this User is associated with.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "CC01", + "DD02" + ] + }, + "jobtitle": { + "description": "Job title given to this User.", + "type": "string", + "example": "Internal Audit Manager" + } + } + }, + "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": { + "description": "Enterprise User Schema. Contains the manager of the User.", + "properties": { + "manager": { + "description": "Manager of the user.", + "properties": { + "displayName": { + "description": "Display name of the manager.", + "type": "string", + "example": "Bob Smith" + }, + "value": { + "description": "The id of the manager.", + "type": "string", + "example": "c7a7347a7fe71e69077ee75f5d1f1237" + }, + "$ref": { + "description": "Reference to the manager resource.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Users/c7a7347a7fe71e69077ee75f5d1f1237" + } + } + } + } + } + }, + "required": [ + "userName" + ] + }, + "userResponse": { + "properties": { + "id": { + "description": "IdentityIQ id of the User.", + "type": "string", + "example": "c0b4568a4fe7458c434ee77d1fbt156b" + }, + "userName": { + "description": "Unique identifier for the User. Typically used to directly authenticate to the service provider. Each User MUST include a non-empty userName value. This identifier MUST be unique across the entire set of Users. Cannot be changed.", + "type": "string", + "example": "Mock.User" + }, + "name": { + "description": "The components of the User’s real name. Providers may return just the full name as a single string in the formatted sub-attribute, or they MAY return just the individual component attributes using the other sub-attributes, or they MAY return both. If both variants are returned, they SHOULD be describing the same name, with the formatted name indicating how the component attributes should be combined.", + "properties": { + "formatted": { + "description": "The full name, including all middle names, titles, and suffixes as appropriate, formatted for display.", + "type": "string", + "example": "Ms. Barbara J Jensen, III" + }, + "familyName": { + "description": "The family name of the User, or Last Name in most Western languages", + "type": "string", + "example": "Jensen" + }, + "givenName": { + "description": "The given name of the User, or First Name in most Western languages", + "type": "string", + "example": "Barbara" + } + } + }, + "displayName": { + "description": "The name of the User, suitable for display to end-users. The name should be the full name of the User being described.", + "type": "string", + "example": "Barbara Jensen" + }, + "userType": { + "description": "The type of the User, identifying the relationship between the organization and the User.", + "type": "string", + "example": "employee" + }, + "active": { + "description": "A Boolean value indicating the User’s administrative status.", + "type": "boolean", + "example": true + }, + "emails": { + "description": "Email addresses for the user. The value SHOULD be canonicalized by the Service Provider, e.g., bjensen@example.com instead of bjensen@EXAMPLE.COM. Canonical Type values of work, home, and other.", + "type": "array", + "items": { + "properties": { + "type": { + "description": "Type of email address (work, home, other).", + "type": "string", + "example": "work" + }, + "value": { + "description": "Canonicalized email address.", + "type": "string", + "format": "email", + "example": "Barbara.Jensen@example.com" + }, + "primary": { + "description": "A Boolean value indicating the primary e-mail address. The primary attribute value 'true' MUST appear no more than once.", + "type": "boolean", + "example": "true" + } + } + } + }, + "urn:ietf:params:scim:schemas:sailpoint:1.0:User": { + "description": "Additional attributes of the User.", + "type": "object", + "properties": { + "accounts": { + "description": "Simple representation of the Account (or Link) ResourceType.", + "type": "array", + "items": { + "properties": { + "displayName": { + "description": "The display name of the Account.", + "type": "string", + "example": "Bob.Smith" + }, + "value": { + "description": "The id of the SCIM resource representing the Account.", + "type": "string", + "example": "c0a7778b7ef71e79817ee74e6a1f0444" + }, + "$ref": { + "description": "The URI of the SCIM resource representing the Account.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Accounts/c0a7778b7ef71e79817ee74e6a1f0444" + } + } + } + }, + "entitlements": { + "description": "Entitlements of the User. Returned in response only if requested using the 'attributes' query parameter.", + "type": "array", + "items": { + "properties": { + "value": { + "description": "The value of the Entitlement.", + "type": "string", + "example": "groupmbr" + }, + "display": { + "description": "The display name of the Entitlement.", + "type": "string", + "example": "HelpDesk" + }, + "type": { + "description": "The type of Entitlement (Entitlement, Permission, etc.).", + "type": "string", + "example": "Permission" + }, + "application": { + "description": "The name of the Application this Entitlement applies to.", + "type": "string", + "example": "ADMockApp" + }, + "accountName": { + "description": "The account this Entitlement was sourced from.", + "type": "string", + "example": "CN=Barbara Jensen,OU=Taipei,OU=Asia-Pacific,DC=example,DC=com" + }, + "$ref": { + "description": "The URI of the SCIM resource representing the Entitlement.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Entitlements/c0a7777a7f74744d817e74fc12362c67" + } + } + } + }, + "roles": { + "description": "Roles of the User. Returned only if requested. Returned in response only if requested using the 'attributes' query parameter.", + "type": "array", + "items": { + "properties": { + "value": { + "description": "The value of the Role.", + "type": "string", + "example": "detectedRoles" + }, + "display": { + "description": "The display name of the Role.", + "type": "string", + "example": "User - IT" + }, + "type": { + "description": "The type of Role (IT, Business, etc.).", + "type": "string", + "example": "it" + }, + "acquired": { + "description": "Indicates how this Role was acquired. Assigned or Detected.", + "type": "string", + "example": "Assigned" + }, + "application": { + "description": "The name of the Application where this Role came from.", + "type": "string", + "example": "Active_Directory" + }, + "accountName": { + "description": "The name of the Account this Role was sourced from.", + "type": "string", + "example": "CN=Barbara Jensen,OU=Taipei,OU=Asia-Pacific,DC=example,DC=com" + }, + "$ref": { + "description": "The URI of the SCIM resource representing the Role.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Roles/c0a7777a7f74744d817e74fc12362c67" + } + } + } + }, + "capabilities": { + "description": "Capabilities assigned to this User.", + "type": "array", + "items": { + "type": "string" + }, + "example": "[\"SystemAdministrator\"]" + }, + "riskScore": { + "description": "Composite Risk Score of this User.", + "type": "integer", + "example": 125 + }, + "isManager": { + "description": "A Boolean value that determines if this User is a manager.", + "type": "boolean", + "example": false + }, + "administrator": { + "description": "The Administrator of the RPA or Service Account. This attribute is only applicable if the User type is RPA/Bots or Service.", + "properties": { + "displayName": { + "description": "The display name of the Administrator of RPA user or Service account.", + "type": "string", + "example": "Bob Smith" + }, + "value": { + "description": "The id of the SCIM resource representing the Administrator of RPA user or Service account.", + "type": "string", + "example": "c0a7777a7f74744d817e74fc12362c67O" + }, + "$ref": { + "description": "The URI of the SCIM resource representing the Administrator of RPA user or Service Account.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Users/c0a7777a7f74744d817e74fc12362c67" + } + } + }, + "softwareVersion": { + "description": "The software version of the RPA/Bots.", + "type": "string", + "example": "7.3" + }, + "empId": { + "description": "Employee id associated with this User.", + "type": "string", + "example": "1b2a3c" + }, + "dn": { + "description": "Distinguished name for this User.", + "type": "string", + "example": "cn=Bob Smith,ou=services" + }, + "region": { + "description": "The region this User is assigned to.", + "type": "string", + "example": "Americas" + }, + "regionOwner": { + "description": "The User who owns the region that this resource (User) belongs to.", + "properties": { + "displayName": { + "description": "Display name of the region owner.", + "type": "string", + "example": "Joe Smith" + }, + "value": { + "description": "The id of the region owner.", + "type": "string", + "example": "c0b4568a4fe7458c434ee77d1fbt156b" + }, + "$ref": { + "description": "URI reference of the region owner resource.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Users/c0b4568a4fe7458c434ee77d1fbt156b" + } + } + }, + "location": { + "description": "The location this User is assigned to.", + "type": "string", + "example": "Singapore" + }, + "locationOwner": { + "description": "The User who owns the location that this resource (User) belongs to.", + "type": "object", + "properties": { + "displayName": { + "description": "Display name of the location owner.", + "type": "string", + "example": "Bob Smith" + }, + "value": { + "description": "The id of the location owner.", + "type": "string", + "example": "c0a7778b7ef71e79817ee74e6a1f0444" + }, + "$ref": { + "description": "URI reference to the location owner resource.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Users/c0a7778b7ef71e79817ee74e6a1f0444" + } + } + }, + "Department": { + "description": "Department this User is assigned to.", + "type": "string", + "example": "Regional Operations" + }, + "costcenter": { + "description": "Cost centers this User is associated with.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "CC01", + "DD02" + ] + }, + "jobtitle": { + "description": "Job title given to this User.", + "type": "string", + "example": "Internal Audit Manager" + }, + "lastRefresh": { + "description": "Datetime representation of the last refresh for this User.", + "type": "string", + "format": "date-time" + } + } + }, + "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": { + "description": "Enterprise User Schema. Contains the manager of the User.", + "properties": { + "manager": { + "description": "Manager of the User.", + "properties": { + "displayName": { + "description": "Display name of the User's manager.", + "type": "string", + "example": "Bob Smith" + }, + "value": { + "description": "The id of the SCIM resource representing the User’s manager.", + "type": "string", + "example": "c7a7347a7fe71e69077ee75f5d1f1237" + }, + "$ref": { + "description": "The URI of the SCIM resource representing the User’s manager.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Users/c7a7347a7fe71e69077ee75f5d1f1237" + } + } + } + } + }, + "meta": { + "description": "Metadata of the resource.", + "properties": { + "created": { + "description": "Datetime this resource was created.", + "type": "string", + "format": "date-time", + "example": "2022-02-11T01:34:04.074-05:00" + }, + "location": { + "description": "The location of the resource.", + "type": "string", + "example": "http://localhost:8080/iiq/scim/v2/Users/c0b4568a4fe7458c434ee77d1fbt156b" + }, + "lastModified": { + "description": "Datetime the resource was last modified.", + "type": "string", + "format": "date-time", + "example": "2022-02-11T01:08:45.866-05:00" + }, + "version": { + "description": "The version of the resource.", + "type": "string", + "example": "W\"1644561244074\"" + }, + "resourceType": { + "description": "The SCIM resource type.", + "type": "string", + "example": "User" + } + } + }, + "schemas": { + "description": "The schemas involved in the SCIM resource.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "urn:ietf:params:scim:schemas:sailpoint:1.0:User", + "urn:ietf:params:scim:schemas:core:2.0:User", + "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User" + ] + } + } + }, + "SailPoint-Workflow-Schema": { + "description": "Attributes for schema: urn:ietf:params:scim:schemas:sailpoint:1.0:Workflow", + "type": "object", + "required": [ + "name" + ], + "properties": { + "id": { + "description": "Unique identifier of the Workflow.", + "type": "string", + "example": "c0a8019c7fe11678817fe18984351477" + }, + "name": { + "type": "string", + "description": "Name of the Workflow.", + "example": "Aggregate Correlated Applications" + }, + "description": { + "type": "string", + "description": "Description of the Workflow.", + "example": "Subprocess to approve and provision immediately. This is used after splitting an ApprovalSet into individual items to run in parallel." + }, + "type": { + "type": "string", + "description": "Type of the Workflow.", + "enum": [ + "Batch Provisioning", + "Scheduled Assignment", + "Scheduled Role Activation", + "Managed Attribute", + "Identity Correlation", + "Identity Event", + "Identity Lifecycle", + "Identity Update", + "Identity Refresh", + "LCM Identity", + "LCM Provisioning", + "LCM Registration", + "Policy Violation", + "Role Modeler", + "Subprocess", + "Password Intercept", + "Alert", + "Attribute Sync" + ], + "example": "LCM Identity" + }, + "handler": { + "type": "string", + "description": "Handler of the Workflow.", + "example": "sailpoint.api.StandardWorkflowHandler" + }, + "meta": { + "type": "object", + "properties": { + "created": { + "description": "DateTime when the Workflow was created.", + "type": "string", + "format": "date-time", + "example": "2022-04-14T10:44:54.834-05:00" + }, + "location": { + "description": "URL to the Workflow.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Workflows/7f00000180281df7818028c03252162a" + }, + "lastModified": { + "description": "DateTime of Workflow last modification.", + "type": "string", + "format": "date-time", + "example": "2022-05-05T15:52:30.119-05:00" + }, + "version": { + "description": "Workflow version.", + "type": "string", + "example": "\"W\"1649951094834\"" + }, + "resourceType": { + "description": "Resource type of the metadata subject.", + "type": "string", + "example": "Workflow" + } + } + } + } + }, + "workflowGetResponse": { + "required": [ + "name" + ], + "properties": { + "id": { + "description": "Unique identifier of the Workflow.", + "type": "string", + "example": "7f00000180281df7818028bf977502f3" + }, + "name": { + "description": "Name of the Workflow.", + "type": "string", + "example": "Identity Request Approve Identity Changes" + }, + "description": { + "description": "Description of the Workflow.", + "type": "string", + "example": "\n The subprocess that drives the Create and Update Identity workflows.\n This is different then the Identity Request Approve subprocess because this\n approval process produces a form with the approval so that\n approvers can update values while approving.\n\n This subprocess builds the form necessary for the editable approvals\n and then assimilates that data entered back to the plan, which\n can be returned from the subprocess.\n" + }, + "type": { + "description": "Type of the Workflow.", + "type": "string", + "enum": [ + "Batch Provisioning", + "Scheduled Assignment", + "Scheduled Role Activation", + "Managed Attribute", + "Identity Correlation", + "Identity Event", + "Identity Lifecycle", + "Identity Update", + "Identity Refresh", + "LCM Identity", + "LCM Provisioning", + "LCM Registration", + "Policy Violation", + "Role Modeler", + "Subprocess", + "Password Intercept", + "Alert", + "Attribute Sync" + ], + "example": "Subprocess" + }, + "handler": { + "description": "Handler of the Workflow.", + "type": "string", + "example": "sailpoint.api.StandardWorkflowHandler" + }, + "meta": { + "type": "object", + "properties": { + "created": { + "description": "DateTime when the Workflow was created.", + "type": "string", + "example": "2022-04-14T10:44:46.453-05:00" + }, + "location": { + "description": "URL to the Workflow.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Workflows/7f00000180281df7818028bf977502f3" + }, + "lastModified": { + "description": "DateTime of Workflow last modification.", + "type": "string", + "example": "2022-05-05T15:52:30.119-05:00" + }, + "version": { + "description": "Workflow version.", + "type": "string", + "example": "W\"1649951086453\"" + }, + "resourceType": { + "description": "Resource type of the metadata subject.", + "type": "string", + "example": "Workflow" + } + } + } + } + }, + "workflowByIdGetBody": { + "required": [ + "name" + ], + "properties": { + "id": { + "description": "Unique identifier of the Workflow.", + "type": "string", + "example": "7f00000180281df7818028be6a9c01a3" + }, + "name": { + "description": "Name of the Workflow.", + "type": "string", + "example": "Aggregate Correlated Applications" + }, + "description": { + "description": "Description of the Workflow.", + "type": "string", + "example": "Library for Steps." + }, + "type": { + "type": "string", + "description": "Type of the Workflow.", + "enum": [ + "Batch Provisioning", + "Scheduled Assignment", + "Scheduled Role Activation", + "Managed Attribute", + "Identity Correlation", + "Identity Event", + "Identity Lifecycle", + "Identity Update", + "Identity Refresh", + "LCM Identity", + "LCM Provisioning", + "LCM Registration", + "Policy Violation", + "Role Modeler", + "Subprocess", + "Password Intercept", + "Alert", + "Attribute Sync" + ], + "example": "Step Library" + }, + "handler": { + "description": "Handler of the Workflow.", + "type": "string", + "example": "sailpoint.api.StandardWorkflowHandler" + }, + "meta": { + "type": "object", + "properties": { + "created": { + "description": "DateTime when the Workflow was created.", + "type": "string", + "format": "date-time", + "example": "2022-04-14T10:43:29.436-05:00" + }, + "location": { + "description": "URL to the Workflow.", + "type": "string", + "example": "http://localhost:8080/identityiq/scim/v2/Workflows/7f00000180281df7818028be6a9c01a3" + }, + "lastModified": { + "description": "DateTime of Workflow last modification.", + "type": "string", + "format": "date-time", + "example": "2022-05-05T15:52:30.119-05:00" + }, + "version": { + "description": "Workflow version.", + "type": "string", + "example": "\"W\"1649951094834\"" + }, + "resourceType": { + "description": "Resource type of the metadata subject.", + "type": "string", + "example": "Workflow" + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/static/img/SailPoint-Developer-Community-Inverse-Lockup.png b/static/img/SailPoint-Developer-Community-Inverse-Lockup.png new file mode 100644 index 0000000000000000000000000000000000000000..72f7c33dc7f7b066e8422c610eed809458647cc2 GIT binary patch literal 34316 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 literal 0 HcmV?d00001 diff --git a/static/img/SailPoint-Developer-Community-Lockup.png b/static/img/SailPoint-Developer-Community-Lockup.png new file mode 100644 index 0000000000000000000000000000000000000000..4418b7420b89a6c6902324ba8dc9f365951218a0 GIT binary patch literal 44093 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 literal 0 HcmV?d00001 diff --git a/static/img/SailPoint-Logo-RGB-Color.png b/static/img/SailPoint-Logo-RGB-Color.png new file mode 100644 index 0000000000000000000000000000000000000000..9c4587688d5bbf67fd19d6a10c355dc13b7be94b GIT binary patch literal 28382 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 literal 0 HcmV?d00001 diff --git a/static/img/SailPoint-Logo-RGB-Color.svg b/static/img/SailPoint-Logo-RGB-Color.svg new file mode 100644 index 000000000..f87e43ac9 --- /dev/null +++ b/static/img/SailPoint-Logo-RGB-Color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/SailPoint-Logo-RGB-Inverse.png b/static/img/SailPoint-Logo-RGB-Inverse.png new file mode 100644 index 0000000000000000000000000000000000000000..63deb1e22fd50dec2b74b65b62323f83fd596245 GIT binary patch literal 23167 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 \ No newline at end of file diff --git a/static/img/docusaurus.png b/static/img/docusaurus.png new file mode 100644 index 0000000000000000000000000000000000000000..f458149e3c8f53335f28fbc162ae67f55575c881 GIT binary patch literal 5142 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 F{0H{b<4^zq literal 0 HcmV?d00001 diff --git a/static/img/favicon.ico b/static/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c01d54bcd39a5f853428f3cd5aa0f383d963c484 GIT binary patch literal 3626 zcmb`Je@s(X6vrR`EK3%b%orErlDW({vnABqA zcfaS{d+xbU5JKp0*;0YOg+;Fl!eT)XRuapIwFLL`=imZCSon$`se`_<%@MB=M~KG+ z=EW^FL`w|Bo>*ktlaS^(fut!95`iG5u=SZ8nfDHO#GaTlH1-XG^;vsjUb^gWTVz0+ z^=WR1wv9-2oeR=_;fL0H7rNWqAzGtO(D;`~cX(RcN0w2v24Y8)6t`cS^_ghs`_ho? z{0ka~1Dgo8TfAP$r*ua?>$_V+kZ!-(TvEJ7O2f;Y#tezt$&R4 zLI}=-y@Z!grf*h3>}DUL{km4R>ya_I5Ag#{h_&?+HpKS!;$x3LC#CqUQ8&nM?X))Q zXAy2?`YL4FbC5CgJu(M&Q|>1st8XXLZ|5MgwgjP$m_2Vt0(J z&Gu7bOlkbGzGm2sh?X`){7w69Y$1#@P@7DF{ZE=4%T0NDS)iH`tiPSKpDNW)zmtn( zw;4$f>k)4$LBc>eBAaTZeCM2(iD+sHlj!qd z2GjRJ>f_Qes(+mnzdA^NH?^NB(^o-%Gmg$c8MNMq&`vm@9Ut;*&$xSD)PKH{wBCEC z4P9%NQ;n2s59ffMn8*5)5AAg4-93gBXBDX`A7S& zH-|%S3Wd%T79fk-e&l`{!?lve8_epXhE{d3Hn$Cg!t=-4D(t$cK~7f&4s?t7wr3ZP z*!SRQ-+tr|e1|hbc__J`k3S!rMy<0PHy&R`v#aJv?`Y?2{avK5sQz%=Us()jcNuZV z*$>auD4cEw>;t`+m>h?f?%VFJZj8D|Y1e_SjxG%J4{-AkFtT2+ZZS5UScS~%;dp!V>)7zi`w(xwSd*FS;Lml=f6hn#jq)2is4nkp+aTrV?)F6N z>DY#SU0IZ;*?Hu%tSj4edd~kYNHMFvS&5}#3-M;mBCOCZL3&;2obdG?qZ>rD|zC|Lu|sny76pn2xl|6sk~Hs{X9{8iBW zwiwgQt+@hi`FYMEhX2 \ No newline at end of file diff --git a/static/img/undraw_docusaurus_mountain.svg b/static/img/undraw_docusaurus_mountain.svg new file mode 100644 index 000000000..af961c49a --- /dev/null +++ b/static/img/undraw_docusaurus_mountain.svg @@ -0,0 +1,171 @@ + + Easy to Use + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/undraw_docusaurus_react.svg b/static/img/undraw_docusaurus_react.svg new file mode 100644 index 000000000..94b5cf08f --- /dev/null +++ b/static/img/undraw_docusaurus_react.svg @@ -0,0 +1,170 @@ + + Powered by React + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/undraw_docusaurus_tree.svg b/static/img/undraw_docusaurus_tree.svg new file mode 100644 index 000000000..d9161d339 --- /dev/null +++ b/static/img/undraw_docusaurus_tree.svg @@ -0,0 +1,40 @@ + + Focus on What Matters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..0b7fdfae2 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,8927 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@algolia/autocomplete-core@1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.7.1.tgz#025538b8a9564a9f3dd5bcf8a236d6951c76c7d1" + integrity sha512-eiZw+fxMzNQn01S8dA/hcCpoWCOCwcIIEUtHHdzN5TGB3IpzLbuhqFeTfh2OUhhgkE8Uo17+wH+QJ/wYyQmmzg== + dependencies: + "@algolia/autocomplete-shared" "1.7.1" + +"@algolia/autocomplete-preset-algolia@1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.1.tgz#7dadc5607097766478014ae2e9e1c9c4b3f957c8" + integrity sha512-pJwmIxeJCymU1M6cGujnaIYcY3QPOVYZOXhFkWVM7IxKzy272BwCvMFMyc5NpG/QmiObBxjo7myd060OeTNJXg== + dependencies: + "@algolia/autocomplete-shared" "1.7.1" + +"@algolia/autocomplete-shared@1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.1.tgz#95c3a0b4b78858fed730cf9c755b7d1cd0c82c74" + integrity sha512-eTmGVqY3GeyBTT8IWiB2K5EuURAqhnumfktAEoHxfDY2o7vg2rSnO16ZtIG0fMgt3py28Vwgq42/bVEuaQV7pg== + +"@algolia/cache-browser-local-storage@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz#d5b1b90130ca87c6321de876e167df9ec6524936" + integrity sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA== + dependencies: + "@algolia/cache-common" "4.14.2" + +"@algolia/cache-common@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.14.2.tgz#b946b6103c922f0c06006fb6929163ed2c67d598" + integrity sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg== + +"@algolia/cache-in-memory@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.14.2.tgz#88e4a21474f9ac05331c2fa3ceb929684a395a24" + integrity sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ== + dependencies: + "@algolia/cache-common" "4.14.2" + +"@algolia/client-account@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.14.2.tgz#b76ac1ba9ea71e8c3f77a1805b48350dc0728a16" + integrity sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w== + dependencies: + "@algolia/client-common" "4.14.2" + "@algolia/client-search" "4.14.2" + "@algolia/transporter" "4.14.2" + +"@algolia/client-analytics@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.14.2.tgz#ca04dcaf9a78ee5c92c5cb5e9c74cf031eb2f1fb" + integrity sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ== + dependencies: + "@algolia/client-common" "4.14.2" + "@algolia/client-search" "4.14.2" + "@algolia/requester-common" "4.14.2" + "@algolia/transporter" "4.14.2" + +"@algolia/client-common@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.14.2.tgz#e1324e167ffa8af60f3e8bcd122110fd0bfd1300" + integrity sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q== + dependencies: + "@algolia/requester-common" "4.14.2" + "@algolia/transporter" "4.14.2" + +"@algolia/client-personalization@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.14.2.tgz#656bbb6157a3dd1a4be7de65e457fda136c404ec" + integrity sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw== + dependencies: + "@algolia/client-common" "4.14.2" + "@algolia/requester-common" "4.14.2" + "@algolia/transporter" "4.14.2" + +"@algolia/client-search@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.14.2.tgz#357bdb7e640163f0e33bad231dfcc21f67dc2e92" + integrity sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw== + dependencies: + "@algolia/client-common" "4.14.2" + "@algolia/requester-common" "4.14.2" + "@algolia/transporter" "4.14.2" + +"@algolia/events@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950" + integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== + +"@algolia/logger-common@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.14.2.tgz#b74b3a92431f92665519d95942c246793ec390ee" + integrity sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA== + +"@algolia/logger-console@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.14.2.tgz#ec49cb47408f5811d4792598683923a800abce7b" + integrity sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g== + dependencies: + "@algolia/logger-common" "4.14.2" + +"@algolia/requester-browser-xhr@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.2.tgz#a2cd4d9d8d90d53109cc7f3682dc6ebf20f798f2" + integrity sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw== + dependencies: + "@algolia/requester-common" "4.14.2" + +"@algolia/requester-common@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.14.2.tgz#bc4e9e5ee16c953c0ecacbfb334a33c30c28b1a1" + integrity sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg== + +"@algolia/requester-node-http@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.14.2.tgz#7c1223a1785decaab1def64c83dade6bea45e115" + integrity sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg== + dependencies: + "@algolia/requester-common" "4.14.2" + +"@algolia/transporter@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.14.2.tgz#77c069047fb1a4359ee6a51f51829508e44a1e3d" + integrity sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ== + dependencies: + "@algolia/cache-common" "4.14.2" + "@algolia/logger-common" "4.14.2" + "@algolia/requester-common" "4.14.2" + +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@apidevtools/json-schema-ref-parser@^9.0.9": + version "9.0.9" + resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz#d720f9256e3609621280584f2b47ae165359268b" + integrity sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w== + dependencies: + "@jsdevtools/ono" "^7.1.3" + "@types/json-schema" "^7.0.6" + call-me-maybe "^1.0.1" + js-yaml "^4.1.0" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.8.3": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" + integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== + +"@babel/core@7.12.9": + version "7.12.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" + integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.7" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.9" + "@babel/types" "^7.12.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.18.5", "@babel/core@^7.18.6": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.10.tgz#39ad504991d77f1f3da91be0b8b949a5bc466fb8" + integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.10" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.10" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.10" + "@babel/types" "^7.18.10" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/generator@^7.12.5", "@babel/generator@^7.18.10", "@babel/generator@^7.18.7": + version "7.18.12" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.12.tgz#fa58daa303757bd6f5e4bbca91b342040463d9f4" + integrity sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg== + dependencies: + "@babel/types" "^7.18.10" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" + integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" + integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.20.2" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz#d802ee16a64a9e824fcbf0a2ffc92f19d58550ce" + integrity sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" + +"@babel/helper-create-regexp-features-plugin@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz#3e35f4e04acbbf25f1b3534a657610a000543d3c" + integrity sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.1.0" + +"@babel/helper-define-polyfill-provider@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz#bd10d0aca18e8ce012755395b05a79f45eca5073" + integrity sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg== + dependencies: + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-explode-assignable-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" + integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" + integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-member-expression-to-functions@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" + integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== + dependencies: + "@babel/types" "^7.18.9" + +"@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" + integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-plugin-utils@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" + integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== + +"@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" + integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz#1092e002feca980fbbb0bd4d51b74a65c6a500e6" + integrity sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz#778d87b3a758d90b471e7b9918f34a9a02eb5818" + integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== + dependencies: + "@babel/types" "^7.18.9" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== + +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helper-wrap-function@^7.18.9": + version "7.18.11" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz#bff23ace436e3f6aefb61f85ffae2291c80ed1fb" + integrity sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w== + dependencies: + "@babel/helper-function-name" "^7.18.9" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.11" + "@babel/types" "^7.18.10" + +"@babel/helpers@^7.12.5", "@babel/helpers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" + integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== + dependencies: + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.12.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.11", "@babel/parser@^7.18.8": + version "7.18.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9" + integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" + integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz#a11af19aa373d68d561f08e0a57242350ed0ec50" + integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + +"@babel/plugin-proposal-async-generator-functions@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz#85ea478c98b0095c3e4102bff3b67d306ed24952" + integrity sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-class-static-block@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020" + integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-dynamic-import@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz#8148cbb350483bf6220af06fa6db3690e14b2e23" + integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.12.1" + +"@babel/plugin-proposal-object-rest-spread@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz#f9434f6beb2c8cae9dfcf97d2a5941bbbf9ad4e7" + integrity sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.18.8" + +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993" + integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-private-property-in-object@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" + integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-assertions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz#cd6190500a4fa2fe31990a963ffab4b63e4505e4" + integrity sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" + integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-jsx@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" + integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe" + integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-async-to-generator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615" + integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" + +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" + integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-block-scoping@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz#f9b7e018ac3f373c81452d6ada8bd5a18928926d" + integrity sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-classes@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz#90818efc5b9746879b869d5ce83eb2aa48bbc3da" + integrity sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz#2357a8224d402dad623caf6259b611e56aec746e" + integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-destructuring@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz#68906549c021cb231bee1db21d3b5b095f8ee292" + integrity sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" + integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-duplicate-keys@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" + integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" + integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-for-of@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" + integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" + integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== + dependencies: + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" + integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" + integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-modules-amd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz#8c91f8c5115d2202f277549848874027d7172d21" + integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz#afd243afba166cca69892e24a8fd8c9f2ca87883" + integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz#545df284a7ac6a05125e3e405e536c5853099a06" + integrity sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A== + dependencies: + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-validator-identifier" "^7.18.6" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" + integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz#c89bfbc7cc6805d692f3a49bc5fc1b630007246d" + integrity sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-new-target@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" + integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" + integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz#ee9f1a0ce6d78af58d0956a9378ea3427cccb48a" + integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" + integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-constant-elements@^7.17.12": + version "7.18.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.12.tgz#edf3bec47eb98f14e84fa0af137fcc6aad8e0443" + integrity sha512-Q99U9/ttiu+LMnRU8psd23HhvwXmKWDQIpocm0JKaICcZHnw+mdQbHm6xnSy7dOl8I5PELakYtNBubNQlBXbZw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-react-display-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" + integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-jsx-development@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" + integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.18.6" + +"@babel/plugin-transform-react-jsx@^7.18.6": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.10.tgz#ea47b2c4197102c196cbd10db9b3bb20daa820f1" + integrity sha512-gCy7Iikrpu3IZjYZolFE4M1Sm+nrh1/6za2Ewj77Z+XirT4TsbJcvOFOyF+fRPwU6AKKK136CZxx6L8AbSFG6A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-jsx" "^7.18.6" + "@babel/types" "^7.18.10" + +"@babel/plugin-transform-react-pure-annotations@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" + integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-regenerator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73" + integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + regenerator-transform "^0.15.0" + +"@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" + integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-runtime@^7.18.6": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz#37d14d1fa810a368fd635d4d1476c0154144a96f" + integrity sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + babel-plugin-polyfill-corejs2 "^0.3.2" + babel-plugin-polyfill-corejs3 "^0.5.3" + babel-plugin-polyfill-regenerator "^0.4.0" + semver "^6.3.0" + +"@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" + integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-spread@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz#6ea7a6297740f381c540ac56caf75b05b74fb664" + integrity sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + +"@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" + integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-template-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" + integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typeof-symbol@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" + integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typescript@^7.18.6": + version "7.18.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.12.tgz#712e9a71b9e00fde9f8c0238e0cceee86ab2f8fd" + integrity sha512-2vjjam0cum0miPkenUbQswKowuxs/NjMwIKEq0zwegRxXk12C9YOF9STXnaUptITOtOJHKHpzvvWYOjbm6tc0w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-typescript" "^7.18.6" + +"@babel/plugin-transform-unicode-escapes@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" + integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" + integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/preset-env@^7.18.2", "@babel/preset-env@^7.18.6": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.10.tgz#83b8dfe70d7eea1aae5a10635ab0a5fe60dfc0f4" + integrity sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-async-generator-functions" "^7.18.10" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.18.9" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.18.6" + "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.18.9" + "@babel/plugin-transform-classes" "^7.18.9" + "@babel/plugin-transform-computed-properties" "^7.18.9" + "@babel/plugin-transform-destructuring" "^7.18.9" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.18.6" + "@babel/plugin-transform-modules-commonjs" "^7.18.6" + "@babel/plugin-transform-modules-systemjs" "^7.18.9" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.18.6" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.18.8" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.18.9" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.18.10" + "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.18.10" + babel-plugin-polyfill-corejs2 "^0.3.2" + babel-plugin-polyfill-corejs3 "^0.5.3" + babel-plugin-polyfill-regenerator "^0.4.0" + core-js-compat "^3.22.1" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@^7.17.12", "@babel/preset-react@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" + integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-react-display-name" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx-development" "^7.18.6" + "@babel/plugin-transform-react-pure-annotations" "^7.18.6" + +"@babel/preset-typescript@^7.17.12", "@babel/preset-typescript@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399" + integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-typescript" "^7.18.6" + +"@babel/runtime-corejs3@^7.18.6": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.18.9.tgz#7bacecd1cb2dd694eacd32a91fcf7021c20770ae" + integrity sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A== + dependencies: + core-js-pure "^3.20.2" + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" + integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.12.7", "@babel/template@^7.18.10", "@babel/template@^7.18.6": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" + +"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.10", "@babel/traverse@^7.18.11", "@babel/traverse@^7.18.8", "@babel/traverse@^7.18.9": + version "7.18.11" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.11.tgz#3d51f2afbd83ecf9912bcbb5c4d94e3d2ddaa16f" + integrity sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.10" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.11" + "@babel/types" "^7.18.10" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.12.7", "@babel/types@^7.18.10", "@babel/types@^7.18.4", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.4.4": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" + integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== + dependencies: + "@babel/helper-string-parser" "^7.18.10" + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@docsearch/css@3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.2.0.tgz#9f0f7ccb315cfe2db4565264569e1cb4b26dc26d" + integrity sha512-jnNrO2JVYYhj2pP2FomlHIy6220n6mrLn2t9v2/qc+rM7M/fbIcKMgk9ky4RN+L/maUEmteckzg6/PIYoAAXJg== + +"@docsearch/react@^3.1.1": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.2.0.tgz#440c91e57cd48b87ff8e7d7fd446620ada9e677a" + integrity sha512-ATS3w5JBgQGQF0kHn5iOAPfnCCaoLouZQMmI7oENV//QMFrYbjhUZxBU9lIwAT7Rzybud+Jtb4nG5IEjBk3Ixw== + dependencies: + "@algolia/autocomplete-core" "1.7.1" + "@algolia/autocomplete-preset-algolia" "1.7.1" + "@docsearch/css" "3.2.0" + algoliasearch "^4.0.0" + +"@docusaurus/core@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.1.tgz#a2b0d653e8f18eacddda4778a46b638dd1f0f45c" + integrity sha512-Prd46TtZdiixlTl8a+h9bI5HegkfREjSNkrX2rVEwJZeziSz4ya+l7QDnbnCB2XbxEG8cveFo/F9q5lixolDtQ== + dependencies: + "@babel/core" "^7.18.6" + "@babel/generator" "^7.18.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-transform-runtime" "^7.18.6" + "@babel/preset-env" "^7.18.6" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.18.6" + "@babel/runtime" "^7.18.6" + "@babel/runtime-corejs3" "^7.18.6" + "@babel/traverse" "^7.18.8" + "@docusaurus/cssnano-preset" "2.0.1" + "@docusaurus/logger" "2.0.1" + "@docusaurus/mdx-loader" "2.0.1" + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/utils" "2.0.1" + "@docusaurus/utils-common" "2.0.1" + "@docusaurus/utils-validation" "2.0.1" + "@slorber/static-site-generator-webpack-plugin" "^4.0.7" + "@svgr/webpack" "^6.2.1" + autoprefixer "^10.4.7" + babel-loader "^8.2.5" + babel-plugin-dynamic-import-node "^2.3.3" + boxen "^6.2.1" + chalk "^4.1.2" + chokidar "^3.5.3" + clean-css "^5.3.0" + cli-table3 "^0.6.2" + combine-promises "^1.1.0" + commander "^5.1.0" + copy-webpack-plugin "^11.0.0" + core-js "^3.23.3" + css-loader "^6.7.1" + css-minimizer-webpack-plugin "^4.0.0" + cssnano "^5.1.12" + del "^6.1.1" + detect-port "^1.3.0" + escape-html "^1.0.3" + eta "^1.12.3" + file-loader "^6.2.0" + fs-extra "^10.1.0" + html-minifier-terser "^6.1.0" + html-tags "^3.2.0" + html-webpack-plugin "^5.5.0" + import-fresh "^3.3.0" + leven "^3.1.0" + lodash "^4.17.21" + mini-css-extract-plugin "^2.6.1" + postcss "^8.4.14" + postcss-loader "^7.0.0" + prompts "^2.4.2" + react-dev-utils "^12.0.1" + react-helmet-async "^1.3.0" + react-loadable "npm:@docusaurus/react-loadable@5.5.2" + react-loadable-ssr-addon-v5-slorber "^1.0.1" + react-router "^5.3.3" + react-router-config "^5.1.1" + react-router-dom "^5.3.3" + rtl-detect "^1.0.4" + semver "^7.3.7" + serve-handler "^6.1.3" + shelljs "^0.8.5" + terser-webpack-plugin "^5.3.3" + tslib "^2.4.0" + update-notifier "^5.1.0" + url-loader "^4.1.1" + wait-on "^6.0.1" + webpack "^5.73.0" + webpack-bundle-analyzer "^4.5.0" + webpack-dev-server "^4.9.3" + webpack-merge "^5.8.0" + webpackbar "^5.0.2" + +"@docusaurus/cssnano-preset@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.1.tgz#4d0c49338cf3aa88c5bd7cffbf77654db8e1e3b2" + integrity sha512-MCJ6rRmlqLmlCsZIoIxOxDb0rYzIPEm9PYpsBW+CGNnbk+x8xK+11hnrxzvXHqDRNpxrq3Kq2jYUmg/DkqE6vg== + dependencies: + cssnano-preset-advanced "^5.3.8" + postcss "^8.4.14" + postcss-sort-media-queries "^4.2.1" + tslib "^2.4.0" + +"@docusaurus/logger@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.0.1.tgz#78a940a333d2f654fd9dea24db2c962034d4b1ff" + integrity sha512-wIWseCKko1w/WARcDjO3N/XoJ0q/VE42AthP0eNAfEazDjJ94NXbaI6wuUsuY/bMg6hTKGVIpphjj2LoX3g6dA== + dependencies: + chalk "^4.1.2" + tslib "^2.4.0" + +"@docusaurus/mdx-loader@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.1.tgz#cc73690ca5d356687d9e75740560b4159cd5cdb5" + integrity sha512-tdNeljdilXCmhbaEND3SAgsqaw/oh7v9onT5yrIrL26OSk2AFwd+MIi4R8jt8vq33M0R4rz2wpknm0fQIkDdvQ== + dependencies: + "@babel/parser" "^7.18.8" + "@babel/traverse" "^7.18.8" + "@docusaurus/logger" "2.0.1" + "@docusaurus/utils" "2.0.1" + "@mdx-js/mdx" "^1.6.22" + escape-html "^1.0.3" + file-loader "^6.2.0" + fs-extra "^10.1.0" + image-size "^1.0.1" + mdast-util-to-string "^2.0.0" + remark-emoji "^2.2.0" + stringify-object "^3.3.0" + tslib "^2.4.0" + unified "^9.2.2" + unist-util-visit "^2.0.3" + url-loader "^4.1.1" + webpack "^5.73.0" + +"@docusaurus/module-type-aliases@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.1.tgz#44d7132297bedae0890695b0e7ebbe14a73e26d1" + integrity sha512-f888ylnxHAM/3T8p1lx08+lTc6/g7AweSRfRuZvrVhHXj3Tz/nTTxaP6gPTGkJK7WLqTagpar/IGP6/74IBbkg== + dependencies: + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/types" "2.0.1" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + "@types/react-router-dom" "*" + react-helmet-async "*" + react-loadable "npm:@docusaurus/react-loadable@5.5.2" + +"@docusaurus/plugin-content-blog@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.1.tgz#a37065e18ffd26e022ffb16a21ff28199140729e" + integrity sha512-/4ua3iFYcpwgpeYgHnhVGROB/ybnauLH2+rICb4vz/+Gn1hjAmGXVYq1fk8g49zGs3uxx5nc0H5bL9P0g977IQ== + dependencies: + "@docusaurus/core" "2.0.1" + "@docusaurus/logger" "2.0.1" + "@docusaurus/mdx-loader" "2.0.1" + "@docusaurus/types" "2.0.1" + "@docusaurus/utils" "2.0.1" + "@docusaurus/utils-common" "2.0.1" + "@docusaurus/utils-validation" "2.0.1" + cheerio "^1.0.0-rc.12" + feed "^4.2.2" + fs-extra "^10.1.0" + lodash "^4.17.21" + reading-time "^1.5.0" + tslib "^2.4.0" + unist-util-visit "^2.0.3" + utility-types "^3.10.0" + webpack "^5.73.0" + +"@docusaurus/plugin-content-docs@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.1.tgz#4059591b4bff617e744e856ca680674b27c0b98a" + integrity sha512-2qeBWRy1EjgnXdwAO6/csDIS1UVNmhmtk/bQ2s9jqjpwM8YVgZ8QVdkxFAMWXgZWDQdwWwdP1rnmoEelE4HknQ== + dependencies: + "@docusaurus/core" "2.0.1" + "@docusaurus/logger" "2.0.1" + "@docusaurus/mdx-loader" "2.0.1" + "@docusaurus/module-type-aliases" "2.0.1" + "@docusaurus/types" "2.0.1" + "@docusaurus/utils" "2.0.1" + "@docusaurus/utils-validation" "2.0.1" + "@types/react-router-config" "^5.0.6" + combine-promises "^1.1.0" + fs-extra "^10.1.0" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + lodash "^4.17.21" + tslib "^2.4.0" + utility-types "^3.10.0" + webpack "^5.73.0" + +"@docusaurus/plugin-content-pages@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.1.tgz#013f2e66f80d19b5c95a2d941d67c7cdb67b7191" + integrity sha512-6apSVeJENnNecAH5cm5VnRqR103M6qSI6IuiP7tVfD5H4AWrfDNkvJQV2+R2PIq3bGrwmX4fcXl1x4g0oo7iwA== + dependencies: + "@docusaurus/core" "2.0.1" + "@docusaurus/mdx-loader" "2.0.1" + "@docusaurus/types" "2.0.1" + "@docusaurus/utils" "2.0.1" + "@docusaurus/utils-validation" "2.0.1" + fs-extra "^10.1.0" + tslib "^2.4.0" + webpack "^5.73.0" + +"@docusaurus/plugin-debug@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.0.1.tgz#2b2a473f8e01fd356e32236f753665b48209bcd4" + integrity sha512-jpZBT5HK7SWx1LRQyv9d14i44vSsKXGZsSPA2ndth5HykHJsiAj9Fwl1AtzmtGYuBmI+iXQyOd4MAMHd4ZZ1tg== + dependencies: + "@docusaurus/core" "2.0.1" + "@docusaurus/types" "2.0.1" + "@docusaurus/utils" "2.0.1" + fs-extra "^10.1.0" + react-json-view "^1.21.3" + tslib "^2.4.0" + +"@docusaurus/plugin-google-analytics@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.1.tgz#e3b84237aad2e94dcd1cf1810c1c9bc3d94f186d" + integrity sha512-d5qb+ZeQcg1Czoxc+RacETjLdp2sN/TAd7PGN/GrvtijCdgNmvVAtZ9QgajBTG0YbJFVPTeZ39ad2bpoOexX0w== + dependencies: + "@docusaurus/core" "2.0.1" + "@docusaurus/types" "2.0.1" + "@docusaurus/utils-validation" "2.0.1" + tslib "^2.4.0" + +"@docusaurus/plugin-google-gtag@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.1.tgz#4cbcf9d520f7ec8124679fbe00867f2299a2f6bb" + integrity sha512-qiRufJe2FvIyzICbkjm4VbVCI1hyEju/CebfDKkKh2ZtV4q6DM1WZG7D6VoQSXL8MrMFB895gipOM4BwdM8VsQ== + dependencies: + "@docusaurus/core" "2.0.1" + "@docusaurus/types" "2.0.1" + "@docusaurus/utils-validation" "2.0.1" + tslib "^2.4.0" + +"@docusaurus/plugin-sitemap@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.1.tgz#6f8edb82b745b040d6b1495e2798396f63e50289" + integrity sha512-KcYuIUIp2JPzUf+Xa7W2BSsjLgN1/0h+VAz7D/C3RYjAgC5ApPX8wO+TECmGfunl/m7WKGUmLabfOon/as64kQ== + dependencies: + "@docusaurus/core" "2.0.1" + "@docusaurus/logger" "2.0.1" + "@docusaurus/types" "2.0.1" + "@docusaurus/utils" "2.0.1" + "@docusaurus/utils-common" "2.0.1" + "@docusaurus/utils-validation" "2.0.1" + fs-extra "^10.1.0" + sitemap "^7.1.1" + tslib "^2.4.0" + +"@docusaurus/preset-classic@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.1.tgz#21a806e16b61026d2a0efa6ca97e17397065d894" + integrity sha512-nOoniTg46My1qdDlLWeFs55uEmxOJ+9WMF8KKG8KMCu5LAvpemMi7rQd4x8Tw+xiPHZ/sQzH9JmPTMPRE4QGPw== + dependencies: + "@docusaurus/core" "2.0.1" + "@docusaurus/plugin-content-blog" "2.0.1" + "@docusaurus/plugin-content-docs" "2.0.1" + "@docusaurus/plugin-content-pages" "2.0.1" + "@docusaurus/plugin-debug" "2.0.1" + "@docusaurus/plugin-google-analytics" "2.0.1" + "@docusaurus/plugin-google-gtag" "2.0.1" + "@docusaurus/plugin-sitemap" "2.0.1" + "@docusaurus/theme-classic" "2.0.1" + "@docusaurus/theme-common" "2.0.1" + "@docusaurus/theme-search-algolia" "2.0.1" + "@docusaurus/types" "2.0.1" + +"@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": + version "5.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz#81aae0db81ecafbdaee3651f12804580868fa6ce" + integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== + dependencies: + "@types/react" "*" + prop-types "^15.6.2" + +"@docusaurus/theme-classic@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.1.tgz#043b6fcd2ecb2aecd134419b198c9f519029d5e7" + integrity sha512-0jfigiqkUwIuKOw7Me5tqUM9BBvoQX7qqeevx7v4tkYQexPhk3VYSZo7aRuoJ9oyW5makCTPX551PMJzmq7+sw== + dependencies: + "@docusaurus/core" "2.0.1" + "@docusaurus/mdx-loader" "2.0.1" + "@docusaurus/module-type-aliases" "2.0.1" + "@docusaurus/plugin-content-blog" "2.0.1" + "@docusaurus/plugin-content-docs" "2.0.1" + "@docusaurus/plugin-content-pages" "2.0.1" + "@docusaurus/theme-common" "2.0.1" + "@docusaurus/theme-translations" "2.0.1" + "@docusaurus/types" "2.0.1" + "@docusaurus/utils" "2.0.1" + "@docusaurus/utils-common" "2.0.1" + "@docusaurus/utils-validation" "2.0.1" + "@mdx-js/react" "^1.6.22" + clsx "^1.2.1" + copy-text-to-clipboard "^3.0.1" + infima "0.2.0-alpha.42" + lodash "^4.17.21" + nprogress "^0.2.0" + postcss "^8.4.14" + prism-react-renderer "^1.3.5" + prismjs "^1.28.0" + react-router-dom "^5.3.3" + rtlcss "^3.5.0" + tslib "^2.4.0" + utility-types "^3.10.0" + +"@docusaurus/theme-common@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.0.1.tgz#9594d58fbef11fe480967b5ce4cdbb3cd78d9ca3" + integrity sha512-I3b6e/ryiTQMsbES40cP0DRGnfr0E2qghVq+XecyMKjBPejISoSFEDn0MsnbW8Q26k1Dh/0qDH8QKDqaZZgLhA== + dependencies: + "@docusaurus/mdx-loader" "2.0.1" + "@docusaurus/module-type-aliases" "2.0.1" + "@docusaurus/plugin-content-blog" "2.0.1" + "@docusaurus/plugin-content-docs" "2.0.1" + "@docusaurus/plugin-content-pages" "2.0.1" + "@docusaurus/utils" "2.0.1" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + clsx "^1.2.1" + parse-numeric-range "^1.3.0" + prism-react-renderer "^1.3.5" + tslib "^2.4.0" + utility-types "^3.10.0" + +"@docusaurus/theme-search-algolia@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.1.tgz#0aab8407b2163f67eb4c48f1de33944e1695fa74" + integrity sha512-cw3NaOSKbYlsY6uNj4PgO+5mwyQ3aEWre5RlmvjStaz2cbD15Nr69VG8Rd/F6Q5VsCT8BvSdkPDdDG5d/ACexg== + dependencies: + "@docsearch/react" "^3.1.1" + "@docusaurus/core" "2.0.1" + "@docusaurus/logger" "2.0.1" + "@docusaurus/plugin-content-docs" "2.0.1" + "@docusaurus/theme-common" "2.0.1" + "@docusaurus/theme-translations" "2.0.1" + "@docusaurus/utils" "2.0.1" + "@docusaurus/utils-validation" "2.0.1" + algoliasearch "^4.13.1" + algoliasearch-helper "^3.10.0" + clsx "^1.2.1" + eta "^1.12.3" + fs-extra "^10.1.0" + lodash "^4.17.21" + tslib "^2.4.0" + utility-types "^3.10.0" + +"@docusaurus/theme-translations@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.0.1.tgz#955a687c974265a811bfc743d98ef3eab0379100" + integrity sha512-v1MYYlbsdX+rtKnXFcIAn9ar0Z6K0yjqnCYS0p/KLCLrfJwfJ8A3oRJw2HiaIb8jQfk1WMY2h5Qi1p4vHOekQw== + dependencies: + fs-extra "^10.1.0" + tslib "^2.4.0" + +"@docusaurus/types@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.0.1.tgz#8696a70e85c4b9be80b38ac592d520f6fe72618b" + integrity sha512-o+4hAFWkj3sBszVnRTAnNqtAIuIW0bNaYyDwQhQ6bdz3RAPEq9cDKZxMpajsj4z2nRty8XjzhyufAAjxFTyrfg== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + commander "^5.1.0" + joi "^17.6.0" + react-helmet-async "^1.3.0" + utility-types "^3.10.0" + webpack "^5.73.0" + webpack-merge "^5.8.0" + +"@docusaurus/utils-common@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.0.1.tgz#b6f2b029547f739e1431ec84abd16974edf495e0" + integrity sha512-kajCCDCXRd1HFH5EUW31MPaQcsyNlGakpkDoTBtBvpa4EIPvWaSKy7TIqYKHrZjX4tnJ0YbEJvaXfjjgdq5xSg== + dependencies: + tslib "^2.4.0" + +"@docusaurus/utils-validation@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.1.tgz#69f7d4944288d71f00fdba6dde10f05008f04308" + integrity sha512-f14AnwFBy4/1A19zWthK+Ii80YDz+4qt8oPpK3julywXsheSxPBqgsND3LVBBvB2p3rJHvbo2m3HyB9Tco1JRw== + dependencies: + "@docusaurus/logger" "2.0.1" + "@docusaurus/utils" "2.0.1" + joi "^17.6.0" + js-yaml "^4.1.0" + tslib "^2.4.0" + +"@docusaurus/utils@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.1.tgz#37b4b42e29175e5d2d811fcbf9f93bffeca7c353" + integrity sha512-u2Vdl/eoVwMfUjDCkg7FjxoiwFs/XhVVtNxQEw8cvB+qaw6QWyT73m96VZzWtUb1fDOefHoZ+bZ0ObFeKk9lMQ== + dependencies: + "@docusaurus/logger" "2.0.1" + "@svgr/webpack" "^6.2.1" + file-loader "^6.2.0" + fs-extra "^10.1.0" + github-slugger "^1.4.0" + globby "^11.1.0" + gray-matter "^4.0.3" + js-yaml "^4.1.0" + lodash "^4.17.21" + micromatch "^4.0.5" + resolve-pathname "^3.0.0" + shelljs "^0.8.5" + tslib "^2.4.0" + url-loader "^4.1.1" + webpack "^5.73.0" + +"@exodus/schemasafe@^1.0.0-rc.2": + version "1.0.0-rc.7" + resolved "https://registry.yarnpkg.com/@exodus/schemasafe/-/schemasafe-1.0.0-rc.7.tgz#aded6839c2369883dafa46608a135c82b42ed76b" + integrity sha512-+1mBLsa+vvlV0lwEAP1hwgmOPkjMnoJ8hyCMfCCJga0sVDwDzrPJjnxZwdDaUmOh/vbFHQGBTk+FxsVjoI/CjQ== + +"@hapi/hoek@^9.0.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== + +"@hapi/topo@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.15" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" + integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jsdevtools/ono@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" + integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" + integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + +"@mdx-js/mdx@^1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.22.tgz#8a723157bf90e78f17dc0f27995398e6c731f1ba" + integrity sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA== + dependencies: + "@babel/core" "7.12.9" + "@babel/plugin-syntax-jsx" "7.12.1" + "@babel/plugin-syntax-object-rest-spread" "7.8.3" + "@mdx-js/util" "1.6.22" + babel-plugin-apply-mdx-type-prop "1.6.22" + babel-plugin-extract-import-names "1.6.22" + camelcase-css "2.0.1" + detab "2.0.4" + hast-util-raw "6.0.1" + lodash.uniq "4.5.0" + mdast-util-to-hast "10.0.1" + remark-footnotes "2.0.0" + remark-mdx "1.6.22" + remark-parse "8.0.3" + remark-squeeze-paragraphs "4.0.0" + style-to-object "0.3.0" + unified "9.2.0" + unist-builder "2.0.3" + unist-util-visit "2.0.3" + +"@mdx-js/react@^1.6.21", "@mdx-js/react@^1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.22.tgz#ae09b4744fddc74714ee9f9d6f17a66e77c43573" + integrity sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg== + +"@mdx-js/util@1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" + integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@paloaltonetworks/openapi-to-postmanv2@3.1.0-hotfix.1": + version "3.1.0-hotfix.1" + resolved "https://registry.yarnpkg.com/@paloaltonetworks/openapi-to-postmanv2/-/openapi-to-postmanv2-3.1.0-hotfix.1.tgz#4baf401d2e94ba86d888e6011a4c45d824e88114" + integrity sha512-0bdaPCEyQbnUo4xpOu7EzxXXkDx4BAXqc8QSbVBlzlVB5KoTLJiKKB4c3fa4BXbK+3u/OqfLbeNCebc2EC8ngA== + dependencies: + "@paloaltonetworks/postman-collection" "^4.1.0" + ajv "8.1.0" + ajv-formats "2.1.1" + async "3.2.1" + commander "2.20.3" + js-yaml "3.14.1" + json-schema-merge-allof "0.8.1" + lodash "4.17.21" + oas-resolver-browser "2.5.2" + path-browserify "1.0.1" + yaml "1.10.2" + +"@paloaltonetworks/postman-code-generators@1.1.5-hotfix.5": + version "1.1.5-hotfix.5" + resolved "https://registry.yarnpkg.com/@paloaltonetworks/postman-code-generators/-/postman-code-generators-1.1.5-hotfix.5.tgz#7ec13583a1668bc92b886db15fcd8b96bfb66e1f" + integrity sha512-UPpA7tgv4BA1K/oc31A/yV+tan82QsvnOXvORHXW11Hr2/syY2uOLWKQJkgFDV9WXFSBu8SMgCEM1mJqldk1Jg== + dependencies: + "@paloaltonetworks/postman-collection" "^4.1.0" + async "2.6.3" + path "0.12.7" + shelljs "0.8.4" + +"@paloaltonetworks/postman-collection@^4.1.0": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@paloaltonetworks/postman-collection/-/postman-collection-4.1.1.tgz#b2130bc8d7396ea8e6a6b2e4642a6b224b41e1e1" + integrity sha512-9JHHkkD8Xb4rvdKob7TDPRfqfmdG3KU0aO5gJyyjvMFbOVysam5I0d8/9HPOuJXWkUHGo3Sn+ov2Fcm2bnJ52Q== + dependencies: + file-type "3.9.0" + http-reasons "0.1.0" + iconv-lite "0.6.3" + liquid-json "0.3.1" + lodash "4.17.21" + mime-format "2.0.1" + mime-types "2.1.34" + postman-url-encoder "3.0.5" + semver "7.3.5" + uuid "8.3.2" + +"@polka/url@^1.0.0-next.20": + version "1.0.0-next.21" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" + integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== + +"@redocly/ajv@^8.6.4": + version "8.6.5" + resolved "https://registry.yarnpkg.com/@redocly/ajv/-/ajv-8.6.5.tgz#b6e737248b791905b3f600fb329779a807f0f774" + integrity sha512-3P2TY/u4c6OBqkP+1cTH1iGAEv0O34PV3vV2Wnos/nNHu62OTrtC4zcaxttG0pHtPtn42StrhGq7SsiFgP4Bfw== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +"@redocly/openapi-core@^1.0.0-beta.103": + version "1.0.0-beta.106" + resolved "https://registry.yarnpkg.com/@redocly/openapi-core/-/openapi-core-1.0.0-beta.106.tgz#5df810aee2ed64ecadf3d5100d8fbdf0d74c2924" + integrity sha512-ZHeczZ6iJrHL7K1v4s+NRFUOHsfZ1ZrB+bcS42CP4bhL/Y17PkOMWA+6Ubk0NVT4Ihdt5cLLWGfjVABD/bEM2A== + dependencies: + "@redocly/ajv" "^8.6.4" + "@types/node" "^14.11.8" + colorette "^1.2.0" + js-levenshtein "^1.1.6" + js-yaml "^4.1.0" + lodash.isequal "^4.5.0" + minimatch "^5.0.1" + node-fetch "^2.6.1" + pluralize "^8.0.0" + yaml-ast-parser "0.0.43" + +"@reduxjs/toolkit@^1.7.1": + version "1.8.4" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.8.4.tgz#8f226acff22adf539d078b64fa2eafc3f8d1d045" + integrity sha512-IpFq1WI7sCYeLQpDCGvlcQY9wn70UpAM3cOLq78HRnVn1746RI+l3y5xcuOeVOxORaxABJh3cfJMxycD2IwH5w== + dependencies: + immer "^9.0.7" + redux "^4.1.2" + redux-thunk "^2.4.1" + reselect "^4.1.5" + +"@sideway/address@^4.1.3": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" + integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" + integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@slorber/static-site-generator-webpack-plugin@^4.0.7": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz#fc1678bddefab014e2145cbe25b3ce4e1cfc36f3" + integrity sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA== + dependencies: + eval "^0.1.8" + p-map "^4.0.0" + webpack-sources "^3.2.2" + +"@svgr/babel-plugin-add-jsx-attribute@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.3.1.tgz#b9a5d84902be75a05ede92e70b338d28ab63fa74" + integrity sha512-jDBKArXYO1u0B1dmd2Nf8Oy6aTF5vLDfLoO9Oon/GLkqZ/NiggYWZA+a2HpUMH4ITwNqS3z43k8LWApB8S583w== + +"@svgr/babel-plugin-remove-jsx-attribute@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.3.1.tgz#4877995452efc997b36777abe1fde9705ef78e8b" + integrity sha512-dQzyJ4prwjcFd929T43Z8vSYiTlTu8eafV40Z2gO7zy/SV5GT+ogxRJRBIKWomPBOiaVXFg3jY4S5hyEN3IBjQ== + +"@svgr/babel-plugin-remove-jsx-empty-expression@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.3.1.tgz#2d67a0e92904c9be149a5b22d3a3797ce4d7b514" + integrity sha512-HBOUc1XwSU67fU26V5Sfb8MQsT0HvUyxru7d0oBJ4rA2s4HW3PhyAPC7fV/mdsSGpAvOdd8Wpvkjsr0fWPUO7A== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.3.1.tgz#306f5247139c53af70d1778f2719647c747998ee" + integrity sha512-C12e6aN4BXAolRrI601gPn5MDFCRHO7C4TM8Kks+rDtl8eEq+NN1sak0eAzJu363x3TmHXdZn7+Efd2nr9I5dA== + +"@svgr/babel-plugin-svg-dynamic-title@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.3.1.tgz#6ce26d34cbc93eb81737ef528528907c292e7aa2" + integrity sha512-6NU55Mmh3M5u2CfCCt6TX29/pPneutrkJnnDCHbKZnjukZmmgUAZLtZ2g6ZoSPdarowaQmAiBRgAHqHmG0vuqA== + +"@svgr/babel-plugin-svg-em-dimensions@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.3.1.tgz#5ade2a724b290873c30529d1d8cd23523856287a" + integrity sha512-HV1NGHYTTe1vCNKlBgq/gKuCSfaRlKcHIADn7P8w8U3Zvujdw1rmusutghJ1pZJV7pDt3Gt8ws+SVrqHnBO/Qw== + +"@svgr/babel-plugin-transform-react-native-svg@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.3.1.tgz#d654f509d692c3a09dfb475757a44bd9f6ad7ddf" + integrity sha512-2wZhSHvTolFNeKDAN/ZmIeSz2O9JSw72XD+o2bNp2QAaWqa8KGpn5Yk5WHso6xqfSAiRzAE+GXlsrBO4UP9LLw== + +"@svgr/babel-plugin-transform-svg-component@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.3.1.tgz#21a285dbffdce9567c437ebf0d081bf9210807e6" + integrity sha512-cZ8Tr6ZAWNUFfDeCKn/pGi976iWSkS8ijmEYKosP+6ktdZ7lW9HVLHojyusPw3w0j8PI4VBeWAXAmi/2G7owxw== + +"@svgr/babel-preset@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-6.3.1.tgz#8bd1ead79637d395e9362b01dd37cfd59702e152" + integrity sha512-tQtWtzuMMQ3opH7je+MpwfuRA1Hf3cKdSgTtAYwOBDfmhabP7rcTfBi3E7V3MuwJNy/Y02/7/RutvwS1W4Qv9g== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^6.3.1" + "@svgr/babel-plugin-remove-jsx-attribute" "^6.3.1" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^6.3.1" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.3.1" + "@svgr/babel-plugin-svg-dynamic-title" "^6.3.1" + "@svgr/babel-plugin-svg-em-dimensions" "^6.3.1" + "@svgr/babel-plugin-transform-react-native-svg" "^6.3.1" + "@svgr/babel-plugin-transform-svg-component" "^6.3.1" + +"@svgr/core@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-6.3.1.tgz#752adf49d8d5473b15d76ca741961de093f715bd" + integrity sha512-Sm3/7OdXbQreemf9aO25keerZSbnKMpGEfmH90EyYpj1e8wMD4TuwJIb3THDSgRMWk1kYJfSRulELBy4gVgZUA== + dependencies: + "@svgr/plugin-jsx" "^6.3.1" + camelcase "^6.2.0" + cosmiconfig "^7.0.1" + +"@svgr/hast-util-to-babel-ast@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.3.1.tgz#59614e24d2a4a28010e02089213b3448d905769d" + integrity sha512-NgyCbiTQIwe3wHe/VWOUjyxmpUmsrBjdoIxKpXt3Nqc3TN30BpJG22OxBvVzsAh9jqep0w0/h8Ywvdk3D9niNQ== + dependencies: + "@babel/types" "^7.18.4" + entities "^4.3.0" + +"@svgr/plugin-jsx@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-6.3.1.tgz#de7b2de824296b836d6b874d498377896e367f50" + integrity sha512-r9+0mYG3hD4nNtUgsTXWGYJomv/bNd7kC16zvsM70I/bGeoCi/3lhTmYqeN6ChWX317OtQCSZZbH4wq9WwoXbw== + dependencies: + "@babel/core" "^7.18.5" + "@svgr/babel-preset" "^6.3.1" + "@svgr/hast-util-to-babel-ast" "^6.3.1" + svg-parser "^2.0.4" + +"@svgr/plugin-svgo@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-6.3.1.tgz#3c1ff2efaed10e5c5d35a6cae7bacaedc18b5d4a" + integrity sha512-yJIjTDKPYqzFVjmsbH5EdIwEsmKxjxdXSGJVLeUgwZOZPAkNQmD1v7LDbOdOKbR44FG8465Du+zWPdbYGnbMbw== + dependencies: + cosmiconfig "^7.0.1" + deepmerge "^4.2.2" + svgo "^2.8.0" + +"@svgr/webpack@^6.2.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-6.3.1.tgz#001d03236ebb03bf47c0a4b92d5423e05095ebe6" + integrity sha512-eODxwIUShLxSMaRjzJtrj9wg89D75JLczvWg9SaB5W+OtVTkiC1vdGd8+t+pf5fTlBOy4RRXAq7x1E3DUl3D0A== + dependencies: + "@babel/core" "^7.18.5" + "@babel/plugin-transform-react-constant-elements" "^7.17.12" + "@babel/preset-env" "^7.18.2" + "@babel/preset-react" "^7.17.12" + "@babel/preset-typescript" "^7.17.12" + "@svgr/core" "^6.3.1" + "@svgr/plugin-jsx" "^6.3.1" + "@svgr/plugin-svgo" "^6.3.1" + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.9": + version "3.5.10" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" + integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== + dependencies: + "@types/node" "*" + +"@types/connect-history-api-fallback@^1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" + integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/debug@^4.0.0": + version "4.1.7" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" + integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== + dependencies: + "@types/ms" "*" + +"@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.4.5" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.5.tgz#acdfb7dd36b91cc5d812d7c093811a8f3d9b31e4" + integrity sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== + +"@types/estree@^0.0.51": + version "0.0.51" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": + version "4.17.30" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz#0f2f99617fa8f9696170c46152ccf7500b34ac04" + integrity sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*", "@types/express@^4.17.13": + version "4.17.13" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" + integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/hast@^2.0.0": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc" + integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g== + dependencies: + "@types/unist" "*" + +"@types/history@^4.7.11": + version "4.7.11" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" + integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== + +"@types/hoist-non-react-statics@^3.3.0": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== + +"@types/http-proxy@^1.17.8": + version "1.17.9" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" + integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw== + dependencies: + "@types/node" "*" + +"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/mdast@^3.0.0": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.10.tgz#4724244a82a4598884cbbe9bcfd73dff927ee8af" + integrity sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA== + dependencies: + "@types/unist" "*" + +"@types/mdurl@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" + integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== + +"@types/mime@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== + +"@types/ms@*": + version "0.7.31" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" + integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== + +"@types/node@*": + version "18.7.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.2.tgz#22306626110c459aedd2cdf131c749ec781e3b34" + integrity sha512-ce7MIiaYWCFv6A83oEultwhBXb22fxwNOQf5DIxWA4WXvDQ7K+L0fbWl/YOfCzlR5B/uFkSnVBhPcOfOECcWvA== + +"@types/node@^14.11.8": + version "14.18.23" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.23.tgz#70f5f20b0b1b38f696848c1d3647bb95694e615e" + integrity sha512-MhbCWN18R4GhO8ewQWAFK4TGQdBpXWByukz7cWyJmXhvRuCIaM/oWytGPqVmDzgEnnaIc9ss6HbU5mUi+vyZPA== + +"@types/node@^17.0.5": + version "17.0.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/parse5@^5.0.0": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" + integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== + +"@types/prop-types@*", "@types/prop-types@^15.0.0": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + +"@types/react-redux@^7.1.20": + version "7.1.24" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.24.tgz#6caaff1603aba17b27d20f8ad073e4c077e975c0" + integrity sha512-7FkurKcS1k0FHZEtdbbgN8Oc6b+stGSfZYjQGicofJ0j4U0qIn/jaSvnP2pLwZKiai3/17xqqxkkrxTgN8UNbQ== + dependencies: + "@types/hoist-non-react-statics" "^3.3.0" + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + redux "^4.0.0" + +"@types/react-router-config@*", "@types/react-router-config@^5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.6.tgz#87c5c57e72d241db900d9734512c50ccec062451" + integrity sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router-dom@*": + version "5.3.3" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" + integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router@*": + version "5.1.18" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.18.tgz#c8851884b60bc23733500d86c1266e1cfbbd9ef3" + integrity sha512-YYknwy0D0iOwKQgz9v8nOzt2J6l4gouBmDnWqUUznltOTaon+r8US8ky8HvN0tXvc38U9m6z/t2RsVsnd1zM0g== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + +"@types/react@*": + version "18.0.17" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.17.tgz#4583d9c322d67efe4b39a935d223edcc7050ccf4" + integrity sha512-38ETy4tL+rn4uQQi7mB81G7V1g0u2ryquNmsVIOKUAEIDK+3CUjZ6rSRpdvS99dNBnkLFL83qfmtLacGOTIhwQ== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + +"@types/sax@^1.2.1": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.4.tgz#8221affa7f4f3cb21abd22f244cfabfa63e6a69e" + integrity sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw== + dependencies: + "@types/node" "*" + +"@types/scheduler@*": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + +"@types/serve-index@^1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" + integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== + dependencies: + "@types/express" "*" + +"@types/serve-static@*", "@types/serve-static@^1.13.10": + version "1.15.0" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155" + integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg== + dependencies: + "@types/mime" "*" + "@types/node" "*" + +"@types/sockjs@^0.3.33": + version "0.3.33" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" + integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== + dependencies: + "@types/node" "*" + +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" + integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== + +"@types/ws@^8.5.1": + version "8.5.3" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" + integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== + dependencies: + "@types/node" "*" + +"@webassemblyjs/ast@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" + integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + +"@webassemblyjs/floating-point-hex-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" + integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== + +"@webassemblyjs/helper-api-error@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" + integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== + +"@webassemblyjs/helper-buffer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" + integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== + +"@webassemblyjs/helper-numbers@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" + integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" + integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== + +"@webassemblyjs/helper-wasm-section@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" + integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + +"@webassemblyjs/ieee754@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" + integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" + integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" + integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== + +"@webassemblyjs/wasm-edit@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" + integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" + integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" + integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" + integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" + integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-import-assertions@^1.7.6: + version "1.8.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" + integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== + +acorn-walk@^8.0.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.0.4, acorn@^8.5.0, acorn@^8.7.1: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + +address@^1.0.1, address@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/address/-/address-1.2.0.tgz#d352a62c92fee90f89a693eccd2a8b2139ab02d9" + integrity sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig== + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-formats@2.1.1, ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv-keywords@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.1.0.tgz#45d5d3d36c7cdd808930cc3e603cf6200dbeb736" + integrity sha512-B/Sk2Ix7A36fs/ZkuGLIR86EdjbgR6fsAcbx9lOP/QBSXujDNbVmIS/U4Itz5k8fPFDeVZl/zQ/gJW4Jrq6XjQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0, ajv@^8.8.0: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +algoliasearch-helper@^3.10.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.11.0.tgz#c4355056d97748a92f6ff0d4fce153b96b561ddb" + integrity sha512-TLl/MSjtQ98mgkd8hngWkzSjE+dAWldZ1NpJtv2mT+ZoFJ2P2zDE85oF9WafJOXWN9FbVRmyxpO5H+qXcNaFng== + dependencies: + "@algolia/events" "^4.0.1" + +algoliasearch@^4.0.0, algoliasearch@^4.13.1: + version "4.14.2" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.14.2.tgz#63f142583bfc3a9bd3cd4a1b098bf6fe58e56f6c" + integrity sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg== + dependencies: + "@algolia/cache-browser-local-storage" "4.14.2" + "@algolia/cache-common" "4.14.2" + "@algolia/cache-in-memory" "4.14.2" + "@algolia/client-account" "4.14.2" + "@algolia/client-analytics" "4.14.2" + "@algolia/client-common" "4.14.2" + "@algolia/client-personalization" "4.14.2" + "@algolia/client-search" "4.14.2" + "@algolia/logger-common" "4.14.2" + "@algolia/logger-console" "4.14.2" + "@algolia/requester-browser-xhr" "4.14.2" + "@algolia/requester-common" "4.14.2" + "@algolia/requester-node-http" "4.14.2" + "@algolia/transporter" "4.14.2" + +ansi-align@^3.0.0, ansi-align@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" + integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-flatten@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +asap@^2.0.0, asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +async@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +async@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.1.tgz#d3274ec66d107a47476a4c49136aacdb00665fc8" + integrity sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +autoprefixer@^10.3.7, autoprefixer@^10.4.7: + version "10.4.8" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.8.tgz#92c7a0199e1cfb2ad5d9427bd585a3d75895b9e5" + integrity sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw== + dependencies: + browserslist "^4.21.3" + caniuse-lite "^1.0.30001373" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + +axios@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.25.0.tgz#349cfbb31331a9b4453190791760a8d35b093e0a" + integrity sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g== + dependencies: + follow-redirects "^1.14.7" + +babel-loader@^8.2.5: + version "8.2.5" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e" + integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^2.0.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-apply-mdx-type-prop@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz#d216e8fd0de91de3f1478ef3231e05446bc8705b" + integrity sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + "@mdx-js/util" "1.6.22" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-extract-import-names@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz#de5f9a28eb12f3eb2578bf74472204e66d1a13dc" + integrity sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + +babel-plugin-polyfill-corejs2@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz#e4c31d4c89b56f3cf85b92558954c66b54bd972d" + integrity sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q== + dependencies: + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.2" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz#d7e09c9a899079d71a8b670c6181af56ec19c5c7" + integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.2" + core-js-compat "^3.21.0" + +babel-plugin-polyfill-regenerator@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz#8f51809b6d5883e07e71548d75966ff7635527fe" + integrity sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.2" + +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== + +bail@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" + integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base16@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" + integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +body-parser@1.20.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" + integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.10.3" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +bonjour-service@^1.0.11: + version "1.0.13" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.13.tgz#4ac003dc1626023252d58adf2946f57e5da450c1" + integrity sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA== + dependencies: + array-flatten "^2.1.2" + dns-equal "^1.0.0" + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +boxen@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + +boxen@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-6.2.1.tgz#b098a2278b2cd2845deef2dff2efc38d329b434d" + integrity sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw== + dependencies: + ansi-align "^3.0.1" + camelcase "^6.2.0" + chalk "^4.1.2" + cli-boxes "^3.0.0" + string-width "^5.0.1" + type-fest "^2.5.0" + widest-line "^4.0.1" + wrap-ansi "^8.0.1" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.18.1, browserslist@^4.20.2, browserslist@^4.20.3, browserslist@^4.21.3: + version "4.21.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a" + integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== + dependencies: + caniuse-lite "^1.0.30001370" + electron-to-chromium "^1.4.202" + node-releases "^2.0.6" + update-browserslist-db "^1.0.5" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw== + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase-css@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001370, caniuse-lite@^1.0.30001373: + version "1.0.30001375" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001375.tgz#8e73bc3d1a4c800beb39f3163bf0190d7e5d7672" + integrity sha512-kWIMkNzLYxSvnjy0hL8w1NOaWNr2rn39RTAVyIwcw8juu60bZDWiF1/loOYANzjtJmy6qPgNmn38ro5Pygagdw== + +ccount@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" + integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-entities@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + +charset@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/charset/-/charset-1.0.1.tgz#8d59546c355be61049a8fa9164747793319852bd" + integrity sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg== + +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + dependencies: + boolbase "^1.0.0" + css-select "^5.1.0" + css-what "^6.1.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + +cheerio@^1.0.0-rc.12: + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + +chokidar@^3.4.2, chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +clean-css@^5.2.2, clean-css@^5.3.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.1.tgz#d0610b0b90d125196a2894d35366f734e5d7aa32" + integrity sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +cli-boxes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145" + integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== + +cli-table3@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.2.tgz#aaf5df9d8b5bf12634dc8b3040806a0c07120d2a" + integrity sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +clsx@^1.1.1, clsx@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== + +collapse-white-space@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" + integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colord@^2.9.1: + version "2.9.3" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== + +colorette@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== + +colorette@^2.0.10: + version "2.0.19" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +combine-promises@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.1.0.tgz#72db90743c0ca7aab7d0d8d2052fd7b0f674de71" + integrity sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +comma-separated-tokens@^1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" + integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== + +comma-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz#d4c25abb679b7751c880be623c1179780fe1dd98" + integrity sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg== + +commander@2.20.3, commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.0.0, commander@~4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +component-emitter@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +compute-gcd@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/compute-gcd/-/compute-gcd-1.2.1.tgz#34d639f3825625e1357ce81f0e456a6249d8c77f" + integrity sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg== + dependencies: + validate.io-array "^1.0.3" + validate.io-function "^1.0.2" + validate.io-integer-array "^1.0.0" + +compute-lcm@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/compute-lcm/-/compute-lcm-1.1.2.tgz#9107c66b9dca28cefb22b4ab4545caac4034af23" + integrity sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ== + dependencies: + compute-gcd "^1.2.1" + validate.io-array "^1.0.3" + validate.io-function "^1.0.2" + validate.io-integer-array "^1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== + +consola@^2.15.3: + version "2.15.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" + integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +cookiejar@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" + integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== + +copy-text-to-clipboard@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz#8cbf8f90e0a47f12e4a24743736265d157bce69c" + integrity sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q== + +copy-webpack-plugin@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" + integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== + dependencies: + fast-glob "^3.2.11" + glob-parent "^6.0.1" + globby "^13.1.1" + normalize-path "^3.0.0" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + +core-js-compat@^3.21.0, core-js-compat@^3.22.1: + version "3.24.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.24.1.tgz#d1af84a17e18dfdd401ee39da9996f9a7ba887de" + integrity sha512-XhdNAGeRnTpp8xbD+sR/HFDK9CbeeeqXT6TuofXh3urqEevzkWmLRgrVoykodsw8okqo2pu1BOmuCKrHx63zdw== + dependencies: + browserslist "^4.21.3" + semver "7.0.0" + +core-js-pure@^3.20.2: + version "3.24.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.24.1.tgz#8839dde5da545521bf282feb7dc6d0b425f39fd3" + integrity sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg== + +core-js@^3.23.3: + version "3.24.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.24.1.tgz#cf7724d41724154010a6576b7b57d94c5d66e64f" + integrity sha512-0QTBSYSUZ6Gq21utGzkfITDylE8jWC9Ne1D2MrhvlsZBI1x39OdDIVbzSqtgMndIy6BlHxBXpMGqzZmnztg2rg== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +cross-fetch@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-js@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf" + integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw== + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +css-declaration-sorter@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz#72ebd995c8f4532ff0036631f7365cce9759df14" + integrity sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og== + +css-loader@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.1.tgz#e98106f154f6e1baf3fc3bc455cb9981c1d5fd2e" + integrity sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.7" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.3.5" + +css-minimizer-webpack-plugin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.0.0.tgz#e11800388c19c2b7442c39cc78ac8ae3675c9605" + integrity sha512-7ZXXRzRHvofv3Uac5Y+RkWRNo0ZMlcg8e9/OtrqUYmwDWJo+qs67GvdeFrXLsFb7czKNwjQhPkM0avlIYl+1nA== + dependencies: + cssnano "^5.1.8" + jest-worker "^27.5.1" + postcss "^8.4.13" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + source-map "^0.6.1" + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-tree@^1.1.2, css-tree@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^6.0.1, css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-advanced@^5.3.8: + version "5.3.8" + resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.8.tgz#027b1d05ef896d908178c483f0ec4190cb50ef9a" + integrity sha512-xUlLLnEB1LjpEik+zgRNlk8Y/koBPPtONZjp7JKbXigeAmCrFvq9H0pXW5jJV45bQWAlmJ0sKy+IMr0XxLYQZg== + dependencies: + autoprefixer "^10.3.7" + cssnano-preset-default "^5.2.12" + postcss-discard-unused "^5.1.0" + postcss-merge-idents "^5.1.1" + postcss-reduce-idents "^5.2.0" + postcss-zindex "^5.1.0" + +cssnano-preset-default@^5.2.12: + version "5.2.12" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz#ebe6596ec7030e62c3eb2b3c09f533c0644a9a97" + integrity sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew== + dependencies: + css-declaration-sorter "^6.3.0" + cssnano-utils "^3.1.0" + postcss-calc "^8.2.3" + postcss-colormin "^5.3.0" + postcss-convert-values "^5.1.2" + postcss-discard-comments "^5.1.2" + postcss-discard-duplicates "^5.1.0" + postcss-discard-empty "^5.1.1" + postcss-discard-overridden "^5.1.0" + postcss-merge-longhand "^5.1.6" + postcss-merge-rules "^5.1.2" + postcss-minify-font-values "^5.1.0" + postcss-minify-gradients "^5.1.1" + postcss-minify-params "^5.1.3" + postcss-minify-selectors "^5.2.1" + postcss-normalize-charset "^5.1.0" + postcss-normalize-display-values "^5.1.0" + postcss-normalize-positions "^5.1.1" + postcss-normalize-repeat-style "^5.1.1" + postcss-normalize-string "^5.1.0" + postcss-normalize-timing-functions "^5.1.0" + postcss-normalize-unicode "^5.1.0" + postcss-normalize-url "^5.1.0" + postcss-normalize-whitespace "^5.1.1" + postcss-ordered-values "^5.1.3" + postcss-reduce-initial "^5.1.0" + postcss-reduce-transforms "^5.1.0" + postcss-svgo "^5.1.0" + postcss-unique-selectors "^5.1.1" + +cssnano-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" + integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== + +cssnano@^5.1.12, cssnano@^5.1.8: + version "5.1.13" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.13.tgz#83d0926e72955332dc4802a7070296e6258efc0a" + integrity sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ== + dependencies: + cssnano-preset-default "^5.2.12" + lilconfig "^2.0.3" + yaml "^1.10.2" + +csso@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +csstype@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" + integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== + +debug@2.6.9, debug@^2.6.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decode-named-character-reference@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" + integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== + dependencies: + character-entities "^2.0.0" + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + dependencies: + mimic-response "^1.0.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== + dependencies: + execa "^5.0.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +del@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" + integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== + dependencies: + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +dequal@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detab@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.4.tgz#b927892069aff405fbb9a186fe97a44a92a94b43" + integrity sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g== + dependencies: + repeat-string "^1.5.4" + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +detect-port-alt@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +detect-port@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" + integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +dezalgo@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ== + dependencies: + asap "^2.0.0" + wrappy "1" + +diff@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" + integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== + +dns-packet@^5.2.2: + version "5.4.0" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b" + integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +docusaurus-plugin-openapi-docs@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/docusaurus-plugin-openapi-docs/-/docusaurus-plugin-openapi-docs-1.1.6.tgz#329b46ea8896771aee672182f097fd4dca1135c6" + integrity sha512-zVACWYkb3htqvdR8W5h1GwhYM6Ii1aNxNzUinZCIXNt0sYk4Vcy8QbI4kd5FtZaV+KZ4Jq6xRB0i7u6i/eJh5g== + dependencies: + "@apidevtools/json-schema-ref-parser" "^9.0.9" + "@docusaurus/mdx-loader" "2.0.1" + "@docusaurus/plugin-content-docs" "2.0.1" + "@docusaurus/utils" "2.0.1" + "@docusaurus/utils-validation" "2.0.1" + "@paloaltonetworks/openapi-to-postmanv2" "3.1.0-hotfix.1" + "@paloaltonetworks/postman-collection" "^4.1.0" + "@redocly/openapi-core" "^1.0.0-beta.103" + chalk "^4.1.2" + clsx "^1.1.1" + fs-extra "^9.0.1" + js-yaml "^4.1.0" + json-pointer "^0.6.2" + json-refs "^3.0.15" + json-schema-merge-allof "^0.8.1" + lodash "^4.17.20" + mustache "^4.2.0" + slugify "^1.6.5" + swagger2openapi "^7.0.8" + url-template "^3.0.0" + webpack "^5.61.0" + +docusaurus-theme-openapi-docs@^1.1.6: + version "1.1.7" + resolved "https://registry.yarnpkg.com/docusaurus-theme-openapi-docs/-/docusaurus-theme-openapi-docs-1.1.7.tgz#4850e0c7c9ac1e9f6cb289e61b719c4a5e21935d" + integrity sha512-8UxAmH6SzMS1sQ4cbP1cCPRC1CEY3bhL5yWKqcRbrszOKknLpITdd+bLA5GvCCCqIt18elW8za+7zdzkMdObcg== + dependencies: + "@docusaurus/theme-common" "2.0.1" + "@mdx-js/react" "^1.6.21" + "@paloaltonetworks/postman-code-generators" "1.1.5-hotfix.5" + "@paloaltonetworks/postman-collection" "^4.1.0" + "@reduxjs/toolkit" "^1.7.1" + buffer "^6.0.3" + clsx "^1.1.1" + crypto-js "^4.1.1" + docusaurus-plugin-openapi-docs "^1.1.6" + immer "^9.0.7" + lodash "^4.17.20" + process "^0.11.10" + react-live "^3.1.1" + react-magic-dropzone "^1.0.1" + react-markdown "^8.0.1" + react-redux "^7.2.0" + redux-devtools-extension "^2.13.8" + webpack "^5.61.0" + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +domutils@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" + integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.1" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +duplexer3@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== + +duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.4.202: + version "1.4.217" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.217.tgz#f1f51b319435f4c1587a850806a0dfebe9774598" + integrity sha512-iX8GbAMij7cOtJPZo02CClpaPMWjvN5meqXiJXkBgwvraNWTNH0Z7F9tkznI34JRPtWASoPM/xWamq3oNb49GA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +emoticon@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-3.2.0.tgz#c008ca7d7620fac742fe1bf4af8ff8fed154ae7f" + integrity sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^5.10.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6" + integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^4.2.0, entities@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.3.1.tgz#c34062a94c865c322f9d67b4384e4169bcede6a4" + integrity sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-module-lexer@^0.9.0: + version "0.9.3" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" + integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== + +es6-promise@^3.2.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" + integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + +escape-html@^1.0.3, escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eta@^1.12.3: + version "1.12.3" + resolved "https://registry.yarnpkg.com/eta/-/eta-1.12.3.tgz#2982d08adfbef39f9fa50e2fbd42d7337e7338b1" + integrity sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eval@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.8.tgz#2b903473b8cc1d1989b83a1e7923f883eb357f85" + integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw== + dependencies: + "@types/node" "*" + require-like ">= 0.1.1" + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +express@^4.17.3: + version "4.18.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" + integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.0" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.10.3" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.11, fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-safe-stringify@^2.0.7, fast-safe-stringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + +fast-url-parser@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" + integrity sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ== + dependencies: + punycode "^1.3.2" + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fbemitter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" + integrity sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw== + dependencies: + fbjs "^3.0.0" + +fbjs-css-vars@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== + +fbjs@^3.0.0, fbjs@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.4.tgz#e1871c6bd3083bac71ff2da868ad5067d37716c6" + integrity sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ== + dependencies: + cross-fetch "^3.1.5" + fbjs-css-vars "^1.0.0" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.30" + +feed@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/feed/-/feed-4.2.2.tgz#865783ef6ed12579e2c44bbef3c9113bc4956a7e" + integrity sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ== + dependencies: + xml-js "^1.6.11" + +file-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +file-type@3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" + integrity sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA== + +filesize@^8.0.6: + version "8.0.7" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" + integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flux@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/flux/-/flux-4.0.3.tgz#573b504a24982c4768fdfb59d8d2ea5637d72ee7" + integrity sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw== + dependencies: + fbemitter "^3.0.0" + fbjs "^3.0.1" + +follow-redirects@^1.0.0, follow-redirects@^1.14.7: + version "1.15.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" + integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== + +foreach@^2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.6.tgz#87bcc8a1a0e74000ff2bf9802110708cfb02eb6e" + integrity sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg== + +fork-ts-checker-webpack-plugin@^6.5.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz#4f67183f2f9eb8ba7df7177ce3cf3e75cdafb340" + integrity sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA== + dependencies: + "@babel/code-frame" "^7.8.3" + "@types/json-schema" "^7.0.5" + chalk "^4.1.0" + chokidar "^3.4.2" + cosmiconfig "^6.0.0" + deepmerge "^4.2.2" + fs-extra "^9.0.0" + glob "^7.1.6" + memfs "^3.1.2" + minimatch "^3.0.4" + schema-utils "2.7.0" + semver "^7.3.2" + tapable "^1.0.0" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +formidable@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.0.1.tgz#4310bc7965d185536f9565184dee74fbb75557ff" + integrity sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ== + dependencies: + dezalgo "1.0.3" + hexoid "1.0.0" + once "1.4.0" + qs "6.9.3" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fraction.js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^9.0.0, fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-monkey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" + integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.1, get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +github-slugger@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.4.0.tgz#206eb96cdb22ee56fdc53a28d5a302338463444e" + integrity sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.1.3, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" + integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== + dependencies: + ini "2.0.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^13.1.1: + version "13.1.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515" + integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +graphlib@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/graphlib/-/graphlib-2.1.8.tgz#5761d414737870084c92ec7b5dbcb0592c9d35da" + integrity sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A== + dependencies: + lodash "^4.17.15" + +gray-matter@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" + integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== + dependencies: + js-yaml "^3.13.1" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hast-to-hyperscript@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d" + integrity sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA== + dependencies: + "@types/unist" "^2.0.3" + comma-separated-tokens "^1.0.0" + property-information "^5.3.0" + space-separated-tokens "^1.0.0" + style-to-object "^0.3.0" + unist-util-is "^4.0.0" + web-namespaces "^1.0.0" + +hast-util-from-parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a" + integrity sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA== + dependencies: + "@types/parse5" "^5.0.0" + hastscript "^6.0.0" + property-information "^5.0.0" + vfile "^4.0.0" + vfile-location "^3.2.0" + web-namespaces "^1.0.0" + +hast-util-parse-selector@^2.0.0: + version "2.2.5" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" + integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== + +hast-util-raw@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.0.1.tgz#973b15930b7529a7b66984c98148b46526885977" + integrity sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig== + dependencies: + "@types/hast" "^2.0.0" + hast-util-from-parse5 "^6.0.0" + hast-util-to-parse5 "^6.0.0" + html-void-elements "^1.0.0" + parse5 "^6.0.0" + unist-util-position "^3.0.0" + vfile "^4.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hast-util-to-parse5@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479" + integrity sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ== + dependencies: + hast-to-hyperscript "^9.0.0" + property-information "^5.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hast-util-whitespace@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz#4fc1086467cc1ef5ba20673cb6b03cec3a970f1c" + integrity sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg== + +hastscript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" + integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w== + dependencies: + "@types/hast" "^2.0.0" + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hexoid@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hexoid/-/hexoid-1.0.0.tgz#ad10c6573fb907de23d9ec63a711267d9dc9bc18" + integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== + +history@^4.9.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + +hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" + integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== + +html-minifier-terser@^6.0.2, html-minifier-terser@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== + dependencies: + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" + he "^1.2.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.10.0" + +html-tags@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961" + integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg== + +html-void-elements@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" + integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== + +html-webpack-plugin@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50" + integrity sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw== + dependencies: + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" + tapable "^2.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +htmlparser2@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010" + integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + domutils "^3.0.1" + entities "^4.3.0" + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.5.1: + version "0.5.8" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== + +http-proxy-middleware@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-reasons@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/http-reasons/-/http-reasons-0.1.0.tgz#a953ca670078669dde142ce899401b9d6e85d3b4" + integrity sha512-P6kYh0lKZ+y29T2Gqz+RlC9WBLhKe8kDmcJ+A+611jFfxdPsbMRQ5aNmFRM3lENqFkK+HTTL+tlQviAiv0AbLQ== + +http2-client@^1.2.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/http2-client/-/http2-client-1.3.5.tgz#20c9dc909e3cc98284dd20af2432c524086df181" + integrity sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA== + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +image-size@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.0.2.tgz#d778b6d0ab75b2737c1556dd631652eb963bc486" + integrity sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg== + dependencies: + queue "6.0.2" + +immer@^9.0.7: + version "9.0.15" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.15.tgz#0b9169e5b1d22137aba7d43f8a81a495dd1b62dc" + integrity sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ== + +import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infima@0.2.0-alpha.42: + version "0.2.0-alpha.42" + resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.42.tgz#f6e86a655ad40877c6b4d11b2ede681eb5470aa5" + integrity sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +ini@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + +ini@^1.3.5, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inline-style-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" + integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +ipaddr.js@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" + integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== + +is-alphabetical@1.0.4, is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.9.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" + integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== + dependencies: + has "^1.0.3" + +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-installed-globally@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== + dependencies: + global-dirs "^3.0.0" + is-path-inside "^3.0.2" + +is-npm@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" + integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== + +is-root@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-whitespace-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" + integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== + +is-word-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" + integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +jest-worker@^27.4.5, jest-worker@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +joi@^17.6.0: + version "17.6.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.6.0.tgz#0bb54f2f006c09a96e75ce687957bd04290054b2" + integrity sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.3" + "@sideway/formula" "^3.0.0" + "@sideway/pinpoint" "^2.0.0" + +js-levenshtein@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@3.14.1, js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-pointer@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/json-pointer/-/json-pointer-0.6.2.tgz#f97bd7550be5e9ea901f8c9264c9d436a22a93cd" + integrity sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw== + dependencies: + foreach "^2.0.4" + +json-refs@^3.0.15: + version "3.0.15" + resolved "https://registry.yarnpkg.com/json-refs/-/json-refs-3.0.15.tgz#1089f4acf263a3152c790479485195cd6449e855" + integrity sha512-0vOQd9eLNBL18EGl5yYaO44GhixmImes2wiYn9Z3sag3QnehWrYWlB9AFtMxCL2Bj3fyxgDYkxGFEU/chlYssw== + dependencies: + commander "~4.1.1" + graphlib "^2.1.8" + js-yaml "^3.13.1" + lodash "^4.17.15" + native-promise-only "^0.8.1" + path-loader "^1.0.10" + slash "^3.0.0" + uri-js "^4.2.2" + +json-schema-compare@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/json-schema-compare/-/json-schema-compare-0.2.2.tgz#dd601508335a90c7f4cfadb6b2e397225c908e56" + integrity sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ== + dependencies: + lodash "^4.17.4" + +json-schema-merge-allof@0.8.1, json-schema-merge-allof@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz#ed2828cdd958616ff74f932830a26291789eaaf2" + integrity sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w== + dependencies: + compute-lcm "^1.1.2" + json-schema-compare "^0.2.2" + lodash "^4.17.20" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json5@^2.1.2, json5@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +kleur@^4.0.3: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + +klona@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" + integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== + +latest-version@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +lilconfig@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4" + integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +liquid-json@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/liquid-json/-/liquid-json-0.3.1.tgz#9155a18136d8a6b2615e5f16f9a2448ab6b50eea" + integrity sha512-wUayTU8MS827Dam6MxgD72Ui+KOSF+u/eIqpatOtjnvgJ0+mnDq33uC2M7J0tPK+upe/DpUAuK4JUU89iBoNKQ== + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +loader-utils@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" + integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.0.tgz#bcecc51a7898bee7473d4bc6b845b23af8304d4f" + integrity sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ== + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.curry@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" + integrity sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.flow@^3.3.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" + integrity sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw== + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.uniq@4.5.0, lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash@4.17.21, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +markdown-escapes@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" + integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== + +mdast-squeeze-paragraphs@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97" + integrity sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ== + dependencies: + unist-util-remove "^2.0.0" + +mdast-util-definitions@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2" + integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ== + dependencies: + unist-util-visit "^2.0.0" + +mdast-util-definitions@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-5.1.1.tgz#2c1d684b28e53f84938bb06317944bee8efa79db" + integrity sha512-rQ+Gv7mHttxHOBx2dkF4HWTg+EE+UR78ptQWDylzPKaQuVGdG4HIoY3SrS/pCp80nZ04greFvXbVFHT+uf0JVQ== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + unist-util-visit "^4.0.0" + +mdast-util-from-markdown@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz#84df2924ccc6c995dec1e2368b2b208ad0a76268" + integrity sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + decode-named-character-reference "^1.0.0" + mdast-util-to-string "^3.1.0" + micromark "^3.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-decode-string "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + unist-util-stringify-position "^3.0.0" + uvu "^0.5.0" + +mdast-util-to-hast@10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz#0cfc82089494c52d46eb0e3edb7a4eb2aea021eb" + integrity sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + mdast-util-definitions "^4.0.0" + mdurl "^1.0.0" + unist-builder "^2.0.0" + unist-util-generated "^1.0.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +mdast-util-to-hast@^12.1.0: + version "12.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-12.2.0.tgz#4dbff7ab2b20b8d12fc8fe98bf804d97e7358cbf" + integrity sha512-YDwT5KhGzLgPpSnQhAlK1+WpCW4gsPmNNAxUNMkMTDhxQyPp2eX86WOelnKnLKEvSpfxqJbPbInHFkefXZBhEA== + dependencies: + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + "@types/mdurl" "^1.0.0" + mdast-util-definitions "^5.0.0" + mdurl "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + trim-lines "^3.0.0" + unist-builder "^3.0.0" + unist-util-generated "^2.0.0" + unist-util-position "^4.0.0" + unist-util-visit "^4.0.0" + +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + +mdast-util-to-string@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz#56c506d065fbf769515235e577b5a261552d56e9" + integrity sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA== + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdurl@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memfs@^3.1.2, memfs@^3.4.3: + version "3.4.7" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.7.tgz#e5252ad2242a724f938cb937e3c4f7ceb1f70e5a" + integrity sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw== + dependencies: + fs-monkey "^1.0.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@^1.1.2, methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromark-core-commonmark@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz#edff4c72e5993d93724a3c206970f5a15b0585ad" + integrity sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-factory-destination "^1.0.0" + micromark-factory-label "^1.0.0" + micromark-factory-space "^1.0.0" + micromark-factory-title "^1.0.0" + micromark-factory-whitespace "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-classify-character "^1.0.0" + micromark-util-html-tag-name "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + uvu "^0.5.0" + +micromark-factory-destination@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz#fef1cb59ad4997c496f887b6977aa3034a5a277e" + integrity sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-label@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz#6be2551fa8d13542fcbbac478258fb7a20047137" + integrity sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-factory-space@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz#cebff49968f2b9616c0fcb239e96685cb9497633" + integrity sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-title@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz#7e09287c3748ff1693930f176e1c4a328382494f" + integrity sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-factory-whitespace@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz#e991e043ad376c1ba52f4e49858ce0794678621c" + integrity sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-character@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.1.0.tgz#d97c54d5742a0d9611a68ca0cd4124331f264d86" + integrity sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg== + dependencies: + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-chunked@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz#5b40d83f3d53b84c4c6bce30ed4257e9a4c79d06" + integrity sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-classify-character@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz#cbd7b447cb79ee6997dd274a46fc4eb806460a20" + integrity sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-combine-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz#91418e1e74fb893e3628b8d496085639124ff3d5" + integrity sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-decode-numeric-character-reference@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz#dcc85f13b5bd93ff8d2868c3dba28039d490b946" + integrity sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-decode-string@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz#942252ab7a76dec2dbf089cc32505ee2bc3acf02" + integrity sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-symbol "^1.0.0" + +micromark-util-encode@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz#2c1c22d3800870ad770ece5686ebca5920353383" + integrity sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA== + +micromark-util-html-tag-name@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz#eb227118befd51f48858e879b7a419fc0df20497" + integrity sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA== + +micromark-util-normalize-identifier@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz#4a3539cb8db954bbec5203952bfe8cedadae7828" + integrity sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-resolve-all@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz#a7c363f49a0162e931960c44f3127ab58f031d88" + integrity sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw== + dependencies: + micromark-util-types "^1.0.0" + +micromark-util-sanitize-uri@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz#27dc875397cd15102274c6c6da5585d34d4f12b2" + integrity sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-encode "^1.0.0" + micromark-util-symbol "^1.0.0" + +micromark-util-subtokenize@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz#ff6f1af6ac836f8bfdbf9b02f40431760ad89105" + integrity sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-util-symbol@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz#b90344db62042ce454f351cf0bebcc0a6da4920e" + integrity sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ== + +micromark-util-types@^1.0.0, micromark-util-types@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.0.2.tgz#f4220fdb319205812f99c40f8c87a9be83eded20" + integrity sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w== + +micromark@^3.0.0: + version "3.0.10" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.0.10.tgz#1eac156f0399d42736458a14b0ca2d86190b457c" + integrity sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + decode-named-character-reference "^1.0.0" + micromark-core-commonmark "^1.0.1" + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-combine-extensions "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-encode "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + uvu "^0.5.0" + +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.51.0: + version "1.51.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== + +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== + +mime-format@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mime-format/-/mime-format-2.0.1.tgz#1274876d58bc803332427a515f5f7036e07b9413" + integrity sha512-XxU3ngPbEnrYnNbIX+lYSaYg0M01v6p2ntd2YaFksTu0vayaw5OJvbdRyWs07EYRlLED5qadUZ+xo+XhOvFhwg== + dependencies: + charset "^1.0.0" + +mime-types@2.1.18: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== + dependencies: + mime-db "~1.33.0" + +mime-types@2.1.34: + version "2.1.34" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== + dependencies: + mime-db "1.51.0" + +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mini-create-react-context@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz#072171561bfdc922da08a60c2197a497cc2d1d5e" + integrity sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ== + dependencies: + "@babel/runtime" "^7.12.1" + tiny-warning "^1.0.3" + +mini-css-extract-plugin@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz#9a1251d15f2035c342d99a468ab9da7a0451b71e" + integrity sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg== + dependencies: + schema-utils "^4.0.0" + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimatch@3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +mri@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== + +mrmime@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" + integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== + dependencies: + dns-packet "^5.2.2" + thunky "^1.0.2" + +mustache@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" + integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== + +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +native-promise-only@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/native-promise-only/-/native-promise-only-0.8.1.tgz#20a318c30cb45f71fe7adfbf7b21c99c1472ef11" + integrity sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-emoji@^1.10.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== + dependencies: + lodash "^4.17.21" + +node-fetch-h2@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz#c6188325f9bd3d834020bf0f2d6dc17ced2241ac" + integrity sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg== + dependencies: + http2-client "^1.2.5" + +node-fetch@2.6.7, node-fetch@^2.6.1: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-readfiles@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/node-readfiles/-/node-readfiles-0.2.0.tgz#dbbd4af12134e2e635c245ef93ffcf6f60673a5d" + integrity sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA== + dependencies: + es6-promise "^3.2.1" + +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nprogress@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" + integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +oas-kit-common@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/oas-kit-common/-/oas-kit-common-1.0.8.tgz#6d8cacf6e9097967a4c7ea8bcbcbd77018e1f535" + integrity sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ== + dependencies: + fast-safe-stringify "^2.0.7" + +oas-linter@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/oas-linter/-/oas-linter-3.2.2.tgz#ab6a33736313490659035ca6802dc4b35d48aa1e" + integrity sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ== + dependencies: + "@exodus/schemasafe" "^1.0.0-rc.2" + should "^13.2.1" + yaml "^1.10.0" + +oas-resolver-browser@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/oas-resolver-browser/-/oas-resolver-browser-2.5.2.tgz#d972525a840d7a74ab1aa43e215e9531a99412ba" + integrity sha512-L3ugWyBHOpKLT+lb+pFXCOpk3byh6usis5T9u9mfu92jH5bR6YK8MA2bebUTIjY7I4415PzDeZcmcc+i7X05MA== + dependencies: + node-fetch-h2 "^2.3.0" + oas-kit-common "^1.0.8" + path-browserify "^1.0.1" + reftools "^1.1.6" + yaml "^1.10.0" + yargs "^15.3.1" + +oas-resolver@^2.5.6: + version "2.5.6" + resolved "https://registry.yarnpkg.com/oas-resolver/-/oas-resolver-2.5.6.tgz#10430569cb7daca56115c915e611ebc5515c561b" + integrity sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ== + dependencies: + node-fetch-h2 "^2.3.0" + oas-kit-common "^1.0.8" + reftools "^1.1.9" + yaml "^1.10.0" + yargs "^17.0.1" + +oas-schema-walker@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz#74c3cd47b70ff8e0b19adada14455b5d3ac38a22" + integrity sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ== + +oas-validator@^5.0.8: + version "5.0.8" + resolved "https://registry.yarnpkg.com/oas-validator/-/oas-validator-5.0.8.tgz#387e90df7cafa2d3ffc83b5fb976052b87e73c28" + integrity sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw== + dependencies: + call-me-maybe "^1.0.1" + oas-kit-common "^1.0.8" + oas-linter "^3.2.2" + oas-resolver "^2.5.6" + oas-schema-walker "^1.1.5" + reftools "^1.1.9" + should "^13.2.1" + yaml "^1.10.0" + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.3.tgz#d36b7700ddf0019abb6b1df1bb13f6445f79051f" + integrity sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@1.4.0, once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.0.9, open@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +opener@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== + dependencies: + "@types/retry" "0.12.0" + retry "^0.13.1" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-numeric-range@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3" + integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== + +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" + +parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parse5@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.0.0.tgz#51f74a5257f5fcc536389e8c2d0b3802e1bfa91a" + integrity sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g== + dependencies: + entities "^4.3.0" + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +path-browserify@1.0.1, path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-is-inside@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-loader@^1.0.10: + version "1.0.12" + resolved "https://registry.yarnpkg.com/path-loader/-/path-loader-1.0.12.tgz#c5a99d464da27cfde5891d158a68807abbdfa5f5" + integrity sha512-n7oDG8B+k/p818uweWrOixY9/Dsr89o2TkCm6tOTex3fpdo2+BFDgR+KpB37mGKBRsBAlR8CIJMFN0OEy/7hIQ== + dependencies: + native-promise-only "^0.8.1" + superagent "^7.1.6" + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-to-regexp@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45" + integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== + +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +path@0.12.7: + version "0.12.7" + resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f" + integrity sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q== + dependencies: + process "^0.11.1" + util "^0.10.3" + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pirates@^4.0.1: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + +postcss-calc@^8.2.3: + version "8.2.4" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" + integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== + dependencies: + postcss-selector-parser "^6.0.9" + postcss-value-parser "^4.2.0" + +postcss-colormin@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.0.tgz#3cee9e5ca62b2c27e84fce63affc0cfb5901956a" + integrity sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + colord "^2.9.1" + postcss-value-parser "^4.2.0" + +postcss-convert-values@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz#31586df4e184c2e8890e8b34a0b9355313f503ab" + integrity sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g== + dependencies: + browserslist "^4.20.3" + postcss-value-parser "^4.2.0" + +postcss-discard-comments@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" + integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== + +postcss-discard-duplicates@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" + integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== + +postcss-discard-empty@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" + integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== + +postcss-discard-overridden@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" + integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== + +postcss-discard-unused@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz#8974e9b143d887677304e558c1166d3762501142" + integrity sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-loader@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.0.1.tgz#4c883cc0a1b2bfe2074377b7a74c1cd805684395" + integrity sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ== + dependencies: + cosmiconfig "^7.0.0" + klona "^2.0.5" + semver "^7.3.7" + +postcss-merge-idents@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz#7753817c2e0b75d0853b56f78a89771e15ca04a1" + integrity sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-merge-longhand@^5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz#f378a8a7e55766b7b644f48e5d8c789ed7ed51ce" + integrity sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^5.1.0" + +postcss-merge-rules@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz#7049a14d4211045412116d79b751def4484473a5" + integrity sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + cssnano-utils "^3.1.0" + postcss-selector-parser "^6.0.5" + +postcss-minify-font-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" + integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-minify-gradients@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" + integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== + dependencies: + colord "^2.9.1" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-params@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz#ac41a6465be2db735099bbd1798d85079a6dc1f9" + integrity sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg== + dependencies: + browserslist "^4.16.6" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-selectors@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" + integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-normalize-charset@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" + integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== + +postcss-normalize-display-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" + integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-positions@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" + integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-repeat-style@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" + integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-string@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" + integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-timing-functions@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" + integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-unicode@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz#3d23aede35e160089a285e27bf715de11dc9db75" + integrity sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ== + dependencies: + browserslist "^4.16.6" + postcss-value-parser "^4.2.0" + +postcss-normalize-url@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" + integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== + dependencies: + normalize-url "^6.0.1" + postcss-value-parser "^4.2.0" + +postcss-normalize-whitespace@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" + integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-ordered-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" + integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-reduce-idents@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz#c89c11336c432ac4b28792f24778859a67dfba95" + integrity sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-reduce-initial@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz#fc31659ea6e85c492fb2a7b545370c215822c5d6" + integrity sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + +postcss-reduce-transforms@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" + integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: + version "6.0.10" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" + integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-sort-media-queries@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-4.2.1.tgz#a99bae69ef1098ee3b64a5fa94d258ec240d0355" + integrity sha512-9VYekQalFZ3sdgcTjXMa0dDjsfBVHXlraYJEMiOJ/2iMmI2JGCMavP16z3kWOaRu8NSaJCTgVpB/IVpH5yT9YQ== + dependencies: + sort-css-media-queries "2.0.4" + +postcss-svgo@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" + integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== + dependencies: + postcss-value-parser "^4.2.0" + svgo "^2.7.0" + +postcss-unique-selectors@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" + integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss-zindex@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-5.1.0.tgz#4a5c7e5ff1050bd4c01d95b1847dfdcc58a496ff" + integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== + +postcss@^8.3.11, postcss@^8.4.13, postcss@^8.4.14, postcss@^8.4.7: + version "8.4.16" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.16.tgz#33a1d675fac39941f5f445db0de4db2b6e01d43c" + integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +postman-url-encoder@3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/postman-url-encoder/-/postman-url-encoder-3.0.5.tgz#af2efee3bb7644e2b059d8a78bc8070fae0467a5" + integrity sha512-jOrdVvzUXBC7C+9gkIkpDJ3HIxOHTIqjpQ4C1EMt1ZGeMvSEpbFCKq23DEfgsj46vMnDgyQf+1ZLp2Wm+bKSsA== + dependencies: + punycode "^2.1.1" + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== + +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== + dependencies: + lodash "^4.17.20" + renderkid "^3.0.0" + +pretty-time@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" + integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== + +prism-react-renderer@^1.3.1, prism-react-renderer@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz#786bb69aa6f73c32ba1ee813fbe17a0115435085" + integrity sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg== + +prismjs@^1.28.0: + version "1.28.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.28.0.tgz#0d8f561fa0f7cf6ebca901747828b149147044b6" + integrity sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.1, process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +prompts@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types@^15.0.0, prop-types@^15.6.2, prop-types@^15.7.2: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +property-information@^5.0.0, property-information@^5.3.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" + integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== + dependencies: + xtend "^4.0.0" + +property-information@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.1.1.tgz#5ca85510a3019726cb9afed4197b7b8ac5926a22" + integrity sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w== + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +pupa@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== + dependencies: + escape-goat "^2.0.0" + +pure-color@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" + integrity sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA== + +qs@6.10.3: + version "6.10.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" + integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== + dependencies: + side-channel "^1.0.4" + +qs@6.9.3: + version "6.9.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.3.tgz#bfadcd296c2d549f1dffa560619132c977f5008e" + integrity sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw== + +qs@^6.10.3: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +queue@6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65" + integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== + dependencies: + inherits "~2.0.3" + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@1.2.8, rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-base16-styling@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" + integrity sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ== + dependencies: + base16 "^1.0.0" + lodash.curry "^4.0.1" + lodash.flow "^3.3.0" + pure-color "^1.2.0" + +react-dev-utils@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73" + integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ== + dependencies: + "@babel/code-frame" "^7.16.0" + address "^1.1.2" + browserslist "^4.18.1" + chalk "^4.1.2" + cross-spawn "^7.0.3" + detect-port-alt "^1.1.6" + escape-string-regexp "^4.0.0" + filesize "^8.0.6" + find-up "^5.0.0" + fork-ts-checker-webpack-plugin "^6.5.0" + global-modules "^2.0.0" + globby "^11.0.4" + gzip-size "^6.0.0" + immer "^9.0.7" + is-root "^2.1.0" + loader-utils "^3.2.0" + open "^8.4.0" + pkg-up "^3.1.0" + prompts "^2.4.2" + react-error-overlay "^6.0.11" + recursive-readdir "^2.2.2" + shell-quote "^1.7.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +react-dom@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.2" + +react-error-overlay@^6.0.11: + version "6.0.11" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" + integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== + +react-fast-compare@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" + integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== + +react-helmet-async@*, react-helmet-async@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.3.0.tgz#7bd5bf8c5c69ea9f02f6083f14ce33ef545c222e" + integrity sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg== + dependencies: + "@babel/runtime" "^7.12.5" + invariant "^2.2.4" + prop-types "^15.7.2" + react-fast-compare "^3.2.0" + shallowequal "^1.1.0" + +react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +react-json-view@^1.21.3: + version "1.21.3" + resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475" + integrity sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw== + dependencies: + flux "^4.0.1" + react-base16-styling "^0.6.0" + react-lifecycles-compat "^3.0.4" + react-textarea-autosize "^8.3.2" + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-live@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/react-live/-/react-live-3.1.1.tgz#88fe2f051d953a5602e0303e963e380652a6d44f" + integrity sha512-bPjrk7jCQ7dk8W3lx+/AAcn66TFRzTNIWsVa4mWqsiwIgUjaNqzFZZIuq2kY9UlAix8x63egsEFPX6dkno92Fg== + dependencies: + prism-react-renderer "^1.3.1" + sucrase "^3.21.0" + use-editable "^2.3.3" + +react-loadable-ssr-addon-v5-slorber@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz#2cdc91e8a744ffdf9e3556caabeb6e4278689883" + integrity sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A== + dependencies: + "@babel/runtime" "^7.10.3" + +react-magic-dropzone@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/react-magic-dropzone/-/react-magic-dropzone-1.0.1.tgz#bfd25b77b57e7a04aaef0a28910563b707ee54df" + integrity sha512-0BIROPARmXHpk4AS3eWBOsewxoM5ndk2psYP/JmbCq8tz3uR2LIV1XiroZ9PKrmDRMctpW+TvsBCtWasuS8vFA== + +react-markdown@^8.0.1: + version "8.0.3" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-8.0.3.tgz#e8aba0d2f5a1b2124d476ee1fff9448a2f57e4b3" + integrity sha512-We36SfqaKoVNpN1QqsZwWSv/OZt5J15LNgTLWynwAN5b265hrQrsjMtlRNwUvS+YyR3yDM8HpTNc4pK9H/Gc0A== + dependencies: + "@types/hast" "^2.0.0" + "@types/prop-types" "^15.0.0" + "@types/unist" "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-whitespace "^2.0.0" + prop-types "^15.0.0" + property-information "^6.0.0" + react-is "^18.0.0" + remark-parse "^10.0.0" + remark-rehype "^10.0.0" + space-separated-tokens "^2.0.0" + style-to-object "^0.3.0" + unified "^10.0.0" + unist-util-visit "^4.0.0" + vfile "^5.0.0" + +react-redux@^7.2.0: + version "7.2.8" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.8.tgz#a894068315e65de5b1b68899f9c6ee0923dd28de" + integrity sha512-6+uDjhs3PSIclqoCk0kd6iX74gzrGc3W5zcAjbrFgEdIjRSQObdIwfx80unTkVUYvbQ95Y8Av3OvFHq1w5EOUw== + dependencies: + "@babel/runtime" "^7.15.4" + "@types/react-redux" "^7.1.20" + hoist-non-react-statics "^3.3.2" + loose-envify "^1.4.0" + prop-types "^15.7.2" + react-is "^17.0.2" + +react-router-config@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-5.1.1.tgz#0f4263d1a80c6b2dc7b9c1902c9526478194a988" + integrity sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg== + dependencies: + "@babel/runtime" "^7.1.2" + +react-router-dom@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.3.tgz#8779fc28e6691d07afcaf98406d3812fe6f11199" + integrity sha512-Ov0tGPMBgqmbu5CDmN++tv2HQ9HlWDuWIIqn4b88gjlAN5IHI+4ZUZRcpz9Hl0azFIwihbLDYw1OiHGRo7ZIng== + dependencies: + "@babel/runtime" "^7.12.13" + history "^4.9.0" + loose-envify "^1.3.1" + prop-types "^15.6.2" + react-router "5.3.3" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-router@5.3.3, react-router@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.3.tgz#8e3841f4089e728cf82a429d92cdcaa5e4a3a288" + integrity sha512-mzQGUvS3bM84TnbtMYR8ZjKnuPJ71IjSzR+DE6UkUqvN4czWIqEs17yLL8xkAycv4ev0AiN+IGrWu88vJs/p2w== + dependencies: + "@babel/runtime" "^7.12.13" + history "^4.9.0" + hoist-non-react-statics "^3.1.0" + loose-envify "^1.3.1" + mini-create-react-context "^0.4.0" + path-to-regexp "^1.7.0" + prop-types "^15.6.2" + react-is "^16.6.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-textarea-autosize@^8.3.2: + version "8.3.4" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz#270a343de7ad350534141b02c9cb78903e553524" + integrity sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ== + dependencies: + "@babel/runtime" "^7.10.2" + use-composed-ref "^1.3.0" + use-latest "^1.2.1" + +react@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +readable-stream@^2.0.1: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +reading-time@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/reading-time/-/reading-time-1.5.0.tgz#d2a7f1b6057cb2e169beaf87113cc3411b5bc5bb" + integrity sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg== + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + +recursive-readdir@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + dependencies: + minimatch "3.0.4" + +redux-devtools-extension@^2.13.8: + version "2.13.9" + resolved "https://registry.yarnpkg.com/redux-devtools-extension/-/redux-devtools-extension-2.13.9.tgz#6b764e8028b507adcb75a1cae790f71e6be08ae7" + integrity sha512-cNJ8Q/EtjhQaZ71c8I9+BPySIBVEKssbPpskBfsXqb8HJ002A3KRVHfeRzwRo6mGPqsm7XuHTqNSNeS1Khig0A== + +redux-thunk@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.1.tgz#0dd8042cf47868f4b29699941de03c9301a75714" + integrity sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q== + +redux@^4.0.0, redux@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.0.tgz#46f10d6e29b6666df758780437651eeb2b969f13" + integrity sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA== + dependencies: + "@babel/runtime" "^7.9.2" + +reftools@^1.1.6, reftools@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/reftools/-/reftools-1.1.9.tgz#e16e19f662ccd4648605312c06d34e5da3a2b77e" + integrity sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w== + +regenerate-unicode-properties@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" + integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regenerator-transform@^0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" + integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== + dependencies: + "@babel/runtime" "^7.8.4" + +regexpu-core@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.1.0.tgz#2f8504c3fd0ebe11215783a41541e21c79942c6d" + integrity sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.0.1" + regjsgen "^0.6.0" + regjsparser "^0.8.2" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + +registry-auth-token@^4.0.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.2.tgz#f02d49c3668884612ca031419491a13539e21fac" + integrity sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg== + dependencies: + rc "1.2.8" + +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + +regjsgen@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" + integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== + +regjsparser@^0.8.2: + version "0.8.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" + integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== + dependencies: + jsesc "~0.5.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +remark-emoji@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-2.2.0.tgz#1c702090a1525da5b80e15a8f963ef2c8236cac7" + integrity sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w== + dependencies: + emoticon "^3.2.0" + node-emoji "^1.10.0" + unist-util-visit "^2.0.3" + +remark-footnotes@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-2.0.0.tgz#9001c4c2ffebba55695d2dd80ffb8b82f7e6303f" + integrity sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ== + +remark-mdx@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.6.22.tgz#06a8dab07dcfdd57f3373af7f86bd0e992108bbd" + integrity sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ== + dependencies: + "@babel/core" "7.12.9" + "@babel/helper-plugin-utils" "7.10.4" + "@babel/plugin-proposal-object-rest-spread" "7.12.1" + "@babel/plugin-syntax-jsx" "7.12.1" + "@mdx-js/util" "1.6.22" + is-alphabetical "1.0.4" + remark-parse "8.0.3" + unified "9.2.0" + +remark-parse@8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.3.tgz#9c62aa3b35b79a486454c690472906075f40c7e1" + integrity sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q== + dependencies: + ccount "^1.0.0" + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^2.0.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^2.0.0" + vfile-location "^3.0.0" + xtend "^4.0.1" + +remark-parse@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-10.0.1.tgz#6f60ae53edbf0cf38ea223fe643db64d112e0775" + integrity sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-from-markdown "^1.0.0" + unified "^10.0.0" + +remark-rehype@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-10.1.0.tgz#32dc99d2034c27ecaf2e0150d22a6dcccd9a6279" + integrity sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw== + dependencies: + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + mdast-util-to-hast "^12.1.0" + unified "^10.0.0" + +remark-squeeze-paragraphs@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz#76eb0e085295131c84748c8e43810159c5653ead" + integrity sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw== + dependencies: + mdast-squeeze-paragraphs "^4.0.0" + +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" + +repeat-string@^1.5.4: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +"require-like@>= 0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" + integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +reselect@^4.1.5: + version "4.1.6" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.6.tgz#19ca2d3d0b35373a74dc1c98692cdaffb6602656" + integrity sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + +resolve@^1.1.6, resolve@^1.14.2, resolve@^1.3.2: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== + dependencies: + lowercase-keys "^1.0.0" + +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rtl-detect@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/rtl-detect/-/rtl-detect-1.0.4.tgz#40ae0ea7302a150b96bc75af7d749607392ecac6" + integrity sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ== + +rtlcss@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-3.5.0.tgz#c9eb91269827a102bac7ae3115dd5d049de636c3" + integrity sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A== + dependencies: + find-up "^5.0.0" + picocolors "^1.0.0" + postcss "^8.3.11" + strip-json-comments "^3.1.1" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.5.4: + version "7.5.6" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc" + integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== + dependencies: + tslib "^2.1.0" + +sade@^1.7.3: + version "1.8.1" + resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" + integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== + dependencies: + mri "^1.1.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + +schema-utils@^2.6.5: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" + integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.8.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.0.0" + +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== + +selfsigned@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.0.1.tgz#8b2df7fa56bf014d19b6007655fff209c0ef0a56" + integrity sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ== + dependencies: + node-forge "^1" + +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +semver@^5.4.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +serve-handler@^6.1.3: + version "6.1.3" + resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.3.tgz#1bf8c5ae138712af55c758477533b9117f6435e8" + integrity sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w== + dependencies: + bytes "3.0.0" + content-disposition "0.5.2" + fast-url-parser "1.1.3" + mime-types "2.1.18" + minimatch "3.0.4" + path-is-inside "1.0.2" + path-to-regexp "2.2.1" + range-parser "1.2.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" + integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== + +shelljs@0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" + integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +shelljs@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +should-equal@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3" + integrity sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA== + dependencies: + should-type "^1.4.0" + +should-format@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/should-format/-/should-format-3.0.3.tgz#9bfc8f74fa39205c53d38c34d717303e277124f1" + integrity sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q== + dependencies: + should-type "^1.3.0" + should-type-adaptors "^1.0.1" + +should-type-adaptors@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz#401e7f33b5533033944d5cd8bf2b65027792e27a" + integrity sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA== + dependencies: + should-type "^1.3.0" + should-util "^1.0.0" + +should-type@^1.3.0, should-type@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3" + integrity sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ== + +should-util@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/should-util/-/should-util-1.0.1.tgz#fb0d71338f532a3a149213639e2d32cbea8bcb28" + integrity sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g== + +should@^13.2.1: + version "13.2.3" + resolved "https://registry.yarnpkg.com/should/-/should-13.2.3.tgz#96d8e5acf3e97b49d89b51feaa5ae8d07ef58f10" + integrity sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ== + dependencies: + should-equal "^2.0.0" + should-format "^3.0.3" + should-type "^1.4.0" + should-type-adaptors "^1.0.1" + should-util "^1.0.0" + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sirv@^1.0.7: + version "1.0.19" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" + integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== + dependencies: + "@polka/url" "^1.0.0-next.20" + mrmime "^1.0.0" + totalist "^1.0.0" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +sitemap@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-7.1.1.tgz#eeed9ad6d95499161a3eadc60f8c6dce4bea2bef" + integrity sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg== + dependencies: + "@types/node" "^17.0.5" + "@types/sax" "^1.2.1" + arg "^5.0.0" + sax "^1.2.4" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +slugify@^1.6.5: + version "1.6.5" + resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.5.tgz#c8f5c072bf2135b80703589b39a3d41451fbe8c8" + integrity sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ== + +sockjs@^0.3.24: + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== + dependencies: + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" + +sort-css-media-queries@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.0.4.tgz#b2badfa519cb4a938acbc6d3aaa913d4949dc908" + integrity sha512-PAIsEK/XupCQwitjv7XxoMvYhT7EAfyzI3hsy/MyDgTvc+Ft55ctdkctJLOy6cQejaIC+zjpUL4djFVm2ivOOw== + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +space-separated-tokens@^1.0.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" + integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== + +space-separated-tokens@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz#43193cec4fb858a2ce934b7f98b7f2c18107098b" + integrity sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +state-toggle@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" + integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +std-env@^3.0.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.2.1.tgz#00e260ec3901333537125f81282b9296b00d7304" + integrity sha512-D/uYFWkI/31OrnKmXZqGAGK5GbQRPp/BWA1nuITcc6ICblhhuQUPHS5E2GSCVS7Hwhf4ciq8qsATwBUxv+lI6w== + +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" + +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +style-to-object@0.3.0, style-to-object@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46" + integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== + dependencies: + inline-style-parser "0.1.1" + +stylehacks@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.0.tgz#a40066490ca0caca04e96c6b02153ddc39913520" + integrity sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q== + dependencies: + browserslist "^4.16.6" + postcss-selector-parser "^6.0.4" + +sucrase@^3.21.0: + version "3.25.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.25.0.tgz#6dffa34e614b3347877507a4380cc4f022b7b7aa" + integrity sha512-WxTtwEYXSmZArPGStGBicyRsg5TBEFhT5b7N+tF+zauImP0Acy+CoUK0/byJ8JNPK/5lbpWIVuFagI4+0l85QQ== + dependencies: + commander "^4.0.0" + glob "7.1.6" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + +superagent@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-7.1.6.tgz#64f303ed4e4aba1e9da319f134107a54cacdc9c6" + integrity sha512-gZkVCQR1gy/oUXr+kxJMLDjla434KmSOKbx5iGD30Ql+AkJQ/YlPKECJy2nhqOsHLjGHzoDTXNSjhnvWhzKk7g== + dependencies: + component-emitter "^1.3.0" + cookiejar "^2.1.3" + debug "^4.3.4" + fast-safe-stringify "^2.1.1" + form-data "^4.0.0" + formidable "^2.0.1" + methods "^1.1.2" + mime "2.6.0" + qs "^6.10.3" + readable-stream "^3.6.0" + semver "^7.3.7" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-parser@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +svgo@^2.7.0, svgo@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" + integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + picocolors "^1.0.0" + stable "^0.1.8" + +swagger2openapi@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/swagger2openapi/-/swagger2openapi-7.0.8.tgz#12c88d5de776cb1cbba758994930f40ad0afac59" + integrity sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g== + dependencies: + call-me-maybe "^1.0.1" + node-fetch "^2.6.1" + node-fetch-h2 "^2.3.0" + node-readfiles "^0.2.0" + oas-kit-common "^1.0.8" + oas-resolver "^2.5.6" + oas-schema-walker "^1.1.5" + oas-validator "^5.0.8" + reftools "^1.1.9" + yaml "^1.10.0" + yargs "^17.0.1" + +tapable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.3: + version "5.3.4" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.4.tgz#f4d31e265883d20fda3ca9c0fc6a53f173ae62e3" + integrity sha512-SmnkUhBxLDcBfTIeaq+ZqJXLVEyXxSaNcCeSezECdKjfkMrTTnPvapBILylYwyEvHFZAn2cJ8dtiXel5XnfOfQ== + dependencies: + "@jridgewell/trace-mapping" "^0.3.14" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" + terser "^5.14.1" + +terser@^5.10.0, terser@^5.14.1: + version "5.14.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" + integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +tiny-invariant@^1.0.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9" + integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg== + +tiny-warning@^1.0.0, tiny-warning@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +totalist@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" + integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== + +trim-trailing-lines@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" + integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ== + +trough@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== + +trough@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/trough/-/trough-2.1.0.tgz#0f7b511a4fde65a46f18477ab38849b22c554876" + integrity sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g== + +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^2.5.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.18.0.tgz#fdef3a74e0a9e68ebe46054836650fb91ac3881e" + integrity sha512-pRS+/yrW5TjPPHNOvxhbNZexr2bS63WjrMU8a+VzEBhUi9Tz1pZeD+vQz3ut0svZ46P+SRqMEPnJmk2XnvNzTw== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +ua-parser-js@^0.7.30: + version "0.7.31" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6" + integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ== + +unherit@^1.0.4: + version "1.1.3" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" + integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== + dependencies: + inherits "^2.0.0" + xtend "^4.0.0" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + +unified@9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" + integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +unified@^10.0.0: + version "10.1.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df" + integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q== + dependencies: + "@types/unist" "^2.0.0" + bail "^2.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^4.0.0" + trough "^2.0.0" + vfile "^5.0.0" + +unified@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" + integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +unist-builder@2.0.3, unist-builder@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" + integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== + +unist-builder@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-3.0.0.tgz#728baca4767c0e784e1e64bb44b5a5a753021a04" + integrity sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-generated@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b" + integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== + +unist-util-generated@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-2.0.0.tgz#86fafb77eb6ce9bfa6b663c3f5ad4f8e56a60113" + integrity sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw== + +unist-util-is@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" + integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== + +unist-util-is@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.1.1.tgz#e8aece0b102fa9bc097b0fef8f870c496d4a6236" + integrity sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ== + +unist-util-position@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" + integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== + +unist-util-position@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.3.tgz#5290547b014f6222dff95c48d5c3c13a88fadd07" + integrity sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-remove-position@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc" + integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA== + dependencies: + unist-util-visit "^2.0.0" + +unist-util-remove@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.1.0.tgz#b0b4738aa7ee445c402fda9328d604a02d010588" + integrity sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q== + dependencies: + unist-util-is "^4.0.0" + +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== + dependencies: + "@types/unist" "^2.0.2" + +unist-util-stringify-position@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz#5c6aa07c90b1deffd9153be170dce628a869a447" + integrity sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-visit-parents@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" + integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + +unist-util-visit-parents@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz#44bbc5d25f2411e7dfc5cecff12de43296aa8521" + integrity sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^5.0.0" + +unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" + integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + +unist-util-visit@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-4.1.0.tgz#f41e407a9e94da31594e6b1c9811c51ab0b3d8f5" + integrity sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^5.0.0" + unist-util-visit-parents "^5.0.0" + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" + integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +update-notifier@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" + integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== + dependencies: + boxen "^5.0.0" + chalk "^4.1.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.4.0" + is-npm "^5.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.1.0" + pupa "^2.1.1" + semver "^7.3.4" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-loader@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" + integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== + dependencies: + loader-utils "^2.0.0" + mime-types "^2.1.27" + schema-utils "^3.0.0" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== + dependencies: + prepend-http "^2.0.0" + +url-template@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/url-template/-/url-template-3.1.0.tgz#d9be13d342ad31fcedc3c0bd21405fd141d02ff1" + integrity sha512-vB/eHWttzhN+NZzk9FcQB2h1cSEgb7zDYyvyxPhw02LYw7YqIzO+w1AqkcKvZ51gPH8o4+nyiWve/xuQqMdJZw== + +use-composed-ref@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz#3d8104db34b7b264030a9d916c5e94fbe280dbda" + integrity sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ== + +use-editable@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/use-editable/-/use-editable-2.3.3.tgz#a292fe9ba4c291cd28d1cc2728c75a5fc8d9a33f" + integrity sha512-7wVD2JbfAFJ3DK0vITvXBdpd9JAz5BcKAAolsnLBuBn6UDDwBGuCIAGvR3yA2BNKm578vAMVHFCWaOcA+BhhiA== + +use-isomorphic-layout-effect@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" + integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== + +use-latest@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.1.tgz#d13dfb4b08c28e3e33991546a2cee53e14038cf2" + integrity sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw== + dependencies: + use-isomorphic-layout-effect "^1.1.1" + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util@^0.10.3: + version "0.10.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== + dependencies: + inherits "2.0.3" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== + +utility-types@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" + integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@8.3.2, uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uvu@^0.5.0: + version "0.5.6" + resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df" + integrity sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA== + dependencies: + dequal "^2.0.0" + diff "^5.0.0" + kleur "^4.0.3" + sade "^1.7.3" + +validate.io-array@^1.0.3: + version "1.0.6" + resolved "https://registry.yarnpkg.com/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d" + integrity sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg== + +validate.io-function@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/validate.io-function/-/validate.io-function-1.0.2.tgz#343a19802ed3b1968269c780e558e93411c0bad7" + integrity sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ== + +validate.io-integer-array@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz#2cabde033293a6bcbe063feafe91eaf46b13a089" + integrity sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA== + dependencies: + validate.io-array "^1.0.3" + validate.io-integer "^1.0.4" + +validate.io-integer@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/validate.io-integer/-/validate.io-integer-1.0.5.tgz#168496480b95be2247ec443f2233de4f89878068" + integrity sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ== + dependencies: + validate.io-number "^1.0.3" + +validate.io-number@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/validate.io-number/-/validate.io-number-1.0.3.tgz#f63ffeda248bf28a67a8d48e0e3b461a1665baf8" + integrity sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg== + +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vfile-location@^3.0.0, vfile-location@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c" + integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== + +vfile-message@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" + integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^2.0.0" + +vfile-message@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.2.tgz#a2908f64d9e557315ec9d7ea3a910f658ac05f7d" + integrity sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^3.0.0" + +vfile@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" + integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^2.0.0" + vfile-message "^2.0.0" + +vfile@^5.0.0: + version "5.3.4" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.4.tgz#bbb8c96b956693bbf70b2c67fdb5781dff769b93" + integrity sha512-KI+7cnst03KbEyN1+JE504zF5bJBZa+J+CrevLeyIMq0aPU681I2rQ5p4PlnQ6exFtWiUrg26QUdFMnAKR6PIw== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^3.0.0" + vfile-message "^3.0.0" + +wait-on@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-6.0.1.tgz#16bbc4d1e4ebdd41c5b4e63a2e16dbd1f4e5601e" + integrity sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw== + dependencies: + axios "^0.25.0" + joi "^17.6.0" + lodash "^4.17.21" + minimist "^1.2.5" + rxjs "^7.5.4" + +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +web-namespaces@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" + integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webpack-bundle-analyzer@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz#1b0eea2947e73528754a6f9af3e91b2b6e0f79d5" + integrity sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ== + dependencies: + acorn "^8.0.4" + acorn-walk "^8.0.0" + chalk "^4.1.0" + commander "^7.2.0" + gzip-size "^6.0.0" + lodash "^4.17.20" + opener "^1.5.2" + sirv "^1.0.7" + ws "^7.3.1" + +webpack-dev-middleware@^5.3.1: + version "5.3.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" + integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== + dependencies: + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@^4.9.3: + version "4.10.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.10.0.tgz#de270d0009eba050546912be90116e7fd740a9ca" + integrity sha512-7dezwAs+k6yXVFZ+MaL8VnE+APobiO3zvpp3rBHe/HmWQ+avwh0Q3d0xxacOiBybZZ3syTZw9HXzpa3YNbAZDQ== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.0.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.1" + ws "^8.4.2" + +webpack-merge@^5.8.0: + version "5.8.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" + integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^3.2.2, webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5.61.0, webpack@^5.73.0: + version "5.74.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.74.0.tgz#02a5dac19a17e0bb47093f2be67c695102a55980" + integrity sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.7.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.10.0" + es-module-lexer "^0.9.0" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +webpackbar@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-5.0.2.tgz#d3dd466211c73852741dfc842b7556dcbc2b0570" + integrity sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ== + dependencies: + chalk "^4.1.0" + consola "^2.15.3" + pretty-time "^1.1.0" + std-env "^3.0.1" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== + +which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +widest-line@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2" + integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== + dependencies: + string-width "^5.0.1" + +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.0.1.tgz#2101e861777fec527d0ea90c57c6b03aac56a5b3" + integrity sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^7.3.1: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +ws@^8.4.2: + version "8.8.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" + integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== + +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + +xml-js@^1.6.11: + version "1.6.11" + resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9" + integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g== + dependencies: + sax "^1.2.4" + +xtend@^4.0.0, xtend@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml-ast-parser@0.0.43: + version "0.0.43" + resolved "https://registry.yarnpkg.com/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz#e8a23e6fb4c38076ab92995c5dca33f3d3d7c9bb" + integrity sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A== + +yaml@1.10.2, yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^21.0.0: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^15.3.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yargs@^17.0.1: + version "17.5.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" + integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zwitch@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" + integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==